tailwindcss 0.0.0-insiders.fe08e91 → 0.0.0-oxide.c7d416b

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 (183) hide show
  1. package/CHANGELOG.md +379 -3
  2. package/LICENSE +1 -2
  3. package/README.md +12 -8
  4. package/colors.d.ts +3 -0
  5. package/defaultConfig.d.ts +3 -0
  6. package/defaultTheme.d.ts +4 -0
  7. package/lib/cli/build/deps.js +54 -0
  8. package/lib/cli/build/index.js +48 -0
  9. package/lib/cli/build/plugin.js +367 -0
  10. package/lib/cli/build/utils.js +78 -0
  11. package/lib/cli/build/watching.js +178 -0
  12. package/lib/cli/help/index.js +71 -0
  13. package/lib/cli/index.js +239 -0
  14. package/lib/cli/init/index.js +46 -0
  15. package/lib/cli/shared.js +13 -0
  16. package/lib/cli-peer-dependencies.js +20 -7
  17. package/lib/cli.js +4 -740
  18. package/lib/constants.js +27 -20
  19. package/lib/corePluginList.js +6 -3
  20. package/lib/corePlugins.js +2064 -1811
  21. package/lib/css/preflight.css +5 -5
  22. package/lib/featureFlags.js +31 -22
  23. package/lib/index.js +4 -28
  24. package/lib/lib/cacheInvalidation.js +90 -0
  25. package/lib/lib/collapseAdjacentRules.js +27 -9
  26. package/lib/lib/collapseDuplicateDeclarations.js +12 -9
  27. package/lib/lib/content.js +176 -0
  28. package/lib/lib/defaultExtractor.js +225 -31
  29. package/lib/lib/detectNesting.js +13 -10
  30. package/lib/lib/evaluateTailwindFunctions.js +118 -55
  31. package/lib/lib/expandApplyAtRules.js +439 -190
  32. package/lib/lib/expandTailwindAtRules.js +151 -134
  33. package/lib/lib/findAtConfigPath.js +44 -0
  34. package/lib/lib/generateRules.js +454 -187
  35. package/lib/lib/getModuleDependencies.js +11 -8
  36. package/lib/lib/normalizeTailwindDirectives.js +36 -32
  37. package/lib/lib/offsets.js +217 -0
  38. package/lib/lib/partitionApplyAtRules.js +56 -0
  39. package/lib/lib/regex.js +60 -0
  40. package/lib/lib/resolveDefaultsAtRules.js +89 -67
  41. package/lib/lib/setupContextUtils.js +667 -376
  42. package/lib/lib/setupTrackingContext.js +38 -67
  43. package/lib/lib/sharedState.js +27 -14
  44. package/lib/lib/substituteScreenAtRules.js +11 -9
  45. package/lib/plugin.js +48 -0
  46. package/{nesting → lib/postcss-plugins/nesting}/README.md +2 -2
  47. package/lib/postcss-plugins/nesting/index.js +19 -0
  48. package/lib/postcss-plugins/nesting/plugin.js +87 -0
  49. package/lib/processTailwindFeatures.js +35 -25
  50. package/lib/public/colors.js +247 -245
  51. package/lib/public/create-plugin.js +6 -4
  52. package/lib/public/default-config.js +7 -5
  53. package/lib/public/default-theme.js +7 -5
  54. package/lib/public/resolve-config.js +8 -5
  55. package/lib/util/bigSign.js +4 -1
  56. package/lib/util/buildMediaQuery.js +11 -6
  57. package/lib/util/cloneDeep.js +7 -6
  58. package/lib/util/cloneNodes.js +21 -3
  59. package/lib/util/color.js +53 -54
  60. package/lib/util/configurePlugins.js +5 -2
  61. package/lib/util/createPlugin.js +6 -6
  62. package/lib/util/createUtilityPlugin.js +12 -14
  63. package/lib/util/dataTypes.js +119 -110
  64. package/lib/util/defaults.js +4 -1
  65. package/lib/util/escapeClassName.js +7 -4
  66. package/lib/util/escapeCommas.js +5 -2
  67. package/lib/util/flattenColorPalette.js +9 -12
  68. package/lib/util/formatVariantSelector.js +184 -85
  69. package/lib/util/getAllConfigs.js +27 -8
  70. package/lib/util/hashConfig.js +6 -3
  71. package/lib/util/isKeyframeRule.js +5 -2
  72. package/lib/util/isPlainObject.js +5 -2
  73. package/lib/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +23 -15
  74. package/lib/util/log.js +20 -14
  75. package/lib/util/nameClass.js +20 -9
  76. package/lib/util/negateValue.js +23 -8
  77. package/lib/util/normalizeConfig.js +116 -72
  78. package/lib/util/normalizeScreens.js +120 -11
  79. package/lib/util/parseAnimationValue.js +42 -40
  80. package/lib/util/parseBoxShadowValue.js +30 -23
  81. package/lib/util/parseDependency.js +38 -56
  82. package/lib/util/parseGlob.js +34 -0
  83. package/lib/util/parseObjectStyles.js +11 -8
  84. package/lib/util/pluginUtils.js +147 -50
  85. package/lib/util/prefixSelector.js +10 -8
  86. package/lib/util/removeAlphaVariables.js +29 -0
  87. package/lib/util/resolveConfig.js +97 -85
  88. package/lib/util/resolveConfigPath.js +11 -9
  89. package/lib/util/responsive.js +8 -5
  90. package/lib/util/splitAtTopLevelOnly.js +43 -0
  91. package/lib/util/tap.js +4 -1
  92. package/lib/util/toColorValue.js +5 -3
  93. package/lib/util/toPath.js +20 -4
  94. package/lib/util/transformThemeValue.js +37 -29
  95. package/lib/util/validateConfig.js +24 -0
  96. package/lib/util/validateFormalSyntax.js +24 -0
  97. package/lib/util/withAlphaVariable.js +23 -15
  98. package/nesting/index.js +2 -12
  99. package/oxide/README.md +1 -0
  100. package/oxide/package.json +18 -0
  101. package/oxide/packages/tailwindcss/dist/cli.js +2 -0
  102. package/oxide/packages/tailwindcss/dist/postcss-plugin.js +2 -0
  103. package/oxide/packages/tailwindcss/package.json +34 -0
  104. package/package.json +49 -42
  105. package/peers/index.js +11381 -7950
  106. package/plugin.d.ts +11 -0
  107. package/resolveConfig.d.ts +12 -0
  108. package/scripts/generate-types.js +105 -0
  109. package/scripts/release-channel.js +18 -0
  110. package/scripts/release-notes.js +21 -0
  111. package/scripts/type-utils.js +27 -0
  112. package/src/cli/build/deps.js +56 -0
  113. package/src/cli/build/index.js +49 -0
  114. package/src/cli/build/plugin.js +439 -0
  115. package/src/cli/build/utils.js +76 -0
  116. package/src/cli/build/watching.js +227 -0
  117. package/src/cli/help/index.js +70 -0
  118. package/src/cli/index.js +234 -0
  119. package/src/cli/init/index.js +50 -0
  120. package/src/cli/shared.js +6 -0
  121. package/src/cli-peer-dependencies.js +7 -1
  122. package/src/cli.js +4 -810
  123. package/src/corePluginList.js +1 -1
  124. package/src/corePlugins.js +532 -217
  125. package/src/css/preflight.css +5 -5
  126. package/src/featureFlags.js +15 -9
  127. package/src/index.js +4 -27
  128. package/src/lib/cacheInvalidation.js +52 -0
  129. package/src/lib/collapseAdjacentRules.js +21 -2
  130. package/src/lib/content.js +212 -0
  131. package/src/lib/defaultExtractor.js +196 -33
  132. package/src/lib/evaluateTailwindFunctions.js +78 -7
  133. package/src/lib/expandApplyAtRules.js +482 -183
  134. package/src/lib/expandTailwindAtRules.js +106 -85
  135. package/src/lib/findAtConfigPath.js +48 -0
  136. package/src/lib/generateRules.js +418 -129
  137. package/src/lib/normalizeTailwindDirectives.js +1 -0
  138. package/src/lib/offsets.js +270 -0
  139. package/src/lib/partitionApplyAtRules.js +52 -0
  140. package/src/lib/regex.js +74 -0
  141. package/src/lib/resolveDefaultsAtRules.js +51 -30
  142. package/src/lib/setupContextUtils.js +556 -208
  143. package/src/lib/setupTrackingContext.js +11 -48
  144. package/src/lib/sharedState.js +5 -0
  145. package/src/plugin.js +47 -0
  146. package/src/postcss-plugins/nesting/README.md +42 -0
  147. package/src/postcss-plugins/nesting/index.js +13 -0
  148. package/src/postcss-plugins/nesting/plugin.js +80 -0
  149. package/src/processTailwindFeatures.js +8 -0
  150. package/src/util/buildMediaQuery.js +5 -3
  151. package/src/util/cloneNodes.js +19 -2
  152. package/src/util/color.js +25 -21
  153. package/src/util/dataTypes.js +29 -21
  154. package/src/util/formatVariantSelector.js +184 -61
  155. package/src/util/getAllConfigs.js +19 -0
  156. package/src/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +1 -1
  157. package/src/util/log.js +8 -8
  158. package/src/util/nameClass.js +4 -0
  159. package/src/util/negateValue.js +11 -3
  160. package/src/util/normalizeConfig.js +44 -6
  161. package/src/util/normalizeScreens.js +99 -4
  162. package/src/util/parseBoxShadowValue.js +4 -3
  163. package/src/util/parseDependency.js +37 -42
  164. package/src/util/parseGlob.js +24 -0
  165. package/src/util/pluginUtils.js +132 -10
  166. package/src/util/prefixSelector.js +7 -5
  167. package/src/util/removeAlphaVariables.js +24 -0
  168. package/src/util/resolveConfig.js +70 -32
  169. package/src/util/splitAtTopLevelOnly.js +45 -0
  170. package/src/util/toPath.js +1 -1
  171. package/src/util/transformThemeValue.js +13 -3
  172. package/src/util/validateConfig.js +13 -0
  173. package/src/util/validateFormalSyntax.js +34 -0
  174. package/src/util/withAlphaVariable.js +1 -1
  175. package/stubs/defaultConfig.stub.js +23 -20
  176. package/stubs/simpleConfig.stub.js +1 -0
  177. package/types/config.d.ts +362 -0
  178. package/types/generated/.gitkeep +0 -0
  179. package/types/generated/colors.d.ts +276 -0
  180. package/types/generated/corePluginList.d.ts +1 -0
  181. package/types/generated/default-theme.d.ts +342 -0
  182. package/types/index.d.ts +7 -0
  183. package/nesting/plugin.js +0 -41
package/plugin.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import type { Config, PluginCreator } from './types/config'
2
+ type Plugin = {
3
+ withOptions<T>(
4
+ plugin: (options: T) => PluginCreator,
5
+ config?: (options: T) => Partial<Config>
6
+ ): { (options: T): { handler: PluginCreator; config?: Partial<Config> }; __isOptionsFunction: true }
7
+ (plugin: PluginCreator, config?: Partial<Config>): { handler: PluginCreator; config?: Partial<Config> }
8
+ }
9
+
10
+ declare const plugin: Plugin
11
+ export = plugin
@@ -0,0 +1,12 @@
1
+ import type { Config, ResolvableTo } from './types/config'
2
+
3
+ type UnwrapResolvables<T> = {
4
+ [K in keyof T]: T[K] extends ResolvableTo<infer R> ? R : T[K]
5
+ }
6
+
7
+ type ResolvedConfig<T extends Config> = Omit<T, 'theme'> & {
8
+ theme: UnwrapResolvables<T['theme']>
9
+ }
10
+
11
+ declare function resolveConfig<T extends Config>(config: T): ResolvedConfig<T>
12
+ export = resolveConfig
@@ -0,0 +1,105 @@
1
+ import prettier from 'prettier'
2
+ import { corePlugins } from '../src/corePlugins'
3
+ import colors from '../src/public/colors'
4
+ import defaultTheme from '../src/public/default-theme'
5
+ import fs from 'fs'
6
+ import path from 'path'
7
+ import * as types from './type-utils'
8
+
9
+ fs.writeFileSync(
10
+ path.join(process.cwd(), 'types', 'generated', 'corePluginList.d.ts'),
11
+ `export type CorePluginList = ${Object.keys(corePlugins)
12
+ .map((p) => `'${p}'`)
13
+ .join(' | ')}`
14
+ )
15
+
16
+ let colorsWithoutDeprecatedColors = Object.fromEntries(
17
+ Object.entries(Object.getOwnPropertyDescriptors(colors))
18
+ .filter(([_, { value }]) => {
19
+ return typeof value !== 'undefined'
20
+ })
21
+ .map(([name, definition]) => [name, definition.value])
22
+ )
23
+
24
+ let deprecatedColors = Object.entries(Object.getOwnPropertyDescriptors(colors))
25
+ .filter(([_, { value }]) => {
26
+ return typeof value === 'undefined'
27
+ })
28
+ .map(([name, definition]) => {
29
+ let warn = console.warn
30
+ let messages = []
31
+ console.warn = (...args) => messages.push(args.pop())
32
+ definition.get()
33
+ console.warn = warn
34
+ let message = messages.join(' ').trim()
35
+ let newColor = message.match(/renamed to `(.*)`/)[1]
36
+ return `/** @deprecated ${message} */${name}: DefaultColors['${newColor}'],`
37
+ })
38
+ .join('\n')
39
+
40
+ fs.writeFileSync(
41
+ path.join(process.cwd(), 'types', 'generated', 'colors.d.ts'),
42
+ prettier.format(
43
+ `export interface DefaultColors { ${JSON.stringify(colorsWithoutDeprecatedColors).slice(
44
+ 1,
45
+ -1
46
+ )}\n${deprecatedColors}\n}`,
47
+ {
48
+ semi: false,
49
+ singleQuote: true,
50
+ printWidth: 100,
51
+ parser: 'typescript',
52
+ }
53
+ )
54
+ )
55
+
56
+ const defaultThemeTypes = Object.entries(defaultTheme)
57
+ .map(([name, value]) => {
58
+ // Special cases for slightly more accurate types
59
+ if (name === 'keyframes') {
60
+ return [name, `Record<${types.forKeys(value)}, Record<string, CSSDeclarationList>>`]
61
+ }
62
+
63
+ if (name === 'fontSize') {
64
+ return [name, `Record<${types.forKeys(value)}, [string, { lineHeight: string }]>`]
65
+ }
66
+
67
+ // General cases
68
+ if (typeof value === 'string') {
69
+ return [name, `string`]
70
+ }
71
+
72
+ if (typeof value === 'function') {
73
+ return [name, null]
74
+ }
75
+
76
+ if (typeof value === 'object') {
77
+ if (Object.keys(value).length === 0) {
78
+ return [name, null]
79
+ }
80
+
81
+ return [name, types.forValue(value)]
82
+ }
83
+
84
+ return [name, `unknown`]
85
+ })
86
+ .filter(([, type]) => type !== null)
87
+ .map(([name, type]) => `${name}: ${type}`)
88
+ .join('\n')
89
+
90
+ fs.writeFileSync(
91
+ path.join(process.cwd(), 'types', 'generated', 'default-theme.d.ts'),
92
+ prettier.format(
93
+ `
94
+ import { Config } from '../../types'
95
+ type CSSDeclarationList = Record<string, string>
96
+ export type DefaultTheme = Config['theme'] & { ${defaultThemeTypes} }
97
+ `,
98
+ {
99
+ semi: false,
100
+ singleQuote: true,
101
+ printWidth: 100,
102
+ parser: 'typescript',
103
+ }
104
+ )
105
+ )
@@ -0,0 +1,18 @@
1
+ // Given a version, figure out what the release channel is so that we can publish to the correct
2
+ // channel on npm.
3
+ //
4
+ // E.g.:
5
+ //
6
+ // 1.2.3 -> latest (default)
7
+ // 0.0.0-insiders.ffaa88 -> insiders
8
+ // 4.1.0-alpha.4 -> alpha
9
+
10
+ let version =
11
+ process.argv[2] || process.env.npm_package_version || require('../package.json').version
12
+
13
+ let match = /\d+\.\d+\.\d+-(.*)\.\d+/g.exec(version)
14
+ if (match) {
15
+ console.log(match[1])
16
+ } else {
17
+ console.log('latest')
18
+ }
@@ -0,0 +1,21 @@
1
+ // Given a version, figure out what the release notes are so that we can use this to pre-fill the
2
+ // relase notes on a GitHub release for the current version.
3
+
4
+ let path = require('path')
5
+ let fs = require('fs')
6
+
7
+ let version =
8
+ process.argv[2] || process.env.npm_package_version || require('../package.json').version
9
+
10
+ let changelog = fs.readFileSync(path.resolve(__dirname, '..', 'CHANGELOG.md'), 'utf8')
11
+ let match = new RegExp(
12
+ `## \\[${version}\\] - (.*)\\n\\n([\\s\\S]*?)\\n(?:(?:##\\s)|(?:\\[))`,
13
+ 'g'
14
+ ).exec(changelog)
15
+
16
+ if (match) {
17
+ let [, , notes] = match
18
+ console.log(notes.trim())
19
+ } else {
20
+ console.log(`Placeholder release notes for version: v${version}`)
21
+ }
@@ -0,0 +1,27 @@
1
+ export function union(types) {
2
+ return [...new Set(types)].join(' | ')
3
+ }
4
+
5
+ export function unionValues(values) {
6
+ return union(values.map(forValue))
7
+ }
8
+
9
+ export function forKeys(value) {
10
+ return union(Object.keys(value).map((key) => `'${key}'`))
11
+ }
12
+
13
+ export function forValue(value) {
14
+ if (Array.isArray(value)) {
15
+ return `(${unionValues(value)})[]`
16
+ }
17
+
18
+ if (typeof value === 'object') {
19
+ return `Record<${forKeys(value)}, ${unionValues(Object.values(value))}>`
20
+ }
21
+
22
+ if (typeof value === 'string') {
23
+ return `string`
24
+ }
25
+
26
+ return `any`
27
+ }
@@ -0,0 +1,56 @@
1
+ // @ts-check
2
+
3
+ import {
4
+ // @ts-ignore
5
+ lazyPostcss,
6
+
7
+ // @ts-ignore
8
+ lazyPostcssImport,
9
+
10
+ // @ts-ignore
11
+ lazyCssnano,
12
+
13
+ // @ts-ignore
14
+ lazyAutoprefixer,
15
+ } from '../../../peers/index.js'
16
+
17
+ /**
18
+ * @returns {import('postcss')}
19
+ */
20
+ export function loadPostcss() {
21
+ // Try to load a local `postcss` version first
22
+ try {
23
+ return require('postcss')
24
+ } catch {}
25
+
26
+ return lazyPostcss()
27
+ }
28
+
29
+ export function loadPostcssImport() {
30
+ // Try to load a local `postcss-import` version first
31
+ try {
32
+ return require('postcss-import')
33
+ } catch {}
34
+
35
+ return lazyPostcssImport()
36
+ }
37
+
38
+ export function loadCssNano() {
39
+ let options = { preset: ['default', { cssDeclarationSorter: false }] }
40
+
41
+ // Try to load a local `cssnano` version first
42
+ try {
43
+ return require('cssnano')
44
+ } catch {}
45
+
46
+ return lazyCssnano()(options)
47
+ }
48
+
49
+ export function loadAutoprefixer() {
50
+ // Try to load a local `autoprefixer` version first
51
+ try {
52
+ return require('autoprefixer')
53
+ } catch {}
54
+
55
+ return lazyAutoprefixer()
56
+ }
@@ -0,0 +1,49 @@
1
+ // @ts-check
2
+
3
+ import fs from 'fs'
4
+ import path from 'path'
5
+ import { createProcessor } from './plugin.js'
6
+
7
+ export async function build(args, configs) {
8
+ let input = args['--input']
9
+ let shouldWatch = args['--watch']
10
+
11
+ // TODO: Deprecate this in future versions
12
+ if (!input && args['_'][1]) {
13
+ console.error('[deprecation] Running tailwindcss without -i, please provide an input file.')
14
+ input = args['--input'] = args['_'][1]
15
+ }
16
+
17
+ if (input && input !== '-' && !fs.existsSync((input = path.resolve(input)))) {
18
+ console.error(`Specified input file ${args['--input']} does not exist.`)
19
+ process.exit(9)
20
+ }
21
+
22
+ if (args['--config'] && !fs.existsSync((args['--config'] = path.resolve(args['--config'])))) {
23
+ console.error(`Specified config file ${args['--config']} does not exist.`)
24
+ process.exit(9)
25
+ }
26
+
27
+ // TODO: Reference the @config path here if exists
28
+ let configPath = args['--config']
29
+ ? args['--config']
30
+ : ((defaultPath) => (fs.existsSync(defaultPath) ? defaultPath : null))(
31
+ path.resolve(`./${configs.tailwind}`)
32
+ )
33
+
34
+ let processor = await createProcessor(args, configPath)
35
+
36
+ if (shouldWatch) {
37
+ // Abort the watcher if stdin is closed to avoid zombie processes
38
+ // You can disable this behavior with --watch=always
39
+ if (args['--watch'] !== 'always') {
40
+ process.stdin.on('end', () => process.exit(0))
41
+ }
42
+
43
+ process.stdin.resume()
44
+
45
+ await processor.watch()
46
+ } else {
47
+ await processor.build()
48
+ }
49
+ }