@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@charcoal-ui/icons-cli",
3
- "version": "4.13.0",
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:css": "OUTPUT_ROOT_DIR=../icons/css/v2 pnpm tsx src/v2/transformCSS.ts",
51
- "build:uri": "OUTPUT_ROOT_DIR=../icon-files/v2-datauri pnpm tsx src/v2/transformDataUri.ts",
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",
@@ -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 main() {
8
- mustBeDefined(process.env.OUTPUT_ROOT_DIR, 'OUTPUT_ROOT_DIR')
9
- const outDir = process.env.OUTPUT_ROOT_DIR
10
- const inputDir = path.join(__dirname, '../../../icon-files/v2/svg')
11
- await ensureDir(outDir)
12
- const fileNames = await glob('**/*.svg', { cwd: inputDir })
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
- let classNames: string[] = []
15
- const filesWithContent = await Promise.all(
16
- fileNames.map(async (fileName) => {
17
- const filePath = path.join(inputDir, fileName)
18
- const content = await readFile(filePath, 'utf-8')
19
- const [size, variant, name] = fileName.split('/')
20
- const cssName = [
21
- 'charcoal-icon',
22
- name.replace('.svg', '').replaceAll('.', '-'),
23
- ...(variant === 'regular' ? [] : [variant]),
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
- return {
55
- filePath,
56
- css,
57
- cssName,
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/v2/css',
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
- const inputDir = path.join(__dirname, '../../../icon-files/v2/svg')
14
+
11
15
  await ensureDir(outDir)
12
16
  const fileNames = await glob('**/*.svg', { cwd: inputDir })
13
17
  const dataUris = await Promise.all(
@@ -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.map(([iconName, iconPath]) => [
33
- iconName,
34
- './' + iconPath.replace('.tsx', ''),
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/v2/react',
56
+ title: 'Icons/${version}/react',
53
57
  parameters: {
54
58
  storyshots: {
55
59
  disable: true,