@featherk/icons 0.14.1 → 0.15.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/README.md +1 -1
- package/dist/fontawesome/build.cjs +5 -1
- package/dist/fontawesome/build.d.ts +3 -1
- package/dist/fontawesome/build.mjs +6 -2
- package/dist/fontawesome/catalog.cjs +224 -0
- package/dist/fontawesome/catalog.d.ts +306 -0
- package/dist/fontawesome/catalog.mjs +224 -0
- package/dist/fontawesome/catalog.test.d.ts +1 -0
- package/dist/fontawesome/chunks/{generate-Bobf_ghm.cjs → generate-BBurrhLv.cjs} +46 -19
- package/dist/fontawesome/chunks/{generate-Bp92GTVi.mjs → generate-Zq9q2YZD.mjs} +46 -19
- package/dist/fontawesome/cli.cjs +33 -9
- package/dist/fontawesome/cli.d.ts +7 -0
- package/dist/fontawesome/cli.mjs +33 -9
- package/dist/fontawesome/generate.d.ts +25 -1
- package/dist/fontawesome/normalize.d.ts +10 -0
- package/dist/fontawesome/types.d.ts +11 -1
- package/dist/fontawesome/vite.cjs +13 -2
- package/dist/fontawesome/vite.d.ts +7 -0
- package/dist/fontawesome/vite.mjs +13 -2
- package/docs/ICONS.md +1 -1
- package/docs/fontawesome/CreateFontAwesomeManifest.md +30 -37
- package/docs/fontawesome/FontAwesome.md +31 -44
- package/docs/fontawesome/FontAwesomeCLI.md +11 -11
- package/docs/fontawesome/LICENSING.md +2 -2
- package/package.json +6 -1
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const node_path = require("node:path");
|
|
4
4
|
const promises = require("node:fs/promises");
|
|
5
|
-
const
|
|
5
|
+
const fontawesome_catalog = require("./catalog.cjs");
|
|
6
|
+
const generate = require("./chunks/generate-BBurrhLv.cjs");
|
|
6
7
|
const virtualId = "virtual:featherk/fontawesome";
|
|
7
8
|
const resolvedId = `\0${virtualId}`;
|
|
8
9
|
function dependencyKey(file) {
|
|
@@ -15,9 +16,10 @@ function featherkFontAwesome(options) {
|
|
|
15
16
|
let dependencies = /* @__PURE__ */ new Set();
|
|
16
17
|
function regenerate() {
|
|
17
18
|
generation = generate.generateFaIcons({
|
|
18
|
-
|
|
19
|
+
keys: options.keys,
|
|
19
20
|
root,
|
|
20
21
|
sourceRoot: options.sourceRoot,
|
|
22
|
+
allowPro: options.allowPro,
|
|
21
23
|
virtualTypesFile: options.virtualTypesFile === false ? void 0 : options.virtualTypesFile ?? "src/featherk-fontawesome.d.ts"
|
|
22
24
|
}).then((result) => {
|
|
23
25
|
dependencies = new Set(result.dependencies.map(dependencyKey));
|
|
@@ -30,6 +32,15 @@ function featherkFontAwesome(options) {
|
|
|
30
32
|
enforce: "pre",
|
|
31
33
|
async configResolved(config) {
|
|
32
34
|
root = node_path.resolve(config.root, options.root ?? ".");
|
|
35
|
+
const installCommand = options.keys === void 0 ? void 0 : fontawesome_catalog.getFontAwesomeInstallCommand(options.keys, {
|
|
36
|
+
allowPro: options.allowPro
|
|
37
|
+
});
|
|
38
|
+
if (installCommand) {
|
|
39
|
+
console.info(
|
|
40
|
+
`[featherk-fontawesome] Install selected source packages with:
|
|
41
|
+
${installCommand}`
|
|
42
|
+
);
|
|
43
|
+
}
|
|
33
44
|
await regenerate();
|
|
34
45
|
},
|
|
35
46
|
async buildStart() {
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import type { Plugin } from "vite";
|
|
2
2
|
import type { FontAwesomeOptions } from "./types";
|
|
3
|
+
/** Configuration for the Font Awesome virtual module plugin. */
|
|
3
4
|
export interface FontAwesomeViteOptions extends FontAwesomeOptions {
|
|
4
5
|
virtualTypesFile?: string | false;
|
|
5
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Creates the Vite plugin for `virtual:featherk/fontawesome`.
|
|
9
|
+
*
|
|
10
|
+
* Catalog keys are resolved during Vite config setup, and their license
|
|
11
|
+
* notices are emitted into production builds.
|
|
12
|
+
*/
|
|
6
13
|
export declare function featherkFontAwesome(options: FontAwesomeViteOptions): Plugin;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { resolve } from "node:path";
|
|
2
2
|
import { realpath } from "node:fs/promises";
|
|
3
|
-
import {
|
|
3
|
+
import { getFontAwesomeInstallCommand } from "./catalog.mjs";
|
|
4
|
+
import { g as generateFaIcons } from "./chunks/generate-Zq9q2YZD.mjs";
|
|
4
5
|
const virtualId = "virtual:featherk/fontawesome";
|
|
5
6
|
const resolvedId = `\0${virtualId}`;
|
|
6
7
|
function dependencyKey(file) {
|
|
@@ -13,9 +14,10 @@ function featherkFontAwesome(options) {
|
|
|
13
14
|
let dependencies = /* @__PURE__ */ new Set();
|
|
14
15
|
function regenerate() {
|
|
15
16
|
generation = generateFaIcons({
|
|
16
|
-
|
|
17
|
+
keys: options.keys,
|
|
17
18
|
root,
|
|
18
19
|
sourceRoot: options.sourceRoot,
|
|
20
|
+
allowPro: options.allowPro,
|
|
19
21
|
virtualTypesFile: options.virtualTypesFile === false ? void 0 : options.virtualTypesFile ?? "src/featherk-fontawesome.d.ts"
|
|
20
22
|
}).then((result) => {
|
|
21
23
|
dependencies = new Set(result.dependencies.map(dependencyKey));
|
|
@@ -28,6 +30,15 @@ function featherkFontAwesome(options) {
|
|
|
28
30
|
enforce: "pre",
|
|
29
31
|
async configResolved(config) {
|
|
30
32
|
root = resolve(config.root, options.root ?? ".");
|
|
33
|
+
const installCommand = options.keys === void 0 ? void 0 : getFontAwesomeInstallCommand(options.keys, {
|
|
34
|
+
allowPro: options.allowPro
|
|
35
|
+
});
|
|
36
|
+
if (installCommand) {
|
|
37
|
+
console.info(
|
|
38
|
+
`[featherk-fontawesome] Install selected source packages with:
|
|
39
|
+
${installCommand}`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
31
42
|
await regenerate();
|
|
32
43
|
},
|
|
33
44
|
async buildStart() {
|
package/docs/ICONS.md
CHANGED
|
@@ -1,28 +1,31 @@
|
|
|
1
1
|
# Choose Font Awesome Icons and Create a Manifest
|
|
2
2
|
|
|
3
|
-
This
|
|
3
|
+
This guide covers how the UX Team designates needed Font Awesome variants, how the FeatherK UX/Design Engineer maintains the published metadata catalog, and how an application selects only the icons it uses. The published catalog is the shared source of truth and contains metadata, not artwork. A consuming app needs only the UX-provided keys; Vite resolves those keys without requiring the app to import or inspect other catalog entries. For integration and build setup, continue to [Font Awesome Build Integration](FontAwesome.md); CLI and non-Vite workflows are in [the CLI supplement](FontAwesomeCLI.md).
|
|
4
4
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
|
-
1.
|
|
8
|
-
2.
|
|
9
|
-
3.
|
|
10
|
-
4.
|
|
7
|
+
1. UX identifies the needed icon and intended family/style; confirm whether the variant is Free or Pro.
|
|
8
|
+
2. The FeatherK UX/Design Engineer confirms the exact identity, release, and source mapping, and assigns a globally unique catalog key.
|
|
9
|
+
3. The FeatherK UX/Design Engineer adds the variant metadata to the catalog and publishes the `@featherk/icons` update.
|
|
10
|
+
4. The consuming application's Dev puts only the needed keys in its keys-only manifest and configures the Vite/CLI build; Pro sources still require authorized access and license coverage.
|
|
11
11
|
|
|
12
12
|
The steps below help UX/Design create a precise handoff. Do not assume every icon exists in every family, style, or release.
|
|
13
13
|
|
|
14
14
|
## Where Each Field Comes From
|
|
15
15
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
| `key`
|
|
19
|
-
| `name`
|
|
20
|
-
| `version`
|
|
21
|
-
| `family`
|
|
22
|
-
| `style`
|
|
23
|
-
| `package`
|
|
16
|
+
| Catalog field | Who supplies it | Meaning |
|
|
17
|
+
| ------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
18
|
+
| `key` | UX/Design Engineer | Stable, globally unique lookup key for exactly one catalog variant; supplied to Vite/CLI by the consumer |
|
|
19
|
+
| `name` | Font Awesome catalog | Canonical icon name, such as `house`, without the `fa-` CSS prefix |
|
|
20
|
+
| `version` | UX and release approval | Exact source-package release, such as `7.0.0`, not `latest`, a range, or the first version that introduced the icon |
|
|
21
|
+
| `family` | UX/design selection | Supported family identifier, such as `classic` or `sharp` |
|
|
22
|
+
| `style` | UX/design selection | Supported style identifier, such as `solid`, `regular`, or `light` |
|
|
23
|
+
| `package` | UX/Design Engineer | Exact installed dependency name; may be an npm alias such as `fa-solid-v5` |
|
|
24
|
+
| `registryPackage` | UX/Design Engineer | Canonical npm package name targeted by `package` and checked against installed package metadata |
|
|
25
|
+
| `exportName` | UX/Design Engineer | Exact individual icon export in the source package |
|
|
26
|
+
| `tier` | UX/Design Engineer | `free` or `pro` classification for the exact variant; descriptive only, not proof of entitlement |
|
|
24
27
|
|
|
25
|
-
|
|
28
|
+
Each catalog key identifies one exact name/version/family/style/package/export variant. Different styles or releases require different keys. Catalog records are maintained and published by FeatherK; consuming applications do not copy these fields into their selection manifest. `tier` describes the Font Awesome product tier only; it does not grant access or establish license coverage. Package availability and Pro entitlement must still be confirmed independently.
|
|
26
29
|
|
|
27
30
|
## Step 1: Select and Approve the Catalog Variant
|
|
28
31
|
|
|
@@ -37,7 +40,7 @@ Copied markup can help identify the selection:
|
|
|
37
40
|
|
|
38
41
|
For this example, the canonical name is `heart`, family is `classic`, and style is `regular`. Confirm those values for the desired release; old CSS names may be compatibility aliases rather than that release's canonical name.
|
|
39
42
|
|
|
40
|
-
UX should hand off the catalog link, canonical name, approved exact release, family, style, and
|
|
43
|
+
UX should hand off the catalog link, canonical name, approved exact release, family, style, and intended appearance. The FeatherK UX/Design Engineer assigns the catalog key and verifies the source mapping. Any package/download entitlement must also be confirmed for Pro.
|
|
41
44
|
|
|
42
45
|
Important distinctions:
|
|
43
46
|
|
|
@@ -63,47 +66,37 @@ Common Classic package mappings are:
|
|
|
63
66
|
|
|
64
67
|
The `classic`/`brands` rows show common package mappings. Other families include `sharp`, `duotone`, and `sharp-duotone`; confirm their package names and release availability in the [official package documentation](https://docs.fontawesome.com/web/setup/packages). Do not construct package names by guesswork. Pro+ collections requiring Kits are outside this integration.
|
|
65
68
|
|
|
66
|
-
For Pro variants, confirm entitlement and release approval with the license owner before adding them. See [Pro licensing and setup](LICENSING.md).
|
|
69
|
+
For Pro variants, confirm entitlement and release approval with the license owner before adding them. See [Pro licensing and setup](LICENSING.md). The FeatherK UX/Design Engineer verifies the package mapping in the catalog; consuming-app Dev installs the package for selected keys.
|
|
67
70
|
|
|
68
|
-
## Step 3:
|
|
71
|
+
## Step 3: Select Keys in the Application Manifest
|
|
69
72
|
|
|
70
|
-
|
|
73
|
+
The FeatherK catalog holds the complete metadata record. A consuming app lists only the keys it actually uses; it does not repeat icon names, versions, styles, or package mappings. One project-owned keys file can group Free and optional Pro selections:
|
|
71
74
|
|
|
72
75
|
```json
|
|
73
76
|
{
|
|
74
|
-
"
|
|
75
|
-
|
|
76
|
-
"key": "heart-outline",
|
|
77
|
-
"name": "heart",
|
|
78
|
-
"version": "7.0.0",
|
|
79
|
-
"family": "classic",
|
|
80
|
-
"style": "regular",
|
|
81
|
-
"package": "@fortawesome/free-regular-svg-icons"
|
|
82
|
-
}
|
|
83
|
-
]
|
|
77
|
+
"free": ["heart-regular"],
|
|
78
|
+
"pro": []
|
|
84
79
|
}
|
|
85
80
|
```
|
|
86
81
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
The `key` is the application's identifier and does not need to match the canonical `name`. Use a unique key for each distinct selection. For example, the same canonical icon can be selected with different styles or versions as long as each entry has a different key.
|
|
82
|
+
For an optional Pro build, put its requested catalog keys in `pro`. Vite/CLI include those keys only when the app explicitly enables its authorized Pro profile. In this repository the shared key file is `demos/fontawesome.keys.json`.
|
|
90
83
|
|
|
91
84
|
## Naming and Uniqueness Rules
|
|
92
85
|
|
|
93
|
-
The
|
|
86
|
+
The catalog requires each `key` to be unique across all published variants. UX/Design Engineer assigns stable, descriptive lowercase kebab-case keys:
|
|
94
87
|
|
|
95
88
|
- Use the canonical icon name as the key when only one variant is selected, such as `rocket`.
|
|
96
89
|
- Add the style when the application needs multiple variants, such as `heart-regular` or `feather-light`.
|
|
97
90
|
- Add a version suffix only when multiple releases must coexist, such as `rocket-v5` and `rocket-v6`.
|
|
98
|
-
-
|
|
99
|
-
-
|
|
91
|
+
- Never reuse a key for a different identity. If the exact variant changes, assign/review a catalog key and update consumers with UX.
|
|
92
|
+
- Use distinct keys for different styles or releases of the same canonical name.
|
|
100
93
|
|
|
101
|
-
|
|
94
|
+
Consumers use the UX-provided key for lookup. They do not need to know the other catalog entries or carry source metadata in their app manifest.
|
|
102
95
|
|
|
103
96
|
## UX/Design Handoff
|
|
104
97
|
|
|
105
|
-
|
|
98
|
+
The UX Team designates the desired icon and exact variant and provides its catalog link and intended appearance. The FeatherK UX/Design Engineer maintains the owned custom icon collection and published Font Awesome metadata catalog, assigns the globally unique key, and publishes package updates. For an application build, Dev selects only the needed keys in `vite.config.ts` or the shared keys-only file and owns source-package installation and build integration.
|
|
106
99
|
|
|
107
|
-
Catalog
|
|
100
|
+
Catalog metadata and source availability or license entitlement are separate. A Pro key requires explicit Pro-profile opt-in and an authorized, exact source package. If the exact package, version, or export cannot be confirmed, fail the build rather than silently substituting another icon or release.
|
|
108
101
|
|
|
109
102
|
After the manifest is ready, continue with [Vite build integration](FontAwesome.md). For Pro selections, review [Pro licensing and setup](LICENSING.md). Non-Vite or pre-typecheck CLI workflows are documented in [the CLI supplement](FontAwesomeCLI.md).
|
|
@@ -1,51 +1,35 @@
|
|
|
1
1
|
# Font Awesome Build Integration
|
|
2
2
|
|
|
3
|
-
Font Awesome support is opt-in.
|
|
3
|
+
Font Awesome support is opt-in. `@featherk/icons` publishes one metadata-only catalog of FeatherK-curated Free and Pro variants at `@featherk/icons/fontawesome/catalog`; it contains no Font Awesome artwork and grants no license or access. UX provides globally unique catalog keys. A consuming app lists only keys it uses in its keys-only manifest and configures this workflow to generate Kendo-compatible descriptors from its authorized, installed sources. Consumers using only `getCustomIcon()` do not need this integration; that custom-icon API and registry remain separate.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The FeatherK UX/Design Engineer maintains the published catalog; the UX Team designates requested icons and variants. Consuming-app Dev owns key selection, source installation, Vite configuration, validation, and application integration. For licensed sources, see [Pro licensing and setup](LICENSING.md), including optional local profiles, secret handling, GitHub Actions/TeamCity, and consuming applications.
|
|
6
6
|
|
|
7
7
|
## Quick Start
|
|
8
8
|
|
|
9
|
-
1. UX
|
|
9
|
+
1. UX designates the needed exact icon variant; the FeatherK UX/Design Engineer maintains its globally unique key and exact metadata in the published catalog. The license owner confirms Pro entitlement and approved release coverage.
|
|
10
10
|
2. Dev installs `@featherk/icons` with the Font Awesome Vite entry point and ensures compatible Vite 7.x or 8.x is available using [Install the Vite Integration](#install-the-vite-integration).
|
|
11
|
-
3. Dev
|
|
12
|
-
4. Dev configures the Vite plugin
|
|
11
|
+
3. Dev checks the source mapping for selected keys, confirms access and availability, configures authorized registry access when required, then installs only the matching pinned npm packages using [Install Source Packages](#install-source-packages). For Pro, follow [Pro token setup](LICENSING.md#dev-setup-quick-start) before installation.
|
|
12
|
+
4. Dev configures the Vite plugin with only the selected keys. Pro keys require explicit Pro-profile opt-in and authorized installed sources; see [Vite Setup](#vite-setup).
|
|
13
13
|
5. Dev renders the selected descriptors through the virtual module using the [rendering example](#render-the-selected-key).
|
|
14
14
|
6. Dev preserves emitted license notices in application distribution as described in [Preserve license notices](#preserve-license-notices).
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Consumers need only the keys, not the other catalog records. These examples use keys present in the published catalog; verify source availability and license coverage for the project's exact selections. Install a FeatherK release/build containing these entry points; a prior published release does not gain them automatically. For CLI generation, including declaration preparation before an early type check, see [CLI and non-Vite setup](FontAwesomeCLI.md).
|
|
17
17
|
|
|
18
18
|
```json
|
|
19
19
|
{
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
"key": "account",
|
|
23
|
-
"name": "user",
|
|
24
|
-
"version": "7.0.0",
|
|
25
|
-
"family": "classic",
|
|
26
|
-
"style": "solid",
|
|
27
|
-
"package": "fa-solid-v7"
|
|
28
|
-
}
|
|
29
|
-
]
|
|
20
|
+
"free": ["user"],
|
|
21
|
+
"pro": []
|
|
30
22
|
}
|
|
31
23
|
```
|
|
32
24
|
|
|
33
25
|
### Pro Demo Example
|
|
34
26
|
|
|
35
|
-
The repository's Pro demo selects Classic Light `house` from Font Awesome Pro 7
|
|
27
|
+
The repository's Pro demo selects Classic Light `house` from Font Awesome Pro 7 with the catalog key `pro-house-light`. Include it only in an authorized Pro build with the required package access and license coverage:
|
|
36
28
|
|
|
37
29
|
```json
|
|
38
30
|
{
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
"key": "pro-house-light",
|
|
42
|
-
"name": "house",
|
|
43
|
-
"version": "7.0.0",
|
|
44
|
-
"family": "classic",
|
|
45
|
-
"style": "light",
|
|
46
|
-
"package": "@fortawesome/pro-light-svg-icons"
|
|
47
|
-
}
|
|
48
|
-
]
|
|
31
|
+
"free": ["user"],
|
|
32
|
+
"pro": ["pro-house-light"]
|
|
49
33
|
}
|
|
50
34
|
```
|
|
51
35
|
|
|
@@ -75,62 +59,65 @@ npm install --save-dev @featherk/icons vite@^7.0.0
|
|
|
75
59
|
|
|
76
60
|
## Install Source Packages
|
|
77
61
|
|
|
78
|
-
|
|
62
|
+
The catalog maps each key to its local dependency name, canonical registry package, export, and exact version. Dev installs only packages needed by selected keys, pinned to those exact versions. When Vite processes the selected keys, it prints one deduplicated `npm install --save-dev --save-exact ...` command in the terminal, including version aliases where needed. The CLI prints the same suggestion before generation. Run it from the consuming project with the appropriate registry access; FeatherK tooling never installs packages or handles credentials. During generation, the installed package's declared name is checked against `registryPackage` and its version against the catalog before the icon module is loaded. The Free example uses `@fortawesome/free-solid-svg-icons@7.0.0`; the Pro example needs authorized access to `@fortawesome/pro-light-svg-icons@7.0.0`.
|
|
79
63
|
|
|
80
64
|
```sh
|
|
81
|
-
# Free
|
|
82
|
-
npm install --save-dev --save-exact
|
|
65
|
+
# Free source for the selected `user` key.
|
|
66
|
+
npm install --save-dev --save-exact @fortawesome/free-solid-svg-icons@7.0.0
|
|
83
67
|
|
|
84
68
|
# Pro package used by the example manifest.
|
|
85
69
|
npm install --save-dev --save-exact @fortawesome/pro-light-svg-icons@7.0.0
|
|
86
70
|
```
|
|
87
71
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
Note: Aliases (i.e Like `fa-solid-v7` in the example above) let one project install multiple versions of the same npm package under distinct dependency names. See [alias details](#about-aliases-and-why-use-them).
|
|
72
|
+
Aliases let one project install multiple versions of the same npm package under distinct dependency names. The catalog's `package` mapping specifies the dependency name for each selected version. See [alias details](#about-aliases-and-why-use-them).
|
|
91
73
|
|
|
92
74
|
Never put a Pro token in the command or commit it. See [Pro licensing and setup](LICENSING.md) for secure registry configuration.
|
|
93
75
|
|
|
76
|
+
The printed command is an install suggestion, not a license or access check. Pro builds still require separately configured authorized registry access and the explicit Pro profile. Vite may print the same selected-package command on each startup; it includes only packages mapped from that app's selected keys.
|
|
77
|
+
|
|
94
78
|
## Vite Setup
|
|
95
79
|
|
|
96
|
-
The following setup is Dev-owned and assumes the
|
|
80
|
+
The following setup is Dev-owned and assumes the app keys-only manifest and required license approvals are in place.
|
|
97
81
|
|
|
98
82
|
```ts
|
|
99
83
|
import { defineConfig } from "vite";
|
|
100
84
|
import vue from "@vitejs/plugin-vue";
|
|
101
85
|
import { featherkFontAwesome } from "@featherk/icons/fontawesome/vite";
|
|
102
|
-
import
|
|
103
|
-
|
|
86
|
+
import manifest from "./fontawesome.keys.json";
|
|
87
|
+
|
|
88
|
+
const proEnabled = process.env.FEATHERK_FONTAWESOME_PRO === "1";
|
|
104
89
|
|
|
105
|
-
// Step 1: Use
|
|
90
|
+
// Step 1: Use UX-provided keys; verify any required Pro entitlement separately.
|
|
106
91
|
// Step 2: Ensure @featherk/icons and Vite 7 or 8 are available.
|
|
107
|
-
// Step 3: Install
|
|
92
|
+
// Step 3: Install source packages mapped by the selected catalog keys before Vite starts.
|
|
108
93
|
export default defineConfig({
|
|
109
|
-
// Step 4:
|
|
94
|
+
// Step 4: Pro keys are included only for the explicitly enabled profile.
|
|
110
95
|
plugins: [
|
|
111
96
|
vue(),
|
|
112
97
|
featherkFontAwesome({
|
|
113
|
-
|
|
98
|
+
keys: [...manifest.free, ...(proEnabled ? manifest.pro : [])],
|
|
99
|
+
allowPro: proEnabled,
|
|
100
|
+
sourceRoot: proEnabled ? "pro" : undefined,
|
|
114
101
|
}),
|
|
115
102
|
],
|
|
116
103
|
});
|
|
117
104
|
```
|
|
118
105
|
|
|
119
|
-
Enable JSON imports in the consumer's TypeScript configuration if necessary. The
|
|
106
|
+
Enable JSON imports in the consumer's TypeScript configuration if necessary. The app passes only keys; the catalog supplies exact metadata, and the generator validates installed source versions and identities at runtime.
|
|
120
107
|
|
|
121
108
|
### Render the Selected Key
|
|
122
109
|
|
|
123
110
|
```vue
|
|
124
111
|
<template>
|
|
125
112
|
<!-- Step 5: Render the generated descriptor directly through Kendo. -->
|
|
126
|
-
<SvgIcon :icon="
|
|
113
|
+
<SvgIcon :icon="userIcon" />
|
|
127
114
|
</template>
|
|
128
115
|
|
|
129
116
|
<script setup lang="ts">
|
|
130
117
|
import { SvgIcon } from "@progress/kendo-vue-common";
|
|
131
118
|
import { getFaIcon } from "virtual:featherk/fontawesome";
|
|
132
119
|
|
|
133
|
-
const
|
|
120
|
+
const userIcon = getFaIcon("user");
|
|
134
121
|
</script>
|
|
135
122
|
```
|
|
136
123
|
|
|
@@ -144,7 +131,7 @@ The plugin emits `featherk-fontawesome.licenses.txt` into Vite build output (Ste
|
|
|
144
131
|
|
|
145
132
|
`getFaIcon(key)` returns a runtime `FontAwesomeIcon` object with `{ name, content, viewBox }`, structurally compatible with Kendo's `SVGIcon`. `name` is the selected manifest key, `content` is the inner SVG path markup without an outer `<svg>`, and `viewBox` preserves the source geometry. The property is case-sensitive: `viewBox`, not `viewbox`.
|
|
146
133
|
|
|
147
|
-
The following examples assume `rocket` is included in the project's enabled selections. Replace it with your selected key, such as `
|
|
134
|
+
The following examples assume `rocket` is included in the project's enabled selections. Replace it with your selected key, such as `user` in the Quick Start manifest.
|
|
148
135
|
|
|
149
136
|
### Application Code
|
|
150
137
|
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# Font Awesome CLI and Non-Vite Setup
|
|
2
2
|
|
|
3
|
-
This Dev-owned supplement assumes UX/Design has supplied the
|
|
3
|
+
This Dev-owned supplement assumes UX/Design has supplied catalog keys. The catalog contains the source metadata; the app manifest contains only keys the project uses. For icon choice and key assignment, start with [Choose Font Awesome Icons and Create a Manifest](CreateFontAwesomeManifest.md). For the default Vite integration, see [Font Awesome Build Integration](FontAwesome.md).
|
|
4
4
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
|
-
1. Receive the UX-
|
|
7
|
+
1. Receive the UX-provided catalog keys and required license approvals.
|
|
8
8
|
2. Dev installs `@featherk/icons` at a release containing the CLI or Node API; for example, `npm install --save-dev @featherk/icons`.
|
|
9
|
-
3. Dev installs the
|
|
10
|
-
4. Dev generates virtual-module declarations or a regular ESM module from the manifest.
|
|
9
|
+
3. Dev installs only the packages mapped to selected keys in the published catalog, pinned to exact versions. For Pro, follow [Pro token setup](LICENSING.md#dev-setup-quick-start) before installation; package examples are in [Install Source Packages](FontAwesome.md#install-source-packages).
|
|
10
|
+
4. Dev generates virtual-module declarations or a regular ESM module from the keys-only manifest.
|
|
11
11
|
5. Dev imports the generated module where needed, type-checks declarations, and preserves emitted license notices.
|
|
12
12
|
|
|
13
|
-
The CLI validates installed Font Awesome source packages; it does not install them or authenticate with a registry. A prior FeatherK release does not gain the CLI or Node API entry points automatically.
|
|
13
|
+
The CLI prints one deduplicated exact install command for the packages mapped to selected keys before generation. Run that command yourself from the consumer project after configuring any required registry access. The CLI validates installed Font Awesome source packages; it does not install them or authenticate with a registry. A prior FeatherK release does not gain the CLI or Node API entry points automatically.
|
|
14
14
|
|
|
15
15
|
### Generate declarations before a Vite type check
|
|
16
16
|
|
|
@@ -18,10 +18,10 @@ The Vite plugin writes `src/featherk-fontawesome.d.ts` on startup by default. If
|
|
|
18
18
|
|
|
19
19
|
```sh
|
|
20
20
|
# Step 4: Generate the virtual-module declarations before standalone type checking.
|
|
21
|
-
npm exec -- featherk-fontawesome --manifest fontawesome.
|
|
21
|
+
npm exec -- featherk-fontawesome --manifest fontawesome.keys.json --virtual-types src/featherk-fontawesome.d.ts
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
The manifest uses `{ "free": ["key"], "pro": ["key"] }`. By default, the CLI selects only `free` keys. For a licensed profile, add `--allow-pro`; the CLI then includes the `pro` keys and rejects Pro selections if the exact source package cannot be resolved. Configure the Vite plugin with the same key file and profile. `virtualTypesFile` can select another project-local `.d.ts` path or disable plugin writing with `false`.
|
|
25
25
|
|
|
26
26
|
### Generate a module for a non-Vite application
|
|
27
27
|
|
|
@@ -29,7 +29,7 @@ No migration to Vite is required. Generate a regular ESM module and adjacent dec
|
|
|
29
29
|
|
|
30
30
|
```sh
|
|
31
31
|
# Step 4: Generate application-local ESM output from the selected manifest.
|
|
32
|
-
npm exec -- featherk-fontawesome --manifest fontawesome.
|
|
32
|
+
npm exec -- featherk-fontawesome --manifest fontawesome.keys.json --out src/generated/fontawesome/icons.mjs
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Import the generated module before running the existing application build:
|
|
@@ -38,16 +38,16 @@ Import the generated module before running the existing application build:
|
|
|
38
38
|
// Step 5: Use the manifest key selected for this application.
|
|
39
39
|
import { getFaIcon } from "./generated/fontawesome/icons.mjs";
|
|
40
40
|
|
|
41
|
-
const
|
|
41
|
+
const userIcon = getFaIcon("user");
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
Run generation again when selections change, including before local development. A generation failure exits nonzero and must stop CI; do not continue with prior output. Preserve the emitted `icons.mjs.licenses.txt` notice in application distribution. Non-Vite bundlers do not automatically copy that sidecar.
|
|
45
45
|
|
|
46
46
|
## Node API and CLI Options
|
|
47
47
|
|
|
48
|
-
`generateFaIcons` from `@featherk/icons/fontawesome/build` accepts `
|
|
48
|
+
`generateFaIcons` from `@featherk/icons/fontawesome/build` accepts selected `keys`, optional `allowPro`, `root`, `sourceRoot`, `outFile`, and `virtualTypesFile`. It returns ESM code, file-module declarations, ambient virtual-module declarations, notices, provenance, and source dependency paths. Without output options, it writes nothing. Catalog keys are the only supported selection input. Pro keys require `allowPro: true`, which is an accidental-use guard, not proof of license entitlement.
|
|
49
49
|
|
|
50
|
-
The CLI accepts `--manifest`, `--root`, `--source-root`, `--out`, `--virtual-types`, and `--help`. The manifest
|
|
50
|
+
The CLI accepts `--manifest`, `--root`, `--source-root`, `--allow-pro`, `--out`, `--virtual-types`, and `--help`. The manifest contains `free` and optional `pro` arrays of catalog keys; full-record `icons` manifests are rejected. To migrate from 0.14.0, replace each full selection record with its UX-provided catalog key and use the published catalog for source metadata. Specify at least one output. Paths are relative to `--root` or the current directory. File output uses `.js`/`.mjs` with `.d.ts`/`.d.mts` declarations; ambient output uses `.d.ts` and must not overwrite the file-module declaration.
|
|
51
51
|
|
|
52
52
|
Output must remain inside the consumer project, outside `node_modules` and the `@featherk/icons` package. The independent runtime `createFontAwesomeService` is available from `@featherk/icons/fontawesome`; Node tooling is never imported through the custom-icon root service.
|
|
53
53
|
|
|
@@ -105,9 +105,9 @@ Two supported Vite layouts are:
|
|
|
105
105
|
|
|
106
106
|
For non-Vite applications or declaration generation before a standalone type check, follow [CLI and non-Vite setup](FontAwesomeCLI.md). Registry authentication still belongs to the authorized package installation environment; the generator and browser never receive the token.
|
|
107
107
|
|
|
108
|
-
For Vite,
|
|
108
|
+
For Vite, pass only selected catalog keys and opt in at the profile level, for example `featherkFontAwesome({ keys, allowPro: true, sourceRoot: "pro" })`. Keep Pro keys in the app's optional Pro group and include them only in an authorized build profile. The profile scripts above are repository demo helpers, not scripts automatically installed into consumer applications. The `allowPro` option prevents accidental selection; it does not verify license entitlement.
|
|
109
109
|
|
|
110
|
-
For applications using both Free and Pro, UX
|
|
110
|
+
For applications using both Free and Pro, UX provides catalog keys for both tiers; Dev keeps Free and Pro keys in the shared keys-only selection file and includes Pro keys only in the explicit authorized profile. Optional profiles must not silently include paid inputs in public/uncredentialed builds. Follow the [generated-output ignore guidance](FontAwesome.md#generated-output-and-source-checks): exclude generated files from ESLint/Prettier/Git while retaining TypeScript checks.
|
|
111
111
|
|
|
112
112
|
## CI and Deployment
|
|
113
113
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@featherk/icons",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"main": "dist/featherk-icons.umd.js",
|
|
5
5
|
"module": "dist/featherk-icons.es.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -25,6 +25,11 @@
|
|
|
25
25
|
"import": "./dist/fontawesome/vite.mjs",
|
|
26
26
|
"require": "./dist/fontawesome/vite.cjs"
|
|
27
27
|
},
|
|
28
|
+
"./fontawesome/catalog": {
|
|
29
|
+
"types": "./dist/fontawesome/catalog.d.ts",
|
|
30
|
+
"import": "./dist/fontawesome/catalog.mjs",
|
|
31
|
+
"require": "./dist/fontawesome/catalog.cjs"
|
|
32
|
+
},
|
|
28
33
|
"./package.json": "./package.json"
|
|
29
34
|
},
|
|
30
35
|
"files": [
|