@opudoc/opicon-shared 0.1.3 → 0.1.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/README.md +38 -35
- package/dist/cjs/shared.js +16 -0
- package/dist/cjs/shared.js.map +1 -1
- package/dist/esm/iconNodeUsesFill.mjs +14 -0
- package/dist/esm/iconNodeUsesFill.mjs.map +1 -0
- package/dist/esm/index.mjs +3 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/isBoldIconName.mjs +4 -0
- package/dist/esm/isBoldIconName.mjs.map +1 -0
- package/dist/shared.d.ts +7 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,35 +1,38 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<strong>Shared utilities for Opicon icon packages.</strong>
|
|
3
|
-
<br /><br />
|
|
4
|
-
<a href="https://www.npmjs.com/package/@opudoc/opicon-shared"><img src="https://img.shields.io/npm/v/%40opudoc%2Fopicon-shared?color=blue" alt="npm" /></a>
|
|
5
|
-
<img src="https://img.shields.io/
|
|
6
|
-
<a href="https://
|
|
7
|
-
<
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
</
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<strong>Shared utilities for Opicon icon packages.</strong>
|
|
3
|
+
<br /><br />
|
|
4
|
+
<a href="https://www.npmjs.com/package/@opudoc/opicon-shared"><img src="https://img.shields.io/npm/v/%40opudoc%2Fopicon-shared?color=blue" alt="npm" /></a>
|
|
5
|
+
<img src="https://img.shields.io/npm/dt/%40opudoc%2Fopicon-shared" alt="NPM Downloads" />
|
|
6
|
+
<a href="https://opicon.net"><img src="https://img.shields.io/badge/website-opicon.net-9E9CFC" alt="website" /></a>
|
|
7
|
+
<a href="https://github.com/OpuDoc/opicon/blob/main/LICENSE.md"><img src="https://img.shields.io/badge/license-ISC-green" alt="License" /></a>
|
|
8
|
+
<br /><br />
|
|
9
|
+
<a href="https://opicon.net">Website</a>
|
|
10
|
+
·
|
|
11
|
+
<a href="https://github.com/OpuDoc/opicon">About</a>
|
|
12
|
+
·
|
|
13
|
+
<a href="https://github.com/OpuDoc/opicon/tree/main/icons">Icons</a>
|
|
14
|
+
·
|
|
15
|
+
<a href="https://github.com/OpuDoc/opicon/tree/main/packages/shared">Source</a>
|
|
16
|
+
·
|
|
17
|
+
<a href="https://github.com/OpuDoc/opicon/blob/main/LICENSE.md">License</a>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
# Opicon Shared
|
|
21
|
+
|
|
22
|
+
Shared utilities used by `@opudoc/opicon-*` framework packages.
|
|
23
|
+
|
|
24
|
+
You typically do not install this package directly. It is included as a dependency of packages such as `@opudoc/opicon-react`.
|
|
25
|
+
|
|
26
|
+
## Installation
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
pnpm add @opudoc/opicon-shared
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
npm install @opudoc/opicon-shared
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## License
|
|
37
|
+
|
|
38
|
+
Opicon is licensed under the ISC license. See [LICENSE](https://github.com/OpuDoc/opicon/blob/main/LICENSE.md).
|
package/dist/cjs/shared.js
CHANGED
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const isBoldIconName = (iconName) => iconName.includes("-bold-");
|
|
4
|
+
|
|
5
|
+
const pathHasFill = (tag, attrs) => tag === "path" && Boolean(attrs.fill) && attrs.fill !== "none";
|
|
6
|
+
const nodeUsesFill = (node) => {
|
|
7
|
+
if (node.length === 3) {
|
|
8
|
+
const [tag2, attrs2, children] = node;
|
|
9
|
+
if (pathHasFill(tag2, attrs2)) return true;
|
|
10
|
+
return children.some(nodeUsesFill);
|
|
11
|
+
}
|
|
12
|
+
const [tag, attrs] = node;
|
|
13
|
+
return pathHasFill(tag, attrs);
|
|
14
|
+
};
|
|
15
|
+
const iconNodeUsesFill = (iconNode) => iconNode.some(nodeUsesFill);
|
|
16
|
+
|
|
3
17
|
const toPascalCase = (str) => str.split(/[-_/]/).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
|
|
4
18
|
const toKebabCase = (str) => str.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
5
19
|
const mergeClasses = (...classes) => classes.filter(Boolean).join(" ");
|
|
6
20
|
const hasA11yProp = (props) => "aria-label" in props || "aria-labelledby" in props || "title" in props;
|
|
7
21
|
|
|
8
22
|
exports.hasA11yProp = hasA11yProp;
|
|
23
|
+
exports.iconNodeUsesFill = iconNodeUsesFill;
|
|
24
|
+
exports.isBoldIconName = isBoldIconName;
|
|
9
25
|
exports.mergeClasses = mergeClasses;
|
|
10
26
|
exports.toKebabCase = toKebabCase;
|
|
11
27
|
exports.toPascalCase = toPascalCase;
|
package/dist/cjs/shared.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sources":["../../src/index.ts"],"sourcesContent":["export const toPascalCase = (str: string): string =>\
|
|
1
|
+
{"version":3,"file":"shared.js","sources":["../../src/isBoldIconName.ts","../../src/iconNodeUsesFill.ts","../../src/index.ts"],"sourcesContent":["/** Icon ids use `{category}-bold-{name}` (e.g. `settings-bold-menu`). */\nexport const isBoldIconName = (iconName: string): boolean => iconName.includes('-bold-');\n","type IconNodeEntry = [string, Record<string, string | number>, ...unknown[]];\n\nconst pathHasFill = (tag: string, attrs: Record<string, string | number>): boolean =>\n tag === 'path' && Boolean(attrs.fill) && attrs.fill !== 'none';\n\nconst nodeUsesFill = (node: IconNodeEntry): boolean => {\n if (node.length === 3) {\n const [tag, attrs, children] = node;\n if (pathHasFill(tag, attrs)) return true;\n return (children as IconNodeEntry[]).some(nodeUsesFill);\n }\n const [tag, attrs] = node;\n return pathHasFill(tag, attrs);\n};\n\nexport const iconNodeUsesFill = (iconNode: IconNodeEntry[]): boolean => iconNode.some(nodeUsesFill);\n","export const toPascalCase = (str: string): string =>\n str\n .split(/[-_/]/)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n\nexport const toKebabCase = (str: string): string =>\n str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\nexport const mergeClasses = (...classes: (string | undefined | false)[]): string =>\n classes.filter(Boolean).join(' ');\n\nexport const hasA11yProp = (props: Record<string, unknown>): boolean =>\n 'aria-label' in props || 'aria-labelledby' in props || 'title' in props;\n\nexport { isBoldIconName } from './isBoldIconName';\nexport { iconNodeUsesFill } from './iconNodeUsesFill';\n"],"names":["tag","attrs"],"mappings":";;AACO,MAAM,cAAA,GAAiB,CAAC,QAAA,KAA8B,QAAA,CAAS,SAAS,QAAQ;;ACCvF,MAAM,WAAA,GAAc,CAAC,GAAA,EAAa,KAAA,KAChC,GAAA,KAAQ,MAAA,IAAU,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,IAAK,KAAA,CAAM,IAAA,KAAS,MAAA;AAE1D,MAAM,YAAA,GAAe,CAAC,IAAA,KAAiC;AACrD,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,MAAM,CAACA,IAAAA,EAAKC,MAAAA,EAAO,QAAQ,CAAA,GAAI,IAAA;AAC/B,IAAA,IAAI,WAAA,CAAYD,IAAAA,EAAKC,MAAK,CAAA,EAAG,OAAO,IAAA;AACpC,IAAA,OAAQ,QAAA,CAA6B,KAAK,YAAY,CAAA;AAAA,EACxD;AACA,EAAA,MAAM,CAAC,GAAA,EAAK,KAAK,CAAA,GAAI,IAAA;AACrB,EAAA,OAAO,WAAA,CAAY,KAAK,KAAK,CAAA;AAC/B,CAAA;AAEO,MAAM,gBAAA,GAAmB,CAAC,QAAA,KAAuC,QAAA,CAAS,KAAK,YAAY;;ACf3F,MAAM,YAAA,GAAe,CAAC,GAAA,KAC3B,GAAA,CACG,MAAM,OAAO,CAAA,CACb,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CAC1D,IAAA,CAAK,EAAE;AAEL,MAAM,WAAA,GAAc,CAAC,GAAA,KAC1B,GAAA,CAAI,QAAQ,oBAAA,EAAsB,OAAO,EAAE,WAAA;AAEtC,MAAM,YAAA,GAAe,IAAI,OAAA,KAC9B,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG;AAE3B,MAAM,cAAc,CAAC,KAAA,KAC1B,gBAAgB,KAAA,IAAS,iBAAA,IAAqB,SAAS,OAAA,IAAW;;;;;;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const pathHasFill = (tag, attrs) => tag === "path" && Boolean(attrs.fill) && attrs.fill !== "none";
|
|
2
|
+
const nodeUsesFill = (node) => {
|
|
3
|
+
if (node.length === 3) {
|
|
4
|
+
const [tag2, attrs2, children] = node;
|
|
5
|
+
if (pathHasFill(tag2, attrs2)) return true;
|
|
6
|
+
return children.some(nodeUsesFill);
|
|
7
|
+
}
|
|
8
|
+
const [tag, attrs] = node;
|
|
9
|
+
return pathHasFill(tag, attrs);
|
|
10
|
+
};
|
|
11
|
+
const iconNodeUsesFill = (iconNode) => iconNode.some(nodeUsesFill);
|
|
12
|
+
|
|
13
|
+
export { iconNodeUsesFill };
|
|
14
|
+
//# sourceMappingURL=iconNodeUsesFill.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iconNodeUsesFill.mjs","sources":["../../src/iconNodeUsesFill.ts"],"sourcesContent":["type IconNodeEntry = [string, Record<string, string | number>, ...unknown[]];\n\nconst pathHasFill = (tag: string, attrs: Record<string, string | number>): boolean =>\n tag === 'path' && Boolean(attrs.fill) && attrs.fill !== 'none';\n\nconst nodeUsesFill = (node: IconNodeEntry): boolean => {\n if (node.length === 3) {\n const [tag, attrs, children] = node;\n if (pathHasFill(tag, attrs)) return true;\n return (children as IconNodeEntry[]).some(nodeUsesFill);\n }\n const [tag, attrs] = node;\n return pathHasFill(tag, attrs);\n};\n\nexport const iconNodeUsesFill = (iconNode: IconNodeEntry[]): boolean => iconNode.some(nodeUsesFill);\n"],"names":["tag","attrs"],"mappings":"AAEA,MAAM,WAAA,GAAc,CAAC,GAAA,EAAa,KAAA,KAChC,GAAA,KAAQ,MAAA,IAAU,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,IAAK,KAAA,CAAM,IAAA,KAAS,MAAA;AAE1D,MAAM,YAAA,GAAe,CAAC,IAAA,KAAiC;AACrD,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,MAAM,CAACA,IAAAA,EAAKC,MAAAA,EAAO,QAAQ,CAAA,GAAI,IAAA;AAC/B,IAAA,IAAI,WAAA,CAAYD,IAAAA,EAAKC,MAAK,CAAA,EAAG,OAAO,IAAA;AACpC,IAAA,OAAQ,QAAA,CAA6B,KAAK,YAAY,CAAA;AAAA,EACxD;AACA,EAAA,MAAM,CAAC,GAAA,EAAK,KAAK,CAAA,GAAI,IAAA;AACrB,EAAA,OAAO,WAAA,CAAY,KAAK,KAAK,CAAA;AAC/B,CAAA;AAEO,MAAM,gBAAA,GAAmB,CAAC,QAAA,KAAuC,QAAA,CAAS,KAAK,YAAY;;;;"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export { isBoldIconName } from './isBoldIconName.mjs';
|
|
2
|
+
export { iconNodeUsesFill } from './iconNodeUsesFill.mjs';
|
|
3
|
+
|
|
1
4
|
const toPascalCase = (str) => str.split(/[-_/]/).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
|
|
2
5
|
const toKebabCase = (str) => str.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
3
6
|
const mergeClasses = (...classes) => classes.filter(Boolean).join(" ");
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["export const toPascalCase = (str: string): string =>\
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["export const toPascalCase = (str: string): string =>\n str\n .split(/[-_/]/)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n\nexport const toKebabCase = (str: string): string =>\n str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\nexport const mergeClasses = (...classes: (string | undefined | false)[]): string =>\n classes.filter(Boolean).join(' ');\n\nexport const hasA11yProp = (props: Record<string, unknown>): boolean =>\n 'aria-label' in props || 'aria-labelledby' in props || 'title' in props;\n\nexport { isBoldIconName } from './isBoldIconName';\nexport { iconNodeUsesFill } from './iconNodeUsesFill';\n"],"names":[],"mappings":";;;AAAO,MAAM,YAAA,GAAe,CAAC,GAAA,KAC3B,GAAA,CACG,MAAM,OAAO,CAAA,CACb,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CAC1D,IAAA,CAAK,EAAE;AAEL,MAAM,WAAA,GAAc,CAAC,GAAA,KAC1B,GAAA,CAAI,QAAQ,oBAAA,EAAsB,OAAO,EAAE,WAAA;AAEtC,MAAM,YAAA,GAAe,IAAI,OAAA,KAC9B,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG;AAE3B,MAAM,cAAc,CAAC,KAAA,KAC1B,gBAAgB,KAAA,IAAS,iBAAA,IAAqB,SAAS,OAAA,IAAW;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isBoldIconName.mjs","sources":["../../src/isBoldIconName.ts"],"sourcesContent":["/** Icon ids use `{category}-bold-{name}` (e.g. `settings-bold-menu`). */\nexport const isBoldIconName = (iconName: string): boolean => iconName.includes('-bold-');\n"],"names":[],"mappings":"AACO,MAAM,cAAA,GAAiB,CAAC,QAAA,KAA8B,QAAA,CAAS,SAAS,QAAQ;;;;"}
|
package/dist/shared.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
/** Icon ids use `{category}-bold-{name}` (e.g. `settings-bold-menu`). */
|
|
2
|
+
declare const isBoldIconName: (iconName: string) => boolean;
|
|
3
|
+
|
|
4
|
+
type IconNodeEntry = [string, Record<string, string | number>, ...unknown[]];
|
|
5
|
+
declare const iconNodeUsesFill: (iconNode: IconNodeEntry[]) => boolean;
|
|
6
|
+
|
|
1
7
|
declare const toPascalCase: (str: string) => string;
|
|
2
8
|
declare const toKebabCase: (str: string) => string;
|
|
3
9
|
declare const mergeClasses: (...classes: (string | undefined | false)[]) => string;
|
|
4
10
|
declare const hasA11yProp: (props: Record<string, unknown>) => boolean;
|
|
5
11
|
|
|
6
|
-
export { hasA11yProp, mergeClasses, toKebabCase, toPascalCase };
|
|
12
|
+
export { hasA11yProp, iconNodeUsesFill, isBoldIconName, mergeClasses, toKebabCase, toPascalCase };
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opudoc/opicon-shared",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"license": "ISC",
|
|
5
5
|
"description": "Shared utilities for Opicon icon packages.",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "https://github.com/
|
|
8
|
+
"url": "https://github.com/OpuDoc/opicon.git",
|
|
9
9
|
"directory": "packages/shared"
|
|
10
10
|
},
|
|
11
|
-
"homepage": "https://
|
|
12
|
-
"bugs": "https://github.com/
|
|
13
|
-
"author": "
|
|
11
|
+
"homepage": "https://opicon.net",
|
|
12
|
+
"bugs": "https://github.com/OpuDoc/opicon/issues",
|
|
13
|
+
"author": "OpuDoc (https://github.com/OpuDoc)",
|
|
14
14
|
"contributors": [
|
|
15
15
|
"RafaelK-F (https://github.com/RafaelK-F)"
|
|
16
16
|
],
|