@charcoal-ui/icons-cli 4.13.0 → 4.14.0-beta.0
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/package.json +7 -4
- package/src/v2/transformCSS.ts +89 -27
- package/src/v2/transformDataUri.ts +5 -1
- package/src/v2/transformReact.ts +9 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@charcoal-ui/icons-cli",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.14.0-beta.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"bin": "./dist/index.js",
|
|
6
6
|
"devDependencies": {
|
|
@@ -46,9 +46,12 @@
|
|
|
46
46
|
"gitHead": "e1ece2e43901ae667afdd5c178040607d939dcd5",
|
|
47
47
|
"scripts": {
|
|
48
48
|
"build": "FORCE_COLOR=1 tsup-node",
|
|
49
|
-
"build:react": "pnpm svgr ../icon-files/v2/svg/ --out-dir ../icons/src/react/v2 --typescript --ref --no-index --no-svgo && OUTPUT_ROOT_DIR=../icons/src/react/v2 pnpm tsx src/v2/transformReact.ts",
|
|
50
|
-
"build:
|
|
51
|
-
"build:
|
|
49
|
+
"build:react": "pnpm svgr ../icon-files/v2/svg/ --out-dir ../icons/src/react/v2 --typescript --ref --no-index --no-svgo && OUTPUT_ROOT_DIR=../icons/src/react/v2 VERSION=v2 pnpm tsx src/v2/transformReact.ts",
|
|
50
|
+
"build:react-v1": "pnpm svgr ../icon-files/svg/ --out-dir ../icons/src/react/v1 --typescript --ref --no-index --no-svgo && OUTPUT_ROOT_DIR=../icons/src/react/v1 VERSION=v1 pnpm tsx src/v2/transformReact.ts",
|
|
51
|
+
"build:css": "VERSION=v2 SOURCE_ROOT_DIR=../../../icon-files/v2/svg/ OUTPUT_ROOT_DIR=../../../icons/css/v2 pnpm tsx src/v2/transformCSS.ts",
|
|
52
|
+
"build:css-v1": "VERSION=v1 SOURCE_ROOT_DIR=../../../icon-files/svg/ OUTPUT_ROOT_DIR=../icons/css/v1 pnpm tsx src/v2/transformCSS.ts",
|
|
53
|
+
"build:uri": "SOURCE_ROOT_DIR=../../../icon-files/v2/svg/ OUTPUT_ROOT_DIR=../icon-files/v2-datauri pnpm tsx src/v2/transformDataUri.ts",
|
|
54
|
+
"build:uri-v1": "SOURCE_ROOT_DIR=../../../icon-files/svg/ OUTPUT_ROOT_DIR=../icon-files/v1-datauri pnpm tsx src/v2/transformDataUri.ts",
|
|
52
55
|
"typecheck": "tsc --project tsconfig.build.json --pretty --noEmit",
|
|
53
56
|
"clean": "rimraf dist .tsbuildinfo",
|
|
54
57
|
"cli:icons": "./dist/index.js",
|
package/src/v2/transformCSS.ts
CHANGED
|
@@ -4,28 +4,58 @@ import { readFile, writeFile, ensureDir } from 'fs-extra'
|
|
|
4
4
|
import path from 'path'
|
|
5
5
|
import { escape } from 'querystring'
|
|
6
6
|
|
|
7
|
-
async function
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
async function transformV2(filePath: string, fileName: string) {
|
|
8
|
+
const content = await readFile(filePath, 'utf-8')
|
|
9
|
+
const [size, variant, name] = fileName.split('/')
|
|
10
|
+
const cssName = [
|
|
11
|
+
'charcoal-icon',
|
|
12
|
+
name.toLowerCase().replace('.svg', '').replaceAll('.', '-'),
|
|
13
|
+
...(variant === 'regular' ? [] : [variant]),
|
|
14
|
+
...(size === '24' ? [] : [size]),
|
|
15
|
+
].join('-')
|
|
16
|
+
const css = content.includes('<def')
|
|
17
|
+
? `
|
|
18
|
+
.${cssName} {
|
|
19
|
+
display: inline-block;
|
|
20
|
+
width: 1em;
|
|
21
|
+
height: 1em;
|
|
22
|
+
background: url('data:image/svg+xml;utf8,${escape(content).replace(
|
|
23
|
+
"'",
|
|
24
|
+
"\\'"
|
|
25
|
+
)}');
|
|
26
|
+
aspect-ratio: 1/1;
|
|
27
|
+
}`
|
|
28
|
+
: `
|
|
29
|
+
.${cssName} {
|
|
30
|
+
display: inline-block;
|
|
31
|
+
width: 1em;
|
|
32
|
+
height: 1em;
|
|
33
|
+
mask-image: url('data:image/svg+xml;utf8,${escape(content).replace(
|
|
34
|
+
"'",
|
|
35
|
+
"\\'"
|
|
36
|
+
)}');
|
|
37
|
+
mask-size: 100% 100%;
|
|
38
|
+
background: currentColor;
|
|
39
|
+
aspect-ratio: 1/1;
|
|
40
|
+
}
|
|
41
|
+
`
|
|
42
|
+
return {
|
|
43
|
+
filePath,
|
|
44
|
+
css,
|
|
45
|
+
cssName,
|
|
46
|
+
}
|
|
47
|
+
}
|
|
13
48
|
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
...(size === '24' ? [] : [size]),
|
|
25
|
-
].join('-')
|
|
26
|
-
classNames.push(cssName)
|
|
27
|
-
const css = content.includes('<def')
|
|
28
|
-
? `
|
|
49
|
+
async function transformV1(filePath: string, fileName: string) {
|
|
50
|
+
const content = await readFile(filePath, 'utf-8')
|
|
51
|
+
const [size, name] = fileName.split('/')
|
|
52
|
+
const cssName = [
|
|
53
|
+
'charcoal-icon-v1',
|
|
54
|
+
name.toLowerCase().replace('.svg', '').replaceAll('.', '-'),
|
|
55
|
+
...(size === '24' ? [] : [size]),
|
|
56
|
+
].join('-')
|
|
57
|
+
const css = content.includes('<def')
|
|
58
|
+
? `
|
|
29
59
|
.${cssName} {
|
|
30
60
|
display: inline-block;
|
|
31
61
|
width: 1em;
|
|
@@ -36,7 +66,7 @@ async function main() {
|
|
|
36
66
|
)}');
|
|
37
67
|
aspect-ratio: 1/1;
|
|
38
68
|
}`
|
|
39
|
-
|
|
69
|
+
: `
|
|
40
70
|
.${cssName} {
|
|
41
71
|
display: inline-block;
|
|
42
72
|
width: 1em;
|
|
@@ -50,12 +80,44 @@ async function main() {
|
|
|
50
80
|
aspect-ratio: 1/1;
|
|
51
81
|
}
|
|
52
82
|
`
|
|
83
|
+
return {
|
|
84
|
+
filePath,
|
|
85
|
+
css,
|
|
86
|
+
cssName,
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async function main() {
|
|
91
|
+
mustBeDefined(process.env.VERSION, 'VERSION')
|
|
92
|
+
const version = process.env.VERSION
|
|
93
|
+
|
|
94
|
+
mustBeDefined(process.env.SOURCE_ROOT_DIR, 'SOURCE_ROOT_DIR')
|
|
95
|
+
const sourceDir = process.env.SOURCE_ROOT_DIR
|
|
96
|
+
const inputDir = path.join(__dirname, sourceDir)
|
|
53
97
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
98
|
+
mustBeDefined(process.env.OUTPUT_ROOT_DIR, 'OUTPUT_ROOT_DIR')
|
|
99
|
+
const outDir = process.env.OUTPUT_ROOT_DIR
|
|
100
|
+
|
|
101
|
+
await ensureDir(outDir)
|
|
102
|
+
const fileNames = await glob('**/*.svg', { cwd: inputDir })
|
|
103
|
+
|
|
104
|
+
let classNames: string[] = []
|
|
105
|
+
const filesWithContent = await Promise.all(
|
|
106
|
+
fileNames.map(async (fileName) => {
|
|
107
|
+
const filePath = path.join(inputDir, fileName)
|
|
108
|
+
if (version == 'v2') {
|
|
109
|
+
const value = await transformV2(filePath, fileName)
|
|
110
|
+
classNames.push(value.cssName)
|
|
111
|
+
return value
|
|
58
112
|
}
|
|
113
|
+
|
|
114
|
+
if (version == 'v1') {
|
|
115
|
+
const value = await transformV1(filePath, fileName)
|
|
116
|
+
classNames.push(value.cssName)
|
|
117
|
+
return value
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
throw new Error('VERSION received an unexpected value')
|
|
59
121
|
})
|
|
60
122
|
)
|
|
61
123
|
|
|
@@ -103,7 +165,7 @@ ${classNames
|
|
|
103
165
|
await writeFile(
|
|
104
166
|
path.join(outDir, 'index.story.tsx'),
|
|
105
167
|
`export default {
|
|
106
|
-
title: 'Icons/
|
|
168
|
+
title: 'Icons/${version}/css',
|
|
107
169
|
parameters: {
|
|
108
170
|
storyshots: {
|
|
109
171
|
disable: true,
|
|
@@ -5,9 +5,13 @@ import { mustBeDefined } from '../utils'
|
|
|
5
5
|
import { escape } from 'querystring'
|
|
6
6
|
|
|
7
7
|
async function main() {
|
|
8
|
+
mustBeDefined(process.env.SOURCE_ROOT_DIR, 'SOURCE_ROOT_DIR')
|
|
9
|
+
const sourceDir = process.env.SOURCE_ROOT_DIR
|
|
10
|
+
const inputDir = path.join(__dirname, sourceDir)
|
|
11
|
+
|
|
8
12
|
mustBeDefined(process.env.OUTPUT_ROOT_DIR, 'OUTPUT_ROOT_DIR')
|
|
9
13
|
const outDir = process.env.OUTPUT_ROOT_DIR
|
|
10
|
-
|
|
14
|
+
|
|
11
15
|
await ensureDir(outDir)
|
|
12
16
|
const fileNames = await glob('**/*.svg', { cwd: inputDir })
|
|
13
17
|
const dataUris = await Promise.all(
|
package/src/v2/transformReact.ts
CHANGED
|
@@ -7,7 +7,9 @@ import path from 'path'
|
|
|
7
7
|
|
|
8
8
|
async function main() {
|
|
9
9
|
mustBeDefined(process.env.OUTPUT_ROOT_DIR, 'OUTPUT_ROOT_DIR')
|
|
10
|
+
mustBeDefined(process.env.VERSION, 'VERSION')
|
|
10
11
|
const workDir = process.env.OUTPUT_ROOT_DIR
|
|
12
|
+
const version = process.env.VERSION
|
|
11
13
|
|
|
12
14
|
const fileNames = await glob('*/**/*.tsx', { cwd: workDir })
|
|
13
15
|
const filesWithContent = await Promise.all(
|
|
@@ -29,10 +31,12 @@ async function main() {
|
|
|
29
31
|
)
|
|
30
32
|
const icons = Object.entries(catalog)
|
|
31
33
|
|
|
32
|
-
const iconsPair = icons
|
|
33
|
-
iconName,
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
const iconsPair = icons
|
|
35
|
+
.map(([iconName, iconPath]) => [
|
|
36
|
+
iconName,
|
|
37
|
+
'./' + iconPath.replace('.tsx', ''),
|
|
38
|
+
])
|
|
39
|
+
.sort((a, b) => (a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0))
|
|
36
40
|
|
|
37
41
|
await writeFile(
|
|
38
42
|
path.join(workDir, 'index.tsx'),
|
|
@@ -49,7 +53,7 @@ async function main() {
|
|
|
49
53
|
import { createGlobalStyle } from 'styled-components'
|
|
50
54
|
|
|
51
55
|
export default {
|
|
52
|
-
title: 'Icons/
|
|
56
|
+
title: 'Icons/${version}/react',
|
|
53
57
|
parameters: {
|
|
54
58
|
storyshots: {
|
|
55
59
|
disable: true,
|