fractalstyler2 0.4.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +114 -95
  2. package/dist/cli.js +105 -25
  3. package/dist/components/Accordion.svelte +44 -0
  4. package/dist/components/Accordion.svelte.d.ts +23 -0
  5. package/dist/components/AccordionItem.svelte +44 -0
  6. package/dist/components/AccordionItem.svelte.d.ts +21 -0
  7. package/dist/components/AppShell.svelte +86 -0
  8. package/dist/components/AppShell.svelte.d.ts +39 -0
  9. package/dist/components/ColorPicker.svelte +38 -0
  10. package/dist/components/ColorPicker.svelte.d.ts +6 -0
  11. package/dist/components/Hero.svelte +14 -0
  12. package/dist/components/Hero.svelte.d.ts +9 -0
  13. package/dist/components/LayoutPicker.svelte +34 -0
  14. package/dist/components/LayoutPicker.svelte.d.ts +6 -0
  15. package/dist/components/MotionPicker.svelte +34 -0
  16. package/dist/components/MotionPicker.svelte.d.ts +6 -0
  17. package/dist/components/PageShell.svelte +14 -0
  18. package/dist/components/PageShell.svelte.d.ts +9 -0
  19. package/dist/components/PageSplit.svelte +26 -0
  20. package/dist/components/PageSplit.svelte.d.ts +18 -0
  21. package/dist/components/ShapePicker.svelte +37 -0
  22. package/dist/components/ShapePicker.svelte.d.ts +6 -0
  23. package/dist/css/fractalstyler.css +10643 -0
  24. package/dist/css/fractalstyler.min.css +2 -0
  25. package/dist/index.d.ts +18 -6
  26. package/dist/index.js +30 -12
  27. package/dist/mcp/schemas/compile_fractals.json +3 -3
  28. package/dist/mcp/schemas/css_to_fractals.json +1 -1
  29. package/dist/mcp/schemas/generate_component.json +2 -2
  30. package/dist/mcp/schemas/instructions.md +41 -14
  31. package/dist/mcp/schemas/list_fractals.json +9 -7
  32. package/dist/mcp/schemas/validate_recipe.json +2 -2
  33. package/dist/mcp/server.d.ts +1 -1
  34. package/dist/mcp/server.js +334 -237
  35. package/dist/presets.core.d.ts +42 -0
  36. package/dist/presets.core.js +190 -0
  37. package/dist/presets.svelte.d.ts +6 -0
  38. package/dist/presets.svelte.js +21 -0
  39. package/dist/styles/_00_presets.sass +111 -0
  40. package/dist/styles/_00_themes.sass +1061 -0
  41. package/dist/styles/_00_tokens.sass +57 -17
  42. package/dist/styles/_01_config.sass +77 -70
  43. package/dist/styles/_02_dimensions.sass +174 -0
  44. package/dist/styles/_03_containers.sass +105 -0
  45. package/dist/styles/_04_layouts.sass +100 -0
  46. package/dist/styles/_05_shells.sass +374 -0
  47. package/dist/styles/_06_visuals.sass +236 -0
  48. package/dist/styles/_07_interactions.sass +112 -0
  49. package/dist/styles/_08_own.sass +4 -0
  50. package/dist/styles/canonical-markups.md +160 -0
  51. package/dist/styles/index.sass +11 -18
  52. package/dist/themes.d.ts +7 -0
  53. package/dist/themes.js +45 -0
  54. package/dist/version.d.ts +1 -0
  55. package/dist/version.js +2 -0
  56. package/package.json +26 -15
  57. package/plugin.json +11 -10
  58. package/registry.json +2002 -0
  59. package/skills/fractal-styler/SKILL.md +137 -50
  60. package/skills/fractal-styler/references/fractals.md +416 -28
  61. package/skills/fractal-styler/references/tokens.md +110 -36
  62. package/dist/styles/_02_fonts.sass +0 -13
  63. package/dist/styles/_03_responsive.sass +0 -31
  64. package/dist/styles/_04_atoms.sass +0 -155
  65. package/dist/styles/_05_molecules.sass +0 -97
  66. package/dist/styles/_06_recipes.sass +0 -189
  67. package/dist/styles/_07_base.sass +0 -44
  68. package/dist/styles/_08_blocks.sass +0 -433
  69. package/dist/styles/_09_utilities.sass +0 -208
  70. package/dist/styles/_10_layouts.sass +0 -373
  71. package/dist/styles/_11_own.sass +0 -21
  72. package/dist/styles/_fractals.sass +0 -14
  73. package/skills/style-migration/SKILL.md +0 -45
  74. package/templates/_00_tokens.sass +0 -136
  75. package/templates/_01_config.sass +0 -66
  76. package/templates/_02_fonts.sass +0 -13
  77. package/templates/_03_responsive.sass +0 -31
  78. package/templates/_04_atoms.sass +0 -155
  79. package/templates/_05_molecules.sass +0 -97
  80. package/templates/_06_recipes.sass +0 -189
  81. package/templates/_07_base.sass +0 -44
  82. package/templates/_08_blocks.sass +0 -433
  83. package/templates/_09_utilities.sass +0 -207
  84. package/templates/_10_layouts.sass +0 -373
  85. package/templates/_11_own.sass +0 -21
  86. package/templates/_fractals.sass +0 -14
  87. package/templates/index.sass +0 -18
@@ -1,433 +0,0 @@
1
- // =============================================================================
2
- // 08_BLOCKS — baseline semantic classes composed from fractal recipes.
3
- // -----------------------------------------------------------------------------
4
- // Blocks provide convenient markup classes without locking down arbitrary
5
- // paddings or scale tokens. State is expressed via data-*/aria-* attributes.
6
- // =============================================================================
7
-
8
- @use 'fractals' as *
9
-
10
- .surface
11
- +surface(surface, null, 6)
12
- +box(stretch, start)
13
- &[data-role='raised']
14
- +bg(raised)
15
- &[data-role='bg']
16
- +bg(bg)
17
- &[data-role='panel']
18
- +bg(panel)
19
- &[data-role='popover']
20
- +bg(popover)
21
- &[data-role='dialog']
22
- +bg(dialog)
23
-
24
- .card
25
- +card($pad: null, $radius: 6)
26
- &[data-elevated]
27
- +shadow(md)
28
- > :is(footer, .card-footer, .meta-bottom)
29
- margin-top: auto
30
- padding-top: var(--space-xs)
31
- border-top: 1px solid var(--border)
32
-
33
- .panel
34
- +surface(panel, null, 4)
35
-
36
- .popover
37
- +surface(popover, null, 6, md)
38
-
39
- .dialog
40
- +surface(dialog, null, 6, lg)
41
-
42
- .terminal
43
- +surface(terminal, null, 4)
44
- font-family: var(--font-mono)
45
- color: var(--text-inverse)
46
-
47
- .canvas
48
- +bg(canvas)
49
-
50
- .badge
51
- +badge
52
- &[data-status='released']
53
- color: var(--theme-color)
54
- background: rgba(16, 185, 129, 0.1)
55
- border-color: rgba(16, 185, 129, 0.25)
56
- &[data-status='wip']
57
- color: #d97706
58
- background: rgba(245, 158, 11, 0.1)
59
- border-color: rgba(245, 158, 11, 0.25)
60
- &[data-status='archived']
61
- +ink(muted)
62
- &[data-status='planned']
63
- color: #6366f1
64
- background: rgba(99, 102, 241, 0.1)
65
- border-color: rgba(99, 102, 241, 0.25)
66
-
67
- .avatar
68
- +center
69
- +square(var(--avatar-size, 40px))
70
- +radius(full)
71
- +bg(raised)
72
- +ink(secondary)
73
- +border(all, var(--border))
74
- overflow: hidden
75
-
76
- .input
77
- +input
78
-
79
- .select
80
- +select(md)
81
- &.sm
82
- +select(sm)
83
- &.lg
84
- +select(lg)
85
-
86
- .divider
87
- +divider
88
-
89
- .kbd
90
- +kbd
91
-
92
- .button
93
- +button(md, 4)
94
- background: var(--bg-surface)
95
- &.sm
96
- +control(sm, 4)
97
- justify-content: center
98
- &.lg
99
- +control(lg, 4)
100
- justify-content: center
101
- &.primary
102
- background: var(--theme-color)
103
- color: var(--text-inverse)
104
- border-color: var(--theme-color)
105
- &:hover
106
- background: var(--theme-color-alt)
107
- border-color: var(--theme-color-alt)
108
- &.ghost
109
- background: transparent
110
- +ink(secondary)
111
- border-color: var(--border)
112
- &:hover
113
- +bg(raised)
114
- +ink(primary)
115
- border-color: var(--border-subtle)
116
- &[data-active]
117
- +bg(bg)
118
- +ink(primary)
119
- border-color: var(--border-subtle)
120
- +shadow(sm)
121
-
122
- button.is-icon, a.is-icon
123
- +row(center, center)
124
- background: none
125
- border: none
126
- padding: 0
127
- +ink(secondary)
128
- cursor: pointer
129
- text-decoration: none
130
- transition: color 120ms ease
131
- &:hover
132
- +ink(primary)
133
- svg
134
- height: 16px
135
- width: 16px
136
-
137
- // --- Accordion ---------------------------------------------------------------
138
- .accordion
139
- +box
140
- +border(all, var(--border))
141
- +radius(6)
142
- +bg(surface)
143
- overflow: hidden
144
-
145
- .accordion-item
146
- +border(bottom, var(--border))
147
- &:last-child
148
- border-bottom: none
149
-
150
- .accordion-trigger
151
- +row(between, center)
152
- width: 100%
153
- padding: var(--space-xs) var(--space-s)
154
- +bg(surface)
155
- +ink(primary)
156
- +type(sm)
157
- +weight(500)
158
- border: none
159
- cursor: pointer
160
- user-select: none
161
- text-align: left
162
- transition: background 120ms ease
163
- &:hover
164
- +bg(raised)
165
- .accordion-icon
166
- transition: transform 140ms ease
167
- +ink(muted)
168
-
169
- .accordion-item[data-open='true']
170
- .accordion-trigger .accordion-icon
171
- transform: rotate(180deg)
172
- +ink(primary)
173
-
174
- .accordion-content
175
- +collapsible
176
- .accordion-body
177
- padding: 0 var(--space-s) var(--space-s) var(--space-s)
178
- +type(sm)
179
- +ink(secondary)
180
- line-height: 1.6
181
-
182
- // --- Dialog Modal ------------------------------------------------------------
183
- dialog.dialog-modal
184
- position: fixed
185
- inset: 0
186
- margin: auto
187
- border: none
188
- background: transparent
189
- padding: 0
190
- max-width: min(92vw, 520px)
191
- width: 100%
192
- z-index: var(--z-modal, 200)
193
-
194
- &::backdrop
195
- background: rgba(0, 0, 0, 0.55)
196
- backdrop-filter: blur(4px)
197
- -webkit-backdrop-filter: blur(4px)
198
-
199
- > .dialog-card
200
- +dialog-surface
201
- +box
202
- +gap(m)
203
- +pad(m)
204
-
205
- // --- Drawer ------------------------------------------------------------------
206
- .drawer
207
- position: fixed
208
- top: 0
209
- bottom: 0
210
- z-index: var(--z-modal, 200)
211
- width: min(85vw, 360px)
212
- +bg(surface)
213
- +border(all, var(--border))
214
- +shadow(lg)
215
- transition: transform 200ms ease-out
216
- &.right
217
- right: 0
218
- transform: translateX(105%)
219
- +border(left, var(--border))
220
- &.left
221
- left: 0
222
- transform: translateX(-105%)
223
- +border(right, var(--border))
224
- &[data-open='true']
225
- transform: translateX(0)
226
-
227
- // --- Tabs --------------------------------------------------------------------
228
- .tab-list
229
- +row(null, center)
230
- +gap(3xs)
231
- +pad(3xs)
232
- +radius(4)
233
- +bg(raised)
234
- width: fit-content
235
- max-width: 100%
236
-
237
- .tab-trigger
238
- +row(center, center)
239
- +px(xs)
240
- +type(xs)
241
- +weight(500)
242
- +radius(3)
243
- height: var(--control-h-sm, 26px)
244
- border: none
245
- background: transparent
246
- +ink(secondary)
247
- cursor: pointer
248
- user-select: none
249
- white-space: nowrap
250
- transition: all 120ms ease
251
- &:hover
252
- +ink(primary)
253
- &[data-active='true'], &[aria-selected='true']
254
- +bg(surface)
255
- +ink(primary)
256
- +border(all, var(--border))
257
- +shadow(sm)
258
-
259
- // --- Switch ------------------------------------------------------------------
260
- .switch-track
261
- position: relative
262
- display: inline-flex
263
- align-items: center
264
- flex-shrink: 0
265
- width: 36px
266
- height: 20px
267
- +radius(full)
268
- +bg(raised)
269
- +border(all, var(--border))
270
- cursor: pointer
271
- user-select: none
272
- padding: 2px
273
- transition: background 140ms ease, border-color 140ms ease
274
-
275
- &[data-checked='true']
276
- background: var(--theme-color)
277
- border-color: var(--theme-color)
278
-
279
- .switch-thumb
280
- display: block
281
- width: 14px
282
- height: 14px
283
- +radius(full)
284
- background: var(--text-primary)
285
- transition: transform 140ms cubic-bezier(0.34, 1.56, 0.64, 1), background 140ms ease
286
- will-change: transform
287
-
288
- .switch-track[data-checked='true'] .switch-thumb
289
- transform: translateX(16px)
290
- background: var(--text-inverse)
291
-
292
- // --- Field -------------------------------------------------------------------
293
- .field
294
- +box
295
- +gap(3xs)
296
- width: 100%
297
-
298
- .field-label
299
- +type(xs)
300
- +weight(600)
301
- text-transform: uppercase
302
- letter-spacing: 0.05em
303
- +ink(secondary)
304
-
305
- .field-error
306
- +type(xs)
307
- color: #dc2626
308
- margin-top: 2px
309
-
310
- // --- Marquee -----------------------------------------------------------------
311
- .marquee, [data-slot="marquee"]
312
- overflow: hidden
313
- display: flex
314
- user-select: none
315
- gap: var(--marquee-gap, 1rem)
316
- position: relative
317
- width: 100%
318
-
319
- &[data-fade="true"]
320
- mask-image: linear-gradient(to right, transparent 0%, black 10%, black 90%, transparent 100%)
321
-
322
- [data-slot="marquee-track"]
323
- display: flex
324
- flex-shrink: 0
325
- justify-content: space-around
326
- gap: var(--marquee-gap, 1rem)
327
- min-width: 100%
328
- animation: marquee-scroll var(--marquee-speed, 30s) linear infinite
329
-
330
- &[data-pause="true"]:hover [data-slot="marquee-track"]
331
- animation-play-state: paused
332
-
333
- &[data-vertical="true"]
334
- flex-direction: column
335
- height: 300px
336
- &[data-fade="true"]
337
- mask-image: linear-gradient(to bottom, transparent 0%, black 10%, black 90%, transparent 100%)
338
- [data-slot="marquee-track"]
339
- flex-direction: column
340
- min-height: 100%
341
- animation-name: marquee-scroll-vertical
342
-
343
- @keyframes marquee-scroll
344
- from
345
- transform: translateX(0)
346
- to
347
- transform: translateX(calc(-100% - var(--marquee-gap, 1rem)))
348
-
349
- @keyframes marquee-scroll-vertical
350
- from
351
- transform: translateY(0)
352
- to
353
- transform: translateY(calc(-100% - var(--marquee-gap, 1rem)))
354
-
355
- // --- Animated Badge ----------------------------------------------------------
356
- [data-slot="badge"]
357
- position: relative
358
- display: inline-flex
359
- align-items: center
360
- overflow: hidden
361
- border: 1px solid var(--border)
362
- border-radius: var(--radius-full)
363
- font-weight: 500
364
- white-space: nowrap
365
- color: var(--text-secondary)
366
- background: var(--bg-surface)
367
-
368
- &[data-size="sm"]
369
- height: 1.5rem
370
- gap: var(--space-3xs)
371
- padding: 0 var(--space-2xs)
372
- font-size: var(--text-xs)
373
- &[data-size="md"]
374
- height: 1.75rem
375
- gap: var(--space-2xs)
376
- padding: 0 var(--space-xs)
377
- font-size: var(--text-xs)
378
-
379
- &[data-status="info"], &[data-status="loading"]
380
- border-color: var(--theme-color)
381
- color: var(--theme-color)
382
- background: var(--bg-raised)
383
- &[data-status="success"]
384
- border-color: #10b981
385
- color: #10b981
386
- &[data-status="warning"]
387
- border-color: #f59e0b
388
- color: #f59e0b
389
- &[data-status="danger"]
390
- border-color: #ef4444
391
- color: #ef4444
392
-
393
- [data-slot="badge-icon"], [data-slot="badge-label"]
394
- position: relative
395
- z-index: 1
396
- display: inline-flex
397
- animation: badge-roll 0.42s cubic-bezier(0.16, 1, 0.3, 1)
398
-
399
- [data-slot="badge-icon"]
400
- align-items: center
401
- justify-content: center
402
-
403
- [data-status="loading"] [data-slot="badge-icon"]
404
- animation: badge-spin 1s linear infinite
405
-
406
- [data-slot="badge-pulse"]
407
- position: absolute
408
- inset: 0
409
- border-radius: inherit
410
- background: currentColor
411
- animation: badge-pulse 1.6s ease-in-out infinite
412
-
413
- @keyframes badge-roll
414
- from
415
- transform: translateY(80%)
416
- opacity: 0
417
- filter: blur(4px)
418
-
419
- @keyframes badge-spin
420
- to
421
- transform: rotate(360deg)
422
-
423
- @keyframes badge-pulse
424
- 0%, 100%
425
- opacity: 0.08
426
- transform: scale(0.94)
427
- 50%
428
- opacity: 0.18
429
- transform: scale(1.08)
430
-
431
- @media (prefers-reduced-motion: reduce)
432
- [data-slot="badge-icon"], [data-slot="badge-label"], [data-slot="badge-pulse"], [data-slot="marquee-track"]
433
- animation: none !important
@@ -1,208 +0,0 @@
1
- // =============================================================================
2
- // 09_UTILITIES — the markup projection of atom & molecule fractals.
3
- // -----------------------------------------------------------------------------
4
- // Every utility class here is a direct 1:1 projection of an atom or molecule
5
- // mixin. Because this file is loaded after _08_blocks.sass in index.sass, utility
6
- // classes can be used on any element to set or override properties without
7
- // specificity wars.
8
- // =============================================================================
9
-
10
- @use 'sass:string'
11
- @use 'fractals' as *
12
-
13
- // --- Flow ------------------------------------------------------------------
14
- .box
15
- +box
16
- .row
17
- +row
18
- &.wrap
19
- +wrap
20
-
21
- // Alignment modifiers, semantic and axis-aware.
22
- .box
23
- &.xcenter
24
- align-items: center
25
- &.xleft
26
- align-items: flex-start
27
- &.xright
28
- align-items: flex-end
29
- &.ycenter
30
- justify-content: center
31
- &.ytop
32
- justify-content: flex-start
33
- &.ybot
34
- justify-content: flex-end
35
- &.ybetween
36
- justify-content: space-between
37
- &.yevenly
38
- justify-content: space-evenly
39
-
40
- .row
41
- &.ycenter
42
- align-items: center
43
- &.ytop
44
- align-items: flex-start
45
- &.ybot
46
- align-items: flex-end
47
- &.xcenter
48
- justify-content: center
49
- &.xbetween
50
- justify-content: space-between
51
- &.xevenly
52
- justify-content: space-evenly
53
- &.xleft
54
- justify-content: flex-start
55
- &.xright
56
- justify-content: flex-end
57
-
58
- // Fixed column grids.
59
- @for $n from 1 through 6
60
- .grid-cols-#{$n}
61
- +grid($n)
62
-
63
- .center
64
- +center
65
-
66
- // --- Molecule Projections --------------------------------------------------
67
- .stack
68
- +stack(s)
69
-
70
- .cluster
71
- +cluster(xs)
72
-
73
- .frame
74
- +frame('16 / 9')
75
- &.square
76
- +frame('1 / 1')
77
- &.video
78
- +frame('16 / 9')
79
-
80
- .reel
81
- +reel(s)
82
-
83
- .center-column
84
- +center-column
85
-
86
- // --- Spacing scale → gap-* / pad-* / margin-* ------------------------------
87
- @each $s in $space-steps
88
- .gap-#{$s}
89
- +gap($s)
90
- .pad-#{$s}
91
- +pad($s)
92
- .px-#{$s}
93
- +px($s)
94
- .py-#{$s}
95
- +py($s)
96
- .pt-#{$s}, .padtop-#{$s}, .pad-top-#{$s}
97
- padding-top: space($s)
98
- .pb-#{$s}, .padbot-#{$s}, .pad-bottom-#{$s}
99
- padding-bottom: space($s)
100
- .pl-#{$s}, .padleft-#{$s}, .pad-left-#{$s}
101
- padding-left: space($s)
102
- .pr-#{$s}, .padright-#{$s}, .pad-right-#{$s}
103
- padding-right: space($s)
104
- .m-#{$s}
105
- margin: space($s)
106
- .mx-#{$s}
107
- margin-inline: space($s)
108
- .my-#{$s}
109
- margin-block: space($s)
110
- .mt-#{$s}, .margin-top-#{$s}
111
- margin-top: space($s)
112
- .mb-#{$s}, .margin-bottom-#{$s}
113
- margin-bottom: space($s)
114
-
115
-
116
- .mx-auto
117
- +mx-auto
118
- .my-auto
119
- +my-auto
120
-
121
- // --- Radius / shadow / surface ---------------------------------------------
122
- @each $r in $radius-steps
123
- .radius-#{$r}
124
- +radius($r)
125
-
126
- @each $s in $shadow-steps
127
- .shadow-#{$s}
128
- +shadow($s)
129
-
130
- @each $role in $surface-roles
131
- .bg-#{$role}
132
- +bg($role)
133
-
134
- .border
135
- +border
136
- @each $side in top right bottom left
137
- .border-#{$side}
138
- +border($side)
139
-
140
- // --- Type ------------------------------------------------------------------
141
- @each $t in $text-steps
142
- .text-#{$t}
143
- +type($t)
144
-
145
- .truncate
146
- +truncate
147
-
148
- .clamp-1
149
- +clamp-lines(1)
150
- .clamp-2
151
- +clamp-lines(2)
152
- .clamp-3
153
- +clamp-lines(3)
154
-
155
- .weight-400
156
- +weight(400)
157
- .weight-500
158
- +weight(500)
159
- .weight-600
160
- +weight(600)
161
- .weight-700
162
- +weight(700)
163
-
164
- .muted
165
- +ink(secondary)
166
- .eyebrow
167
- +type(sm)
168
- +ink(muted)
169
- text-transform: uppercase
170
- letter-spacing: 0.06em
171
- font-weight: 500
172
-
173
- // --- Sizing shortcuts ------------------------------------------------------
174
- .wfull
175
- +w(100%)
176
- .hfull
177
- +h(100%)
178
- .full
179
- +full
180
- .grow
181
- +grow
182
- .shrink-0
183
- +shrink(0)
184
- .min0
185
- +min0
186
- .relative
187
- +relative
188
- .absolute
189
- +absolute
190
- .overflow-hidden
191
- overflow: hidden
192
- .cursor-pointer
193
- cursor: pointer
194
- .block
195
- display: block
196
-
197
- // --- Responsive Visibility -------------------------------------------------
198
- .hide-desktop
199
- +at(lg)
200
- display: none !important
201
-
202
- .hide-mobile
203
- +below(lg)
204
- display: none !important
205
-
206
- .only-mobile
207
- +at(lg)
208
- display: none !important