diff --git a/packages/tailwindcss-language-server/package.json b/packages/tailwindcss-language-server/package.json index dd812e3c..d96255dd 100644 --- a/packages/tailwindcss-language-server/package.json +++ b/packages/tailwindcss-language-server/package.json @@ -40,7 +40,7 @@ "@tailwindcss/forms": "0.5.3", "@tailwindcss/language-service": "workspace:*", "@tailwindcss/line-clamp": "0.4.2", - "@tailwindcss/oxide": "^4.0.15", + "@tailwindcss/oxide": "^4.1.0", "@tailwindcss/typography": "0.5.7", "@types/braces": "3.0.1", "@types/color-name": "^1.1.3", @@ -84,7 +84,7 @@ "rimraf": "3.0.2", "stack-trace": "0.0.10", "tailwindcss": "3.4.17", - "tailwindcss-v4": "npm:tailwindcss@4.0.6", + "tailwindcss-v4": "npm:tailwindcss@4.1.1", "tsconfck": "^3.1.4", "tsconfig-paths": "^4.2.0", "typescript": "5.3.3", diff --git a/packages/tailwindcss-language-server/src/project-locator.test.ts b/packages/tailwindcss-language-server/src/project-locator.test.ts index 429f0b27..3699c840 100644 --- a/packages/tailwindcss-language-server/src/project-locator.test.ts +++ b/packages/tailwindcss-language-server/src/project-locator.test.ts @@ -123,6 +123,7 @@ testFixture('v4/workspaces', [ '{URL}/packages/admin/**', '{URL}/packages/admin/app.css', '{URL}/packages/admin/package.json', + '{URL}/packages/admin/tw.css', ], }, { @@ -147,8 +148,8 @@ testLocator({ 'package.json': json` { "dependencies": { - "tailwindcss": "^4.0.15", - "@tailwindcss/oxide": "^4.0.15" + "tailwindcss": "4.1.0", + "@tailwindcss/oxide": "4.1.0" } } `, @@ -164,7 +165,7 @@ testLocator({ content: [ '/*', '/package.json', - '/src/**/*.{aspx,astro,cjs,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}', + '/src/**/*.{aspx,astro,cjs,css,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,json,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}', '/src/components/example.html', '/src/index.html', ], @@ -178,8 +179,8 @@ testLocator({ 'package.json': json` { "dependencies": { - "tailwindcss": "^4.0.15", - "@tailwindcss/oxide": "^4.0.15" + "tailwindcss": "4.1.0", + "@tailwindcss/oxide": "4.1.0" } } `, @@ -197,7 +198,7 @@ testLocator({ content: [ '/*', '/package.json', - '/src/**/*.{aspx,astro,cjs,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}', + '/src/**/*.{aspx,astro,cjs,css,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,json,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}', '/src/components/example.html', '/src/index.html', ], @@ -211,8 +212,8 @@ testLocator({ 'package.json': json` { "dependencies": { - "tailwindcss": "^4.0.15", - "@tailwindcss/oxide": "^4.0.15" + "tailwindcss": "4.1.0", + "@tailwindcss/oxide": "4.1.0" } } `, @@ -245,36 +246,40 @@ testLocator({ content: [ '/*', '/admin/foo.bin', - '/admin/{**/*.bin,**/*.{aspx,astro,cjs,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}}', + '/admin/tw.css', + '/admin/ui.css', + '/admin/{**/*.bin,**/*.{aspx,astro,bin,cjs,css,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,json,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}}', '/package.json', '/shared.html', - '/web/**/*.{aspx,astro,cjs,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}', + '/web/**/*.{aspx,astro,bin,cjs,css,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,json,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}', + '/web/app.css', ], }, { config: '/web/app.css', content: [ '/*', - '/admin/**/*.{aspx,astro,cjs,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}', + '/admin/**/*.{aspx,astro,bin,cjs,css,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,json,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}', + '/admin/app.css', + '/admin/tw.css', + '/admin/ui.css', '/package.json', '/shared.html', '/web/bar.bin', - '/web/{**/*.{aspx,astro,cjs,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue},*.bin}', + '/web/{**/*.{aspx,astro,bin,cjs,css,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,json,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue},*.bin}', ], }, ], }) testLocator({ - // TODO: Enable once v4.1 is released - options: { skip: true }, name: 'automatic content detection with negative custom sources', fs: { 'package.json': json` { "dependencies": { - "tailwindcss": "0.0.0-insiders.3e53e25", - "@tailwindcss/oxide": "0.0.0-insiders.3e53e25" + "tailwindcss": "4.1.0", + "@tailwindcss/oxide": "4.1.0" } } `, @@ -293,7 +298,7 @@ testLocator({ '/*', '/package.json', '/src/index.html', - '/src/{**/*.html,**/*.{aspx,astro,cjs,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,json,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}}', + '/src/{**/*.html,**/*.{aspx,astro,cjs,css,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,json,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}}', ], }, ], @@ -303,7 +308,7 @@ testFixture('v4/missing-files', [ // { config: 'app.css', - content: ['{URL}/*', '{URL}/package.json'], + content: ['{URL}/*', '{URL}/i-exist.css', '{URL}/package.json'], }, ]) @@ -314,7 +319,8 @@ testFixture('v4/path-mappings', [ content: [ '{URL}/*', '{URL}/package.json', - '{URL}/src/**/*.{aspx,astro,cjs,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}', + '{URL}/src/**/*.{aspx,astro,cjs,css,cts,eex,erb,gjs,gts,haml,handlebars,hbs,heex,html,jade,js,json,jsx,liquid,md,mdx,mjs,mts,mustache,njk,nunjucks,php,pug,py,razor,rb,rhtml,rs,slim,svelte,tpl,ts,tsx,twig,vue}', + '{URL}/src/a/file.css', '{URL}/src/a/my-config.ts', '{URL}/src/a/my-plugin.ts', '{URL}/tsconfig.json', @@ -326,7 +332,7 @@ testFixture('v4/invalid-import-order', [ // { config: 'tailwind.css', - content: ['{URL}/*', '{URL}/package.json'], + content: ['{URL}/*', '{URL}/a.css', '{URL}/b.css', '{URL}/package.json'], }, ]) @@ -338,7 +344,7 @@ testLocator({ 'package.json': json` { "dependencies": { - "tailwindcss": "^4.0.2" + "tailwindcss": "4.1.0" } } `, @@ -386,7 +392,7 @@ testLocator({ 'package.json': json` { "dependencies": { - "tailwindcss": "4.0.6" + "tailwindcss": "4.1.0" } } `, @@ -415,7 +421,7 @@ testLocator({ }, expected: [ { - version: '4.0.6', + version: '4.1.0', config: '/src/articles/articles.css', content: [], }, diff --git a/packages/tailwindcss-language-server/src/util/v4/design-system.ts b/packages/tailwindcss-language-server/src/util/v4/design-system.ts index 05d2ecd3..f312b95c 100644 --- a/packages/tailwindcss-language-server/src/util/v4/design-system.ts +++ b/packages/tailwindcss-language-server/src/util/v4/design-system.ts @@ -219,6 +219,14 @@ export async function loadDesignSystem( Object.assign(design, { dependencies: () => dependencies, + // TODOs: + // + // 1. Remove PostCSS parsing — its roughly 60% of the processing time + // ex: compiling 19k classes take 650ms and 400ms of that is PostCSS + // + // - Replace `candidatesToCss` with a `candidatesToAst` API + // First step would be to convert to a PostCSS AST by transforming the nodes directly + // Then it would be to drop the PostCSS AST representation entirely in all v4 code paths compile(classes: string[]): (postcss.Root | null)[] { let css = design.candidatesToCss(classes) let errors: any[] = [] diff --git a/packages/tailwindcss-language-server/tests/colors/colors.test.js b/packages/tailwindcss-language-server/tests/colors/colors.test.js index 5016bacc..4780a4fb 100644 --- a/packages/tailwindcss-language-server/tests/colors/colors.test.js +++ b/packages/tailwindcss-language-server/tests/colors/colors.test.js @@ -334,7 +334,7 @@ defineTest({ expect(c.project).toMatchObject({ tailwind: { - version: '4.0.6', + version: '4.1.1', isDefaultVersion: true, }, }) @@ -373,7 +373,7 @@ defineTest({ expect(c.project).toMatchObject({ tailwind: { - version: '4.0.6', + version: '4.1.1', isDefaultVersion: true, }, }) diff --git a/packages/tailwindcss-language-server/tests/completions/completions.test.js b/packages/tailwindcss-language-server/tests/completions/completions.test.js index dbe9a352..feb4999f 100644 --- a/packages/tailwindcss-language-server/tests/completions/completions.test.js +++ b/packages/tailwindcss-language-server/tests/completions/completions.test.js @@ -313,8 +313,8 @@ withFixture('v4/basic', (c) => { let result = await completion({ lang, text, position, settings }) let textEdit = expect.objectContaining({ range: { start: position, end: position } }) - expect(result.items.length).toBe(13172) - expect(result.items.filter((item) => item.label.endsWith(':')).length).toBe(317) + expect(result.items.length).toBe(19283) + expect(result.items.filter((item) => item.label.endsWith(':')).length).toBe(346) expect(result).toEqual({ isIncomplete: false, items: expect.arrayContaining([ @@ -488,7 +488,7 @@ withFixture('v4/basic', (c) => { }) // Make sure `@slot` is NOT suggested by default - expect(result.items.length).toBe(7) + expect(result.items.length).toBe(8) expect(result.items).not.toEqual( expect.arrayContaining([ expect.objectContaining({ kind: 14, label: '@slot', sortText: '-0000000' }), @@ -627,7 +627,7 @@ withFixture('v4/basic', (c) => { expect(resolved).toEqual({ ...item, - detail: 'background-color: oklch(0.637 0.237 25.331);', + detail: 'background-color: oklch(63.7% 0.237 25.331);', documentation: '#fb2c36', }) }) @@ -692,7 +692,7 @@ defineTest({ // ^ let completion = await document.completions({ line: 0, character: 23 }) - expect(completion?.items.length).toBe(12289) + expect(completion?.items.length).toBe(19236) }, }) @@ -714,7 +714,7 @@ defineTest({ // ^ let completion = await document.completions({ line: 0, character: 22 }) - expect(completion?.items.length).toBe(12289) + expect(completion?.items.length).toBe(19236) }, }) @@ -736,7 +736,7 @@ defineTest({ // ^ let completion = await document.completions({ line: 0, character: 31 }) - expect(completion?.items.length).toBe(12289) + expect(completion?.items.length).toBe(19236) }, }) @@ -765,7 +765,7 @@ defineTest({ // ^ let completion = await document.completions({ line: 0, character: 20 }) - expect(completion?.items.length).toBe(12289) + expect(completion?.items.length).toBe(19236) }, }) @@ -796,7 +796,7 @@ defineTest({ // ^ let completion = await document.completions({ line: 1, character: 22 }) - expect(completion?.items.length).toBe(12289) + expect(completion?.items.length).toBe(19236) }, }) @@ -886,24 +886,24 @@ defineTest({ // ^ let completionA = await document.completions({ line: 0, character: 13 }) - expect(completionA?.items.length).toBe(12289) + expect(completionA?.items.length).toBe(19236) // return ; // ^ let completionB = await document.completions({ line: 3, character: 30 }) - expect(completionB?.items.length).toBe(12289) + expect(completionB?.items.length).toBe(19236) // return ; // ^ let completionC = await document.completions({ line: 7, character: 30 }) - expect(completionC?.items.length).toBe(12289) + expect(completionC?.items.length).toBe(19236) // let y = cva(""); // ^ let completionD = await document.completions({ line: 10, character: 13 }) - expect(completionD?.items.length).toBe(12289) + expect(completionD?.items.length).toBe(19236) }, }) diff --git a/packages/tailwindcss-language-server/tests/env/v4.test.js b/packages/tailwindcss-language-server/tests/env/v4.test.js index 632eb1a2..dc33c79f 100644 --- a/packages/tailwindcss-language-server/tests/env/v4.test.js +++ b/packages/tailwindcss-language-server/tests/env/v4.test.js @@ -21,7 +21,7 @@ defineTest({ expect(await client.project()).toMatchObject({ tailwind: { - version: '4.0.6', + version: '4.1.1', isDefaultVersion: true, }, }) @@ -49,7 +49,7 @@ defineTest({ }, }) - expect(completion?.items.length).toBe(12288) + expect(completion?.items.length).toBe(19235) }, }) @@ -137,7 +137,7 @@ defineTest({ expect(await client.project()).toMatchObject({ tailwind: { - version: '4.0.6', + version: '4.1.1', isDefaultVersion: true, }, }) @@ -188,7 +188,7 @@ defineTest({ 'package.json': json` { "dependencies": { - "tailwindcss": "4.0.1" + "tailwindcss": "4.1.1" } } `, @@ -205,7 +205,7 @@ defineTest({ expect(await client.project()).toMatchObject({ tailwind: { - version: '4.0.1', + version: '4.1.1', isDefaultVersion: false, }, }) @@ -233,7 +233,7 @@ defineTest({ }, }) - expect(completion?.items.length).toBe(12288) + expect(completion?.items.length).toBe(19235) }, }) @@ -243,7 +243,7 @@ defineTest({ 'package.json': json` { "dependencies": { - "tailwindcss": "4.0.1" + "tailwindcss": "4.1.1" } } `, @@ -270,7 +270,7 @@ defineTest({ expect(await client.project()).toMatchObject({ tailwind: { - version: '4.0.1', + version: '4.1.1', isDefaultVersion: false, }, }) @@ -322,7 +322,7 @@ defineTest({ expect(await client.project()).toMatchObject({ tailwind: { - version: '4.0.6', + version: '4.1.1', isDefaultVersion: true, }, }) @@ -354,7 +354,7 @@ defineTest({ 'package.json': json` { "dependencies": { - "tailwindcss": "4.0.1" + "tailwindcss": "4.1.1" } } `, @@ -831,7 +831,7 @@ defineTest({ expect(await client.project()).toMatchObject({ tailwind: { - version: '4.0.6', + version: '4.1.1', isDefaultVersion: true, }, }) diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/basic/package-lock.json b/packages/tailwindcss-language-server/tests/fixtures/v4/basic/package-lock.json index 6275c3dc..ab6be977 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/basic/package-lock.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/basic/package-lock.json @@ -5,13 +5,13 @@ "packages": { "": { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } }, "node_modules/tailwindcss": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.15.tgz", - "integrity": "sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.1.tgz", + "integrity": "sha512-QNbdmeS979Efzim2g/bEvfuh+fTcIdp1y7gA+sb6OYSW74rt7Cr7M78AKdf6HqWT3d5AiTb7SwTT3sLQxr4/qw==", "license": "MIT" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/basic/package.json b/packages/tailwindcss-language-server/tests/fixtures/v4/basic/package.json index b6cb53b1..43b975c9 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/basic/package.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/basic/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/css-loading-js/package-lock.json b/packages/tailwindcss-language-server/tests/fixtures/v4/css-loading-js/package-lock.json index 5089dc65..b92fb848 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/css-loading-js/package-lock.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/css-loading-js/package-lock.json @@ -5,13 +5,13 @@ "packages": { "": { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } }, "node_modules/tailwindcss": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.15.tgz", - "integrity": "sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.1.tgz", + "integrity": "sha512-QNbdmeS979Efzim2g/bEvfuh+fTcIdp1y7gA+sb6OYSW74rt7Cr7M78AKdf6HqWT3d5AiTb7SwTT3sLQxr4/qw==", "license": "MIT" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/css-loading-js/package.json b/packages/tailwindcss-language-server/tests/fixtures/v4/css-loading-js/package.json index b6cb53b1..43b975c9 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/css-loading-js/package.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/css-loading-js/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/dependencies/package-lock.json b/packages/tailwindcss-language-server/tests/fixtures/v4/dependencies/package-lock.json index 555ee660..f4352dc6 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/dependencies/package-lock.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/dependencies/package-lock.json @@ -5,13 +5,13 @@ "packages": { "": { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } }, "node_modules/tailwindcss": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.15.tgz", - "integrity": "sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.1.tgz", + "integrity": "sha512-QNbdmeS979Efzim2g/bEvfuh+fTcIdp1y7gA+sb6OYSW74rt7Cr7M78AKdf6HqWT3d5AiTb7SwTT3sLQxr4/qw==", "license": "MIT" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/dependencies/package.json b/packages/tailwindcss-language-server/tests/fixtures/v4/dependencies/package.json index b6cb53b1..43b975c9 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/dependencies/package.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/dependencies/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/invalid-import-order/package-lock.json b/packages/tailwindcss-language-server/tests/fixtures/v4/invalid-import-order/package-lock.json index 24d978d8..0a12b281 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/invalid-import-order/package-lock.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/invalid-import-order/package-lock.json @@ -5,13 +5,13 @@ "packages": { "": { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } }, "node_modules/tailwindcss": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.15.tgz", - "integrity": "sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.1.tgz", + "integrity": "sha512-QNbdmeS979Efzim2g/bEvfuh+fTcIdp1y7gA+sb6OYSW74rt7Cr7M78AKdf6HqWT3d5AiTb7SwTT3sLQxr4/qw==", "license": "MIT" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/invalid-import-order/package.json b/packages/tailwindcss-language-server/tests/fixtures/v4/invalid-import-order/package.json index b6cb53b1..43b975c9 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/invalid-import-order/package.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/invalid-import-order/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/missing-files/package-lock.json b/packages/tailwindcss-language-server/tests/fixtures/v4/missing-files/package-lock.json index ed4d2d9a..c95b25d7 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/missing-files/package-lock.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/missing-files/package-lock.json @@ -5,13 +5,13 @@ "packages": { "": { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } }, "node_modules/tailwindcss": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.15.tgz", - "integrity": "sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.1.tgz", + "integrity": "sha512-QNbdmeS979Efzim2g/bEvfuh+fTcIdp1y7gA+sb6OYSW74rt7Cr7M78AKdf6HqWT3d5AiTb7SwTT3sLQxr4/qw==", "license": "MIT" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/missing-files/package.json b/packages/tailwindcss-language-server/tests/fixtures/v4/missing-files/package.json index b6cb53b1..43b975c9 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/missing-files/package.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/missing-files/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/multi-config/package-lock.json b/packages/tailwindcss-language-server/tests/fixtures/v4/multi-config/package-lock.json index c4664645..58a06cee 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/multi-config/package-lock.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/multi-config/package-lock.json @@ -5,13 +5,13 @@ "packages": { "": { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } }, "node_modules/tailwindcss": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.15.tgz", - "integrity": "sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.1.tgz", + "integrity": "sha512-QNbdmeS979Efzim2g/bEvfuh+fTcIdp1y7gA+sb6OYSW74rt7Cr7M78AKdf6HqWT3d5AiTb7SwTT3sLQxr4/qw==", "license": "MIT" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/multi-config/package.json b/packages/tailwindcss-language-server/tests/fixtures/v4/multi-config/package.json index b6cb53b1..43b975c9 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/multi-config/package.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/multi-config/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/path-mappings/package-lock.json b/packages/tailwindcss-language-server/tests/fixtures/v4/path-mappings/package-lock.json index 651bf7c9..e6cc18e9 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/path-mappings/package-lock.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/path-mappings/package-lock.json @@ -5,13 +5,13 @@ "packages": { "": { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } }, "node_modules/tailwindcss": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.15.tgz", - "integrity": "sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.1.tgz", + "integrity": "sha512-QNbdmeS979Efzim2g/bEvfuh+fTcIdp1y7gA+sb6OYSW74rt7Cr7M78AKdf6HqWT3d5AiTb7SwTT3sLQxr4/qw==", "license": "MIT" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/path-mappings/package.json b/packages/tailwindcss-language-server/tests/fixtures/v4/path-mappings/package.json index b6cb53b1..43b975c9 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/path-mappings/package.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/path-mappings/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/with-prefix/package-lock.json b/packages/tailwindcss-language-server/tests/fixtures/v4/with-prefix/package-lock.json index 1e5486ae..34a2cc13 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/with-prefix/package-lock.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/with-prefix/package-lock.json @@ -5,13 +5,13 @@ "packages": { "": { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } }, "node_modules/tailwindcss": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.15.tgz", - "integrity": "sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.1.tgz", + "integrity": "sha512-QNbdmeS979Efzim2g/bEvfuh+fTcIdp1y7gA+sb6OYSW74rt7Cr7M78AKdf6HqWT3d5AiTb7SwTT3sLQxr4/qw==", "license": "MIT" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/with-prefix/package.json b/packages/tailwindcss-language-server/tests/fixtures/v4/with-prefix/package.json index b6cb53b1..43b975c9 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/with-prefix/package.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/with-prefix/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } } diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/workspaces/package-lock.json b/packages/tailwindcss-language-server/tests/fixtures/v4/workspaces/package-lock.json index b622b7b7..a88643ba 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/workspaces/package-lock.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/workspaces/package-lock.json @@ -8,7 +8,7 @@ "packages/*" ], "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } }, "node_modules/@private/admin": { @@ -32,9 +32,9 @@ "link": true }, "node_modules/tailwindcss": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.15.tgz", - "integrity": "sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.1.tgz", + "integrity": "sha512-QNbdmeS979Efzim2g/bEvfuh+fTcIdp1y7gA+sb6OYSW74rt7Cr7M78AKdf6HqWT3d5AiTb7SwTT3sLQxr4/qw==", "license": "MIT" }, "packages/admin": { diff --git a/packages/tailwindcss-language-server/tests/fixtures/v4/workspaces/package.json b/packages/tailwindcss-language-server/tests/fixtures/v4/workspaces/package.json index aa5e54db..9291956a 100644 --- a/packages/tailwindcss-language-server/tests/fixtures/v4/workspaces/package.json +++ b/packages/tailwindcss-language-server/tests/fixtures/v4/workspaces/package.json @@ -3,6 +3,6 @@ "packages/*" ], "dependencies": { - "tailwindcss": "^4.0.15" + "tailwindcss": "4.1.1" } } diff --git a/packages/tailwindcss-language-server/tests/hover/hover.test.js b/packages/tailwindcss-language-server/tests/hover/hover.test.js index ac97e414..37377340 100644 --- a/packages/tailwindcss-language-server/tests/hover/hover.test.js +++ b/packages/tailwindcss-language-server/tests/hover/hover.test.js @@ -214,7 +214,7 @@ withFixture('v4/basic', (c) => { text: '
', position: { line: 0, character: 13 }, expected: - '.bg-red-500 {\n background-color: var(--color-red-500) /* oklch(0.637 0.237 25.331) = #fb2c36 */;\n}', + '.bg-red-500 {\n background-color: var(--color-red-500) /* oklch(63.7% 0.237 25.331) = #fb2c36 */;\n}', expectedRange: { start: { line: 0, character: 12 }, end: { line: 0, character: 22 }, @@ -231,16 +231,15 @@ withFixture('v4/basic', (c) => { }, }) - test.todo('arbitrary value with theme function') - // testHover('arbitrary value with theme function', { - // text: '
', - // position: { line: 0, character: 13 }, - // expected: '.p-\\[theme\\(spacing\\.4\\)\\] {\n' + ' padding: 1rem /* 16px */;\n' + '}', - // expectedRange: { - // start: { line: 0, character: 12 }, - // end: { line: 0, character: 32 }, - // }, - // }) + testHover('arbitrary value with theme function', { + text: '
', + position: { line: 0, character: 13 }, + expected: '.p-\\[theme\\(spacing\\.4\\)\\] {\n' + ' padding: 1rem /* 16px */;\n' + '}', + expectedRange: { + start: { line: 0, character: 12 }, + end: { line: 0, character: 32 }, + }, + }) testHover('arbitrary property', { text: '
', diff --git a/packages/tailwindcss-language-service/src/util/color.ts b/packages/tailwindcss-language-service/src/util/color.ts index 4b0d3b84..a1a99d66 100644 --- a/packages/tailwindcss-language-service/src/util/color.ts +++ b/packages/tailwindcss-language-service/src/util/color.ts @@ -57,7 +57,7 @@ const colorRegex = new RegExp( ) function getColorsInString(state: State, str: string): (culori.Color | KeywordColor)[] { - if (/(?:box|drop)-shadow/.test(str)) return [] + if (/(?:box|drop)-shadow/.test(str) && !/--tw-drop-shadow/.test(str)) return [] function toColor(match: RegExpMatchArray) { let color = match[1].replace(/var\([^)]+\)/, '1') @@ -85,6 +85,17 @@ function getColorFromDecls( ) { return false } + + // ignore mask-image & mask-composite + if (prop === 'mask-image' || prop === 'mask-composite') { + return false + } + + // ignore `--tw-drop-shadow` + if (prop === '--tw-drop-shadow') { + return false + } + return true }) @@ -177,8 +188,25 @@ function getColorFromRoot(state: State, css: postcss.Root): culori.Color | Keywo return getColorFromDecls(state, decls) } +let isNegative = /^-/ +let isNumericUtility = + /^-?((min-|max-)?[wh]|z|start|order|opacity|rounded|row|col|size|basis|end|duration|ease|font|top|left|bottom|right|inset|leading|cursor|(space|scale|skew|rotate)-[xyz]|gap(-[xy])?|(scroll-)?[pm][trblxyse]?)-/ +let isMaskUtility = /^-?mask-/ + +function isLikelyColorless(className: string) { + if (isNegative.test(className)) return true + // TODO: This is **not** correct but is intentional because there are 5k mask utilities and a LOT of them are colors + // This causes a massive slowdown when building the design system + if (isMaskUtility.test(className)) return true + if (isNumericUtility.test(className)) return true + return false +} + export function getColor(state: State, className: string): culori.Color | KeywordColor | null { if (state.v4) { + // FIXME: This is a performance optimization and not strictly correct + if (isLikelyColorless(className)) return null + let css = state.designSystem.compile([className])[0] let color = getColorFromRoot(state, css) diff --git a/packages/tailwindcss-language-service/src/util/rewriting/var-fallbacks.ts b/packages/tailwindcss-language-service/src/util/rewriting/var-fallbacks.ts index 728b53bf..91dcc91d 100644 --- a/packages/tailwindcss-language-service/src/util/rewriting/var-fallbacks.ts +++ b/packages/tailwindcss-language-service/src/util/rewriting/var-fallbacks.ts @@ -17,6 +17,14 @@ export function replaceCssVarsWithFallbacks(state: State, str: string): string { return fallback } + if ( + name === '--tw-text-shadow-alpha' || + name === '--tw-drop-shadow-alpha' || + name === '--tw-shadow-alpha' + ) { + return '100%' + } + // Don't touch it since there's no suitable replacement return null }, diff --git a/packages/vscode-tailwindcss/CHANGELOG.md b/packages/vscode-tailwindcss/CHANGELOG.md index 82478125..421543f5 100644 --- a/packages/vscode-tailwindcss/CHANGELOG.md +++ b/packages/vscode-tailwindcss/CHANGELOG.md @@ -3,6 +3,8 @@ ## Prerelease - Hide completions from CSS language server inside `@import "…" source(…)` ([#1091](https://github.com/tailwindlabs/tailwindcss-intellisense/pull/1091)) +- Bump bundled v4 fallback to v4.1.1 ([#1294](https://github.com/tailwindlabs/tailwindcss-intellisense/pull/1294)) +- Show color swatches for most new v4.1 utilities ([#1294](https://github.com/tailwindlabs/tailwindcss-intellisense/pull/1294)) # 0.14.12 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 071263e7..e879d3a6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,8 +51,8 @@ importers: specifier: 0.4.2 version: 0.4.2(tailwindcss@3.4.17) '@tailwindcss/oxide': - specifier: ^4.0.15 - version: 4.0.15 + specifier: ^4.1.0 + version: 4.1.0 '@tailwindcss/typography': specifier: 0.5.7 version: 0.5.7(tailwindcss@3.4.17) @@ -183,8 +183,8 @@ importers: specifier: 3.4.17 version: 3.4.17 tailwindcss-v4: - specifier: npm:tailwindcss@4.0.6 - version: tailwindcss@4.0.6 + specifier: npm:tailwindcss@4.1.1 + version: tailwindcss@4.1.1 tsconfck: specifier: ^3.1.4 version: 3.1.4(typescript@5.3.3) @@ -890,74 +890,74 @@ packages: peerDependencies: tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' - '@tailwindcss/oxide-android-arm64@4.0.15': - resolution: {integrity: sha512-EBuyfSKkom7N+CB3A+7c0m4+qzKuiN0WCvzPvj5ZoRu4NlQadg/mthc1tl5k9b5ffRGsbDvP4k21azU4VwVk3Q==} + '@tailwindcss/oxide-android-arm64@4.1.0': + resolution: {integrity: sha512-UredFljuHey2Kh5qyYfQVBr0Xfq70ZE5Df6i5IubNYQGs2JXXT4VL0SIUjwzHx5W9T6t7dT7banunlV6lthGPQ==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.0.15': - resolution: {integrity: sha512-ObVAnEpLepMhV9VoO0JSit66jiN5C4YCqW3TflsE9boo2Z7FIjV80RFbgeL2opBhtxbaNEDa6D0/hq/EP03kgQ==} + '@tailwindcss/oxide-darwin-arm64@4.1.0': + resolution: {integrity: sha512-QHQ/46lRVwH9zEBNiRk8AJ3Af4pMq6DuZAI//q323qrPOXjsRdrhLsH9LUO3mqBfHr5EZNUxN3Am5vpO89sntw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.0.15': - resolution: {integrity: sha512-IElwoFhUinOr9MyKmGTPNi1Rwdh68JReFgYWibPWTGuevkHkLWKEflZc2jtI5lWZ5U9JjUnUfnY43I4fEXrc4g==} + '@tailwindcss/oxide-darwin-x64@4.1.0': + resolution: {integrity: sha512-lEMgYHCvQQ6x2KOZ4FwnPprwfnc+UnjzwXRqEYIhB/NlYvXQD1QMf7oKEDRqy94DiZaYox9ZRfG2YJOBgM0UkA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.0.15': - resolution: {integrity: sha512-6BLLqyx7SIYRBOnTZ8wgfXANLJV5TQd3PevRJZp0vn42eO58A2LykRKdvL1qyPfdpmEVtF+uVOEZ4QTMqDRAWA==} + '@tailwindcss/oxide-freebsd-x64@4.1.0': + resolution: {integrity: sha512-9fdImTc+2lA5yHqJ61oeTXfCtzylNOzJVFhyWwVQAJESJJbVCPnj6f+b+Zf/AYAdKQfS6FCThbPEahkQrDCgLQ==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.15': - resolution: {integrity: sha512-Zy63EVqO9241Pfg6G0IlRIWyY5vNcWrL5dd2WAKVJZRQVeolXEf1KfjkyeAAlErDj72cnyXObEZjMoPEKHpdNw==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.0': + resolution: {integrity: sha512-HB0bTkUOuTLLSdadyRhKE9yps4/ZBjrojbHTPMSvvf/8yBLZRPpWb+A6IgW5R+2A2AL4KhVPgLwWfoXsErxJFg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.0.15': - resolution: {integrity: sha512-2NemGQeaTbtIp1Z2wyerbVEJZTkAWhMDOhhR5z/zJ75yMNf8yLnE+sAlyf6yGDNr+1RqvWrRhhCFt7i0CIxe4Q==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.0': + resolution: {integrity: sha512-+QtYCwvKLjC46h6RikKkpELJWrpiMMtgyK0aaqhwPLEx1icGgIhwz8dqrkAiqbFRE0KiRrE2aenhYoEkplyRmA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.0.15': - resolution: {integrity: sha512-342GVnhH/6PkVgKtEzvNVuQ4D+Q7B7qplvuH20Cfz9qEtydG6IQczTZ5IT4JPlh931MG1NUCVxg+CIorr1WJyw==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.0': + resolution: {integrity: sha512-nApadFKM9GauzuPZPlt6TKfELavMHqJ0gVd+GYkYBTwr2t9KhgCAb2sKiFDDIhs1a7gOjsU7P1lEauv3iKFp+Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.0.15': - resolution: {integrity: sha512-g76GxlKH124RuGqacCEFc2nbzRl7bBrlC8qDQMiUABkiifDRHOIUjgKbLNG4RuR9hQAD/MKsqZ7A8L08zsoBrw==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.0': + resolution: {integrity: sha512-cp0Rf9Wit2kZHhrV8HIoDFD8dxU2+ZTCFCFbDj3a07pGyyPwLCJm5H5VipKXgYrBaLmlYu73ERidW0S5sdEXEg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.0.15': - resolution: {integrity: sha512-Gg/Y1XrKEvKpq6WeNt2h8rMIKOBj/W3mNa5NMvkQgMC7iO0+UNLrYmt6zgZufht66HozNpn+tJMbbkZ5a3LczA==} + '@tailwindcss/oxide-linux-x64-musl@4.1.0': + resolution: {integrity: sha512-4/wf42XWBJGXsOS6BhgPhdQbg/qyfdZ1nZvTL9sJoxYN+Ah+cfY5Dd7R0smzI8hmgCRt3TD1lYb72ChTyIA59w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-win32-arm64-msvc@4.0.15': - resolution: {integrity: sha512-7QtSSJwYZ7ZK1phVgcNZpuf7c7gaCj8Wb0xjliligT5qCGCp79OV2n3SJummVZdw4fbTNKUOYMO7m1GinppZyA==} + '@tailwindcss/oxide-win32-arm64-msvc@4.1.0': + resolution: {integrity: sha512-caXJJ0G6NwGbcoxEYdH3MZYN84C3PldaMdAEPMU6bjJXURQlKdSlQ/Ecis7/nSgBkMkicZyhqWmb36Tw/BFSIw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.0.15': - resolution: {integrity: sha512-JQ5H+5MLhOjpgNp6KomouE0ZuKmk3hO5h7/ClMNAQ8gZI2zkli3IH8ZqLbd2DVfXDbdxN2xvooIEeIlkIoSCqw==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.0': + resolution: {integrity: sha512-ZHXRXRxB7HBmkUE8U13nmkGGYfR1I2vsuhiYjeDDUFIYpk1BL6caU8hvzkSlL/X5CAQNdIUUJRGom5I0ZyfJOA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.0.15': - resolution: {integrity: sha512-e0uHrKfPu7JJGMfjwVNyt5M0u+OP8kUmhACwIRlM+JNBuReDVQ63yAD1NWe5DwJtdaHjugNBil76j+ks3zlk6g==} + '@tailwindcss/oxide@4.1.0': + resolution: {integrity: sha512-A33oyZKpPFH08d7xkl13Dc8OTsbPhsuls0z9gUCxIHvn8c1BsUACddQxL6HwaeJR1fSYyXZUw8bdWcD8bVawpQ==} engines: {node: '>= 10'} '@tailwindcss/typography@0.5.7': @@ -2440,8 +2440,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tailwindcss@4.0.6: - resolution: {integrity: sha512-mysewHYJKaXgNOW6pp5xon/emCsfAMnO8WMaGKZZ35fomnR/T5gYnRg2/yRTTrtXiEl1tiVkeRt0eMO6HxEZqw==} + tailwindcss@4.1.1: + resolution: {integrity: sha512-QNbdmeS979Efzim2g/bEvfuh+fTcIdp1y7gA+sb6OYSW74rt7Cr7M78AKdf6HqWT3d5AiTb7SwTT3sLQxr4/qw==} tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -3105,52 +3105,52 @@ snapshots: dependencies: tailwindcss: 3.4.17 - '@tailwindcss/oxide-android-arm64@4.0.15': + '@tailwindcss/oxide-android-arm64@4.1.0': optional: true - '@tailwindcss/oxide-darwin-arm64@4.0.15': + '@tailwindcss/oxide-darwin-arm64@4.1.0': optional: true - '@tailwindcss/oxide-darwin-x64@4.0.15': + '@tailwindcss/oxide-darwin-x64@4.1.0': optional: true - '@tailwindcss/oxide-freebsd-x64@4.0.15': + '@tailwindcss/oxide-freebsd-x64@4.1.0': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.15': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.0': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.0.15': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.0': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.0.15': + '@tailwindcss/oxide-linux-arm64-musl@4.1.0': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.0.15': + '@tailwindcss/oxide-linux-x64-gnu@4.1.0': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.0.15': + '@tailwindcss/oxide-linux-x64-musl@4.1.0': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.0.15': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.0': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.0.15': + '@tailwindcss/oxide-win32-x64-msvc@4.1.0': optional: true - '@tailwindcss/oxide@4.0.15': + '@tailwindcss/oxide@4.1.0': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.0.15 - '@tailwindcss/oxide-darwin-arm64': 4.0.15 - '@tailwindcss/oxide-darwin-x64': 4.0.15 - '@tailwindcss/oxide-freebsd-x64': 4.0.15 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.15 - '@tailwindcss/oxide-linux-arm64-gnu': 4.0.15 - '@tailwindcss/oxide-linux-arm64-musl': 4.0.15 - '@tailwindcss/oxide-linux-x64-gnu': 4.0.15 - '@tailwindcss/oxide-linux-x64-musl': 4.0.15 - '@tailwindcss/oxide-win32-arm64-msvc': 4.0.15 - '@tailwindcss/oxide-win32-x64-msvc': 4.0.15 + '@tailwindcss/oxide-android-arm64': 4.1.0 + '@tailwindcss/oxide-darwin-arm64': 4.1.0 + '@tailwindcss/oxide-darwin-x64': 4.1.0 + '@tailwindcss/oxide-freebsd-x64': 4.1.0 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.0 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.0 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.0 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.0 + '@tailwindcss/oxide-linux-x64-musl': 4.1.0 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.0 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.0 '@tailwindcss/typography@0.5.7(tailwindcss@3.4.17)': dependencies: @@ -4710,7 +4710,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@4.0.6: {} + tailwindcss@4.1.1: {} tapable@2.2.1: {}