mantine-reduce-css 2.3.2 → 2.3.3

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 (3) hide show
  1. package/README.md +84 -50
  2. package/dist/index.js +96 -70
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,45 +1,44 @@
1
1
  # mantine-reduce-css
2
2
 
3
- A CLI tool for generating reduced Mantine CSS bundles based on your project’s component usage.
3
+ A CLI tool designed to optimize your production build by generating a reduced Mantine CSS bundle. It scans your project files to detect which components are actually used and generates a CSS file containing only the necessary styles.
4
+
5
+ ## Version Compatibility
6
+
7
+ Since version 2, this package aligns with Mantine's minor versioning to ensure compatibility.
8
+
9
+ | mantine-reduce-css | @mantine/core |
10
+ | :----------------- | :------------ |
11
+ | `2.3.x` | `8.3.x` |
12
+ | `2.4.x` | `8.4.x` |
4
13
 
5
14
  ## Installation
6
15
 
16
+ You can install the tool globally or as a dev dependency in your project.
17
+
7
18
  ```sh
8
19
  npm install -g mantine-reduce-css
9
20
  ```
10
21
 
11
- ## Mantine Version
12
-
13
- Since version 2, this package follows Mantine's minor version updates.
14
- Example: `mantine-reduce-css@2.3.x` is compatible with `@mantine/core@8.3.x`.
15
-
16
22
  ## Usage
17
23
 
18
- ### Generate Reduced CSS
24
+ Run the following command in your terminal to generate the CSS file. By default, the tool looks for configuration in your `package.json`.
19
25
 
20
- ```sh
26
+ ```bash
21
27
  mantine-reduce-css --config <path-to-config>
22
28
  ```
23
29
 
24
- ### Export Component Data
25
-
26
- To export component data for custom packages, use:
27
-
28
- ```sh
29
- mantine-reduce-css gen --config <path-to-config>
30
- ```
30
+ ### Configuration
31
31
 
32
- ## Configuration
32
+ Add a mantineReduceCss section to your `package.json` or create a standalone JSON configuration file.
33
33
 
34
- Add a `mantineReduceCss` section to your config file (e.g., `package.json` or a separate JSON file):
34
+ #### Example Configuration
35
35
 
36
36
  ```json
37
37
  {
38
38
  "mantineReduceCss": {
39
- "target": [
40
- "src/**/*.tsx"
41
- ],
39
+ "target": ["src/**/*.tsx"],
42
40
  "globalCss": true,
41
+ "outputPath": "mantine.css",
43
42
  "extensions": {
44
43
  "CodeHighlight": false,
45
44
  "NotificationsSystem": false,
@@ -50,57 +49,92 @@ Add a `mantineReduceCss` section to your config file (e.g., `package.json` or a
50
49
  "ModalsManager": false,
51
50
  "RichTextEditor": false
52
51
  },
53
- "outputPath": "mantine.css",
54
- "extend": [
55
- {
56
- "package": "@custom",
57
- "data": "custom-components.json"
58
- }
59
- ]
52
+ "extend": []
60
53
  }
61
54
  }
62
55
  ```
63
56
 
64
- ### Options
57
+ ### Options Reference
58
+
59
+ | Option | Type | Required | Description |
60
+ | ---------- | -------- | -------- | -------------------------------------------------------------------------------------------------------- |
61
+ | target | string[] | Yes | An array of glob patterns (e.g., `src/**/*.tsx`) to scan for Mantine imports. |
62
+ | outputPath | string | Yes | The file path where the generated CSS will be written. |
63
+ | globalCss | boolean | No | Whether to include Mantine's global reset and base styles. Default: `true`. |
64
+ | extensions | object | No | Enable specific Mantine extension packages (e.g., Carousel, Dropzone). All default to `false`. |
65
+ | extend | object[] | No | An array of configurations for custom/shared component libraries. See *Handling Custom Libraries* below. |
66
+
67
+ ## Handling Custom Libraries (Extend)
68
+
69
+ If you use a shared component library (e.g., an internal design system) that relies on Mantine, mantine-reduce-css needs to know which Mantine components your shared library uses.
70
+
71
+ ### Method 1: Automatic Generation
72
+
73
+ You can automatically generate the map if your library meets these constraints:
65
74
 
66
- - **target**: Array of glob patterns for files to scan for Mantine imports (required)
67
- - **globalCss**: Include Mantine global CSS (default: true)
68
- - **extensions**: Enable Mantine extension packages (all default to false)
69
- - **outputPath**: Path to write the generated CSS file (required)
70
- - **extend**: Array of objects to extend with custom component data (optional)
71
- - **package**: Name of the custom package
72
- - **data**: Path to a JSON file containing exported component data
75
+ 1. Filename matches Component Name (e.g., Button.tsx exports Button).
76
+ 2. No Deep Dependencies (it implies the component directly imports Mantine, not via another wrapper).
73
77
 
74
- ### Export Config
78
+ In your shared library project, configure genExtend to scan your library's components and output a JSON map.
75
79
 
76
- For exporting component data, use:
80
+ #### Run the generation command
81
+
82
+ ```bash
83
+ mantine-reduce-css gen --config <path-to-config>
84
+ ```
85
+
86
+ #### Configuration for generation
77
87
 
78
88
  ```json
79
89
  {
80
90
  "mantineReduceCss": {
81
- "target": [
82
- "src/components/**/*.tsx"
83
- ],
84
- "outputPath": "exported-components.json",
85
- "packageName": "@custom"
91
+ "genExtend": [
92
+ {
93
+ "target": ["src/components/**/*.tsx"],
94
+ "outputPath": "exported-components.json",
95
+ "packageName": "@custom/ui"
96
+ }
97
+ ]
86
98
  }
87
99
  }
88
100
  ```
89
101
 
90
- ## Example
102
+ ### Method 2: Manual Mapping
91
103
 
92
- To generate CSS for your project:
104
+ If your library does not meet the constraints above (e.g., it uses deep nesting or mismatched filenames), automatic generation will fail to detect usage. You must manually create the JSON map:
93
105
 
94
- ```sh
95
- mantine-reduce-css --config test/test-simple.json
106
+ ```json
107
+ [
108
+ {
109
+ "name": "CustomButton",
110
+ "module": "@custom/ui",
111
+ "dependency": [
112
+ "@mantine/core/Stack",
113
+ "@mantine/core/Button"
114
+ ]
115
+ }
116
+ ]
96
117
  ```
97
118
 
98
- To export component data:
119
+ ### Consume Component Map
99
120
 
100
- ```sh
101
- mantine-reduce-css gen --config test/test-export.json
121
+ In your main application (where you are generating the final CSS), point the extend option to the JSON file created in the previous step (Method 1 or Method 2).
122
+
123
+ ```json
124
+ {
125
+ "mantineReduceCss": {
126
+ "target": ["src/**/*.tsx"],
127
+ "outputPath": "styles/mantine.css",
128
+ "extend": [
129
+ {
130
+ "package": "@custom/ui",
131
+ "data": "./node_modules/@custom/ui/exported-components.json"
132
+ }
133
+ ]
134
+ }
135
+ }
102
136
  ```
103
137
 
104
138
  ## License
105
139
 
106
- MIT
140
+ MIT
package/dist/index.js CHANGED
@@ -624,7 +624,7 @@ class CAC extends EventEmitter {
624
624
 
625
625
  const cac = (name = "") => new CAC(name);
626
626
 
627
- var version = "2.3.2";
627
+ var version = "2.3.3";
628
628
 
629
629
  /* es-module-lexer 1.7.0 */
630
630
  var ImportType;!function(A){A[A.Static=1]="Static",A[A.Dynamic=2]="Dynamic",A[A.ImportMeta=3]="ImportMeta",A[A.StaticSourcePhase=4]="StaticSourcePhase",A[A.DynamicSourcePhase=5]="DynamicSourcePhase",A[A.StaticDeferPhase=6]="StaticDeferPhase",A[A.DynamicDeferPhase=7]="DynamicDeferPhase";}(ImportType||(ImportType={}));const A=1===new Uint8Array(new Uint16Array([1]).buffer)[0];function parse$1(E,g="@"){if(!C)return init.then((()=>parse$1(E)));const I=E.length+1,w=(C.__heap_base.value||C.__heap_base)+4*I-C.memory.buffer.byteLength;w>0&&C.memory.grow(Math.ceil(w/65536));const K=C.sa(I-1);if((A?B:Q)(E,new Uint16Array(C.memory.buffer,K,I)),!C.parse())throw Object.assign(new Error(`Parse error ${g}:${E.slice(0,C.e()).split("\n").length}:${C.e()-E.lastIndexOf("\n",C.e()-1)}`),{idx:C.e()});const o=[],D=[];for(;C.ri();){const A=C.is(),Q=C.ie(),B=C.it(),g=C.ai(),I=C.id(),w=C.ss(),K=C.se();let D;C.ip()&&(D=k(E.slice(-1===I?A-1:A,-1===I?Q+1:Q))),o.push({n:D,t:B,s:A,e:Q,ss:w,se:K,d:I,a:g});}for(;C.re();){const A=C.es(),Q=C.ee(),B=C.els(),g=C.ele(),I=E.slice(A,Q),w=I[0],K=B<0?void 0:E.slice(B,g),o=K?K[0]:"";D.push({s:A,e:Q,ls:B,le:g,n:'"'===w||"'"===w?k(I):I,ln:'"'===o||"'"===o?k(K):K});}function k(A){try{return (0,eval)(A)}catch(A){}}return [o,D,!!C.f(),!!C.ms()]}function Q(A,Q){const B=A.length;let C=0;for(;C<B;){const B=A.charCodeAt(C);Q[C++]=(255&B)<<8|B>>>8;}}function B(A,Q){const B=A.length;let C=0;for(;C<B;)Q[C]=A.charCodeAt(C++);}let C;const E=()=>{return A="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GzYCHAtBAEEAKAKwCkECajYCsAoCQAJAAkACQEEAECkiAUHhAEYNACABQfcARg0BQQAoArAKIQEMAgtBACgCsAoiAUECakHACEEKEC8NAUEGIQIMAgtBACgCsAoiAS8BAkHpAEcNACABLwEEQfQARw0AQQQhAiABLwEGQegARg0BC0EAIAFBfmo2ArAKDwtBACABIAJBAXRqNgKwCgJAQQEQKUH7AEYNAEEAIAE2ArAKDwtBACgCsAoiACECA0BBACACQQJqNgKwCgJAAkACQEEBECkiAkEiRg0AIAJBJ0cNAUEnEBpBAEEAKAKwCkECajYCsApBARApIQIMAgtBIhAaQQBBACgCsApBAmo2ArAKQQEQKSECDAELIAIQLCECCwJAIAJBOkYNAEEAIAE2ArAKDwtBAEEAKAKwCkECajYCsAoCQEEBECkiAkEiRg0AIAJBJ0YNAEEAIAE2ArAKDwsgAhAaQQBBACgCsApBAmo2ArAKAkACQEEBECkiAkEsRg0AIAJB/QBGDQFBACABNgKwCg8LQQBBACgCsApBAmo2ArAKQQEQKUH9AEYNAEEAKAKwCiECDAELC0EAKALwCSIBIAA2AhAgAUEAKAKwCkECajYCDAttAQJ/AkACQANAAkAgAEH//wNxIgFBd2oiAkEXSw0AQQEgAnRBn4CABHENAgsgAUGgAUYNASAAIQIgARAoDQJBACECQQBBACgCsAoiAEECajYCsAogAC8BAiIADQAMAgsLIAAhAgsgAkH//wNxC6sBAQR/AkACQEEAKAKwCiICLwEAIgNB4QBGDQAgASEEIAAhBQwBC0EAIAJBBGo2ArAKQQEQKSECQQAoArAKIQUCQAJAIAJBIkYNACACQSdGDQAgAhAsGkEAKAKwCiEEDAELIAIQGkEAQQAoArAKQQJqIgQ2ArAKC0EBECkhA0EAKAKwCiECCwJAIAIgBUYNACAFIARBACAAIAAgAUYiAhtBACABIAIbEAILIAMLcgEEf0EAKAKwCiEAQQAoArQKIQECQAJAA0AgAEECaiECIAAgAU8NAQJAAkAgAi8BACIDQaR/ag4CAQQACyACIQAgA0F2ag4EAgEBAgELIABBBGohAAwACwtBACACNgKwChAlQQAPC0EAIAI2ArAKQd0AC0kBA39BACEDAkAgAkUNAAJAA0AgAC0AACIEIAEtAAAiBUcNASABQQFqIQEgAEEBaiEAIAJBf2oiAg0ADAILCyAEIAVrIQMLIAMLC+wBAgBBgAgLzgEAAHgAcABvAHIAdABtAHAAbwByAHQAZgBvAHIAZQB0AGEAbwB1AHIAYwBlAHIAbwBtAHUAbgBjAHQAaQBvAG4AcwBzAGUAcgB0AHYAbwB5AGkAZQBkAGUAbABlAGMAbwBuAHQAaQBuAGkAbgBzAHQAYQBuAHQAeQBiAHIAZQBhAHIAZQB0AHUAcgBkAGUAYgB1AGcAZwBlAGEAdwBhAGkAdABoAHIAdwBoAGkAbABlAGkAZgBjAGEAdABjAGYAaQBuAGEAbABsAGUAbABzAABB0AkLEAEAAAACAAAAAAQAAEA5AAA=","undefined"!=typeof Buffer?Buffer.from(A,"base64"):Uint8Array.from(atob(A),(A=>A.charCodeAt(0)));var A;};const init=WebAssembly.compile(E()).then(WebAssembly.instantiate).then((({exports:A})=>{C=A;}));
@@ -7988,37 +7988,39 @@ function ExtractFunctionNames(importStatement) {
7988
7988
  async function ExportCmd(props) {
7989
7989
  await init;
7990
7990
  const projectRoot = path$1.dirname(props.packageJsonPath);
7991
- const files = await fg(props.config.target, { cwd: projectRoot });
7992
- const result = [];
7993
- try {
7994
- for (const file of files) {
7995
- const filePath = path$1.join(projectRoot, file);
7996
- const content = readFileSync$1(filePath, "utf-8");
7997
- const [imports] = parse$1(content);
7998
- const dependencies = [];
7999
- for (const imp of imports) {
8000
- if (imp.n && MANTINE_PACKAGE.has(imp.n)) {
8001
- const statement = content.substring(imp.ss, imp.se);
8002
- const functionNames = ExtractFunctionNames(statement);
8003
- for (const fn of functionNames) {
8004
- dependencies.push(`${imp.n}/${fn}`);
7991
+ for (const config of props.configs) {
7992
+ const files = await fg(config.target, { cwd: projectRoot });
7993
+ const result = [];
7994
+ try {
7995
+ for (const file of files) {
7996
+ const filePath = path$1.join(projectRoot, file);
7997
+ const content = readFileSync$1(filePath, "utf-8");
7998
+ const [imports] = parse$1(content);
7999
+ const dependencies = [];
8000
+ for (const imp of imports) {
8001
+ if (imp.n && MANTINE_PACKAGE.has(imp.n)) {
8002
+ const statement = content.substring(imp.ss, imp.se);
8003
+ const functionNames = ExtractFunctionNames(statement);
8004
+ for (const fn of functionNames) {
8005
+ dependencies.push(`${imp.n}/${fn}`);
8006
+ }
8005
8007
  }
8006
8008
  }
8009
+ result.push({
8010
+ name: path$1.basename(file, path$1.extname(file)),
8011
+ module: config.packageName,
8012
+ dependency: dependencies,
8013
+ });
8007
8014
  }
8008
- result.push({
8009
- name: path$1.basename(file, path$1.extname(file)),
8010
- module: props.config.packageName,
8011
- dependency: dependencies,
8012
- });
8015
+ const outputPath = path$1.resolve(path$1.dirname(props.packageJsonPath), config.outputPath);
8016
+ const outputDir = path$1.dirname(outputPath);
8017
+ accessSync(outputDir, F_OK);
8018
+ writeFileSync(outputPath, JSON.stringify(result), "utf-8");
8019
+ console.info(`Exported ${result.length} components to ${outputPath}`);
8020
+ }
8021
+ catch (error) {
8022
+ console.error(`Could not process file: ${props.packageJsonPath}`, error);
8013
8023
  }
8014
- const outputPath = path$1.resolve(path$1.dirname(props.packageJsonPath), props.config.outputPath);
8015
- const outputDir = path$1.dirname(outputPath);
8016
- accessSync(outputDir, F_OK);
8017
- writeFileSync(outputPath, JSON.stringify(result), "utf-8");
8018
- console.info(`Exported ${result.length} components to ${outputPath}`);
8019
- }
8020
- catch (error) {
8021
- console.error(`Could not process file: ${props.packageJsonPath}`, error);
8022
8024
  }
8023
8025
  }
8024
8026
 
@@ -10404,18 +10406,21 @@ const defaultExtensions = {
10404
10406
  ModalsManager: false,
10405
10407
  RichTextEditor: false,
10406
10408
  };
10407
- function parseGenerateConfig({ configPath, configData, }) {
10409
+ function parseConfig({ configPath, configData, }) {
10408
10410
  const mantineReduceCss = configData.mantineReduceCss;
10409
- if (!mantineReduceCss) {
10410
- throw new Error("Missing 'mantineReduceCss' configuration in package.json");
10411
+ if (!mantineReduceCss || typeof mantineReduceCss !== "object") {
10412
+ throw new Error("Missing or invalid 'mantineReduceCss' configuration in package.json");
10411
10413
  }
10412
- const { target, outputPath, globalCss = true, extensions = {}, extend, } = mantineReduceCss;
10414
+ const config = mantineReduceCss;
10413
10415
  let extendArr = [];
10414
- if (extend) {
10415
- if (!Array.isArray(extend)) {
10416
+ if (config.extend) {
10417
+ if (!Array.isArray(config.extend)) {
10416
10418
  throw new Error("'extend' must be an array in 'mantineReduceCss' configuration");
10417
10419
  }
10418
- extendArr = extend.map((ext) => {
10420
+ extendArr = config.extend.map((ext) => {
10421
+ if (!ext.data || typeof ext.data !== "string") {
10422
+ throw new Error("'extend.data' must be a string path");
10423
+ }
10419
10424
  const resolvedPath = path$1.resolve(path$1.dirname(configPath), ext.data);
10420
10425
  if (!fs$4.existsSync(resolvedPath) || !fs$4.statSync(resolvedPath).isFile()) {
10421
10426
  throw new Error(`'extend.data' must be a valid file path: ${resolvedPath}`);
@@ -10423,44 +10428,62 @@ function parseGenerateConfig({ configPath, configData, }) {
10423
10428
  return { ...ext, data: resolvedPath };
10424
10429
  });
10425
10430
  }
10426
- if (!target || !Array.isArray(target) || target.length === 0) {
10427
- throw new Error("'target' must be a non-empty array in 'mantineReduceCss' configuration");
10428
- }
10429
- if (!outputPath || typeof outputPath !== "string") {
10430
- throw new Error("'outputPath' must be a string in 'mantineReduceCss' configuration");
10431
- }
10431
+ const extensions = config.extensions || {};
10432
10432
  const mergedExtensions = {
10433
10433
  ...defaultExtensions,
10434
10434
  ...extensions,
10435
10435
  };
10436
- return {
10437
- target,
10438
- outputPath,
10439
- globalCss,
10440
- extensions: mergedExtensions,
10441
- extend: extendArr,
10442
- };
10443
- }
10444
- function ParseExportConfig({ configData, }) {
10445
- const mantineReduceCss = configData.mantineReduceCss;
10446
- if (!mantineReduceCss) {
10447
- throw new Error("Missing 'mantineReduceCss' configuration in package.json");
10448
- }
10449
- const { target, packageName, outputPath } = mantineReduceCss;
10450
- if (!target || !Array.isArray(target) || target.length === 0) {
10451
- throw new Error("'target' must be a non-empty array in 'mantineReduceCss' configuration");
10452
- }
10453
- if (!packageName || typeof packageName !== "string") {
10454
- throw new Error("'packageName' must be a string in 'mantineReduceCss' configuration");
10436
+ const globalCss = config.globalCss ?? true;
10437
+ if (config.genExtend) {
10438
+ if (!Array.isArray(config.genExtend)) {
10439
+ throw new Error("'genExtend' must be an array in 'mantineReduceCss' configuration");
10440
+ }
10441
+ const genExtendArr = config.genExtend.map((genExt) => {
10442
+ if (!genExt.target ||
10443
+ !Array.isArray(genExt.target) ||
10444
+ genExt.target.length === 0) {
10445
+ throw new Error("'genExtend.target' must be a non-empty array");
10446
+ }
10447
+ if (!genExt.packageName || typeof genExt.packageName !== "string") {
10448
+ throw new Error("'genExtend.packageName' must be a non-empty string");
10449
+ }
10450
+ if (!genExt.outputPath || typeof genExt.outputPath !== "string") {
10451
+ throw new Error("'genExtend.outputPath' must be a non-empty string");
10452
+ }
10453
+ return genExt;
10454
+ });
10455
+ // Optional validations for target/outputPath in this mode
10456
+ const target = Array.isArray(config.target)
10457
+ ? config.target
10458
+ : undefined;
10459
+ const outputPath = typeof config.outputPath === "string" ? config.outputPath : undefined;
10460
+ return {
10461
+ target,
10462
+ outputPath,
10463
+ globalCss,
10464
+ extensions: mergedExtensions,
10465
+ extend: extendArr,
10466
+ genExtend: genExtendArr,
10467
+ };
10455
10468
  }
10456
- if (!outputPath || typeof outputPath !== "string") {
10457
- throw new Error("'outputPath' must be a string in 'mantineReduceCss' configuration");
10469
+ else {
10470
+ if (!config.target ||
10471
+ !Array.isArray(config.target) ||
10472
+ config.target.length === 0) {
10473
+ throw new Error("'target' must be a non-empty array in 'mantineReduceCss' configuration");
10474
+ }
10475
+ if (!config.outputPath || typeof config.outputPath !== "string") {
10476
+ throw new Error("'outputPath' must be a string in 'mantineReduceCss' configuration");
10477
+ }
10478
+ return {
10479
+ target: config.target,
10480
+ outputPath: config.outputPath,
10481
+ globalCss,
10482
+ extensions: mergedExtensions,
10483
+ extend: extendArr,
10484
+ genExtend: [],
10485
+ };
10458
10486
  }
10459
- return {
10460
- packageName,
10461
- target,
10462
- outputPath,
10463
- };
10464
10487
  }
10465
10488
 
10466
10489
  const cli = cac("mantine-reduce-css");
@@ -10471,7 +10494,7 @@ cli.command("[options]", "Generate CSS file").action(async () => {
10471
10494
  const configPath = resolve(process.cwd(), cli.options.config);
10472
10495
  const configContents = await fs$4.promises.readFile(configPath, "utf-8");
10473
10496
  const configData = await JSON.parse(configContents);
10474
- const config = parseGenerateConfig({ configPath, configData });
10497
+ const config = parseConfig({ configPath, configData });
10475
10498
  await GenerateCmd({
10476
10499
  packageJsonPath: configPath,
10477
10500
  config: config,
@@ -10481,10 +10504,13 @@ cli.command("gen [options]", "Export component data").action(async () => {
10481
10504
  const configPath = resolve(process.cwd(), cli.options.config);
10482
10505
  const configContents = await fs$4.promises.readFile(configPath, "utf-8");
10483
10506
  const configData = await JSON.parse(configContents);
10484
- const config = ParseExportConfig({ configData });
10507
+ const config = parseConfig({ configPath, configData }).genExtend;
10508
+ if (!config) {
10509
+ throw new Error("No 'genExtend' configuration found for export command");
10510
+ }
10485
10511
  await ExportCmd({
10486
10512
  packageJsonPath: configPath,
10487
- config: config,
10513
+ configs: config,
10488
10514
  });
10489
10515
  });
10490
10516
  cli.help();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mantine-reduce-css",
3
3
  "type": "module",
4
- "version": "2.3.2",
4
+ "version": "2.3.3",
5
5
  "description": "cli tool for reducing global css for mantine",
6
6
  "main": "dist/index.js",
7
7
  "bin": {