wozie 3.2.0 → 4.0.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/DOCS.md +266 -48
- package/bin/woozie.js +120 -27
- package/docs/components/containers.md +123 -0
- package/docs/components/data-feedback.md +166 -0
- package/docs/components/interactive.md +113 -0
- package/docs/deployment/deploy.md +93 -0
- package/docs/pages/routing.md +131 -0
- package/docs/plugins/comet-ui.md +142 -0
- package/docs/plugins/local-plugins.md +95 -0
- package/docs/scripting/custom-js.md +115 -0
- package/docs/styling/themes.md +126 -0
- package/editor/woozie-syntax/.vscodeignore +5 -0
- package/editor/woozie-syntax/CHANGELOG.md +38 -0
- package/editor/woozie-syntax/README.md +128 -0
- package/editor/woozie-syntax/extension.js +1326 -0
- package/editor/woozie-syntax/icons/comet.svg +10 -12
- package/editor/woozie-syntax/icons/woozie-build.svg +11 -14
- package/editor/woozie-syntax/icons/woozie-folder.svg +8 -8
- package/editor/woozie-syntax/icons/woozie-pages.svg +12 -16
- package/editor/woozie-syntax/icons/woozie-plugin.svg +7 -13
- package/editor/woozie-syntax/icons/woozie-rules.svg +8 -18
- package/editor/woozie-syntax/icons/woozie-style.svg +12 -14
- package/editor/woozie-syntax/icons/woozie.svg +13 -14
- package/editor/woozie-syntax/language-configuration.json +18 -4
- package/editor/woozie-syntax/package.json +63 -12
- package/editor/woozie-syntax/snippets/woozie.json +325 -0
- package/editor/woozie-syntax/syntaxes/woozie.tmLanguage.json +25 -11
- package/editor/woozie-syntax/woozie-language-4.0.0.vsix +0 -0
- package/package.json +2 -2
- package/src/core/compiler.js +95 -30
- package/src/core/generator.js +590 -87
- package/src/core/parser.js +8 -2
- package/src/runtime/client.js +458 -7
- package/src/styles/base.css +69 -5
- package/src/styles/commonui.css +2220 -0
- package/src/styles/interactive.css +63 -4
- package/src/styles/layout.css +4 -4
package/DOCS.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
# Woozie — The Easiest Web Framework Ever
|
|
1
|
+
# Woozie — The Easiest Web Framework Ever
|
|
2
2
|
|
|
3
|
-
**Built by Woozlit 2026 —
|
|
3
|
+
**Built by Woozlit 2026 — v4.0 with CommonUI**
|
|
4
4
|
|
|
5
5
|
Write simple tags. Get beautiful, responsive websites. No HTML, no CSS, no JavaScript required.
|
|
6
6
|
|
|
7
7
|
## What is Woozie?
|
|
8
8
|
|
|
9
|
-
Woozie is a declarative UI language that compiles to modern HTML/CSS/JS. It has **
|
|
9
|
+
Woozie is a declarative UI language that compiles to modern HTML/CSS/JS. It has **100+ built-in components** via the **CommonUI** library, a **plugin system**, **CometUI community packages**, **dark mode**, **style files**, **custom JavaScript support**, and **multi-page routing** — all with zero configuration.
|
|
10
10
|
|
|
11
11
|
```woozie
|
|
12
|
-
app
|
|
12
|
+
app:
|
|
13
13
|
hero "Hello World":
|
|
14
14
|
text "Built with Woozie"
|
|
15
15
|
button "Get Started"
|
|
@@ -20,44 +20,48 @@ That's a full website. Seriously.
|
|
|
20
20
|
## Quick Start
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
npm link
|
|
27
|
-
|
|
28
|
-
woozie init MyProject
|
|
29
|
-
cd MyProject
|
|
23
|
+
npm install -g wozie
|
|
24
|
+
woozie init myapp
|
|
25
|
+
cd myapp
|
|
30
26
|
woozie run
|
|
31
27
|
```
|
|
32
28
|
|
|
33
|
-
Open http://localhost:3000 and
|
|
29
|
+
Open http://localhost:3000 and you're running.
|
|
34
30
|
|
|
35
31
|
## Features
|
|
36
32
|
|
|
37
33
|
| Feature | Description |
|
|
38
34
|
|---------|-------------|
|
|
39
|
-
| **
|
|
35
|
+
| **100+ Components** | Buttons, cards, forms, modals, drawers, carousels, pricing, testimonials and more |
|
|
36
|
+
| **CommonUI Library** | Professional component library built-in — like shadcn/ui but for Woozie |
|
|
40
37
|
| **Style Files** | Customize any component via `style.woozie` |
|
|
41
38
|
| **Dark Mode** | Set `theme: dark` in `woozie.rules` |
|
|
42
39
|
| **Plugins** | Drop a `.woozie` file in `plugins/` — it becomes a tag |
|
|
43
40
|
| **Live Reload** | Dev server watches files and reloads instantly |
|
|
44
41
|
| **Multi-File Output** | Generates separate HTML, CSS, JS files |
|
|
42
|
+
| **Clean URLs** | No `.html` in the browser — ever |
|
|
43
|
+
| **Custom JavaScript** | Drop a `script.js` in your project, it's auto-included |
|
|
44
|
+
| **CometUI** | Community plugin ecosystem — install with `woozie add` |
|
|
45
45
|
| **Responsive** | Every component is mobile-friendly |
|
|
46
|
-
| **Animations** | Scroll animations, hover effects, transitions |
|
|
47
|
-
| **
|
|
48
|
-
| **
|
|
46
|
+
| **Animations** | Scroll animations, hover effects, page transitions |
|
|
47
|
+
| **JS API** | `wz.toast()`, `wz.openDrawer()`, `wz.openDialog()` and more |
|
|
48
|
+
| **SEO Ready** | Meta tags, OG tags, semantic HTML |
|
|
49
49
|
| **Zero Config** | No webpack, no babel, no config files |
|
|
50
50
|
|
|
51
51
|
## Project Structure
|
|
52
52
|
|
|
53
53
|
```
|
|
54
54
|
my-project/
|
|
55
|
-
main.woozie
|
|
56
|
-
woozie.rules
|
|
57
|
-
style.woozie
|
|
58
|
-
|
|
55
|
+
main.woozie -- homepage (required)
|
|
56
|
+
woozie.rules -- project config
|
|
57
|
+
style.woozie -- custom style overrides (optional)
|
|
58
|
+
script.js -- custom JavaScript (optional, auto-included)
|
|
59
|
+
pages/ -- additional pages
|
|
60
|
+
about.woozie
|
|
61
|
+
contact.woozie
|
|
62
|
+
plugins/ -- reusable components
|
|
59
63
|
navbar.woozie
|
|
60
|
-
|
|
64
|
+
comet_modules/ -- installed community packages
|
|
61
65
|
```
|
|
62
66
|
|
|
63
67
|
## Syntax
|
|
@@ -71,56 +75,272 @@ tagname "argument" [attr1=value1, attr2=value2]:
|
|
|
71
75
|
|
|
72
76
|
A colon `:` at the end means the tag has children (indent them below).
|
|
73
77
|
|
|
74
|
-
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Complete Component Reference
|
|
75
81
|
|
|
76
82
|
### Layout
|
|
77
|
-
|
|
83
|
+
|
|
84
|
+
| Tag | Description | Example |
|
|
85
|
+
|-----|-------------|---------|
|
|
86
|
+
| `column` / `col` | Vertical stack | `column:` |
|
|
87
|
+
| `row` | Horizontal layout | `row:` |
|
|
88
|
+
| `grid` | Responsive grid | `grid [cols=3]:` |
|
|
89
|
+
| `center` | Centered content | `center:` |
|
|
90
|
+
| `container` | Max-width wrapper | `container:` |
|
|
91
|
+
| `section` | Page section | `section:` |
|
|
92
|
+
| `spacer` | Vertical spacing | `spacer "2"` |
|
|
93
|
+
| `divider` | Horizontal line | `divider` |
|
|
94
|
+
| `wrap` | Flex wrap | `wrap:` |
|
|
95
|
+
| `stack` / `vstack` | Vertical stack with gap | `stack [gap=2rem]:` |
|
|
96
|
+
| `hstack` | Horizontal stack | `hstack [gap=1rem]:` |
|
|
97
|
+
| `flex` | Flexible layout | `flex [direction=row, align=center]:` |
|
|
98
|
+
| `sidebar_layout` | Sidebar + main layout | `sidebar_layout:` |
|
|
99
|
+
| `sidebar` | Sidebar container | `sidebar:` |
|
|
100
|
+
| `sidebar_item` | Sidebar nav item | `sidebar_item "Dashboard" [href=#]` |
|
|
101
|
+
| `sidebar_section` | Sidebar group label | `sidebar_section "MENU"` |
|
|
102
|
+
| `main` | Main content area | `main:` |
|
|
103
|
+
| `twocol` | Two-column grid | `twocol:` |
|
|
104
|
+
| `threecol` | Three-column grid | `threecol:` |
|
|
105
|
+
| `fullwidth` | Full viewport width | `fullwidth:` |
|
|
106
|
+
| `sticky` | Sticky positioning | `sticky:` |
|
|
107
|
+
| `scrollarea` | Custom scrollbar area | `scrollarea [height=300px]:` |
|
|
108
|
+
| `aspect` | Aspect ratio box | `aspect [ratio=16/9]:` |
|
|
78
109
|
|
|
79
110
|
### Typography
|
|
80
|
-
`heading` `subheading` `text` `small` `bold` `italic` `label` `link [href=URL]` `code` `quote`
|
|
81
111
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
112
|
+
| Tag | Description | Example |
|
|
113
|
+
|-----|-------------|---------|
|
|
114
|
+
| `h1` / `title` | Top-level heading | `h1 "Welcome"` |
|
|
115
|
+
| `heading` / `h2` | Section heading | `heading "Features"` |
|
|
116
|
+
| `subheading` / `h3` | Subsection heading | `subheading "Details"` |
|
|
117
|
+
| `h4` | Level 4 heading | `h4 "Subtitle"` |
|
|
118
|
+
| `h5` | Level 5 heading | `h5 "Minor heading"` |
|
|
119
|
+
| `h6` | Label heading (uppercase) | `h6 "CATEGORY"` |
|
|
120
|
+
| `text` / `p` | Paragraph | `text "Hello world"` |
|
|
121
|
+
| `lead` | Large intro text | `lead "A bigger paragraph"` |
|
|
122
|
+
| `small` | Small text | `small "Fine print"` |
|
|
123
|
+
| `muted` | Muted/gray text | `muted "Secondary info"` |
|
|
124
|
+
| `bold` / `strong` | Bold text | `bold "Important"` |
|
|
125
|
+
| `italic` / `em` | Italic text | `italic "Emphasis"` |
|
|
126
|
+
| `underline` / `u` | Underlined text | `underline "Noted"` |
|
|
127
|
+
| `del` / `strikethrough` | Deleted text | `del "Old price"` |
|
|
128
|
+
| `mark` / `highlight` | Highlighted text | `mark "Key point"` |
|
|
129
|
+
| `label` | Form label | `label "Email"` |
|
|
130
|
+
| `link` | Hyperlink | `link "Click" [href=url]` |
|
|
131
|
+
| `code` | Code (inline or block) | `code "npm install"` |
|
|
132
|
+
| `quote` | Blockquote | `quote "Famous words"` |
|
|
133
|
+
| `kbd` | Keyboard shortcut | `kbd "Ctrl"` |
|
|
134
|
+
| `caption` | Figure caption | `caption "Figure 1"` |
|
|
135
|
+
| `gradient` | Gradient text | `gradient "Colorful text"` |
|
|
136
|
+
| `prose` | Long-form content wrapper | `prose:` |
|
|
137
|
+
|
|
138
|
+
### Interactive / Forms
|
|
139
|
+
|
|
140
|
+
| Tag | Description | Example |
|
|
141
|
+
|-----|-------------|---------|
|
|
142
|
+
| `button` / `btn` | Button | `button "Click" [variant=solid, color=primary]` |
|
|
143
|
+
| `input` | Text input | `input "Placeholder" [type=email]` |
|
|
144
|
+
| `textarea` | Multi-line input | `textarea "Write here" [rows=5]` |
|
|
145
|
+
| `select` | Dropdown select | `select:` + `option "Item"` |
|
|
146
|
+
| `option` | Select option | `option "Value" [value=x]` |
|
|
147
|
+
| `toggle` | Toggle switch | `toggle "Dark mode"` |
|
|
148
|
+
| `checkbox` | Checkbox | `checkbox "Accept terms"` |
|
|
149
|
+
| `radio` | Radio button | `radio "Option A" [name=group]` |
|
|
150
|
+
| `slider` | Range slider | `slider [min=0, max=100]` |
|
|
151
|
+
| `dropdown` | Dropdown menu | `dropdown:` |
|
|
152
|
+
| `form` | Form wrapper | `form [action=/api]:` |
|
|
153
|
+
| `formgroup` / `field` | Label + input group | `formgroup "Email" [hint=Required]:` |
|
|
154
|
+
| `search` | Search input with icon | `search "Search..."` |
|
|
155
|
+
| `fileupload` | File upload area | `fileupload "Drop files" [accept=image/*]` |
|
|
156
|
+
| `rating` | Star rating | `rating "4" [max=5]` |
|
|
157
|
+
| `numberinput` | Number stepper | `numberinput [min=0, max=99]` |
|
|
158
|
+
| `dateinput` | Date picker | `dateinput` |
|
|
159
|
+
| `colorpicker` | Color picker | `colorpicker` |
|
|
160
|
+
|
|
161
|
+
**Button attributes:**
|
|
162
|
+
- `variant` = `solid` | `outline` | `ghost`
|
|
163
|
+
- `color` = `primary` | `success` | `warning` | `danger`
|
|
164
|
+
- `size` = `sm` | `md` | `lg`
|
|
165
|
+
- `icon` = emoji/text to show before label
|
|
166
|
+
- `modal` = opens modal with this ID
|
|
167
|
+
- `dialog` = opens dialog with this ID
|
|
168
|
+
- `drawer` = opens drawer with this ID
|
|
169
|
+
- `sheet` = opens sheet with this ID
|
|
170
|
+
- `page` = navigates to this page
|
|
171
|
+
- `disabled` = disables the button
|
|
85
172
|
|
|
86
173
|
### Media
|
|
87
|
-
|
|
174
|
+
|
|
175
|
+
| Tag | Description | Example |
|
|
176
|
+
|-----|-------------|---------|
|
|
177
|
+
| `image` / `img` | Image | `image "photo.jpg" [alt=Photo]` |
|
|
178
|
+
| `video` | Video player | `video "clip.mp4" [autoplay, muted, loop]` |
|
|
179
|
+
| `audio` | Audio player | `audio "song.mp3"` |
|
|
180
|
+
| `icon` | Emoji icon | `icon "⚡" [size=3rem]` |
|
|
181
|
+
| `avatar` | User avatar | `avatar "face.jpg" [size=64]` |
|
|
182
|
+
| `avatar_group` | Stacked avatars | `avatar_group:` |
|
|
183
|
+
| `carousel` | Image carousel | `carousel:` with children |
|
|
184
|
+
| `gallery` | Image gallery grid | `gallery [cols=4]:` |
|
|
185
|
+
| `embed` | YouTube/Vimeo embed | `embed "https://youtube.com/watch?v=..."` |
|
|
88
186
|
|
|
89
187
|
### Feedback
|
|
90
|
-
|
|
188
|
+
|
|
189
|
+
| Tag | Description | Example |
|
|
190
|
+
|-----|-------------|---------|
|
|
191
|
+
| `alert` | Alert message | `alert "Success!" [type=success, closable=true]` |
|
|
192
|
+
| `badge` | Small label | `badge "New" [color=green]` |
|
|
193
|
+
| `progress` | Progress bar | `progress "75"` |
|
|
194
|
+
| `spinner` | Loading spinner | `spinner [size=lg]` |
|
|
195
|
+
| `tooltip` | Hover tooltip | `tooltip [text=Info]:` |
|
|
196
|
+
| `toast` | Toast notification | `toast "Saved!" [type=success]` |
|
|
197
|
+
| `skeleton` | Loading skeleton | `skeleton [type=text, count=3]` |
|
|
198
|
+
| `empty` | Empty state | `empty "No data" [icon=📭, title=Nothing here]` |
|
|
199
|
+
| `banner` | Top banner | `banner "Announcement!" [type=primary]` |
|
|
200
|
+
| `callout` | Info callout box | `callout "Tip text" [type=tip, title=Pro Tip]` |
|
|
201
|
+
| `notification` | Notification card | `notification [title=New, icon=🔔, time=2m ago]` |
|
|
202
|
+
| `meter` | Meter/gauge | `meter "65" [max=100, label=CPU]` |
|
|
91
203
|
|
|
92
204
|
### Navigation
|
|
93
|
-
`nav` `navlink "text" [href=URL]` `tabs`/`tab "Label"` `breadcrumb` `menu`
|
|
94
205
|
|
|
95
|
-
|
|
96
|
-
|
|
206
|
+
| Tag | Description | Example |
|
|
207
|
+
|-----|-------------|---------|
|
|
208
|
+
| `nav` | Navigation bar | `nav:` |
|
|
209
|
+
| `navlink` | Nav link | `navlink "Home" [page=index]` |
|
|
210
|
+
| `tabs` / `tab` | Tab panels | `tabs:` + `tab "Label":` |
|
|
211
|
+
| `breadcrumb` | Breadcrumb trail | `breadcrumb:` |
|
|
212
|
+
| `menu` | Menu container | `menu:` |
|
|
213
|
+
| `drawer` | Side drawer | `drawer "Title" [id=x, position=right]` |
|
|
214
|
+
| `sheet` | Bottom/side sheet | `sheet "Title" [id=x, position=bottom]` |
|
|
215
|
+
| `bottomnav` | Bottom navigation | `bottomnav:` |
|
|
216
|
+
| `bottomnav_item` | Bottom nav item | `bottomnav_item "Home" [icon=🏠, page=index]` |
|
|
217
|
+
| `commandmenu` | Cmd+K palette | `commandmenu "Search..." [id=cmd]` |
|
|
218
|
+
| `pagination` | Page pagination | `pagination [pages=10, current=3]` |
|
|
219
|
+
| `steps` / `step` | Step indicator | `steps:` + `step "Name" [status=active]` |
|
|
220
|
+
|
|
221
|
+
### Data Display
|
|
222
|
+
|
|
223
|
+
| Tag | Description | Example |
|
|
224
|
+
|-----|-------------|---------|
|
|
225
|
+
| `table` | Data table | `table:` + `thead:` + `tbody:` |
|
|
226
|
+
| `list` | List | `list [type=ordered]:` |
|
|
227
|
+
| `listitem` / `li` | List item | `listitem "Item text"` |
|
|
228
|
+
| `stat` | Stat number | `stat "10K+" [label=Users, trend=+12%]` |
|
|
229
|
+
| `tag` | Tag label | `tag "React" [color=blue, closable=true]` |
|
|
230
|
+
| `chip` | Chip label | `chip "Design"` |
|
|
231
|
+
| `timeline` | Timeline | `timeline:` |
|
|
232
|
+
| `timeline_item` | Timeline entry | `timeline_item "Event":` |
|
|
233
|
+
| `count` | Large number | `count "42"` |
|
|
97
234
|
|
|
98
235
|
### Containers
|
|
99
|
-
|
|
236
|
+
|
|
237
|
+
| Tag | Description | Example |
|
|
238
|
+
|-----|-------------|---------|
|
|
239
|
+
| `card` | Content card | `card [title=My Card]:` |
|
|
240
|
+
| `modal` | Modal dialog | `modal [id=my-modal]:` |
|
|
241
|
+
| `dialog` | Enhanced dialog | `dialog "Title" [id=my-dialog]:` |
|
|
242
|
+
| `popover` | Popover | `popover:` |
|
|
243
|
+
| `accordion` | Accordion group | `accordion:` |
|
|
244
|
+
| `accordion_item` | Accordion panel | `accordion_item "Title":` |
|
|
245
|
+
| `collapsible` | Collapsible section | `collapsible "Click to expand":` |
|
|
246
|
+
| `panel` | Panel with header | `panel "Title" [action=View All]:` |
|
|
247
|
+
| `glass` | Glass morphism card | `glass:` |
|
|
248
|
+
| `hero` | Hero section | `hero "Title" [subtitle=Text]:` |
|
|
249
|
+
| `header` | Page header | `header:` |
|
|
250
|
+
| `footer` | Page footer | `footer:` |
|
|
251
|
+
|
|
252
|
+
### Page Sections (Pre-built Blocks)
|
|
253
|
+
|
|
254
|
+
| Tag | Description | Example |
|
|
255
|
+
|-----|-------------|---------|
|
|
256
|
+
| `pricing` | Pricing card | `pricing "Pro" [price=$29, period=month, featured=true]:` |
|
|
257
|
+
| `pricing_feature` | Pricing feature | `pricing_feature "Unlimited users"` |
|
|
258
|
+
| `testimonial` | Testimonial card | `testimonial "Quote" [author=Name, role=CEO]` |
|
|
259
|
+
| `feature` | Feature block | `feature "Fast" [icon=⚡]:` |
|
|
260
|
+
| `cta` | Call-to-action | `cta "Ready?" [subtitle=Get started now]:` |
|
|
261
|
+
| `logocloud` | Logo cloud | `logocloud:` |
|
|
262
|
+
| `faq` | FAQ section | `faq:` with accordion children |
|
|
263
|
+
| `separator` | Visual separator | `separator "or"` |
|
|
264
|
+
|
|
265
|
+
### Animation & Utility
|
|
266
|
+
|
|
267
|
+
| Tag | Description | Example |
|
|
268
|
+
|-----|-------------|---------|
|
|
269
|
+
| `animate` | Animation wrapper | `animate [type=slide, delay=2]:` |
|
|
270
|
+
| `gradient` | Gradient text | `gradient "Colorful"` |
|
|
271
|
+
|
|
272
|
+
Animation types: `fade`, `slide`, `slideup`, `slidedown`, `slideleft`, `slideright`, `zoom`, `bounce`
|
|
273
|
+
|
|
274
|
+
### Special / Meta
|
|
275
|
+
|
|
276
|
+
| Tag | Description | Example |
|
|
277
|
+
|-----|-------------|---------|
|
|
278
|
+
| `tailwindcss` | Include Tailwind CSS | `tailwindcss` |
|
|
279
|
+
| `css` | Custom CSS | `css "styles.css"` |
|
|
280
|
+
| `script` / `js` | JavaScript | `script "app.js"` |
|
|
281
|
+
| `raw` / `html` | Raw HTML | `raw "<br>"` |
|
|
282
|
+
| `meta` | Meta tag | `meta "Description" [name=description]` |
|
|
283
|
+
| `ogmeta` | OpenGraph meta | `ogmeta "Title" [property=title]` |
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## JavaScript API
|
|
288
|
+
|
|
289
|
+
Woozie exposes a global `wz` object for programmatic control:
|
|
290
|
+
|
|
291
|
+
```javascript
|
|
292
|
+
// Show toast notifications
|
|
293
|
+
wz.toast("Saved successfully!", "success");
|
|
294
|
+
wz.toast("Something went wrong", "error", 3000);
|
|
295
|
+
|
|
296
|
+
// Control drawers
|
|
297
|
+
wz.openDrawer("my-drawer");
|
|
298
|
+
wz.closeDrawer("my-drawer");
|
|
299
|
+
|
|
300
|
+
// Control sheets
|
|
301
|
+
wz.openSheet("my-sheet");
|
|
302
|
+
wz.closeSheet("my-sheet");
|
|
303
|
+
|
|
304
|
+
// Control dialogs
|
|
305
|
+
wz.openDialog("my-dialog");
|
|
306
|
+
wz.closeDialog("my-dialog");
|
|
307
|
+
|
|
308
|
+
// Control modals
|
|
309
|
+
wz.openModal("my-modal");
|
|
310
|
+
wz.closeModal("my-modal");
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
---
|
|
100
314
|
|
|
101
315
|
## Rules File (woozie.rules)
|
|
102
316
|
|
|
103
317
|
Configuration file. **NO COMMENTS ALLOWED.**
|
|
104
318
|
|
|
105
319
|
```
|
|
106
|
-
version:
|
|
107
|
-
theme:
|
|
320
|
+
version: 4.0
|
|
321
|
+
theme: dark
|
|
108
322
|
title: My App
|
|
109
323
|
font: Inter
|
|
110
324
|
color: #6366f1
|
|
111
325
|
lang: en
|
|
112
326
|
favicon: icon.png
|
|
327
|
+
description: My awesome website
|
|
328
|
+
|
|
329
|
+
plugins:
|
|
330
|
+
navbar = plugins/navbar.woozie
|
|
331
|
+
footer = plugins/footer.woozie
|
|
113
332
|
```
|
|
114
333
|
|
|
115
334
|
| Key | Values | Default |
|
|
116
335
|
|-----|--------|---------|
|
|
117
|
-
| `version` | Any | `
|
|
336
|
+
| `version` | Any | `4.0` |
|
|
118
337
|
| `theme` | `light`, `dark` | `light` |
|
|
119
338
|
| `title` | Any string | `Woozie App` |
|
|
120
339
|
| `font` | Google Font name | `Inter` |
|
|
121
340
|
| `color` | Hex color | `#6366f1` |
|
|
122
341
|
| `lang` | Language code | `en` |
|
|
123
342
|
| `favicon` | Path or URL | (none) |
|
|
343
|
+
| `description` | Meta description | (none) |
|
|
124
344
|
|
|
125
345
|
## Style File (style.woozie)
|
|
126
346
|
|
|
@@ -138,7 +358,6 @@ card:
|
|
|
138
358
|
|
|
139
359
|
hero:
|
|
140
360
|
padding: 8rem 2rem
|
|
141
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%)
|
|
142
361
|
```
|
|
143
362
|
|
|
144
363
|
Selector names match Woozie element names. Properties are standard CSS.
|
|
@@ -169,23 +388,22 @@ woozie init <name> Create a new project
|
|
|
169
388
|
woozie run Start dev server with live reload
|
|
170
389
|
woozie dev Alias for run
|
|
171
390
|
woozie build Compile to static dist/ folder
|
|
391
|
+
woozie add <name> Install a CometUI package from npm
|
|
392
|
+
woozie publish Publish a CometUI package to npm
|
|
393
|
+
woozie comet init Scaffold a new CometUI package
|
|
394
|
+
woozie comet list List installed packages
|
|
395
|
+
woozie comet remove Remove a package
|
|
396
|
+
woozie syntax Install VS Code syntax highlighting
|
|
172
397
|
--port <n> Custom port (default: 3000)
|
|
173
|
-
--output <path> Custom output path
|
|
174
398
|
--help Show help
|
|
175
399
|
```
|
|
176
400
|
|
|
177
|
-
## Documentation
|
|
178
|
-
|
|
179
|
-
- [Element Reference](docs/elements.md) — Every component with examples
|
|
180
|
-
- [Installation Guide](docs/install.md) — How to install and set up
|
|
181
|
-
- [Hosting Guide](docs/hosting.md) — How to deploy your Woozie app
|
|
182
|
-
|
|
183
401
|
## VS Code Extension
|
|
184
402
|
|
|
185
|
-
|
|
403
|
+
Syntax highlighting installs automatically when you `npm install -g wozie`. You can also run:
|
|
404
|
+
|
|
186
405
|
```bash
|
|
187
|
-
|
|
188
|
-
# Install in VS Code via Extensions > Install from VSIX
|
|
406
|
+
woozie syntax
|
|
189
407
|
```
|
|
190
408
|
|
|
191
|
-
Features: syntax highlighting, auto-indent, comment toggling, bracket matching.
|
|
409
|
+
Features: syntax highlighting, file icons, auto-indent, comment toggling, bracket matching.
|
package/bin/woozie.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
1
|
+
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import arg from 'arg';
|
|
4
4
|
import fs from 'fs';
|
|
@@ -22,7 +22,8 @@ const command = args._[0];
|
|
|
22
22
|
|
|
23
23
|
if (!command || args['--help']) {
|
|
24
24
|
console.log(`
|
|
25
|
-
Woozie CLI
|
|
25
|
+
Woozie CLI v4.0 — The easiest web framework 🚀
|
|
26
|
+
Now with CommonUI — 100+ professional components
|
|
26
27
|
Usage: woozie <command> [options]
|
|
27
28
|
|
|
28
29
|
Commands:
|
|
@@ -66,29 +67,69 @@ async function main() {
|
|
|
66
67
|
navlink "Contact" [page=contact]
|
|
67
68
|
|
|
68
69
|
hero "Welcome to ${name}":
|
|
69
|
-
text "Built with Woozie — the easiest web framework"
|
|
70
|
+
text "Built with Woozie and CommonUI — the easiest web framework with 100+ components"
|
|
70
71
|
row:
|
|
71
72
|
button "Get Started" [variant=solid]
|
|
72
|
-
button "
|
|
73
|
+
button "Learn More" [variant=outline, page=about]
|
|
73
74
|
|
|
74
75
|
section:
|
|
75
|
-
heading "
|
|
76
|
+
heading "Why ${name}?"
|
|
77
|
+
text "Everything you need to build beautiful websites, fast."
|
|
78
|
+
spacer "1"
|
|
76
79
|
grid [cols=3]:
|
|
80
|
+
feature "Lightning Fast" [icon=⚡]:
|
|
81
|
+
text "Compiles in milliseconds. No webpack, no config, just results."
|
|
82
|
+
feature "Beautiful Design" [icon=🎨]:
|
|
83
|
+
text "100+ stunning components built-in with CommonUI library."
|
|
84
|
+
feature "Easy to Learn" [icon=📖]:
|
|
85
|
+
text "Simple indentation-based syntax anyone can master in minutes."
|
|
86
|
+
feature "Dark Mode" [icon=🌙]:
|
|
87
|
+
text "Beautiful dark and light themes with a single config change."
|
|
88
|
+
feature "Responsive" [icon=📱]:
|
|
89
|
+
text "Every component adapts perfectly to mobile, tablet, and desktop."
|
|
90
|
+
feature "Extensible" [icon=🔌]:
|
|
91
|
+
text "CometUI plugin system for community packages and custom components."
|
|
92
|
+
|
|
93
|
+
section:
|
|
94
|
+
heading "Built-in Components"
|
|
95
|
+
text "Here's a taste of what you get out of the box."
|
|
96
|
+
spacer "1"
|
|
97
|
+
grid [cols=2]:
|
|
77
98
|
card:
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
99
|
+
subheading "Buttons"
|
|
100
|
+
row:
|
|
101
|
+
button "Primary" [variant=solid]
|
|
102
|
+
button "Outline" [variant=outline]
|
|
103
|
+
button "Ghost" [variant=ghost]
|
|
104
|
+
row:
|
|
105
|
+
button "Success" [variant=solid, color=success]
|
|
106
|
+
button "Danger" [variant=solid, color=danger]
|
|
107
|
+
button "Warning" [variant=solid, color=warning]
|
|
85
108
|
card:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
109
|
+
subheading "Feedback"
|
|
110
|
+
alert "This is an info alert" [type=info]
|
|
111
|
+
alert "Operation successful!" [type=success]
|
|
112
|
+
progress "72"
|
|
113
|
+
spacer "1"
|
|
114
|
+
row:
|
|
115
|
+
badge "New" [color=primary]
|
|
116
|
+
badge "Active" [color=green]
|
|
117
|
+
badge "Pending" [color=yellow]
|
|
118
|
+
|
|
119
|
+
section:
|
|
120
|
+
row:
|
|
121
|
+
stat "10K+" [label=Users]
|
|
122
|
+
stat "99.9%" [label=Uptime]
|
|
123
|
+
stat "100+" [label=Components]
|
|
124
|
+
stat "4.9" [label=Rating]
|
|
125
|
+
|
|
126
|
+
cta "Ready to build something amazing?" [subtitle=Get started in seconds with Woozie and CommonUI.]:
|
|
127
|
+
row:
|
|
128
|
+
button "Get Started" [variant=solid, size=lg]
|
|
129
|
+
button "View Docs" [variant=outline, size=lg, page=about]
|
|
89
130
|
|
|
90
131
|
footer:
|
|
91
|
-
text "Built with Woozie
|
|
132
|
+
text "Built with Woozie 4.0 and CommonUI"
|
|
92
133
|
`);
|
|
93
134
|
|
|
94
135
|
fs.writeFileSync(path.join(projectDir, 'pages', 'about.woozie'),
|
|
@@ -99,11 +140,36 @@ async function main() {
|
|
|
99
140
|
navlink "Contact" [page=contact]
|
|
100
141
|
|
|
101
142
|
section:
|
|
102
|
-
heading "About"
|
|
103
|
-
|
|
143
|
+
heading "About ${name}"
|
|
144
|
+
lead "We believe building websites should be easy, fast, and fun."
|
|
145
|
+
spacer "2"
|
|
146
|
+
twocol:
|
|
147
|
+
column:
|
|
148
|
+
subheading "Our Mission"
|
|
149
|
+
text "We created ${name} to make web development accessible to everyone. No complex toolchains, no configuration headaches — just write and build."
|
|
150
|
+
spacer "1"
|
|
151
|
+
subheading "Technology"
|
|
152
|
+
text "Built with Woozie, the easiest web framework, powered by CommonUI with 100+ professional components."
|
|
153
|
+
column:
|
|
154
|
+
timeline:
|
|
155
|
+
timeline_item "Project Started":
|
|
156
|
+
text "The idea was born to simplify web development."
|
|
157
|
+
timeline_item "First Release":
|
|
158
|
+
text "Launched with core components and dark mode."
|
|
159
|
+
timeline_item "CommonUI Added":
|
|
160
|
+
text "100+ professional components, page sections, and more."
|
|
161
|
+
timeline_item "Growing Community":
|
|
162
|
+
text "Developers worldwide are building with Woozie."
|
|
163
|
+
|
|
164
|
+
section:
|
|
165
|
+
heading "What People Say"
|
|
166
|
+
grid [cols=3]:
|
|
167
|
+
testimonial "Woozie is by far the easiest framework I've ever used. I built my landing page in 10 minutes!" [author=Sarah Chen, role=Designer]
|
|
168
|
+
testimonial "The CommonUI components are beautiful. I don't need a design system anymore." [author=Alex Rodriguez, role=Developer]
|
|
169
|
+
testimonial "My clients love how fast I can iterate. Woozie changed my workflow." [author=James Park, role=Freelancer]
|
|
104
170
|
|
|
105
171
|
footer:
|
|
106
|
-
text "Built with Woozie
|
|
172
|
+
text "Built with Woozie 4.0 and CommonUI"
|
|
107
173
|
`);
|
|
108
174
|
|
|
109
175
|
fs.writeFileSync(path.join(projectDir, 'pages', 'contact.woozie'),
|
|
@@ -115,21 +181,48 @@ async function main() {
|
|
|
115
181
|
|
|
116
182
|
section:
|
|
117
183
|
heading "Contact Us"
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
184
|
+
text "Have a question or want to say hello? We'd love to hear from you."
|
|
185
|
+
spacer "2"
|
|
186
|
+
twocol:
|
|
187
|
+
card:
|
|
188
|
+
form:
|
|
189
|
+
formgroup "Full Name":
|
|
190
|
+
input "Enter your name" [type=text, name=name, required=true]
|
|
191
|
+
formgroup "Email Address":
|
|
192
|
+
input "you@example.com" [type=email, name=email, required=true]
|
|
193
|
+
formgroup "Subject":
|
|
194
|
+
select [name=subject]:
|
|
195
|
+
option "General Question" [value=general]
|
|
196
|
+
option "Bug Report" [value=bug]
|
|
197
|
+
option "Feature Request" [value=feature]
|
|
198
|
+
option "Partnership" [value=partnership]
|
|
199
|
+
formgroup "Message":
|
|
200
|
+
textarea "Tell us what's on your mind..." [rows=5, name=message]
|
|
201
|
+
button "Send Message" [variant=solid, icon=✉️]
|
|
202
|
+
column:
|
|
203
|
+
card:
|
|
204
|
+
icon "📧"
|
|
205
|
+
subheading "Email"
|
|
206
|
+
text "hello@example.com"
|
|
207
|
+
card:
|
|
208
|
+
icon "📍"
|
|
209
|
+
subheading "Location"
|
|
210
|
+
text "San Francisco, CA"
|
|
211
|
+
card:
|
|
212
|
+
icon "🕐"
|
|
213
|
+
subheading "Response Time"
|
|
214
|
+
text "We reply within 24 hours"
|
|
123
215
|
|
|
124
216
|
footer:
|
|
125
|
-
text "Built with Woozie
|
|
217
|
+
text "Built with Woozie 4.0 and CommonUI"
|
|
126
218
|
`);
|
|
127
219
|
|
|
128
220
|
fs.writeFileSync(path.join(projectDir, 'woozie.rules'),
|
|
129
|
-
`version:
|
|
130
|
-
theme:
|
|
221
|
+
`version: 4.0
|
|
222
|
+
theme: dark
|
|
131
223
|
title: ${name}
|
|
132
224
|
font: Inter
|
|
225
|
+
description: Built with Woozie and CommonUI
|
|
133
226
|
`);
|
|
134
227
|
|
|
135
228
|
fs.writeFileSync(path.join(projectDir, 'style.woozie'),
|