@blotch/dolan 22.2.4 → 22.2.5
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.
- package/dist/commands/add.test.js +2 -0
- package/dist/commands/add.test.js.map +1 -1
- package/dist/commands/doctor.js +78 -21
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/doctor.test.js +167 -26
- package/dist/commands/doctor.test.js.map +1 -1
- package/dist/commands/init.test.js +4 -7
- package/dist/commands/init.test.js.map +1 -1
- package/dist/commands/update.d.ts +3 -1
- package/dist/commands/update.js +78 -15
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/update.test.js +257 -2
- package/dist/commands/update.test.js.map +1 -1
- package/dist/lockfile.d.ts +10 -0
- package/dist/lockfile.js +20 -1
- package/dist/lockfile.js.map +1 -1
- package/dist/lockfile.test.js +43 -3
- package/dist/lockfile.test.js.map +1 -1
- package/dist/registry.js +73 -11
- package/dist/registry.js.map +1 -1
- package/dist/registry.test.js +16 -3
- package/dist/registry.test.js.map +1 -1
- package/dist/test-utils.d.ts +24 -2
- package/dist/test-utils.js +41 -2
- package/dist/test-utils.js.map +1 -1
- package/dist/ui/boolean-inputs.test.ts +76 -0
- package/dist/ui/components/action-sheet/action-sheet.test.ts +370 -1
- package/dist/ui/components/action-sheet/action-sheet.ts +306 -28
- package/dist/ui/components/action-sheet/index.ts +1 -0
- package/dist/ui/components/alert-dialog/alert-dialog.test.ts +552 -8
- package/dist/ui/components/alert-dialog/alert-dialog.ts +644 -36
- package/dist/ui/components/alert-dialog/index.ts +5 -0
- package/dist/ui/components/area-chart/area-chart.ts +3 -2
- package/dist/ui/components/badge/badge.ts +2 -1
- package/dist/ui/components/bottom-sheet/bottom-sheet.test.ts +968 -3
- package/dist/ui/components/bottom-sheet/bottom-sheet.ts +1021 -95
- package/dist/ui/components/bottom-sheet/index.ts +7 -1
- package/dist/ui/components/button/button.test.ts +36 -1
- package/dist/ui/components/button/button.ts +17 -7
- package/dist/ui/components/button-group/button-group.test.ts +53 -9
- package/dist/ui/components/button-group/button-group.ts +67 -21
- package/dist/ui/components/card/card.test.ts +16 -0
- package/dist/ui/components/card/card.ts +2 -1
- package/dist/ui/components/chart/chart-presets.ts +6 -6
- package/dist/ui/components/chart/chart.test.ts +14 -0
- package/dist/ui/components/chart/chart.ts +10 -3
- package/dist/ui/components/checkbox/checkbox.ts +2 -1
- package/dist/ui/components/collapsible/collapsible.ts +2 -1
- package/dist/ui/components/dialog/dialog.ts +6 -6
- package/dist/ui/components/dock/dock-scroll.ts +9 -0
- package/dist/ui/components/dock/dock-search.test.ts +594 -0
- package/dist/ui/components/dock/dock.test.ts +4 -1
- package/dist/ui/components/dock/dock.ts +529 -51
- package/dist/ui/components/dynamic-color/dynamic-color.test.ts +144 -0
- package/dist/ui/components/dynamic-color/dynamic-color.ts +146 -0
- package/dist/ui/components/dynamic-color/index.ts +5 -0
- package/dist/ui/components/glass/glass.test.ts +39 -1
- package/dist/ui/components/glass/glass.ts +87 -17
- package/dist/ui/components/glass/index.ts +1 -0
- package/dist/ui/components/icon/icon-theme.test.ts +28 -0
- package/dist/ui/components/icon/icon-theme.ts +38 -7
- package/dist/ui/components/input/input.ts +2 -1
- package/dist/ui/components/label/label.ts +8 -2
- package/dist/ui/components/line-chart/line-chart.ts +3 -2
- package/dist/ui/components/list/list.ts +5 -4
- package/dist/ui/components/menu/menu-popup.test.ts +18 -14
- package/dist/ui/components/menu/menu-popup.ts +24 -3
- package/dist/ui/components/menu/menu.test.ts +99 -5
- package/dist/ui/components/menu/menu.ts +74 -34
- package/dist/ui/components/nav-drawer/nav-drawer.ts +3 -2
- package/dist/ui/components/navigation-bar/index.ts +1 -0
- package/dist/ui/components/navigation-bar/navigation-bar.test.ts +425 -0
- package/dist/ui/components/navigation-bar/navigation-bar.ts +411 -0
- package/dist/ui/components/popover/index.ts +9 -0
- package/dist/ui/components/popover/popover-panel.test.ts +735 -0
- package/dist/ui/components/popover/popover-panel.ts +603 -0
- package/dist/ui/components/popover/popover.test.ts +286 -0
- package/dist/ui/components/popover/popover.ts +207 -0
- package/dist/ui/components/progress/progress.ts +2 -1
- package/dist/ui/components/radio-group/radio-group.ts +2 -1
- package/dist/ui/components/scroll-area/scroll-area.ts +4 -3
- package/dist/ui/components/search-field/index.ts +15 -0
- package/dist/ui/components/search-field/keyboard.test.ts +147 -0
- package/dist/ui/components/search-field/keyboard.ts +123 -0
- package/dist/ui/components/search-field/search-field.test.ts +549 -0
- package/dist/ui/components/search-field/search-field.ts +628 -0
- package/dist/ui/components/segmented-control/index.ts +8 -0
- package/dist/ui/components/segmented-control/segmented-control.test.ts +861 -0
- package/dist/ui/components/segmented-control/segmented-control.ts +884 -0
- package/dist/ui/components/select/select.ts +2 -1
- package/dist/ui/components/sheet/sheet.test.ts +90 -3
- package/dist/ui/components/sheet/sheet.ts +59 -4
- package/dist/ui/components/slider/index.ts +1 -0
- package/dist/ui/components/slider/slider.test.ts +695 -0
- package/dist/ui/components/slider/slider.ts +901 -0
- package/dist/ui/components/switch/index.ts +1 -1
- package/dist/ui/components/switch/switch.test.ts +464 -48
- package/dist/ui/components/switch/switch.ts +613 -43
- package/dist/ui/components/tabs/index.ts +7 -1
- package/dist/ui/components/tabs/tabs.test.ts +278 -2
- package/dist/ui/components/tabs/tabs.ts +233 -30
- package/dist/ui/components/textarea/textarea.ts +2 -1
- package/dist/ui/components/toggle/index.ts +1 -0
- package/dist/ui/components/toggle/toggle.test.ts +310 -4
- package/dist/ui/components/toggle/toggle.ts +241 -26
- package/dist/ui/components/toolbar/bar-scroll.test.ts +310 -0
- package/dist/ui/components/toolbar/bar-scroll.ts +372 -0
- package/dist/ui/components/toolbar/index.ts +12 -0
- package/dist/ui/components/toolbar/toolbar.test.ts +438 -0
- package/dist/ui/components/toolbar/toolbar.ts +535 -0
- package/dist/utils/analyze.d.ts +10 -5
- package/dist/utils/analyze.js +3 -2
- package/dist/utils/analyze.js.map +1 -1
- package/dist/utils/installed.d.ts +13 -1
- package/dist/utils/installed.js +17 -0
- package/dist/utils/installed.js.map +1 -1
- package/dist/utils/installed.test.js +39 -1
- package/dist/utils/installed.test.js.map +1 -1
- package/dist/utils/tailwind.d.ts +25 -5
- package/dist/utils/tailwind.js +53 -14
- package/dist/utils/tailwind.js.map +1 -1
- package/dist/utils/tailwind.test.js +85 -22
- package/dist/utils/tailwind.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,7 +3,8 @@ import { tmpdir } from 'node:os';
|
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { afterEach, describe, expect, it } from 'vitest';
|
|
5
5
|
import { createEmptyLockfile } from '../lockfile';
|
|
6
|
-
import {
|
|
6
|
+
import { onTailwind } from '../test-utils';
|
|
7
|
+
import { componentsOnDisk, droppedFiles, droppedThemeFiles, trackedComponents, untrackedComponents, } from './installed';
|
|
7
8
|
let root;
|
|
8
9
|
const componentsDir = (...folders) => {
|
|
9
10
|
root = mkdtempSync(join(tmpdir(), 'dolan-installed-'));
|
|
@@ -54,4 +55,41 @@ describe('droppedFiles', () => {
|
|
|
54
55
|
expect(droppedFiles('button', createEmptyLockfile())).toEqual([]);
|
|
55
56
|
});
|
|
56
57
|
});
|
|
58
|
+
describe('droppedThemeFiles', () => {
|
|
59
|
+
/**
|
|
60
|
+
* A project on this Tailwind version, without the testing library.
|
|
61
|
+
*/
|
|
62
|
+
const project = (tailwind) => {
|
|
63
|
+
root = mkdtempSync(join(tmpdir(), 'dolan-installed-'));
|
|
64
|
+
onTailwind(root, tailwind);
|
|
65
|
+
return root;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* A lockfile that records every theme file either version takes.
|
|
69
|
+
*/
|
|
70
|
+
const lockfile = () => {
|
|
71
|
+
const locked = createEmptyLockfile();
|
|
72
|
+
for (const file of [
|
|
73
|
+
'default.css',
|
|
74
|
+
'dark.css',
|
|
75
|
+
'tailwind.css',
|
|
76
|
+
'tailwind-plugin.ts',
|
|
77
|
+
'tailwind-plugin.test.ts',
|
|
78
|
+
]) {
|
|
79
|
+
locked.theme[file] = { hash: file };
|
|
80
|
+
}
|
|
81
|
+
return locked;
|
|
82
|
+
};
|
|
83
|
+
it('lists the Tailwind 3 plugin and its test on Tailwind 4', () => {
|
|
84
|
+
const cwd = project(4);
|
|
85
|
+
expect(droppedThemeFiles(cwd, cwd, lockfile())).toEqual([
|
|
86
|
+
'tailwind-plugin.ts',
|
|
87
|
+
'tailwind-plugin.test.ts',
|
|
88
|
+
]);
|
|
89
|
+
});
|
|
90
|
+
it("lists tailwind.css on Tailwind 3, but not the plugin's test a project without the testing library doesn't get", () => {
|
|
91
|
+
const cwd = project(3);
|
|
92
|
+
expect(droppedThemeFiles(cwd, cwd, lockfile())).toEqual(['tailwind.css']);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
57
95
|
//# sourceMappingURL=installed.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installed.test.js","sourceRoot":"","sources":["../../src/utils/installed.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"installed.test.js","sourceRoot":"","sources":["../../src/utils/installed.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/tailwind.d.ts
CHANGED
|
@@ -1,11 +1,31 @@
|
|
|
1
1
|
/** The config files Tailwind 3 reads. Tailwind 4 needs none. */
|
|
2
2
|
export declare const TAILWIND_CONFIG_FILES: string[];
|
|
3
|
+
/** The Tailwind config in the project's folder, if it has one. */
|
|
4
|
+
export declare const tailwindConfigFile: (cwd: string) => string | undefined;
|
|
3
5
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* The version of Tailwind CSS installed for the project, resolved from its
|
|
7
|
+
* folder as the build resolves it. Reading the project's package.json missed
|
|
8
|
+
* two setups that build fine: a workspace whose root installs `tailwindcss`
|
|
9
|
+
* for every package, and a Tailwind 4 app that lists only
|
|
10
|
+
* `@tailwindcss/postcss`, which depends on `tailwindcss` itself.
|
|
11
|
+
*
|
|
12
|
+
* npm hoists that dependency next to the plugin, where the app finds it.
|
|
13
|
+
* pnpm's strict layout keeps it out of the app's reach, so this looks from
|
|
14
|
+
* the plugin's own folder too. The build still finds it under pnpm: pnpm's
|
|
15
|
+
* bin scripts, `ng` among them, put the packages pnpm hoists on `NODE_PATH`,
|
|
16
|
+
* and Tailwind resolves the stylesheet's `@import 'tailwindcss'` against it.
|
|
17
|
+
* Undefined when neither finds it.
|
|
18
|
+
*/
|
|
19
|
+
export declare const installedTailwindVersion: (cwd: string) => string | undefined;
|
|
20
|
+
/** A version's major, `4` for `4.3.3`. */
|
|
21
|
+
export declare const majorVersion: (version: string) => number;
|
|
22
|
+
/**
|
|
23
|
+
* Whether the project is set up for Tailwind 4, where the stylesheet imports
|
|
24
|
+
* the theme's `tailwind.css` rather than `tailwind.config.ts` listing its
|
|
25
|
+
* plugin: it has no Tailwind config, and Tailwind 4 installed, as
|
|
26
|
+
* `ng add @blotch/angular-lynx` and `ng new --style=tailwind` set it up. A
|
|
27
|
+
* config means a Tailwind 3 setup, even with Tailwind 4 installed, as
|
|
28
|
+
* `doctor` warns.
|
|
9
29
|
*/
|
|
10
30
|
export declare const usesTailwind4: (cwd: string) => boolean;
|
|
11
31
|
/**
|
package/dist/utils/tailwind.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { existsSync
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
2
3
|
import { join } from 'node:path';
|
|
3
4
|
/** The config files Tailwind 3 reads. Tailwind 4 needs none. */
|
|
4
5
|
export const TAILWIND_CONFIG_FILES = [
|
|
@@ -7,27 +8,65 @@ export const TAILWIND_CONFIG_FILES = [
|
|
|
7
8
|
'tailwind.config.mjs',
|
|
8
9
|
'tailwind.config.cjs',
|
|
9
10
|
];
|
|
11
|
+
/** The Tailwind config in the project's folder, if it has one. */
|
|
12
|
+
export const tailwindConfigFile = (cwd) => TAILWIND_CONFIG_FILES.find((file) => existsSync(join(cwd, file)));
|
|
10
13
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* or on its PostCSS plugin, as `ng add @blotch/angular-lynx` and
|
|
15
|
-
* `ng new --style=tailwind` set it up.
|
|
14
|
+
* The version of `tailwindcss` that `require` finds, if any. Both majors'
|
|
15
|
+
* package.json resolve: Tailwind 3 has no `exports` map, and Tailwind 4's
|
|
16
|
+
* lists `./package.json`.
|
|
16
17
|
*/
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return
|
|
18
|
+
const tailwindVersion = (require) => {
|
|
19
|
+
try {
|
|
20
|
+
return require('tailwindcss/package.json').version;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return undefined;
|
|
20
24
|
}
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* The version of Tailwind CSS installed for the project, resolved from its
|
|
28
|
+
* folder as the build resolves it. Reading the project's package.json missed
|
|
29
|
+
* two setups that build fine: a workspace whose root installs `tailwindcss`
|
|
30
|
+
* for every package, and a Tailwind 4 app that lists only
|
|
31
|
+
* `@tailwindcss/postcss`, which depends on `tailwindcss` itself.
|
|
32
|
+
*
|
|
33
|
+
* npm hoists that dependency next to the plugin, where the app finds it.
|
|
34
|
+
* pnpm's strict layout keeps it out of the app's reach, so this looks from
|
|
35
|
+
* the plugin's own folder too. The build still finds it under pnpm: pnpm's
|
|
36
|
+
* bin scripts, `ng` among them, put the packages pnpm hoists on `NODE_PATH`,
|
|
37
|
+
* and Tailwind resolves the stylesheet's `@import 'tailwindcss'` against it.
|
|
38
|
+
* Undefined when neither finds it.
|
|
39
|
+
*/
|
|
40
|
+
export const installedTailwindVersion = (cwd) => {
|
|
41
|
+
const require = createRequire(join(cwd, 'package.json'));
|
|
42
|
+
const version = tailwindVersion(require);
|
|
43
|
+
if (version !== undefined)
|
|
44
|
+
return version;
|
|
21
45
|
try {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return Boolean(all['@tailwindcss/postcss']) || major >= 4;
|
|
46
|
+
// The plugin's `exports` map doesn't list its package.json, so this
|
|
47
|
+
// starts from its entry point.
|
|
48
|
+
return tailwindVersion(createRequire(require.resolve('@tailwindcss/postcss')));
|
|
26
49
|
}
|
|
27
50
|
catch {
|
|
28
|
-
return
|
|
51
|
+
return undefined;
|
|
29
52
|
}
|
|
30
53
|
};
|
|
54
|
+
/** A version's major, `4` for `4.3.3`. */
|
|
55
|
+
export const majorVersion = (version) => Number.parseInt(version, 10);
|
|
56
|
+
/**
|
|
57
|
+
* Whether the project is set up for Tailwind 4, where the stylesheet imports
|
|
58
|
+
* the theme's `tailwind.css` rather than `tailwind.config.ts` listing its
|
|
59
|
+
* plugin: it has no Tailwind config, and Tailwind 4 installed, as
|
|
60
|
+
* `ng add @blotch/angular-lynx` and `ng new --style=tailwind` set it up. A
|
|
61
|
+
* config means a Tailwind 3 setup, even with Tailwind 4 installed, as
|
|
62
|
+
* `doctor` warns.
|
|
63
|
+
*/
|
|
64
|
+
export const usesTailwind4 = (cwd) => {
|
|
65
|
+
if (tailwindConfigFile(cwd))
|
|
66
|
+
return false;
|
|
67
|
+
const version = installedTailwindVersion(cwd);
|
|
68
|
+
return version !== undefined && majorVersion(version) >= 4;
|
|
69
|
+
};
|
|
31
70
|
/**
|
|
32
71
|
* The theme files a project takes: the colors, and what maps them to
|
|
33
72
|
* Tailwind's utilities, `tailwind.css` for Tailwind 4 (imported in the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tailwind.js","sourceRoot":"","sources":["../../src/utils/tailwind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"tailwind.js","sourceRoot":"","sources":["../../src/utils/tailwind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,gEAAgE;AAChE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;CACtB,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAsB,EAAE,CACpE,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAEpE;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,OAAuB,EAAsB,EAAE;IACtE,IAAI,CAAC;QACH,OAAQ,OAAO,CAAC,0BAA0B,CAAyB,CAAC,OAAO,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAW,EAAsB,EAAE;IAC1E,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,CAAC;QACH,oEAAoE;QACpE,+BAA+B;QAC/B,OAAO,eAAe,CACpB,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CACvD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAU,EAAE,CACtD,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAE/B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAW,EAAE;IACpD,IAAI,kBAAkB,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,OAAO,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,OAAO,KAAK,SAAS,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,GAAW,EACX,EAAE,KAAK,GAAG,KAAK,KAA0B,EAAE,EACjC,EAAE,CACZ,aAAa,CAAC,GAAG,CAAC;IAChB,CAAC,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE,cAAc,CAAC;IAC7C,CAAC,CAAC;QACE,aAAa;QACb,UAAU;QACV,oBAAoB;QACpB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC"}
|
|
@@ -1,46 +1,109 @@
|
|
|
1
1
|
import { describe, expect, it, afterEach } from 'vitest';
|
|
2
|
-
import { existsSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { createFixture } from '../test-utils';
|
|
4
|
+
import { createFixture, installPackage } from '../test-utils';
|
|
5
5
|
import { getUiSourceDir } from './resolve-paths';
|
|
6
|
-
import { themeFilesFor, usesTailwind4 } from './tailwind';
|
|
7
|
-
let
|
|
6
|
+
import { installedTailwindVersion, majorVersion, tailwindConfigFile, themeFilesFor, usesTailwind4, } from './tailwind';
|
|
7
|
+
let fixtures = [];
|
|
8
8
|
afterEach(() => {
|
|
9
|
-
fixture
|
|
9
|
+
for (const fixture of fixtures)
|
|
10
|
+
fixture.cleanup();
|
|
11
|
+
fixtures = [];
|
|
10
12
|
});
|
|
11
13
|
/**
|
|
12
|
-
* A project with these
|
|
14
|
+
* A project with these packages installed, and these other files. Its
|
|
15
|
+
* package.json lists none of them: what's installed is what counts.
|
|
13
16
|
*/
|
|
14
|
-
const project = (
|
|
15
|
-
fixture = createFixture({});
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
const project = (installed = {}, files = {}) => {
|
|
18
|
+
const fixture = createFixture({});
|
|
19
|
+
fixtures.push(fixture);
|
|
20
|
+
writeFileSync(join(fixture.dir, 'package.json'), '{}');
|
|
21
|
+
for (const [name, version] of Object.entries(installed)) {
|
|
22
|
+
installPackage(fixture.dir, name, version);
|
|
18
23
|
}
|
|
19
24
|
for (const [file, content] of Object.entries(files)) {
|
|
20
25
|
writeFileSync(join(fixture.dir, file), content);
|
|
21
26
|
}
|
|
22
27
|
return fixture.dir;
|
|
23
28
|
};
|
|
29
|
+
/**
|
|
30
|
+
* A project that lists only `@tailwindcss/postcss`, with Tailwind in the
|
|
31
|
+
* plugin's own node_modules, out of the project's reach, as pnpm installs it.
|
|
32
|
+
*/
|
|
33
|
+
const postcssOnly = () => {
|
|
34
|
+
const dir = project();
|
|
35
|
+
installPackage(installPackage(dir, '@tailwindcss/postcss', '4.3.3'), 'tailwindcss', '4.3.3');
|
|
36
|
+
return dir;
|
|
37
|
+
};
|
|
38
|
+
describe('installedTailwindVersion', () => {
|
|
39
|
+
it("reads the version of the project's own Tailwind, 3 or 4", () => {
|
|
40
|
+
expect(installedTailwindVersion(project({ tailwindcss: '4.3.3' }))).toBe('4.3.3');
|
|
41
|
+
expect(installedTailwindVersion(project({ tailwindcss: '3.4.19' }))).toBe('3.4.19');
|
|
42
|
+
});
|
|
43
|
+
it('finds the Tailwind a workspace root installs', () => {
|
|
44
|
+
// The app's package.json lists no Tailwind: the root's is every package's.
|
|
45
|
+
const root = project({ tailwindcss: '4.3.3' });
|
|
46
|
+
const app = join(root, 'apps', 'app');
|
|
47
|
+
mkdirSync(app, { recursive: true });
|
|
48
|
+
writeFileSync(join(app, 'package.json'), '{}');
|
|
49
|
+
expect(installedTailwindVersion(app)).toBe('4.3.3');
|
|
50
|
+
});
|
|
51
|
+
it('finds the Tailwind @tailwindcss/postcss depends on, hoisted next to it', () => {
|
|
52
|
+
// npm's layout: the plugin's dependency sits in the app's node_modules.
|
|
53
|
+
expect(installedTailwindVersion(project({ '@tailwindcss/postcss': '4.3.3', tailwindcss: '4.3.3' }))).toBe('4.3.3');
|
|
54
|
+
});
|
|
55
|
+
it("finds it from the plugin's own folder when the project can't", () => {
|
|
56
|
+
expect(installedTailwindVersion(postcssOnly())).toBe('4.3.3');
|
|
57
|
+
});
|
|
58
|
+
it("prefers the project's own Tailwind to the plugin's", () => {
|
|
59
|
+
// What the stylesheet's `@import 'tailwindcss'` finds first.
|
|
60
|
+
const dir = project({ tailwindcss: '4.2.0' });
|
|
61
|
+
installPackage(installPackage(dir, '@tailwindcss/postcss', '4.3.3'), 'tailwindcss', '4.3.3');
|
|
62
|
+
expect(installedTailwindVersion(dir)).toBe('4.2.0');
|
|
63
|
+
});
|
|
64
|
+
it('is undefined without Tailwind, even when the plugin is there', () => {
|
|
65
|
+
expect(installedTailwindVersion(project())).toBeUndefined();
|
|
66
|
+
expect(installedTailwindVersion(project({ '@tailwindcss/postcss': '4.3.3' }))).toBeUndefined();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('majorVersion', () => {
|
|
70
|
+
it("reads a version's major", () => {
|
|
71
|
+
expect(majorVersion('4.3.3')).toBe(4);
|
|
72
|
+
expect(majorVersion('3.4.19')).toBe(3);
|
|
73
|
+
expect(majorVersion('4.0.0-beta.1')).toBe(4);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe('tailwindConfigFile', () => {
|
|
77
|
+
it('names the Tailwind config in the project, if any', () => {
|
|
78
|
+
expect(tailwindConfigFile(project({}, { 'tailwind.config.js': '' }))).toBe('tailwind.config.js');
|
|
79
|
+
expect(tailwindConfigFile(project())).toBeUndefined();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
24
82
|
describe('usesTailwind4', () => {
|
|
25
|
-
it('is true for a project
|
|
26
|
-
expect(usesTailwind4(project({ tailwindcss: '
|
|
27
|
-
expect(usesTailwind4(
|
|
83
|
+
it('is true for a project with Tailwind 4 installed and no Tailwind config', () => {
|
|
84
|
+
expect(usesTailwind4(project({ tailwindcss: '4.3.3' }))).toBe(true);
|
|
85
|
+
expect(usesTailwind4(postcssOnly())).toBe(true);
|
|
28
86
|
});
|
|
29
87
|
it('is false for Tailwind 3, a Tailwind config, or no Tailwind', () => {
|
|
30
|
-
expect(usesTailwind4(project({ tailwindcss: '
|
|
31
|
-
|
|
32
|
-
expect(usesTailwind4(project({}))).toBe(false);
|
|
33
|
-
expect(usesTailwind4(project(
|
|
88
|
+
expect(usesTailwind4(project({ tailwindcss: '3.4.19' }))).toBe(false);
|
|
89
|
+
// A config is a Tailwind 3 setup, whatever's installed.
|
|
90
|
+
expect(usesTailwind4(project({ tailwindcss: '4.3.3' }, { 'tailwind.config.js': '' }))).toBe(false);
|
|
91
|
+
expect(usesTailwind4(project())).toBe(false);
|
|
92
|
+
});
|
|
93
|
+
it('reads the installed version, not the one package.json asks for', () => {
|
|
94
|
+
const dir = project({ tailwindcss: '3.4.19' });
|
|
95
|
+
writeFileSync(join(dir, 'package.json'), JSON.stringify({ devDependencies: { tailwindcss: '^4.3.3' } }));
|
|
96
|
+
expect(usesTailwind4(dir)).toBe(false);
|
|
34
97
|
});
|
|
35
98
|
});
|
|
36
99
|
describe('themeFilesFor', () => {
|
|
37
100
|
it('takes tailwind.css on Tailwind 4, and the config plugin on Tailwind 3', () => {
|
|
38
|
-
expect(themeFilesFor(project({ tailwindcss: '
|
|
101
|
+
expect(themeFilesFor(project({ tailwindcss: '4.3.3' }))).toEqual([
|
|
39
102
|
'default.css',
|
|
40
103
|
'dark.css',
|
|
41
104
|
'tailwind.css',
|
|
42
105
|
]);
|
|
43
|
-
expect(themeFilesFor(project({ tailwindcss: '
|
|
106
|
+
expect(themeFilesFor(project({ tailwindcss: '3.4.19' }))).toEqual([
|
|
44
107
|
'default.css',
|
|
45
108
|
'dark.css',
|
|
46
109
|
'tailwind-plugin.ts',
|
|
@@ -49,16 +112,16 @@ describe('themeFilesFor', () => {
|
|
|
49
112
|
it("adds the Tailwind plugin's test with the components' tests", () => {
|
|
50
113
|
// It covers the plugin in the app's coverage report. Tailwind 4's
|
|
51
114
|
// tailwind.css has no code to cover.
|
|
52
|
-
expect(themeFilesFor(project({ tailwindcss: '
|
|
115
|
+
expect(themeFilesFor(project({ tailwindcss: '3.4.19' }), { tests: true })).toEqual([
|
|
53
116
|
'default.css',
|
|
54
117
|
'dark.css',
|
|
55
118
|
'tailwind-plugin.ts',
|
|
56
119
|
'tailwind-plugin.test.ts',
|
|
57
120
|
]);
|
|
58
|
-
expect(themeFilesFor(project({ tailwindcss: '
|
|
121
|
+
expect(themeFilesFor(project({ tailwindcss: '4.3.3' }), { tests: true })).toEqual(['default.css', 'dark.css', 'tailwind.css']);
|
|
59
122
|
});
|
|
60
123
|
it('lists only files the theme folder has', () => {
|
|
61
|
-
for (const version of ['
|
|
124
|
+
for (const version of ['3.4.19', '4.3.3']) {
|
|
62
125
|
const files = themeFilesFor(project({ tailwindcss: version }), {
|
|
63
126
|
tests: true,
|
|
64
127
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tailwind.test.js","sourceRoot":"","sources":["../../src/utils/tailwind.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"tailwind.test.js","sourceRoot":"","sources":["../../src/utils/tailwind.test.ts"],"names":[],"mappings":"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"}
|