loopwind 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/README.md +9 -2
  2. package/dist/cli.js +5 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/render.d.ts +1 -0
  5. package/dist/commands/render.d.ts.map +1 -1
  6. package/dist/commands/render.js +1 -0
  7. package/dist/commands/render.js.map +1 -1
  8. package/dist/lib/encode-worker.d.ts +2 -0
  9. package/dist/lib/encode-worker.d.ts.map +1 -0
  10. package/dist/lib/encode-worker.js +29 -0
  11. package/dist/lib/encode-worker.js.map +1 -0
  12. package/dist/lib/mjpeg-muxer.d.ts +46 -0
  13. package/dist/lib/mjpeg-muxer.d.ts.map +1 -0
  14. package/dist/lib/mjpeg-muxer.js +513 -0
  15. package/dist/lib/mjpeg-muxer.js.map +1 -0
  16. package/dist/lib/render-core.d.ts +63 -0
  17. package/dist/lib/render-core.d.ts.map +1 -0
  18. package/dist/lib/render-core.js +65 -0
  19. package/dist/lib/render-core.js.map +1 -0
  20. package/dist/lib/renderer.d.ts.map +1 -1
  21. package/dist/lib/renderer.js +10 -7
  22. package/dist/lib/renderer.js.map +1 -1
  23. package/dist/lib/resvg-init.d.ts +15 -0
  24. package/dist/lib/resvg-init.d.ts.map +1 -0
  25. package/dist/lib/resvg-init.js +55 -0
  26. package/dist/lib/resvg-init.js.map +1 -0
  27. package/dist/lib/tailwind/colors.d.ts +8 -0
  28. package/dist/lib/tailwind/colors.d.ts.map +1 -0
  29. package/dist/lib/tailwind/colors.js +102 -0
  30. package/dist/lib/tailwind/colors.js.map +1 -0
  31. package/dist/lib/tailwind/index.d.ts +10 -0
  32. package/dist/lib/tailwind/index.d.ts.map +1 -0
  33. package/dist/lib/tailwind/index.js +9 -0
  34. package/dist/lib/tailwind/index.js.map +1 -0
  35. package/dist/lib/tailwind/resolvers.d.ts +28 -0
  36. package/dist/lib/tailwind/resolvers.d.ts.map +1 -0
  37. package/dist/lib/tailwind/resolvers.js +94 -0
  38. package/dist/lib/tailwind/resolvers.js.map +1 -0
  39. package/dist/lib/tailwind/types.d.ts +29 -0
  40. package/dist/lib/tailwind/types.d.ts.map +1 -0
  41. package/dist/lib/tailwind/types.js +8 -0
  42. package/dist/lib/tailwind/types.js.map +1 -0
  43. package/dist/lib/tailwind-config-loader.d.ts +8 -45
  44. package/dist/lib/tailwind-config-loader.d.ts.map +1 -1
  45. package/dist/lib/tailwind-config-loader.js +6 -429
  46. package/dist/lib/tailwind-config-loader.js.map +1 -1
  47. package/dist/lib/tailwind.d.ts +1 -1
  48. package/dist/lib/tailwind.d.ts.map +1 -1
  49. package/dist/lib/tailwind.js +1 -1
  50. package/dist/lib/tailwind.js.map +1 -1
  51. package/dist/lib/video-preview.d.ts.map +1 -1
  52. package/dist/lib/video-preview.js +28 -16
  53. package/dist/lib/video-preview.js.map +1 -1
  54. package/dist/lib/video-renderer.d.ts +19 -1
  55. package/dist/lib/video-renderer.d.ts.map +1 -1
  56. package/dist/lib/video-renderer.js +194 -70
  57. package/dist/lib/video-renderer.js.map +1 -1
  58. package/dist/sdk/edge/index.d.ts +91 -0
  59. package/dist/sdk/edge/index.d.ts.map +1 -0
  60. package/dist/sdk/edge/index.js +187 -0
  61. package/dist/sdk/edge/index.js.map +1 -0
  62. package/dist/sdk/workers/index.d.ts +135 -0
  63. package/dist/sdk/workers/index.d.ts.map +1 -0
  64. package/dist/sdk/workers/index.js +271 -0
  65. package/dist/sdk/workers/index.js.map +1 -0
  66. package/dist/sdk/workers/tailwind-config.d.ts +48 -0
  67. package/dist/sdk/workers/tailwind-config.d.ts.map +1 -0
  68. package/dist/sdk/workers/tailwind-config.js +187 -0
  69. package/dist/sdk/workers/tailwind-config.js.map +1 -0
  70. package/dist/sdk/workers/tailwind.d.ts +9 -0
  71. package/dist/sdk/workers/tailwind.d.ts.map +1 -0
  72. package/dist/sdk/workers/tailwind.js +8 -0
  73. package/dist/sdk/workers/tailwind.js.map +1 -0
  74. package/package.json +6 -2
  75. package/test-cloudflare-worker/README.md +64 -0
  76. package/test-cloudflare-worker/dist/README.md +1 -0
  77. package/test-cloudflare-worker/dist/index.js +23743 -0
  78. package/test-cloudflare-worker/dist/index.js.map +8 -0
  79. package/test-cloudflare-worker/package-lock.json +1773 -0
  80. package/test-cloudflare-worker/package.json +25 -0
  81. package/test-cloudflare-worker/test-sdk.mjs +75 -0
  82. package/test-cloudflare-worker/wrangler.toml +14 -0
  83. package/test-video-720p.mjs +96 -0
  84. package/test-video-breakdown.mjs +98 -0
  85. package/test-video-perf-1080.mjs +67 -0
  86. package/test-video-perf.mjs +56 -0
  87. package/test-worker-1080p.mjs +103 -0
  88. package/test-worker-viability.mjs +140 -0
  89. package/website/astro.config.mjs +4 -9
  90. package/website/dist/_astro/PlaygroundEditor.DzFavsm8.js +26 -0
  91. package/website/dist/_astro/VideoPreviewClient.BrajhYmh.js +1 -0
  92. package/website/dist/_astro/agents.CZXv4DCM.css +1 -0
  93. package/website/dist/_astro/client.BHSq4mdQ.js +33 -0
  94. package/website/dist/_astro/index.CTbGshLK.js +9 -0
  95. package/website/dist/_astro/jsx-runtime.BjG_zV1W.js +9 -0
  96. package/website/dist/_routes.json +1 -0
  97. package/website/dist/_worker.js/_@astrojs-ssr-adapter.mjs +4 -4
  98. package/website/dist/_worker.js/_astro-internal_middleware.mjs +2 -2
  99. package/website/dist/_worker.js/chunks/Logo_Cud5QvBJ.mjs +22 -0
  100. package/website/dist/_worker.js/chunks/_@astro-renderers_-YVK7NHa.mjs +15015 -0
  101. package/website/dist/_worker.js/chunks/astro/{server_Y5_QHO8v.mjs → server_CsUrSZgd.mjs} +113 -2
  102. package/website/dist/_worker.js/chunks/{astro-designed-error-pages_BNTLO-TA.mjs → astro-designed-error-pages_1ELXm5Tt.mjs} +1 -1
  103. package/website/dist/_worker.js/chunks/{index_C1UTDwYg.mjs → index_BDWR1Q-q.mjs} +2 -2
  104. package/website/dist/_worker.js/chunks/{noop-middleware_DlWGj5t5.mjs → noop-middleware_B8fH5jha.mjs} +1 -1
  105. package/website/dist/_worker.js/index.js +38 -30
  106. package/website/dist/_worker.js/manifest_Bk6136-u.mjs +98 -0
  107. package/website/dist/_worker.js/pages/_image.astro.mjs +1 -1
  108. package/website/dist/_worker.js/pages/api/playground/render.astro.mjs +25562 -0
  109. package/website/dist/_worker.js/pages/api/playground/templates.astro.mjs +92 -0
  110. package/website/dist/_worker.js/pages/api/raw-markdown/_---path_.astro.mjs +1 -1
  111. package/website/dist/_worker.js/pages/playground/_example_.astro.mjs +95 -0
  112. package/website/dist/_worker.js/pages/playground.astro.mjs +1 -0
  113. package/website/dist/_worker.js/renderers.mjs +1 -56
  114. package/website/dist/agents/index.html +4 -2
  115. package/website/dist/animation/index.html +629 -3
  116. package/website/dist/config/index.html +4 -2
  117. package/website/dist/fonts/index.html +4 -2
  118. package/website/dist/getting-started/index.html +4 -2
  119. package/website/dist/helpers/index.html +196 -10
  120. package/website/dist/images/index.html +4 -2
  121. package/website/dist/index.html +4 -3
  122. package/website/dist/llm.txt +870 -20
  123. package/website/dist/playground/index.html +6 -0
  124. package/website/dist/preview/index.html +4 -2
  125. package/website/dist/sdk/index.html +639 -127
  126. package/website/dist/sitemap.xml +12 -12
  127. package/website/dist/styling/index.html +4 -2
  128. package/website/dist/templates/index.html +4 -2
  129. package/website/dist/video/index.html +47 -12
  130. package/website/package-lock.json +11 -1
  131. package/website/package.json +3 -1
  132. package/website/wrangler.toml +9 -0
  133. package/_dsgn/templates/dashed-stroke-test/template.tsx +0 -73
  134. package/_dsgn/templates/path-follow-test/template.tsx +0 -176
  135. package/_dsgn/templates/path-simple-test/template.tsx +0 -98
  136. package/_dsgn/templates/stroke-dash-test/meta.json +0 -12
  137. package/_dsgn/templates/stroke-dash-test/template.tsx +0 -53
  138. package/website/dist/_astro/agents.Yx-L_igG.css +0 -1
  139. package/website/dist/_worker.js/manifest_CT_D-YDe.mjs +0 -98
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Tailwind config utilities for Cloudflare Workers
3
+ * Pure JavaScript - no Node.js dependencies
4
+ */
5
+ // Tailwind's default color palette (v3)
6
+ export const DEFAULT_COLORS = {
7
+ inherit: 'inherit',
8
+ current: 'currentColor',
9
+ transparent: 'transparent',
10
+ black: '#000000',
11
+ white: '#ffffff',
12
+ slate: {
13
+ 50: '#f8fafc', 100: '#f1f5f9', 200: '#e2e8f0', 300: '#cbd5e1', 400: '#94a3b8',
14
+ 500: '#64748b', 600: '#475569', 700: '#334155', 800: '#1e293b', 900: '#0f172a', 950: '#020617',
15
+ },
16
+ gray: {
17
+ 50: '#f9fafb', 100: '#f3f4f6', 200: '#e5e7eb', 300: '#d1d5db', 400: '#9ca3af',
18
+ 500: '#6b7280', 600: '#4b5563', 700: '#374151', 800: '#1f2937', 900: '#111827', 950: '#030712',
19
+ },
20
+ zinc: {
21
+ 50: '#fafafa', 100: '#f4f4f5', 200: '#e4e4e7', 300: '#d4d4d8', 400: '#a1a1aa',
22
+ 500: '#71717a', 600: '#52525b', 700: '#3f3f46', 800: '#27272a', 900: '#18181b', 950: '#09090b',
23
+ },
24
+ neutral: {
25
+ 50: '#fafafa', 100: '#f5f5f5', 200: '#e5e5e5', 300: '#d4d4d4', 400: '#a3a3a3',
26
+ 500: '#737373', 600: '#525252', 700: '#404040', 800: '#262626', 900: '#171717', 950: '#0a0a0a',
27
+ },
28
+ stone: {
29
+ 50: '#fafaf9', 100: '#f5f5f4', 200: '#e7e5e4', 300: '#d6d3d1', 400: '#a8a29e',
30
+ 500: '#78716c', 600: '#57534e', 700: '#44403c', 800: '#292524', 900: '#1c1917', 950: '#0c0a09',
31
+ },
32
+ red: {
33
+ 50: '#fef2f2', 100: '#fee2e2', 200: '#fecaca', 300: '#fca5a5', 400: '#f87171',
34
+ 500: '#ef4444', 600: '#dc2626', 700: '#b91c1c', 800: '#991b1b', 900: '#7f1d1d', 950: '#450a0a',
35
+ },
36
+ orange: {
37
+ 50: '#fff7ed', 100: '#ffedd5', 200: '#fed7aa', 300: '#fdba74', 400: '#fb923c',
38
+ 500: '#f97316', 600: '#ea580c', 700: '#c2410c', 800: '#9a3412', 900: '#7c2d12', 950: '#431407',
39
+ },
40
+ amber: {
41
+ 50: '#fffbeb', 100: '#fef3c7', 200: '#fde68a', 300: '#fcd34d', 400: '#fbbf24',
42
+ 500: '#f59e0b', 600: '#d97706', 700: '#b45309', 800: '#92400e', 900: '#78350f', 950: '#451a03',
43
+ },
44
+ yellow: {
45
+ 50: '#fefce8', 100: '#fef9c3', 200: '#fef08a', 300: '#fde047', 400: '#facc15',
46
+ 500: '#eab308', 600: '#ca8a04', 700: '#a16207', 800: '#854d0e', 900: '#713f12', 950: '#422006',
47
+ },
48
+ lime: {
49
+ 50: '#f7fee7', 100: '#ecfccb', 200: '#d9f99d', 300: '#bef264', 400: '#a3e635',
50
+ 500: '#84cc16', 600: '#65a30d', 700: '#4d7c0f', 800: '#3f6212', 900: '#365314', 950: '#1a2e05',
51
+ },
52
+ green: {
53
+ 50: '#f0fdf4', 100: '#dcfce7', 200: '#bbf7d0', 300: '#86efac', 400: '#4ade80',
54
+ 500: '#22c55e', 600: '#16a34a', 700: '#15803d', 800: '#166534', 900: '#14532d', 950: '#052e16',
55
+ },
56
+ emerald: {
57
+ 50: '#ecfdf5', 100: '#d1fae5', 200: '#a7f3d0', 300: '#6ee7b7', 400: '#34d399',
58
+ 500: '#10b981', 600: '#059669', 700: '#047857', 800: '#065f46', 900: '#064e3b', 950: '#022c22',
59
+ },
60
+ teal: {
61
+ 50: '#f0fdfa', 100: '#ccfbf1', 200: '#99f6e4', 300: '#5eead4', 400: '#2dd4bf',
62
+ 500: '#14b8a6', 600: '#0d9488', 700: '#0f766e', 800: '#115e59', 900: '#134e4a', 950: '#042f2e',
63
+ },
64
+ cyan: {
65
+ 50: '#ecfeff', 100: '#cffafe', 200: '#a5f3fc', 300: '#67e8f9', 400: '#22d3ee',
66
+ 500: '#06b6d4', 600: '#0891b2', 700: '#0e7490', 800: '#155e75', 900: '#164e63', 950: '#083344',
67
+ },
68
+ sky: {
69
+ 50: '#f0f9ff', 100: '#e0f2fe', 200: '#bae6fd', 300: '#7dd3fc', 400: '#38bdf8',
70
+ 500: '#0ea5e9', 600: '#0284c7', 700: '#0369a1', 800: '#075985', 900: '#0c4a6e', 950: '#082f49',
71
+ },
72
+ blue: {
73
+ 50: '#eff6ff', 100: '#dbeafe', 200: '#bfdbfe', 300: '#93c5fd', 400: '#60a5fa',
74
+ 500: '#3b82f6', 600: '#2563eb', 700: '#1d4ed8', 800: '#1e40af', 900: '#1e3a8a', 950: '#172554',
75
+ },
76
+ indigo: {
77
+ 50: '#eef2ff', 100: '#e0e7ff', 200: '#c7d2fe', 300: '#a5b4fc', 400: '#818cf8',
78
+ 500: '#6366f1', 600: '#4f46e5', 700: '#4338ca', 800: '#3730a3', 900: '#312e81', 950: '#1e1b4b',
79
+ },
80
+ violet: {
81
+ 50: '#f5f3ff', 100: '#ede9fe', 200: '#ddd6fe', 300: '#c4b5fd', 400: '#a78bfa',
82
+ 500: '#8b5cf6', 600: '#7c3aed', 700: '#6d28d9', 800: '#5b21b6', 900: '#4c1d95', 950: '#2e1065',
83
+ },
84
+ purple: {
85
+ 50: '#faf5ff', 100: '#f3e8ff', 200: '#e9d5ff', 300: '#d8b4fe', 400: '#c084fc',
86
+ 500: '#a855f7', 600: '#9333ea', 700: '#7e22ce', 800: '#6b21a8', 900: '#581c87', 950: '#3b0764',
87
+ },
88
+ fuchsia: {
89
+ 50: '#fdf4ff', 100: '#fae8ff', 200: '#f5d0fe', 300: '#f0abfc', 400: '#e879f9',
90
+ 500: '#d946ef', 600: '#c026d3', 700: '#a21caf', 800: '#86198f', 900: '#701a75', 950: '#4a044e',
91
+ },
92
+ pink: {
93
+ 50: '#fdf2f8', 100: '#fce7f3', 200: '#fbcfe8', 300: '#f9a8d4', 400: '#f472b6',
94
+ 500: '#ec4899', 600: '#db2777', 700: '#be185d', 800: '#9d174d', 900: '#831843', 950: '#500724',
95
+ },
96
+ rose: {
97
+ 50: '#fff1f2', 100: '#ffe4e6', 200: '#fecdd3', 300: '#fda4af', 400: '#fb7185',
98
+ 500: '#f43f5e', 600: '#e11d48', 700: '#be123c', 800: '#9f1239', 900: '#881337', 950: '#4c0519',
99
+ },
100
+ };
101
+ /**
102
+ * Resolve a color from Tailwind config
103
+ * Supports: primary, blue-500, slate-200, etc.
104
+ */
105
+ export function resolveColor(colorName, tailwindConfig) {
106
+ // Merge Tailwind config colors with defaults
107
+ const colors = {
108
+ ...DEFAULT_COLORS,
109
+ ...tailwindConfig?.theme?.colors,
110
+ ...tailwindConfig?.theme?.extend?.colors,
111
+ };
112
+ // Try direct match first (e.g., "primary")
113
+ if (colors[colorName]) {
114
+ const color = colors[colorName];
115
+ // If it's a string, return it
116
+ if (typeof color === 'string') {
117
+ return color;
118
+ }
119
+ // If it's an object with DEFAULT, use that
120
+ if (typeof color === 'object' && color.DEFAULT) {
121
+ return color.DEFAULT;
122
+ }
123
+ }
124
+ // Try shade match (e.g., "blue-500")
125
+ const shadeMatch = colorName.match(/^(\w+)-(\d+)$/);
126
+ if (shadeMatch) {
127
+ const [, colorKey, shade] = shadeMatch;
128
+ if (colors[colorKey] && typeof colors[colorKey] === 'object') {
129
+ return colors[colorKey][shade] || null;
130
+ }
131
+ }
132
+ return null;
133
+ }
134
+ /**
135
+ * Resolve spacing value from Tailwind config
136
+ */
137
+ export function resolveSpacing(value, tailwindConfig) {
138
+ if (!tailwindConfig?.theme) {
139
+ return null;
140
+ }
141
+ const spacing = {
142
+ ...tailwindConfig.theme.spacing,
143
+ ...tailwindConfig.theme.extend?.spacing,
144
+ };
145
+ return spacing[value] || null;
146
+ }
147
+ /**
148
+ * Resolve font size from Tailwind config
149
+ */
150
+ export function resolveFontSize(size, tailwindConfig) {
151
+ if (!tailwindConfig?.theme) {
152
+ return null;
153
+ }
154
+ const fontSize = {
155
+ ...tailwindConfig.theme.fontSize,
156
+ ...tailwindConfig.theme.extend?.fontSize,
157
+ };
158
+ const value = fontSize[size];
159
+ if (!value) {
160
+ return null;
161
+ }
162
+ // Font size can be a string or [size, lineHeight]
163
+ if (typeof value === 'string') {
164
+ return { fontSize: value };
165
+ }
166
+ if (Array.isArray(value)) {
167
+ return {
168
+ fontSize: value[0],
169
+ lineHeight: value[1]?.lineHeight || value[1],
170
+ };
171
+ }
172
+ return null;
173
+ }
174
+ /**
175
+ * Resolve border radius from Tailwind config
176
+ */
177
+ export function resolveBorderRadius(value, tailwindConfig) {
178
+ if (!tailwindConfig?.theme) {
179
+ return null;
180
+ }
181
+ const borderRadius = {
182
+ ...tailwindConfig.theme.borderRadius,
183
+ ...tailwindConfig.theme.extend?.borderRadius,
184
+ };
185
+ return borderRadius[value] || null;
186
+ }
187
+ //# sourceMappingURL=tailwind-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-config.js","sourceRoot":"","sources":["../../../src/sdk/workers/tailwind-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,wCAAwC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,cAAc;IACvB,WAAW,EAAE,aAAa;IAC1B,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE;QACL,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,OAAO,EAAE;QACP,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,KAAK,EAAE;QACL,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,GAAG,EAAE;QACH,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,MAAM,EAAE;QACN,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,KAAK,EAAE;QACL,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,MAAM,EAAE;QACN,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,KAAK,EAAE;QACL,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,OAAO,EAAE;QACP,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,GAAG,EAAE;QACH,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,MAAM,EAAE;QACN,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,MAAM,EAAE;QACN,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,MAAM,EAAE;QACN,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,OAAO,EAAE;QACP,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;QAC7E,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;KAC/F;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,cAAqC;IAErC,6CAA6C;IAC7C,MAAM,MAAM,GAAG;QACb,GAAG,cAAc;QACjB,GAAG,cAAc,EAAE,KAAK,EAAE,MAAM;QAChC,GAAG,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;KACzC,CAAC;IAEF,2CAA2C;IAC3C,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,8BAA8B;QAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,2CAA2C;QAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC,OAAO,CAAC;QACvB,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACpD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC;QACvC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC7D,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,cAAqC;IAErC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG;QACd,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO;QAC/B,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO;KACxC,CAAC;IAEF,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,cAAqC;IAErC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG;QACf,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ;QAChC,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ;KACzC,CAAC;IAEF,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAClB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC;SAC7C,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,cAAqC;IAErC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG;QACnB,GAAG,cAAc,CAAC,KAAK,CAAC,YAAY;QACpC,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY;KAC7C,CAAC;IAEF,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACrC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tailwind class-to-style converter for Cloudflare Workers
3
+ *
4
+ * Re-exports from the shared library.
5
+ * Pure JavaScript - no Node.js dependencies.
6
+ */
7
+ export { tw } from '../../lib/tailwind.js';
8
+ export type { TailwindConfig } from '../../lib/tailwind/types.js';
9
+ //# sourceMappingURL=tailwind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind.d.ts","sourceRoot":"","sources":["../../../src/sdk/workers/tailwind.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tailwind class-to-style converter for Cloudflare Workers
3
+ *
4
+ * Re-exports from the shared library.
5
+ * Pure JavaScript - no Node.js dependencies.
6
+ */
7
+ export { tw } from '../../lib/tailwind.js';
8
+ //# sourceMappingURL=tailwind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind.js","sourceRoot":"","sources":["../../../src/sdk/workers/tailwind.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loopwind",
3
- "version": "0.21.0",
3
+ "version": "0.23.0",
4
4
  "description": "A CLI tool for AI code agents and developers for generating images and videos.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -19,6 +19,10 @@
19
19
  "./sdk/compiler": {
20
20
  "types": "./dist/sdk/compiler.d.ts",
21
21
  "default": "./dist/sdk/compiler.js"
22
+ },
23
+ "./sdk/workers": {
24
+ "types": "./dist/sdk/workers/index.d.ts",
25
+ "default": "./dist/sdk/workers/index.js"
22
26
  }
23
27
  },
24
28
  "scripts": {
@@ -50,7 +54,7 @@
50
54
  "url": "https://github.com/tomtev/loopwind/issues"
51
55
  },
52
56
  "dependencies": {
53
- "@resvg/resvg-js": "^2.6.0",
57
+ "@resvg/resvg-wasm": "^2.6.2",
54
58
  "@vitejs/plugin-react": "^5.1.1",
55
59
  "boxen": "^7.1.1",
56
60
  "chalk": "^5.3.0",
@@ -0,0 +1,64 @@
1
+ # Loopwind Cloudflare Workers Test
2
+
3
+ This project tests the loopwind SDK in a Cloudflare Workers environment.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ # Install dependencies
9
+ npm install
10
+
11
+ # Test locally with Node.js (recommended)
12
+ node test-sdk.mjs
13
+
14
+ # Deploy to Cloudflare production
15
+ npm run deploy
16
+ ```
17
+
18
+ ## Local Development Limitations
19
+
20
+ **Note:** Local development with `wrangler dev` has WASM limitations that prevent full functionality. This is a known limitation of the local workerd runtime.
21
+
22
+ For local testing, use:
23
+ 1. **Node.js test script:** `node test-sdk.mjs` (works fully)
24
+ 2. **SVG format only:** `http://localhost:8787/?format=svg&title=Hello` (in wrangler dev)
25
+
26
+ ## Production
27
+
28
+ When deployed to Cloudflare production, all features work:
29
+ - SVG rendering
30
+ - PNG rendering (with WASM)
31
+
32
+ ## API
33
+
34
+ ### GET /
35
+
36
+ Generate an image with query parameters:
37
+ - `title` - Main title text (default: "Hello from Loopwind!")
38
+ - `subtitle` - Subtitle text (default: "Running in Cloudflare Workers")
39
+ - `format` - Output format: `svg` or `png` (default: `svg`)
40
+
41
+ ### GET /health
42
+
43
+ Health check endpoint returning JSON status.
44
+
45
+ ## Example Usage
46
+
47
+ ```bash
48
+ # Generate SVG
49
+ curl "https://your-worker.workers.dev/?title=Hello&format=svg" > image.svg
50
+
51
+ # Generate PNG
52
+ curl "https://your-worker.workers.dev/?title=Hello&format=png" > image.png
53
+ ```
54
+
55
+ ## Project Structure
56
+
57
+ ```
58
+ test-cloudflare-worker/
59
+ ├── src/
60
+ │ └── index.ts # Worker entry point
61
+ ├── test-sdk.mjs # Node.js test script
62
+ ├── wrangler.toml # Wrangler configuration
63
+ └── README.md
64
+ ```
@@ -0,0 +1 @@
1
+ This folder contains the built output assets for the worker "loopwind-worker-test" generated at 2025-12-10T07:43:03.352Z.