diff --git a/src/lib/expandTailwindAtRules.js b/src/lib/expandTailwindAtRules.js
index c03e05b..75e015a 100644
--- a/src/lib/expandTailwindAtRules.js
+++ b/src/lib/expandTailwindAtRules.js
@@ -12,21 +12,26 @@ let contentMatchCache = sharedState.contentMatchCache
const BROAD_MATCH_GLOBAL_REGEXP = /[^<>"'`\s]*[^<>"'`\s:]/g
const INNER_MATCH_GLOBAL_REGEXP = /[^<>"'`\s.(){}[\]#=%]*[^<>"'`\s.(){}[\]#=%:]/g
-function defaultJitExtractor(content) {
- let broadMatches = content.match(BROAD_MATCH_GLOBAL_REGEXP) || []
- let innerMatches = content.match(INNER_MATCH_GLOBAL_REGEXP) || []
+function getDefaultExtractor(fileExtension) {
+ return function (content) {
+ if (fileExtension === 'svelte') {
+ content = content.replace(/\sclass:/g, ' ')
+ }
+ let broadMatches = content.match(BROAD_MATCH_GLOBAL_REGEXP) || []
+ let innerMatches = content.match(INNER_MATCH_GLOBAL_REGEXP) || []
- return [...broadMatches, ...innerMatches]
+ return [...broadMatches, ...innerMatches]
+ }
}
function getExtractor(fileName, tailwindConfig) {
const purgeOptions = tailwindConfig && tailwindConfig.purge && tailwindConfig.purge.options
+ const fileExtension = path.extname(fileName).slice(1)
if (!purgeOptions) {
- return defaultJitExtractor
+ return getDefaultExtractor(fileExtension)
}
- const fileExtension = path.extname(fileName).slice(1)
const fileSpecificExtractor = (purgeOptions.extractors || []).find((extractor) =>
extractor.extensions.includes(fileExtension)
)
@@ -35,7 +40,7 @@ function getExtractor(fileName, tailwindConfig) {
return fileSpecificExtractor.extractor
}
- return purgeOptions.defaultExtractor || defaultJitExtractor
+ return purgeOptions.defaultExtractor || getDefaultExtractor(fileExtension)
}
// Scans template contents for possible classes. This is a hot path on initial build but
diff --git a/tests/svelte-syntax.test.css b/tests/svelte-syntax.test.css
new file mode 100644
index 0000000..d8a61ad
--- /dev/null
+++ b/tests/svelte-syntax.test.css
@@ -0,0 +1,15 @@
+* {
+ --tw-shadow: 0 0 #0000;
+ --tw-ring-inset: var(--tw-empty, /*!*/ /*!*/);
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: rgba(59, 130, 246, 0.5);
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+}
+@media (min-width: 1024px) {
+ .lg\:hover\:bg-blue-500:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgba(59, 130, 246, var(--tw-bg-opacity));
+ }
+}
diff --git a/tests/svelte-syntax.test.js b/tests/svelte-syntax.test.js
new file mode 100644
index 0000000..2d4418e
--- /dev/null
+++ b/tests/svelte-syntax.test.js
@@ -0,0 +1,30 @@
+const postcss = require('postcss')
+const tailwind = require('../src/index.js')
+const fs = require('fs')
+const path = require('path')
+
+function run(input, config = {}) {
+ return postcss([tailwind(config)]).process(input, { from: path.resolve(__filename) })
+}
+
+test('basic usage', () => {
+ let config = {
+ purge: [path.resolve(__dirname, './svelte-syntax.test.svelte')],
+ corePlugins: { preflight: false },
+ theme: {},
+ plugins: [],
+ }
+
+ let css = `
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(css, config).then((result) => {
+ let expectedPath = path.resolve(__dirname, './svelte-syntax.test.css')
+ let expected = fs.readFileSync(expectedPath, 'utf8')
+
+ expect(result.css).toMatchCss(expected)
+ })
+})
diff --git a/tests/svelte-syntax.test.svelte b/tests/svelte-syntax.test.svelte
new file mode 100644
index 0000000..a0d4e77
--- /dev/null
+++ b/tests/svelte-syntax.test.svelte
@@ -0,0 +1,5 @@
+
+
+