@codefluss/sandbox 0.0.1-alpha.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 (233) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +413 -0
  3. package/dist/__tests__/auto-resize-script.test.d.ts +2 -0
  4. package/dist/__tests__/auto-resize-script.test.d.ts.map +1 -0
  5. package/dist/__tests__/auto-resize-script.test.js +49 -0
  6. package/dist/__tests__/auto-resize-script.test.js.map +1 -0
  7. package/dist/__tests__/sandbox-component.test.d.ts +2 -0
  8. package/dist/__tests__/sandbox-component.test.d.ts.map +1 -0
  9. package/dist/__tests__/sandbox-component.test.js +281 -0
  10. package/dist/__tests__/sandbox-component.test.js.map +1 -0
  11. package/dist/__tests__/sandbox-config.test.d.ts +2 -0
  12. package/dist/__tests__/sandbox-config.test.d.ts.map +1 -0
  13. package/dist/__tests__/sandbox-config.test.js +148 -0
  14. package/dist/__tests__/sandbox-config.test.js.map +1 -0
  15. package/dist/__tests__/sandbox-iframe.test.d.ts +2 -0
  16. package/dist/__tests__/sandbox-iframe.test.d.ts.map +1 -0
  17. package/dist/__tests__/sandbox-iframe.test.js +212 -0
  18. package/dist/__tests__/sandbox-iframe.test.js.map +1 -0
  19. package/dist/__tests__/setup.d.ts +2 -0
  20. package/dist/__tests__/setup.d.ts.map +1 -0
  21. package/dist/__tests__/setup.js +27 -0
  22. package/dist/__tests__/setup.js.map +1 -0
  23. package/dist/components/index.d.ts +5 -0
  24. package/dist/components/index.d.ts.map +1 -0
  25. package/dist/components/index.js +5 -0
  26. package/dist/components/index.js.map +1 -0
  27. package/dist/components/performance-wrapper.d.ts +12 -0
  28. package/dist/components/performance-wrapper.d.ts.map +1 -0
  29. package/dist/components/performance-wrapper.js +162 -0
  30. package/dist/components/performance-wrapper.js.map +1 -0
  31. package/dist/components/sandbox-component.d.ts +3 -0
  32. package/dist/components/sandbox-component.d.ts.map +1 -0
  33. package/dist/components/sandbox-component.js +123 -0
  34. package/dist/components/sandbox-component.js.map +1 -0
  35. package/dist/components/sandbox-iframe-cached.d.ts +3 -0
  36. package/dist/components/sandbox-iframe-cached.d.ts.map +1 -0
  37. package/dist/components/sandbox-iframe-cached.js +176 -0
  38. package/dist/components/sandbox-iframe-cached.js.map +1 -0
  39. package/dist/components/sandbox-iframe.d.ts +3 -0
  40. package/dist/components/sandbox-iframe.d.ts.map +1 -0
  41. package/dist/components/sandbox-iframe.js +131 -0
  42. package/dist/components/sandbox-iframe.js.map +1 -0
  43. package/dist/converters/auto-detect/auto-detect.d.ts +13 -0
  44. package/dist/converters/auto-detect/auto-detect.d.ts.map +1 -0
  45. package/dist/converters/auto-detect/auto-detect.js +224 -0
  46. package/dist/converters/auto-detect/auto-detect.js.map +1 -0
  47. package/dist/converters/auto-detect/index.d.ts +3 -0
  48. package/dist/converters/auto-detect/index.d.ts.map +1 -0
  49. package/dist/converters/auto-detect/index.js +2 -0
  50. package/dist/converters/auto-detect/index.js.map +1 -0
  51. package/dist/converters/codepen/codepen-converter.d.ts +9 -0
  52. package/dist/converters/codepen/codepen-converter.d.ts.map +1 -0
  53. package/dist/converters/codepen/codepen-converter.js +99 -0
  54. package/dist/converters/codepen/codepen-converter.js.map +1 -0
  55. package/dist/converters/codepen/index.d.ts +2 -0
  56. package/dist/converters/codepen/index.d.ts.map +1 -0
  57. package/dist/converters/codepen/index.js +2 -0
  58. package/dist/converters/codepen/index.js.map +1 -0
  59. package/dist/converters/gist/gist-converter.d.ts +31 -0
  60. package/dist/converters/gist/gist-converter.d.ts.map +1 -0
  61. package/dist/converters/gist/gist-converter.js +162 -0
  62. package/dist/converters/gist/gist-converter.js.map +1 -0
  63. package/dist/converters/gist/index.d.ts +2 -0
  64. package/dist/converters/gist/index.d.ts.map +1 -0
  65. package/dist/converters/gist/index.js +2 -0
  66. package/dist/converters/gist/index.js.map +1 -0
  67. package/dist/converters/shared/html-parser.d.ts +4 -0
  68. package/dist/converters/shared/html-parser.d.ts.map +1 -0
  69. package/dist/converters/shared/html-parser.js +39 -0
  70. package/dist/converters/shared/html-parser.js.map +1 -0
  71. package/dist/converters/shared/index.d.ts +4 -0
  72. package/dist/converters/shared/index.d.ts.map +1 -0
  73. package/dist/converters/shared/index.js +3 -0
  74. package/dist/converters/shared/index.js.map +1 -0
  75. package/dist/converters/shared/sanitization.d.ts +5 -0
  76. package/dist/converters/shared/sanitization.d.ts.map +1 -0
  77. package/dist/converters/shared/sanitization.js +176 -0
  78. package/dist/converters/shared/sanitization.js.map +1 -0
  79. package/dist/converters/shared/types.d.ts +23 -0
  80. package/dist/converters/shared/types.d.ts.map +1 -0
  81. package/dist/converters/shared/types.js +2 -0
  82. package/dist/converters/shared/types.js.map +1 -0
  83. package/dist/core/index.d.ts +13 -0
  84. package/dist/core/index.d.ts.map +1 -0
  85. package/dist/core/index.js +10 -0
  86. package/dist/core/index.js.map +1 -0
  87. package/dist/frameworks/__tests__/file-utils.test.d.ts +2 -0
  88. package/dist/frameworks/__tests__/file-utils.test.d.ts.map +1 -0
  89. package/dist/frameworks/__tests__/file-utils.test.js +408 -0
  90. package/dist/frameworks/__tests__/file-utils.test.js.map +1 -0
  91. package/dist/frameworks/__tests__/sandpack-wrapper.test.d.ts +2 -0
  92. package/dist/frameworks/__tests__/sandpack-wrapper.test.d.ts.map +1 -0
  93. package/dist/frameworks/__tests__/sandpack-wrapper.test.js +147 -0
  94. package/dist/frameworks/__tests__/sandpack-wrapper.test.js.map +1 -0
  95. package/dist/frameworks/file-utils.d.ts +20 -0
  96. package/dist/frameworks/file-utils.d.ts.map +1 -0
  97. package/dist/frameworks/file-utils.js +293 -0
  98. package/dist/frameworks/file-utils.js.map +1 -0
  99. package/dist/frameworks/framework-detector.d.ts +5 -0
  100. package/dist/frameworks/framework-detector.d.ts.map +1 -0
  101. package/dist/frameworks/framework-detector.js +117 -0
  102. package/dist/frameworks/framework-detector.js.map +1 -0
  103. package/dist/frameworks/index.d.ts +6 -0
  104. package/dist/frameworks/index.d.ts.map +1 -0
  105. package/dist/frameworks/index.js +5 -0
  106. package/dist/frameworks/index.js.map +1 -0
  107. package/dist/frameworks/sandpack-wrapper.d.ts +28 -0
  108. package/dist/frameworks/sandpack-wrapper.d.ts.map +1 -0
  109. package/dist/frameworks/sandpack-wrapper.js +55 -0
  110. package/dist/frameworks/sandpack-wrapper.js.map +1 -0
  111. package/dist/frameworks/templates/index.d.ts +8 -0
  112. package/dist/frameworks/templates/index.d.ts.map +1 -0
  113. package/dist/frameworks/templates/index.js +29 -0
  114. package/dist/frameworks/templates/index.js.map +1 -0
  115. package/dist/frameworks/templates/react-template.d.ts +3 -0
  116. package/dist/frameworks/templates/react-template.d.ts.map +1 -0
  117. package/dist/frameworks/templates/react-template.js +376 -0
  118. package/dist/frameworks/templates/react-template.js.map +1 -0
  119. package/dist/frameworks/templates/svelte-template.d.ts +3 -0
  120. package/dist/frameworks/templates/svelte-template.d.ts.map +1 -0
  121. package/dist/frameworks/templates/svelte-template.js +373 -0
  122. package/dist/frameworks/templates/svelte-template.js.map +1 -0
  123. package/dist/frameworks/templates/vanilla-template.d.ts +3 -0
  124. package/dist/frameworks/templates/vanilla-template.d.ts.map +1 -0
  125. package/dist/frameworks/templates/vanilla-template.js +455 -0
  126. package/dist/frameworks/templates/vanilla-template.js.map +1 -0
  127. package/dist/frameworks/templates/vue-template.d.ts +3 -0
  128. package/dist/frameworks/templates/vue-template.d.ts.map +1 -0
  129. package/dist/frameworks/templates/vue-template.js +388 -0
  130. package/dist/frameworks/templates/vue-template.js.map +1 -0
  131. package/dist/frameworks/types.d.ts +57 -0
  132. package/dist/frameworks/types.d.ts.map +1 -0
  133. package/dist/frameworks/types.js +2 -0
  134. package/dist/frameworks/types.js.map +1 -0
  135. package/dist/index.d.ts +7 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +7 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/lib/performance-tracker.d.ts +45 -0
  140. package/dist/lib/performance-tracker.d.ts.map +1 -0
  141. package/dist/lib/performance-tracker.js +165 -0
  142. package/dist/lib/performance-tracker.js.map +1 -0
  143. package/dist/lib/sandbox-cache.d.ts +24 -0
  144. package/dist/lib/sandbox-cache.d.ts.map +1 -0
  145. package/dist/lib/sandbox-cache.js +138 -0
  146. package/dist/lib/sandbox-cache.js.map +1 -0
  147. package/dist/locales/de.json +72 -0
  148. package/dist/locales/en.json +72 -0
  149. package/dist/locales/index.d.ts +148 -0
  150. package/dist/locales/index.d.ts.map +1 -0
  151. package/dist/locales/index.js +7 -0
  152. package/dist/locales/index.js.map +1 -0
  153. package/dist/performance/sandpack-bundle-cache.d.ts +19 -0
  154. package/dist/performance/sandpack-bundle-cache.d.ts.map +1 -0
  155. package/dist/performance/sandpack-bundle-cache.js +48 -0
  156. package/dist/performance/sandpack-bundle-cache.js.map +1 -0
  157. package/dist/sandbox-config.d.ts +4 -0
  158. package/dist/sandbox-config.d.ts.map +1 -0
  159. package/dist/sandbox-config.js +235 -0
  160. package/dist/sandbox-config.js.map +1 -0
  161. package/dist/storage/__tests__/indexeddb-adapter.test.d.ts +2 -0
  162. package/dist/storage/__tests__/indexeddb-adapter.test.d.ts.map +1 -0
  163. package/dist/storage/__tests__/indexeddb-adapter.test.js +192 -0
  164. package/dist/storage/__tests__/indexeddb-adapter.test.js.map +1 -0
  165. package/dist/storage/__tests__/project-manager.test.d.ts +2 -0
  166. package/dist/storage/__tests__/project-manager.test.d.ts.map +1 -0
  167. package/dist/storage/__tests__/project-manager.test.js +266 -0
  168. package/dist/storage/__tests__/project-manager.test.js.map +1 -0
  169. package/dist/storage/index.d.ts +5 -0
  170. package/dist/storage/index.d.ts.map +1 -0
  171. package/dist/storage/index.js +4 -0
  172. package/dist/storage/index.js.map +1 -0
  173. package/dist/storage/indexeddb-adapter.d.ts +18 -0
  174. package/dist/storage/indexeddb-adapter.d.ts.map +1 -0
  175. package/dist/storage/indexeddb-adapter.js +232 -0
  176. package/dist/storage/indexeddb-adapter.js.map +1 -0
  177. package/dist/storage/project-manager.d.ts +35 -0
  178. package/dist/storage/project-manager.d.ts.map +1 -0
  179. package/dist/storage/project-manager.js +213 -0
  180. package/dist/storage/project-manager.js.map +1 -0
  181. package/dist/storage/types.d.ts +59 -0
  182. package/dist/storage/types.d.ts.map +1 -0
  183. package/dist/storage/types.js +2 -0
  184. package/dist/storage/types.js.map +1 -0
  185. package/dist/storage/zip-handler.d.ts +5 -0
  186. package/dist/storage/zip-handler.d.ts.map +1 -0
  187. package/dist/storage/zip-handler.js +200 -0
  188. package/dist/storage/zip-handler.js.map +1 -0
  189. package/dist/types/sandbox-types.d.ts +54 -0
  190. package/dist/types/sandbox-types.d.ts.map +1 -0
  191. package/dist/types/sandbox-types.js +2 -0
  192. package/dist/types/sandbox-types.js.map +1 -0
  193. package/dist/utils/__tests__/converters/auto-detect.test.d.ts +2 -0
  194. package/dist/utils/__tests__/converters/auto-detect.test.d.ts.map +1 -0
  195. package/dist/utils/__tests__/converters/auto-detect.test.js +381 -0
  196. package/dist/utils/__tests__/converters/auto-detect.test.js.map +1 -0
  197. package/dist/utils/__tests__/converters/codepen-converter.test.d.ts +2 -0
  198. package/dist/utils/__tests__/converters/codepen-converter.test.d.ts.map +1 -0
  199. package/dist/utils/__tests__/converters/codepen-converter.test.js +408 -0
  200. package/dist/utils/__tests__/converters/codepen-converter.test.js.map +1 -0
  201. package/dist/utils/__tests__/converters/gist-converter.test.d.ts +2 -0
  202. package/dist/utils/__tests__/converters/gist-converter.test.d.ts.map +1 -0
  203. package/dist/utils/__tests__/converters/gist-converter.test.js +458 -0
  204. package/dist/utils/__tests__/converters/gist-converter.test.js.map +1 -0
  205. package/dist/utils/__tests__/converters/html-parser.test.d.ts +2 -0
  206. package/dist/utils/__tests__/converters/html-parser.test.d.ts.map +1 -0
  207. package/dist/utils/__tests__/converters/html-parser.test.js +285 -0
  208. package/dist/utils/__tests__/converters/html-parser.test.js.map +1 -0
  209. package/dist/utils/__tests__/converters/sanitization.test.d.ts +2 -0
  210. package/dist/utils/__tests__/converters/sanitization.test.d.ts.map +1 -0
  211. package/dist/utils/__tests__/converters/sanitization.test.js +210 -0
  212. package/dist/utils/__tests__/converters/sanitization.test.js.map +1 -0
  213. package/dist/utils/auto-resize-script.d.ts +4 -0
  214. package/dist/utils/auto-resize-script.d.ts.map +1 -0
  215. package/dist/utils/auto-resize-script.js +125 -0
  216. package/dist/utils/auto-resize-script.js.map +1 -0
  217. package/dist/widgets/banner/BannerWidget.d.ts +15 -0
  218. package/dist/widgets/banner/BannerWidget.d.ts.map +1 -0
  219. package/dist/widgets/banner/BannerWidget.js +33 -0
  220. package/dist/widgets/banner/BannerWidget.js.map +1 -0
  221. package/dist/widgets/form/FormWidget.d.ts +23 -0
  222. package/dist/widgets/form/FormWidget.d.ts.map +1 -0
  223. package/dist/widgets/form/FormWidget.js +42 -0
  224. package/dist/widgets/form/FormWidget.js.map +1 -0
  225. package/dist/widgets/index.d.ts +8 -0
  226. package/dist/widgets/index.d.ts.map +1 -0
  227. package/dist/widgets/index.js +28 -0
  228. package/dist/widgets/index.js.map +1 -0
  229. package/dist/widgets/types.d.ts +28 -0
  230. package/dist/widgets/types.d.ts.map +1 -0
  231. package/dist/widgets/types.js +2 -0
  232. package/dist/widgets/types.js.map +1 -0
  233. package/package.json +116 -0
@@ -0,0 +1,455 @@
1
+ export const vanillaTemplate = {
2
+ id: 'vanilla',
3
+ name: 'Vanilla',
4
+ description: 'Modern JavaScript with ES6+ features',
5
+ sandpackTemplate: 'static',
6
+ files: {
7
+ '/index.html': {
8
+ code: `<!DOCTYPE html>
9
+ <html lang="en">
10
+ <head>
11
+ <meta charset="UTF-8" />
12
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
13
+ <title>Vanilla App</title>
14
+ <link rel="stylesheet" href="/styles.css" />
15
+ <link rel="preconnect" href="https://fonts.googleapis.com">
16
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
17
+ </head>
18
+ <body>
19
+ <div class="app">
20
+ <header>
21
+ <h1>Hello Vanilla! ⚡</h1>
22
+ <p>Edit this component to see live updates.</p>
23
+ </header>
24
+
25
+ <main>
26
+ <section id="counter" class="card">
27
+ <h2>Counter: <span id="count" data-count="0">0</span></h2>
28
+ <div class="button-group">
29
+ <button id="increment" class="btn-primary">
30
+ <span>+</span> Increment
31
+ </button>
32
+ <button id="decrement" class="btn-secondary">
33
+ <span>-</span> Decrement
34
+ </button>
35
+ <button id="reset" class="btn-outline">Reset</button>
36
+ </div>
37
+ <div class="stats">
38
+ <small>Total clicks: <span id="totalClicks">0</span></small>
39
+ </div>
40
+ </section>
41
+
42
+ <section class="card">
43
+ <h3>Modern Features</h3>
44
+ <ul>
45
+ <li>✅ ES6+ Classes & Modules</li>
46
+ <li>✅ Async/Await Support</li>
47
+ <li>✅ LocalStorage Persistence</li>
48
+ <li>✅ Event Delegation</li>
49
+ <li>✅ CSS Custom Properties</li>
50
+ </ul>
51
+ </section>
52
+ </main>
53
+ </div>
54
+
55
+ <script type="module" src="/index.js"></script>
56
+ </body>
57
+ </html>`,
58
+ },
59
+ '/index.js': {
60
+ code: `/**
61
+ * Modern Vanilla JavaScript Counter App
62
+ * ES6+ features, proper event handling, and clean architecture
63
+ */
64
+
65
+ class Counter {
66
+ constructor() {
67
+ this.count = 0;
68
+ this.totalClicks = 0;
69
+ this.countElement = document.getElementById('count');
70
+ this.totalClicksElement = document.getElementById('totalClicks');
71
+ this.storageKey = 'vanilla-counter-data';
72
+
73
+ this.loadFromStorage();
74
+ this.updateDisplay();
75
+ this.bindEvents();
76
+
77
+ console.log('🚀 Vanilla counter initialized with ES6+ features');
78
+ }
79
+
80
+ loadFromStorage() {
81
+ try {
82
+ const data = localStorage.getItem(this.storageKey);
83
+ if (data) {
84
+ const parsed = JSON.parse(data);
85
+ this.count = parsed.count || 0;
86
+ this.totalClicks = parsed.totalClicks || 0;
87
+ }
88
+ } catch (error) {
89
+ console.warn('Failed to load from localStorage:', error);
90
+ }
91
+ }
92
+
93
+ saveToStorage() {
94
+ try {
95
+ const data = { count: this.count, totalClicks: this.totalClicks };
96
+ localStorage.setItem(this.storageKey, JSON.stringify(data));
97
+ } catch (error) {
98
+ console.warn('Failed to save to localStorage:', error);
99
+ }
100
+ }
101
+
102
+ updateDisplay() {
103
+ this.countElement.textContent = this.count;
104
+ this.countElement.dataset.count = this.count;
105
+ this.totalClicksElement.textContent = this.totalClicks;
106
+
107
+ // Add visual feedback for count changes
108
+ this.countElement.style.transform = 'scale(1.1)';
109
+ setTimeout(() => {
110
+ this.countElement.style.transform = 'scale(1)';
111
+ }, 150);
112
+ }
113
+
114
+ increment() {
115
+ this.count++;
116
+ this.totalClicks++;
117
+ this.updateDisplay();
118
+ this.saveToStorage();
119
+ this.announceChange(\`Count is now \${this.count}\`);
120
+ }
121
+
122
+ decrement() {
123
+ if (this.count > 0) {
124
+ this.count--;
125
+ this.totalClicks++;
126
+ this.updateDisplay();
127
+ this.saveToStorage();
128
+ this.announceChange(\`Count is now \${this.count}\`);
129
+ }
130
+ }
131
+
132
+ reset() {
133
+ this.count = 0;
134
+ this.totalClicks++;
135
+ this.updateDisplay();
136
+ this.saveToStorage();
137
+ this.announceChange('Counter reset to 0');
138
+ }
139
+
140
+ announceChange(message) {
141
+ // Create a temporary announcement for accessibility
142
+ const announcement = document.createElement('div');
143
+ announcement.setAttribute('role', 'status');
144
+ announcement.setAttribute('aria-live', 'polite');
145
+ announcement.className = 'sr-only';
146
+ announcement.textContent = message;
147
+ document.body.appendChild(announcement);
148
+ setTimeout(() => announcement.remove(), 1000);
149
+ }
150
+
151
+ bindEvents() {
152
+ // Use event delegation for better performance
153
+ document.getElementById('counter')?.addEventListener('click', (event) => {
154
+ const target = event.target;
155
+ const button = target.closest('button');
156
+
157
+ if (!button) return;
158
+
159
+ // Add haptic feedback simulation
160
+ button.style.transform = 'scale(0.95)';
161
+ setTimeout(() => {
162
+ button.style.transform = 'scale(1)';
163
+ }, 100);
164
+
165
+ switch (button.id) {
166
+ case 'increment':
167
+ this.increment();
168
+ break;
169
+ case 'decrement':
170
+ this.decrement();
171
+ break;
172
+ case 'reset':
173
+ this.reset();
174
+ break;
175
+ }
176
+ });
177
+
178
+ // Keyboard shortcuts
179
+ document.addEventListener('keydown', (event) => {
180
+ if (event.target instanceof HTMLInputElement) return;
181
+
182
+ switch (event.key) {
183
+ case 'ArrowUp':
184
+ case '+':
185
+ event.preventDefault();
186
+ this.increment();
187
+ break;
188
+ case 'ArrowDown':
189
+ case '-':
190
+ event.preventDefault();
191
+ this.decrement();
192
+ break;
193
+ case 'r':
194
+ case 'R':
195
+ if (!event.ctrlKey && !event.metaKey) {
196
+ event.preventDefault();
197
+ this.reset();
198
+ }
199
+ break;
200
+ }
201
+ });
202
+ }
203
+ }
204
+
205
+ // Initialize when DOM is ready
206
+ document.addEventListener('DOMContentLoaded', () => {
207
+ new Counter();
208
+ });`,
209
+ },
210
+ '/styles.css': {
211
+ code: `/* Modern Vanilla App Styles - Same as React Template */
212
+
213
+ * {
214
+ box-sizing: border-box;
215
+ margin: 0;
216
+ padding: 0;
217
+ }
218
+
219
+ body {
220
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
221
+ line-height: 1.6;
222
+ color: #333;
223
+ background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
224
+ min-height: 100vh;
225
+ padding: 2rem;
226
+ }
227
+
228
+ .app {
229
+ max-width: 800px;
230
+ margin: 0 auto;
231
+ background: white;
232
+ border-radius: 12px;
233
+ box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1);
234
+ padding: 2rem;
235
+ }
236
+
237
+ header {
238
+ text-align: center;
239
+ margin-bottom: 3rem;
240
+ }
241
+
242
+ h1 {
243
+ font-size: clamp(2rem, 5vw, 3rem);
244
+ font-weight: 800;
245
+ margin-bottom: 0.5rem;
246
+ background: linear-gradient(135deg, #61dafb, #6366f1);
247
+ -webkit-background-clip: text;
248
+ background-clip: text;
249
+ -webkit-text-fill-color: transparent;
250
+ animation: titleGlow 3s ease-in-out infinite alternate;
251
+ }
252
+
253
+ @keyframes titleGlow {
254
+ from { filter: drop-shadow(0 0 20px rgba(97, 218, 251, 0.3)); }
255
+ to { filter: drop-shadow(0 0 30px rgba(97, 218, 251, 0.3)); }
256
+ }
257
+
258
+ p {
259
+ color: #64748b;
260
+ font-size: 1.1rem;
261
+ margin-bottom: 2rem;
262
+ }
263
+
264
+ .card {
265
+ background: white;
266
+ border: 1px solid #e2e8f0;
267
+ border-radius: 12px;
268
+ padding: 2rem;
269
+ margin-bottom: 2rem;
270
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
271
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
272
+ }
273
+
274
+ .card:hover {
275
+ box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
276
+ transform: translateY(-2px);
277
+ }
278
+
279
+ .card h2 {
280
+ font-size: 2rem;
281
+ font-weight: 700;
282
+ margin-bottom: 1.5rem;
283
+ text-align: center;
284
+ color: #1e293b;
285
+ }
286
+
287
+ .card h3 {
288
+ font-size: 1.5rem;
289
+ font-weight: 600;
290
+ margin-bottom: 1rem;
291
+ color: #1e293b;
292
+ }
293
+
294
+ #count {
295
+ display: inline-block;
296
+ font-weight: 800;
297
+ font-size: 2.5rem;
298
+ color: #61dafb;
299
+ text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
300
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
301
+ min-width: 100px;
302
+ }
303
+
304
+ .button-group {
305
+ display: flex;
306
+ gap: 1rem;
307
+ justify-content: center;
308
+ margin: 2rem 0;
309
+ flex-wrap: wrap;
310
+ }
311
+
312
+ button {
313
+ display: inline-flex;
314
+ align-items: center;
315
+ gap: 0.5rem;
316
+ padding: 0.875rem 1.5rem;
317
+ font-size: 1rem;
318
+ font-weight: 600;
319
+ border: 2px solid transparent;
320
+ border-radius: 8px;
321
+ cursor: pointer;
322
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
323
+ position: relative;
324
+ overflow: hidden;
325
+ white-space: nowrap;
326
+ }
327
+
328
+ button::before {
329
+ content: '';
330
+ position: absolute;
331
+ top: 0;
332
+ left: -100%;
333
+ width: 100%;
334
+ height: 100%;
335
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
336
+ transition: left 0.5s;
337
+ }
338
+
339
+ button:hover::before {
340
+ left: 100%;
341
+ }
342
+
343
+ button:active {
344
+ transform: scale(0.95);
345
+ }
346
+
347
+ button span {
348
+ font-size: 1.2rem;
349
+ font-weight: 700;
350
+ }
351
+
352
+ .btn-primary {
353
+ background: #61dafb;
354
+ color: #333;
355
+ border-color: #61dafb;
356
+ }
357
+
358
+ .btn-primary:hover {
359
+ background: #4fa8c5;
360
+ border-color: #4fa8c5;
361
+ box-shadow: 0 4px 12px rgba(97, 218, 251, 0.3);
362
+ }
363
+
364
+ .btn-secondary {
365
+ background: #6366f1;
366
+ color: white;
367
+ border-color: #6366f1;
368
+ }
369
+
370
+ .btn-secondary:hover {
371
+ background: #4f46e5;
372
+ box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
373
+ }
374
+
375
+ .btn-outline {
376
+ background: transparent;
377
+ color: #64748b;
378
+ border-color: #e2e8f0;
379
+ }
380
+
381
+ .btn-outline:hover {
382
+ background: #f8fafc;
383
+ color: #ef4444;
384
+ border-color: #ef4444;
385
+ }
386
+
387
+ .stats {
388
+ text-align: center;
389
+ margin-top: 1.5rem;
390
+ padding-top: 1.5rem;
391
+ border-top: 1px solid #e2e8f0;
392
+ }
393
+
394
+ .stats small {
395
+ color: #64748b;
396
+ font-size: 0.875rem;
397
+ text-transform: uppercase;
398
+ letter-spacing: 0.05em;
399
+ }
400
+
401
+ ul {
402
+ list-style: none;
403
+ padding: 0;
404
+ }
405
+
406
+ li {
407
+ padding: 0.5rem 0;
408
+ color: #64748b;
409
+ border-bottom: 1px solid #e2e8f0;
410
+ }
411
+
412
+ li:last-child {
413
+ border-bottom: none;
414
+ }
415
+
416
+ /* Focus styles */
417
+ button:focus-visible {
418
+ outline: 2px solid #61dafb;
419
+ outline-offset: 2px;
420
+ }
421
+
422
+ /* Responsive design */
423
+ @media (max-width: 768px) {
424
+ body {
425
+ padding: 1rem;
426
+ }
427
+
428
+ .app {
429
+ padding: 1.5rem;
430
+ }
431
+
432
+ .button-group {
433
+ flex-direction: column;
434
+ align-items: center;
435
+ }
436
+
437
+ button {
438
+ width: 100%;
439
+ max-width: 200px;
440
+ }
441
+ }`,
442
+ },
443
+ },
444
+ dependencies: {},
445
+ devDependencies: {
446
+ typescript: '^5.0.0',
447
+ },
448
+ config: {
449
+ entry: '/index.js',
450
+ main: '/index.html',
451
+ showConsole: true,
452
+ showDevTools: false,
453
+ },
454
+ };
455
+ //# sourceMappingURL=vanilla-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vanilla-template.js","sourceRoot":"","sources":["../../../src/frameworks/templates/vanilla-template.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,eAAe,GAAsB;IACjD,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,sCAAsC;IACnD,gBAAgB,EAAE,QAAQ;IAC1B,KAAK,EAAE;QACN,aAAa,EAAE;YACd,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiDD;SACL;QACD,WAAW,EAAE;YACZ,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoJL;SACD;QACD,aAAa,EAAE;YACd,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsOP;SACC;KACD;IACD,YAAY,EAAE,EAAE;IAChB,eAAe,EAAE;QAChB,UAAU,EAAE,QAAQ;KACpB;IACD,MAAM,EAAE;QACP,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,KAAK;KACnB;CACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FrameworkTemplate } from '../types';
2
+ export declare const vueTemplate: FrameworkTemplate;
3
+ //# sourceMappingURL=vue-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue-template.d.ts","sourceRoot":"","sources":["../../../src/frameworks/templates/vue-template.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD,eAAO,MAAM,WAAW,EAAE,iBAkYzB,CAAC"}