@rokkit/icons 1.0.0-next.100

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 (68) hide show
  1. package/LICENCE.md +22 -0
  2. package/README.md +1 -0
  3. package/lib/app/chars.json +1 -0
  4. package/lib/app/icons.json +116 -0
  5. package/lib/app/index.d.ts +8 -0
  6. package/lib/app/index.js +9 -0
  7. package/lib/app/index.mjs +6 -0
  8. package/lib/app/info.json +1 -0
  9. package/lib/app/metadata.json +1 -0
  10. package/lib/app/package.json +25 -0
  11. package/lib/app.json +116 -0
  12. package/lib/auth/chars.json +1 -0
  13. package/lib/auth/icons.json +47 -0
  14. package/lib/auth/index.d.ts +8 -0
  15. package/lib/auth/index.js +9 -0
  16. package/lib/auth/index.mjs +6 -0
  17. package/lib/auth/info.json +1 -0
  18. package/lib/auth/metadata.json +1 -0
  19. package/lib/auth/package.json +25 -0
  20. package/lib/auth.json +47 -0
  21. package/lib/base/chars.json +1 -0
  22. package/lib/base/icons.json +209 -0
  23. package/lib/base/index.d.ts +8 -0
  24. package/lib/base/index.js +9 -0
  25. package/lib/base/index.mjs +6 -0
  26. package/lib/base/info.json +1 -0
  27. package/lib/base/metadata.json +1 -0
  28. package/lib/base/package.json +25 -0
  29. package/lib/base.json +209 -0
  30. package/lib/components/chars.json +1 -0
  31. package/lib/components/icons.json +92 -0
  32. package/lib/components/index.d.ts +8 -0
  33. package/lib/components/index.js +9 -0
  34. package/lib/components/index.mjs +6 -0
  35. package/lib/components/info.json +1 -0
  36. package/lib/components/metadata.json +1 -0
  37. package/lib/components/package.json +25 -0
  38. package/lib/components.json +92 -0
  39. package/lib/light/chars.json +1 -0
  40. package/lib/light/icons.json +23 -0
  41. package/lib/light/index.d.ts +8 -0
  42. package/lib/light/index.js +9 -0
  43. package/lib/light/index.mjs +6 -0
  44. package/lib/light/info.json +1 -0
  45. package/lib/light/metadata.json +1 -0
  46. package/lib/light/package.json +25 -0
  47. package/lib/light.json +23 -0
  48. package/lib/solid/chars.json +1 -0
  49. package/lib/solid/icons.json +44 -0
  50. package/lib/solid/index.d.ts +8 -0
  51. package/lib/solid/index.js +9 -0
  52. package/lib/solid/index.mjs +6 -0
  53. package/lib/solid/info.json +1 -0
  54. package/lib/solid/metadata.json +1 -0
  55. package/lib/solid/package.json +25 -0
  56. package/lib/solid.json +44 -0
  57. package/lib/twotone/chars.json +1 -0
  58. package/lib/twotone/icons.json +20 -0
  59. package/lib/twotone/index.d.ts +8 -0
  60. package/lib/twotone/index.js +9 -0
  61. package/lib/twotone/index.mjs +6 -0
  62. package/lib/twotone/info.json +1 -0
  63. package/lib/twotone/metadata.json +1 -0
  64. package/lib/twotone/package.json +25 -0
  65. package/lib/twotone.json +20 -0
  66. package/package.json +45 -0
  67. package/src/convert.js +96 -0
  68. package/src/index.js +8 -0
@@ -0,0 +1,9 @@
1
+ const icons = require('./icons.json')
2
+ const info = {}
3
+ const metadata = {}
4
+ const chars = {}
5
+
6
+ exports.icons = icons
7
+ exports.info = info
8
+ exports.metadata = metadata
9
+ exports.chars = chars
@@ -0,0 +1,6 @@
1
+ import icons from './icons.json' assert { type: 'json' }
2
+
3
+ const info = {}
4
+ const metadata = {}
5
+ const chars = {}
6
+ export { icons, info, metadata, chars }
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@rokkit/twotone",
3
+ "description": "twotone icon set in Iconify JSON format",
4
+ "version": "1.0.0",
5
+ "main": "index.js",
6
+ "module": "index.mjs",
7
+ "types": "index.d.ts",
8
+ "bugs": "https://github.com/jerrythomas/rokkit/issues",
9
+ "homepage": "https://github.com/jerrythomas/rokkit",
10
+ "exports": {
11
+ "./*": "./*",
12
+ ".": {
13
+ "types": "./index.d.ts",
14
+ "require": "./index.js",
15
+ "import": "./index.mjs"
16
+ },
17
+ "./icons.json": "./icons.json"
18
+ },
19
+ "iconSet": {
20
+ "icons": "icons.json"
21
+ },
22
+ "dependencies": {
23
+ "@iconify/types": "^2.0.0"
24
+ }
25
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "prefix": "twotone",
3
+ "lastModified": 1717410886,
4
+ "icons": {
5
+ "heart": {
6
+ "body": "<g fill=\"currentColor\"><path d=\"M21.633 6.647a6.1 6.1 0 00-1.334-1.94A6.22 6.22 0 0015.93 2.93 6.26 6.26 0 0012 4.315 6.26 6.26 0 008.07 2.93 6.22 6.22 0 003.7 4.706a6.06 6.06 0 00-1.825 4.33c0 .78.16 1.593.476 2.42.265.692.644 1.409 1.13 2.133.768 1.146 1.825 2.342 3.138 3.553a35 35 0 004.42 3.453l.556.356a.75.75 0 00.808 0l.556-.357a35.5 35.5 0 004.42-3.452c1.312-1.211 2.37-2.407 3.138-3.553.485-.724.867-1.441 1.13-2.133.316-.827.476-1.64.476-2.42a6 6 0 00-.49-2.39M12 19.097S3.656 13.75 3.656 9.035c0-2.388 1.976-4.324 4.414-4.324 1.713 0 3.199.956 3.93 2.353a4.43 4.43 0 013.93-2.353c2.438 0 4.414 1.936 4.414 4.324 0 4.716-8.344 10.062-8.344 10.062\"/><path fill-opacity=\".15\" d=\"M15.93 4.71A4.43 4.43 0 0012 7.064a4.43 4.43 0 00-3.93-2.353c-2.438 0-4.414 1.936-4.414 4.324C3.656 13.751 12 19.097 12 19.097s8.344-5.346 8.344-10.062c0-2.388-1.976-4.324-4.414-4.324\"/></g>"
7
+ },
8
+ "state-info": {
9
+ "body": "<g fill=\"currentColor\"><path d=\"M21 12a9 9 0 11-17.999 0A9 9 0 0121 12\" opacity=\".2\"/><path d=\"M13.5 16.5a.75.75 0 01-.75.75 1.5 1.5 0 01-1.5-1.5V12a.75.75 0 110-1.5 1.5 1.5 0 011.5 1.5v3.75a.75.75 0 01.75.75m8.25-4.5A9.75 9.75 0 1112 2.25 9.76 9.76 0 0121.75 12m-1.5 0A8.25 8.25 0 1012 20.25 8.26 8.26 0 0020.25 12m-8.625-3a1.125 1.125 0 100-2.25 1.125 1.125 0 000 2.25\"/></g>"
10
+ },
11
+ "state-unknown": {
12
+ "body": "<g fill=\"currentColor\"><path d=\"M21 12a9 9 0 11-17.999 0A9 9 0 0121 12\" opacity=\".2\"/><path d=\"M13.125 16.875a1.125 1.125 0 11-2.25 0 1.125 1.125 0 012.25 0M12 6.75c-2.068 0-3.75 1.514-3.75 3.375v.375a.75.75 0 101.5 0v-.375c0-1.031 1.01-1.875 2.25-1.875s2.25.844 2.25 1.875S13.24 12 12 12a.75.75 0 00-.75.75v.75a.75.75 0 101.5 0v-.068c1.71-.314 3-1.678 3-3.307 0-1.86-1.682-3.375-3.75-3.375M21.75 12A9.75 9.75 0 1112 2.25 9.76 9.76 0 0121.75 12m-1.5 0A8.25 8.25 0 1012 20.25 8.26 8.26 0 0020.25 12\"/></g>"
13
+ },
14
+ "state-warning": {
15
+ "body": "<g fill=\"currentColor\"><path d=\"M20.2 20.25H3.8c-1.183 0-1.925-1.239-1.35-2.242l8.199-14.237c.59-1.032 2.111-1.032 2.702 0l8.2 14.237c.574 1.003-.168 2.242-1.352 2.242\" opacity=\".2\"/><path d=\"M22.2 17.633 14.002 3.396a2.322 2.322 0 00-4.004 0L1.8 17.633a2.2 2.2 0 000 2.224A2.28 2.28 0 003.802 21h16.397a2.28 2.28 0 002-1.143 2.2 2.2 0 00.001-2.224m-1.3 1.473a.8.8 0 01-.701.394H3.802a.8.8 0 01-.702-.394.71.71 0 010-.724l8.2-14.237a.82.82 0 011.406 0l8.199 14.237a.71.71 0 01-.004.724M11.25 13.5V9.75a.75.75 0 111.5 0v3.75a.75.75 0 11-1.5 0m1.875 3.375a1.125 1.125 0 11-2.25 0 1.125 1.125 0 012.25 0\"/></g>"
16
+ }
17
+ },
18
+ "width": 24,
19
+ "height": 24
20
+ }
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@rokkit/icons",
3
+ "version": "1.0.0-next.100",
4
+ "description": "A minimal icon set for use in applications.",
5
+ "author": "Jerry Thomas <me@jerrythomas.name>",
6
+ "license": "MIT",
7
+ "bin": "src/index.js",
8
+ "main": "src/index.js",
9
+ "module": "src/index.js",
10
+ "type": "module",
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "dependencies": {
15
+ "@mdi/svg": "^7.4.47"
16
+ },
17
+ "devDependencies": {
18
+ "@iconify/tools": "4.0.6",
19
+ "@iconify/types": "^2.0.0",
20
+ "iconify": "^1.4.0"
21
+ },
22
+ "files": [
23
+ "lib",
24
+ "src/**/*.js",
25
+ "!src/**/*.spec.js"
26
+ ],
27
+ "exports": {
28
+ "./package.json": "./package.json",
29
+ "./ui.json": "./lib/base.json",
30
+ "./light.json": "./lib/light.json",
31
+ "./solid.json": "./lib/solid.json",
32
+ "./twotone.json": "./lib/twotone.json",
33
+ "./components.json": "./lib/components.json",
34
+ "./auth.json": "./lib/auth.json",
35
+ "./app.json": "./lib/app.json",
36
+ ".": "./lib/base.json"
37
+ },
38
+ "scripts": {
39
+ "format": "prettier --write .",
40
+ "lint": "eslint --fix .",
41
+ "build": "node src/index.js && pnpm format",
42
+ "latest": "pnpm upgrade --latest",
43
+ "release": "pnpm publish --access public"
44
+ }
45
+ }
package/src/convert.js ADDED
@@ -0,0 +1,96 @@
1
+ import {
2
+ importDirectory,
3
+ cleanupSVG,
4
+ runSVGO,
5
+ parseColors,
6
+ isEmptyColor,
7
+ exportJSONPackage
8
+ } from '@iconify/tools'
9
+ import fs from 'fs'
10
+
11
+ /**
12
+ * Convert icons
13
+ *
14
+ * @param {string} folder Folder with icons
15
+ * @param {string} prefix Prefix for icon set
16
+ * @param {boolean} color True if color should be preserved
17
+ */
18
+ export async function convert(folder, prefix, color = false) {
19
+ // Import icons
20
+ const iconSet = await importDirectory(folder, { prefix })
21
+
22
+ // Validate, clean up, fix palette and optimise
23
+ processIcons(iconSet, color)
24
+
25
+ // Export
26
+ const collection = JSON.stringify(iconSet.export(), null, 2)
27
+ fs.writeFileSync(`./lib/${prefix}.json`, collection, 'utf8')
28
+ const target = `./lib/${iconSet.prefix}`
29
+ await exportJSONPackage(iconSet, {
30
+ target,
31
+ package: {
32
+ name: `@rokkit/${iconSet.prefix}`,
33
+ version: '1.0.0',
34
+ bugs: 'https://github.com/jerrythomas/rokkit/issues',
35
+ homepage: 'https://github.com/jerrythomas/rokkit'
36
+ },
37
+ cleanup: true
38
+ })
39
+ }
40
+
41
+ /**
42
+ * Process icons
43
+ *
44
+ * @param {IconifyTools} iconSet Icon set
45
+ * @param {boolean} color True if color should be preserved
46
+ */
47
+ function processIcons(iconSet, color) {
48
+ iconSet.forEach((name, type) => {
49
+ if (type !== 'icon') {
50
+ return
51
+ }
52
+
53
+ const svg = iconSet.toSVG(name)
54
+ if (!svg) {
55
+ // Invalid icon
56
+ iconSet.remove(name)
57
+ return
58
+ }
59
+
60
+ // Clean up and optimise icons
61
+ try {
62
+ cleanAndOptimizeIcon(svg, color)
63
+ } catch (err) {
64
+ // eslint-disable-next-line no-console
65
+ console.error(`Error parsing ${name}:`, err)
66
+ iconSet.remove(name)
67
+ return
68
+ }
69
+
70
+ // Update icon
71
+ iconSet.fromSVG(name, svg)
72
+ })
73
+ }
74
+
75
+ /**
76
+ * Clean up and optimise SVG icon
77
+ *
78
+ * @param {string} svg SVG code
79
+ * @param {boolean} color True if color should be preserved
80
+ */
81
+ function cleanAndOptimizeIcon(svg, color) {
82
+ // Clean up icon code
83
+ cleanupSVG(svg)
84
+
85
+ if (!color) {
86
+ parseColors(svg, {
87
+ defaultColor: 'currentColor',
88
+ callback: (_, colorStr, value) => {
89
+ return !value || isEmptyColor(value) ? colorStr : 'currentColor'
90
+ }
91
+ })
92
+ }
93
+
94
+ // Optimise
95
+ runSVGO(svg)
96
+ }
package/src/index.js ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { convert } from './convert.js'
3
+
4
+ const groups = ['auth', 'app', 'base', 'light', 'solid', 'twotone', 'components']
5
+
6
+ for (const group of groups) {
7
+ convert(`./src/${group}`, group, group === 'auth')
8
+ }