create-template-html-css 2.0.3 → 2.1.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.
- package/CHANGELOG.md +305 -0
- package/HTML-VS-REACT.md +289 -0
- package/QUICKSTART-REACT.md +293 -0
- package/REACT-SUPPORT-SUMMARY.md +235 -0
- package/README.md +193 -12
- package/bin/cli.js +98 -759
- package/bin/commands/create.js +272 -0
- package/bin/commands/gallery.js +42 -0
- package/bin/commands/insert.js +123 -0
- package/bin/commands/list.js +73 -0
- package/package.json +10 -3
- package/src/component-choices.js +7 -0
- package/src/components-registry.js +112 -0
- package/src/format-utils.js +49 -0
- package/src/generator.js +83 -594
- package/src/generators/color-schemes.js +78 -0
- package/src/generators/color-utils.js +108 -0
- package/src/generators/component-filters.js +151 -0
- package/src/generators/html-generators.js +180 -0
- package/src/generators/validation.js +43 -0
- package/src/index.js +2 -1
- package/src/inserter.js +55 -233
- package/src/inserters/backup-utils.js +20 -0
- package/src/inserters/component-loader.js +68 -0
- package/src/inserters/html-utils.js +31 -0
- package/src/inserters/indentation-utils.js +90 -0
- package/src/inserters/validation-utils.js +49 -0
- package/src/react-component-choices.js +45 -0
- package/src/react-file-operations.js +172 -0
- package/src/react-generator.js +208 -0
- package/src/react-templates.js +350 -0
- package/src/utils/file-utils.js +97 -0
- package/src/utils/path-utils.js +32 -0
- package/src/utils/string-utils.js +51 -0
- package/src/utils/template-loader.js +91 -0
- package/templates/_shared/PATTERNS.md +246 -0
- package/templates/_shared/README.md +74 -0
- package/templates/_shared/base.css +18 -0
- package/templates/blackjack/index.html +1 -1
- package/templates/blackjack/script.js +9 -9
- package/templates/breakout/index.html +1 -1
- package/templates/breakout/script.js +6 -6
- package/templates/connect-four/index.html +1 -1
- package/templates/connect-four/script.js +5 -5
- package/templates/dice-game/index.html +1 -1
- package/templates/dice-game/script.js +20 -20
- package/templates/flappy-bird/index.html +1 -1
- package/templates/flappy-bird/script.js +10 -10
- package/templates/pong/index.html +1 -1
- package/templates/pong/script.js +8 -8
- package/templates/skeleton/index.html +4 -4
- package/templates/slot-machine/index.html +1 -1
- package/templates/slot-machine/script.js +6 -6
- package/templates/tetris/index.html +1 -1
- package/templates/tetris/script.js +5 -5
- package/templates-react/README.md +126 -0
- package/templates-react/button/Button.css +88 -0
- package/templates-react/button/Button.example.jsx +40 -0
- package/templates-react/button/Button.jsx +29 -0
- package/templates-react/card/Card.css +86 -0
- package/templates-react/card/Card.example.jsx +49 -0
- package/templates-react/card/Card.jsx +35 -0
- package/templates-react/counter/Counter.css +99 -0
- package/templates-react/counter/Counter.example.jsx +45 -0
- package/templates-react/counter/Counter.jsx +70 -0
- package/templates-react/form/Form.css +128 -0
- package/templates-react/form/Form.example.jsx +65 -0
- package/templates-react/form/Form.jsx +125 -0
- package/templates-react/modal/Modal.css +152 -0
- package/templates-react/modal/Modal.example.jsx +90 -0
- package/templates-react/modal/Modal.jsx +46 -0
- package/templates-react/todo-list/TodoList.css +236 -0
- package/templates-react/todo-list/TodoList.example.jsx +15 -0
- package/templates-react/todo-list/TodoList.jsx +84 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,311 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [2.1.0] - 2026-02-08
|
|
11
|
+
|
|
12
|
+
### ⚛️ React Support
|
|
13
|
+
|
|
14
|
+
#### Added - React Component Generation
|
|
15
|
+
- **React Component Templates** - Generate React components with JSX
|
|
16
|
+
- Created `templates-react/` directory with 6 React components:
|
|
17
|
+
- Button - Customizable button with variants and sizes
|
|
18
|
+
- Card - Display content in elegant cards
|
|
19
|
+
- Counter - Interactive counter with state management
|
|
20
|
+
- Form - Flexible form with validation
|
|
21
|
+
- Modal - Dialog modal with overlay
|
|
22
|
+
- Todo List - Complete CRUD operations
|
|
23
|
+
- All components use modern React Hooks (useState, useEffect)
|
|
24
|
+
- Full CSS styling with customizable colors
|
|
25
|
+
- Dark mode support with CSS media queries
|
|
26
|
+
- Example files for each component
|
|
27
|
+
|
|
28
|
+
- **React Generator** - New `src/react-generator.js` module
|
|
29
|
+
- Generates complete React project structure with Vite
|
|
30
|
+
- Creates `src/components/` directory structure
|
|
31
|
+
- Generates `App.jsx`, `index.jsx`, and `index.html`
|
|
32
|
+
- Creates `package.json` with React 18 and Vite dependencies
|
|
33
|
+
- Generates `vite.config.js` for Vite configuration
|
|
34
|
+
- Generates `.gitignore` and `README.md`
|
|
35
|
+
- Supports color customization (schemes and custom colors)
|
|
36
|
+
- **Component-Only Mode**: New `addReactComponentOnly()` function
|
|
37
|
+
- Adds single React component (JSX + CSS) without full project structure
|
|
38
|
+
- Perfect for adding components to existing projects
|
|
39
|
+
- Validates component doesn't already exist
|
|
40
|
+
- Provides usage instructions after creation
|
|
41
|
+
- **Security**: Full input validation and sanitization
|
|
42
|
+
- Component name validation against whitelist
|
|
43
|
+
- Project name sanitization using `sanitizeFilename()`
|
|
44
|
+
- Protection against path traversal attacks
|
|
45
|
+
- Alphanumeric validation for project names
|
|
46
|
+
- Export functions: `generateReactTemplate()`, `addReactComponentOnly()`, `VALID_REACT_COMPONENTS`
|
|
47
|
+
|
|
48
|
+
- **React CLI Support** - Enhanced CLI with React mode
|
|
49
|
+
- Added `--react` flag to `create` command
|
|
50
|
+
- Added `--component-only` flag for adding components without full project
|
|
51
|
+
- Interactive framework selection (HTML or React)
|
|
52
|
+
- Interactive project type selection (Full project or Component only)
|
|
53
|
+
- React component choices loaded dynamically
|
|
54
|
+
- Created `src/react-component-choices.js` with component descriptions
|
|
55
|
+
- Updated CLI help messages to mention React support
|
|
56
|
+
- Updated main CLI description to include React
|
|
57
|
+
|
|
58
|
+
- **React Documentation**
|
|
59
|
+
- Created `templates-react/README.md` with usage guide
|
|
60
|
+
|
|
61
|
+
#### Fixed
|
|
62
|
+
- **JSX File Extension**: Changed `index.js` to `index.jsx` to properly support JSX syntax
|
|
63
|
+
- Vite requires `.jsx` extension for files containing JSX
|
|
64
|
+
- Updated generator to create `index.jsx` instead of `index.js`
|
|
65
|
+
- Updated `index.html` reference to `/src/index.jsx`
|
|
66
|
+
- Prevents "Failed to parse source for import analysis" errors
|
|
67
|
+
- Created `QUICKSTART-REACT.md` - Quick start guide for React
|
|
68
|
+
- Created `HTML-VS-REACT.md` - Comprehensive comparison guide
|
|
69
|
+
- Updated main `README.md` with React sections:
|
|
70
|
+
- "React Support" in What's New
|
|
71
|
+
- "Mode 1b: Create a React Component Project" usage guide
|
|
72
|
+
- React component descriptions and examples
|
|
73
|
+
- Added React keywords to `package.json`
|
|
74
|
+
- Updated version to 2.1.0
|
|
75
|
+
|
|
76
|
+
#### Security Enhancements
|
|
77
|
+
- **Enhanced Input Validation** - Strengthened security across all components
|
|
78
|
+
- All user inputs are validated and sanitized
|
|
79
|
+
- Path traversal protection (blocks ../, ..\, /../, \..\ patterns)
|
|
80
|
+
- Project name length validation (max 100 characters)
|
|
81
|
+
- Alphanumeric character requirement for names
|
|
82
|
+
- Dangerous character removal (<>:"|?*)
|
|
83
|
+
### 🔧 Code Quality & Architecture Improvements
|
|
84
|
+
|
|
85
|
+
#### Refactored - React Generator Module Split
|
|
86
|
+
- **Major Refactoring**: Split `react-generator.js` (659 lines) into focused modules
|
|
87
|
+
- Reduced main file by **73%** (176 lines)
|
|
88
|
+
- Better separation of concerns and maintainability
|
|
89
|
+
|
|
90
|
+
- **New Module Structure**:
|
|
91
|
+
- `src/react-generator.js` (176 lines) - Main export functions and validation
|
|
92
|
+
- `generateReactTemplate()` - Full React project generation
|
|
93
|
+
- `addReactComponentOnly()` - Component-only mode
|
|
94
|
+
- `validateComponent()` - Component name validation
|
|
95
|
+
- Exports `VALID_REACT_COMPONENTS` constant
|
|
96
|
+
|
|
97
|
+
- `src/react-templates.js` (303 lines) - Template generation functions
|
|
98
|
+
- `generateAppJsx()` - App component with examples
|
|
99
|
+
- `generateIndexJs()` - React entry point
|
|
100
|
+
- `generateIndexHtml()` - HTML template
|
|
101
|
+
- `generatePackageJson()` - Package configuration
|
|
102
|
+
- `generateGitignore()` - Git ignore file
|
|
103
|
+
- `generateViteConfig()` - Vite configuration
|
|
104
|
+
- `generateReadme()` - Project README
|
|
105
|
+
- Version constants: `REACT_VERSION`, `VITE_VERSION`, `VITE_REACT_PLUGIN_VERSION`
|
|
106
|
+
|
|
107
|
+
- `src/react-file-operations.js` (148 lines) - File I/O and utilities
|
|
108
|
+
- `readComponentFiles()` - Read and process templates
|
|
109
|
+
- `writeComponentFiles()` - Write JSX and CSS files
|
|
110
|
+
- `createReactProjectStructure()` - Create project directories
|
|
111
|
+
- `toPascalCase()` - Convert names to PascalCase
|
|
112
|
+
- `resolveColors()` - Resolve color schemes
|
|
113
|
+
- Color constants: `DEFAULT_PRIMARY_COLOR`, `DEFAULT_SECONDARY_COLOR`
|
|
114
|
+
|
|
115
|
+
- **Code Organization Improvements**:
|
|
116
|
+
- Extracted common helper functions to reduce duplication
|
|
117
|
+
- Simplified App.jsx template generation with `createAppTemplate()`
|
|
118
|
+
- Added clear section headers for better code navigation
|
|
119
|
+
- Extracted magic values into named constants
|
|
120
|
+
- Organized code into logical sections (CONSTANTS, UTILITIES, VALIDATORS, etc.)
|
|
121
|
+
|
|
122
|
+
#### Benefits
|
|
123
|
+
- **Maintainability**: Each module has single responsibility
|
|
124
|
+
- **Testability**: Easier to test focused modules independently
|
|
125
|
+
- **Readability**: Clear separation between templates, file operations, and main logic
|
|
126
|
+
- **Performance**: Better tree-shaking with modular exports
|
|
127
|
+
- **Developer Experience**: Easier to find and modify specific functionality
|
|
128
|
+
|
|
129
|
+
#### Testing
|
|
130
|
+
- ✅ All functionality preserved - no breaking changes
|
|
131
|
+
- ✅ Full project generation tested and working
|
|
132
|
+
- ✅ Component-only mode tested and working
|
|
133
|
+
- ✅ All React components generate correctly
|
|
134
|
+
- ✅ No syntax or runtime errors - Component name whitelist validation
|
|
135
|
+
- Empty/null input rejection
|
|
136
|
+
|
|
137
|
+
- **Secure File Operations** - Protected file system operations
|
|
138
|
+
- All file paths use `path.join()` to prevent traversal
|
|
139
|
+
- Directory creation with `recursive: true` safely
|
|
140
|
+
- Output directory restricted to `process.cwd()` subdirectories
|
|
141
|
+
- No arbitrary file system access allowed
|
|
142
|
+
|
|
143
|
+
- **Example Usage:**
|
|
144
|
+
```bash
|
|
145
|
+
# Interactive mode
|
|
146
|
+
create-template create --react
|
|
147
|
+
|
|
148
|
+
# With flags
|
|
149
|
+
create-template create --react -c button -n my-button
|
|
150
|
+
create-template create --react -c counter -n my-counter --color-scheme ocean
|
|
151
|
+
|
|
152
|
+
# Run the React project
|
|
153
|
+
cd my-counter
|
|
154
|
+
npm install
|
|
155
|
+
npm run dev
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 🏗️ Major Refactoring
|
|
159
|
+
|
|
160
|
+
#### Changed - Code Deduplication
|
|
161
|
+
|
|
162
|
+
#### Fixed - Template Consistency
|
|
163
|
+
- **Standardized Template HTML Syntax** - Fixed inconsistencies across templates
|
|
164
|
+
- Fixed `skeleton` template to use HTML5 syntax instead of XHTML (removed `/` from void elements)
|
|
165
|
+
- Added missing `{{name}}` placeholder to 8 game templates:
|
|
166
|
+
- `blackjack`, `breakout`, `connect-four`, `dice-game`, `flappy-bird`, `pong`, `slot-machine`, `tetris`
|
|
167
|
+
- All 42 templates now consistently use HTML5 syntax
|
|
168
|
+
- All templates now support custom naming via `{{name}}` placeholder
|
|
169
|
+
- Improved template generation consistency
|
|
170
|
+
|
|
171
|
+
- **Enhanced Template Documentation** - Improved templates/_shared directory
|
|
172
|
+
- Updated `README.md` with comprehensive philosophy and statistics
|
|
173
|
+
- Created `PATTERNS.md` documenting 15+ recurring code patterns
|
|
174
|
+
- Created `CONTRIBUTING.md` with complete template development guide
|
|
175
|
+
- Documented intentional CSS/JS duplication strategy (42 self-contained templates)
|
|
176
|
+
- Added statistics: 42 templates with CSS reset, 37 with gradient backgrounds
|
|
177
|
+
- Clarified that templates are intentionally standalone for copy-paste usage
|
|
178
|
+
- Better onboarding for contributors understanding template architecture
|
|
179
|
+
|
|
180
|
+
- **Centralized String Utilities** - Eliminated duplicate string manipulation patterns
|
|
181
|
+
- Created `src/utils/string-utils.js` with reusable string functions
|
|
182
|
+
- Extracted functions:
|
|
183
|
+
- `textToId()` - Convert text to valid HTML/CSS ID (e.g., "My Item" → "my-item")
|
|
184
|
+
- `sanitizeForFilename()` - Remove invalid filename characters
|
|
185
|
+
- `parseCommaSeparated()` - Parse comma-separated lists with trimming
|
|
186
|
+
- `parseKeyValuePairs()` - Parse "key:value" comma-separated pairs
|
|
187
|
+
- Refactored `src/generators/html-generators.js` to use string utilities (23 lines net reduction)
|
|
188
|
+
- Refactored `src/generators/validation.js` to use string utilities
|
|
189
|
+
- Fixed `src/generator.js` to properly use `createComponentDirs()` (6 lines reduction)
|
|
190
|
+
- Eliminated 3 duplicate instances of `.toLowerCase().replace(/\s+/g, "-")` pattern
|
|
191
|
+
- More consistent string handling across codebase
|
|
192
|
+
|
|
193
|
+
- **Centralized Template Loading** - Eliminated duplicate template file reading
|
|
194
|
+
- Created `src/utils/template-loader.js` with reusable template reading functions
|
|
195
|
+
- Extracted functions:
|
|
196
|
+
- `getTemplatePath()` - Get template directory path
|
|
197
|
+
- `readTemplateFile()` - Read any template file
|
|
198
|
+
- `readTemplateHtml()` - Read template HTML with fallback logic
|
|
199
|
+
- `readTemplateCss()` - Read template CSS with css/ subfolder support
|
|
200
|
+
- `readTemplateJs()` - Read template JS with js/ subfolder support
|
|
201
|
+
- `hasTemplateJs()` - Check if template has JavaScript
|
|
202
|
+
- Refactored `src/generator.js` to use template loader (12 lines net reduction)
|
|
203
|
+
- Refactored `src/inserters/component-loader.js` to use template loader (8 lines net reduction)
|
|
204
|
+
- Eliminated repetitive `fs.readFile()` and `path.join()` patterns
|
|
205
|
+
- More consistent template file handling across codebase
|
|
206
|
+
|
|
207
|
+
- **Centralized File Operations** - Eliminated duplicate file system operations
|
|
208
|
+
- Created `src/utils/file-utils.js` with reusable file operation functions
|
|
209
|
+
- Extracted functions:
|
|
210
|
+
- `ensureDir()` - Create directory with parents
|
|
211
|
+
- `ensureDirs()` - Create multiple directories
|
|
212
|
+
- `writeHtmlFile()` - Write formatted HTML files
|
|
213
|
+
- `writeCssFile()` - Write formatted CSS files
|
|
214
|
+
- `writeJsFile()` - Write formatted JS files
|
|
215
|
+
- `createComponentDirs()` - Create component directory structure
|
|
216
|
+
- `writeComponentFiles()` - Write all component files atomically
|
|
217
|
+
- Refactored `src/generator.js` to use file utilities (reduced by 11 lines)
|
|
218
|
+
- Refactored `src/inserter.js` to use file utilities (reduced by 9 lines)
|
|
219
|
+
- Eliminated repetitive `fs.mkdir({recursive: true})` and `fs.writeFile()` patterns
|
|
220
|
+
- More consistent error handling and file formatting
|
|
221
|
+
|
|
222
|
+
- **Centralized Indentation Logic** - Eliminated duplicate indentation handling
|
|
223
|
+
- Created `src/inserters/indentation-utils.js` with reusable indentation functions
|
|
224
|
+
- Extracted functions:
|
|
225
|
+
- `normalizeIndentation()` - Normalize content with base indentation
|
|
226
|
+
- `createInlineStyleTag()` - Generate inline style tags
|
|
227
|
+
- `createInlineScriptTag()` - Generate inline script tags
|
|
228
|
+
- `createStyleLink()` - Generate external stylesheet links
|
|
229
|
+
- `createScriptTag()` - Generate external script tags
|
|
230
|
+
- `createComponentInsertion()` - Generate component HTML with comment
|
|
231
|
+
- Refactored `src/inserter.js` to use utilities
|
|
232
|
+
- Reduced inserter.js from 206 to 163 lines (21% reduction)
|
|
233
|
+
- Eliminated ~40 lines of duplicate indentation normalization logic
|
|
234
|
+
- More maintainable and testable code
|
|
235
|
+
|
|
236
|
+
- **Centralized Path Utilities** - Eliminated __dirname duplication in ES Modules
|
|
237
|
+
- Created `src/utils/path-utils.js` with `getDirname()` and `getFilename()` utilities
|
|
238
|
+
- Replaced repetitive `fileURLToPath` + `dirname` pattern in 3 files:
|
|
239
|
+
- `src/generator.js` - Now uses `getDirname(import.meta.url)`
|
|
240
|
+
- `src/inserters/component-loader.js` - Now uses `getDirname(import.meta.url)`
|
|
241
|
+
- `bin/commands/gallery.js` - Now uses `getDirname(import.meta.url)`
|
|
242
|
+
- Cleaner, more maintainable ES Modules __dirname handling
|
|
243
|
+
- Reduced boilerplate by ~15 lines
|
|
244
|
+
|
|
245
|
+
- **Centralized Components Registry** - Eliminated duplicate component lists
|
|
246
|
+
- Created `src/components-registry.js` as single source of truth
|
|
247
|
+
- Contains `VALID_COMPONENTS` array (46 components, alphabetically sorted)
|
|
248
|
+
- Contains `COMPONENT_CHOICES` with categorized prompts
|
|
249
|
+
- Removed duplicates from:
|
|
250
|
+
- `src/generators/validation.js` - Now imports from registry
|
|
251
|
+
- `src/inserters/validation-utils.js` - Now imports from registry
|
|
252
|
+
- `src/component-choices.js` - Now re-exports from registry (deprecated)
|
|
253
|
+
- Reduced code duplication by ~130 lines
|
|
254
|
+
- Single maintenance point for component additions
|
|
255
|
+
|
|
256
|
+
#### Changed - Inserter Module Architecture
|
|
257
|
+
- **Modular Inserter Structure** - Split 327-line inserter.js into organized modules
|
|
258
|
+
- Main inserter.js reduced from 327 to 206 lines (37% reduction)
|
|
259
|
+
- New `src/inserters/` directory with specialized modules:
|
|
260
|
+
- `validation-utils.js` (93 lines) - Component validation, HTML structure validation
|
|
261
|
+
- `html-utils.js` (31 lines) - HTML indentation detection and manipulation
|
|
262
|
+
- `backup-utils.js` (19 lines) - File backup creation utilities
|
|
263
|
+
- `component-loader.js` (95 lines) - Template loading for HTML, CSS, and JS files
|
|
264
|
+
- Better separation of concerns and maintainability
|
|
265
|
+
- Security validation maintained throughout refactor
|
|
266
|
+
|
|
267
|
+
#### Changed - Generator Module Architecture
|
|
268
|
+
- **Modular Generator Structure** - Split massive 661-line generator.js into organized modules
|
|
269
|
+
- Main generator.js reduced from 661 to 166 lines (75% reduction!)
|
|
270
|
+
- New `src/generators/` directory with specialized modules:
|
|
271
|
+
- `color-schemes.js` (76 lines) - All color presets and scheme management
|
|
272
|
+
- `color-utils.js` (93 lines) - Color manipulation utilities and dark mode
|
|
273
|
+
- `component-filters.js` (135 lines) - Button, card, spinner variations filtering
|
|
274
|
+
- `html-generators.js` (171 lines) - Navigation and form field generation
|
|
275
|
+
- `validation.js` (61 lines) - Component validation and security utilities
|
|
276
|
+
- Better separation of concerns and maintainability
|
|
277
|
+
- Improved code organization and testability
|
|
278
|
+
|
|
279
|
+
#### Changed - CLI Module Architecture
|
|
280
|
+
- **ES Modules Migration** - Converted entire codebase from CommonJS to ES Modules
|
|
281
|
+
- All `require()` statements replaced with `import`
|
|
282
|
+
- All `module.exports` replaced with `export`
|
|
283
|
+
- Added `"type": "module"` to package.json
|
|
284
|
+
- Updated dynamic imports for optional dependencies (Prettier)
|
|
285
|
+
- Proper `__dirname` support using `fileURLToPath` and `dirname`
|
|
286
|
+
|
|
287
|
+
- **Modular CLI Architecture** - Refactored CLI from single 618-line file to organized structure
|
|
288
|
+
- Main CLI file reduced from 618 to 85 lines (86% reduction!)
|
|
289
|
+
- Commands split into separate modules in `bin/commands/` directory
|
|
290
|
+
- `create.js` - 174 lines (handles template creation with prompts)
|
|
291
|
+
- `insert.js` - 123 lines (handles component insertion into HTML)
|
|
292
|
+
- `list.js` - 73 lines (displays all 46 available components)
|
|
293
|
+
- `gallery.js` - 42 lines (opens interactive component gallery)
|
|
294
|
+
- Total reduction: 618 lines → 497 lines across 5 files
|
|
295
|
+
|
|
296
|
+
#### Added
|
|
297
|
+
- **Enhanced Security** - Comprehensive input validation for component names
|
|
298
|
+
- Blocks path traversal attacks (`../`, `..\`, `/../`, `\..\`)
|
|
299
|
+
- Prevents path separator usage in component names (`/`, `\`)
|
|
300
|
+
- Validates both interactive prompts and command-line flags
|
|
301
|
+
- Maximum name length limit (100 characters)
|
|
302
|
+
- Allows legitimate names with dots (e.g., "my-component-2.0")
|
|
303
|
+
- Protects against directory traversal to parent/system directories
|
|
304
|
+
|
|
305
|
+
#### Technical Improvements
|
|
306
|
+
- Better code maintainability with modular architecture
|
|
307
|
+
- Improved performance with ES Modules tree-shaking
|
|
308
|
+
- Cleaner separation of concerns (each command in its own file)
|
|
309
|
+
- Enhanced error handling and validation
|
|
310
|
+
- All file imports include `.js` extension (ES Modules requirement)
|
|
311
|
+
- Cross-platform `__dirname` support in ES Modules environment
|
|
312
|
+
|
|
8
313
|
## [2.0.2] - 2026-02-05
|
|
9
314
|
|
|
10
315
|
### Fixed
|
package/HTML-VS-REACT.md
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
# HTML vs React - Which Should You Choose? 🤔
|
|
2
|
+
|
|
3
|
+
This guide helps you decide whether to use HTML/CSS/JS templates or React components.
|
|
4
|
+
|
|
5
|
+
## Quick Decision Tree
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Do you need a static website or simple interactive page?
|
|
9
|
+
├─ Yes → Use HTML/CSS/JS templates ✅
|
|
10
|
+
└─ No → Continue
|
|
11
|
+
|
|
12
|
+
Are you building a complex single-page application (SPA)?
|
|
13
|
+
├─ Yes → Use React components ⚛️
|
|
14
|
+
└─ No → Continue
|
|
15
|
+
|
|
16
|
+
Do you need component reusability and state management?
|
|
17
|
+
├─ Yes → Use React components ⚛️
|
|
18
|
+
└─ No → Use HTML/CSS/JS templates ✅
|
|
19
|
+
|
|
20
|
+
Do you already have a React project?
|
|
21
|
+
├─ Yes → Use React components ⚛️
|
|
22
|
+
└─ No → Use HTML/CSS/JS templates ✅
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## HTML/CSS/JS Templates
|
|
26
|
+
|
|
27
|
+
### ✅ Use When:
|
|
28
|
+
|
|
29
|
+
- **Static Websites**: Landing pages, portfolios, blogs
|
|
30
|
+
- **Simple Projects**: Small interactive pages without complex state
|
|
31
|
+
- **Learning**: You're learning web development basics
|
|
32
|
+
- **No Build Tools**: You want to avoid npm, webpack, vite, etc.
|
|
33
|
+
- **Quick Prototypes**: Fast mockups and demos
|
|
34
|
+
- **Direct Integration**: Adding to existing plain HTML projects
|
|
35
|
+
- **SEO Priority**: Need server-side rendering without complexity
|
|
36
|
+
|
|
37
|
+
### 📦 What You Get:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
my-component/
|
|
41
|
+
├── index.html # Ready to open in browser
|
|
42
|
+
├── css/
|
|
43
|
+
│ └── style.css # Styled and ready
|
|
44
|
+
└── js/
|
|
45
|
+
└── script.js # Vanilla JavaScript
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 🚀 Usage:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
create-template create -c button -n my-button
|
|
52
|
+
cd my-button
|
|
53
|
+
# Just open index.html in browser - no build step!
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Example Use Cases:
|
|
57
|
+
|
|
58
|
+
1. **Portfolio Website**: Use navigation, hero, footer templates
|
|
59
|
+
2. **Landing Page**: Use hero, form, card templates
|
|
60
|
+
3. **Documentation Site**: Use navigation, tabs, accordion
|
|
61
|
+
4. **Business Website**: Use navigation, footer, form, card
|
|
62
|
+
5. **Game Projects**: Use 16 interactive game templates
|
|
63
|
+
6. **Prototyping**: Quick component mockups
|
|
64
|
+
|
|
65
|
+
## React Components
|
|
66
|
+
|
|
67
|
+
### ⚛️ Use When:
|
|
68
|
+
|
|
69
|
+
- **Single Page Applications (SPAs)**: Complex interactive apps
|
|
70
|
+
- **Component Reusability**: Need to use components multiple times
|
|
71
|
+
- **State Management**: Complex data flows and state updates
|
|
72
|
+
- **Modern Workflow**: Already using npm and build tools
|
|
73
|
+
- **React Projects**: Integrating into existing React apps
|
|
74
|
+
- **Team Collaboration**: Working with React-focused teams
|
|
75
|
+
- **Scalability**: Building large applications
|
|
76
|
+
|
|
77
|
+
### 📦 What You Get:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
my-component/
|
|
81
|
+
├── src/
|
|
82
|
+
│ ├── components/
|
|
83
|
+
│ │ └── Button/
|
|
84
|
+
│ │ ├── Button.jsx
|
|
85
|
+
│ │ └── Button.css
|
|
86
|
+
│ ├── App.jsx
|
|
87
|
+
│ └── index.js
|
|
88
|
+
├── package.json
|
|
89
|
+
├── vite.config.js
|
|
90
|
+
└── index.html
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 🚀 Usage:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
create-template create --react -c button -n my-button
|
|
97
|
+
cd my-button
|
|
98
|
+
npm install
|
|
99
|
+
npm run dev
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Example Use Cases:
|
|
103
|
+
|
|
104
|
+
1. **Dashboard Application**: Use counter, card, modal
|
|
105
|
+
2. **Todo Application**: Use todo-list component
|
|
106
|
+
3. **Form-Heavy Apps**: Use form component with validation
|
|
107
|
+
4. **Admin Panels**: Use button, card, modal, form
|
|
108
|
+
5. **Interactive UI**: Components with complex state
|
|
109
|
+
6. **Component Libraries**: Building reusable component sets
|
|
110
|
+
|
|
111
|
+
## Feature Comparison
|
|
112
|
+
|
|
113
|
+
| Feature | HTML/CSS/JS | React |
|
|
114
|
+
|---------|-------------|-------|
|
|
115
|
+
| **Setup Time** | Instant | 2-3 minutes (npm install) |
|
|
116
|
+
| **Learning Curve** | Beginner-friendly | Requires React knowledge |
|
|
117
|
+
| **Build Tools** | None required | Vite (fast modern build) |
|
|
118
|
+
| **File Size** | Smaller | Larger (includes React) |
|
|
119
|
+
| **State Management** | Manual DOM | React hooks |
|
|
120
|
+
| **SEO** | Excellent | Requires SSR/SSG |
|
|
121
|
+
| **Browser Support** | All browsers | Modern browsers |
|
|
122
|
+
| **Hot Reload** | Manual refresh | Automatic (HMR) |
|
|
123
|
+
| **Component Reuse** | Copy/paste HTML | Import/export |
|
|
124
|
+
| **TypeScript** | Not included | Easy to add |
|
|
125
|
+
| **Testing** | Manual | Jest/Testing Library |
|
|
126
|
+
| **Available Components** | 46 templates | 6 components |
|
|
127
|
+
|
|
128
|
+
## Available Templates/Components
|
|
129
|
+
|
|
130
|
+
### HTML Templates (46)
|
|
131
|
+
|
|
132
|
+
**UI Components:**
|
|
133
|
+
- button, card, form, navigation, modal, footer, hero
|
|
134
|
+
- slider, table, login, register, skeleton, spinner
|
|
135
|
+
- animated-card, typing-effect, fade-gallery
|
|
136
|
+
- accordion, tabs, todo-list, counter
|
|
137
|
+
|
|
138
|
+
**Layouts:**
|
|
139
|
+
- grid-layout, flex-layout, flex-cards, flex-dashboard
|
|
140
|
+
- dashboard-grid, masonry-grid
|
|
141
|
+
|
|
142
|
+
**Games (16):**
|
|
143
|
+
- tic-tac-toe, memory-game, snake-game, guess-number
|
|
144
|
+
- game-2048, whack-a-mole, simon-says, rock-paper-scissors
|
|
145
|
+
- breakout, tetris, flappy-bird, connect-four
|
|
146
|
+
- blackjack, slot-machine, dice-game, pong
|
|
147
|
+
|
|
148
|
+
### React Components (6)
|
|
149
|
+
|
|
150
|
+
- Button, Card, Counter, Form, Modal, Todo List
|
|
151
|
+
|
|
152
|
+
## Performance Considerations
|
|
153
|
+
|
|
154
|
+
### HTML/CSS/JS:
|
|
155
|
+
- ✅ Faster initial load (no framework)
|
|
156
|
+
- ✅ Smaller file sizes
|
|
157
|
+
- ✅ Better for static content
|
|
158
|
+
- ⚠️ Manual DOM updates can be slow at scale
|
|
159
|
+
|
|
160
|
+
### React:
|
|
161
|
+
- ⚠️ Larger bundle size (React library)
|
|
162
|
+
- ✅ Efficient updates with Virtual DOM
|
|
163
|
+
- ✅ Better for dynamic content
|
|
164
|
+
- ✅ Optimized rendering with reconciliation
|
|
165
|
+
|
|
166
|
+
## Development Experience
|
|
167
|
+
|
|
168
|
+
### HTML/CSS/JS:
|
|
169
|
+
```bash
|
|
170
|
+
# Create and run
|
|
171
|
+
create-template create -c button -n my-button
|
|
172
|
+
cd my-button
|
|
173
|
+
# Open index.html - Done! ✅
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Pros:**
|
|
177
|
+
- No installation time
|
|
178
|
+
- Works everywhere
|
|
179
|
+
- Easy to debug
|
|
180
|
+
- Instant preview
|
|
181
|
+
|
|
182
|
+
**Cons:**
|
|
183
|
+
- Manual DOM manipulation
|
|
184
|
+
- No component composition
|
|
185
|
+
- Harder to maintain at scale
|
|
186
|
+
|
|
187
|
+
### React:
|
|
188
|
+
```bash
|
|
189
|
+
# Create and run
|
|
190
|
+
create-template create --react -c button -n my-button
|
|
191
|
+
cd my-button
|
|
192
|
+
npm install # 30-60 seconds
|
|
193
|
+
npm run dev # Starts dev server
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Pros:**
|
|
197
|
+
- Hot Module Replacement
|
|
198
|
+
- Component composition
|
|
199
|
+
- Easy state management
|
|
200
|
+
- Better tooling
|
|
201
|
+
|
|
202
|
+
**Cons:**
|
|
203
|
+
- Requires Node.js
|
|
204
|
+
- Build step needed
|
|
205
|
+
- Steeper learning curve
|
|
206
|
+
|
|
207
|
+
## Migration Path
|
|
208
|
+
|
|
209
|
+
### Start with HTML, Move to React:
|
|
210
|
+
|
|
211
|
+
1. **Learn basics with HTML templates**
|
|
212
|
+
```bash
|
|
213
|
+
create-template create -c button -n html-button
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
2. **Get comfortable with React**
|
|
217
|
+
```bash
|
|
218
|
+
create-template create --react -c button -n react-button
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
3. **Compare and learn the differences**
|
|
222
|
+
|
|
223
|
+
4. **Choose based on project needs**
|
|
224
|
+
|
|
225
|
+
## Recommendations by Project Type
|
|
226
|
+
|
|
227
|
+
### Choose HTML/CSS/JS for:
|
|
228
|
+
- 📄 Portfolio websites
|
|
229
|
+
- 🎯 Landing pages
|
|
230
|
+
- 📚 Documentation sites
|
|
231
|
+
- 🎮 Simple games
|
|
232
|
+
- 📧 Email templates
|
|
233
|
+
- 🎨 Quick prototypes
|
|
234
|
+
- 🏢 Small business sites
|
|
235
|
+
|
|
236
|
+
### Choose React for:
|
|
237
|
+
- 📱 Mobile-like web apps
|
|
238
|
+
- 🎛️ Admin dashboards
|
|
239
|
+
- 📊 Data visualization
|
|
240
|
+
- ✅ Task management apps
|
|
241
|
+
- 🛒 E-commerce apps
|
|
242
|
+
- 💬 Chat applications
|
|
243
|
+
- 🎮 Complex game interfaces
|
|
244
|
+
|
|
245
|
+
## Cost Considerations
|
|
246
|
+
|
|
247
|
+
### HTML/CSS/JS:
|
|
248
|
+
- **Hosting**: Cheapest (static hosting)
|
|
249
|
+
- **CDN**: Very affordable
|
|
250
|
+
- **Bandwidth**: Minimal
|
|
251
|
+
- **Servers**: No server-side logic needed
|
|
252
|
+
|
|
253
|
+
### React:
|
|
254
|
+
- **Hosting**: Static hosting (after build)
|
|
255
|
+
- **CDN**: Same as HTML
|
|
256
|
+
- **Bandwidth**: Slightly more (React bundle)
|
|
257
|
+
- **Build Time**: Requires build step in CI/CD
|
|
258
|
+
|
|
259
|
+
## Conclusion
|
|
260
|
+
|
|
261
|
+
**Both options are great!** The choice depends on your:
|
|
262
|
+
- Project complexity
|
|
263
|
+
- Team expertise
|
|
264
|
+
- Performance requirements
|
|
265
|
+
- Development timeline
|
|
266
|
+
- Maintenance needs
|
|
267
|
+
|
|
268
|
+
**General Rule:**
|
|
269
|
+
- Simple project? → HTML/CSS/JS ✅
|
|
270
|
+
- Complex app? → React ⚛️
|
|
271
|
+
- Not sure? → Start with HTML/CSS/JS, migrate if needed
|
|
272
|
+
|
|
273
|
+
## Still Unsure?
|
|
274
|
+
|
|
275
|
+
Try both and see which fits your workflow:
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
# Try HTML version
|
|
279
|
+
create-template create -c counter -n counter-html
|
|
280
|
+
|
|
281
|
+
# Try React version
|
|
282
|
+
create-template create --react -c counter -n counter-react
|
|
283
|
+
|
|
284
|
+
# Compare the code!
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
**Need help deciding?** [Open an issue](https://github.com/benshabbat/create-template-html-css/issues) and we'll help you choose! 💡
|