loopwind 0.9.1 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/FONTS.md +13 -13
  2. package/HELPERS_DEMO.md +2 -2
  3. package/PROJECT_STRUCTURE.md +38 -38
  4. package/PUBLISHING.md +13 -13
  5. package/README.md +71 -71
  6. package/REGISTRY_SETUP.md +18 -18
  7. package/SHADCN_INTEGRATION.md +7 -7
  8. package/TAILWIND.md +4 -4
  9. package/TEMPLATE_SOURCES.md +30 -30
  10. package/dist/lib/renderer.js +15 -15
  11. package/dist/lib/renderer.js.map +1 -1
  12. package/dist/lib/tailwind-detector.js +1 -1
  13. package/dist/lib/tailwind-detector.js.map +1 -1
  14. package/dist/lib/tailwind.d.ts +1 -1
  15. package/dist/lib/tailwind.d.ts.map +1 -1
  16. package/dist/lib/tailwind.js +19 -19
  17. package/dist/lib/tailwind.js.map +1 -1
  18. package/dist/lib/template-validator.js +1 -1
  19. package/dist/lib/template-validator.js.map +1 -1
  20. package/examples/nextjs-api/README.md +6 -6
  21. package/examples/nextjs-api/pages/api/intro-video.ts +1 -1
  22. package/examples/nextjs-api/pages/api/og-image.ts +2 -2
  23. package/package.json +2 -3
  24. package/test-templates/TESTS.md +1 -1
  25. package/test-templates/test-sdk.mjs +2 -2
  26. package/website/README.md +2 -2
  27. package/website/astro.config.mjs +1 -1
  28. package/website/package-lock.json +186 -2480
  29. package/website/package.json +1 -1
  30. package/website/public/robots.txt +1 -1
  31. package/_dsgn/templates/banner-hero/banner-hero.tsx +0 -57
  32. package/_dsgn/templates/banner-hero/meta.json +0 -14
  33. package/_dsgn/templates/composite-card/meta.json +0 -16
  34. package/_dsgn/templates/composite-card/template.tsx +0 -44
  35. package/_dsgn/templates/image/meta.json +0 -13
  36. package/_dsgn/templates/image/template.tsx +0 -28
  37. package/_dsgn/templates/kitchen-sink/meta.json +0 -13
  38. package/_dsgn/templates/kitchen-sink/template.tsx +0 -72
  39. package/_dsgn/templates/qr-card/meta.json +0 -14
  40. package/_dsgn/templates/qr-card/template.tsx +0 -39
  41. package/_dsgn/templates/test-parent/child/meta.json +0 -11
  42. package/_dsgn/templates/test-parent/child/template.tsx +0 -27
  43. package/_dsgn/templates/test-parent/meta.json +0 -12
  44. package/_dsgn/templates/test-parent/template.tsx +0 -30
  45. package/_dsgn/templates/test-sibling/meta.json +0 -11
  46. package/_dsgn/templates/test-sibling/template.tsx +0 -20
  47. package/_dsgn/templates/video/.tmp/template-1763421345296.mjs +0 -43
  48. package/_dsgn/templates/video/.tmp/template-1763421362228.mjs +0 -43
  49. package/_dsgn/templates/video/.tmp/template-1763421377706.mjs +0 -43
  50. package/_dsgn/templates/video/meta.json +0 -17
  51. package/_dsgn/templates/video/template.tsx +0 -48
  52. package/test-templates/_dsgn/templates/absolute-spin/meta.json +0 -7
  53. package/test-templates/_dsgn/templates/absolute-spin/template.tsx +0 -16
  54. package/test-templates/_dsgn/templates/animated-intro/.tmp/template-1763468771640.mjs +0 -7
  55. package/test-templates/_dsgn/templates/animated-intro/meta.json +0 -10
  56. package/test-templates/_dsgn/templates/animated-intro/template.tsx +0 -23
  57. package/test-templates/_dsgn/templates/centered-spin/.tmp/template-1763468525386.mjs +0 -7
  58. package/test-templates/_dsgn/templates/centered-spin/meta.json +0 -7
  59. package/test-templates/_dsgn/templates/centered-spin/template.tsx +0 -11
  60. package/test-templates/_dsgn/templates/composite/.tmp/template-1763468815645.mjs +0 -7
  61. package/test-templates/_dsgn/templates/composite/meta.json +0 -9
  62. package/test-templates/_dsgn/templates/composite/template.tsx +0 -23
  63. package/test-templates/_dsgn/templates/easing-test/.tmp/template-1763468824501.mjs +0 -7
  64. package/test-templates/_dsgn/templates/easing-test/meta.json +0 -7
  65. package/test-templates/_dsgn/templates/easing-test/template.tsx +0 -47
  66. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466364336.mjs +0 -10
  67. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466584319.mjs +0 -10
  68. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466667797.mjs +0 -10
  69. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466746504.mjs +0 -10
  70. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466930225.mjs +0 -10
  71. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467004552.mjs +0 -10
  72. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467060334.mjs +0 -10
  73. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467124493.mjs +0 -10
  74. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467174690.mjs +0 -10
  75. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467359134.mjs +0 -10
  76. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467451928.mjs +0 -10
  77. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467758275.mjs +0 -10
  78. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467985201.mjs +0 -10
  79. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468020563.mjs +0 -10
  80. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468090428.mjs +0 -10
  81. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468211036.mjs +0 -10
  82. package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468394057.mjs +0 -10
  83. package/test-templates/_dsgn/templates/minimal-spin/meta.json +0 -7
  84. package/test-templates/_dsgn/templates/minimal-spin/template.tsx +0 -13
  85. package/test-templates/_dsgn/templates/no-origin-spin/meta.json +0 -7
  86. package/test-templates/_dsgn/templates/no-origin-spin/template.tsx +0 -10
  87. package/test-templates/_dsgn/templates/opacity-test/meta.json +0 -7
  88. package/test-templates/_dsgn/templates/opacity-test/template.tsx +0 -9
  89. package/test-templates/_dsgn/templates/qr-code/.tmp/template-1763468758954.mjs +0 -17
  90. package/test-templates/_dsgn/templates/qr-code/.tmp/template-1763468815672.mjs +0 -17
  91. package/test-templates/_dsgn/templates/qr-code/meta.json +0 -9
  92. package/test-templates/_dsgn/templates/qr-code/template.tsx +0 -20
  93. package/test-templates/_dsgn/templates/rotation-abs-test/meta.json +0 -7
  94. package/test-templates/_dsgn/templates/rotation-abs-test/template.tsx +0 -15
  95. package/test-templates/_dsgn/templates/rotation-corner/meta.json +0 -7
  96. package/test-templates/_dsgn/templates/rotation-corner/template.tsx +0 -12
  97. package/test-templates/_dsgn/templates/rotation-test/meta.json +0 -7
  98. package/test-templates/_dsgn/templates/rotation-test/template.tsx +0 -12
  99. package/test-templates/_dsgn/templates/shake-test/meta.json +0 -7
  100. package/test-templates/_dsgn/templates/shake-test/template.tsx +0 -12
  101. package/test-templates/_dsgn/templates/static-image/.tmp/template-1763468746271.mjs +0 -7
  102. package/test-templates/_dsgn/templates/static-image/meta.json +0 -9
  103. package/test-templates/_dsgn/templates/static-image/template.tsx +0 -19
  104. package/test-templates/_dsgn/templates/translate-test/meta.json +0 -7
  105. package/test-templates/_dsgn/templates/translate-test/template.tsx +0 -9
  106. package/test-templates/_dsgn/templates/video-loops/.tmp/template-1763468793192.mjs +0 -15
  107. package/test-templates/_dsgn/templates/video-loops/meta.json +0 -9
  108. package/test-templates/_dsgn/templates/video-loops/template.tsx +0 -39
  109. package/test-templates/_dsgn/templates/wrapped-spin/meta.json +0 -7
  110. package/test-templates/_dsgn/templates/wrapped-spin/template.tsx +0 -17
package/FONTS.md CHANGED
@@ -1,6 +1,6 @@
1
- # Font Handling in dsgn
1
+ # Font Handling in loopwind
2
2
 
3
- dsgn has a two-part font system:
3
+ loopwind has a two-part font system:
4
4
  1. **Font Data** (template-specific) - Actual font files loaded by Satori
5
5
  2. **Font Classes** (project-wide) - CSS font-family applied via `tw()`
6
6
 
@@ -62,11 +62,11 @@ my-template/
62
62
  - ✅ **TTF** (`.ttf`) - Also supported
63
63
  - ✅ **OTF** (`.otf`) - Also supported
64
64
 
65
- ## Font Classes (from dsgn.json)
65
+ ## Font Classes (from loopwind.json)
66
66
 
67
- Use Tailwind font-family classes in templates. These reference the font stacks in `dsgn.json`:
67
+ Use Tailwind font-family classes in templates. These reference the font stacks in `loopwind.json`:
68
68
 
69
- **dsgn.json:**
69
+ **loopwind.json:**
70
70
  ```json
71
71
  {
72
72
  "fonts": {
@@ -82,12 +82,12 @@ Use Tailwind font-family classes in templates. These reference the font stacks i
82
82
  export default function({ title, tw }) {
83
83
  return (
84
84
  <div style={tw('w-full h-full')}>
85
- {/* Uses fonts.sans from dsgn.json */}
85
+ {/* Uses fonts.sans from loopwind.json */}
86
86
  <h1 style={tw('font-sans text-6xl font-bold')}>
87
87
  {title}
88
88
  </h1>
89
89
 
90
- {/* Uses fonts.mono from dsgn.json */}
90
+ {/* Uses fonts.mono from loopwind.json */}
91
91
  <code style={tw('font-mono text-sm')}>
92
92
  Hello World
93
93
  </code>
@@ -97,14 +97,14 @@ export default function({ title, tw }) {
97
97
  ```
98
98
 
99
99
  **Available classes:**
100
- - `font-sans` - Uses `fonts.sans` from dsgn.json (default: system-ui, -apple-system, sans-serif)
101
- - `font-serif` - Uses `fonts.serif` from dsgn.json (default: Georgia, serif)
102
- - `font-mono` - Uses `fonts.mono` from dsgn.json (default: monospace)
100
+ - `font-sans` - Uses `fonts.sans` from loopwind.json (default: system-ui, -apple-system, sans-serif)
101
+ - `font-serif` - Uses `fonts.serif` from loopwind.json (default: Georgia, serif)
102
+ - `font-mono` - Uses `fonts.mono` from loopwind.json (default: monospace)
103
103
 
104
104
  ## How It Works Together
105
105
 
106
106
  1. **Font data** is loaded from template's `meta.json` (or default Noto Sans)
107
- 2. **Font classes** (`font-sans`) apply CSS `fontFamily` from `dsgn.json`
107
+ 2. **Font classes** (`font-sans`) apply CSS `fontFamily` from `loopwind.json`
108
108
  3. The font name in CSS must match a loaded font for Satori to use it
109
109
 
110
110
  **Example:**
@@ -120,7 +120,7 @@ export default function({ title, tw }) {
120
120
  ```
121
121
 
122
122
  ```json
123
- // dsgn.json - Defines font stacks for CSS
123
+ // loopwind.json - Defines font stacks for CSS
124
124
  {
125
125
  "fonts": {
126
126
  "sans": ["Inter", "system-ui", "sans-serif"]
@@ -152,5 +152,5 @@ export default function({ title, tw }) {
152
152
  1. **For most templates:** Use default Noto Sans, no font setup needed
153
153
  2. **For branded templates:** Bundle custom fonts in template's `fonts/` folder
154
154
  3. **Use font classes:** `tw('font-sans')` instead of raw `fontFamily: 'Inter'`
155
- 4. **Match names:** Ensure `dsgn.json` font names match template's loaded fonts
155
+ 4. **Match names:** Ensure `loopwind.json` font names match template's loaded fonts
156
156
  5. **Include fallbacks:** Always include system fallbacks in font stacks
package/HELPERS_DEMO.md CHANGED
@@ -70,7 +70,7 @@ Then use the `video()` helper with the prop value.
70
70
  ## Example: Video with Text Overlay
71
71
 
72
72
  ```tsx
73
- // Template: _dsgn/templates/video-overlay/index.tsx
73
+ // Template: _loopwind/templates/video-overlay/index.tsx
74
74
  export default function VideoOverlay({ tw, video, frame, progress, title }) {
75
75
  // Animate title opacity
76
76
  const opacity = progress < 0.2 ? progress / 0.2 : 1;
@@ -123,7 +123,7 @@ export default function VideoOverlay({ tw, video, frame, progress, title }) {
123
123
 
124
124
  ```bash
125
125
  # Render
126
- dsgn render video-overlay props.json --out output.mp4
126
+ loopwind render video-overlay props.json --out output.mp4
127
127
  ```
128
128
 
129
129
  This will:
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- **dsgn** is a global CLI tool that operates on project-local templates and outputs.
5
+ **loopwind** is a global CLI tool that operates on project-local templates and outputs.
6
6
 
7
7
  Think of it like:
8
8
  - **Global CLI**: Like `npm` or `git` - installed once, used everywhere
@@ -13,11 +13,11 @@ Think of it like:
13
13
 
14
14
  ### Your Project
15
15
 
16
- When you use `dsgn` in your project, this is the structure:
16
+ When you use `loopwind` in your project, this is the structure:
17
17
 
18
18
  ```
19
19
  my-project/
20
- ├── dsgn/
20
+ ├── loopwind/
21
21
  │ ├── templates/ # Installed templates (like node_modules)
22
22
  │ │ ├── banner-hero/
23
23
  │ │ │ ├── banner-hero.tsx
@@ -28,14 +28,14 @@ my-project/
28
28
  │ └── outputs/ # Generated images/videos
29
29
  │ ├── banner-hero-1234567890.png
30
30
  │ └── product-card-1234567891.png
31
- ├── dsgn.json # Your project's design tokens (optional)
31
+ ├── loopwind.json # Your project's design tokens (optional)
32
32
  └── package.json
33
33
  ```
34
34
 
35
35
  ### The CLI Package (this repo)
36
36
 
37
37
  ```
38
- dsgn/
38
+ loopwind/
39
39
  ├── src/
40
40
  │ ├── cli.ts # Main CLI entry point
41
41
  │ ├── commands/ # Command implementations
@@ -64,34 +64,34 @@ dsgn/
64
64
  ### 1. Global Installation
65
65
 
66
66
  ```bash
67
- npm install -g dsgn
67
+ npm install -g loopwind
68
68
  ```
69
69
 
70
- This installs the CLI globally, making the `dsgn` command available anywhere.
70
+ This installs the CLI globally, making the `loopwind` command available anywhere.
71
71
 
72
72
  ### 2. Project Usage
73
73
 
74
74
  ```bash
75
75
  cd ~/my-project
76
- dsgn add banner-hero
76
+ loopwind add banner-hero
77
77
  ```
78
78
 
79
79
  This:
80
80
  1. Fetches template from registry: `https://design.unpeel.dev/r/banner-hero`
81
- 2. Installs to: `~/my-project/dsgn/templates/banner-hero/`
81
+ 2. Installs to: `~/my-project/loopwind/templates/banner-hero/`
82
82
  3. Creates structure if it doesn't exist
83
83
 
84
84
  ### 3. Rendering
85
85
 
86
86
  ```bash
87
- dsgn render banner-hero --props '{"title":"Hello"}'
87
+ loopwind render banner-hero --props '{"title":"Hello"}'
88
88
  ```
89
89
 
90
90
  This:
91
- 1. Loads template from `dsgn/templates/banner-hero/`
92
- 2. Loads config from `dsgn.json` (if exists)
91
+ 1. Loads template from `loopwind/templates/banner-hero/`
92
+ 2. Loads config from `loopwind.json` (if exists)
93
93
  3. Renders with Satori
94
- 4. Saves to `dsgn/outputs/banner-hero-{timestamp}.png`
94
+ 4. Saves to `loopwind/outputs/banner-hero-{timestamp}.png`
95
95
 
96
96
  ## Why This Architecture?
97
97
 
@@ -155,9 +155,9 @@ Returns:
155
155
  }
156
156
  ```
157
157
 
158
- When you run `dsgn add banner-hero`, it:
158
+ When you run `loopwind add banner-hero`, it:
159
159
  1. Fetches this JSON
160
- 2. Writes files to `dsgn/templates/banner-hero/`
160
+ 2. Writes files to `loopwind/templates/banner-hero/`
161
161
  3. Templates are now local and ready to use
162
162
 
163
163
  ## Git Workflow
@@ -165,20 +165,20 @@ When you run `dsgn add banner-hero`, it:
165
165
  ### What to commit?
166
166
 
167
167
  **DO commit:**
168
- - `dsgn/templates/` - Your templates (like `node_modules` in some projects)
169
- - `dsgn.json` - Your design configuration
168
+ - `loopwind/templates/` - Your templates (like `node_modules` in some projects)
169
+ - `loopwind.json` - Your design configuration
170
170
 
171
171
  **DON'T commit:**
172
- - `dsgn/outputs/` - Generated files (usually)
172
+ - `loopwind/outputs/` - Generated files (usually)
173
173
 
174
174
  Example `.gitignore`:
175
175
 
176
176
  ```gitignore
177
177
  # Ignore generated outputs
178
- dsgn/outputs/
178
+ loopwind/outputs/
179
179
 
180
180
  # Keep templates (optional - depends on your workflow)
181
- # dsgn/templates/
181
+ # loopwind/templates/
182
182
  ```
183
183
 
184
184
  Some teams prefer to commit templates (reproducibility), others prefer to install them (like npm packages).
@@ -215,46 +215,46 @@ mkdir my-project
215
215
  cd my-project
216
216
 
217
217
  # Initialize config
218
- dsgn init
218
+ loopwind init
219
219
 
220
220
  # Install templates
221
- dsgn add banner-hero
222
- dsgn add product-card
221
+ loopwind add banner-hero
222
+ loopwind add product-card
223
223
 
224
224
  # Render images
225
- dsgn render banner-hero --props props.json
225
+ loopwind render banner-hero --props props.json
226
226
  ```
227
227
 
228
228
  ### Sharing with Team
229
229
 
230
230
  ```bash
231
231
  # Developer 1
232
- git add dsgn/templates/
232
+ git add loopwind/templates/
233
233
  git commit -m "Add banner template"
234
234
  git push
235
235
 
236
236
  # Developer 2
237
237
  git pull
238
- dsgn list # See all templates
239
- dsgn render banner-hero --props '{"title":"Team Banner"}'
238
+ loopwind list # See all templates
239
+ loopwind render banner-hero --props '{"title":"Team Banner"}'
240
240
  ```
241
241
 
242
242
  ### CI/CD Pipeline
243
243
 
244
244
  ```yaml
245
245
  # .github/workflows/generate-images.yml
246
- - name: Install dsgn
247
- run: npm install -g dsgn
246
+ - name: Install loopwind
247
+ run: npm install -g loopwind
248
248
 
249
249
  - name: Generate images
250
250
  run: |
251
- dsgn render banner-hero --props props/hero.json
252
- dsgn render product-card --props props/product.json
251
+ loopwind render banner-hero --props props/hero.json
252
+ loopwind render product-card --props props/product.json
253
253
 
254
254
  - name: Upload artifacts
255
255
  uses: actions/upload-artifact@v3
256
256
  with:
257
- path: dsgn/outputs/
257
+ path: loopwind/outputs/
258
258
  ```
259
259
 
260
260
  ## Future Enhancements
@@ -262,25 +262,25 @@ dsgn render banner-hero --props '{"title":"Team Banner"}'
262
262
  ### Template Versions
263
263
 
264
264
  ```bash
265
- dsgn add banner-hero@2.0.0
266
- dsgn update banner-hero
265
+ loopwind add banner-hero@2.0.0
266
+ loopwind update banner-hero
267
267
  ```
268
268
 
269
269
  ### Template Marketplace
270
270
 
271
271
  ```bash
272
- dsgn search "hero"
273
- dsgn add @company/custom-banner
272
+ loopwind search "hero"
273
+ loopwind add @company/custom-banner
274
274
  ```
275
275
 
276
276
  ### Global vs Local
277
277
 
278
278
  ```bash
279
279
  # Install globally (like npm -g)
280
- dsgn add banner-hero --global
280
+ loopwind add banner-hero --global
281
281
 
282
282
  # Install locally (default, like npm install)
283
- dsgn add banner-hero
283
+ loopwind add banner-hero
284
284
  ```
285
285
 
286
286
  This is the **Shadcn for design and marketing** - same philosophy of owning your code, but for design assets!
package/PUBLISHING.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Publishing Guide
2
2
 
3
- This guide explains how to publish `dsgn` to npm.
3
+ This guide explains how to publish `loopwind` to npm.
4
4
 
5
5
  ## Prerequisites
6
6
 
7
7
  1. npm account (create at https://www.npmjs.com/signup)
8
8
  2. npm CLI logged in: `npm login`
9
- 3. Package name availability check: `npm search dsgn`
9
+ 3. Package name availability check: `npm search loopwind`
10
10
 
11
11
  ## Pre-publish Checklist
12
12
 
@@ -37,8 +37,8 @@ You can test the package locally before publishing:
37
37
 
38
38
  ```bash
39
39
  npm pack
40
- npm install -g ./dsgn-0.1.0.tgz
41
- dsgn --help
40
+ npm install -g ./loopwind-0.1.0.tgz
41
+ loopwind --help
42
42
  ```
43
43
 
44
44
  ### 3. Publish to npm
@@ -58,13 +58,13 @@ npm publish --access public
58
58
  Check that it's published:
59
59
 
60
60
  ```bash
61
- npm view dsgn
61
+ npm view loopwind
62
62
  ```
63
63
 
64
64
  Test installation:
65
65
 
66
66
  ```bash
67
- npx dsgn@latest --help
67
+ npx loopwind@latest --help
68
68
  ```
69
69
 
70
70
  ## Post-publish
@@ -92,13 +92,13 @@ npm version major # 0.1.0 -> 1.0.0
92
92
 
93
93
  ## Package Name Alternatives
94
94
 
95
- If `dsgn` is taken, consider:
95
+ If `loopwind` is taken, consider:
96
96
 
97
- - `@yourusername/dsgn` (scoped package)
97
+ - `@yourusername/loopwind` (scoped package)
98
98
  - `design-cli`
99
99
  - `designkit-cli`
100
- - `dsgn-cli`
101
- - `template-dsgn`
100
+ - `loopwind-cli`
101
+ - `template-loopwind`
102
102
 
103
103
  Check availability:
104
104
 
@@ -111,13 +111,13 @@ npm search <package-name>
111
111
  If you need to unpublish (within 72 hours):
112
112
 
113
113
  ```bash
114
- npm unpublish dsgn@0.1.0
114
+ npm unpublish loopwind@0.1.0
115
115
  ```
116
116
 
117
117
  Note: Unpublishing is discouraged. Use `npm deprecate` instead for older versions:
118
118
 
119
119
  ```bash
120
- npm deprecate dsgn@0.1.0 "Please upgrade to 0.2.0"
120
+ npm deprecate loopwind@0.1.0 "Please upgrade to 0.2.0"
121
121
  ```
122
122
 
123
123
  ## CI/CD Publishing (GitHub Actions)
@@ -161,7 +161,7 @@ npm publish --tag beta
161
161
  Install beta:
162
162
 
163
163
  ```bash
164
- npm install dsgn@beta
164
+ npm install loopwind@beta
165
165
  ```
166
166
 
167
167
  ## Resources