@webikon/webentor-core 0.9.12

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 (132) hide show
  1. package/.husky/pre-commit +40 -0
  2. package/.prettierrc.js +5 -0
  3. package/CHANGELOG.md +88 -0
  4. package/LICENCE.md +7 -0
  5. package/README.md +26 -0
  6. package/core-js/_alpine.ts +20 -0
  7. package/core-js/_slider.ts +232 -0
  8. package/core-js/_utils.ts +126 -0
  9. package/core-js/blocks-components/block-appender.tsx +36 -0
  10. package/core-js/blocks-components/button.tsx +424 -0
  11. package/core-js/blocks-components/custom-image-sizes-panel.tsx +197 -0
  12. package/core-js/blocks-components/index.ts +4 -0
  13. package/core-js/blocks-components/typography-picker-select.tsx +31 -0
  14. package/core-js/blocks-filters/_filter-core-typography.tsx +108 -0
  15. package/core-js/blocks-filters/_slider-settings.tsx +283 -0
  16. package/core-js/blocks-filters/index.ts +3 -0
  17. package/core-js/blocks-filters/responsive-settings/components/DisabledSliderInfo.tsx +10 -0
  18. package/core-js/blocks-filters/responsive-settings/constants.ts +11 -0
  19. package/core-js/blocks-filters/responsive-settings/index.tsx +196 -0
  20. package/core-js/blocks-filters/responsive-settings/settings/block-link/index.ts +1 -0
  21. package/core-js/blocks-filters/responsive-settings/settings/block-link/panel.tsx +47 -0
  22. package/core-js/blocks-filters/responsive-settings/settings/border/border/index.tsx +1 -0
  23. package/core-js/blocks-filters/responsive-settings/settings/border/border/properties.ts +27 -0
  24. package/core-js/blocks-filters/responsive-settings/settings/border/border/settings.tsx +310 -0
  25. package/core-js/blocks-filters/responsive-settings/settings/border/border-radius/index.tsx +1 -0
  26. package/core-js/blocks-filters/responsive-settings/settings/border/border-radius/properties.ts +31 -0
  27. package/core-js/blocks-filters/responsive-settings/settings/border/border-radius/settings.tsx +211 -0
  28. package/core-js/blocks-filters/responsive-settings/settings/border/index.ts +1 -0
  29. package/core-js/blocks-filters/responsive-settings/settings/border/panel.tsx +54 -0
  30. package/core-js/blocks-filters/responsive-settings/settings/container/display/index.ts +2 -0
  31. package/core-js/blocks-filters/responsive-settings/settings/container/display/properties.ts +167 -0
  32. package/core-js/blocks-filters/responsive-settings/settings/container/display/settings.tsx +73 -0
  33. package/core-js/blocks-filters/responsive-settings/settings/container/flexbox/index.ts +2 -0
  34. package/core-js/blocks-filters/responsive-settings/settings/container/flexbox/properties.ts +187 -0
  35. package/core-js/blocks-filters/responsive-settings/settings/container/flexbox/settings.tsx +131 -0
  36. package/core-js/blocks-filters/responsive-settings/settings/container/grid/index.ts +2 -0
  37. package/core-js/blocks-filters/responsive-settings/settings/container/grid/properties.ts +187 -0
  38. package/core-js/blocks-filters/responsive-settings/settings/container/grid/settings.tsx +132 -0
  39. package/core-js/blocks-filters/responsive-settings/settings/container/index.ts +4 -0
  40. package/core-js/blocks-filters/responsive-settings/settings/container/panel.tsx +92 -0
  41. package/core-js/blocks-filters/responsive-settings/settings/spacing/index.ts +3 -0
  42. package/core-js/blocks-filters/responsive-settings/settings/spacing/panel.tsx +45 -0
  43. package/core-js/blocks-filters/responsive-settings/settings/spacing/properties.ts +74 -0
  44. package/core-js/blocks-filters/responsive-settings/settings/spacing/settings.tsx +85 -0
  45. package/core-js/blocks-filters/responsive-settings/types/index.ts +68 -0
  46. package/core-js/blocks-filters/responsive-settings/utils.ts +321 -0
  47. package/core-js/blocks-utils/_use-block-parent.ts +27 -0
  48. package/core-js/blocks-utils/_use-post-types.ts +43 -0
  49. package/core-js/blocks-utils/_use-taxonomies.ts +29 -0
  50. package/core-js/blocks-utils/index.ts +3 -0
  51. package/core-js/config/webentor-config.ts +718 -0
  52. package/core-js/index.ts +14 -0
  53. package/core-js/types/_block-components.ts +7 -0
  54. package/core-js/types/_webentor-config.ts +182 -0
  55. package/package.json +98 -0
  56. package/resources/blocks/e-accordion/block.json +34 -0
  57. package/resources/blocks/e-accordion/e-accordion.block.tsx +125 -0
  58. package/resources/blocks/e-accordion/script.ts +1 -0
  59. package/resources/blocks/e-accordion/style.css +8 -0
  60. package/resources/blocks/e-accordion-group/block.json +56 -0
  61. package/resources/blocks/e-accordion-group/e-accordion-group.block.tsx +99 -0
  62. package/resources/blocks/e-breadcrumbs/block.json +41 -0
  63. package/resources/blocks/e-breadcrumbs/e-breadcrumbs.block.tsx +53 -0
  64. package/resources/blocks/e-button/block.json +32 -0
  65. package/resources/blocks/e-button/e-button.block.tsx +55 -0
  66. package/resources/blocks/e-gallery/block.json +90 -0
  67. package/resources/blocks/e-gallery/e-gallery.block.tsx +316 -0
  68. package/resources/blocks/e-icon-picker/block.json +37 -0
  69. package/resources/blocks/e-icon-picker/e-icon-picker.block.tsx +230 -0
  70. package/resources/blocks/e-icon-picker/style.css +17 -0
  71. package/resources/blocks/e-image/block.json +78 -0
  72. package/resources/blocks/e-image/e-image.block.tsx +331 -0
  73. package/resources/blocks/e-picker-query-loop/block.json +25 -0
  74. package/resources/blocks/e-picker-query-loop/e-picker-query-loop.block.tsx +189 -0
  75. package/resources/blocks/e-post-template/block.json +25 -0
  76. package/resources/blocks/e-post-template/e-post-template.block.tsx +100 -0
  77. package/resources/blocks/e-query-loop/block.json +36 -0
  78. package/resources/blocks/e-query-loop/constants.tsx +8 -0
  79. package/resources/blocks/e-query-loop/e-query-loop.block.tsx +270 -0
  80. package/resources/blocks/e-query-loop/taxonomy-controls.tsx +184 -0
  81. package/resources/blocks/e-slider/block.json +42 -0
  82. package/resources/blocks/e-slider/e-slider.block.tsx +100 -0
  83. package/resources/blocks/e-svg/block.json +37 -0
  84. package/resources/blocks/e-svg/e-svg.block.tsx +156 -0
  85. package/resources/blocks/e-tab-container/block.json +49 -0
  86. package/resources/blocks/e-tab-container/e-tab-container.block.tsx +123 -0
  87. package/resources/blocks/e-table/block.json +30 -0
  88. package/resources/blocks/e-table/e-table.block.tsx +120 -0
  89. package/resources/blocks/e-table/script.ts +48 -0
  90. package/resources/blocks/e-table-cell/block.json +40 -0
  91. package/resources/blocks/e-table-cell/e-table-cell.block.tsx +180 -0
  92. package/resources/blocks/e-table-row/block.json +28 -0
  93. package/resources/blocks/e-table-row/e-table-row.block.tsx +118 -0
  94. package/resources/blocks/e-tabs/block.json +27 -0
  95. package/resources/blocks/e-tabs/e-tabs.block.tsx +90 -0
  96. package/resources/blocks/l-404/block.json +51 -0
  97. package/resources/blocks/l-404/l-404.block.tsx +75 -0
  98. package/resources/blocks/l-flexible-container/block.json +34 -0
  99. package/resources/blocks/l-flexible-container/l-flexible-container.block.tsx +97 -0
  100. package/resources/blocks/l-footer/block.json +23 -0
  101. package/resources/blocks/l-footer/l-footer.block.tsx +51 -0
  102. package/resources/blocks/l-formatted-content/block.json +28 -0
  103. package/resources/blocks/l-formatted-content/l-formatted-content.block.tsx +97 -0
  104. package/resources/blocks/l-header/block.json +26 -0
  105. package/resources/blocks/l-header/l-header.block.tsx +100 -0
  106. package/resources/blocks/l-mobile-nav/block.json +15 -0
  107. package/resources/blocks/l-mobile-nav/l-mobile-nav.block.tsx +56 -0
  108. package/resources/blocks/l-mobile-nav/style.css +54 -0
  109. package/resources/blocks/l-nav-menu/block.json +27 -0
  110. package/resources/blocks/l-nav-menu/l-nav-menu.block.tsx +109 -0
  111. package/resources/blocks/l-nav-menu/style.css +134 -0
  112. package/resources/blocks/l-post-card/block.json +13 -0
  113. package/resources/blocks/l-post-card/l-post-card.block.tsx +52 -0
  114. package/resources/blocks/l-section/block.json +89 -0
  115. package/resources/blocks/l-section/l-section.block.tsx +316 -0
  116. package/resources/blocks/l-site-logo/block.json +15 -0
  117. package/resources/blocks/l-site-logo/l-site-logo.block.tsx +54 -0
  118. package/resources/core-components/slider/slider.script.ts +11 -0
  119. package/resources/core-components/slider/slider.style.css +134 -0
  120. package/resources/scripts/editor.ts +29 -0
  121. package/resources/styles/app.css +21 -0
  122. package/resources/styles/common/_editor.css +86 -0
  123. package/resources/styles/common/_form.css +83 -0
  124. package/resources/styles/common/_global.css +73 -0
  125. package/resources/styles/common/_theme.css +75 -0
  126. package/resources/styles/common/_utilities.css +33 -0
  127. package/resources/styles/common/_wordpress.css +110 -0
  128. package/resources/styles/components/_table.css +102 -0
  129. package/resources/styles/editor.css +16 -0
  130. package/resources/styles/partials/.gitkeep +0 -0
  131. package/resources/styles/partials/_header.css +21 -0
  132. package/resources/styles/partials/_pagination.css +35 -0
@@ -0,0 +1,718 @@
1
+ import type { WebentorConfig } from '@webentorCore/types/_webentor-config';
2
+
3
+ // Inspired by Tailwind BlockConfiguration
4
+ // See: https://github.com/tailwindlabs/tailwindcss/blob/v3.4.17/stubs/config.full.js
5
+
6
+ // Basic spacing, also used for padding and margin
7
+ export const spacing = {
8
+ 0: '0px', // 0px
9
+ 0.5: '0.125rem', // 2px
10
+ 1: '0.25rem', // 4px
11
+ 1.5: '0.375rem', // 6px
12
+ 2: '0.5rem', // 8px
13
+ 2.5: '0.625rem', // 10px
14
+ 3: '0.75rem', // 12px
15
+ 3.5: '0.875rem', // 14px
16
+ 4: '1rem', // 16px
17
+ 5: '1.25rem', // 20px
18
+ 6: '1.5rem', // 24px
19
+ 7: '1.75rem', // 28px
20
+ 8: '2rem', // 32px
21
+ 9: '2.25rem', // 36px
22
+ 10: '2.5rem', // 40px
23
+ 11: '2.75rem', // 44px
24
+ 12: '3rem', // 48px
25
+ 14: '3.5rem', // 56px
26
+ 15: '3.75rem', // 60px
27
+ 16: '4rem', //64px
28
+ 20: '5rem', // 80px
29
+ };
30
+
31
+ const config: WebentorConfig = {
32
+ theme: {
33
+ aspectRatio: {
34
+ auto: 'auto',
35
+ square: '1 / 1',
36
+ video: '16 / 9',
37
+ },
38
+ borderRadius: {
39
+ none: '0',
40
+ xs: '2px',
41
+ sm: '4px',
42
+ md: '6px',
43
+ lg: '8px',
44
+ xl: '12px',
45
+ '2xl': '16px',
46
+ '3xl': '24px',
47
+ full: '9999px',
48
+ },
49
+ borderWidth: {
50
+ 0: 'none',
51
+ 1: '1px',
52
+ 2: '2px',
53
+ 4: '4px',
54
+ 6: '6px',
55
+ },
56
+ borderStyle: {
57
+ none: 'none',
58
+ solid: 'solid',
59
+ dashed: 'dashed',
60
+ dotted: 'dotted',
61
+ double: 'double',
62
+ },
63
+ colors: {
64
+ // Default grey colors
65
+ 'grey-50': 'var(--color-grey-50)',
66
+ 'grey-100': 'var(--color-grey-100)',
67
+ 'grey-200': 'var(--color-grey-200)',
68
+ 'grey-300': 'var(--color-grey-300)',
69
+ 'grey-400': 'var(--color-grey-400)',
70
+ 'grey-500': 'var(--color-grey-500)',
71
+ 'grey-600': 'var(--color-grey-600)',
72
+ 'grey-700': 'var(--color-grey-700)',
73
+ 'grey-800': 'var(--color-grey-800)',
74
+ 'grey-900': 'var(--color-grey-900)',
75
+ 'grey-950': 'var(--color-grey-950)',
76
+
77
+ // Webentor colors
78
+ white: 'var(--color-white)',
79
+ black: 'var(--color-black)',
80
+ transparent: 'transparent',
81
+ current: 'currentColor',
82
+
83
+ // Admin colors
84
+ 'editor-border': '#ddd', // Border color used in editor
85
+ },
86
+ flexBasis: {
87
+ auto: 'auto',
88
+ 0: '0px', // 0px
89
+ 1: '0.25rem', // 4px
90
+ 2: '0.5rem', // 8px
91
+ 3: '0.75rem', // 12px
92
+ 4: '1rem', // 16px
93
+ 5: '1.25rem', // 20px
94
+ 6: '1.5rem', // 24px
95
+ 8: '2rem', // 32px
96
+ '1/2': '50%',
97
+ '1/3': '33.333333%',
98
+ '2/3': '66.666667%',
99
+ '1/4': '25%',
100
+ '2/4': '50%',
101
+ '3/4': '75%',
102
+ '1/5': '20%',
103
+ '2/5': '40%',
104
+ '3/5': '60%',
105
+ '4/5': '80%',
106
+ '1/6': '16.666667%',
107
+ '2/6': '33.333333%',
108
+ '3/6': '50%',
109
+ '4/6': '66.666667%',
110
+ '5/6': '83.333333%',
111
+ '1/12': '8.333333%',
112
+ '2/12': '16.666667%',
113
+ '3/12': '25%',
114
+ '4/12': '33.333333%',
115
+ '5/12': '41.666667%',
116
+ '6/12': '50%',
117
+ '7/12': '58.333333%',
118
+ '8/12': '66.666667%',
119
+ '9/12': '75%',
120
+ '10/12': '83.333333%',
121
+ '11/12': '91.666667%',
122
+ full: '100%',
123
+ },
124
+ fontFamily: {
125
+ primary: ['Heebo', 'Arial'],
126
+ secondary: ['Heebo', 'Arial'],
127
+ heading: ['GT Sectra', 'Arial'],
128
+ },
129
+ fontSize: {
130
+ 10: '0.625rem',
131
+ 12: '0.75rem',
132
+ 14: '0.875rem',
133
+ 16: '1rem',
134
+ 18: '1.125rem',
135
+ 20: '1.25rem',
136
+ 22: '1.375rem',
137
+ 24: '1.5rem',
138
+ 26: '1.625rem',
139
+ 28: '1.75rem',
140
+ 30: '1.875rem',
141
+ 32: '2rem',
142
+ 34: '2.125rem',
143
+ 36: '2.25rem',
144
+ 38: '2.375rem',
145
+ 40: '2.5rem',
146
+ 44: '2.75rem',
147
+ 48: '3rem',
148
+ 50: '3.125rem',
149
+ 56: '3.5rem',
150
+ 60: '3.75rem',
151
+ 80: '5rem',
152
+ },
153
+ fontWeight: {
154
+ 300: '300',
155
+ 400: '400',
156
+ normal: '400',
157
+ 500: '500',
158
+ medium: '500',
159
+ 600: '600',
160
+ semibold: '600',
161
+ 700: '700',
162
+ bold: '700',
163
+ 900: '900',
164
+ black: '900',
165
+ },
166
+ gap: {
167
+ ...spacing,
168
+ },
169
+ gridColumn: {
170
+ auto: 'auto',
171
+ 'span-1': 'span 1 / span 1',
172
+ 'span-2': 'span 2 / span 2',
173
+ 'span-3': 'span 3 / span 3',
174
+ 'span-4': 'span 4 / span 4',
175
+ 'span-5': 'span 5 / span 5',
176
+ 'span-6': 'span 6 / span 6',
177
+ 'span-7': 'span 7 / span 7',
178
+ 'span-8': 'span 8 / span 8',
179
+ 'span-9': 'span 9 / span 9',
180
+ 'span-10': 'span 10 / span 10',
181
+ 'span-11': 'span 11 / span 11',
182
+ 'span-12': 'span 12 / span 12',
183
+ 'span-full': '1 / -1',
184
+ },
185
+ gridRow: {
186
+ auto: 'auto',
187
+ 'span-1': 'span 1 / span 1',
188
+ 'span-2': 'span 2 / span 2',
189
+ 'span-3': 'span 3 / span 3',
190
+ 'span-4': 'span 4 / span 4',
191
+ 'span-5': 'span 5 / span 5',
192
+ 'span-6': 'span 6 / span 6',
193
+ 'span-7': 'span 7 / span 7',
194
+ 'span-8': 'span 8 / span 8',
195
+ 'span-9': 'span 9 / span 9',
196
+ 'span-10': 'span 10 / span 10',
197
+ 'span-11': 'span 11 / span 11',
198
+ 'span-12': 'span 12 / span 12',
199
+ 'span-full': '1 / -1',
200
+ },
201
+ gridTemplateColumns: {
202
+ none: 'none',
203
+ subgrid: 'subgrid',
204
+ 1: 'repeat(1, minmax(0, 1fr))',
205
+ 2: 'repeat(2, minmax(0, 1fr))',
206
+ 3: 'repeat(3, minmax(0, 1fr))',
207
+ 4: 'repeat(4, minmax(0, 1fr))',
208
+ 5: 'repeat(5, minmax(0, 1fr))',
209
+ 6: 'repeat(6, minmax(0, 1fr))',
210
+ 7: 'repeat(7, minmax(0, 1fr))',
211
+ 8: 'repeat(8, minmax(0, 1fr))',
212
+ 9: 'repeat(9, minmax(0, 1fr))',
213
+ 10: 'repeat(10, minmax(0, 1fr))',
214
+ 11: 'repeat(11, minmax(0, 1fr))',
215
+ 12: 'repeat(12, minmax(0, 1fr))',
216
+ },
217
+ gridTemplateRows: {
218
+ none: 'none',
219
+ subgrid: 'subgrid',
220
+ 1: 'repeat(1, minmax(0, 1fr))',
221
+ 2: 'repeat(2, minmax(0, 1fr))',
222
+ 3: 'repeat(3, minmax(0, 1fr))',
223
+ 4: 'repeat(4, minmax(0, 1fr))',
224
+ 5: 'repeat(5, minmax(0, 1fr))',
225
+ 6: 'repeat(6, minmax(0, 1fr))',
226
+ 7: 'repeat(7, minmax(0, 1fr))',
227
+ 8: 'repeat(8, minmax(0, 1fr))',
228
+ 9: 'repeat(9, minmax(0, 1fr))',
229
+ 10: 'repeat(10, minmax(0, 1fr))',
230
+ 11: 'repeat(11, minmax(0, 1fr))',
231
+ 12: 'repeat(12, minmax(0, 1fr))',
232
+ },
233
+ height: {
234
+ auto: 'auto',
235
+ ...spacing,
236
+ '1/2': '50%',
237
+ '1/3': '33.333333%',
238
+ '2/3': '66.666667%',
239
+ '1/4': '25%',
240
+ '2/4': '50%',
241
+ '3/4': '75%',
242
+ '1/5': '20%',
243
+ '2/5': '40%',
244
+ '3/5': '60%',
245
+ '4/5': '80%',
246
+ '1/6': '16.666667%',
247
+ '2/6': '33.333333%',
248
+ '3/6': '50%',
249
+ '4/6': '66.666667%',
250
+ '5/6': '83.333333%',
251
+ full: '100%',
252
+ screen: '100vh',
253
+ svh: '100svh',
254
+ lvh: '100lvh',
255
+ dvh: '100dvh',
256
+ min: 'min-content',
257
+ max: 'max-content',
258
+ fit: 'fit-content',
259
+ },
260
+ margin: {
261
+ auto: 'auto',
262
+ ...spacing,
263
+ },
264
+ maxHeight: {
265
+ ...spacing,
266
+ none: 'none',
267
+ xs: '20rem',
268
+ sm: '24rem',
269
+ md: '28rem',
270
+ lg: '32rem',
271
+ xl: '36rem',
272
+ '2xl': '42rem',
273
+ '3xl': '48rem',
274
+ '4xl': '56rem',
275
+ '5xl': '64rem',
276
+ '6xl': '72rem',
277
+ '7xl': '80rem',
278
+ full: '100%',
279
+ screen: '100vh',
280
+ svh: '100svh',
281
+ lvh: '100lvh',
282
+ dvh: '100dvh',
283
+ min: 'min-content',
284
+ max: 'max-content',
285
+ fit: 'fit-content',
286
+ },
287
+ maxWidth: {
288
+ ...spacing,
289
+ none: 'none',
290
+ '1/2': '50%',
291
+ '1/3': '33.333333%',
292
+ '2/3': '66.666667%',
293
+ '1/4': '25%',
294
+ '2/4': '50%',
295
+ '3/4': '75%',
296
+ '1/5': '20%',
297
+ '2/5': '40%',
298
+ '3/5': '60%',
299
+ '4/5': '80%',
300
+ '1/6': '16.666667%',
301
+ '2/6': '33.333333%',
302
+ '3/6': '50%',
303
+ '4/6': '66.666667%',
304
+ '5/6': '83.333333%',
305
+ '1/12': '8.333333%',
306
+ '2/12': '16.666667%',
307
+ '3/12': '25%',
308
+ '4/12': '33.333333%',
309
+ '5/12': '41.666667%',
310
+ '6/12': '50%',
311
+ '7/12': '58.333333%',
312
+ '8/12': '66.666667%',
313
+ '9/12': '75%',
314
+ '10/12': '83.333333%',
315
+ '11/12': '91.666667%',
316
+ full: '100%',
317
+ xs: '20rem',
318
+ sm: '24rem',
319
+ md: '28rem',
320
+ lg: '32rem',
321
+ xl: '36rem',
322
+ '2xl': '42rem',
323
+ '3xl': '48rem',
324
+ '4xl': '56rem',
325
+ '5xl': '64rem',
326
+ '6xl': '72rem',
327
+ '7xl': '80rem',
328
+ min: 'min-content',
329
+ max: 'max-content',
330
+ fit: 'fit-content',
331
+ prose: '65ch',
332
+ },
333
+ minHeight: {
334
+ ...spacing,
335
+ '1/2': '50%',
336
+ '1/3': '33.333333%',
337
+ '2/3': '66.666667%',
338
+ '1/4': '25%',
339
+ '2/4': '50%',
340
+ '3/4': '75%',
341
+ '1/5': '20%',
342
+ '2/5': '40%',
343
+ '3/5': '60%',
344
+ '4/5': '80%',
345
+ full: '100%',
346
+ screen: '100vh',
347
+ svh: '100svh',
348
+ lvh: '100lvh',
349
+ dvh: '100dvh',
350
+ min: 'min-content',
351
+ max: 'max-content',
352
+ fit: 'fit-content',
353
+ },
354
+ minWidth: {
355
+ ...spacing,
356
+ '1/2': '50%',
357
+ '1/3': '33.333333%',
358
+ '2/3': '66.666667%',
359
+ '1/4': '25%',
360
+ '2/4': '50%',
361
+ '3/4': '75%',
362
+ '1/5': '20%',
363
+ '2/5': '40%',
364
+ '3/5': '60%',
365
+ '4/5': '80%',
366
+ '1/6': '16.666667%',
367
+ '2/6': '33.333333%',
368
+ '3/6': '50%',
369
+ '4/6': '66.666667%',
370
+ '5/6': '83.333333%',
371
+ '1/12': '8.333333%',
372
+ '2/12': '16.666667%',
373
+ '3/12': '25%',
374
+ '4/12': '33.333333%',
375
+ '5/12': '41.666667%',
376
+ '6/12': '50%',
377
+ '7/12': '58.333333%',
378
+ '8/12': '66.666667%',
379
+ '9/12': '75%',
380
+ '10/12': '83.333333%',
381
+ '11/12': '91.666667%',
382
+ full: '100%',
383
+ min: 'min-content',
384
+ max: 'max-content',
385
+ fit: 'fit-content',
386
+ },
387
+ objectPosition: {
388
+ bottom: 'bottom',
389
+ center: 'center',
390
+ left: 'left',
391
+ 'left-bottom': 'left bottom',
392
+ 'left-top': 'left top',
393
+ right: 'right',
394
+ 'right-bottom': 'right bottom',
395
+ 'right-top': 'right top',
396
+ top: 'top',
397
+ },
398
+ order: {
399
+ first: '-9999',
400
+ last: '9999',
401
+ none: '0',
402
+ 1: '1',
403
+ 2: '2',
404
+ 3: '3',
405
+ 4: '4',
406
+ 5: '5',
407
+ '-1': '-1',
408
+ '-2': '-2',
409
+ '-3': '-3',
410
+ '-4': '-4',
411
+ '-5': '-5',
412
+ },
413
+ padding: {
414
+ ...spacing,
415
+ },
416
+ screens: {
417
+ sm: '480px', // => @media (min-width: 480px) { ... }
418
+ md: '768px', // => @media (min-width: 768px) { ... }
419
+ lg: '1024px', // => @media (min-width: 1024px) { ... }
420
+ xl: '1200px', // => @media (min-width: 1200px) { ... }
421
+ '2xl': '1600px', // => @media (min-width: 1600px) { ... }
422
+ },
423
+ spacing: spacing,
424
+ width: {
425
+ auto: 'auto',
426
+ ...spacing,
427
+ '1/2': '50%',
428
+ '1/3': '33.333333%',
429
+ '2/3': '66.666667%',
430
+ '1/4': '25%',
431
+ '2/4': '50%',
432
+ '3/4': '75%',
433
+ '1/5': '20%',
434
+ '2/5': '40%',
435
+ '3/5': '60%',
436
+ '4/5': '80%',
437
+ '1/6': '16.666667%',
438
+ '2/6': '33.333333%',
439
+ '3/6': '50%',
440
+ '4/6': '66.666667%',
441
+ '5/6': '83.333333%',
442
+ '1/12': '8.333333%',
443
+ '2/12': '16.666667%',
444
+ '3/12': '25%',
445
+ '4/12': '33.333333%',
446
+ '5/12': '41.666667%',
447
+ '6/12': '50%',
448
+ '7/12': '58.333333%',
449
+ '8/12': '66.666667%',
450
+ '9/12': '75%',
451
+ '10/12': '83.333333%',
452
+ '11/12': '91.666667%',
453
+ full: '100%',
454
+ screen: '100vw',
455
+ svw: '100svw',
456
+ lvw: '100lvw',
457
+ dvw: '100dvw',
458
+ min: 'min-content',
459
+ max: 'max-content',
460
+ fit: 'fit-content',
461
+ },
462
+ },
463
+ };
464
+
465
+ // These will be used to generate options for Gutenberg typography select
466
+ // MUST BE defined in theme webentor-config.ts as its project specific
467
+ export const customTypographyKeys = [];
468
+
469
+ export const buildSafelist = (config: WebentorConfig) => {
470
+ const breakpointsPrefixes = Object.keys(config.theme.screens).map((key) => {
471
+ return `${key}:`;
472
+ });
473
+ breakpointsPrefixes.unshift('');
474
+
475
+ return [
476
+ 'bg-white',
477
+ 'bg-black',
478
+
479
+ // Custom typography classes
480
+ ...customTypographyKeys.flatMap((item) => {
481
+ return [`${item.key}`];
482
+ }),
483
+
484
+ // WP classes
485
+ ...Object.keys(config.theme.colors).flatMap((color) => {
486
+ if (typeof config.theme.colors[color] === 'string') {
487
+ return [`has-${color}-color`, `has-${color}-background-color`];
488
+ } else {
489
+ return Object.keys(config.theme.colors[color]).flatMap((subColor) => {
490
+ return [
491
+ `has-${color}-${subColor}-color`,
492
+ `has-${color}-${subColor}-background-color`,
493
+ ];
494
+ });
495
+ }
496
+ }),
497
+ ...Object.keys(config.theme.fontSize).flatMap((size) => {
498
+ return [`has-${size}-font-size`];
499
+ }),
500
+ ...Object.keys(config.theme.fontFamily).flatMap((family) => {
501
+ return [`has-${family}-font-family`];
502
+ }),
503
+
504
+ /**
505
+ * IMPORTANT: We are adding responsive settings for Gutenberg which would dynamically generate TW classes.
506
+ * That's why we need to add all of them to safelist.
507
+ */
508
+
509
+ // Padding
510
+ ...Object.keys(config.theme.padding).flatMap((i) => {
511
+ return breakpointsPrefixes.flatMap((bp) => [
512
+ `${bp}pt-${i}`,
513
+ `${bp}pr-${i}`,
514
+ `${bp}pb-${i}`,
515
+ `${bp}pl-${i}`,
516
+ ]);
517
+ }),
518
+
519
+ // Margin
520
+ ...Object.keys(config.theme.margin).flatMap((i) => {
521
+ return breakpointsPrefixes.flatMap((bp) => [
522
+ `${bp}mt-${i}`,
523
+ `${bp}mr-${i}`,
524
+ `${bp}mb-${i}`,
525
+ `${bp}ml-${i}`,
526
+ ]);
527
+ }),
528
+
529
+ // Object fit
530
+ ...[
531
+ 'object-contain',
532
+ 'object-cover',
533
+ 'object-fill',
534
+ 'object-none',
535
+ 'object-scale-down',
536
+ ].flatMap((i) => {
537
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}${i}`]);
538
+ }),
539
+
540
+ // Object position
541
+ ...Object.keys(config.theme.objectPosition).flatMap((i) => {
542
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}object-${i}`]);
543
+ }),
544
+
545
+ // Display
546
+ ...['block', 'hidden', 'flex', 'grid', 'inline-block', 'inline'].flatMap(
547
+ (i) => {
548
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}${i}`]);
549
+ },
550
+ ),
551
+
552
+ // Height
553
+ ...Object.keys(config.theme.height).flatMap((i) => {
554
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}h-${i}`]);
555
+ }),
556
+
557
+ // Min height
558
+ ...Object.keys(config.theme.minHeight).flatMap((i) => {
559
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}min-h-${i}`]);
560
+ }),
561
+
562
+ // Max height
563
+ ...Object.keys(config.theme.maxHeight).flatMap((i) => {
564
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}max-h-${i}`]);
565
+ }),
566
+
567
+ // Width
568
+ ...Object.keys(config.theme.width).flatMap((i) => {
569
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}w-${i}`]);
570
+ }),
571
+
572
+ // Min width
573
+ ...Object.keys(config.theme.minWidth).flatMap((i) => {
574
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}min-w-${i}`]);
575
+ }),
576
+
577
+ // Max width
578
+ ...Object.keys(config.theme.maxWidth).flatMap((i) => {
579
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}max-w-${i}`]);
580
+ }),
581
+
582
+ // Flex flow
583
+ ...[
584
+ 'flex-row',
585
+ 'flex-row-reverse',
586
+ 'flex-col',
587
+ 'flex-col-reverse',
588
+ 'flex-wrap',
589
+ 'flex-wrap-reverse',
590
+ 'flex-nowrap',
591
+ ].flatMap((i) => {
592
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}${i}`]);
593
+ }),
594
+
595
+ // Justify content
596
+ ...[
597
+ 'justify-normal',
598
+ 'justify-start',
599
+ 'justify-end',
600
+ 'justify-center',
601
+ 'justify-between',
602
+ 'justify-around',
603
+ 'justify-evenly',
604
+ 'justify-stretch',
605
+ ].flatMap((i) => {
606
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}${i}`]);
607
+ }),
608
+
609
+ // Align items
610
+ ...[
611
+ 'items-start',
612
+ 'items-end',
613
+ 'items-center',
614
+ 'items-baseline',
615
+ 'items-stretch',
616
+ ].flatMap((i) => {
617
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}${i}`]);
618
+ }),
619
+
620
+ // Align content
621
+ ...[
622
+ 'content-normal',
623
+ 'content-start',
624
+ 'content-end',
625
+ 'content-center',
626
+ 'content-between',
627
+ 'content-around',
628
+ 'content-evenly',
629
+ 'content-baseline',
630
+ 'content-stretch',
631
+ ].flatMap((i) => {
632
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}${i}`]);
633
+ }),
634
+
635
+ // Flex grow/shrink
636
+ ...['grow', 'grow-0', 'shrink', 'shrink-0'].flatMap((i) => {
637
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}${i}`]);
638
+ }),
639
+
640
+ // Flex basis
641
+ ...Object.keys(config.theme.flexBasis).flatMap((i) => {
642
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}basis-${i}`]);
643
+ }),
644
+
645
+ // Gap
646
+ ...Object.keys(config.theme.gap).flatMap((i) => {
647
+ return breakpointsPrefixes.flatMap((bp) => [
648
+ `${bp}gap-${i}`,
649
+ `${bp}gap-x-${i}`,
650
+ `${bp}gap-y-${i}`,
651
+ ]);
652
+ }),
653
+
654
+ // Grid
655
+ ...Object.keys(config.theme.gridTemplateColumns).flatMap((i) => {
656
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}grid-cols-${i}`]);
657
+ }),
658
+ ...Object.keys(config.theme.gridTemplateRows).flatMap((i) => {
659
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}grid-rows-${i}`]);
660
+ }),
661
+ ...Object.keys(config.theme.gridColumn).flatMap((i) => {
662
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}col-${i}`]);
663
+ }),
664
+ ...Object.keys(config.theme.gridRow).flatMap((i) => {
665
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}row-${i}`]);
666
+ }),
667
+
668
+ // Borders
669
+ ...['t', 'r', 'b', 'l'].flatMap((side) => {
670
+ return [
671
+ ...Object.keys(config.theme.colors).flatMap((i) => {
672
+ return breakpointsPrefixes.flatMap((bp) => [
673
+ `${bp}border-${side}-${i}`,
674
+ ]);
675
+ }),
676
+ ...Object.keys(config.theme.borderWidth).flatMap((i) => {
677
+ return breakpointsPrefixes.flatMap((bp) => [
678
+ `${bp}border-${side}-${i}`,
679
+ ]);
680
+ }),
681
+ ...Object.keys(config.theme.borderStyle).flatMap((i) => {
682
+ return breakpointsPrefixes.flatMap((bp) => [
683
+ `${bp}border-${side}-${i}`,
684
+ ]);
685
+ }),
686
+ ];
687
+ }),
688
+
689
+ // Border radius
690
+ ...['tr', 'tl', 'br', 'bl'].flatMap((corner) => {
691
+ return [
692
+ ...Object.keys(config.theme.borderRadius).flatMap((i) => {
693
+ return breakpointsPrefixes.flatMap((bp) => [
694
+ `${bp}rounded-${corner}-${i}`,
695
+ ]);
696
+ }),
697
+ ];
698
+ }),
699
+
700
+ // Opacity for hidden block
701
+ ...breakpointsPrefixes.flatMap((bp) => [`${bp}opacity-30`]),
702
+
703
+ // Orders
704
+ ...Object.keys(config.theme.order).flatMap((i) => {
705
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}order-${i}`]);
706
+ }),
707
+
708
+ // Aspect ratio
709
+ ...Object.keys(config.theme.aspectRatio).flatMap((i) => {
710
+ return breakpointsPrefixes.flatMap((bp) => [`${bp}aspect-${i}`]);
711
+ }),
712
+ ];
713
+ };
714
+
715
+ // Build safelist
716
+ config.safelist = ['bg-white', 'bg-black', ...buildSafelist(config)];
717
+
718
+ export default config;