tailwindcss 0.0.0-insiders.ddec022 → 0.0.0-insiders.de00a62

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 (81) hide show
  1. package/lib/cli/build/plugin.js +6 -6
  2. package/lib/cli/build/watching.js +1 -1
  3. package/lib/corePluginList.js +5 -1
  4. package/lib/corePlugins.js +170 -13
  5. package/lib/css/preflight.css +24 -8
  6. package/lib/lib/content.js +36 -3
  7. package/lib/lib/defaultExtractor.js +33 -25
  8. package/lib/lib/evaluateTailwindFunctions.js +5 -3
  9. package/lib/lib/expandApplyAtRules.js +6 -0
  10. package/lib/lib/expandTailwindAtRules.js +23 -6
  11. package/lib/lib/generateRules.js +47 -25
  12. package/lib/lib/load-config.js +14 -3
  13. package/lib/lib/offsets.js +51 -2
  14. package/lib/lib/resolveDefaultsAtRules.js +3 -1
  15. package/lib/lib/setupContextUtils.js +76 -37
  16. package/lib/lib/setupTrackingContext.js +2 -1
  17. package/lib/oxide/cli/build/plugin.js +6 -6
  18. package/lib/plugin.js +3 -3
  19. package/lib/processTailwindFeatures.js +2 -2
  20. package/lib/util/cloneNodes.js +33 -13
  21. package/lib/util/color.js +1 -1
  22. package/lib/util/dataTypes.js +135 -16
  23. package/lib/util/formatVariantSelector.js +10 -3
  24. package/lib/util/isPlainObject.js +1 -1
  25. package/lib/util/pluginUtils.js +13 -0
  26. package/lib/util/prefixSelector.js +1 -1
  27. package/lib/util/pseudoElements.js +21 -34
  28. package/lib/value-parser/LICENSE +22 -0
  29. package/lib/value-parser/README.md +3 -0
  30. package/lib/value-parser/index.d.js +2 -0
  31. package/lib/value-parser/index.js +22 -0
  32. package/lib/value-parser/parse.js +259 -0
  33. package/lib/value-parser/stringify.js +38 -0
  34. package/lib/value-parser/unit.js +86 -0
  35. package/lib/value-parser/walk.js +16 -0
  36. package/nesting/index.d.ts +4 -0
  37. package/package.json +5 -6
  38. package/peers/index.js +701 -617
  39. package/resolveConfig.d.ts +22 -3
  40. package/scripts/generate-types.js +1 -2
  41. package/src/cli/build/plugin.js +6 -6
  42. package/src/cli/build/watching.js +1 -1
  43. package/src/corePluginList.js +1 -1
  44. package/src/corePlugins.js +149 -12
  45. package/src/css/preflight.css +24 -8
  46. package/src/featureFlags.js +1 -5
  47. package/src/lib/content.js +42 -1
  48. package/src/lib/defaultExtractor.js +30 -17
  49. package/src/lib/evaluateTailwindFunctions.js +4 -1
  50. package/src/lib/expandApplyAtRules.js +7 -0
  51. package/src/lib/expandTailwindAtRules.js +23 -6
  52. package/src/lib/generateRules.js +50 -26
  53. package/src/lib/load-config.ts +8 -0
  54. package/src/lib/offsets.js +61 -2
  55. package/src/lib/resolveDefaultsAtRules.js +5 -1
  56. package/src/lib/setupContextUtils.js +77 -38
  57. package/src/lib/setupTrackingContext.js +1 -3
  58. package/src/oxide/cli/build/plugin.ts +6 -6
  59. package/src/plugin.js +3 -3
  60. package/src/processTailwindFeatures.js +3 -2
  61. package/src/util/cloneNodes.js +35 -14
  62. package/src/util/color.js +1 -1
  63. package/src/util/dataTypes.js +143 -18
  64. package/src/util/formatVariantSelector.js +11 -3
  65. package/src/util/isPlainObject.js +1 -1
  66. package/src/util/pluginUtils.js +16 -0
  67. package/src/util/prefixSelector.js +1 -0
  68. package/src/util/pseudoElements.js +18 -17
  69. package/src/value-parser/LICENSE +22 -0
  70. package/src/value-parser/README.md +3 -0
  71. package/src/value-parser/index.d.ts +177 -0
  72. package/src/value-parser/index.js +28 -0
  73. package/src/value-parser/parse.js +303 -0
  74. package/src/value-parser/stringify.js +41 -0
  75. package/src/value-parser/unit.js +118 -0
  76. package/src/value-parser/walk.js +18 -0
  77. package/stubs/config.full.js +86 -14
  78. package/types/config.d.ts +17 -9
  79. package/types/generated/corePluginList.d.ts +1 -1
  80. package/types/generated/default-theme.d.ts +35 -9
  81. package/types/index.d.ts +7 -3
@@ -0,0 +1,303 @@
1
+ var openParentheses = '('.charCodeAt(0)
2
+ var closeParentheses = ')'.charCodeAt(0)
3
+ var singleQuote = "'".charCodeAt(0)
4
+ var doubleQuote = '"'.charCodeAt(0)
5
+ var backslash = '\\'.charCodeAt(0)
6
+ var slash = '/'.charCodeAt(0)
7
+ var comma = ','.charCodeAt(0)
8
+ var colon = ':'.charCodeAt(0)
9
+ var star = '*'.charCodeAt(0)
10
+ var uLower = 'u'.charCodeAt(0)
11
+ var uUpper = 'U'.charCodeAt(0)
12
+ var plus = '+'.charCodeAt(0)
13
+ var isUnicodeRange = /^[a-f0-9?-]+$/i
14
+
15
+ module.exports = function (input) {
16
+ var tokens = []
17
+ var value = input
18
+
19
+ var next, quote, prev, token, escape, escapePos, whitespacePos, parenthesesOpenPos
20
+ var pos = 0
21
+ var code = value.charCodeAt(pos)
22
+ var max = value.length
23
+ var stack = [{ nodes: tokens }]
24
+ var balanced = 0
25
+ var parent
26
+
27
+ var name = ''
28
+ var before = ''
29
+ var after = ''
30
+
31
+ while (pos < max) {
32
+ // Whitespaces
33
+ if (code <= 32) {
34
+ next = pos
35
+ do {
36
+ next += 1
37
+ code = value.charCodeAt(next)
38
+ } while (code <= 32)
39
+ token = value.slice(pos, next)
40
+
41
+ prev = tokens[tokens.length - 1]
42
+ if (code === closeParentheses && balanced) {
43
+ after = token
44
+ } else if (prev && prev.type === 'div') {
45
+ prev.after = token
46
+ prev.sourceEndIndex += token.length
47
+ } else if (
48
+ code === comma ||
49
+ code === colon ||
50
+ (code === slash &&
51
+ value.charCodeAt(next + 1) !== star &&
52
+ (!parent || (parent && parent.type === 'function' && false)))
53
+ ) {
54
+ before = token
55
+ } else {
56
+ tokens.push({
57
+ type: 'space',
58
+ sourceIndex: pos,
59
+ sourceEndIndex: next,
60
+ value: token,
61
+ })
62
+ }
63
+
64
+ pos = next
65
+
66
+ // Quotes
67
+ } else if (code === singleQuote || code === doubleQuote) {
68
+ next = pos
69
+ quote = code === singleQuote ? "'" : '"'
70
+ token = {
71
+ type: 'string',
72
+ sourceIndex: pos,
73
+ quote: quote,
74
+ }
75
+ do {
76
+ escape = false
77
+ next = value.indexOf(quote, next + 1)
78
+ if (~next) {
79
+ escapePos = next
80
+ while (value.charCodeAt(escapePos - 1) === backslash) {
81
+ escapePos -= 1
82
+ escape = !escape
83
+ }
84
+ } else {
85
+ value += quote
86
+ next = value.length - 1
87
+ token.unclosed = true
88
+ }
89
+ } while (escape)
90
+ token.value = value.slice(pos + 1, next)
91
+ token.sourceEndIndex = token.unclosed ? next : next + 1
92
+ tokens.push(token)
93
+ pos = next + 1
94
+ code = value.charCodeAt(pos)
95
+
96
+ // Comments
97
+ } else if (code === slash && value.charCodeAt(pos + 1) === star) {
98
+ next = value.indexOf('*/', pos)
99
+
100
+ token = {
101
+ type: 'comment',
102
+ sourceIndex: pos,
103
+ sourceEndIndex: next + 2,
104
+ }
105
+
106
+ if (next === -1) {
107
+ token.unclosed = true
108
+ next = value.length
109
+ token.sourceEndIndex = next
110
+ }
111
+
112
+ token.value = value.slice(pos + 2, next)
113
+ tokens.push(token)
114
+
115
+ pos = next + 2
116
+ code = value.charCodeAt(pos)
117
+
118
+ // Operation within calc
119
+ } else if ((code === slash || code === star) && parent && parent.type === 'function' && true) {
120
+ token = value[pos]
121
+ tokens.push({
122
+ type: 'word',
123
+ sourceIndex: pos - before.length,
124
+ sourceEndIndex: pos + token.length,
125
+ value: token,
126
+ })
127
+ pos += 1
128
+ code = value.charCodeAt(pos)
129
+
130
+ // Dividers
131
+ } else if (code === slash || code === comma || code === colon) {
132
+ token = value[pos]
133
+
134
+ tokens.push({
135
+ type: 'div',
136
+ sourceIndex: pos - before.length,
137
+ sourceEndIndex: pos + token.length,
138
+ value: token,
139
+ before: before,
140
+ after: '',
141
+ })
142
+ before = ''
143
+
144
+ pos += 1
145
+ code = value.charCodeAt(pos)
146
+
147
+ // Open parentheses
148
+ } else if (openParentheses === code) {
149
+ // Whitespaces after open parentheses
150
+ next = pos
151
+ do {
152
+ next += 1
153
+ code = value.charCodeAt(next)
154
+ } while (code <= 32)
155
+ parenthesesOpenPos = pos
156
+ token = {
157
+ type: 'function',
158
+ sourceIndex: pos - name.length,
159
+ value: name,
160
+ before: value.slice(parenthesesOpenPos + 1, next),
161
+ }
162
+ pos = next
163
+
164
+ if (name === 'url' && code !== singleQuote && code !== doubleQuote) {
165
+ next -= 1
166
+ do {
167
+ escape = false
168
+ next = value.indexOf(')', next + 1)
169
+ if (~next) {
170
+ escapePos = next
171
+ while (value.charCodeAt(escapePos - 1) === backslash) {
172
+ escapePos -= 1
173
+ escape = !escape
174
+ }
175
+ } else {
176
+ value += ')'
177
+ next = value.length - 1
178
+ token.unclosed = true
179
+ }
180
+ } while (escape)
181
+ // Whitespaces before closed
182
+ whitespacePos = next
183
+ do {
184
+ whitespacePos -= 1
185
+ code = value.charCodeAt(whitespacePos)
186
+ } while (code <= 32)
187
+ if (parenthesesOpenPos < whitespacePos) {
188
+ if (pos !== whitespacePos + 1) {
189
+ token.nodes = [
190
+ {
191
+ type: 'word',
192
+ sourceIndex: pos,
193
+ sourceEndIndex: whitespacePos + 1,
194
+ value: value.slice(pos, whitespacePos + 1),
195
+ },
196
+ ]
197
+ } else {
198
+ token.nodes = []
199
+ }
200
+ if (token.unclosed && whitespacePos + 1 !== next) {
201
+ token.after = ''
202
+ token.nodes.push({
203
+ type: 'space',
204
+ sourceIndex: whitespacePos + 1,
205
+ sourceEndIndex: next,
206
+ value: value.slice(whitespacePos + 1, next),
207
+ })
208
+ } else {
209
+ token.after = value.slice(whitespacePos + 1, next)
210
+ token.sourceEndIndex = next
211
+ }
212
+ } else {
213
+ token.after = ''
214
+ token.nodes = []
215
+ }
216
+ pos = next + 1
217
+ token.sourceEndIndex = token.unclosed ? next : pos
218
+ code = value.charCodeAt(pos)
219
+ tokens.push(token)
220
+ } else {
221
+ balanced += 1
222
+ token.after = ''
223
+ token.sourceEndIndex = pos + 1
224
+ tokens.push(token)
225
+ stack.push(token)
226
+ tokens = token.nodes = []
227
+ parent = token
228
+ }
229
+ name = ''
230
+
231
+ // Close parentheses
232
+ } else if (closeParentheses === code && balanced) {
233
+ pos += 1
234
+ code = value.charCodeAt(pos)
235
+
236
+ parent.after = after
237
+ parent.sourceEndIndex += after.length
238
+ after = ''
239
+ balanced -= 1
240
+ stack[stack.length - 1].sourceEndIndex = pos
241
+ stack.pop()
242
+ parent = stack[balanced]
243
+ tokens = parent.nodes
244
+
245
+ // Words
246
+ } else {
247
+ next = pos
248
+ do {
249
+ if (code === backslash) {
250
+ next += 1
251
+ }
252
+ next += 1
253
+ code = value.charCodeAt(next)
254
+ } while (
255
+ next < max &&
256
+ !(
257
+ code <= 32 ||
258
+ code === singleQuote ||
259
+ code === doubleQuote ||
260
+ code === comma ||
261
+ code === colon ||
262
+ code === slash ||
263
+ code === openParentheses ||
264
+ (code === star && parent && parent.type === 'function' && true) ||
265
+ (code === slash && parent.type === 'function' && true) ||
266
+ (code === closeParentheses && balanced)
267
+ )
268
+ )
269
+ token = value.slice(pos, next)
270
+
271
+ if (openParentheses === code) {
272
+ name = token
273
+ } else if (
274
+ (uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&
275
+ plus === token.charCodeAt(1) &&
276
+ isUnicodeRange.test(token.slice(2))
277
+ ) {
278
+ tokens.push({
279
+ type: 'unicode-range',
280
+ sourceIndex: pos,
281
+ sourceEndIndex: next,
282
+ value: token,
283
+ })
284
+ } else {
285
+ tokens.push({
286
+ type: 'word',
287
+ sourceIndex: pos,
288
+ sourceEndIndex: next,
289
+ value: token,
290
+ })
291
+ }
292
+
293
+ pos = next
294
+ }
295
+ }
296
+
297
+ for (pos = stack.length - 1; pos; pos -= 1) {
298
+ stack[pos].unclosed = true
299
+ stack[pos].sourceEndIndex = value.length
300
+ }
301
+
302
+ return stack[0].nodes
303
+ }
@@ -0,0 +1,41 @@
1
+ function stringifyNode(node, custom) {
2
+ var type = node.type
3
+ var value = node.value
4
+ var buf
5
+ var customResult
6
+
7
+ if (custom && (customResult = custom(node)) !== undefined) {
8
+ return customResult
9
+ } else if (type === 'word' || type === 'space') {
10
+ return value
11
+ } else if (type === 'string') {
12
+ buf = node.quote || ''
13
+ return buf + value + (node.unclosed ? '' : buf)
14
+ } else if (type === 'comment') {
15
+ return '/*' + value + (node.unclosed ? '' : '*/')
16
+ } else if (type === 'div') {
17
+ return (node.before || '') + value + (node.after || '')
18
+ } else if (Array.isArray(node.nodes)) {
19
+ buf = stringify(node.nodes, custom)
20
+ if (type !== 'function') {
21
+ return buf
22
+ }
23
+ return value + '(' + (node.before || '') + buf + (node.after || '') + (node.unclosed ? '' : ')')
24
+ }
25
+ return value
26
+ }
27
+
28
+ function stringify(nodes, custom) {
29
+ var result, i
30
+
31
+ if (Array.isArray(nodes)) {
32
+ result = ''
33
+ for (i = nodes.length - 1; ~i; i -= 1) {
34
+ result = stringifyNode(nodes[i], custom) + result
35
+ }
36
+ return result
37
+ }
38
+ return stringifyNode(nodes, custom)
39
+ }
40
+
41
+ module.exports = stringify
@@ -0,0 +1,118 @@
1
+ var minus = '-'.charCodeAt(0)
2
+ var plus = '+'.charCodeAt(0)
3
+ var dot = '.'.charCodeAt(0)
4
+ var exp = 'e'.charCodeAt(0)
5
+ var EXP = 'E'.charCodeAt(0)
6
+
7
+ // Check if three code points would start a number
8
+ // https://www.w3.org/TR/css-syntax-3/#starts-with-a-number
9
+ function likeNumber(value) {
10
+ var code = value.charCodeAt(0)
11
+ var nextCode
12
+
13
+ if (code === plus || code === minus) {
14
+ nextCode = value.charCodeAt(1)
15
+
16
+ if (nextCode >= 48 && nextCode <= 57) {
17
+ return true
18
+ }
19
+
20
+ var nextNextCode = value.charCodeAt(2)
21
+
22
+ if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {
23
+ return true
24
+ }
25
+
26
+ return false
27
+ }
28
+
29
+ if (code === dot) {
30
+ nextCode = value.charCodeAt(1)
31
+
32
+ if (nextCode >= 48 && nextCode <= 57) {
33
+ return true
34
+ }
35
+
36
+ return false
37
+ }
38
+
39
+ if (code >= 48 && code <= 57) {
40
+ return true
41
+ }
42
+
43
+ return false
44
+ }
45
+
46
+ // Consume a number
47
+ // https://www.w3.org/TR/css-syntax-3/#consume-number
48
+ module.exports = function (value) {
49
+ var pos = 0
50
+ var length = value.length
51
+ var code
52
+ var nextCode
53
+ var nextNextCode
54
+
55
+ if (length === 0 || !likeNumber(value)) {
56
+ return false
57
+ }
58
+
59
+ code = value.charCodeAt(pos)
60
+
61
+ if (code === plus || code === minus) {
62
+ pos++
63
+ }
64
+
65
+ while (pos < length) {
66
+ code = value.charCodeAt(pos)
67
+
68
+ if (code < 48 || code > 57) {
69
+ break
70
+ }
71
+
72
+ pos += 1
73
+ }
74
+
75
+ code = value.charCodeAt(pos)
76
+ nextCode = value.charCodeAt(pos + 1)
77
+
78
+ if (code === dot && nextCode >= 48 && nextCode <= 57) {
79
+ pos += 2
80
+
81
+ while (pos < length) {
82
+ code = value.charCodeAt(pos)
83
+
84
+ if (code < 48 || code > 57) {
85
+ break
86
+ }
87
+
88
+ pos += 1
89
+ }
90
+ }
91
+
92
+ code = value.charCodeAt(pos)
93
+ nextCode = value.charCodeAt(pos + 1)
94
+ nextNextCode = value.charCodeAt(pos + 2)
95
+
96
+ if (
97
+ (code === exp || code === EXP) &&
98
+ ((nextCode >= 48 && nextCode <= 57) ||
99
+ ((nextCode === plus || nextCode === minus) && nextNextCode >= 48 && nextNextCode <= 57))
100
+ ) {
101
+ pos += nextCode === plus || nextCode === minus ? 3 : 2
102
+
103
+ while (pos < length) {
104
+ code = value.charCodeAt(pos)
105
+
106
+ if (code < 48 || code > 57) {
107
+ break
108
+ }
109
+
110
+ pos += 1
111
+ }
112
+ }
113
+
114
+ return {
115
+ number: value.slice(0, pos),
116
+ unit: value.slice(pos),
117
+ }
118
+ }
@@ -0,0 +1,18 @@
1
+ module.exports = function walk(nodes, cb, bubble) {
2
+ var i, max, node, result
3
+
4
+ for (i = 0, max = nodes.length; i < max; i += 1) {
5
+ node = nodes[i]
6
+ if (!bubble) {
7
+ result = cb(node, i, nodes)
8
+ }
9
+
10
+ if (result !== false && node.type === 'function' && Array.isArray(node.nodes)) {
11
+ walk(node.nodes, cb, bubble)
12
+ }
13
+
14
+ if (bubble) {
15
+ cb(node, i, nodes)
16
+ }
17
+ }
18
+ }
@@ -15,6 +15,7 @@ module.exports = {
15
15
  bounce: 'bounce 1s infinite',
16
16
  },
17
17
  aria: {
18
+ busy: 'busy="true"',
18
19
  checked: 'checked="true"',
19
20
  disabled: 'disabled="true"',
20
21
  expanded: 'expanded="true"',
@@ -302,13 +303,6 @@ module.exports = {
302
303
  sans: [
303
304
  'ui-sans-serif',
304
305
  'system-ui',
305
- '-apple-system',
306
- 'BlinkMacSystemFont',
307
- '"Segoe UI"',
308
- 'Roboto',
309
- '"Helvetica Neue"',
310
- 'Arial',
311
- '"Noto Sans"',
312
306
  'sans-serif',
313
307
  '"Apple Color Emoji"',
314
308
  '"Segoe UI Emoji"',
@@ -450,6 +444,12 @@ module.exports = {
450
444
  'span-4': 'span 4 / span 4',
451
445
  'span-5': 'span 5 / span 5',
452
446
  'span-6': 'span 6 / span 6',
447
+ 'span-7': 'span 7 / span 7',
448
+ 'span-8': 'span 8 / span 8',
449
+ 'span-9': 'span 9 / span 9',
450
+ 'span-10': 'span 10 / span 10',
451
+ 'span-11': 'span 11 / span 11',
452
+ 'span-12': 'span 12 / span 12',
453
453
  'span-full': '1 / -1',
454
454
  },
455
455
  gridRowEnd: {
@@ -461,6 +461,12 @@ module.exports = {
461
461
  5: '5',
462
462
  6: '6',
463
463
  7: '7',
464
+ 8: '8',
465
+ 9: '9',
466
+ 10: '10',
467
+ 11: '11',
468
+ 12: '12',
469
+ 13: '13',
464
470
  },
465
471
  gridRowStart: {
466
472
  auto: 'auto',
@@ -471,9 +477,16 @@ module.exports = {
471
477
  5: '5',
472
478
  6: '6',
473
479
  7: '7',
480
+ 8: '8',
481
+ 9: '9',
482
+ 10: '10',
483
+ 11: '11',
484
+ 12: '12',
485
+ 13: '13',
474
486
  },
475
487
  gridTemplateColumns: {
476
488
  none: 'none',
489
+ subgrid: 'subgrid',
477
490
  1: 'repeat(1, minmax(0, 1fr))',
478
491
  2: 'repeat(2, minmax(0, 1fr))',
479
492
  3: 'repeat(3, minmax(0, 1fr))',
@@ -489,12 +502,19 @@ module.exports = {
489
502
  },
490
503
  gridTemplateRows: {
491
504
  none: 'none',
505
+ subgrid: 'subgrid',
492
506
  1: 'repeat(1, minmax(0, 1fr))',
493
507
  2: 'repeat(2, minmax(0, 1fr))',
494
508
  3: 'repeat(3, minmax(0, 1fr))',
495
509
  4: 'repeat(4, minmax(0, 1fr))',
496
510
  5: 'repeat(5, minmax(0, 1fr))',
497
511
  6: 'repeat(6, minmax(0, 1fr))',
512
+ 7: 'repeat(7, minmax(0, 1fr))',
513
+ 8: 'repeat(8, minmax(0, 1fr))',
514
+ 9: 'repeat(9, minmax(0, 1fr))',
515
+ 10: 'repeat(10, minmax(0, 1fr))',
516
+ 11: 'repeat(11, minmax(0, 1fr))',
517
+ 12: 'repeat(12, minmax(0, 1fr))',
498
518
  },
499
519
  height: ({ theme }) => ({
500
520
  auto: 'auto',
@@ -516,6 +536,9 @@ module.exports = {
516
536
  '5/6': '83.333333%',
517
537
  full: '100%',
518
538
  screen: '100vh',
539
+ svh: '100svh',
540
+ lvh: '100lvh',
541
+ dvh: '100dvh',
519
542
  min: 'min-content',
520
543
  max: 'max-content',
521
544
  fit: 'fit-content',
@@ -620,13 +643,16 @@ module.exports = {
620
643
  none: 'none',
621
644
  full: '100%',
622
645
  screen: '100vh',
646
+ svh: '100svh',
647
+ lvh: '100lvh',
648
+ dvh: '100dvh',
623
649
  min: 'min-content',
624
650
  max: 'max-content',
625
651
  fit: 'fit-content',
626
652
  }),
627
653
  maxWidth: ({ theme, breakpoints }) => ({
654
+ ...theme('spacing'),
628
655
  none: 'none',
629
- 0: '0rem',
630
656
  xs: '20rem',
631
657
  sm: '24rem',
632
658
  md: '28rem',
@@ -645,21 +671,24 @@ module.exports = {
645
671
  prose: '65ch',
646
672
  ...breakpoints(theme('screens')),
647
673
  }),
648
- minHeight: {
649
- 0: '0px',
674
+ minHeight: ({ theme }) => ({
675
+ ...theme('spacing'),
650
676
  full: '100%',
651
677
  screen: '100vh',
678
+ svh: '100svh',
679
+ lvh: '100lvh',
680
+ dvh: '100dvh',
652
681
  min: 'min-content',
653
682
  max: 'max-content',
654
683
  fit: 'fit-content',
655
- },
656
- minWidth: {
657
- 0: '0px',
684
+ }),
685
+ minWidth: ({ theme }) => ({
686
+ ...theme('spacing'),
658
687
  full: '100%',
659
688
  min: 'min-content',
660
689
  max: 'max-content',
661
690
  fit: 'fit-content',
662
- },
691
+ }),
663
692
  objectPosition: {
664
693
  bottom: 'bottom',
665
694
  center: 'center',
@@ -675,15 +704,21 @@ module.exports = {
675
704
  0: '0',
676
705
  5: '0.05',
677
706
  10: '0.1',
707
+ 15: '0.15',
678
708
  20: '0.2',
679
709
  25: '0.25',
680
710
  30: '0.3',
711
+ 35: '0.35',
681
712
  40: '0.4',
713
+ 45: '0.45',
682
714
  50: '0.5',
715
+ 55: '0.55',
683
716
  60: '0.6',
717
+ 65: '0.65',
684
718
  70: '0.7',
685
719
  75: '0.75',
686
720
  80: '0.8',
721
+ 85: '0.85',
687
722
  90: '0.9',
688
723
  95: '0.95',
689
724
  100: '1',
@@ -935,6 +970,40 @@ module.exports = {
935
970
  '3/4': '75%',
936
971
  full: '100%',
937
972
  }),
973
+ size: ({ theme }) => ({
974
+ auto: 'auto',
975
+ ...theme('spacing'),
976
+ '1/2': '50%',
977
+ '1/3': '33.333333%',
978
+ '2/3': '66.666667%',
979
+ '1/4': '25%',
980
+ '2/4': '50%',
981
+ '3/4': '75%',
982
+ '1/5': '20%',
983
+ '2/5': '40%',
984
+ '3/5': '60%',
985
+ '4/5': '80%',
986
+ '1/6': '16.666667%',
987
+ '2/6': '33.333333%',
988
+ '3/6': '50%',
989
+ '4/6': '66.666667%',
990
+ '5/6': '83.333333%',
991
+ '1/12': '8.333333%',
992
+ '2/12': '16.666667%',
993
+ '3/12': '25%',
994
+ '4/12': '33.333333%',
995
+ '5/12': '41.666667%',
996
+ '6/12': '50%',
997
+ '7/12': '58.333333%',
998
+ '8/12': '66.666667%',
999
+ '9/12': '75%',
1000
+ '10/12': '83.333333%',
1001
+ '11/12': '91.666667%',
1002
+ full: '100%',
1003
+ min: 'min-content',
1004
+ max: 'max-content',
1005
+ fit: 'fit-content',
1006
+ }),
938
1007
  width: ({ theme }) => ({
939
1008
  auto: 'auto',
940
1009
  ...theme('spacing'),
@@ -966,6 +1035,9 @@ module.exports = {
966
1035
  '11/12': '91.666667%',
967
1036
  full: '100%',
968
1037
  screen: '100vw',
1038
+ svw: '100svw',
1039
+ lvw: '100lvw',
1040
+ dvw: '100dvw',
969
1041
  min: 'min-content',
970
1042
  max: 'max-content',
971
1043
  fit: 'fit-content',