emily-css 1.0.26 → 1.0.27
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 +265 -247
- package/package.json +59 -59
- package/src/index.js +377 -0
- package/templates/showcase.html +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,259 +4,277 @@ All notable changes to `emily-css` are documented here.
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
## v1.0.
|
|
8
|
-
|
|
9
|
-
**Expand utility coverage and typography scale**
|
|
10
|
-
|
|
11
|
-
### Added
|
|
12
|
-
- Expand utility coverage and typography scale
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
## v1.0.26 — May 2026
|
|
16
|
-
|
|
17
|
-
**Colour utilities now variable-based; fix grey text on dark surfaces**
|
|
18
|
-
|
|
19
|
-
### Fixed
|
|
20
|
-
- `generateColourUtilities` now emits `var(--color-*)` references instead of hardcoded hex values for all `text-*`, `bg-*`, `border-*`, and `accent-*` utilities. Consistent with how semantic colours and ring/fill/stroke utilities already worked. Enables theme-layer overrides without specificity hacks.
|
|
21
|
-
- Homepage "How it works" cards: `text-neutral-80` / `text-neutral-40` on `bg-dark` produced near-invisible text in light mode (contrast ~2.3:1). Fixed to `text-neutral-10` / `text-neutral-30` — matches the pattern used by the hero and CTA banner.
|
|
22
|
-
- Removed erroneous backslash in `h-2\.5` HTML class strings in `index.vue` (rendered fine via Vue template compilation, but confusing and inconsistent).
|
|
23
|
-
- Stripped null bytes from `pages/index.vue` (6) and `package.json` (339) in `emilyui-site`.
|
|
24
|
-
|
|
25
|
-
### Changed
|
|
26
|
-
- `tests/test.js`: updated `accent-brand-80` assertion to expect `var(--color-brand-80)` rather than hardcoded hex, matching the new generation behaviour.
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## v1.0.25 — May 2026
|
|
31
|
-
|
|
32
|
-
**updaed colour**
|
|
33
|
-
|
|
34
|
-
### Fixed
|
|
35
|
-
- change colour on code
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
## v1.0.24 — May 2026
|
|
7
|
+
## v1.0.27 — May 2026
|
|
39
8
|
|
|
40
9
|
**colour system redesign — brand/accent tokens + semantic colours (v1.0.23)**
|
|
41
10
|
|
|
42
11
|
### Added
|
|
43
12
|
- colour system redesign — brand/accent tokens + semantic colours (v1.0.23)
|
|
44
13
|
|
|
45
|
-
---
|
|
46
|
-
## v1.0.23 — May 2026
|
|
47
|
-
|
|
48
|
-
**Colour system redesign: brand/accent naming + semantic colour tokens**
|
|
49
|
-
|
|
50
|
-
### Changed
|
|
51
|
-
- Renamed `primary` colour token to `brand`, `secondary` to `accent` across config, utilities, and showcase
|
|
52
|
-
- `btn-primary` and `btn-secondary` are now explicit separate colour tokens (no longer aliases)
|
|
53
|
-
- Default config generated by `emily-css init` updated to reflect new naming
|
|
54
|
-
|
|
55
|
-
### Added
|
|
56
|
-
- `semanticColours` config key: single-value colour tokens with no shade scale
|
|
57
|
-
- `generateSemanticColourUtilities()`: generates `bg-dark`, `text-dark`, `border-dark`, `fill-dark` etc.
|
|
58
|
-
- Semantic colour utilities automatically pick up `hover:`, `focus:`, `dark:`, and responsive variants
|
|
59
|
-
- Default config includes `dark: "#1A1A1A"` and `light: "#FAFAFA"` as semantic colour examples
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## v1.0.22 — May 2026
|
|
64
|
-
|
|
65
|
-
**· Improve purge extraction and package robustness tests**
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
## v1.0.21 — May 2026
|
|
69
|
-
|
|
70
|
-
**"Include bundled showcase template**
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
## v1.0.20 — May 2026
|
|
74
|
-
|
|
75
|
-
**replace folder structure template to tempalates**
|
|
76
|
-
|
|
77
|
-
### Fixed
|
|
78
|
-
- replace folder structure template to tempalates
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
## v1.0.19 — May 2026
|
|
82
|
-
|
|
83
|
-
**Add framework-aware output paths and bundled showcase template**
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
## v1.0.18 — May 2026
|
|
87
|
-
|
|
88
|
-
****
|
|
89
|
-
|
|
90
|
-
### Changed
|
|
91
|
-
- added more utitlies as a code block
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
## v1.0.17 — May 2026
|
|
95
|
-
|
|
96
|
-
**added new utilties, and added component patterns**
|
|
97
|
-
|
|
98
|
-
### Added
|
|
99
|
-
- added new utilties, and added component patterns
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
## v1.0.16 — May 2026
|
|
103
|
-
|
|
104
|
-
**feat: add Round 2 utility set — 156/156 tests passing**
|
|
105
|
-
|
|
106
|
-
### Added
|
|
107
|
-
- feat: add Round 2 utility set — 156/156 tests passing
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
## v1.0.15 — May 2026
|
|
111
|
-
|
|
112
|
-
**updated readme**
|
|
113
|
-
|
|
114
|
-
---
|
|
115
|
-
## v1.0.14 — May 2026
|
|
116
|
-
|
|
117
|
-
**updated readme**
|
|
118
|
-
|
|
119
|
-
### Changed
|
|
120
|
-
- updated readme
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
## v1.0.13 — May 2026
|
|
124
|
-
|
|
125
|
-
**added functionality to commit to github and then push to npm release**
|
|
126
|
-
|
|
127
|
-
### Added
|
|
128
|
-
- added functionality to commit to github and then push to npm release
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
## v1.0.12 — May 2026
|
|
132
|
-
|
|
133
|
-
****
|
|
134
|
-
|
|
135
|
-
---
|
|
136
|
-
## v1.0.11 — May 2026
|
|
137
|
-
|
|
138
|
-
****
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
## v1.0.10 — May 2026
|
|
142
|
-
|
|
143
|
-
**Changelog automation**
|
|
144
|
-
|
|
145
|
-
### Added
|
|
146
|
-
- Release script (`npm run release`) — reads git log, prompts for version bump, writes CHANGELOG.md, commits and tags automatically
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
## v1.0.9 — May 2026
|
|
151
|
-
|
|
152
|
-
**Showcase server + code block utilities**
|
|
153
|
-
|
|
154
|
-
### Added
|
|
155
|
-
- Showcase server — run `npm run emily:showcase` to browse components on localhost:3456
|
|
156
|
-
- Code block utilities (`.code-window`, `.token-*`) in generated CSS — VSCode Dark+ style syntax highlighting
|
|
157
|
-
- `pre`/`code` base styles added to `@layer base`
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## v1.0.8 — May 2026
|
|
162
|
-
|
|
163
|
-
**Watch mode + build pipeline**
|
|
164
|
-
|
|
165
|
-
### Added
|
|
166
|
-
- Watch mode — `npx emily-css watch` rebuilds CSS automatically on config change
|
|
167
|
-
- Build + purge can now be chained in a single pipeline
|
|
168
|
-
- npm scripts wired into `package.json` during `npx emily-css init`
|
|
169
|
-
|
|
170
14
|
### Changed
|
|
171
|
-
-
|
|
172
|
-
- `bin/emilyui.js` updated to correctly route `watch`/`build`/`purge` subcommands
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
## v1.0.7 — April 2026
|
|
177
|
-
|
|
178
|
-
**Purge regex fix**
|
|
179
|
-
|
|
180
|
-
### Fixed
|
|
181
|
-
- Purge crashed when class names contained regex metacharacters (`[`, `]`, `(`, `)`, `{`, `}`, etc). Previously only `:` and `.` were escaped — now uses full metacharacter escaping
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
## v1.0.6 — April 2026
|
|
186
|
-
|
|
187
|
-
**Dist + font cleanup**
|
|
188
|
-
|
|
189
|
-
### Changed
|
|
190
|
-
- `dist/` and `fonts/` directories removed from git tracking
|
|
191
|
-
|
|
192
|
-
### Breaking changes
|
|
193
|
-
- If you were pulling `dist/emily.css` directly from GitHub, run `npx emily-css build` locally instead
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
## v1.0.5 — April 2026
|
|
198
|
-
|
|
199
|
-
**Split font system**
|
|
200
|
-
|
|
201
|
-
### Added
|
|
202
|
-
- Separate heading and body font config — `fontFamily.heading` and `fontFamily.body` are now independent
|
|
203
|
-
- Google Fonts CDN integration — fonts loaded via `@import` in generated CSS
|
|
204
|
-
- Font-specific tests added to test suite
|
|
205
|
-
|
|
206
|
-
### Changed
|
|
207
|
-
- Bundled font files removed from the npm package
|
|
208
|
-
- `emily.config.json` updated with split `fontFamily` structure
|
|
209
|
-
|
|
210
|
-
### Breaking changes
|
|
211
|
-
- If your config has `fontFamily` as a single string, update it to `{ "heading": "...", "body": "..." }`
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
## v1.0.3 — April 2026
|
|
216
|
-
|
|
217
|
-
**Package size reduction**
|
|
218
|
-
|
|
219
|
-
### Changed
|
|
220
|
-
- Demo CSS removed from the published npm package
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
## v1.0.2 — April 2026
|
|
225
|
-
|
|
226
|
-
**Package distribution fix**
|
|
227
|
-
|
|
228
|
-
### Added
|
|
229
|
-
- `.npmignore` added — controls which files are included in the published package
|
|
230
|
-
- `dist` files explicitly declared in `package.json` `files` array
|
|
231
|
-
|
|
232
|
-
### Fixed
|
|
233
|
-
- Unnecessary files (tests, src, docs) were being included in the npm tarball
|
|
234
|
-
|
|
235
|
-
---
|
|
236
|
-
|
|
237
|
-
## v1.0.1 — April 2026
|
|
238
|
-
|
|
239
|
-
**CLI rename fix**
|
|
240
|
-
|
|
241
|
-
### Fixed
|
|
242
|
-
- Internal references to old `emily-ui` CLI name updated to `emily-css`
|
|
243
|
-
|
|
244
|
-
### Breaking changes
|
|
245
|
-
- If you had scripts referencing `npx emily-ui`, update them to `npx emily-css`
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
## v1.0.0 — April 2026
|
|
250
|
-
|
|
251
|
-
**Initial release**
|
|
252
|
-
|
|
253
|
-
### Added
|
|
254
|
-
- 11,844 utility classes generated from `emily.config.json`
|
|
255
|
-
- OKLCH colour scale generation — one hex in, 10-shade scale out
|
|
256
|
-
- Responsive variants (`sm:` `md:` `lg:` `xl:` `2xl:`)
|
|
257
|
-
- State variants (`hover:` `focus-visible:` `active:` `disabled:` `dark:`)
|
|
258
|
-
- Purge system — strips unused classes, ~97% file size reduction
|
|
259
|
-
- Interactive setup wizard (`npx emily-css init`)
|
|
260
|
-
- 72 tests, all passing
|
|
15
|
+
- updated utilties and new showcase
|
|
261
16
|
|
|
262
17
|
---
|
|
18
|
+
# Changelog
|
|
19
|
+
|
|
20
|
+
All notable changes to `emily-css` are documented here.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## v1.0.26 — May 2026
|
|
25
|
+
|
|
26
|
+
**Expand utility coverage and typography scale**
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
- Expand utility coverage and typography scale
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
## v1.0.26 — May 2026
|
|
33
|
+
|
|
34
|
+
**Colour utilities now variable-based; fix grey text on dark surfaces**
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
- `generateColourUtilities` now emits `var(--color-*)` references instead of hardcoded hex values for all `text-*`, `bg-*`, `border-*`, and `accent-*` utilities. Consistent with how semantic colours and ring/fill/stroke utilities already worked. Enables theme-layer overrides without specificity hacks.
|
|
38
|
+
- Homepage "How it works" cards: `text-neutral-80` / `text-neutral-40` on `bg-dark` produced near-invisible text in light mode (contrast ~2.3:1). Fixed to `text-neutral-10` / `text-neutral-30` — matches the pattern used by the hero and CTA banner.
|
|
39
|
+
- Removed erroneous backslash in `h-2\.5` HTML class strings in `index.vue` (rendered fine via Vue template compilation, but confusing and inconsistent).
|
|
40
|
+
- Stripped null bytes from `pages/index.vue` (6) and `package.json` (339) in `emilyui-site`.
|
|
41
|
+
|
|
42
|
+
### Changed
|
|
43
|
+
- `tests/test.js`: updated `accent-brand-80` assertion to expect `var(--color-brand-80)` rather than hardcoded hex, matching the new generation behaviour.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## v1.0.25 — May 2026
|
|
48
|
+
|
|
49
|
+
**updaed colour**
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
- change colour on code
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
## v1.0.24 — May 2026
|
|
56
|
+
|
|
57
|
+
**colour system redesign — brand/accent tokens + semantic colours (v1.0.23)**
|
|
58
|
+
|
|
59
|
+
### Added
|
|
60
|
+
- colour system redesign — brand/accent tokens + semantic colours (v1.0.23)
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
## v1.0.23 — May 2026
|
|
64
|
+
|
|
65
|
+
**Colour system redesign: brand/accent naming + semantic colour tokens**
|
|
66
|
+
|
|
67
|
+
### Changed
|
|
68
|
+
- Renamed `primary` colour token to `brand`, `secondary` to `accent` across config, utilities, and showcase
|
|
69
|
+
- `btn-primary` and `btn-secondary` are now explicit separate colour tokens (no longer aliases)
|
|
70
|
+
- Default config generated by `emily-css init` updated to reflect new naming
|
|
71
|
+
|
|
72
|
+
### Added
|
|
73
|
+
- `semanticColours` config key: single-value colour tokens with no shade scale
|
|
74
|
+
- `generateSemanticColourUtilities()`: generates `bg-dark`, `text-dark`, `border-dark`, `fill-dark` etc.
|
|
75
|
+
- Semantic colour utilities automatically pick up `hover:`, `focus:`, `dark:`, and responsive variants
|
|
76
|
+
- Default config includes `dark: "#1A1A1A"` and `light: "#FAFAFA"` as semantic colour examples
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
## v1.0.22 — May 2026
|
|
82
|
+
|
|
83
|
+
**· Improve purge extraction and package robustness tests**
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
## v1.0.21 — May 2026
|
|
87
|
+
|
|
88
|
+
**"Include bundled showcase template**
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
## v1.0.20 — May 2026
|
|
92
|
+
|
|
93
|
+
**replace folder structure template to tempalates**
|
|
94
|
+
|
|
95
|
+
### Fixed
|
|
96
|
+
- replace folder structure template to tempalates
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
## v1.0.19 — May 2026
|
|
100
|
+
|
|
101
|
+
**Add framework-aware output paths and bundled showcase template**
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
## v1.0.18 — May 2026
|
|
105
|
+
|
|
106
|
+
****
|
|
107
|
+
|
|
108
|
+
### Changed
|
|
109
|
+
- added more utitlies as a code block
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
## v1.0.17 — May 2026
|
|
113
|
+
|
|
114
|
+
**added new utilties, and added component patterns**
|
|
115
|
+
|
|
116
|
+
### Added
|
|
117
|
+
- added new utilties, and added component patterns
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
## v1.0.16 — May 2026
|
|
121
|
+
|
|
122
|
+
**feat: add Round 2 utility set — 156/156 tests passing**
|
|
123
|
+
|
|
124
|
+
### Added
|
|
125
|
+
- feat: add Round 2 utility set — 156/156 tests passing
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
## v1.0.15 — May 2026
|
|
129
|
+
|
|
130
|
+
**updated readme**
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
## v1.0.14 — May 2026
|
|
134
|
+
|
|
135
|
+
**updated readme**
|
|
136
|
+
|
|
137
|
+
### Changed
|
|
138
|
+
- updated readme
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
## v1.0.13 — May 2026
|
|
142
|
+
|
|
143
|
+
**added functionality to commit to github and then push to npm release**
|
|
144
|
+
|
|
145
|
+
### Added
|
|
146
|
+
- added functionality to commit to github and then push to npm release
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
## v1.0.12 — May 2026
|
|
150
|
+
|
|
151
|
+
****
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
## v1.0.11 — May 2026
|
|
155
|
+
|
|
156
|
+
****
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
## v1.0.10 — May 2026
|
|
160
|
+
|
|
161
|
+
**Changelog automation**
|
|
162
|
+
|
|
163
|
+
### Added
|
|
164
|
+
- Release script (`npm run release`) — reads git log, prompts for version bump, writes CHANGELOG.md, commits and tags automatically
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## v1.0.9 — May 2026
|
|
169
|
+
|
|
170
|
+
**Showcase server + code block utilities**
|
|
171
|
+
|
|
172
|
+
### Added
|
|
173
|
+
- Showcase server — run `npm run emily:showcase` to browse components on localhost:3456
|
|
174
|
+
- Code block utilities (`.code-window`, `.token-*`) in generated CSS — VSCode Dark+ style syntax highlighting
|
|
175
|
+
- `pre`/`code` base styles added to `@layer base`
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## v1.0.8 — May 2026
|
|
180
|
+
|
|
181
|
+
**Watch mode + build pipeline**
|
|
182
|
+
|
|
183
|
+
### Added
|
|
184
|
+
- Watch mode — `npx emily-css watch` rebuilds CSS automatically on config change
|
|
185
|
+
- Build + purge can now be chained in a single pipeline
|
|
186
|
+
- npm scripts wired into `package.json` during `npx emily-css init`
|
|
187
|
+
|
|
188
|
+
### Changed
|
|
189
|
+
- `init.js` provides a more guided setup experience with clearer prompts
|
|
190
|
+
- `bin/emilyui.js` updated to correctly route `watch`/`build`/`purge` subcommands
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## v1.0.7 — April 2026
|
|
195
|
+
|
|
196
|
+
**Purge regex fix**
|
|
197
|
+
|
|
198
|
+
### Fixed
|
|
199
|
+
- Purge crashed when class names contained regex metacharacters (`[`, `]`, `(`, `)`, `{`, `}`, etc). Previously only `:` and `.` were escaped — now uses full metacharacter escaping
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## v1.0.6 — April 2026
|
|
204
|
+
|
|
205
|
+
**Dist + font cleanup**
|
|
206
|
+
|
|
207
|
+
### Changed
|
|
208
|
+
- `dist/` and `fonts/` directories removed from git tracking
|
|
209
|
+
|
|
210
|
+
### Breaking changes
|
|
211
|
+
- If you were pulling `dist/emily.css` directly from GitHub, run `npx emily-css build` locally instead
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## v1.0.5 — April 2026
|
|
216
|
+
|
|
217
|
+
**Split font system**
|
|
218
|
+
|
|
219
|
+
### Added
|
|
220
|
+
- Separate heading and body font config — `fontFamily.heading` and `fontFamily.body` are now independent
|
|
221
|
+
- Google Fonts CDN integration — fonts loaded via `@import` in generated CSS
|
|
222
|
+
- Font-specific tests added to test suite
|
|
223
|
+
|
|
224
|
+
### Changed
|
|
225
|
+
- Bundled font files removed from the npm package
|
|
226
|
+
- `emily.config.json` updated with split `fontFamily` structure
|
|
227
|
+
|
|
228
|
+
### Breaking changes
|
|
229
|
+
- If your config has `fontFamily` as a single string, update it to `{ "heading": "...", "body": "..." }`
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## v1.0.3 — April 2026
|
|
234
|
+
|
|
235
|
+
**Package size reduction**
|
|
236
|
+
|
|
237
|
+
### Changed
|
|
238
|
+
- Demo CSS removed from the published npm package
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## v1.0.2 — April 2026
|
|
243
|
+
|
|
244
|
+
**Package distribution fix**
|
|
245
|
+
|
|
246
|
+
### Added
|
|
247
|
+
- `.npmignore` added — controls which files are included in the published package
|
|
248
|
+
- `dist` files explicitly declared in `package.json` `files` array
|
|
249
|
+
|
|
250
|
+
### Fixed
|
|
251
|
+
- Unnecessary files (tests, src, docs) were being included in the npm tarball
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## v1.0.1 — April 2026
|
|
256
|
+
|
|
257
|
+
**CLI rename fix**
|
|
258
|
+
|
|
259
|
+
### Fixed
|
|
260
|
+
- Internal references to old `emily-ui` CLI name updated to `emily-css`
|
|
261
|
+
|
|
262
|
+
### Breaking changes
|
|
263
|
+
- If you had scripts referencing `npx emily-ui`, update them to `npx emily-css`
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## v1.0.0 — April 2026
|
|
268
|
+
|
|
269
|
+
**Initial release**
|
|
270
|
+
|
|
271
|
+
### Added
|
|
272
|
+
- 11,844 utility classes generated from `emily.config.json`
|
|
273
|
+
- OKLCH colour scale generation — one hex in, 10-shade scale out
|
|
274
|
+
- Responsive variants (`sm:` `md:` `lg:` `xl:` `2xl:`)
|
|
275
|
+
- State variants (`hover:` `focus-visible:` `active:` `disabled:` `dark:`)
|
|
276
|
+
- Purge system — strips unused classes, ~97% file size reduction
|
|
277
|
+
- Interactive setup wizard (`npx emily-css init`)
|
|
278
|
+
- 72 tests, all passing
|
|
279
|
+
|
|
280
|
+
---
|
package/package.json
CHANGED
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "emily-css",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "A config-driven utility CSS framework. Define your brand once, generate the CSS.",
|
|
5
|
-
"main": "src/index.js",
|
|
6
|
-
"bin": {
|
|
7
|
-
"emily-css": "bin/emilyui.js"
|
|
8
|
-
},
|
|
9
|
-
"files": [
|
|
10
|
-
"bin/",
|
|
11
|
-
"src/",
|
|
12
|
-
"templates/",
|
|
13
|
-
"README.md",
|
|
14
|
-
"LICENSE",
|
|
15
|
-
"CHANGELOG.md"
|
|
16
|
-
],
|
|
17
|
-
"scripts": {
|
|
18
|
-
"build": "node src/index.js",
|
|
19
|
-
"dev": "nodemon src/index.js",
|
|
20
|
-
"dev:full": "nodemon src/index.js -- --keep-full",
|
|
21
|
-
"init": "node src/init.js",
|
|
22
|
-
"test": "node tests/test.js",
|
|
23
|
-
"emily:showcase": "node src/showcase.js",
|
|
24
|
-
"commit": "node scripts/commit.js",
|
|
25
|
-
"release": "node scripts/release.js",
|
|
26
|
-
"ship": "node scripts/ship.js",
|
|
27
|
-
"emily:build": "emily-css build",
|
|
28
|
-
"emily:watch": "emily-css watch",
|
|
29
|
-
"emily:help": "emily-css help"
|
|
30
|
-
},
|
|
31
|
-
"keywords": [
|
|
32
|
-
"css",
|
|
33
|
-
"design-system",
|
|
34
|
-
"components",
|
|
35
|
-
"config-driven",
|
|
36
|
-
"utility-css",
|
|
37
|
-
"accessibility",
|
|
38
|
-
"drupal",
|
|
39
|
-
"legacy",
|
|
40
|
-
"no-build-step"
|
|
41
|
-
],
|
|
42
|
-
"author": "Andy Terry",
|
|
43
|
-
"license": "MIT",
|
|
44
|
-
"engines": {
|
|
45
|
-
"node": ">=16.0.0"
|
|
46
|
-
},
|
|
47
|
-
"devDependencies": {
|
|
48
|
-
"nodemon": "^3.0.0"
|
|
49
|
-
},
|
|
50
|
-
"dependencies": {
|
|
51
|
-
"boxen": "^5.1.2",
|
|
52
|
-
"chalk": "^4.1.2",
|
|
53
|
-
"chokidar": "^5.0.0",
|
|
54
|
-
"cross-spawn": "^7.0.6",
|
|
55
|
-
"enquirer": "^2.4.1",
|
|
56
|
-
"fast-glob": "^3.3.3",
|
|
57
|
-
"ora": "^5.4.1"
|
|
58
|
-
}
|
|
59
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "emily-css",
|
|
3
|
+
"version": "1.0.27",
|
|
4
|
+
"description": "A config-driven utility CSS framework. Define your brand once, generate the CSS.",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"emily-css": "bin/emilyui.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin/",
|
|
11
|
+
"src/",
|
|
12
|
+
"templates/",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE",
|
|
15
|
+
"CHANGELOG.md"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "node src/index.js",
|
|
19
|
+
"dev": "nodemon src/index.js",
|
|
20
|
+
"dev:full": "nodemon src/index.js -- --keep-full",
|
|
21
|
+
"init": "node src/init.js",
|
|
22
|
+
"test": "node tests/test.js",
|
|
23
|
+
"emily:showcase": "node src/showcase.js",
|
|
24
|
+
"commit": "node scripts/commit.js",
|
|
25
|
+
"release": "node scripts/release.js",
|
|
26
|
+
"ship": "node scripts/ship.js",
|
|
27
|
+
"emily:build": "emily-css build",
|
|
28
|
+
"emily:watch": "emily-css watch",
|
|
29
|
+
"emily:help": "emily-css help"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"css",
|
|
33
|
+
"design-system",
|
|
34
|
+
"components",
|
|
35
|
+
"config-driven",
|
|
36
|
+
"utility-css",
|
|
37
|
+
"accessibility",
|
|
38
|
+
"drupal",
|
|
39
|
+
"legacy",
|
|
40
|
+
"no-build-step"
|
|
41
|
+
],
|
|
42
|
+
"author": "Andy Terry",
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=16.0.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"nodemon": "^3.0.0"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"boxen": "^5.1.2",
|
|
52
|
+
"chalk": "^4.1.2",
|
|
53
|
+
"chokidar": "^5.0.0",
|
|
54
|
+
"cross-spawn": "^7.0.6",
|
|
55
|
+
"enquirer": "^2.4.1",
|
|
56
|
+
"fast-glob": "^3.3.3",
|
|
57
|
+
"ora": "^5.4.1"
|
|
58
|
+
}
|
|
59
|
+
}
|
package/src/index.js
CHANGED
|
@@ -999,6 +999,330 @@ function generatePatternComponents() {
|
|
|
999
999
|
gap: var(--space-4, 1rem);
|
|
1000
1000
|
align-items: center;
|
|
1001
1001
|
}
|
|
1002
|
+
|
|
1003
|
+
/* ---- Layout ---- */
|
|
1004
|
+
|
|
1005
|
+
/* Constrained width container — 1100px max, full-width on small screens */
|
|
1006
|
+
.width-container {
|
|
1007
|
+
width: 100%;
|
|
1008
|
+
max-width: 1100px;
|
|
1009
|
+
margin-inline: auto;
|
|
1010
|
+
padding-inline: var(--space-4, 1rem);
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
@media (min-width: 640px) {
|
|
1014
|
+
.width-container {
|
|
1015
|
+
padding-inline: var(--space-6, 1.5rem);
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
@media (min-width: 1024px) {
|
|
1020
|
+
.width-container {
|
|
1021
|
+
padding-inline: var(--space-8, 2rem);
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
@media (min-width: 1140px) {
|
|
1026
|
+
.width-container {
|
|
1027
|
+
padding-inline: 0;
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
/* ---- Forms ---- */
|
|
1032
|
+
|
|
1033
|
+
.field-container {
|
|
1034
|
+
display: flex;
|
|
1035
|
+
flex-direction: column;
|
|
1036
|
+
gap: var(--space-2, 0.5rem);
|
|
1037
|
+
margin-bottom: var(--space-6, 1.5rem);
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
.field-container label {
|
|
1041
|
+
display: block;
|
|
1042
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
1043
|
+
color: var(--color-neutral-90);
|
|
1044
|
+
font-size: var(--text-base, 16px);
|
|
1045
|
+
line-height: 1.4;
|
|
1046
|
+
margin-bottom: var(--space-1, 0.25rem);
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
fieldset {
|
|
1050
|
+
border: none;
|
|
1051
|
+
padding: 0;
|
|
1052
|
+
margin: 0 0 var(--space-6, 1.5rem);
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
fieldset legend {
|
|
1056
|
+
display: block;
|
|
1057
|
+
font-size: var(--text-lg, 18px);
|
|
1058
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
1059
|
+
margin-bottom: var(--space-3, 0.75rem);
|
|
1060
|
+
color: var(--color-neutral-90);
|
|
1061
|
+
padding: 0;
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
.form-hint {
|
|
1065
|
+
font-size: var(--text-sm, 14px);
|
|
1066
|
+
color: var(--color-neutral-60);
|
|
1067
|
+
margin-bottom: var(--space-1, 0.25rem);
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
input[type="text"],
|
|
1071
|
+
input[type="email"],
|
|
1072
|
+
input[type="password"],
|
|
1073
|
+
input[type="number"],
|
|
1074
|
+
input[type="tel"],
|
|
1075
|
+
input[type="url"],
|
|
1076
|
+
input[type="search"],
|
|
1077
|
+
input[type="date"],
|
|
1078
|
+
select,
|
|
1079
|
+
textarea {
|
|
1080
|
+
width: 100%;
|
|
1081
|
+
max-width: 100%;
|
|
1082
|
+
padding: var(--space-3, 0.75rem) var(--space-4, 1rem);
|
|
1083
|
+
border: 2px solid var(--color-neutral-30);
|
|
1084
|
+
border-radius: 8px;
|
|
1085
|
+
background-color: #ffffff;
|
|
1086
|
+
color: var(--color-neutral-90);
|
|
1087
|
+
font-family: inherit;
|
|
1088
|
+
font-size: var(--text-base, 16px);
|
|
1089
|
+
line-height: var(--leading-base, 1.6);
|
|
1090
|
+
appearance: none;
|
|
1091
|
+
transition: border-color 200ms ease, box-shadow 200ms ease;
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
select {
|
|
1095
|
+
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
|
|
1096
|
+
background-position: right var(--space-2, 0.5rem) center;
|
|
1097
|
+
background-repeat: no-repeat;
|
|
1098
|
+
background-size: 1.5em 1.5em;
|
|
1099
|
+
padding-right: var(--space-10, 2.5rem);
|
|
1100
|
+
cursor: pointer;
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1103
|
+
textarea {
|
|
1104
|
+
min-height: 120px;
|
|
1105
|
+
resize: vertical;
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
input[type="text"]:focus,
|
|
1109
|
+
input[type="email"]:focus,
|
|
1110
|
+
input[type="password"]:focus,
|
|
1111
|
+
input[type="number"]:focus,
|
|
1112
|
+
input[type="tel"]:focus,
|
|
1113
|
+
input[type="url"]:focus,
|
|
1114
|
+
input[type="search"]:focus,
|
|
1115
|
+
input[type="date"]:focus,
|
|
1116
|
+
select:focus,
|
|
1117
|
+
textarea:focus {
|
|
1118
|
+
outline: 2px solid var(--color-neutral-80);
|
|
1119
|
+
outline-offset: 3px;
|
|
1120
|
+
border-color: var(--color-neutral-80);
|
|
1121
|
+
box-shadow: 0 0 0 4px rgba(219, 39, 119, 0.1);
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
.checkbox-group,
|
|
1125
|
+
.radio-group {
|
|
1126
|
+
display: flex;
|
|
1127
|
+
align-items: center;
|
|
1128
|
+
gap: var(--space-3, 0.75rem);
|
|
1129
|
+
margin-bottom: var(--space-4, 1rem);
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
.checkbox-group label,
|
|
1133
|
+
.radio-group label {
|
|
1134
|
+
font-weight: var(--font-weight-normal, 400);
|
|
1135
|
+
margin-bottom: 0;
|
|
1136
|
+
cursor: pointer;
|
|
1137
|
+
font-size: var(--text-base, 16px);
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
input[type="checkbox"] {
|
|
1141
|
+
width: 1.5rem;
|
|
1142
|
+
height: 1.5rem;
|
|
1143
|
+
margin: 0;
|
|
1144
|
+
cursor: pointer;
|
|
1145
|
+
accent-color: var(--color-brand-80);
|
|
1146
|
+
flex-shrink: 0;
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
input[type="checkbox"]:focus {
|
|
1150
|
+
outline: 2px solid var(--color-neutral-80);
|
|
1151
|
+
outline-offset: 3px;
|
|
1152
|
+
box-shadow: 0 0 0 4px rgba(219, 39, 119, 0.1);
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
input[type="radio"] {
|
|
1156
|
+
width: 1.5rem;
|
|
1157
|
+
height: 1.5rem;
|
|
1158
|
+
margin: 0;
|
|
1159
|
+
border-radius: 50%;
|
|
1160
|
+
appearance: none;
|
|
1161
|
+
background-color: #ffffff;
|
|
1162
|
+
border: 2px solid var(--color-neutral-30);
|
|
1163
|
+
display: grid;
|
|
1164
|
+
place-content: center;
|
|
1165
|
+
cursor: pointer;
|
|
1166
|
+
flex-shrink: 0;
|
|
1167
|
+
transition: background-color 200ms ease, border-color 200ms ease;
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
input[type="radio"]::before {
|
|
1171
|
+
content: "";
|
|
1172
|
+
width: 0.75rem;
|
|
1173
|
+
height: 0.75rem;
|
|
1174
|
+
border-radius: 50%;
|
|
1175
|
+
transform: scale(0);
|
|
1176
|
+
transition: 120ms transform ease-in-out;
|
|
1177
|
+
background-color: var(--color-brand-80);
|
|
1178
|
+
}
|
|
1179
|
+
|
|
1180
|
+
input[type="radio"]:checked {
|
|
1181
|
+
border-color: var(--color-brand-80);
|
|
1182
|
+
}
|
|
1183
|
+
|
|
1184
|
+
input[type="radio"]:checked::before {
|
|
1185
|
+
transform: scale(1);
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
input[type="radio"]:hover {
|
|
1189
|
+
background-color: var(--color-brand-10);
|
|
1190
|
+
border-color: var(--color-brand-80);
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
input[type="radio"]:focus {
|
|
1194
|
+
outline: 2px solid var(--color-neutral-80);
|
|
1195
|
+
outline-offset: 3px;
|
|
1196
|
+
border-radius: 50%;
|
|
1197
|
+
box-shadow: 0 0 0 4px rgba(219, 39, 119, 0.1);
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
input[aria-invalid="true"] {
|
|
1201
|
+
border-color: var(--color-error-80) !important;
|
|
1202
|
+
border-width: 3px;
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
.form-error-message {
|
|
1206
|
+
font-size: var(--text-sm, 14px);
|
|
1207
|
+
font-weight: var(--font-weight-bold, 700);
|
|
1208
|
+
color: var(--color-error-80);
|
|
1209
|
+
margin-top: var(--space-1, 0.25rem);
|
|
1210
|
+
display: block;
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
.error-summary {
|
|
1214
|
+
border: 4px solid var(--color-error-80);
|
|
1215
|
+
padding: var(--space-6, 1.5rem);
|
|
1216
|
+
margin-bottom: var(--space-8, 2rem);
|
|
1217
|
+
border-radius: 8px;
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
.error-summary ul {
|
|
1221
|
+
list-style: disc;
|
|
1222
|
+
padding-left: var(--space-5, 1.25rem);
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
.error-summary a {
|
|
1226
|
+
color: var(--color-error-80);
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
/* ---- Buttons ---- */
|
|
1230
|
+
|
|
1231
|
+
.btn {
|
|
1232
|
+
display: inline-flex;
|
|
1233
|
+
align-items: center;
|
|
1234
|
+
justify-content: center;
|
|
1235
|
+
padding: var(--space-3, 0.75rem) var(--space-6, 1.5rem);
|
|
1236
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
1237
|
+
border-radius: 8px;
|
|
1238
|
+
cursor: pointer;
|
|
1239
|
+
transition: background-color 200ms ease, border-color 200ms ease, color 200ms ease;
|
|
1240
|
+
border: 2px solid transparent;
|
|
1241
|
+
text-align: center;
|
|
1242
|
+
min-height: 3rem;
|
|
1243
|
+
font-size: var(--text-base, 16px);
|
|
1244
|
+
text-decoration: none;
|
|
1245
|
+
font-family: inherit;
|
|
1246
|
+
line-height: 1;
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
.btn-primary {
|
|
1250
|
+
background-color: var(--color-brand-80);
|
|
1251
|
+
color: #ffffff;
|
|
1252
|
+
border-color: transparent;
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1255
|
+
.btn-primary:hover {
|
|
1256
|
+
background-color: var(--color-brand-90);
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
.btn-primary:focus-visible {
|
|
1260
|
+
outline: 2px solid var(--color-neutral-80);
|
|
1261
|
+
outline-offset: 3px;
|
|
1262
|
+
box-shadow: 0 0 0 4px rgba(219, 39, 119, 0.1);
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
.btn-secondary {
|
|
1266
|
+
background-color: #ffffff;
|
|
1267
|
+
color: var(--color-accent-80);
|
|
1268
|
+
border-color: var(--color-accent-80);
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
.btn-secondary:hover {
|
|
1272
|
+
background-color: var(--color-accent-10);
|
|
1273
|
+
color: var(--color-accent-90);
|
|
1274
|
+
border-color: var(--color-accent-90);
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
.btn-secondary:focus-visible {
|
|
1278
|
+
outline: 2px solid var(--color-neutral-80);
|
|
1279
|
+
outline-offset: 3px;
|
|
1280
|
+
box-shadow: 0 0 0 4px rgba(219, 39, 119, 0.1);
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
.btn-ghost {
|
|
1284
|
+
background-color: transparent;
|
|
1285
|
+
color: var(--color-neutral-80);
|
|
1286
|
+
border-color: transparent;
|
|
1287
|
+
}
|
|
1288
|
+
|
|
1289
|
+
.btn-ghost:hover {
|
|
1290
|
+
background-color: var(--color-neutral-10);
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
.btn-ghost:focus-visible {
|
|
1294
|
+
outline: 2px solid var(--color-neutral-80);
|
|
1295
|
+
outline-offset: 3px;
|
|
1296
|
+
box-shadow: 0 0 0 4px rgba(219, 39, 119, 0.1);
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1299
|
+
.btn-danger {
|
|
1300
|
+
background-color: var(--color-error-80);
|
|
1301
|
+
color: #ffffff;
|
|
1302
|
+
border-color: transparent;
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
.btn-danger:hover {
|
|
1306
|
+
background-color: var(--color-error-90);
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1309
|
+
.btn-danger:focus-visible {
|
|
1310
|
+
outline: 2px solid var(--color-neutral-80);
|
|
1311
|
+
outline-offset: 3px;
|
|
1312
|
+
box-shadow: 0 0 0 4px rgba(219, 39, 119, 0.1);
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1315
|
+
.btn-sm {
|
|
1316
|
+
padding: var(--space-2, 0.5rem) var(--space-4, 1rem);
|
|
1317
|
+
font-size: var(--text-sm, 14px);
|
|
1318
|
+
min-height: 2.25rem;
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1321
|
+
.btn-lg {
|
|
1322
|
+
padding: var(--space-4, 1rem) var(--space-8, 2rem);
|
|
1323
|
+
font-size: var(--text-lg, 18px);
|
|
1324
|
+
min-height: 3.5rem;
|
|
1325
|
+
}
|
|
1002
1326
|
`;
|
|
1003
1327
|
}
|
|
1004
1328
|
|
|
@@ -1145,6 +1469,59 @@ function buildFullFramework() {
|
|
|
1145
1469
|
overflow-wrap: break-word;
|
|
1146
1470
|
}
|
|
1147
1471
|
|
|
1472
|
+
/* Base heading scale */
|
|
1473
|
+
h1 {
|
|
1474
|
+
font-size: var(--text-4xl, 36px);
|
|
1475
|
+
line-height: var(--leading-4xl, 1.3);
|
|
1476
|
+
font-weight: var(--font-weight-bold, 700);
|
|
1477
|
+
margin-bottom: var(--space-6, 1.5rem);
|
|
1478
|
+
}
|
|
1479
|
+
|
|
1480
|
+
h2 {
|
|
1481
|
+
font-size: var(--text-3xl, 30px);
|
|
1482
|
+
line-height: var(--leading-3xl, 1.4);
|
|
1483
|
+
font-weight: var(--font-weight-bold, 700);
|
|
1484
|
+
margin-bottom: var(--space-5, 1.25rem);
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
h3 {
|
|
1488
|
+
font-size: var(--text-2xl, 24px);
|
|
1489
|
+
line-height: var(--leading-2xl, 1.4);
|
|
1490
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
1491
|
+
margin-bottom: var(--space-4, 1rem);
|
|
1492
|
+
}
|
|
1493
|
+
|
|
1494
|
+
h4 {
|
|
1495
|
+
font-size: var(--text-xl, 20px);
|
|
1496
|
+
line-height: var(--leading-xl, 1.6);
|
|
1497
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
1498
|
+
margin-bottom: var(--space-3, 0.75rem);
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1501
|
+
h5 {
|
|
1502
|
+
font-size: var(--text-lg, 18px);
|
|
1503
|
+
line-height: var(--leading-lg, 1.6);
|
|
1504
|
+
font-weight: var(--font-weight-medium, 500);
|
|
1505
|
+
margin-bottom: var(--space-3, 0.75rem);
|
|
1506
|
+
}
|
|
1507
|
+
|
|
1508
|
+
h6 {
|
|
1509
|
+
font-size: var(--text-base, 16px);
|
|
1510
|
+
line-height: var(--leading-base, 1.6);
|
|
1511
|
+
font-weight: var(--font-weight-medium, 500);
|
|
1512
|
+
margin-bottom: var(--space-2, 0.5rem);
|
|
1513
|
+
}
|
|
1514
|
+
|
|
1515
|
+
p {
|
|
1516
|
+
font-size: var(--text-base, 16px);
|
|
1517
|
+
line-height: var(--leading-base, 1.6);
|
|
1518
|
+
margin-bottom: var(--space-4, 1rem);
|
|
1519
|
+
}
|
|
1520
|
+
|
|
1521
|
+
p:last-child {
|
|
1522
|
+
margin-bottom: 0;
|
|
1523
|
+
}
|
|
1524
|
+
|
|
1148
1525
|
code {
|
|
1149
1526
|
font-family: "Menlo", "Monaco", "Courier New", monospace;
|
|
1150
1527
|
font-size: 0.875em;
|
package/templates/showcase.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
6
|
<title>EmilyUI Showcase</title>
|
|
7
|
-
<link rel="stylesheet" href="
|
|
7
|
+
<link rel="stylesheet" href="../dist/emily.min.css">
|
|
8
8
|
<style>
|
|
9
9
|
html {
|
|
10
10
|
scroll-behavior: smooth;
|
|
@@ -949,7 +949,7 @@
|
|
|
949
949
|
|
|
950
950
|
<div class="lg:col-span-2">
|
|
951
951
|
<h3 class="font-bold mb-3">.center-screen</h3>
|
|
952
|
-
<div class="border border-neutral-20 rounded-t-lg overflow-hidden bg-neutral-80" style="min-height:
|
|
952
|
+
<div class="border border-neutral-20 rounded-t-lg overflow-hidden bg-neutral-80" style="min-height: 50vh; position: relative;">
|
|
953
953
|
<div class="center-screen" style="position: absolute;">
|
|
954
954
|
<div class="bg-white rounded-lg shadow-lg border border-neutral-20 p-6 text-center" style="max-width: 340px; width: 90%;">
|
|
955
955
|
<h4 class="text-lg font-bold mb-2">Confirm action</h4>
|