jasmincss 1.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.
Files changed (76) hide show
  1. package/README.md +524 -0
  2. package/bin/jasmin.js +45 -0
  3. package/dist/index.d.ts +62 -0
  4. package/dist/index.js +14568 -0
  5. package/dist/index.mjs +14524 -0
  6. package/dist/jasmin.css +63308 -0
  7. package/dist/jasmin.min.css +1 -0
  8. package/dist/plugins/nextjs.js +14777 -0
  9. package/dist/plugins/nextjs.mjs +14747 -0
  10. package/dist/plugins/vite.js +14889 -0
  11. package/dist/plugins/vite.mjs +14860 -0
  12. package/package.json +101 -0
  13. package/src/cli/add.js +83 -0
  14. package/src/cli/init.js +210 -0
  15. package/src/cli/run.js +142 -0
  16. package/src/components/accordion.js +309 -0
  17. package/src/components/alerts.js +357 -0
  18. package/src/components/avatars.js +331 -0
  19. package/src/components/badges.js +353 -0
  20. package/src/components/buttons.js +412 -0
  21. package/src/components/cards.js +342 -0
  22. package/src/components/carousel.js +495 -0
  23. package/src/components/chips.js +440 -0
  24. package/src/components/command-palette.js +434 -0
  25. package/src/components/datepicker.js +517 -0
  26. package/src/components/dropdown.js +411 -0
  27. package/src/components/forms.js +516 -0
  28. package/src/components/index.js +81 -0
  29. package/src/components/modals.js +349 -0
  30. package/src/components/navigation.js +463 -0
  31. package/src/components/offcanvas.js +390 -0
  32. package/src/components/popover.js +427 -0
  33. package/src/components/progress.js +396 -0
  34. package/src/components/rating.js +394 -0
  35. package/src/components/skeleton.js +408 -0
  36. package/src/components/spinner.js +453 -0
  37. package/src/components/stepper.js +389 -0
  38. package/src/components/tables.js +304 -0
  39. package/src/components/timeline.js +452 -0
  40. package/src/components/timepicker.js +529 -0
  41. package/src/components/tooltips.js +345 -0
  42. package/src/components/upload.js +490 -0
  43. package/src/config/defaults.js +263 -0
  44. package/src/config/loader.js +109 -0
  45. package/src/core/base.js +241 -0
  46. package/src/core/compiler.js +135 -0
  47. package/src/core/utilities/accessibility.js +290 -0
  48. package/src/core/utilities/animations.js +205 -0
  49. package/src/core/utilities/background.js +109 -0
  50. package/src/core/utilities/colors.js +234 -0
  51. package/src/core/utilities/columns.js +161 -0
  52. package/src/core/utilities/effects.js +261 -0
  53. package/src/core/utilities/filters.js +135 -0
  54. package/src/core/utilities/icons.js +806 -0
  55. package/src/core/utilities/index.js +239 -0
  56. package/src/core/utilities/layout.js +321 -0
  57. package/src/core/utilities/scroll.js +205 -0
  58. package/src/core/utilities/spacing.js +120 -0
  59. package/src/core/utilities/svg.js +191 -0
  60. package/src/core/utilities/transforms.js +116 -0
  61. package/src/core/utilities/typography.js +188 -0
  62. package/src/index.js +7 -0
  63. package/src/js/components/accordion.js +154 -0
  64. package/src/js/components/alert.js +198 -0
  65. package/src/js/components/carousel.js +226 -0
  66. package/src/js/components/dropdown.js +166 -0
  67. package/src/js/components/modal.js +169 -0
  68. package/src/js/components/offcanvas.js +175 -0
  69. package/src/js/components/popover.js +221 -0
  70. package/src/js/components/tabs.js +163 -0
  71. package/src/js/components/tooltip.js +200 -0
  72. package/src/js/index.js +79 -0
  73. package/src/js/types/config.d.ts +228 -0
  74. package/src/js/types/index.d.ts +439 -0
  75. package/src/plugins/nextjs.js +100 -0
  76. package/src/plugins/vite.js +133 -0
@@ -0,0 +1,109 @@
1
+ // Background utilities for JasminCSS
2
+
3
+ export function generateBackgroundUtilities(config) {
4
+ const classes = [];
5
+
6
+ // Background Attachment
7
+ const attachments = ['fixed', 'local', 'scroll'];
8
+ attachments.forEach(value => {
9
+ classes.push({
10
+ name: `bg-${value}`,
11
+ css: `.bg-${value} { background-attachment: ${value}; }`
12
+ });
13
+ });
14
+
15
+ // Background Clip
16
+ const clips = {
17
+ 'border': 'border-box',
18
+ 'padding': 'padding-box',
19
+ 'content': 'content-box',
20
+ 'text': 'text'
21
+ };
22
+ Object.entries(clips).forEach(([name, value]) => {
23
+ classes.push({
24
+ name: `bg-clip-${name}`,
25
+ css: `.bg-clip-${name} { background-clip: ${value};${value === 'text' ? ' -webkit-background-clip: text;' : ''} }`
26
+ });
27
+ });
28
+
29
+ // Background Origin
30
+ const origins = {
31
+ 'border': 'border-box',
32
+ 'padding': 'padding-box',
33
+ 'content': 'content-box'
34
+ };
35
+ Object.entries(origins).forEach(([name, value]) => {
36
+ classes.push({
37
+ name: `bg-origin-${name}`,
38
+ css: `.bg-origin-${name} { background-origin: ${value}; }`
39
+ });
40
+ });
41
+
42
+ // Background Position
43
+ const positions = {
44
+ 'bottom': 'bottom',
45
+ 'center': 'center',
46
+ 'left': 'left',
47
+ 'left-bottom': 'left bottom',
48
+ 'left-top': 'left top',
49
+ 'right': 'right',
50
+ 'right-bottom': 'right bottom',
51
+ 'right-top': 'right top',
52
+ 'top': 'top'
53
+ };
54
+ Object.entries(positions).forEach(([name, value]) => {
55
+ classes.push({
56
+ name: `bg-${name}`,
57
+ css: `.bg-${name} { background-position: ${value}; }`
58
+ });
59
+ });
60
+
61
+ // Background Repeat
62
+ const repeats = {
63
+ 'repeat': 'repeat',
64
+ 'no-repeat': 'no-repeat',
65
+ 'repeat-x': 'repeat-x',
66
+ 'repeat-y': 'repeat-y',
67
+ 'repeat-round': 'round',
68
+ 'repeat-space': 'space'
69
+ };
70
+ Object.entries(repeats).forEach(([name, value]) => {
71
+ classes.push({
72
+ name: `bg-${name}`,
73
+ css: `.bg-${name} { background-repeat: ${value}; }`
74
+ });
75
+ });
76
+
77
+ // Background Size
78
+ const sizes = {
79
+ 'auto': 'auto',
80
+ 'cover': 'cover',
81
+ 'contain': 'contain'
82
+ };
83
+ Object.entries(sizes).forEach(([name, value]) => {
84
+ classes.push({
85
+ name: `bg-${name}`,
86
+ css: `.bg-${name} { background-size: ${value}; }`
87
+ });
88
+ });
89
+
90
+ // Background Image None
91
+ classes.push({
92
+ name: 'bg-none',
93
+ css: '.bg-none { background-image: none; }'
94
+ });
95
+
96
+ // Background Blend Mode
97
+ const blendModes = ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];
98
+ blendModes.forEach(mode => {
99
+ classes.push({
100
+ name: `bg-blend-${mode}`,
101
+ css: `.bg-blend-${mode} { background-blend-mode: ${mode}; }`
102
+ });
103
+ });
104
+
105
+ return {
106
+ css: classes.map(c => c.css).join('\n'),
107
+ classes
108
+ };
109
+ }
@@ -0,0 +1,234 @@
1
+ export function generateColorUtilities(config) {
2
+ const classes = [];
3
+ const { branding, colors } = config;
4
+
5
+ // Brand colors (primary, secondary, accent, etc.)
6
+ const brandColors = branding?.colors || {};
7
+
8
+ // Generate text colors
9
+ Object.entries(brandColors).forEach(([name, value]) => {
10
+ classes.push({ name: `text-${name}`, css: `.text-${name} { color: var(--j-${name}); }` });
11
+ });
12
+
13
+ // Generate background colors
14
+ Object.entries(brandColors).forEach(([name, value]) => {
15
+ classes.push({ name: `bg-${name}`, css: `.bg-${name} { background-color: var(--j-${name}); }` });
16
+ });
17
+
18
+ // Generate border colors
19
+ Object.entries(brandColors).forEach(([name, value]) => {
20
+ classes.push({ name: `border-${name}`, css: `.border-${name} { border-color: var(--j-${name}); }` });
21
+ });
22
+
23
+ // Extended color palette
24
+ const extendedColors = colors || {};
25
+ Object.entries(extendedColors).forEach(([colorName, shades]) => {
26
+ if (typeof shades === 'object' && !Array.isArray(shades)) {
27
+ Object.entries(shades).forEach(([shade, value]) => {
28
+ // Text
29
+ classes.push({
30
+ name: `text-${colorName}-${shade}`,
31
+ css: `.text-${colorName}-${shade} { color: var(--j-${colorName}-${shade}); }`
32
+ });
33
+ // Background
34
+ classes.push({
35
+ name: `bg-${colorName}-${shade}`,
36
+ css: `.bg-${colorName}-${shade} { background-color: var(--j-${colorName}-${shade}); }`
37
+ });
38
+ // Border
39
+ classes.push({
40
+ name: `border-${colorName}-${shade}`,
41
+ css: `.border-${colorName}-${shade} { border-color: var(--j-${colorName}-${shade}); }`
42
+ });
43
+ // Ring
44
+ classes.push({
45
+ name: `ring-${colorName}-${shade}`,
46
+ css: `.ring-${colorName}-${shade} { --j-ring-color: var(--j-${colorName}-${shade}); }`
47
+ });
48
+ // Decoration
49
+ classes.push({
50
+ name: `decoration-${colorName}-${shade}`,
51
+ css: `.decoration-${colorName}-${shade} { text-decoration-color: var(--j-${colorName}-${shade}); }`
52
+ });
53
+ // Divide
54
+ classes.push({
55
+ name: `divide-${colorName}-${shade}`,
56
+ css: `.divide-${colorName}-${shade} > :not([hidden]) ~ :not([hidden]) { border-color: var(--j-${colorName}-${shade}); }`
57
+ });
58
+ // Outline
59
+ classes.push({
60
+ name: `outline-${colorName}-${shade}`,
61
+ css: `.outline-${colorName}-${shade} { outline-color: var(--j-${colorName}-${shade}); }`
62
+ });
63
+ // Shadow (colored)
64
+ classes.push({
65
+ name: `shadow-${colorName}-${shade}`,
66
+ css: `.shadow-${colorName}-${shade} { --j-shadow-color: var(--j-${colorName}-${shade}); }`
67
+ });
68
+ // Accent
69
+ classes.push({
70
+ name: `accent-${colorName}-${shade}`,
71
+ css: `.accent-${colorName}-${shade} { accent-color: var(--j-${colorName}-${shade}); }`
72
+ });
73
+ // Caret
74
+ classes.push({
75
+ name: `caret-${colorName}-${shade}`,
76
+ css: `.caret-${colorName}-${shade} { caret-color: var(--j-${colorName}-${shade}); }`
77
+ });
78
+ // Fill
79
+ classes.push({
80
+ name: `fill-${colorName}-${shade}`,
81
+ css: `.fill-${colorName}-${shade} { fill: var(--j-${colorName}-${shade}); }`
82
+ });
83
+ // Stroke
84
+ classes.push({
85
+ name: `stroke-${colorName}-${shade}`,
86
+ css: `.stroke-${colorName}-${shade} { stroke: var(--j-${colorName}-${shade}); }`
87
+ });
88
+ });
89
+ }
90
+ });
91
+
92
+ // Special colors
93
+ const specialColors = {
94
+ 'transparent': 'transparent',
95
+ 'current': 'currentColor',
96
+ 'inherit': 'inherit',
97
+ 'white': '#ffffff',
98
+ 'black': '#000000'
99
+ };
100
+
101
+ Object.entries(specialColors).forEach(([name, value]) => {
102
+ classes.push({ name: `text-${name}`, css: `.text-${name} { color: ${value}; }` });
103
+ classes.push({ name: `bg-${name}`, css: `.bg-${name} { background-color: ${value}; }` });
104
+ classes.push({ name: `border-${name}`, css: `.border-${name} { border-color: ${value}; }` });
105
+ });
106
+
107
+ // Semantic colors
108
+ classes.push({ name: 'text-muted', css: '.text-muted { color: var(--j-text-muted); }' });
109
+ classes.push({ name: 'text-subtle', css: '.text-subtle { color: var(--j-text-subtle); }' });
110
+ classes.push({ name: 'bg-subtle', css: '.bg-subtle { background-color: var(--j-bg-subtle); }' });
111
+ classes.push({ name: 'bg-muted', css: '.bg-muted { background-color: var(--j-bg-muted); }' });
112
+ classes.push({ name: 'border-default', css: '.border-default { border-color: var(--j-border); }' });
113
+ classes.push({ name: 'border-subtle', css: '.border-subtle { border-color: var(--j-border-subtle); }' });
114
+
115
+ // Opacity
116
+ const opacities = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100];
117
+ opacities.forEach(op => {
118
+ classes.push({ name: `opacity-${op}`, css: `.opacity-${op} { opacity: ${op / 100}; }` });
119
+ });
120
+
121
+ // Background Opacity (via CSS variables)
122
+ opacities.forEach(op => {
123
+ classes.push({
124
+ name: `bg-opacity-${op}`,
125
+ css: `.bg-opacity-${op} { --j-bg-opacity: ${op / 100}; }`
126
+ });
127
+ });
128
+
129
+ // Text Opacity (via CSS variables)
130
+ opacities.forEach(op => {
131
+ classes.push({
132
+ name: `text-opacity-${op}`,
133
+ css: `.text-opacity-${op} { --j-text-opacity: ${op / 100}; }`
134
+ });
135
+ });
136
+
137
+ // Border Opacity
138
+ opacities.forEach(op => {
139
+ classes.push({
140
+ name: `border-opacity-${op}`,
141
+ css: `.border-opacity-${op} { --j-border-opacity: ${op / 100}; }`
142
+ });
143
+ });
144
+
145
+ // Gradients
146
+ classes.push({ name: 'bg-none', css: '.bg-none { background-image: none; }' });
147
+ classes.push({
148
+ name: 'bg-gradient-to-t',
149
+ css: '.bg-gradient-to-t { background-image: linear-gradient(to top, var(--j-gradient-stops)); }'
150
+ });
151
+ classes.push({
152
+ name: 'bg-gradient-to-tr',
153
+ css: '.bg-gradient-to-tr { background-image: linear-gradient(to top right, var(--j-gradient-stops)); }'
154
+ });
155
+ classes.push({
156
+ name: 'bg-gradient-to-r',
157
+ css: '.bg-gradient-to-r { background-image: linear-gradient(to right, var(--j-gradient-stops)); }'
158
+ });
159
+ classes.push({
160
+ name: 'bg-gradient-to-br',
161
+ css: '.bg-gradient-to-br { background-image: linear-gradient(to bottom right, var(--j-gradient-stops)); }'
162
+ });
163
+ classes.push({
164
+ name: 'bg-gradient-to-b',
165
+ css: '.bg-gradient-to-b { background-image: linear-gradient(to bottom, var(--j-gradient-stops)); }'
166
+ });
167
+ classes.push({
168
+ name: 'bg-gradient-to-bl',
169
+ css: '.bg-gradient-to-bl { background-image: linear-gradient(to bottom left, var(--j-gradient-stops)); }'
170
+ });
171
+ classes.push({
172
+ name: 'bg-gradient-to-l',
173
+ css: '.bg-gradient-to-l { background-image: linear-gradient(to left, var(--j-gradient-stops)); }'
174
+ });
175
+ classes.push({
176
+ name: 'bg-gradient-to-tl',
177
+ css: '.bg-gradient-to-tl { background-image: linear-gradient(to top left, var(--j-gradient-stops)); }'
178
+ });
179
+
180
+ // Gradient stops (from, via, to)
181
+ Object.entries(extendedColors).forEach(([colorName, shades]) => {
182
+ if (typeof shades === 'object' && !Array.isArray(shades)) {
183
+ Object.entries(shades).forEach(([shade, value]) => {
184
+ classes.push({
185
+ name: `from-${colorName}-${shade}`,
186
+ css: `.from-${colorName}-${shade} { --j-gradient-from: var(--j-${colorName}-${shade}); --j-gradient-stops: var(--j-gradient-from), var(--j-gradient-via, transparent), var(--j-gradient-to, transparent); }`
187
+ });
188
+ classes.push({
189
+ name: `via-${colorName}-${shade}`,
190
+ css: `.via-${colorName}-${shade} { --j-gradient-via: var(--j-${colorName}-${shade}); --j-gradient-stops: var(--j-gradient-from, transparent), var(--j-gradient-via), var(--j-gradient-to, transparent); }`
191
+ });
192
+ classes.push({
193
+ name: `to-${colorName}-${shade}`,
194
+ css: `.to-${colorName}-${shade} { --j-gradient-to: var(--j-${colorName}-${shade}); }`
195
+ });
196
+ });
197
+ }
198
+ });
199
+
200
+ // Brand color gradients
201
+ Object.keys(brandColors).forEach(name => {
202
+ classes.push({
203
+ name: `from-${name}`,
204
+ css: `.from-${name} { --j-gradient-from: var(--j-${name}); --j-gradient-stops: var(--j-gradient-from), var(--j-gradient-via, transparent), var(--j-gradient-to, transparent); }`
205
+ });
206
+ classes.push({
207
+ name: `via-${name}`,
208
+ css: `.via-${name} { --j-gradient-via: var(--j-${name}); --j-gradient-stops: var(--j-gradient-from, transparent), var(--j-gradient-via), var(--j-gradient-to, transparent); }`
209
+ });
210
+ classes.push({
211
+ name: `to-${name}`,
212
+ css: `.to-${name} { --j-gradient-to: var(--j-${name}); }`
213
+ });
214
+ });
215
+
216
+ // Special gradient stops
217
+ classes.push({
218
+ name: 'from-transparent',
219
+ css: '.from-transparent { --j-gradient-from: transparent; --j-gradient-stops: var(--j-gradient-from), var(--j-gradient-via, transparent), var(--j-gradient-to, transparent); }'
220
+ });
221
+ classes.push({
222
+ name: 'via-transparent',
223
+ css: '.via-transparent { --j-gradient-via: transparent; --j-gradient-stops: var(--j-gradient-from, transparent), var(--j-gradient-via), var(--j-gradient-to, transparent); }'
224
+ });
225
+ classes.push({
226
+ name: 'to-transparent',
227
+ css: '.to-transparent { --j-gradient-to: transparent; }'
228
+ });
229
+
230
+ return {
231
+ css: classes.map(c => c.css).join('\n'),
232
+ classes
233
+ };
234
+ }
@@ -0,0 +1,161 @@
1
+ // CSS Multi-column layout utilities for JasminCSS
2
+
3
+ export function generateColumnUtilities(config) {
4
+ const classes = [];
5
+
6
+ // Column Count
7
+ const counts = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', 'auto'];
8
+ counts.forEach(count => {
9
+ classes.push({
10
+ name: `columns-${count}`,
11
+ css: `.columns-${count} { column-count: ${count}; }`
12
+ });
13
+ });
14
+
15
+ // Column Width Presets
16
+ const widths = {
17
+ '3xs': '16rem',
18
+ '2xs': '18rem',
19
+ 'xs': '20rem',
20
+ 'sm': '24rem',
21
+ 'md': '28rem',
22
+ 'lg': '32rem',
23
+ 'xl': '36rem',
24
+ '2xl': '42rem',
25
+ '3xl': '48rem',
26
+ '4xl': '56rem',
27
+ '5xl': '64rem',
28
+ '6xl': '72rem',
29
+ '7xl': '80rem'
30
+ };
31
+ Object.entries(widths).forEach(([name, value]) => {
32
+ classes.push({
33
+ name: `columns-${name}`,
34
+ css: `.columns-${name} { column-width: ${value}; }`
35
+ });
36
+ });
37
+
38
+ // Column Gap (using spacing scale)
39
+ const gaps = {
40
+ '0': '0px',
41
+ 'px': '1px',
42
+ '0.5': '0.125rem',
43
+ '1': '0.25rem',
44
+ '1.5': '0.375rem',
45
+ '2': '0.5rem',
46
+ '2.5': '0.625rem',
47
+ '3': '0.75rem',
48
+ '3.5': '0.875rem',
49
+ '4': '1rem',
50
+ '5': '1.25rem',
51
+ '6': '1.5rem',
52
+ '7': '1.75rem',
53
+ '8': '2rem',
54
+ '9': '2.25rem',
55
+ '10': '2.5rem',
56
+ '11': '2.75rem',
57
+ '12': '3rem',
58
+ '14': '3.5rem',
59
+ '16': '4rem',
60
+ '20': '5rem',
61
+ '24': '6rem',
62
+ '28': '7rem',
63
+ '32': '8rem',
64
+ 'normal': 'normal'
65
+ };
66
+ Object.entries(gaps).forEach(([name, value]) => {
67
+ const className = name.includes('.') ? name.replace('.', '\\.') : name;
68
+ classes.push({
69
+ name: `column-gap-${name}`,
70
+ css: `.column-gap-${className} { column-gap: ${value}; }`
71
+ });
72
+ });
73
+
74
+ // Column Rule Width
75
+ const ruleWidths = {
76
+ '0': '0px',
77
+ '1': '1px',
78
+ '2': '2px',
79
+ '4': '4px',
80
+ '8': '8px'
81
+ };
82
+ Object.entries(ruleWidths).forEach(([name, value]) => {
83
+ classes.push({
84
+ name: `column-rule-${name}`,
85
+ css: `.column-rule-${name} { column-rule-width: ${value}; }`
86
+ });
87
+ });
88
+
89
+ // Column Rule Style
90
+ const ruleStyles = ['none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset'];
91
+ ruleStyles.forEach(style => {
92
+ classes.push({
93
+ name: `column-rule-${style}`,
94
+ css: `.column-rule-${style} { column-rule-style: ${style}; }`
95
+ });
96
+ });
97
+
98
+ // Column Rule Color (semantic colors)
99
+ const colors = ['primary', 'secondary', 'accent', 'success', 'warning', 'error', 'info', 'neutral'];
100
+ colors.forEach(color => {
101
+ classes.push({
102
+ name: `column-rule-${color}`,
103
+ css: `.column-rule-${color} { column-rule-color: var(--j-${color}); }`
104
+ });
105
+ });
106
+ classes.push({
107
+ name: 'column-rule-current',
108
+ css: '.column-rule-current { column-rule-color: currentColor; }'
109
+ });
110
+ classes.push({
111
+ name: 'column-rule-transparent',
112
+ css: '.column-rule-transparent { column-rule-color: transparent; }'
113
+ });
114
+
115
+ // Column Span
116
+ classes.push({
117
+ name: 'column-span-all',
118
+ css: '.column-span-all { column-span: all; }'
119
+ });
120
+ classes.push({
121
+ name: 'column-span-none',
122
+ css: '.column-span-none { column-span: none; }'
123
+ });
124
+
125
+ // Column Fill
126
+ classes.push({
127
+ name: 'column-fill-auto',
128
+ css: '.column-fill-auto { column-fill: auto; }'
129
+ });
130
+ classes.push({
131
+ name: 'column-fill-balance',
132
+ css: '.column-fill-balance { column-fill: balance; }'
133
+ });
134
+
135
+ // Break Inside
136
+ const breakInside = ['auto', 'avoid', 'avoid-page', 'avoid-column'];
137
+ breakInside.forEach(value => {
138
+ classes.push({
139
+ name: `break-inside-${value}`,
140
+ css: `.break-inside-${value} { break-inside: ${value}; }`
141
+ });
142
+ });
143
+
144
+ // Break Before/After
145
+ const breakValues = ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];
146
+ breakValues.forEach(value => {
147
+ classes.push({
148
+ name: `break-before-${value}`,
149
+ css: `.break-before-${value} { break-before: ${value}; }`
150
+ });
151
+ classes.push({
152
+ name: `break-after-${value}`,
153
+ css: `.break-after-${value} { break-after: ${value}; }`
154
+ });
155
+ });
156
+
157
+ return {
158
+ css: classes.map(c => c.css).join('\n'),
159
+ classes
160
+ };
161
+ }