@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 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/badge/downloads-0-lightgrey" alt="NPM Downloads" />
6
- <a href="https://github.com/OpuDoc/opicon/blob/main/LICENSE.md"><img src="https://img.shields.io/badge/license-ISC-green" alt="License" /></a>
7
- <br /><br />
8
- <a href="https://github.com/OpuDoc/opicon">About</a>
9
- ·
10
- <a href="https://github.com/OpuDoc/opicon/tree/main/icons">Icons</a>
11
- ·
12
- <a href="https://github.com/OpuDoc/opicon/tree/main/packages/shared">Source</a>
13
- ·
14
- <a href="https://github.com/OpuDoc/opicon/blob/main/LICENSE.md">License</a>
15
- </p>
16
-
17
- # Opicon Shared
18
-
19
- Shared utilities used by `@opudoc/opicon-*` framework packages.
20
-
21
- You typically do not install this package directly. It is included as a dependency of packages such as `@opudoc/opicon-react`.
22
-
23
- ## Installation
24
-
25
- ```sh
26
- pnpm add @opudoc/opicon-shared
27
- ```
28
-
29
- ```sh
30
- npm install @opudoc/opicon-shared
31
- ```
32
-
33
- ## License
34
-
35
- Opicon is licensed under the ISC license. See [LICENSE](https://github.com/OpuDoc/opicon/blob/main/LICENSE.md).
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).
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sources":["../../src/index.ts"],"sourcesContent":["export const toPascalCase = (str: string): string =>\r\n str\r\n .split(/[-_/]/)\r\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\r\n .join('');\r\n\r\nexport const toKebabCase = (str: string): string =>\r\n str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\r\n\r\nexport const mergeClasses = (...classes: (string | undefined | false)[]): string =>\r\n classes.filter(Boolean).join(' ');\r\n\r\nexport const hasA11yProp = (props: Record<string, unknown>): boolean =>\r\n 'aria-label' in props || 'aria-labelledby' in props || 'title' in props;\r\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;;;;;;;"}
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;;;;"}
@@ -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(" ");
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["export const toPascalCase = (str: string): string =>\r\n str\r\n .split(/[-_/]/)\r\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\r\n .join('');\r\n\r\nexport const toKebabCase = (str: string): string =>\r\n str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\r\n\r\nexport const mergeClasses = (...classes: (string | undefined | false)[]): string =>\r\n classes.filter(Boolean).join(' ');\r\n\r\nexport const hasA11yProp = (props: Record<string, unknown>): boolean =>\r\n 'aria-label' in props || 'aria-labelledby' in props || 'title' in props;\r\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;;;;"}
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,4 @@
1
+ const isBoldIconName = (iconName) => iconName.includes("-bold-");
2
+
3
+ export { isBoldIconName };
4
+ //# sourceMappingURL=isBoldIconName.mjs.map
@@ -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",
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/OpuBase/opicon.git",
8
+ "url": "https://github.com/OpuDoc/opicon.git",
9
9
  "directory": "packages/shared"
10
10
  },
11
- "homepage": "https://github.com/OpuBase/opicon",
12
- "bugs": "https://github.com/OpuBase/opicon/issues",
13
- "author": "OpuBase (https://github.com/OpuBase)",
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
  ],