diff --git a/.claude/skills/clean-house/.pql-install.json b/.claude/skills/clean-house/.pql-install.json deleted file mode 100644 index f4d08701..00000000 --- a/.claude/skills/clean-house/.pql-install.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version": "1.5.0", - "hash": "sha256:8090b99552c828ce019aa3740d8a0acb4768a443704b4e935efa23b32e91128d", - "installed_at": "2026-06-02T08:46:25Z" -} diff --git a/.claude/skills/clean-house/SKILL.md b/.claude/skills/clean-house/SKILL.md deleted file mode 100644 index de63c433..00000000 --- a/.claude/skills/clean-house/SKILL.md +++ /dev/null @@ -1,229 +0,0 @@ ---- -name: clean-house -description: > - Run a documentation-discipline pass over a DQR (Decisions / Questions / - Rejected) markdown system. Audits decisions/, surfaces drift (broken - anchor links, missing Q→D backlinks, sunset-shaped phrases without - linked tickets, files over the split threshold, dead cross-references), - batches findings by category, and uses AskUserQuestion to apply fixes - interactively. Trigger this skill whenever the user asks to clean, - tidy, audit, sweep, garden, or review the state of decisions/, the - DQR system, the questions index, or the records under decisions/. - Also trigger before a release, after a session that touched many - records, or whenever the user mentions documentation drift, stale - plans, or "house" / "clean-house" / "house cleaning". Imperative — - apply fixes, not just report. ---- - -# clean-house - -A periodic gardening pass over `decisions/`. The DQR system is -markdown-as-source-of-truth; `.pql/pql.db` is a derived index. This skill -operates on the markdown files, batches drift by category, and uses -`AskUserQuestion` to decide what to apply. - -The skill is **imperative**. It really cleans. The verb-noun match is -load-bearing — a `clean-house` that only produced a report would be -misnamed. Mechanical fixes get a single batched approval, judgment-call -findings get individual prompts, and a "stop asking" escape hatch is -always present. - -You — Claude — are the runtime. Read this file, read -`references/rules.md`, follow the procedure below, call `pql` and `Edit` -to do the work, call `AskUserQuestion` for the prompts. - -## When to run - -- Before a release. -- After a session that touched many D / Q / R records. -- When something feels stale and a sweep is wanted. -- When `pql decisions validate` is green but `decisions/` still feels off. - -This skill is **not** a replacement for `pql decisions validate`. -Validate is fast, hot, and gates pre-push. clean-house is slow, cold, -on-demand. Escalation path: rules that fire often here are candidates -for promotion to `pql decisions validate`; rules that almost never fire -stay here where false positives don't slow anyone down. - -## Procedure - -1. **Gate on validate.** Run `pql decisions validate`. If it exits - non-zero, stop and tell the user to fix validator findings first. - Do not proceed. - -2. **Load the rule catalog.** Read `references/rules.md`. Each rule - names its detection, fix, and finding-id format. - -3. **Probe conventions.** Read `decisions/.clean-house.yaml` if it - exists; otherwise infer from the project. Conventions to resolve: - - `heading_level`: 2 or 3 — the depth records use (`## D-N` vs - `### D-N`). Probe by sampling the first 3 records' file - locations and looking for the first matching ATX heading. - - `backlink_phrasing`: the project's Q→D backlink phrase (default - `Resolved → D-N`; some projects use `Resolved as D-N` or - `→ D-N`). - - `file_threshold`: default 350 (RULE-FILE-OVER-THRESHOLD). - - `stale_open_q_days`: default 60 (RULE-STALE-OPEN-Q). - - Pass the resolved conventions into each rule's detection. Cache - the probe result for the run. - - `decisions/.clean-house.yaml` shape (all keys optional): - ```yaml - heading_level: 3 - backlink_phrasing: "Resolved → " - file_threshold: 500 - stale_open_q_days: 90 - exclude_paths: ["legacy/", "drafts/"] - ``` - -4. **Sync the index.** Run `pql decisions sync` so the DB reflects - the markdown. - -5. **Walk decisions/.** Use `pql decisions list` to enumerate - records, plus `pql decisions read ` per record when a rule - needs the body. For file-level rules (size, sort), read the - markdown files directly. **Filter out** any record whose - `file_path` begins with `legacy/` (or any prefix in - `exclude_paths` from the probe). - -6. **Run each rule's detection.** Collect findings. Tag each with - its rule ID, finding ID (per the rule's format), category - (`mechanical` | `judgment`), and the record(s)/file(s) involved. - -7. **Group findings by rule** and prompt. Honor any "skipped 3+ - times" findings from the skip ledger by escalating their prompt - ("skipped 3x — promote to manual decision, downgrade to - summary-only, or keep asking?"): - - - **Mechanical rules** — one prompt per rule, batched. Show the - count and offer: apply all / show diff first / skip this rule / - **stop asking** (global — see below). - - **Judgment rules** — one prompt per finding. Options match the - rule's `Fix` section, plus the same global **stop asking**. - - **"Stop asking" semantics (global).** When the user picks "stop - asking" on any prompt, immediately halt all further prompts in - the run — mechanical batches not yet asked AND remaining - judgment findings. Move all unprompted findings to the skip - ledger marked `deferred-stop-asking`. Skip to step 9. - - **"Show diff first" loop.** When the user picks "show diff - first" on a mechanical batch, emit a unified diff of the staged - edits (one block per file), then re-prompt the same question - with the same options minus "show diff first" — preventing - infinite loops while still letting the user inspect before - committing. - -8. **Apply approvals.** For mechanical rules use `Edit` to mutate - the markdown directly. For judgment rules, follow the option the - user picked (file a ticket via `pql ticket new`, mark superseded - by editing the record, etc.). - -9. **Update the skip ledger and history.** Both files live at - `decisions/.clean-house-state.md`, gitignored. The file uses - per-run section headers so it doubles as run history: - - ```markdown - # clean-house run history - - ## 2026-05-06T13:42Z - fired: RULE-ANCHOR-DRIFT(1) RULE-SUNSET-WITHOUT-TICKET(1) - applied: RULE-ANCHOR-DRIFT(1) RULE-SUNSET-WITHOUT-TICKET(1) - skipped: - - RULE-ANCHOR-DRIFT D-8:#q-1-markdown-mirror-for-tickets - - ## 2026-05-04T11:10Z - fired: ... - ``` - - Each section starts with a UTC ISO-8601 timestamp. `fired` - counts findings detected; `applied` counts findings the user - acted on; `skipped` lists ` ` pairs. - - **Promotion-candidate computation.** Scan the most recent N=7 - sections (or all sections if fewer). A rule is a promotion - candidate if it `fired` in ≥ 5 of those sections. Surface the - candidates in the summary; do not auto-promote. - -10. **Emit the summary** (see Output below). - -## Question phrasing - -Always include the rule ID in the prompt so the user learns what's -being checked. - -**Mechanical (batched):** -> RULE-ANCHOR-DRIFT: 12 cross-reference anchors point to headings that -> no longer exist (renamed or deleted). Apply all 12 fixes? Options: -> apply all / show diff first / skip this rule / stop asking, summarize -> the rest. - -**Judgment (individual):** -> RULE-SUNSET-WITHOUT-TICKET: D-59 mentions "must track dugite-native -> releases for security updates" but has no linked T. Options: file T -> now / draft a T description first / mark as already covered (add note -> to D) / skip / stop asking. - -Phrasing rules: - -- **Always include "stop asking, summarize the rest."** Sessions - without bandwidth for full review need an escape. Forcing answers - to every question kills the tool. -- **Always include "skip."** Skipped findings go to the ledger; three - consecutive skips of the same finding promote the next prompt. -- **Mechanical batches; judgment doesn't.** "Apply all 12 fixes?" is - one decision against a clear delta. Twelve individual prompts defeat - the point. Conversely, judgment findings are each separate work — - presenting them as a batch hides cost. - -## What this skill does NOT do - -- Does not file tickets without asking. -- Does not rewrite D-record body prose, only metadata fields and - cross-reference links. -- Does not touch records under `legacy/`. -- Does not run `pql decisions validate` *as a fix* — only as a - precondition gate. -- Does not promote rules to `pql decisions validate` automatically. - Promotion is a human decision; this skill only flags candidates - ("RULE-X has fired in 5 of the last 7 runs — consider promoting"). - -## Non-interactive context - -If invoked without an interactive `AskUserQuestion` surface (a CI run, -a batch script), refuse to apply judgment fixes. Apply mechanical -fixes only if the user explicitly says so via the trigger phrase -("auto-apply mechanical, skip judgment"); otherwise emit the summary -and exit without mutating files. - -## Output - -At the end, emit a summary block: - -``` -clean-house — sweep complete -──────────────────────────── -Files scanned: 11 -Records parsed: 62 D, 23 Q, 11 R -Conventions: heading_level=3 backlink="Resolved → " -Mechanical fixes: 14 applied, 0 deferred -Judgment findings: 3 acted on, 2 deferred (in state file) -Promotion candidates: RULE-ANCHOR-DRIFT (5/7 runs) -Touched files: decisions/architecture.md, decisions/questions.md -``` - -If this is the first run (no prior history) or there are fewer -than 5 prior runs, `Promotion candidates:` reports -`(none — N/7 runs of history)` instead of decorative empty content. - -The summary names the touched files so the next commit message can be -honest about what changed. The skill does not commit on its own. - -## Versioning - -clean-house ships embedded in the pql binary; its version is the -pql version (`pql --version`). To see what changed and when, read -`CHANGELOG.md` or `git log internal/skill/clean-house/` in the pql -repo. Keep this file and `references/rules.md` consistent with -each other when iterating — they're the contract. diff --git a/.claude/skills/clean-house/references/rules.md b/.claude/skills/clean-house/references/rules.md deleted file mode 100644 index 85d8edc3..00000000 --- a/.claude/skills/clean-house/references/rules.md +++ /dev/null @@ -1,386 +0,0 @@ -# clean-house rule catalog - -The rules clean-house runs and the reasoning behind each. New rules -land here as their own entry. Catalog churn — additions, refinements, -retirements — is tracked in pql's `CHANGELOG.md` and `git log -internal/skill/clean-house/`. When a rule is retired, leave a -**Retired** stub (ID + one-line reason + retirement commit) so the -trail of "we used to check X" is recoverable from this file alone. - -## Reading a rule - -Each entry below has: - -- **ID** — Stable identifier (e.g. `RULE-ANCHOR-DRIFT`). Used in - AskUserQuestion prompts and skip-ledger entries so the user learns - what's being checked. -- **Category** — `mechanical` or `judgment`. Drives whether findings - batch into one prompt or each get their own. -- **Finding ID** — Format string for the per-finding stable - identifier. Skip-ledger entries are written as ` - `; subsequent runs use the same format to - recognize "same finding skipped 3 runs in a row" and escalate. - Use only stable inputs (record IDs, file paths, slug strings, body - hashes) — never line numbers or timestamps. -- **Detection** — Concrete steps to find violations. Names the - pql command or file primitive used. -- **Fix** — Mechanical: deterministic action. Judgment: the prompt - option list and what each option does. -- **Why** — One paragraph on the failure mode this rule guards - against. Future-you reading the rule benefits from the reasoning, - not just the check. - ---- - -## RULE-ANCHOR-DRIFT - -**Category:** mechanical - -**Finding ID:** `:` (e.g. -`D-8:#q-1-markdown-mirror-for-tickets` or -`D-8:questions.md#q-1`). - -**Detection:** - -Anchor-only markdown links (`[text](#slug)`) resolve against the -**source file's full heading set**, not the body of a single record -— record-level headings (`### D-N: …`) live as siblings in the -file and are valid link targets. The previous detection (which used -`pql decisions read`'s body-only `headings` array) missed these -and produced false positives. - -Per source body: - -1. Open the source body's file (`/` from - `pql decisions list`) and extract every ATX heading. Build a - slug index for the file using the GFM convention (lowercase, - hyphenate spaces, drop punctuation, disambiguate duplicates with - `-1`/`-2`). Cache per file — every record in that file uses the - same index. -2. For each `[text](target)` link in the body: - - Anchor-only (`#slug`): check `slug` against the **source file's** - index. Missing → flag. - - Cross-file (`path.md#slug`): resolve `path.md` relative to the - source file's directory; check `slug` against that file's - index. Missing file or missing slug → flag. - -**Fix:** - -If the slug exists in a sibling file's index (same directory) and -the link is anchor-only, rewrite to `path.md#slug` (the canonical -cross-file form). If the slug exists in the source file's index -with edit-distance ≤ 2 from the link target, rewrite to the -matched slug. Otherwise downgrade to judgment ("no auto-fix; the -heading was removed, not renamed") with options: drop the link / -point elsewhere / mark as intentionally dangling. - -**Fix:** - -If exactly one heading with a closely-matching slug exists (slug -edit-distance ≤ 2 or substring match), rewrite the link to point at -that heading. If no plausible match exists, downgrade the finding to -judgment ("no auto-fix; the heading was removed, not renamed") and -prompt the user with options: drop the link / point elsewhere / mark -as intentionally dangling. - -**Why:** - -When a heading is renamed for clarity, every cross-reference pointing -at the old slug silently breaks. The rendered docs still look fine — -the link just goes nowhere. Without periodic sweeps these decay -indefinitely; the cost of the sweep is small compared to the cost of -a reader following a dead link and losing trust in the index. - ---- - -## RULE-MISSING-Q-BACKLINK - -**Category:** mechanical - -**Finding ID:** `:` (e.g. `D-7:Q-2`). Order is always -D-first regardless of which side is missing the backlink. - -**Detection:** - -For each D record body, find lines of the shape `Resolves: Q-N` -(plain text, typically in the metadata block at the top of the -record). For each Q-N referenced, fetch that Q record's body via -`pql decisions read Q-N` and check whether it contains a line of the -shape `Resolved → D-N` (or equivalent backlink phrasing — match the -project's own convention; default pattern is `Resolved → D-N`). - -Also check the reverse direction: any Q record claiming -`Resolved → D-N` whose D-N body lacks `Resolves: Q-N`. - -**Fix:** - -Insert the missing backlink in-place using `Edit`: - -- Missing on the D side: add `Resolves: Q-N` to the D's metadata - block (typically right after `Domain:` / `Status:` lines). -- Missing on the Q side: append `Resolved → D-N` to the Q's status - line (or in the conventional position for that project). - -**Why:** - -Bidirectional Q↔D links are the navigation backbone of the DQR -system. When one side drifts, search-by-decision finds nothing for -that question and search-by-question doesn't surface its resolution. -The asymmetric state usually arises from a hand-edit on one record -that forgot to update the other; the fix is purely mechanical because -the correct content is already determined by the existing pointer -in the other direction. - ---- - -## RULE-RECORD-SORT - -**Category:** mechanical - -**Finding ID:** `` (e.g. `decisions/architecture.md`). -The whole file is one finding — sort applies to the file as a -unit. - -**Detection:** - -For each `decisions/*.md` file, read it directly (no pql) and find -all top-level `## D-N` / `## Q-N` / `## R-N` headings in order. Strip -the prefix, parse the numeric suffix, and check whether the sequence -is monotonically ascending within each ID family (D, Q, R kept -separate — files commonly mix families). - -Only flag a file if it is **otherwise tidy** — currently no out-of- -order amendments interleaved with new records. The heuristic: if the -sort would touch fewer than three records out of position, apply it; -if more, downgrade to judgment ("this file looks deliberately -arranged — confirm before reordering"). Three is a soft threshold; if -the file's last commit message contains `WIP` or `do-not-sort`, skip. - -**Fix:** - -Reorder the records within the file so each ID family is ascending. -Preserve everything else (headings between record blocks, any prose -prelude/postlude). Use `Edit` with full block replacement, not in- -place line shuffling — easier to verify the diff. - -**Why:** - -Records added at the bottom of a file are easy to write but hard to -find. Sorted IDs let a reader find D-37 by jumping to the -two-thirds mark of the file rather than scanning. The cost of the -sort is one reordering pass; the benefit is paid back on every -subsequent read. - ---- - -## RULE-EOF-NORMALIZATION - -**Category:** mechanical - -**Finding ID:** `` (one finding per file). - -**Detection:** - -For each `decisions/*.md` file (and any other markdown the skill -touched during this run), read directly. Flag if: - -- File does not end with exactly one `\n`. -- Any line contains trailing whitespace before its `\n`. - -**Fix:** - -Trim trailing whitespace from each line. Ensure exactly one trailing -newline at end of file. Use `Edit` only if a violation was found — -this rule must not produce a no-op diff. - -**Why:** - -Editor and git config drift causes whitespace creep that's invisible -in rendering but pollutes diffs (every record edit ends up touching -unrelated lines). A periodic normalization keeps future diffs clean -without forcing per-editor enforcement on every contributor. - ---- - -## RULE-SUNSET-WITHOUT-TICKET - -**Category:** judgment - -**Finding ID:** `:` where phrase-hash-8 is -the first 8 hex chars of `sha256()`. Lets the -ledger distinguish two sunset phrases in the same record. - -**Detection:** - -For each D record body (via `pql decisions read `), grep for -sunset-shaped phrases. Default regex set: - -``` -(?i)\b(delete|remove|sunset|kill[ -]?switch|tear[ -]?down) when\b -(?i)\bmust (track|monitor|watch|follow)\b -(?i)\brevisit (when|after|once)\b -(?i)\b(deprecate|retire) (when|after|once)\b -``` - -For each match, run `pql ticket list --decision `. If no tickets -exist, the D has work-shaped intent without a tracked T — flag. - -**Fix (prompt options):** - -- **File T now** — Run `pql ticket new task "" --decision `, - then prompt the user for a description (or call `pql ticket refine - write --description ...` after creation). -- **Draft a T description first** — Open an `AskUserQuestion` for the - description, then file as above. -- **Mark as already covered** — Add a note to the D body - ("Tracked under T-N") via `Edit`. Skill does not assert which T; - user provides the ID. -- **Skip** — Adds to the ledger. -- **Stop asking** — Skip remaining sunset findings, summarize. - -**Why:** - -Sunset-shaped intent ("we'll handle X when Y happens") is the most -common source of accumulated debt in a DQR system: the trigger -condition arrives, nobody remembers the D, the work doesn't happen. -Linking each sunset to a T is the simplest defense — a T is a -backlog item that surfaces in `plan whatsnext` / `plan board`. The -fix is judgment because the right action depends on whether the D's -condition is still relevant, whether it's already covered, and what -the right scope is for the resulting T. - ---- - -## RULE-FILE-OVER-THRESHOLD - -**Category:** judgment - -**Finding ID:** `` (one finding per file; threshold -choice is judgment, not a per-line problem). - -**Detection:** - -For each `decisions/*.md` file, count lines (via `wc -l` or -equivalent). Default threshold: **350 lines**. Configurable per -project — read `decisions/.clean-house.yaml` if present, key -`file_threshold`. Fall back to 350. - -**Fix (prompt options):** - -- **Split now (which axis?)** — Prompt for the split axis: by ID - family (D/Q/R), by domain, by date range, custom. Then perform the - split: create new file(s), move records, update any anchor links - pointing into the moved records (run RULE-ANCHOR-DRIFT in apply - mode against the affected files after the split). -- **Accept and raise the threshold** — Update - `decisions/.clean-house.yaml`'s `file_threshold` to the next - reasonable round number above the current line count. -- **Defer** — Skip until next run. - -**Why:** - -A single decisions file growing past ~350 lines is the point at which -linear scanning starts to lose to grep, and where the cost of -splitting (renaming anchors) is still small. Beyond ~600 lines the -split cost compounds. The threshold is judgment because some projects -deliberately keep one file per domain and accept the size; others -split aggressively. The skill surfaces the question; it doesn't -decide. - ---- - -## RULE-DEAD-FILE-REFERENCE - -**Category:** judgment - -**Finding ID:** `:` (path token as written -in the body, not resolved). - -**Detection:** - -For each D record body (via `pql decisions read `), grep for -path-shaped tokens. Default regex: - -``` -\b([\w./-]+\.(md|go|py|sql|yaml|yml|toml))\b -``` - -The first detection pass produced 6/6 false positives in -real-world use; the regex is necessary but not sufficient. For -each match, apply the filters below in order — if any matches, -**skip without flagging**: - -1. **Placeholder filter.** Token contains `T-NNN`, `D-NNN`, - `Q-NNN`, `R-NNN`, `...`, `<`, `>`, or `*` — it's a pattern, - not a real path. -2. **Source-relative resolution.** Resolve the token against the - source file's directory (`/`'s dir). If - `[ -e ]`, the reference is live. -3. **Repo-relative resolution.** If `[ -e ]` from the - repo root, the reference is live. -4. **Basename-fallback.** Run `find -name ` - (where basename is the last path component). If exactly one - match exists, treat the reference as live and emit a low- - priority "consider rewriting to the absolute path" note (not a - judgment finding). If multiple matches exist, do not flag — - the token is too ambiguous. - -Only after all four filters miss does the reference qualify as -truly dead and warrant a judgment prompt. - -**Fix (prompt options):** - -- **Update reference** — Prompt for the new path; rewrite the - reference via `Edit`. If the user types a path, validate it exists - before applying. -- **Mark superseded** — Add a note to the D ("This decision - references files no longer present; the underlying constraint - was retired by D-N") and prompt for the superseding D ID. -- **Defer** — Skip until next run. - -**Why:** - -Decisions reference code paths to ground their reasoning in the -codebase that motivated them. When the code moves or gets deleted, -the D's reasoning becomes harder to verify. Dead refs are a signal -that either the decision should be updated or the decision itself is -no longer load-bearing — both are judgment calls the user needs to -make. - ---- - -## RULE-STALE-OPEN-Q - -**Category:** judgment - -**Finding ID:** `` (one finding per Q-record; staleness -threshold is global per run, so a Q is either stale or not). - -**Detection:** - -Run `pql decisions list --type question --status open`. For each -returned record, check the `date` field. Default staleness threshold: -**60 days** (configurable via `decisions/.clean-house.yaml` key -`stale_open_q_days`). Flag any Q with `date` older than the -threshold. - -**Fix (prompt options):** - -- **Still relevant** — Touch the Q's `date` field to today, optionally - add a one-line "still open as of YYYY-MM-DD: " to the body. -- **Nudge to load-bearing index** — If the project keeps a - load-bearing Qs list (a curated index of unresolved questions - affecting current work), prompt for inclusion and add the Q there. -- **Mark withdrawn** — Change the Q's status to `withdrawn` (the DQR - system's terminal state for "no longer worth answering"); the - user supplies a one-line reason. -- **Defer** — Skip until next run. - -**Why:** - -Open questions are useful when they're current; stale ones become -ambient noise that drowns the signal of new questions. Most -projects don't enforce explicit Q-lifecycle, so without a periodic -prompt the open list grows forever. The right action depends on -whether the question is still open in fact — not just in metadata — -which only the user can confirm. diff --git a/.claude/skills/clide/SKILL.md b/.claude/skills/clide/SKILL.md index 8907e6a0..8de4b6fe 100644 --- a/.claude/skills/clide/SKILL.md +++ b/.claude/skills/clide/SKILL.md @@ -4,10 +4,8 @@ description: > Use when you are running inside the clide IDE and want to observe or drive its live UI — panes, editor, files, git, readers, toasts, layout — through the `clide` CLI, or to find out what commands clide exposes. clide is the - IDE hosting this session; it puts `clide` on your PATH and a per-workspace - socket in `CLIDE_SOCK`. Start with `clide capabilities` to enumerate the - live tool surface. Triggers: "what can clide do", "drive the clide UI", - "open this in clide", "show the user", "toast", or invoking /clide. + IDE hosting this session. Triggers: "what can clide do", "drive the clide + UI", "open this in clide", "show the user", "toast", or invoking /clide. user-invocable: true allowed-tools: Bash --- @@ -15,9 +13,10 @@ allowed-tools: Bash # Driving clide from the CLI You are (often) running **inside clide** — a Flutter IDE that hosts this -Claude session. It exposes its whole UI surface as a `clide ` -CLI on your PATH, talking to the running app over a per-workspace socket -(`CLIDE_SOCK`). Every UI action the user can take has a CLI verb, and every +Claude session. It puts `clide` on your PATH and exposes its whole UI surface +as a `clide ` CLI, talking to the running app over a +per-workspace socket (`CLIDE_SOCK`). Every UI action the user can take has a +CLI verb, and every verb's effect is observable — that is the parity contract (D-6). So you can *see what the user sees* and *show the user what you mean*. @@ -53,9 +52,11 @@ one). `clide ` with no verb, or an unknown command, prints usage. ## Conventions -- **Slots:** the layout has three content slots — `sidebar` (left), `workspace` - (center, where Claude lives), `context` (right) — plus the bottom `statusbar`. - Many verbs take a slot. +- **Slots:** the layout has four content slots — `sidebar` (left), `workspace` + (center, where Claude lives), `context` (right), and `dock` (bottom — + Output/Problems panes, hidden by default; D-87) — plus the bottom + `statusbar`. Many verbs take a slot. The live list is whatever + `clide capabilities` reports. - **Honest failures:** a drive verb with no live GUI returns a `toolError` ("no live UI to drive"), not a hang. JSON on stdout; exit code conveys ok/usage/tool error. diff --git a/.claude/skills/commit/SKILL.md b/.claude/skills/commit/SKILL.md deleted file mode 100644 index a5d390a1..00000000 --- a/.claude/skills/commit/SKILL.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -name: commit -description: Create a well-formatted git commit with staged changes ---- - -# Git Commit - -Create a well-formatted commit with staged changes following best practices. - -## Steps - -1. Run `git status --porcelain` to check for changes -2. If no staged changes, show unstaged files and ask what to stage -3. Run `git diff --cached` to review staged changes -4. Generate a commit message following Conventional Commits format: - - `feat:` new feature - - `fix:` bug fix - - `docs:` documentation - - `refactor:` code restructuring - - `test:` adding tests - - `chore:` maintenance -5. Create commit with the message, adding Co-Authored-By trailer - -## Commit Message Format - -``` -(): - - - -Co-Authored-By: Claude -``` - -## Best Practices - -- Warn about large commits (>500 lines changed) -- Suggest splitting large changes into smaller commits -- Never skip pre-commit hooks unless explicitly requested - -## Changelog - -After committing, update `CHANGELOG.md` following [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format: - -1. Add entry under `[Unreleased]` section (create if not exists) -2. Categorize changes: - - `Added` - new features - - `Changed` - changes to existing functionality - - `Deprecated` - features marked for removal - - `Removed` - removed features - - `Fixed` - bug fixes - - `Security` - security-related changes -3. Write entries in imperative mood: "Add feature" not "Added feature" -4. Reference issue numbers where applicable diff --git a/.claude/skills/git-commit/SKILL.md b/.claude/skills/git-commit/SKILL.md index af181695..17e50772 100644 --- a/.claude/skills/git-commit/SKILL.md +++ b/.claude/skills/git-commit/SKILL.md @@ -30,17 +30,24 @@ This repo uses [Conventional Commits 1.0](https://www.conventionalcommits.org/en Default to **one logical change per commit**, even when a lot of work lands in the tree at once. When there's a pile of uncommitted or untracked files: 1. **Read `git status` + `git diff` first** — never stage the whole tree blind. -2. **Group by concern**, not by file location. Typical concerns to separate: +2. **Triage: session vs pre-existing.** Separate changes you made in this + session from changes that were already dirty (or that a concurrent session + is producing — this worktree can host several Claude sessions at once). + Check the conversation history — if you didn't touch a file, it's not yours + to stage. After grouping your own commits, surface any remaining modified + or untracked files to the user and ask whether they belong in a commit. + Never silently skip or silently include changes that aren't yours. +3. **Group by concern**, not by file location. Typical concerns to separate: - **Bookkeeping** — `.gitignore`, editor/IDE config, lockfiles, `go.sum` / `pubspec.lock` updates. - - **Documentation** — `README.md`, `CLAUDE.md`, ADRs under `docs/ADRs/`, design notes under `docs/`. + - **Documentation** — `README.md`, `CLAUDE.md`, D-records under `governance/`, design notes under `docs/`. - **General-purpose tooling / skills** — things that aren't project-specific (reusable skills, shared scripts). - **Project-specific conventions** — this repo's own rules. - - **Feature or subsystem** — one cohesive change per commit; a sidecar change and an app change for the same feature can land together, but two unrelated features should split. - - **Layer changes** — Flutter app, sidecar CLI, sidecar daemon, IPC server, pql wrapper, canvas driver, git panel — separate concerns; prefer separate commits when the changes are independent. -3. **Sequence the commits** so each one is cleanly scoped, but don't obsess about whether each intermediate commit "works" — for scaffolding PRs it's fine if the full picture only snaps together at the end. -4. **Prefer many small focused commits over one large mixed one** — a reviewer can read, revert, or cherry-pick a focused commit; they can't do any of those to a blob. -5. **Use `git add `** — never `git add -A` or `git add .` when splitting, or you'll sweep in the next commit's work by accident. -6. **Verify between commits** with `git status` and `git log -1` to confirm the split landed as intended. + - **Feature or subsystem** — one cohesive change per commit; a CLI change and an app change for the same feature can land together, but two unrelated features should split. + - **Layer changes** — Flutter app, `clide` CLI (`native/clide-cli/`), IPC server, pql wrapper, canvas driver, git panel — separate concerns; prefer separate commits when the changes are independent. +4. **Sequence the commits** so each one is cleanly scoped, but don't obsess about whether each intermediate commit "works" — for scaffolding PRs it's fine if the full picture only snaps together at the end. +5. **Prefer many small focused commits over one large mixed one** — a reviewer can read, revert, or cherry-pick a focused commit; they can't do any of those to a blob. +6. **Use `git add `** — never `git add -A` or `git add .` when splitting, or you'll sweep in the next commit's work by accident. +7. **Verify between commits** with `git status` and `git log -1` to confirm the split landed as intended. Corollary: if a commit's subject line needs the word "and" to be accurate, it probably should have been two commits. @@ -113,29 +120,32 @@ Co-Authored-By: Claude The model-identifier variant produced by the Claude Code harness (e.g. `Co-Authored-By: Claude Opus 4.7 (1M context) `) is also accepted — don't rewrite it if the harness emits that form. -## HEREDOC discipline +## Message-file discipline -Pass commit messages via HEREDOC so multi-line formatting survives: +Pass commit messages via a message file so multi-line formatting survives +and the command stays inside the permission allowlist (command substitution +defeats the `git commit` prefix match and triggers permission prompts): + +1. Write the full message to a file in `/tmp` (never inside `.git/` — that + directory is git's own state) using the Write tool. +2. Commit with it: ```bash -git commit -m "$(cat <<'EOF' -short imperative summary - -Optional longer body explaining why this change was needed, -wrapped at about 72 characters. - -Co-Authored-By: Claude -EOF -)" +git commit -F /tmp/commit-msg.txt ``` -Never pass multi-line messages via `-m "line1\nline2"` or multiple `-m` flags — Git's behavior differs between shells and quoting regimes and the trailer can end up in the wrong place. +Fallback only: the HEREDOC-in-substitution form +(`git commit -m "$(cat <<'EOF' … EOF)"`) works but prompts for permission — +use it only when writing a file is impossible. Never pass multi-line messages +via `-m "line1\nline2"` or multiple `-m` flags — Git's behavior differs +between shells and quoting regimes and the trailer can end up in the wrong +place. ## What not to commit - `.env` and any `*.env.local` — see `.gitignore`. - `.claude/settings.local.json` — user-specific Claude Code settings, ignored. -- Build artefacts: `sidecar/bin/`, `sidecar/dist/`, `build/` (Flutter output), `app/.dart_tool/` — gitignored. +- Build artefacts: `/build/` (Flutter output), `/.dart_tool/` — gitignored. - SQLite index files (`*.sqlite`, `*.sqlite-wal`, `*.sqlite-shm`, `*.db`) — caches generated against local repos; must never land here. Gitignored defensively. - Coverage / test output (`*.out`, `coverage.*`, `*.test`) — gitignored. diff --git a/.claude/skills/penpot-login/SKILL.md b/.claude/skills/penpot-login/SKILL.md deleted file mode 100644 index 9d9207c3..00000000 --- a/.claude/skills/penpot-login/SKILL.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -name: penpot-login -description: Connect to Penpot MCP - starts the MCP server, logs into penpot.schweitz.net, and installs/connects the plugin -allowed-tools: Read, Bash, mcp__chrome-devtools__new_page, mcp__chrome-devtools__navigate_page, mcp__chrome-devtools__take_snapshot, mcp__chrome-devtools__take_screenshot, mcp__chrome-devtools__click, mcp__chrome-devtools__fill, mcp__chrome-devtools__press_key, mcp__chrome-devtools__list_pages ---- - -# Penpot MCP Connection - -This skill connects Claude to Penpot by: -1. Starting the Penpot MCP server (if not running) -2. Logging into penpot.schweitz.net via Authentik -3. Installing and connecting the Penpot MCP plugin - -## Step 1: Start MCP Server - -Check if the MCP server is running, start it if not: - -```bash -# Check if server is running -if ! curl -s http://localhost:9880/mcp > /dev/null 2>&1; then - # Start the server in background - cd ~/Projects/penpot-mcp && ./start-server.sh & - sleep 3 # Wait for server to start -fi -``` - -Server endpoints when running: -- MCP Server: http://localhost:9880/mcp -- Plugin Server: http://localhost:9879/ -- WebSocket: ws://localhost:4402 - -## Step 2: Login Credentials - -Read credentials from the project root file `claude-authentik-credentials.md`: -!`cat claude-authentik-credentials.md` - -## Step 3: Login Flow - -1. **Navigate to Penpot** - - Use `mcp__chrome-devtools__new_page` to go to `https://penpot.schweitz.net` - -2. **Check if already logged in** - - Take a snapshot - - If you see "Projects" heading, you're logged in - skip to Step 4 - - If you see login page, continue with authentication - -3. **Authenticate via Authentik** (if not logged in) - - Click the OpenID button to redirect to Authentik - - On auth.schweitz.net, fill username textbox - - Click "Log in" button - - Fill password textbox - - Click "Continue" button - - If redirected to Authentik user page instead of Penpot, navigate back to `https://penpot.schweitz.net` - -## Step 4: Open Design File - -1. **Navigate to the Clide project** - - Double-click on the TUI file to open the workspace - -## Step 5: Install/Connect Plugin - -1. **Open Plugins menu** - - Click the Plugins button (puzzle icon, keyboard shortcut: Cmd+Alt+P) - -2. **Check if plugin is installed** - - If "Penpot MCP Plugin" appears under "INSTALLED PLUGINS", click OPEN - - Otherwise, install it first: - -3. **Install plugin** (if not installed) - - Fill the plugin URL textbox with: `http://localhost:9879/manifest.json` - - Click INSTALL - - Click ALLOW on the permissions dialog - -4. **Connect to MCP server** - - In the plugin UI, click "CONNECT TO MCP SERVER" - - Verify it shows "Connected to MCP server" - -## Step 6: Configure Claude Code MCP - -Add the Penpot MCP server to Claude Code (if not already configured): - -```bash -claude mcp add penpot -t http http://localhost:9880/mcp -``` - -**Important**: Use HTTP transport (`-t http`) with the `/mcp` endpoint. Do NOT use SSE transport - it causes "Server not initialized" errors. - -## Step 7: Verify Connection - -After connecting, restart the MCP connection in Claude Code: -- Use `/mcp` command to reconnect the penpot server -- The Penpot MCP tools (execute_code, export_shape, etc.) will then be available - -Test with: -```javascript -mcp__penpot__execute_code(code="return penpot.currentPage.name;") -``` - -## Important Notes - -- Keep the Penpot plugin UI window open while using MCP tools -- The MCP server must be running for the plugin to connect -- If connection fails, check that the server is running on port 9880 -- Use HTTP transport (`-t http`), NOT SSE transport diff --git a/.claude/skills/skill-create/SKILL.md b/.claude/skills/skill-create/SKILL.md deleted file mode 100644 index 623dd0c7..00000000 --- a/.claude/skills/skill-create/SKILL.md +++ /dev/null @@ -1,203 +0,0 @@ ---- -name: skill-create -description: > - Guidance for creating effective Claude Code skills (.skill packages). - Use when the user wants to create, build, design, or iterate on a skill — - including writing SKILL.md files, bundling scripts/references/assets, - initializing new skills, packaging skills, or improving existing ones. - Triggers on requests like "create a skill", "make a new skill", - "build a skill for X", "package this skill", or "improve my skill". ---- - - -# Skill Creator - -## About Skills - -Skills are modular, self-contained packages that extend Claude's capabilities -by providing specialized knowledge, workflows, and tools. They transform Claude -from a general-purpose agent into a specialized agent equipped with procedural -knowledge that no model can fully possess. - -### What Skills Provide - -- **Specialized workflows** — Multi-step procedures for specific domains -- **Tool integrations** — Instructions for working with specific file formats or APIs -- **Domain expertise** — Company-specific knowledge, schemas, business logic -- **Bundled resources** — Scripts, references, and assets for complex and repetitive tasks - -## Core Principles - -### Concise is Key - -The context window is a public good. Skills share it with everything else Claude -needs: system prompt, conversation history, other skills' metadata, and the -actual user request. - -Default assumption: Claude is already very smart. Only add context Claude doesn't -already have. Challenge each piece of information: "Does Claude really need this -explanation?" and "Does this paragraph justify its token cost?" - -Prefer concise examples over verbose explanations. - -### Set Appropriate Degrees of Freedom - -Match specificity to the task's fragility and variability: - -- **High freedom** (text-based instructions): Multiple approaches valid, decisions - depend on context, heuristics guide the approach. -- **Medium freedom** (pseudocode or scripts with parameters): Preferred pattern - exists, some variation acceptable, configuration affects behavior. -- **Low freedom** (specific scripts, few parameters): Operations are fragile and - error-prone, consistency is critical, specific sequence must be followed. - -Think of Claude as exploring a path: a narrow bridge with cliffs needs specific -guardrails (low freedom), while an open field allows many routes (high freedom). - -## Anatomy of a Skill - -``` -skill-name/ -├── SKILL.md (required) -│ ├── YAML frontmatter metadata (required) -│ │ ├── name: (required) -│ │ ├── description: (required) -│ │ └── compatibility: (optional, rarely needed) -│ └── Markdown instructions (required) -└── Bundled Resources (optional) - ├── scripts/ - Executable code (Python/Bash/etc.) - ├── references/ - Documentation loaded into context as needed - └── assets/ - Files used in output (templates, icons, fonts, etc.) -``` - -### SKILL.md (required) - -- **Frontmatter (YAML)**: `name` and `description` fields (required). Only these - are read by Claude to determine when the skill triggers — be clear and - comprehensive. The `compatibility` field is for environment requirements but - most skills don't need it. -- **Body (Markdown)**: Instructions and guidance. Only loaded AFTER the skill - triggers. - -### Bundled Resources (optional) - -**Scripts (`scripts/`)** — Executable code for tasks requiring deterministic -reliability or that are repeatedly rewritten. - -**References (`references/`)** — Documentation loaded as needed into context. -Keep SKILL.md lean; move detailed reference material, schemas, and examples here. -If files are large (>10k words), include grep search patterns in SKILL.md. - -**Assets (`assets/`)** — Files used in output, not loaded into context (templates, -images, icons, boilerplate code, fonts). - -### What to NOT Include - -Do NOT create extraneous files like README.md, INSTALLATION_GUIDE.md, -QUICK_REFERENCE.md, CHANGELOG.md, etc. The skill should only contain information -needed for an AI agent to do the job. - -## Progressive Disclosure - -Skills use a three-level loading system: - -1. **Metadata** (name + description) — Always in context (~100 words) -2. **SKILL.md body** — When skill triggers (<5k words) -3. **Bundled resources** — As needed (unlimited; scripts can run without reading) - -Keep SKILL.md body under 500 lines. Split content into separate files when -approaching this limit. Reference split files from SKILL.md with clear -descriptions of when to read them. - -### Disclosure Patterns - -**Pattern 1: High-level guide with references** — Keep overview in SKILL.md, -link to detail files loaded only when needed. - -**Pattern 2: Domain-specific organization** — Organize content by domain -(e.g., `references/finance.md`, `references/sales.md`) so only relevant content -is loaded. - -**Pattern 3: Conditional details** — Show basic content, link to advanced -content loaded only when the user needs those features. - -Guidelines: -- Avoid deeply nested references — keep one level deep from SKILL.md -- Structure longer reference files with a table of contents at the top - -## Skill Creation Process - -Follow these steps in order, skipping only with clear reason: - -### Step 1: Understand the Skill with Concrete Examples - -Skip only when usage patterns are already clearly understood. - -Ask the user for concrete examples of how the skill will be used: -- "What functionality should the skill support?" -- "Can you give some examples of how this skill would be used?" -- "What would a user say that should trigger this skill?" - -Avoid overwhelming users — start with the most important questions. - -### Step 2: Plan the Reusable Skill Contents - -Analyze each example by considering how to execute from scratch and identifying -what scripts, references, and assets would help with repeated execution. - -Establish a list of reusable resources: scripts, references, and assets. - -### Step 3: Initialize the Skill - -Create the skill directory manually: - -``` -mkdir -p / -``` - -Then create `SKILL.md` with frontmatter and body. Add `scripts/`, `references/`, -and `assets/` subdirectories only as needed. - -Skip if iterating on an existing skill. - -### Step 4: Edit the Skill - -Remember the skill is for another Claude instance to use. Include beneficial, -non-obvious information. - -For design patterns, consult: -- `references/workflows.md` — Sequential workflows and conditional logic -- `references/output-patterns.md` — Template and example patterns - -**Implementation order:** -1. Start with reusable resources (`scripts/`, `references/`, `assets/`) -2. Test added scripts by running them -3. Delete unused example files from initialization -4. Update SKILL.md - -**Writing guidelines:** Always use imperative/infinitive form. - -**Frontmatter:** -- `name`: The skill name — use **domain-action** naming: `{domain}-{action}`. - The domain is the system/area the skill operates on, the action is what it does. - Examples: `pr-review`, `sprint-plan`, `docs-search`, `git-commit`, `debt-scan`. - Multi-action wrappers (like `ticket`) can use the domain name alone. - The directory name must match the `name` field. -- `description`: Primary triggering mechanism. Include what the skill does AND - specific triggers/contexts. All "when to use" info goes here (not in body). - -**Body:** Instructions for using the skill and its bundled resources. - -### Step 5: Validate the Skill - -Check the skill manually: -- Frontmatter has `name` and `description` -- SKILL.md body is under 500 lines -- No extraneous files (README.md, CHANGELOG.md, etc.) -- Scripts are executable and tested -- References are referenced from SKILL.md - -### Step 6: Iterate - -After real usage, notice struggles or inefficiencies, identify needed updates, -implement changes, and test again. diff --git a/.claude/skills/testmode/SKILL.md b/.claude/skills/testmode/SKILL.md index cca7e8ee..8cedfff2 100644 --- a/.claude/skills/testmode/SKILL.md +++ b/.claude/skills/testmode/SKILL.md @@ -6,9 +6,10 @@ description: > lifecycle, theme loading, or native platform code. Also use when the user says "run testmode", "test the app", "smoke test", or "verify the build". Triggers on changes to: lib/kernel/src/toolchain.dart, - lib/src/daemon/dispatcher.dart, lib/src/ipc/, lib/extension/, - lib/kernel/src/theme/, lib/builtin/*/src/extension.dart, - linux/CMakeLists.txt, macos/, Makefile (run targets), lib/main.dart. + lib/src/daemon/dispatcher.dart, lib/src/ipc/, lib/src/pty/, + lib/builtin/terminal/, lib/extension/, lib/kernel/src/theme/, + lib/builtin/*/src/extension.dart, linux/CMakeLists.txt, macos/, + Makefile (run targets), lib/main.dart. --- # Testmode harness @@ -26,6 +27,7 @@ make run-testmode # all categories, 60s timeout make run-testmode TESTMODE_CATEGORY=toolchain make run-testmode TESTMODE_CATEGORY=ipc make run-testmode TESTMODE_CATEGORY=extensions +make run-testmode TESTMODE_CATEGORY=terminal make run-testmode TESTMODE_TIMEOUT=120 # longer timeout for slow builds ``` @@ -47,6 +49,7 @@ Exit code is non-zero when any test fails. The Makefile verifies | IPC envelope, dispatcher, schema | `ipc` | Round-trip + error contract | | Extension manifest, activate, contributions | `extensions` | Register + activate lifecycle | | Theme YAML, loader, palette | `extensions` | Theme parse is in this category | +| PTY spawning, terminal pane, xterm wiring | `terminal` | Real PTY spawn + I/O round-trip | | Platform config (CMakeLists, pbxproj, Makefile) | `all` | Full rebuild validates everything | | Any doubt | `all` | ~30s, cheap insurance | diff --git a/.claude/skills/ui-design/references/phosphor-glyphs.md b/.claude/skills/ui-design/references/phosphor-glyphs.md index 0d861891..74e03ebc 100644 --- a/.claude/skills/ui-design/references/phosphor-glyphs.md +++ b/.claude/skills/ui-design/references/phosphor-glyphs.md @@ -6,1521 +6,1521 @@ tags: [icons, phosphor, ui-design] # Phosphor glyphs — full reference (v2.0.8) -All **1512** glyphs bundled in clide's Phosphor font (`assets/fonts/phosphor/`, MIT). Generated from `assets/fonts/phosphor/codepoints.csv` — **do not hand-edit**; regenerate with `python3 .claude/skills/ui-design/scripts/gen-phosphor-glyphs.py`. +All **1512** glyphs bundled in clide's Phosphor font (`assets/fonts/phosphor/`, MIT). Generated from `assets/fonts/phosphor/codepoints.csv` — **do not hand-edit**; regenerate with `python3 .claude/skills/ui-design/scripts/gen-phosphor-glyphs.py`, then re-run `dart run tool/gen_phosphor_glyphs.dart` (this table is the source for the generated `kPhosphorGlyphs` map). -The **In clide** column flags the **47** glyphs already wired into `PhosphorIcons` (`lib/widgets/src/icons/phosphor.dart`) — reach for those first. To use any other glyph, add a one-line `static const` to that class with the codepoint below, then `ClideIcon(PhosphorIcons., size: 13)`. Keep additions to icons we actually use — don't bulk-import. +Every glyph is available in code via `PhosphorIcons.byName('')` (T-314) — e.g. `ClideIcon(PhosphorIcons.byName('folder'), size: 13)`. Raw codepoints never appear in feature code; they live only in the generated map. An unknown name renders the `placeholder` glyph, and `phosphor_glyphs_test` asserts every `byName('…')` literal in `lib/` resolves. -| Codepoint | Name (kebab) | Pascal | In clide | -|---|---|---|---| -| `0xe000` | pulse | Pulse | | -| `0xe002` | airplane | Airplane | | -| `0xe004` | airplay | Airplay | | -| `0xe006` | alarm | Alarm | | -| `0xe008` | android-logo | AndroidLogo | | -| `0xe00a` | aperture | Aperture | | -| `0xe00c` | archive | Archive | | -| `0xe00e` | box-arrow-down | BoxArrowDown | | -| `0xe010` | tray-arrow-down | TrayArrowDown | | -| `0xe012` | armchair | Armchair | | -| `0xe014` | arrow-arc-left | ArrowArcLeft | | -| `0xe016` | arrow-arc-right | ArrowArcRight | | -| `0xe018` | arrow-bend-down-left | ArrowBendDownLeft | | -| `0xe01a` | arrow-bend-down-right | ArrowBendDownRight | | -| `0xe01c` | arrow-bend-left-down | ArrowBendLeftDown | | -| `0xe01e` | arrow-bend-left-up | ArrowBendLeftUp | | -| `0xe020` | arrow-bend-right-down | ArrowBendRightDown | | -| `0xe022` | arrow-bend-right-up | ArrowBendRightUp | | -| `0xe024` | arrow-bend-up-left | ArrowBendUpLeft | | -| `0xe026` | arrow-bend-up-right | ArrowBendUpRight | | -| `0xe028` | arrow-circle-down | ArrowCircleDown | | -| `0xe02a` | arrow-circle-down-left | ArrowCircleDownLeft | | -| `0xe02c` | arrow-circle-down-right | ArrowCircleDownRight | | -| `0xe02e` | arrow-circle-right | ArrowCircleRight | | -| `0xe030` | arrow-circle-up | ArrowCircleUp | | -| `0xe032` | arrow-circle-up-left | ArrowCircleUpLeft | | -| `0xe034` | arrow-circle-up-right | ArrowCircleUpRight | | -| `0xe036` | arrow-clockwise | ArrowClockwise | `PhosphorIcons.arrowClockwise` | -| `0xe038` | arrow-counter-clockwise | ArrowCounterClockwise | | -| `0xe03a` | arrow-bend-double-up-left | ArrowBendDoubleUpLeft | | -| `0xe03c` | arrow-bend-double-up-right | ArrowBendDoubleUpRight | | -| `0xe03e` | arrow-down | ArrowDown | | -| `0xe040` | arrow-down-left | ArrowDownLeft | | -| `0xe042` | arrow-down-right | ArrowDownRight | | -| `0xe044` | arrow-elbow-down-left | ArrowElbowDownLeft | | -| `0xe046` | arrow-elbow-down-right | ArrowElbowDownRight | | -| `0xe048` | arrow-elbow-left | ArrowElbowLeft | | -| `0xe04a` | arrow-elbow-left-down | ArrowElbowLeftDown | | -| `0xe04c` | arrow-elbow-left-up | ArrowElbowLeftUp | | -| `0xe04e` | arrow-elbow-right | ArrowElbowRight | | -| `0xe050` | arrow-elbow-right-down | ArrowElbowRightDown | | -| `0xe052` | arrow-elbow-right-up | ArrowElbowRightUp | | -| `0xe054` | arrow-elbow-up-left | ArrowElbowUpLeft | | -| `0xe056` | arrow-elbow-up-right | ArrowElbowUpRight | | -| `0xe058` | arrow-left | ArrowLeft | | -| `0xe05a` | arrow-circle-left | ArrowCircleLeft | | -| `0xe05c` | arrow-line-down | ArrowLineDown | | -| `0xe05e` | arrow-line-down-left | ArrowLineDownLeft | | -| `0xe060` | arrow-line-down-right | ArrowLineDownRight | | -| `0xe062` | arrow-line-left | ArrowLineLeft | | -| `0xe064` | arrow-line-right | ArrowLineRight | | -| `0xe066` | arrow-line-up | ArrowLineUp | | -| `0xe068` | arrow-line-up-left | ArrowLineUpLeft | | -| `0xe06a` | arrow-line-up-right | ArrowLineUpRight | | -| `0xe06c` | arrow-right | ArrowRight | | -| `0xe06e` | arrow-square-down | ArrowSquareDown | | -| `0xe070` | arrow-square-down-left | ArrowSquareDownLeft | | -| `0xe072` | arrow-square-down-right | ArrowSquareDownRight | | -| `0xe074` | arrow-square-left | ArrowSquareLeft | | -| `0xe076` | arrow-square-right | ArrowSquareRight | | -| `0xe078` | arrow-square-up | ArrowSquareUp | | -| `0xe07a` | arrow-square-up-left | ArrowSquareUpLeft | | -| `0xe07c` | arrow-square-up-right | ArrowSquareUpRight | | -| `0xe07e` | arrow-u-down-left | ArrowUDownLeft | | -| `0xe080` | arrow-u-down-right | ArrowUDownRight | | -| `0xe082` | arrow-u-left-down | ArrowULeftDown | | -| `0xe084` | arrow-u-left-up | ArrowULeftUp | | -| `0xe086` | arrow-u-right-down | ArrowURightDown | | -| `0xe088` | arrow-u-right-up | ArrowURightUp | | -| `0xe08a` | arrow-u-up-left | ArrowUUpLeft | `PhosphorIcons.arrowUUpLeft` | -| `0xe08c` | arrow-u-up-right | ArrowUUpRight | | -| `0xe08e` | arrow-up | ArrowUp | | -| `0xe090` | arrow-up-left | ArrowUpLeft | | -| `0xe092` | arrow-up-right | ArrowUpRight | | -| `0xe094` | arrows-clockwise | ArrowsClockwise | | -| `0xe096` | arrows-counter-clockwise | ArrowsCounterClockwise | | -| `0xe098` | arrows-down-up | ArrowsDownUp | | -| `0xe09a` | arrows-in | ArrowsIn | | -| `0xe09c` | arrows-in-cardinal | ArrowsInCardinal | | -| `0xe09e` | arrows-in-simple | ArrowsInSimple | `PhosphorIcons.arrowsInSimple` | -| `0xe0a0` | arrows-left-right | ArrowsLeftRight | | -| `0xe0a2` | arrows-out | ArrowsOut | | -| `0xe0a4` | arrows-out-cardinal | ArrowsOutCardinal | | -| `0xe0a6` | arrows-out-simple | ArrowsOutSimple | `PhosphorIcons.arrowsOutSimple` | -| `0xe0a8` | article | Article | | -| `0xe0aa` | asterisk | Asterisk | | -| `0xe0ac` | at | At | | -| `0xe0ae` | backspace | Backspace | | -| `0xe0b0` | bag | Bag | | -| `0xe0b2` | bandaids | Bandaids | | -| `0xe0b4` | bank | Bank | | -| `0xe0b6` | barbell | Barbell | | -| `0xe0b8` | barcode | Barcode | | -| `0xe0ba` | battery-charging | BatteryCharging | | -| `0xe0bc` | battery-charging-vertical | BatteryChargingVertical | | -| `0xe0be` | battery-empty | BatteryEmpty | | -| `0xe0c0` | battery-full | BatteryFull | | -| `0xe0c2` | battery-high | BatteryHigh | | -| `0xe0c4` | battery-low | BatteryLow | | -| `0xe0c6` | battery-medium | BatteryMedium | | -| `0xe0c8` | battery-warning | BatteryWarning | | -| `0xe0ca` | battery-warning-vertical | BatteryWarningVertical | | -| `0xe0cc` | bed | Bed | | -| `0xe0ce` | bell | Bell | | -| `0xe0d0` | bell-simple | BellSimple | | -| `0xe0d2` | bell-simple-slash | BellSimpleSlash | | -| `0xe0d4` | bell-slash | BellSlash | | -| `0xe0d6` | bicycle | Bicycle | | -| `0xe0da` | bluetooth | Bluetooth | | -| `0xe0dc` | bluetooth-connected | BluetoothConnected | | -| `0xe0de` | bluetooth-slash | BluetoothSlash | | -| `0xe0e0` | bluetooth-x | BluetoothX | | -| `0xe0e2` | book | Book | | -| `0xe0e4` | book-bookmark | BookBookmark | | -| `0xe0e6` | book-open | BookOpen | `PhosphorIcons.bookOpen` | -| `0xe0e8` | bookmark | Bookmark | | -| `0xe0ea` | bookmark-simple | BookmarkSimple | | -| `0xe0ec` | bookmarks | Bookmarks | | -| `0xe0ee` | briefcase | Briefcase | | -| `0xe0f2` | broadcast | Broadcast | | -| `0xe0f4` | browser | Browser | | -| `0xe0f6` | browsers | Browsers | | -| `0xe0f8` | cards | Cards | | -| `0xe0fe` | building-apartment | BuildingApartment | | -| `0xe0fe` | building-office | BuildingOffice | | -| `0xe100` | building | Building | | -| `0xe102` | buildings | Buildings | | -| `0xe106` | bus | Bus | | -| `0xe108` | calendar | Calendar | | -| `0xe10a` | calendar-blank | CalendarBlank | | -| `0xe10c` | calendar-x | CalendarX | | -| `0xe10e` | camera | Camera | | -| `0xe110` | camera-slash | CameraSlash | | -| `0xe112` | car | Car | | -| `0xe114` | car-simple | CarSimple | | -| `0xe116` | caret-circle-double-down | CaretCircleDoubleDown | | -| `0xe118` | caret-circle-double-left | CaretCircleDoubleLeft | | -| `0xe11a` | caret-circle-double-right | CaretCircleDoubleRight | | -| `0xe11c` | caret-circle-double-up | CaretCircleDoubleUp | | -| `0xe11e` | caret-circle-down | CaretCircleDown | | -| `0xe120` | caret-circle-left | CaretCircleLeft | | -| `0xe122` | caret-circle-right | CaretCircleRight | | -| `0xe124` | caret-circle-up | CaretCircleUp | | -| `0xe126` | caret-double-down | CaretDoubleDown | | -| `0xe128` | caret-double-left | CaretDoubleLeft | | -| `0xe12a` | caret-double-right | CaretDoubleRight | | -| `0xe12c` | caret-double-up | CaretDoubleUp | | -| `0xe12e` | caret-line-up | CaretLineUp | | -| `0xe130` | caret-line-right | CaretLineRight | | -| `0xe132` | caret-line-left | CaretLineLeft | | -| `0xe134` | caret-line-down | CaretLineDown | | -| `0xe136` | caret-down | CaretDown | `PhosphorIcons.caretDown` | -| `0xe138` | caret-left | CaretLeft | `PhosphorIcons.caretLeft` | -| `0xe13a` | caret-right | CaretRight | `PhosphorIcons.caretRight` | -| `0xe13c` | caret-up | CaretUp | `PhosphorIcons.caretUp` | -| `0xe13e` | caret-circle-up-down | CaretCircleUpDown | | -| `0xe140` | caret-up-down | CaretUpDown | | -| `0xe142` | cell-signal-full | CellSignalFull | | -| `0xe144` | cell-signal-high | CellSignalHigh | | -| `0xe146` | cell-signal-low | CellSignalLow | | -| `0xe148` | cell-signal-medium | CellSignalMedium | | -| `0xe14a` | cell-signal-none | CellSignalNone | | -| `0xe14c` | cell-signal-slash | CellSignalSlash | | -| `0xe14e` | cell-signal-x | CellSignalX | | -| `0xe150` | chart-bar | ChartBar | | -| `0xe152` | chart-bar-horizontal | ChartBarHorizontal | | -| `0xe154` | chart-line | ChartLine | | -| `0xe156` | chart-line-up | ChartLineUp | | -| `0xe158` | chart-pie | ChartPie | | -| `0xe15a` | chart-pie-slice | ChartPieSlice | | -| `0xe15c` | chat | Chat | | -| `0xe15e` | chat-slash | ChatSlash | | -| `0xe160` | chat-centered | ChatCentered | | -| `0xe162` | chat-centered-slash | ChatCenteredSlash | | -| `0xe164` | chat-centered-dots | ChatCenteredDots | | -| `0xe166` | chat-centered-text | ChatCenteredText | | -| `0xe168` | chat-circle | ChatCircle | `PhosphorIcons.chatCircle` | -| `0xe16a` | chat-circle-slash | ChatCircleSlash | | -| `0xe16c` | chat-circle-dots | ChatCircleDots | | -| `0xe16e` | chat-circle-text | ChatCircleText | | -| `0xe170` | chat-dots | ChatDots | | -| `0xe172` | chat-teardrop | ChatTeardrop | | -| `0xe174` | chat-teardrop-slash | ChatTeardropSlash | | -| `0xe176` | chat-teardrop-dots | ChatTeardropDots | | -| `0xe178` | chat-teardrop-text | ChatTeardropText | | -| `0xe17a` | chat-text | ChatText | | -| `0xe17c` | chats | Chats | | -| `0xe17e` | chats-circle | ChatsCircle | | -| `0xe180` | chats-teardrop | ChatsTeardrop | | -| `0xe182` | check | Check | `PhosphorIcons.check` | -| `0xe184` | check-circle | CheckCircle | `PhosphorIcons.checkCircle` | -| `0xe186` | check-square | CheckSquare | | -| `0xe188` | check-square-offset | CheckSquareOffset | | -| `0xe18a` | circle | Circle | | -| `0xe18c` | circle-half | CircleHalf | | -| `0xe18e` | circle-half-tilt | CircleHalfTilt | | -| `0xe190` | circles-four | CirclesFour | `PhosphorIcons.circlesFour` | -| `0xe192` | circles-three | CirclesThree | | -| `0xe194` | circles-three-plus | CirclesThreePlus | | -| `0xe196` | clipboard | Clipboard | | -| `0xe198` | clipboard-text | ClipboardText | | -| `0xe19a` | clock | Clock | | -| `0xe19c` | clock-afternoon | ClockAfternoon | | -| `0xe19e` | clock-clockwise | ClockClockwise | | -| `0xe1a0` | clock-counter-clockwise | ClockCounterClockwise | | -| `0xe1a4` | closed-captioning | ClosedCaptioning | | -| `0xe1a6` | subtitles-slash | SubtitlesSlash | | -| `0xe1a8` | subtitles | Subtitles | | -| `0xe1aa` | cloud | Cloud | | -| `0xe1ac` | cloud-arrow-down | CloudArrowDown | | -| `0xe1ae` | cloud-arrow-up | CloudArrowUp | | -| `0xe1b0` | cloud-check | CloudCheck | | -| `0xe1b2` | cloud-lightning | CloudLightning | | -| `0xe1b4` | cloud-rain | CloudRain | | -| `0xe1b6` | cloud-slash | CloudSlash | | -| `0xe1b8` | cloud-snow | CloudSnow | | -| `0xe1ba` | club | Club | | -| `0xe1bc` | code | Code | `PhosphorIcons.code` | -| `0xe1be` | code-simple | CodeSimple | | -| `0xe1c0` | coffee-bean | CoffeeBean | | -| `0xe1c2` | coffee | Coffee | | -| `0xe1c4` | command | Command | | -| `0xe1c6` | compass-rose | CompassRose | | -| `0xe1c8` | compass | Compass | | -| `0xe1ca` | copy | Copy | | -| `0xe1cc` | copy-simple | CopySimple | | -| `0xe1ce` | corners-in | CornersIn | | -| `0xe1d0` | corners-out | CornersOut | | -| `0xe1d2` | credit-card | CreditCard | | -| `0xe1d4` | crop | Crop | | -| `0xe1d6` | crosshair | Crosshair | | -| `0xe1d8` | crosshair-simple | CrosshairSimple | | -| `0xe1da` | cube | Cube | | -| `0xe1dc` | cursor | Cursor | | -| `0xe1de` | database | Database | | -| `0xe1e0` | device-mobile | DeviceMobile | | -| `0xe1e2` | device-mobile-camera | DeviceMobileCamera | | -| `0xe1e4` | device-mobile-speaker | DeviceMobileSpeaker | | -| `0xe1e6` | device-tablet | DeviceTablet | | -| `0xe1e8` | device-tablet-camera | DeviceTabletCamera | | -| `0xe1ea` | device-tablet-speaker | DeviceTabletSpeaker | | -| `0xe1ec` | diamond | Diamond | | -| `0xe1ee` | dice-five | DiceFive | | -| `0xe1f0` | dice-four | DiceFour | | -| `0xe1f2` | dice-one | DiceOne | | -| `0xe1f4` | dice-six | DiceSix | | -| `0xe1f6` | dice-three | DiceThree | | -| `0xe1f8` | dice-two | DiceTwo | | -| `0xe1fa` | divide | Divide | | -| `0xe1fc` | dots-nine | DotsNine | | -| `0xe1fe` | dots-three | DotsThree | | -| `0xe200` | dots-three-circle | DotsThreeCircle | | -| `0xe202` | dots-three-circle-vertical | DotsThreeCircleVertical | | -| `0xe204` | dots-three-outline | DotsThreeOutline | | -| `0xe206` | dots-three-outline-vertical | DotsThreeOutlineVertical | | -| `0xe208` | dots-three-vertical | DotsThreeVertical | | -| `0xe20a` | download | Download | | -| `0xe20c` | download-simple | DownloadSimple | | -| `0xe20e` | dribbble-logo | DribbbleLogo | | -| `0xe210` | drop | Drop | | -| `0xe212` | eject | Eject | | -| `0xe214` | envelope | Envelope | | -| `0xe216` | envelope-open | EnvelopeOpen | | -| `0xe218` | envelope-simple | EnvelopeSimple | | -| `0xe21a` | envelope-simple-open | EnvelopeSimpleOpen | | -| `0xe21c` | equals | Equals | | -| `0xe21e` | eraser | Eraser | | -| `0xe220` | eye | Eye | `PhosphorIcons.eye` | -| `0xe222` | eye-closed | EyeClosed | | -| `0xe224` | eye-slash | EyeSlash | `PhosphorIcons.eyeSlash` | -| `0xe226` | facebook-logo | FacebookLogo | | -| `0xe228` | faders | Faders | | -| `0xe22a` | faders-horizontal | FadersHorizontal | | -| `0xe22c` | fast-forward-circle | FastForwardCircle | | -| `0xe22e` | figma-logo | FigmaLogo | | -| `0xe230` | file | File | | -| `0xe232` | file-arrow-down | FileArrowDown | | -| `0xe234` | file-minus | FileMinus | | -| `0xe236` | file-plus | FilePlus | | -| `0xe238` | file-magnifying-glass | FileMagnifyingGlass | | -| `0xe23a` | file-text | FileText | `PhosphorIcons.fileText` | -| `0xe23c` | file-x | FileX | | -| `0xe23e` | fingerprint | Fingerprint | | -| `0xe240` | fingerprint-simple | FingerprintSimple | | -| `0xe242` | fire | Fire | | -| `0xe244` | flag | Flag | | -| `0xe246` | flashlight | Flashlight | | -| `0xe248` | floppy-disk | FloppyDisk | | -| `0xe24a` | folder | Folder | `PhosphorIcons.folder` | -| `0xe254` | folder-minus | FolderMinus | | -| `0xe256` | folder-open | FolderOpen | | -| `0xe258` | folder-plus | FolderPlus | | -| `0xe25a` | folder-simple | FolderSimple | | -| `0xe25c` | folder-simple-minus | FolderSimpleMinus | | -| `0xe25e` | folder-simple-plus | FolderSimplePlus | | -| `0xe260` | folders | Folders | | -| `0xe262` | fork-knife | ForkKnife | | -| `0xe264` | framer-logo | FramerLogo | | -| `0xe266` | funnel | Funnel | | -| `0xe268` | funnel-simple | FunnelSimple | | -| `0xe26a` | funnel-simple-x | FunnelSimpleX | | -| `0xe26c` | funnel-x | FunnelX | | -| `0xe26e` | game-controller | GameController | | -| `0xe270` | gear | Gear | `PhosphorIcons.gear` | -| `0xe272` | gear-six | GearSix | | -| `0xe274` | gif | Gif | | -| `0xe276` | gift | Gift | | -| `0xe278` | git-branch | GitBranch | `PhosphorIcons.gitBranch` | -| `0xe27a` | git-commit | GitCommit | `PhosphorIcons.gitCommit` | -| `0xe27c` | git-diff | GitDiff | `PhosphorIcons.gitDiff` | -| `0xe27e` | git-fork | GitFork | | -| `0xe280` | git-merge | GitMerge | | -| `0xe282` | git-pull-request | GitPullRequest | `PhosphorIcons.gitPullRequest` | -| `0xe284` | globe-simple-x | GlobeSimpleX | | -| `0xe286` | globe-x | GlobeX | | -| `0xe288` | globe | Globe | | -| `0xe28a` | globe-hemisphere-east | GlobeHemisphereEast | | -| `0xe28c` | globe-hemisphere-west | GlobeHemisphereWest | | -| `0xe28e` | globe-simple | GlobeSimple | | -| `0xe290` | globe-stand | GlobeStand | | -| `0xe292` | google-logo | GoogleLogo | | -| `0xe294` | google-play-logo | GooglePlayLogo | | -| `0xe296` | grid-four | GridFour | | -| `0xe298` | hand | Hand | | -| `0xe29a` | hand-pointing | HandPointing | | -| `0xe29c` | handbag | Handbag | | -| `0xe29e` | hard-drive | HardDrive | | -| `0xe2a0` | hard-drives | HardDrives | | -| `0xe2a2` | hash | Hash | | -| `0xe2a4` | hash-straight | HashStraight | | -| `0xe2a6` | headphones | Headphones | | -| `0xe2a8` | heart | Heart | | -| `0xe2aa` | heart-straight | HeartStraight | | -| `0xe2ac` | heartbeat | Heartbeat | | -| `0xe2ae` | hexagon | Hexagon | | -| `0xe2b0` | horse | Horse | | -| `0xe2b2` | hourglass | Hourglass | | -| `0xe2b4` | hourglass-high | HourglassHigh | | -| `0xe2b6` | hourglass-low | HourglassLow | | -| `0xe2b8` | hourglass-medium | HourglassMedium | | -| `0xe2ba` | hourglass-simple | HourglassSimple | | -| `0xe2bc` | hourglass-simple-high | HourglassSimpleHigh | | -| `0xe2be` | hourglass-simple-low | HourglassSimpleLow | | -| `0xe2c0` | hourglass-simple-medium | HourglassSimpleMedium | | -| `0xe2c2` | house | House | | -| `0xe2c4` | house-line | HouseLine | | -| `0xe2c6` | house-simple | HouseSimple | | -| `0xe2c8` | identification-card | IdentificationCard | | -| `0xe2ca` | image | Image | `PhosphorIcons.image` | -| `0xe2cc` | image-square | ImageSquare | | -| `0xe2ce` | info | Info | | -| `0xe2d0` | instagram-logo | InstagramLogo | | -| `0xe2d2` | intersect | Intersect | | -| `0xe2d4` | jeep | Jeep | | -| `0xe2d6` | key | Key | | -| `0xe2d8` | keyboard | Keyboard | `PhosphorIcons.keyboard` | -| `0xe2da` | leaf | Leaf | | -| `0xe2dc` | lightbulb | Lightbulb | `PhosphorIcons.lightbulb` | -| `0xe2de` | lightning | Lightning | | -| `0xe2e0` | lightning-slash | LightningSlash | | -| `0xe2e2` | link | Link | `PhosphorIcons.link` | -| `0xe2e4` | link-break | LinkBreak | | -| `0xe2e6` | link-simple | LinkSimple | | -| `0xe2e8` | link-simple-break | LinkSimpleBreak | | -| `0xe2ea` | link-simple-horizontal | LinkSimpleHorizontal | | -| `0xe2ec` | link-simple-horizontal-break | LinkSimpleHorizontalBreak | | -| `0xe2ee` | linkedin-logo | LinkedinLogo | | -| `0xe2f0` | list | List | `PhosphorIcons.list` | -| `0xe2f2` | list-bullets | ListBullets | | -| `0xe2f4` | list-dashes | ListDashes | | -| `0xe2f6` | list-numbers | ListNumbers | | -| `0xe2f8` | list-plus | ListPlus | | -| `0xe2fa` | lock | Lock | | -| `0xe2fe` | lock-key | LockKey | | -| `0xe300` | lock-key-open | LockKeyOpen | | -| `0xe302` | lock-laminated | LockLaminated | | -| `0xe304` | lock-laminated-open | LockLaminatedOpen | | -| `0xe306` | lock-open | LockOpen | | -| `0xe308` | lock-simple | LockSimple | | -| `0xe30a` | lock-simple-open | LockSimpleOpen | | -| `0xe30c` | magnifying-glass | MagnifyingGlass | `PhosphorIcons.magnifyingGlass` | -| `0xe30e` | magnifying-glass-minus | MagnifyingGlassMinus | | -| `0xe310` | magnifying-glass-plus | MagnifyingGlassPlus | | -| `0xe314` | map-pin-plus | MapPinPlus | | -| `0xe316` | map-pin | MapPin | | -| `0xe318` | map-pin-line | MapPinLine | | -| `0xe31a` | map-trifold | MapTrifold | | -| `0xe31c` | martini | Martini | | -| `0xe31e` | math-operations | MathOperations | | -| `0xe320` | medal | Medal | | -| `0xe322` | medium-logo | MediumLogo | | -| `0xe324` | megaphone | Megaphone | | -| `0xe326` | microphone | Microphone | | -| `0xe328` | microphone-slash | MicrophoneSlash | | -| `0xe32a` | minus | Minus | | -| `0xe32c` | minus-circle | MinusCircle | | -| `0xe32e` | monitor | Monitor | | -| `0xe330` | moon | Moon | | -| `0xe332` | mouse-scroll | MouseScroll | | -| `0xe334` | mouse-left-click | MouseLeftClick | | -| `0xe336` | mouse-right-click | MouseRightClick | | -| `0xe338` | mouse-middle-click | MouseMiddleClick | | -| `0xe33a` | mouse | Mouse | | -| `0xe33c` | music-note | MusicNote | | -| `0xe33e` | music-note-simple | MusicNoteSimple | | -| `0xe340` | music-notes | MusicNotes | | -| `0xe342` | music-notes-simple | MusicNotesSimple | | -| `0xe344` | newspaper | Newspaper | | -| `0xe346` | newspaper-clipping | NewspaperClipping | | -| `0xe348` | note | Note | | -| `0xe34a` | note-blank | NoteBlank | | -| `0xe34c` | note-pencil | NotePencil | | -| `0xe34e` | notebook | Notebook | | -| `0xe350` | number-eight | NumberEight | | -| `0xe352` | number-circle-eight | NumberCircleEight | | -| `0xe354` | number-square-eight | NumberSquareEight | | -| `0xe356` | number-five | NumberFive | | -| `0xe358` | number-circle-five | NumberCircleFive | | -| `0xe35a` | number-square-five | NumberSquareFive | | -| `0xe35c` | number-four | NumberFour | | -| `0xe35e` | number-circle-four | NumberCircleFour | | -| `0xe360` | number-square-four | NumberSquareFour | | -| `0xe362` | number-nine | NumberNine | | -| `0xe364` | number-circle-nine | NumberCircleNine | | -| `0xe366` | number-square-nine | NumberSquareNine | | -| `0xe368` | number-one | NumberOne | | -| `0xe36a` | number-circle-one | NumberCircleOne | | -| `0xe36c` | number-square-one | NumberSquareOne | | -| `0xe36e` | number-seven | NumberSeven | | -| `0xe370` | number-circle-seven | NumberCircleSeven | | -| `0xe372` | number-square-seven | NumberSquareSeven | | -| `0xe374` | number-six | NumberSix | | -| `0xe376` | number-circle-six | NumberCircleSix | | -| `0xe378` | number-square-six | NumberSquareSix | | -| `0xe37a` | number-three | NumberThree | | -| `0xe37c` | number-circle-three | NumberCircleThree | | -| `0xe37e` | number-square-three | NumberSquareThree | | -| `0xe380` | number-two | NumberTwo | | -| `0xe382` | number-circle-two | NumberCircleTwo | | -| `0xe384` | number-square-two | NumberSquareTwo | | -| `0xe386` | number-zero | NumberZero | | -| `0xe388` | number-circle-zero | NumberCircleZero | | -| `0xe38a` | number-square-zero | NumberSquareZero | | -| `0xe38c` | nut | Nut | | -| `0xe38e` | octagon | Octagon | | -| `0xe390` | package | Package | | -| `0xe392` | paint-bucket | PaintBucket | | -| `0xe394` | paper-plane | PaperPlane | | -| `0xe396` | paper-plane-right | PaperPlaneRight | | -| `0xe398` | paper-plane-tilt | PaperPlaneTilt | | -| `0xe39a` | paperclip | Paperclip | | -| `0xe39c` | path | Path | | -| `0xe39e` | pause | Pause | | -| `0xe3a0` | pause-circle | PauseCircle | | -| `0xe3a2` | peace | Peace | | -| `0xe3a8` | person | Person | | -| `0xe3aa` | pen | Pen | | -| `0xe3ac` | pen-nib | PenNib | | -| `0xe3ae` | pencil | Pencil | | -| `0xe3b0` | pencil-circle | PencilCircle | | -| `0xe3b2` | pencil-line | PencilLine | | -| `0xe3b4` | pencil-simple | PencilSimple | `PhosphorIcons.pencilSimple` | -| `0xe3b6` | percent | Percent | | -| `0xe3b8` | phone | Phone | | -| `0xe3ba` | phone-call | PhoneCall | | -| `0xe3bc` | phone-disconnect | PhoneDisconnect | | -| `0xe3be` | phone-incoming | PhoneIncoming | | -| `0xe3c0` | phone-outgoing | PhoneOutgoing | | -| `0xe3c2` | phone-slash | PhoneSlash | | -| `0xe3c4` | phone-x | PhoneX | | -| `0xe3c6` | phone-transfer | PhoneTransfer | | -| `0xe3c8` | numpad | Numpad | | -| `0xe3ca` | phone-pause | PhonePause | | -| `0xe3cc` | phone-list | PhoneList | | -| `0xe3ce` | phosphor-logo | PhosphorLogo | | -| `0xe3d0` | play | Play | | -| `0xe3d2` | play-circle | PlayCircle | | -| `0xe3d4` | plus | Plus | | -| `0xe3d6` | plus-circle | PlusCircle | | -| `0xe3d8` | plus-minus | PlusMinus | | -| `0xe3da` | power | Power | | -| `0xe3dc` | printer | Printer | | -| `0xe3de` | prohibit | Prohibit | | -| `0xe3e0` | prohibit-inset | ProhibitInset | | -| `0xe3e2` | push-pin | PushPin | `PhosphorIcons.pushPin` | -| `0xe3e4` | push-pin-slash | PushPinSlash | | -| `0xe3e6` | qr-code | QrCode | | -| `0xe3e8` | question | Question | | -| `0xe3e8` | question-mark | QuestionMark | | -| `0xe3ea` | radical | Radical | | -| `0xe3ec` | receipt | Receipt | | -| `0xe3ee` | record | Record | | -| `0xe3f0` | rectangle | Rectangle | | -| `0xe3f2` | rectangle-dashed | RectangleDashed | | -| `0xe3f4` | trademark-registered | TrademarkRegistered | | -| `0xe3f6` | repeat | Repeat | | -| `0xe3f8` | repeat-once | RepeatOnce | | -| `0xe3fa` | rewind-circle | RewindCircle | | -| `0xe3fc` | rocket | Rocket | | -| `0xe3fe` | rocket-launch | RocketLaunch | | -| `0xe400` | rss | Rss | | -| `0xe402` | rss-simple | RssSimple | | -| `0xe404` | screencast | Screencast | | -| `0xe406` | share | Share | | -| `0xe408` | share-network | ShareNetwork | | -| `0xe40a` | shield | Shield | | -| `0xe40c` | shield-check | ShieldCheck | `PhosphorIcons.shieldCheck` | -| `0xe40e` | shield-chevron | ShieldChevron | | -| `0xe410` | shield-slash | ShieldSlash | | -| `0xe412` | shield-warning | ShieldWarning | `PhosphorIcons.shieldWarning` | -| `0xe416` | shopping-bag | ShoppingBag | | -| `0xe418` | shopping-bag-open | ShoppingBagOpen | | -| `0xe41e` | shopping-cart | ShoppingCart | | -| `0xe420` | shopping-cart-simple | ShoppingCartSimple | | -| `0xe422` | shuffle | Shuffle | | -| `0xe424` | shuffle-angular | ShuffleAngular | | -| `0xe426` | shuffle-simple | ShuffleSimple | | -| `0xe428` | sign-in | SignIn | | -| `0xe42a` | sign-out | SignOut | | -| `0xe42c` | sketch-logo | SketchLogo | | -| `0xe42e` | skip-back-circle | SkipBackCircle | | -| `0xe430` | skip-forward-circle | SkipForwardCircle | | -| `0xe432` | sliders | Sliders | | -| `0xe434` | sliders-horizontal | SlidersHorizontal | | -| `0xe436` | smiley | Smiley | | -| `0xe438` | smiley-blank | SmileyBlank | | -| `0xe43a` | smiley-meh | SmileyMeh | | -| `0xe43c` | smiley-nervous | SmileyNervous | | -| `0xe43e` | smiley-sad | SmileySad | | -| `0xe440` | smiley-sticker | SmileySticker | | -| `0xe442` | smiley-x-eyes | SmileyXEyes | | -| `0xe444` | sort-ascending | SortAscending | | -| `0xe446` | sort-descending | SortDescending | | -| `0xe448` | spade | Spade | | -| `0xe44a` | speaker-high | SpeakerHigh | | -| `0xe44c` | speaker-low | SpeakerLow | | -| `0xe44e` | speaker-none | SpeakerNone | | -| `0xe450` | speaker-simple-high | SpeakerSimpleHigh | | -| `0xe452` | speaker-simple-low | SpeakerSimpleLow | | -| `0xe454` | speaker-simple-none | SpeakerSimpleNone | | -| `0xe456` | speaker-simple-slash | SpeakerSimpleSlash | | -| `0xe458` | speaker-simple-x | SpeakerSimpleX | | -| `0xe45a` | speaker-slash | SpeakerSlash | | -| `0xe45c` | speaker-x | SpeakerX | | -| `0xe45e` | square | Square | | -| `0xe462` | square-half | SquareHalf | | -| `0xe464` | squares-four | SquaresFour | | -| `0xe466` | stack | Stack | | -| `0xe468` | stack-simple | StackSimple | | -| `0xe46a` | star | Star | | -| `0xe46c` | stop | Stop | | -| `0xe46e` | stop-circle | StopCircle | | -| `0xe470` | storefront | Storefront | | -| `0xe472` | sun | Sun | | -| `0xe474` | sun-dim | SunDim | | -| `0xe476` | table | Table | | -| `0xe478` | tag | Tag | | -| `0xe47a` | tag-simple | TagSimple | | -| `0xe47c` | target | Target | | -| `0xe47e` | terminal | Terminal | `PhosphorIcons.terminal` | -| `0xe480` | text-align-center | TextAlignCenter | | -| `0xe482` | text-align-justify | TextAlignJustify | | -| `0xe484` | text-align-left | TextAlignLeft | | -| `0xe486` | text-align-right | TextAlignRight | | -| `0xe488` | text-t-slash | TextTSlash | | -| `0xe48a` | text-t | TextT | | -| `0xe48c` | thumbs-down | ThumbsDown | | -| `0xe48e` | thumbs-up | ThumbsUp | | -| `0xe490` | ticket | Ticket | `PhosphorIcons.ticket` | -| `0xe492` | timer | Timer | | -| `0xe494` | tote | Tote | | -| `0xe496` | train | Train | | -| `0xe498` | subway | Subway | | -| `0xe49c` | cable-car | CableCar | | -| `0xe49e` | train-regional | TrainRegional | | -| `0xe4a0` | train-simple | TrainSimple | | -| `0xe4a2` | translate | Translate | | -| `0xe4a6` | trash | Trash | | -| `0xe4a8` | trash-simple | TrashSimple | | -| `0xe4aa` | tray | Tray | | -| `0xe4ac` | trend-down | TrendDown | | -| `0xe4ae` | trend-up | TrendUp | | -| `0xe4b0` | triangle | Triangle | | -| `0xe4b2` | triangle-dashed | TriangleDashed | | -| `0xe4b4` | truck | Truck | | -| `0xe4b6` | truck-trailer | TruckTrailer | | -| `0xe4ba` | twitter-logo | TwitterLogo | | -| `0xe4bc` | x-logo | XLogo | | -| `0xe4be` | upload | Upload | | -| `0xe4c0` | upload-simple | UploadSimple | | -| `0xe4c2` | user | User | | -| `0xe4c4` | user-circle | UserCircle | | -| `0xe4c6` | user-circle-gear | UserCircleGear | | -| `0xe4c8` | user-circle-minus | UserCircleMinus | | -| `0xe4ca` | user-circle-plus | UserCirclePlus | | -| `0xe4cc` | user-gear | UserGear | | -| `0xe4ce` | user-minus | UserMinus | | -| `0xe4d0` | user-plus | UserPlus | | -| `0xe4d2` | user-rectangle | UserRectangle | | -| `0xe4d4` | user-square | UserSquare | | -| `0xe4d6` | users | Users | | -| `0xe4d8` | vibrate | Vibrate | | -| `0xe4da` | video-camera | VideoCamera | | -| `0xe4dc` | video-camera-slash | VideoCameraSlash | | -| `0xe4de` | voicemail | Voicemail | | -| `0xe4e0` | warning | Warning | `PhosphorIcons.warning` | -| `0xe4e2` | warning-circle | WarningCircle | `PhosphorIcons.warningCircle` | -| `0xe4e4` | warning-octagon | WarningOctagon | | -| `0xe4e6` | watch | Watch | | -| `0xe4e8` | wheelchair | Wheelchair | | -| `0xe4ea` | wifi-high | WifiHigh | | -| `0xe4ec` | wifi-low | WifiLow | | -| `0xe4ee` | wifi-medium | WifiMedium | | -| `0xe4f0` | wifi-none | WifiNone | | -| `0xe4f2` | wifi-slash | WifiSlash | | -| `0xe4f4` | wifi-x | WifiX | | -| `0xe4f6` | x | X | `PhosphorIcons.xMark` | -| `0xe4f8` | x-circle | XCircle | | -| `0xe4fa` | x-square | XSquare | | -| `0xe4fc` | youtube-logo | YoutubeLogo | | -| `0xe4fe` | airplane-in-flight | AirplaneInFlight | | -| `0xe500` | airplane-taxiing | AirplaneTaxiing | | -| `0xe502` | airplane-landing | AirplaneLanding | | -| `0xe504` | airplane-takeoff | AirplaneTakeoff | | -| `0xe506` | align-bottom | AlignBottom | | -| `0xe508` | markdown-logo | MarkdownLogo | | -| `0xe50a` | align-center-horizontal | AlignCenterHorizontal | | -| `0xe50c` | align-center-vertical | AlignCenterVertical | | -| `0xe50e` | align-left | AlignLeft | | -| `0xe510` | align-right | AlignRight | | -| `0xe512` | align-top | AlignTop | | -| `0xe514` | anchor | Anchor | | -| `0xe516` | apple-logo | AppleLogo | | -| `0xe518` | arrow-fat-down | ArrowFatDown | | -| `0xe51a` | arrow-fat-left | ArrowFatLeft | | -| `0xe51c` | arrow-fat-line-down | ArrowFatLineDown | | -| `0xe51e` | arrow-fat-line-left | ArrowFatLineLeft | | -| `0xe520` | arrow-fat-line-right | ArrowFatLineRight | | -| `0xe522` | arrow-fat-line-up | ArrowFatLineUp | | -| `0xe524` | arrow-fat-lines-down | ArrowFatLinesDown | | -| `0xe526` | arrow-fat-lines-left | ArrowFatLinesLeft | | -| `0xe528` | arrow-fat-lines-right | ArrowFatLinesRight | | -| `0xe52a` | arrow-fat-lines-up | ArrowFatLinesUp | | -| `0xe52c` | arrow-fat-right | ArrowFatRight | | -| `0xe52e` | arrow-fat-up | ArrowFatUp | | -| `0xe530` | arrows-in-line-horizontal | ArrowsInLineHorizontal | | -| `0xe532` | arrows-in-line-vertical | ArrowsInLineVertical | | -| `0xe534` | arrows-out-line-horizontal | ArrowsOutLineHorizontal | | -| `0xe536` | arrows-out-line-vertical | ArrowsOutLineVertical | | -| `0xe538` | calculator | Calculator | | -| `0xe53a` | checks | Checks | | -| `0xe53c` | cloud-fog | CloudFog | | -| `0xe53e` | cloud-moon | CloudMoon | | -| `0xe540` | cloud-sun | CloudSun | | -| `0xe542` | columns-plus-right | ColumnsPlusRight | | -| `0xe544` | columns-plus-left | ColumnsPlusLeft | | -| `0xe546` | columns | Columns | | -| `0xe548` | computer-tower | ComputerTower | | -| `0xe54a` | copyright | Copyright | | -| `0xe54c` | currency-circle-dollar | CurrencyCircleDollar | | -| `0xe54e` | currency-cny | CurrencyCny | | -| `0xe550` | currency-dollar | CurrencyDollar | | -| `0xe552` | currency-dollar-simple | CurrencyDollarSimple | | -| `0xe554` | currency-eur | CurrencyEur | | -| `0xe556` | currency-gbp | CurrencyGbp | | -| `0xe558` | currency-inr | CurrencyInr | | -| `0xe55a` | currency-jpy | CurrencyJpy | | -| `0xe55c` | currency-krw | CurrencyKrw | | -| `0xe55e` | currency-rub | CurrencyRub | | -| `0xe560` | desktop | Desktop | | -| `0xe562` | desktop-tower | DesktopTower | | -| `0xe564` | disc | Disc | | -| `0xe566` | drop-half | DropHalf | | -| `0xe568` | eyedropper | Eyedropper | | -| `0xe56a` | face-mask | FaceMask | | -| `0xe56c` | finn-the-human | FinnTheHuman | | -| `0xe56e` | first-aid | FirstAid | | -| `0xe570` | first-aid-kit | FirstAidKit | | -| `0xe572` | ambulance | Ambulance | | -| `0xe574` | fire-truck | FireTruck | | -| `0xe576` | github-logo | GithubLogo | | -| `0xe57a` | hand-fist | HandFist | | -| `0xe57c` | hand-grabbing | HandGrabbing | | -| `0xe57e` | hand-palm | HandPalm | | -| `0xe580` | hand-waving | HandWaving | | -| `0xe582` | handshake | Handshake | | -| `0xe584` | headset | Headset | | -| `0xe586` | laptop | Laptop | | -| `0xe588` | money | Money | | -| `0xe58a` | monitor-arrow-up | MonitorArrowUp | | -| `0xe58c` | monitor-play | MonitorPlay | | -| `0xe58e` | moon-stars | MoonStars | | -| `0xe590` | paint-brush-broad | PaintBrushBroad | | -| `0xe592` | paperclip-horizontal | PaperclipHorizontal | | -| `0xe594` | poker-chip | PokerChip | | -| `0xe596` | puzzle-piece | PuzzlePiece | `PhosphorIcons.puzzlePiece` | -| `0xe598` | rainbow | Rainbow | | -| `0xe59a` | rainbow-cloud | RainbowCloud | | -| `0xe59c` | reddit-logo | RedditLogo | | -| `0xe59e` | rows-plus-bottom | RowsPlusBottom | | -| `0xe5a0` | rows-plus-top | RowsPlusTop | | -| `0xe5a2` | rows | Rows | | -| `0xe5a4` | skip-back | SkipBack | | -| `0xe5a6` | skip-forward | SkipForward | | -| `0xe5a8` | slack-logo | SlackLogo | | -| `0xe5aa` | snowflake | Snowflake | | -| `0xe5ac` | sticker | Sticker | | -| `0xe5ae` | suitcase | Suitcase | | -| `0xe5b0` | suitcase-simple | SuitcaseSimple | | -| `0xe5b2` | trolley | Trolley | | -| `0xe5b4` | trolley-suitcase | TrolleySuitcase | | -| `0xe5b6` | sun-horizon | SunHorizon | | -| `0xe5b8` | swatches | Swatches | | -| `0xe5ba` | sword | Sword | | -| `0xe5bc` | telegram-logo | TelegramLogo | | -| `0xe5be` | text-b | TextB | | -| `0xe5c0` | text-italic | TextItalic | | -| `0xe5c2` | text-strikethrough | TextStrikethrough | | -| `0xe5c4` | text-underline | TextUnderline | | -| `0xe5c6` | thermometer | Thermometer | | -| `0xe5c8` | thermometer-cold | ThermometerCold | | -| `0xe5ca` | thermometer-hot | ThermometerHot | | -| `0xe5cc` | thermometer-simple | ThermometerSimple | | -| `0xe5ce` | twitch-logo | TwitchLogo | | -| `0xe5d0` | whatsapp-logo | WhatsappLogo | | -| `0xe5d2` | wind | Wind | | -| `0xe5d4` | wrench | Wrench | | -| `0xe5d6` | airplane-tilt | AirplaneTilt | | -| `0xe5d8` | anchor-simple | AnchorSimple | | -| `0xe5da` | app-window | AppWindow | | -| `0xe5dc` | arrow-square-in | ArrowSquareIn | | -| `0xe5de` | arrow-square-out | ArrowSquareOut | | -| `0xe5e0` | article-medium | ArticleMedium | | -| `0xe5e2` | article-ny-times | ArticleNyTimes | | -| `0xe5e4` | atom | Atom | | -| `0xe5e6` | bag-simple | BagSimple | | -| `0xe5e8` | bell-ringing | BellRinging | | -| `0xe5ea` | bell-simple-ringing | BellSimpleRinging | | -| `0xe5ec` | bell-simple-z | BellSimpleZ | | -| `0xe5ee` | bell-z | BellZ | | -| `0xe5f0` | bookmarks-simple | BookmarksSimple | | -| `0xe5f2` | briefcase-metal | BriefcaseMetal | | -| `0xe5f4` | bug | Bug | | -| `0xe5f6` | bug-beetle | BugBeetle | | -| `0xe5f8` | bug-droid | BugDroid | | -| `0xe5fa` | cardholder | Cardholder | | -| `0xe5fc` | chalkboard | Chalkboard | | -| `0xe5fe` | chalkboard-simple | ChalkboardSimple | | -| `0xe600` | chalkboard-teacher | ChalkboardTeacher | | -| `0xe602` | circle-dashed | CircleDashed | | -| `0xe604` | seal | Seal | | -| `0xe606` | seal-check | SealCheck | | -| `0xe608` | seal-question | SealQuestion | | -| `0xe60a` | seal-percent | SealPercent | | -| `0xe60c` | seal-warning | SealWarning | | -| `0xe60e` | coin | Coin | | -| `0xe610` | cpu | Cpu | | -| `0xe612` | graphics-card | GraphicsCard | | -| `0xe614` | crown | Crown | | -| `0xe616` | crown-simple | CrownSimple | | -| `0xe618` | currency-btc | CurrencyBtc | | -| `0xe61a` | discord-logo | DiscordLogo | | -| `0xe61c` | door | Door | | -| `0xe61e` | file-arrow-up | FileArrowUp | | -| `0xe620` | fire-simple | FireSimple | | -| `0xe622` | flag-banner | FlagBanner | | -| `0xe624` | flame | Flame | | -| `0xe626` | frame-corners | FrameCorners | | -| `0xe628` | gauge | Gauge | | -| `0xe62a` | ghost | Ghost | | -| `0xe62c` | graduation-cap | GraduationCap | | -| `0xe62e` | handbag-simple | HandbagSimple | | -| `0xe630` | hand-soap | HandSoap | | -| `0xe632` | highlighter-circle | HighlighterCircle | | -| `0xe634` | infinity | Infinity | | -| `0xe636` | knife | Knife | | -| `0xe638` | lamp | Lamp | | -| `0xe63a` | lifebuoy | Lifebuoy | | -| `0xe63c` | lightbulb-filament | LightbulbFilament | | -| `0xe63e` | notepad | Notepad | `PhosphorIcons.notepad` | -| `0xe640` | marker-circle | MarkerCircle | | -| `0xe642` | megaphone-simple | MegaphoneSimple | | -| `0xe644` | mouse-simple | MouseSimple | | -| `0xe646` | ny-times-logo | NyTimesLogo | | -| `0xe648` | paw-print | PawPrint | | -| `0xe64a` | pen-nib-straight | PenNibStraight | | -| `0xe64c` | picture-in-picture | PictureInPicture | | -| `0xe64e` | pinterest-logo | PinterestLogo | | -| `0xe650` | placeholder | Placeholder | | -| `0xe652` | planet | Planet | | -| `0xe654` | presentation | Presentation | | -| `0xe656` | presentation-chart | PresentationChart | | -| `0xe658` | projector-screen | ProjectorScreen | | -| `0xe65a` | projector-screen-chart | ProjectorScreenChart | | -| `0xe65c` | push-pin-simple | PushPinSimple | | -| `0xe65e` | push-pin-simple-slash | PushPinSimpleSlash | | -| `0xe660` | quotes | Quotes | | -| `0xe662` | scribble-loop | ScribbleLoop | | -| `0xe664` | sim-card | SimCard | | -| `0xe666` | smiley-wink | SmileyWink | | -| `0xe668` | snapchat-logo | SnapchatLogo | | -| `0xe66a` | spinner | Spinner | | -| `0xe66c` | spinner-gap | SpinnerGap | | -| `0xe66e` | spotify-logo | SpotifyLogo | | -| `0xe670` | t-shirt | TShirt | | -| `0xe672` | tag-chevron | TagChevron | | -| `0xe674` | toggle-left | ToggleLeft | | -| `0xe676` | toggle-right | ToggleRight | | -| `0xe678` | tote-simple | ToteSimple | | -| `0xe67a` | traffic-sign | TrafficSign | | -| `0xe67c` | tree-structure | TreeStructure | `PhosphorIcons.treeStructure` | -| `0xe67e` | trophy | Trophy | | -| `0xe680` | magnet | Magnet | | -| `0xe682` | magnet-straight | MagnetStraight | | -| `0xe684` | umbrella | Umbrella | | -| `0xe686` | umbrella-simple | UmbrellaSimple | | -| `0xe688` | wall | Wall | | -| `0xe68a` | wallet | Wallet | | -| `0xe68c` | users-four | UsersFour | | -| `0xe68e` | users-three | UsersThree | | -| `0xe690` | square-logo | SquareLogo | | -| `0xe692` | windows-logo | WindowsLogo | | -| `0xe694` | gitlab-logo | GitlabLogo | | -| `0xe696` | gitlab-logo-simple | GitlabLogoSimple | | -| `0xe698` | stripe-logo | StripeLogo | | -| `0xe69a` | selection | Selection | | -| `0xe69c` | selection-plus | SelectionPlus | | -| `0xe69e` | selection-slash | SelectionSlash | | -| `0xe6a0` | hands-clapping | HandsClapping | | -| `0xe6a2` | sparkle | Sparkle | | -| `0xe6a4` | star-four | StarFour | | -| `0xe6a6` | fast-forward | FastForward | | -| `0xe6a8` | rewind | Rewind | | -| `0xe6aa` | playlist | Playlist | | -| `0xe6ac` | queue | Queue | | -| `0xe6ae` | eject-simple | EjectSimple | | -| `0xe6b2` | wine | Wine | | -| `0xe6b4` | brandy | Brandy | | -| `0xe6b6` | magic-wand | MagicWand | | -| `0xe6b8` | ruler | Ruler | | -| `0xe6ba` | text-h | TextH | | -| `0xe6bc` | text-h-one | TextHOne | | -| `0xe6be` | text-h-two | TextHTwo | | -| `0xe6c0` | text-h-three | TextHThree | | -| `0xe6c2` | text-h-four | TextHFour | | -| `0xe6c4` | text-h-five | TextHFive | | -| `0xe6c6` | text-h-six | TextHSix | | -| `0xe6c8` | palette | Palette | `PhosphorIcons.palette` | -| `0xe6ca` | cookie | Cookie | | -| `0xe6cc` | flower-lotus | FlowerLotus | | -| `0xe6ce` | bounding-box | BoundingBox | | -| `0xe6d0` | polygon | Polygon | | -| `0xe6d2` | line-segment | LineSegment | | -| `0xe6d4` | line-segments | LineSegments | | -| `0xe6d6` | layout | Layout | | -| `0xe6d8` | messenger-logo | MessengerLogo | | -| `0xe6da` | tree | Tree | | -| `0xe6dc` | tree-evergreen | TreeEvergreen | | -| `0xe6de` | waves | Waves | | -| `0xe6e0` | gender-female | GenderFemale | | -| `0xe6e2` | gender-male | GenderMale | | -| `0xe6e4` | gender-nonbinary | GenderNonbinary | | -| `0xe6e6` | gender-intersex | GenderIntersex | | -| `0xe6e8` | gender-transgender | GenderTransgender | | -| `0xe6ea` | gender-neuter | GenderNeuter | | -| `0xe6ec` | flow-arrow | FlowArrow | | -| `0xe6ee` | text-aa | TextAa | | -| `0xe6f0` | paint-brush | PaintBrush | | -| `0xe6f2` | paint-brush-household | PaintBrushHousehold | | -| `0xe6f4` | paint-roller | PaintRoller | | -| `0xe6f6` | identification-badge | IdentificationBadge | | -| `0xe6f8` | address-book | AddressBook | | -| `0xe6fa` | notification | Notification | | -| `0xe6fc` | user-focus | UserFocus | | -| `0xe6fe` | headlights | Headlights | | -| `0xe700` | pill | Pill | | -| `0xe702` | file-pdf | FilePdf | | -| `0xe704` | file-dashed | FileDashed | | -| `0xe706` | shield-plus | ShieldPlus | | -| `0xe708` | shield-checkered | ShieldCheckered | | -| `0xe70a` | star-half | StarHalf | | -| `0xe70c` | ear | Ear | | -| `0xe70e` | ear-slash | EarSlash | | -| `0xe710` | files | Files | | -| `0xe712` | calendar-check | CalendarCheck | | -| `0xe714` | calendar-plus | CalendarPlus | | -| `0xe716` | soccer-ball | SoccerBall | | -| `0xe718` | football | Football | | -| `0xe71a` | baseball | Baseball | | -| `0xe71c` | person-simple-ski | PersonSimpleSki | | -| `0xe71e` | person-simple-snowboard | PersonSimpleSnowboard | | -| `0xe720` | tennis-ball | TennisBall | | -| `0xe722` | boules | Boules | | -| `0xe724` | basketball | Basketball | | -| `0xe726` | volleyball | Volleyball | | -| `0xe728` | fish | Fish | | -| `0xe72a` | fish-simple | FishSimple | | -| `0xe72c` | bird | Bird | | -| `0xe72e` | person-simple | PersonSimple | | -| `0xe730` | person-simple-run | PersonSimpleRun | | -| `0xe732` | person-simple-throw | PersonSimpleThrow | | -| `0xe734` | person-simple-bike | PersonSimpleBike | | -| `0xe736` | person-simple-swim | PersonSimpleSwim | | -| `0xe73a` | person-simple-walk | PersonSimpleWalk | | -| `0xe73c` | user-list | UserList | | -| `0xe73e` | student | Student | | -| `0xe740` | video | Video | | -| `0xe742` | exam | Exam | | -| `0xe744` | selection-inverse | SelectionInverse | | -| `0xe746` | selection-all | SelectionAll | | -| `0xe748` | cat | Cat | | -| `0xe74a` | dog | Dog | | -| `0xe74e` | brain | Brain | | -| `0xe750` | scales | Scales | | -| `0xe752` | password | Password | | -| `0xe754` | television | Television | | -| `0xe756` | user-switch | UserSwitch | | -| `0xe758` | books | Books | | -| `0xe75a` | recycle | Recycle | | -| `0xe75c` | microphone-stage | MicrophoneStage | | -| `0xe75e` | flower | Flower | | -| `0xe760` | factory | Factory | | -| `0xe762` | robot | Robot | `PhosphorIcons.robot` | -| `0xe764` | cooking-pot | CookingPot | | -| `0xe766` | certificate | Certificate | | -| `0xe768` | gas-pump | GasPump | | -| `0xe76c` | balloon | Balloon | | -| `0xe76e` | vault | Vault | | -| `0xe774` | baby | Baby | | -| `0xe776` | shower | Shower | | -| `0xe778` | tabs | Tabs | | -| `0xe77e` | radio | Radio | | -| `0xe780` | cake | Cake | | -| `0xe782` | key-return | KeyReturn | | -| `0xe786` | boat | Boat | | -| `0xe78a` | sailboat | Sailboat | | -| `0xe78c` | shipping-container | ShippingContainer | | -| `0xe78e` | coins | Coins | | -| `0xe790` | hamburger | Hamburger | | -| `0xe792` | film-strip | FilmStrip | | -| `0xe794` | dots-six | DotsSix | | -| `0xe796` | pizza | Pizza | | -| `0xe79a` | toilet | Toilet | | -| `0xe79c` | toilet-paper | ToiletPaper | | -| `0xe79e` | flask | Flask | | -| `0xe7a0` | test-tube | TestTube | | -| `0xe7a2` | prescription | Prescription | | -| `0xe7a4` | camera-rotate | CameraRotate | | -| `0xe7a8` | image-broken | ImageBroken | | -| `0xe7ae` | mountains | Mountains | | -| `0xe7b0` | beer-bottle | BeerBottle | | -| `0xe7b2` | calendar-dot | CalendarDot | | -| `0xe7b4` | calendar-dots | CalendarDots | | -| `0xe7b6` | google-cardboard-logo | GoogleCardboardLogo | | -| `0xe7b8` | virtual-reality | VirtualReality | | -| `0xe7ba` | eyeglasses | Eyeglasses | | -| `0xe7bc` | angle | Angle | | -| `0xe7be` | battery-vertical-low | BatteryVerticalLow | | -| `0xe7c0` | battery-vertical-medium | BatteryVerticalMedium | | -| `0xe7c2` | battery-vertical-high | BatteryVerticalHigh | | -| `0xe7c4` | battery-vertical-full | BatteryVerticalFull | | -| `0xe7c6` | battery-vertical-empty | BatteryVerticalEmpty | | -| `0xe7c8` | cursor-click | CursorClick | | -| `0xe7cc` | hand-peace | HandPeace | | -| `0xe7ce` | coda-logo | CodaLogo | | -| `0xe7d0` | dropbox-logo | DropboxLogo | | -| `0xe7d2` | open-ai-logo | OpenAiLogo | | -| `0xe7d4` | head-circuit | HeadCircuit | | -| `0xe7d6` | virus | Virus | | -| `0xe7d8` | cursor-text | CursorText | | -| `0xe7de` | call-bell | CallBell | | -| `0xe7e0` | jar | Jar | | -| `0xe7e0` | jar-label | JarLabel | | -| `0xe7e0` | tip-jar | TipJar | | -| `0xe7e4` | spray-bottle | SprayBottle | | -| `0xe7e6` | door-open | DoorOpen | | -| `0xe7ea` | stethoscope | Stethoscope | | -| `0xe7f2` | bone | Bone | | -| `0xe7f4` | behance-logo | BehanceLogo | | -| `0xe7f6` | couch | Couch | | -| `0xe7fc` | warning-diamond | WarningDiamond | | -| `0xe7fe` | coat-hanger | CoatHanger | | -| `0xe800` | waveform-slash | WaveformSlash | | -| `0xe802` | waveform | Waveform | | -| `0xe804` | ice-cream | IceCream | | -| `0xe806` | scribble | Scribble | | -| `0xe808` | battery-plus | BatteryPlus | | -| `0xe80a` | motorcycle | Motorcycle | | -| `0xe80c` | sneaker | Sneaker | | -| `0xe80e` | hammer | Hammer | | -| `0xe810` | hand-heart | HandHeart | | -| `0xe812` | egg | Egg | | -| `0xe816` | sunglasses | Sunglasses | | -| `0xe818` | baby-carriage | BabyCarriage | | -| `0xe81a` | confetti | Confetti | | -| `0xe81c` | bread | Bread | | -| `0xe81e` | bathtub | Bathtub | | -| `0xe820` | scooter | Scooter | | -| `0xe822` | moped-front | MopedFront | | -| `0xe824` | moped | Moped | | -| `0xe826` | van | Van | | -| `0xe82e` | needle | Needle | | -| `0xe830` | cherries | Cherries | | -| `0xe832` | asterisk-simple | AsteriskSimple | | -| `0xe834` | images-square | ImagesSquare | | -| `0xe836` | images | Images | | -| `0xe838` | road-horizon | RoadHorizon | | -| `0xe83c` | swap | Swap | | -| `0xe83e` | detective | Detective | | -| `0xe842` | lastfm-logo | LastfmLogo | | -| `0xe844` | hospital | Hospital | | -| `0xe85e` | brackets-square | BracketsSquare | | -| `0xe860` | brackets-curly | BracketsCurly | | -| `0xe862` | brackets-angle | BracketsAngle | | -| `0xe864` | brackets-round | BracketsRound | | -| `0xe86a` | copyleft | Copyleft | | -| `0xe86e` | screwdriver | Screwdriver | | -| `0xe870` | square-split-horizontal | SquareSplitHorizontal | | -| `0xe872` | split-horizontal | SplitHorizontal | | -| `0xe874` | square-split-vertical | SquareSplitVertical | | -| `0xe876` | split-vertical | SplitVertical | | -| `0xe878` | unite-square | UniteSquare | | -| `0xe87a` | intersect-square | IntersectSquare | | -| `0xe87c` | gear-fine | GearFine | | -| `0xe87e` | unite | Unite | | -| `0xe880` | exclude-square | ExcludeSquare | | -| `0xe882` | exclude | Exclude | | -| `0xe88c` | tornado | Tornado | | -| `0xe88e` | hurricane | Hurricane | | -| `0xe89a` | wheelchair-motion | WheelchairMotion | | -| `0xe89c` | signpost | Signpost | | -| `0xe89e` | star-of-david | StarOfDavid | | -| `0xe8a0` | cross | Cross | | -| `0xe8a6` | alien | Alien | | -| `0xe8a8` | option | Option | | -| `0xe8b0` | calendar-heart | CalendarHeart | | -| `0xe8b2` | calendar-star | CalendarStar | | -| `0xe8b6` | chart-line-down | ChartLineDown | | -| `0xe8ba` | tent | Tent | | -| `0xe8be` | play-pause | PlayPause | | -| `0xe8c0` | film-reel | FilmReel | | -| `0xe8c2` | film-slate | FilmSlate | | -| `0xe8c4` | checkerboard | Checkerboard | | -| `0xe8c6` | lego | Lego | | -| `0xe8c6` | lego-smiley | LegoSmiley | | -| `0xe8cc` | car-profile | CarProfile | | -| `0xe8ce` | gas-can | GasCan | | -| `0xe8d0` | charging-station | ChargingStation | | -| `0xe8d2` | wechat-logo | WechatLogo | | -| `0xe8d4` | tumblr-logo | TumblrLogo | | -| `0xe8dc` | skype-logo | SkypeLogo | | -| `0xe8de` | soundcloud-logo | SoundcloudLogo | | -| `0xe8e4` | bowl-steam | BowlSteam | | -| `0xe8e6` | tea-bag | TeaBag | | -| `0xe8e8` | high-heel | HighHeel | | -| `0xe8ec` | stairs | Stairs | | -| `0xe8f2` | book-open-text | BookOpenText | | -| `0xe8f4` | diamonds-four | DiamondsFour | | -| `0xe8f6` | google-drive-logo | GoogleDriveLogo | | -| `0xe8f8` | folder-dashed | FolderDashed | | -| `0xe8fc` | cylinder | Cylinder | | -| `0xe902` | taxi | Taxi | | -| `0xe906` | pencil-ruler | PencilRuler | | -| `0xe914` | file-code | FileCode | | -| `0xe916` | skull | Skull | | -| `0xe918` | cactus | Cactus | | -| `0xe91a` | tree-palm | TreePalm | | -| `0xe922` | backpack | Backpack | | -| `0xe924` | dna | Dna | | -| `0xe92a` | yin-yang | YinYang | | -| `0xe946` | plug | Plug | | -| `0xe948` | barricade | Barricade | | -| `0xe94a` | pepper | Pepper | | -| `0xe94e` | dresser | Dresser | | -| `0xe950` | chair | Chair | | -| `0xe954` | drop-slash | DropSlash | | -| `0xe956` | usb | Usb | | -| `0xe958` | file-zip | FileZip | | -| `0xe95a` | lectern | Lectern | | -| `0xe95c` | file-lock | FileLock | | -| `0xe95e` | file-cloud | FileCloud | | -| `0xe960` | paragraph | Paragraph | | -| `0xe964` | basket | Basket | | -| `0xe968` | syringe | Syringe | | -| `0xe96c` | amazon-logo | AmazonLogo | | -| `0xe974` | app-store-logo | AppStoreLogo | | -| `0xe976` | google-chrome-logo | GoogleChromeLogo | | -| `0xe978` | codepen-logo | CodepenLogo | | -| `0xe98a` | patreon-logo | PatreonLogo | | -| `0xe98c` | paypal-logo | PaypalLogo | | -| `0xe9a0` | notion-logo | NotionLogo | | -| `0xe9a8` | traffic-cone | TrafficCone | | -| `0xe9aa` | traffic-signal | TrafficSignal | | -| `0xe9ac` | steering-wheel | SteeringWheel | | -| `0xe9b0` | suitcase-rolling | SuitcaseRolling | | -| `0xe9b2` | webcam | Webcam | | -| `0xe9b8` | siren | Siren | | -| `0xe9ba` | meteor | Meteor | | -| `0xe9c0` | feather | Feather | | -| `0xe9c2` | circuitry | Circuitry | | -| `0xe9c4` | memory | Memory | | -| `0xe9c8` | piano-keys | PianoKeys | | -| `0xe9cc` | tooth | Tooth | | -| `0xe9d0` | castle-turret | CastleTurret | | -| `0xe9d8` | campfire | Campfire | | -| `0xe9dc` | radioactive | Radioactive | | -| `0xe9de` | fallout-shelter | FalloutShelter | | -| `0xe9e0` | biohazard | Biohazard | | -| `0xe9e4` | ladder | Ladder | | -| `0xe9e6` | shovel | Shovel | | -| `0xe9e8` | fire-extinguisher | FireExtinguisher | | -| `0xe9ec` | tram | Tram | | -| `0xe9f0` | trademark | Trademark | | -| `0xe9f2` | fan | Fan | | -| `0xe9f4` | mask-happy | MaskHappy | | -| `0xe9f6` | lighthouse | Lighthouse | | -| `0xe9f8` | windmill | Windmill | | -| `0xe9fa` | spiral | Spiral | | -| `0xe9fc` | axe | Axe | | -| `0xe9fe` | cheese | Cheese | | -| `0xea04` | piggy-bank | PiggyBank | | -| `0xea06` | codesandbox-logo | CodesandboxLogo | | -| `0xea08` | speaker-hifi | SpeakerHifi | | -| `0xea0e` | compass-tool | CompassTool | | -| `0xea12` | calendar-slash | CalendarSlash | | -| `0xea14` | calendar-minus | CalendarMinus | | -| `0xea1a` | rug | Rug | | -| `0xea1c` | text-outdent | TextOutdent | | -| `0xea1e` | text-indent | TextIndent | | -| `0xea20` | file-audio | FileAudio | | -| `0xea22` | file-video | FileVideo | | -| `0xea24` | file-image | FileImage | | -| `0xea28` | baseball-cap | BaseballCap | | -| `0xea2a` | beanie | Beanie | | -| `0xea2c` | belt | Belt | | -| `0xea32` | gavel | Gavel | | -| `0xea34` | bowling-ball | BowlingBall | | -| `0xea36` | boxing-glove | BoxingGlove | | -| `0xea38` | flag-checkered | FlagCheckered | | -| `0xea3a` | strategy | Strategy | | -| `0xea3c` | folder-lock | FolderLock | | -| `0xea3e` | golf | Golf | | -| `0xea42` | ping-pong | PingPong | | -| `0xea44` | stool | Stool | | -| `0xea46` | office-chair | OfficeChair | | -| `0xea48` | stamp | Stamp | | -| `0xea4a` | cheers | Cheers | | -| `0xea4c` | hand-eye | HandEye | | -| `0xea4e` | hand-arrow-down | HandArrowDown | | -| `0xea5a` | three-d | ThreeD | | -| `0xea5c` | four-k | FourK | | -| `0xea5e` | joystick | Joystick | | -| `0xea64` | binoculars | Binoculars | | -| `0xea66` | hair-dryer | HairDryer | | -| `0xea68` | bridge | Bridge | | -| `0xea6a` | city | City | | -| `0xea6e` | butterfly | Butterfly | | -| `0xea78` | keyhole | Keyhole | | -| `0xea7c` | parachute | Parachute | | -| `0xea7e` | dress | Dress | | -| `0xea80` | engine | Engine | | -| `0xea84` | lightning-a | LightningA | | -| `0xea86` | folder-star | FolderStar | | -| `0xea88` | footprints | Footprints | | -| `0xea8a` | guitar | Guitar | | -| `0xea8c` | hand-coins | HandCoins | | -| `0xea8e` | high-definition | HighDefinition | | -| `0xea90` | standard-definition | StandardDefinition | | -| `0xea92` | shirt-folded | ShirtFolded | | -| `0xea96` | cloud-x | CloudX | | -| `0xea98` | cloud-warning | CloudWarning | | -| `0xea9a` | wave-sine | WaveSine | | -| `0xea9c` | wave-sawtooth | WaveSawtooth | | -| `0xea9e` | wave-square | WaveSquare | | -| `0xeaa0` | wave-triangle | WaveTriangle | | -| `0xeaa2` | panorama | Panorama | | -| `0xeaa4` | bowl-food | BowlFood | | -| `0xeaa6` | chart-donut | ChartDonut | | -| `0xeaa8` | chart-polar | ChartPolar | | -| `0xeaac` | chart-scatter | ChartScatter | | -| `0xeab4` | shrimp | Shrimp | | -| `0xeab6` | sidebar | Sidebar | | -| `0xeab8` | sigma | Sigma | | -| `0xeabe` | cow | Cow | | -| `0xeac2` | rabbit | Rabbit | | -| `0xeac4` | eyedropper-sample | EyedropperSample | | -| `0xeaca` | champagne | Champagne | | -| `0xeacc` | flower-tulip | FlowerTulip | | -| `0xeace` | microsoft-powerpoint-logo | MicrosoftPowerpointLogo | | -| `0xead4` | steam-logo | SteamLogo | | -| `0xeada` | currency-eth | CurrencyEth | | -| `0xeadc` | list-checks | ListChecks | `PhosphorIcons.listChecks` | -| `0xeade` | navigation-arrow | NavigationArrow | | -| `0xeae0` | scissors | Scissors | | -| `0xeae2` | dots-six-vertical | DotsSixVertical | | -| `0xeae6` | television-simple | TelevisionSimple | | -| `0xeae8` | terminal-window | TerminalWindow | `PhosphorIcons.terminalWindow` | -| `0xeaee` | align-left-simple | AlignLeftSimple | | -| `0xeaf0` | export | Export | | -| `0xeaf2` | tiktok-logo | TiktokLogo | | -| `0xeaf4` | floppy-disk-back | FloppyDiskBack | | -| `0xeaf6` | selection-foreground | SelectionForeground | | -| `0xeaf8` | selection-background | SelectionBackground | | -| `0xeafa` | user-check | UserCheck | | -| `0xeafe` | code-block | CodeBlock | `PhosphorIcons.codeBlock` | -| `0xeb00` | bezier-curve | BezierCurve | | -| `0xeb02` | linux-logo | LinuxLogo | | -| `0xeb04` | arrows-vertical | ArrowsVertical | | -| `0xeb06` | arrows-horizontal | ArrowsHorizontal | | -| `0xeb08` | radio-button | RadioButton | | -| `0xeb0a` | textbox | Textbox | | -| `0xeb0c` | align-bottom-simple | AlignBottomSimple | | -| `0xeb0e` | align-center-horizontal-simple | AlignCenterHorizontalSimple | | -| `0xeb10` | align-center-vertical-simple | AlignCenterVerticalSimple | | -| `0xeb12` | align-right-simple | AlignRightSimple | | -| `0xeb14` | align-top-simple | AlignTopSimple | | -| `0xeb16` | square-half-bottom | SquareHalfBottom | | -| `0xeb18` | file-png | FilePng | | -| `0xeb1a` | file-jpg | FileJpg | | -| `0xeb1c` | file-csv | FileCsv | | -| `0xeb1e` | file-doc | FileDoc | | -| `0xeb20` | file-ppt | FilePpt | | -| `0xeb22` | file-xls | FileXls | | -| `0xeb24` | file-js | FileJs | | -| `0xeb26` | file-ts | FileTs | | -| `0xeb28` | file-rs | FileRs | | -| `0xeb2a` | file-archive | FileArchive | | -| `0xeb2c` | file-py | FilePy | | -| `0xeb2e` | file-cpp | FileCpp | | -| `0xeb30` | file-c-sharp | FileCSharp | | -| `0xeb32` | file-c | FileC | | -| `0xeb32` | file-ini | FileIni | | -| `0xeb32` | file-txt | FileTxt | | -| `0xeb34` | file-css | FileCss | | -| `0xeb38` | file-html | FileHtml | | -| `0xeb3a` | file-jsx | FileJsx | | -| `0xeb3c` | file-tsx | FileTsx | | -| `0xeb3e` | file-vue | FileVue | | -| `0xeb40` | drop-half-bottom | DropHalfBottom | | -| `0xeb42` | gradient | Gradient | | -| `0xeb44` | circle-notch | CircleNotch | | -| `0xeb46` | folder-user | FolderUser | | -| `0xeb48` | coin-vertical | CoinVertical | | -| `0xeb4a` | flying-saucer | FlyingSaucer | | -| `0xeb4e` | popcorn | Popcorn | | -| `0xeb50` | film-script | FilmScript | | -| `0xeb52` | currency-ngn | CurrencyNgn | | -| `0xeb54` | kanban | Kanban | | -| `0xeb56` | plugs | Plugs | | -| `0xeb58` | graph | Graph | `PhosphorIcons.graph` | -| `0xeb5a` | plugs-connected | PlugsConnected | | -| `0xeb5c` | plug-charging | PlugCharging | | -| `0xeb5e` | folder-simple-lock | FolderSimpleLock | | -| `0xeb60` | folder-simple-user | FolderSimpleUser | | -| `0xeb62` | beer-stein | BeerStein | | -| `0xeb64` | egg-crack | EggCrack | | -| `0xeb66` | microsoft-teams-logo | MicrosoftTeamsLogo | | -| `0xeb6a` | microsoft-word-logo | MicrosoftWordLogo | | -| `0xeb6c` | microsoft-excel-logo | MicrosoftExcelLogo | | -| `0xeb70` | microsoft-outlook-logo | MicrosoftOutlookLogo | | -| `0xeb78` | stack-overflow-logo | StackOverflowLogo | | -| `0xeb7a` | scroll | Scroll | | -| `0xeb7c` | music-notes-plus | MusicNotesPlus | | -| `0xeb80` | angular-logo | AngularLogo | | -| `0xeb8a` | replit-logo | ReplitLogo | | -| `0xeb8e` | seat | Seat | | -| `0xeb92` | google-photos-logo | GooglePhotosLogo | | -| `0xeb94` | google-podcasts-logo | GooglePodcastsLogo | | -| `0xeb96` | apple-podcasts-logo | ApplePodcastsLogo | | -| `0xeb98` | heart-straight-break | HeartStraightBreak | | -| `0xeb9a` | acorn | Acorn | | -| `0xeb9c` | pinwheel | Pinwheel | | -| `0xeb9e` | mask-sad | MaskSad | | -| `0xeba2` | vignette | Vignette | | -| `0xeba4` | devices | Devices | | -| `0xeba6` | check-fat | CheckFat | | -| `0xebaa` | cell-tower | CellTower | | -| `0xebac` | signature | Signature | | -| `0xebae` | plant | Plant | | -| `0xebb4` | scan-smiley | ScanSmiley | | -| `0xebb6` | scan | Scan | | -| `0xebbc` | equalizer | Equalizer | | -| `0xebbe` | popsicle | Popsicle | | -| `0xebc6` | pencil-simple-line | PencilSimpleLine | | -| `0xebd4` | subtract-square | SubtractSquare | | -| `0xebd6` | subtract | Subtract | | -| `0xebdc` | list-star | ListStar | | -| `0xebde` | list-heart | ListHeart | | -| `0xebe0` | list-magnifying-glass | ListMagnifyingGlass | | -| `0xebe4` | function | Function | | -| `0xebe6` | perspective | Perspective | | -| `0xebe8` | heart-break | HeartBreak | | -| `0xebf8` | letter-circle-h | LetterCircleH | | -| `0xec08` | letter-circle-p | LetterCircleP | | -| `0xec14` | letter-circle-v | LetterCircleV | | -| `0xec1e` | mailbox | Mailbox | | -| `0xec22` | potted-plant | PottedPlant | | -| `0xec24` | sidebar-simple | SidebarSimple | | -| `0xec26` | ladder-simple | LadderSimple | | -| `0xec2a` | folder-simple-dashed | FolderSimpleDashed | | -| `0xec2e` | folder-simple-star | FolderSimpleStar | | -| `0xec34` | shield-star | ShieldStar | | -| `0xec36` | user-circle-dashed | UserCircleDashed | | -| `0xec38` | user-circle-check | UserCircleCheck | | -| `0xec48` | heart-half | HeartHalf | | -| `0xec4a` | police-car | PoliceCar | | -| `0xec4c` | currency-kzt | CurrencyKzt | | -| `0xec50` | battery-plus-vertical | BatteryPlusVertical | | -| `0xec54` | broom | Broom | | -| `0xec56` | phone-plus | PhonePlus | | -| `0xec58` | camera-plus | CameraPlus | | -| `0xec5c` | pentagram | Pentagram | | -| `0xec5e` | shapes | Shapes | | -| `0xec62` | smiley-angry | SmileyAngry | | -| `0xec68` | grains | Grains | | -| `0xec6a` | grains-slash | GrainsSlash | | -| `0xec6c` | bulldozer | Bulldozer | | -| `0xec6e` | tractor | Tractor | | -| `0xec70` | farm | Farm | | -| `0xec72` | barn | Barn | | -| `0xec76` | highlighter | Highlighter | | -| `0xec7a` | microscope | Microscope | | -| `0xec7c` | cube-transparent | CubeTransparent | | -| `0xec7e` | pentagon | Pentagon | | -| `0xec80` | pi | Pi | | -| `0xec86` | hockey | Hockey | | -| `0xec88` | pants | Pants | | -| `0xec8c` | grid-nine | GridNine | | -| `0xec8e` | metronome | Metronome | | -| `0xec90` | hand-tap | HandTap | | -| `0xec92` | hand-swipe-right | HandSwipeRight | | -| `0xec94` | hand-swipe-left | HandSwipeLeft | | -| `0xec96` | text-columns | TextColumns | | -| `0xec98` | text-subscript | TextSubscript | | -| `0xec9a` | text-superscript | TextSuperscript | | -| `0xeca0` | toolbox | Toolbox | | -| `0xeca4` | security-camera | SecurityCamera | | -| `0xeca6` | control | Control | | -| `0xeca8` | user-sound | UserSound | | -| `0xecac` | vinyl-record | VinylRecord | | -| `0xecae` | webhooks-logo | WebhooksLogo | | -| `0xecb2` | park | Park | | -| `0xecb4` | goggles | Goggles | | -| `0xecb6` | swimming-pool | SwimmingPool | | -| `0xecb8` | lockers | Lockers | | -| `0xecba` | escalator-down | EscalatorDown | | -| `0xecbc` | escalator-up | EscalatorUp | | -| `0xecbe` | steps | Steps | | -| `0xecc0` | elevator | Elevator | | -| `0xecc2` | pix-logo | PixLogo | | -| `0xecc4` | intersect-three | IntersectThree | | -| `0xecc6` | parallelogram | Parallelogram | | -| `0xecc8` | hands-praying | HandsPraying | | -| `0xecca` | boot | Boot | | -| `0xecce` | sock | Sock | | -| `0xecd0` | hoodie | Hoodie | | -| `0xecd4` | warehouse | Warehouse | | -| `0xecd6` | garage | Garage | | -| `0xecd8` | air-traffic-control | AirTrafficControl | | -| `0xecdc` | webcam-slash | WebcamSlash | | -| `0xecde` | dot | Dot | | -| `0xece0` | dot-outline | DotOutline | | -| `0xecea` | church | Church | | -| `0xecec` | synagogue | Synagogue | | -| `0xecee` | mosque | Mosque | | -| `0xecf0` | flag-pennant | FlagPennant | | -| `0xecf2` | flag-banner-fold | FlagBannerFold | | -| `0xecf4` | star-and-crescent | StarAndCrescent | | -| `0xecf6` | pencil-simple-slash | PencilSimpleSlash | | -| `0xecf8` | pencil-slash | PencilSlash | | -| `0xecfa` | shooting-star | ShootingStar | | -| `0xecfc` | medal-military | MedalMilitary | | -| `0xecfe` | person-arms-spread | PersonArmsSpread | | -| `0xed02` | meta-logo | MetaLogo | | -| `0xed08` | file-svg | FileSvg | | -| `0xed0a` | cube-focus | CubeFocus | | -| `0xed0c` | read-cv-logo | ReadCvLogo | | -| `0xed0e` | dev-to-logo | DevToLogo | | -| `0xed10` | goodreads-logo | GoodreadsLogo | | -| `0xed12` | cowboy-hat | CowboyHat | | -| `0xed16` | desk | Desk | | -| `0xed1c` | tidal-logo | TidalLogo | | -| `0xed24` | beach-ball | BeachBall | | -| `0xed2c` | clock-countdown | ClockCountdown | | -| `0xed2e` | cassette-tape | CassetteTape | | -| `0xed30` | tipi | Tipi | | -| `0xed32` | slideshow | Slideshow | | -| `0xed34` | text-a-underline | TextAUnderline | | -| `0xed36` | orange-slice | OrangeSlice | | -| `0xed38` | carrot | Carrot | | -| `0xed3a` | notches | Notches | | -| `0xed3c` | arrows-split | ArrowsSplit | | -| `0xed3e` | arrows-merge | ArrowsMerge | | -| `0xed40` | receipt-x | ReceiptX | | -| `0xed42` | contactless-payment | ContactlessPayment | | -| `0xed46` | hard-hat | HardHat | | -| `0xed48` | crane | Crane | | -| `0xed48` | crane-tower | CraneTower | | -| `0xed4a` | plus-square | PlusSquare | | -| `0xed4c` | minus-square | MinusSquare | | -| `0xed4e` | file-sql | FileSql | | -| `0xed50` | file-md | FileMd | | -| `0xed52` | share-fat | ShareFat | | -| `0xed54` | person-simple-hike | PersonSimpleHike | | -| `0xed5c` | person-simple-tai-chi | PersonSimpleTaiChi | | -| `0xed60` | sneaker-move | SneakerMove | | -| `0xed62` | ranking | Ranking | | -| `0xed64` | matrix-logo | MatrixLogo | | -| `0xed66` | fediverse-logo | FediverseLogo | | -| `0xed68` | mastodon-logo | MastodonLogo | | -| `0xed6a` | flip-horizontal | FlipHorizontal | | -| `0xed6c` | flip-vertical | FlipVertical | | -| `0xed6e` | resize | Resize | | -| `0xed70` | line-vertical | LineVertical | | -| `0xed74` | drone | Drone | | -| `0xed7a` | solar-panel | SolarPanel | | -| `0xed7a` | solar-roof | SolarRoof | | -| `0xed7c` | nuclear-plant | NuclearPlant | | -| `0xed80` | cash-register | CashRegister | | -| `0xed82` | log | Log | | -| `0xed86` | pipe | Pipe | | -| `0xed88` | pipe-wrench | PipeWrench | | -| `0xed8c` | oven | Oven | | -| `0xed8e` | chef-hat | ChefHat | | -| `0xed90` | cigarette | Cigarette | | -| `0xed92` | cigarette-slash | CigaretteSlash | | -| `0xed98` | disco-ball | DiscoBall | | -| `0xed9a` | yarn | Yarn | | -| `0xed9e` | threads-logo | ThreadsLogo | | -| `0xeda0` | blueprint | Blueprint | | -| `0xeda2` | greater-than-or-equal | GreaterThanOrEqual | | -| `0xeda4` | less-than-or-equal | LessThanOrEqual | | -| `0xeda6` | not-equals | NotEquals | | -| `0xeda8` | tilde | Tilde | | -| `0xedaa` | approximate-equals | ApproximateEquals | | -| `0xedac` | less-than | LessThan | | -| `0xedae` | not-member-of | NotMemberOf | | -| `0xedb0` | not-subset-of | NotSubsetOf | | -| `0xedb2` | not-superset-of | NotSupersetOf | | -| `0xedb4` | superset-proper-of | SupersetProperOf | | -| `0xedb6` | subset-proper-of | SubsetProperOf | | -| `0xedb8` | superset-of | SupersetOf | | -| `0xedba` | intersection | Intersection | | -| `0xedbc` | empty | Empty | | -| `0xedbe` | union | Union | | -| `0xedc0` | subset-of | SubsetOf | | -| `0xedc2` | member-of | MemberOf | | -| `0xedc4` | greater-than | GreaterThan | | -| `0xedc6` | lasso | Lasso | | -| `0xedc8` | clover | Clover | | -| `0xedce` | video-conference | VideoConference | | -| `0xedd0` | pint-glass | PintGlass | | -| `0xedd2` | tire | Tire | | -| `0xedd4` | gps-slash | GpsSlash | | -| `0xedd6` | gps-fix | GpsFix | | -| `0xedd8` | gps | Gps | | -| `0xedda` | network-x | NetworkX | | -| `0xeddc` | network-slash | NetworkSlash | | -| `0xedde` | network | Network | | -| `0xede0` | book-open-user | BookOpenUser | | -| `0xede2` | treasure-chest | TreasureChest | | -| `0xede6` | towel | Towel | | -| `0xede8` | washing-machine | WashingMachine | | -| `0xedec` | clock-user | ClockUser | | -| `0xedee` | linktree-logo | LinktreeLogo | | -| `0xedf2` | device-rotate | DeviceRotate | | -| `0xedf4` | stack-minus | StackMinus | | -| `0xedf6` | stack-plus | StackPlus | | -| `0xedfe` | seatbelt | Seatbelt | | -| `0xee02` | racquet | Racquet | | -| `0xee04` | avocado | Avocado | | -| `0xee06` | island | Island | | -| `0xee0a` | bomb | Bomb | | -| `0xee0c` | music-notes-minus | MusicNotesMinus | | -| `0xee12` | cricket | Cricket | | -| `0xee26` | picnic-table | PicnicTable | | -| `0xee28` | spinner-ball | SpinnerBall | | -| `0xee2a` | visor | Visor | | -| `0xee2c` | onigiri | Onigiri | | -| `0xee2e` | lamp-pendant | LampPendant | | -| `0xee30` | car-battery | CarBattery | | -| `0xee32` | drop-simple | DropSimple | | -| `0xee34` | asclepius | Asclepius | | -| `0xee36` | court-basketball | CourtBasketball | | -| `0xee38` | map-pin-simple-line | MapPinSimpleLine | | -| `0xee3a` | map-pin-area | MapPinArea | | -| `0xee3c` | map-pin-simple-area | MapPinSimpleArea | | -| `0xee3e` | map-pin-simple | MapPinSimple | | -| `0xee40` | orange | Orange | | -| `0xee42` | invoice | Invoice | | -| `0xee44` | exclamation-mark | ExclamationMark | | -| `0xee46` | device-mobile-slash | DeviceMobileSlash | | -| `0xee48` | tree-view | TreeView | | -| `0xee4a` | baseball-helmet | BaseballHelmet | | -| `0xee4c` | football-helmet | FootballHelmet | | -| `0xee4e` | address-book-tabs | AddressBookTabs | | -| `0xee50` | cards-three | CardsThree | | -| `0xee52` | tray-arrow-up | TrayArrowUp | | -| `0xee54` | box-arrow-up | BoxArrowUp | | -| `0xee56` | smiley-melting | SmileyMelting | | -| `0xee58` | person-simple-circle | PersonSimpleCircle | | -| `0xee5a` | hand-arrow-up | HandArrowUp | | -| `0xee5c` | eyes | Eyes | | -| `0xee5e` | crown-cross | CrownCross | | -| `0xee60` | binary | Binary | | -| `0xee62` | vector-three | VectorThree | | -| `0xee64` | vector-two | VectorTwo | | -| `0xee66` | sphere | Sphere | | -| `0xee68` | money-wavy | MoneyWavy | | -| `0xee74` | speedometer | Speedometer | | -| `0xee80` | hand-withdraw | HandWithdraw | | -| `0xee82` | hand-deposit | HandDeposit | | +| Codepoint | Name (kebab) | Pascal | +|---|---|---| +| `0xe000` | pulse | Pulse | +| `0xe002` | airplane | Airplane | +| `0xe004` | airplay | Airplay | +| `0xe006` | alarm | Alarm | +| `0xe008` | android-logo | AndroidLogo | +| `0xe00a` | aperture | Aperture | +| `0xe00c` | archive | Archive | +| `0xe00e` | box-arrow-down | BoxArrowDown | +| `0xe010` | tray-arrow-down | TrayArrowDown | +| `0xe012` | armchair | Armchair | +| `0xe014` | arrow-arc-left | ArrowArcLeft | +| `0xe016` | arrow-arc-right | ArrowArcRight | +| `0xe018` | arrow-bend-down-left | ArrowBendDownLeft | +| `0xe01a` | arrow-bend-down-right | ArrowBendDownRight | +| `0xe01c` | arrow-bend-left-down | ArrowBendLeftDown | +| `0xe01e` | arrow-bend-left-up | ArrowBendLeftUp | +| `0xe020` | arrow-bend-right-down | ArrowBendRightDown | +| `0xe022` | arrow-bend-right-up | ArrowBendRightUp | +| `0xe024` | arrow-bend-up-left | ArrowBendUpLeft | +| `0xe026` | arrow-bend-up-right | ArrowBendUpRight | +| `0xe028` | arrow-circle-down | ArrowCircleDown | +| `0xe02a` | arrow-circle-down-left | ArrowCircleDownLeft | +| `0xe02c` | arrow-circle-down-right | ArrowCircleDownRight | +| `0xe02e` | arrow-circle-right | ArrowCircleRight | +| `0xe030` | arrow-circle-up | ArrowCircleUp | +| `0xe032` | arrow-circle-up-left | ArrowCircleUpLeft | +| `0xe034` | arrow-circle-up-right | ArrowCircleUpRight | +| `0xe036` | arrow-clockwise | ArrowClockwise | +| `0xe038` | arrow-counter-clockwise | ArrowCounterClockwise | +| `0xe03a` | arrow-bend-double-up-left | ArrowBendDoubleUpLeft | +| `0xe03c` | arrow-bend-double-up-right | ArrowBendDoubleUpRight | +| `0xe03e` | arrow-down | ArrowDown | +| `0xe040` | arrow-down-left | ArrowDownLeft | +| `0xe042` | arrow-down-right | ArrowDownRight | +| `0xe044` | arrow-elbow-down-left | ArrowElbowDownLeft | +| `0xe046` | arrow-elbow-down-right | ArrowElbowDownRight | +| `0xe048` | arrow-elbow-left | ArrowElbowLeft | +| `0xe04a` | arrow-elbow-left-down | ArrowElbowLeftDown | +| `0xe04c` | arrow-elbow-left-up | ArrowElbowLeftUp | +| `0xe04e` | arrow-elbow-right | ArrowElbowRight | +| `0xe050` | arrow-elbow-right-down | ArrowElbowRightDown | +| `0xe052` | arrow-elbow-right-up | ArrowElbowRightUp | +| `0xe054` | arrow-elbow-up-left | ArrowElbowUpLeft | +| `0xe056` | arrow-elbow-up-right | ArrowElbowUpRight | +| `0xe058` | arrow-left | ArrowLeft | +| `0xe05a` | arrow-circle-left | ArrowCircleLeft | +| `0xe05c` | arrow-line-down | ArrowLineDown | +| `0xe05e` | arrow-line-down-left | ArrowLineDownLeft | +| `0xe060` | arrow-line-down-right | ArrowLineDownRight | +| `0xe062` | arrow-line-left | ArrowLineLeft | +| `0xe064` | arrow-line-right | ArrowLineRight | +| `0xe066` | arrow-line-up | ArrowLineUp | +| `0xe068` | arrow-line-up-left | ArrowLineUpLeft | +| `0xe06a` | arrow-line-up-right | ArrowLineUpRight | +| `0xe06c` | arrow-right | ArrowRight | +| `0xe06e` | arrow-square-down | ArrowSquareDown | +| `0xe070` | arrow-square-down-left | ArrowSquareDownLeft | +| `0xe072` | arrow-square-down-right | ArrowSquareDownRight | +| `0xe074` | arrow-square-left | ArrowSquareLeft | +| `0xe076` | arrow-square-right | ArrowSquareRight | +| `0xe078` | arrow-square-up | ArrowSquareUp | +| `0xe07a` | arrow-square-up-left | ArrowSquareUpLeft | +| `0xe07c` | arrow-square-up-right | ArrowSquareUpRight | +| `0xe07e` | arrow-u-down-left | ArrowUDownLeft | +| `0xe080` | arrow-u-down-right | ArrowUDownRight | +| `0xe082` | arrow-u-left-down | ArrowULeftDown | +| `0xe084` | arrow-u-left-up | ArrowULeftUp | +| `0xe086` | arrow-u-right-down | ArrowURightDown | +| `0xe088` | arrow-u-right-up | ArrowURightUp | +| `0xe08a` | arrow-u-up-left | ArrowUUpLeft | +| `0xe08c` | arrow-u-up-right | ArrowUUpRight | +| `0xe08e` | arrow-up | ArrowUp | +| `0xe090` | arrow-up-left | ArrowUpLeft | +| `0xe092` | arrow-up-right | ArrowUpRight | +| `0xe094` | arrows-clockwise | ArrowsClockwise | +| `0xe096` | arrows-counter-clockwise | ArrowsCounterClockwise | +| `0xe098` | arrows-down-up | ArrowsDownUp | +| `0xe09a` | arrows-in | ArrowsIn | +| `0xe09c` | arrows-in-cardinal | ArrowsInCardinal | +| `0xe09e` | arrows-in-simple | ArrowsInSimple | +| `0xe0a0` | arrows-left-right | ArrowsLeftRight | +| `0xe0a2` | arrows-out | ArrowsOut | +| `0xe0a4` | arrows-out-cardinal | ArrowsOutCardinal | +| `0xe0a6` | arrows-out-simple | ArrowsOutSimple | +| `0xe0a8` | article | Article | +| `0xe0aa` | asterisk | Asterisk | +| `0xe0ac` | at | At | +| `0xe0ae` | backspace | Backspace | +| `0xe0b0` | bag | Bag | +| `0xe0b2` | bandaids | Bandaids | +| `0xe0b4` | bank | Bank | +| `0xe0b6` | barbell | Barbell | +| `0xe0b8` | barcode | Barcode | +| `0xe0ba` | battery-charging | BatteryCharging | +| `0xe0bc` | battery-charging-vertical | BatteryChargingVertical | +| `0xe0be` | battery-empty | BatteryEmpty | +| `0xe0c0` | battery-full | BatteryFull | +| `0xe0c2` | battery-high | BatteryHigh | +| `0xe0c4` | battery-low | BatteryLow | +| `0xe0c6` | battery-medium | BatteryMedium | +| `0xe0c8` | battery-warning | BatteryWarning | +| `0xe0ca` | battery-warning-vertical | BatteryWarningVertical | +| `0xe0cc` | bed | Bed | +| `0xe0ce` | bell | Bell | +| `0xe0d0` | bell-simple | BellSimple | +| `0xe0d2` | bell-simple-slash | BellSimpleSlash | +| `0xe0d4` | bell-slash | BellSlash | +| `0xe0d6` | bicycle | Bicycle | +| `0xe0da` | bluetooth | Bluetooth | +| `0xe0dc` | bluetooth-connected | BluetoothConnected | +| `0xe0de` | bluetooth-slash | BluetoothSlash | +| `0xe0e0` | bluetooth-x | BluetoothX | +| `0xe0e2` | book | Book | +| `0xe0e4` | book-bookmark | BookBookmark | +| `0xe0e6` | book-open | BookOpen | +| `0xe0e8` | bookmark | Bookmark | +| `0xe0ea` | bookmark-simple | BookmarkSimple | +| `0xe0ec` | bookmarks | Bookmarks | +| `0xe0ee` | briefcase | Briefcase | +| `0xe0f2` | broadcast | Broadcast | +| `0xe0f4` | browser | Browser | +| `0xe0f6` | browsers | Browsers | +| `0xe0f8` | cards | Cards | +| `0xe0fe` | building-apartment | BuildingApartment | +| `0xe0fe` | building-office | BuildingOffice | +| `0xe100` | building | Building | +| `0xe102` | buildings | Buildings | +| `0xe106` | bus | Bus | +| `0xe108` | calendar | Calendar | +| `0xe10a` | calendar-blank | CalendarBlank | +| `0xe10c` | calendar-x | CalendarX | +| `0xe10e` | camera | Camera | +| `0xe110` | camera-slash | CameraSlash | +| `0xe112` | car | Car | +| `0xe114` | car-simple | CarSimple | +| `0xe116` | caret-circle-double-down | CaretCircleDoubleDown | +| `0xe118` | caret-circle-double-left | CaretCircleDoubleLeft | +| `0xe11a` | caret-circle-double-right | CaretCircleDoubleRight | +| `0xe11c` | caret-circle-double-up | CaretCircleDoubleUp | +| `0xe11e` | caret-circle-down | CaretCircleDown | +| `0xe120` | caret-circle-left | CaretCircleLeft | +| `0xe122` | caret-circle-right | CaretCircleRight | +| `0xe124` | caret-circle-up | CaretCircleUp | +| `0xe126` | caret-double-down | CaretDoubleDown | +| `0xe128` | caret-double-left | CaretDoubleLeft | +| `0xe12a` | caret-double-right | CaretDoubleRight | +| `0xe12c` | caret-double-up | CaretDoubleUp | +| `0xe12e` | caret-line-up | CaretLineUp | +| `0xe130` | caret-line-right | CaretLineRight | +| `0xe132` | caret-line-left | CaretLineLeft | +| `0xe134` | caret-line-down | CaretLineDown | +| `0xe136` | caret-down | CaretDown | +| `0xe138` | caret-left | CaretLeft | +| `0xe13a` | caret-right | CaretRight | +| `0xe13c` | caret-up | CaretUp | +| `0xe13e` | caret-circle-up-down | CaretCircleUpDown | +| `0xe140` | caret-up-down | CaretUpDown | +| `0xe142` | cell-signal-full | CellSignalFull | +| `0xe144` | cell-signal-high | CellSignalHigh | +| `0xe146` | cell-signal-low | CellSignalLow | +| `0xe148` | cell-signal-medium | CellSignalMedium | +| `0xe14a` | cell-signal-none | CellSignalNone | +| `0xe14c` | cell-signal-slash | CellSignalSlash | +| `0xe14e` | cell-signal-x | CellSignalX | +| `0xe150` | chart-bar | ChartBar | +| `0xe152` | chart-bar-horizontal | ChartBarHorizontal | +| `0xe154` | chart-line | ChartLine | +| `0xe156` | chart-line-up | ChartLineUp | +| `0xe158` | chart-pie | ChartPie | +| `0xe15a` | chart-pie-slice | ChartPieSlice | +| `0xe15c` | chat | Chat | +| `0xe15e` | chat-slash | ChatSlash | +| `0xe160` | chat-centered | ChatCentered | +| `0xe162` | chat-centered-slash | ChatCenteredSlash | +| `0xe164` | chat-centered-dots | ChatCenteredDots | +| `0xe166` | chat-centered-text | ChatCenteredText | +| `0xe168` | chat-circle | ChatCircle | +| `0xe16a` | chat-circle-slash | ChatCircleSlash | +| `0xe16c` | chat-circle-dots | ChatCircleDots | +| `0xe16e` | chat-circle-text | ChatCircleText | +| `0xe170` | chat-dots | ChatDots | +| `0xe172` | chat-teardrop | ChatTeardrop | +| `0xe174` | chat-teardrop-slash | ChatTeardropSlash | +| `0xe176` | chat-teardrop-dots | ChatTeardropDots | +| `0xe178` | chat-teardrop-text | ChatTeardropText | +| `0xe17a` | chat-text | ChatText | +| `0xe17c` | chats | Chats | +| `0xe17e` | chats-circle | ChatsCircle | +| `0xe180` | chats-teardrop | ChatsTeardrop | +| `0xe182` | check | Check | +| `0xe184` | check-circle | CheckCircle | +| `0xe186` | check-square | CheckSquare | +| `0xe188` | check-square-offset | CheckSquareOffset | +| `0xe18a` | circle | Circle | +| `0xe18c` | circle-half | CircleHalf | +| `0xe18e` | circle-half-tilt | CircleHalfTilt | +| `0xe190` | circles-four | CirclesFour | +| `0xe192` | circles-three | CirclesThree | +| `0xe194` | circles-three-plus | CirclesThreePlus | +| `0xe196` | clipboard | Clipboard | +| `0xe198` | clipboard-text | ClipboardText | +| `0xe19a` | clock | Clock | +| `0xe19c` | clock-afternoon | ClockAfternoon | +| `0xe19e` | clock-clockwise | ClockClockwise | +| `0xe1a0` | clock-counter-clockwise | ClockCounterClockwise | +| `0xe1a4` | closed-captioning | ClosedCaptioning | +| `0xe1a6` | subtitles-slash | SubtitlesSlash | +| `0xe1a8` | subtitles | Subtitles | +| `0xe1aa` | cloud | Cloud | +| `0xe1ac` | cloud-arrow-down | CloudArrowDown | +| `0xe1ae` | cloud-arrow-up | CloudArrowUp | +| `0xe1b0` | cloud-check | CloudCheck | +| `0xe1b2` | cloud-lightning | CloudLightning | +| `0xe1b4` | cloud-rain | CloudRain | +| `0xe1b6` | cloud-slash | CloudSlash | +| `0xe1b8` | cloud-snow | CloudSnow | +| `0xe1ba` | club | Club | +| `0xe1bc` | code | Code | +| `0xe1be` | code-simple | CodeSimple | +| `0xe1c0` | coffee-bean | CoffeeBean | +| `0xe1c2` | coffee | Coffee | +| `0xe1c4` | command | Command | +| `0xe1c6` | compass-rose | CompassRose | +| `0xe1c8` | compass | Compass | +| `0xe1ca` | copy | Copy | +| `0xe1cc` | copy-simple | CopySimple | +| `0xe1ce` | corners-in | CornersIn | +| `0xe1d0` | corners-out | CornersOut | +| `0xe1d2` | credit-card | CreditCard | +| `0xe1d4` | crop | Crop | +| `0xe1d6` | crosshair | Crosshair | +| `0xe1d8` | crosshair-simple | CrosshairSimple | +| `0xe1da` | cube | Cube | +| `0xe1dc` | cursor | Cursor | +| `0xe1de` | database | Database | +| `0xe1e0` | device-mobile | DeviceMobile | +| `0xe1e2` | device-mobile-camera | DeviceMobileCamera | +| `0xe1e4` | device-mobile-speaker | DeviceMobileSpeaker | +| `0xe1e6` | device-tablet | DeviceTablet | +| `0xe1e8` | device-tablet-camera | DeviceTabletCamera | +| `0xe1ea` | device-tablet-speaker | DeviceTabletSpeaker | +| `0xe1ec` | diamond | Diamond | +| `0xe1ee` | dice-five | DiceFive | +| `0xe1f0` | dice-four | DiceFour | +| `0xe1f2` | dice-one | DiceOne | +| `0xe1f4` | dice-six | DiceSix | +| `0xe1f6` | dice-three | DiceThree | +| `0xe1f8` | dice-two | DiceTwo | +| `0xe1fa` | divide | Divide | +| `0xe1fc` | dots-nine | DotsNine | +| `0xe1fe` | dots-three | DotsThree | +| `0xe200` | dots-three-circle | DotsThreeCircle | +| `0xe202` | dots-three-circle-vertical | DotsThreeCircleVertical | +| `0xe204` | dots-three-outline | DotsThreeOutline | +| `0xe206` | dots-three-outline-vertical | DotsThreeOutlineVertical | +| `0xe208` | dots-three-vertical | DotsThreeVertical | +| `0xe20a` | download | Download | +| `0xe20c` | download-simple | DownloadSimple | +| `0xe20e` | dribbble-logo | DribbbleLogo | +| `0xe210` | drop | Drop | +| `0xe212` | eject | Eject | +| `0xe214` | envelope | Envelope | +| `0xe216` | envelope-open | EnvelopeOpen | +| `0xe218` | envelope-simple | EnvelopeSimple | +| `0xe21a` | envelope-simple-open | EnvelopeSimpleOpen | +| `0xe21c` | equals | Equals | +| `0xe21e` | eraser | Eraser | +| `0xe220` | eye | Eye | +| `0xe222` | eye-closed | EyeClosed | +| `0xe224` | eye-slash | EyeSlash | +| `0xe226` | facebook-logo | FacebookLogo | +| `0xe228` | faders | Faders | +| `0xe22a` | faders-horizontal | FadersHorizontal | +| `0xe22c` | fast-forward-circle | FastForwardCircle | +| `0xe22e` | figma-logo | FigmaLogo | +| `0xe230` | file | File | +| `0xe232` | file-arrow-down | FileArrowDown | +| `0xe234` | file-minus | FileMinus | +| `0xe236` | file-plus | FilePlus | +| `0xe238` | file-magnifying-glass | FileMagnifyingGlass | +| `0xe23a` | file-text | FileText | +| `0xe23c` | file-x | FileX | +| `0xe23e` | fingerprint | Fingerprint | +| `0xe240` | fingerprint-simple | FingerprintSimple | +| `0xe242` | fire | Fire | +| `0xe244` | flag | Flag | +| `0xe246` | flashlight | Flashlight | +| `0xe248` | floppy-disk | FloppyDisk | +| `0xe24a` | folder | Folder | +| `0xe254` | folder-minus | FolderMinus | +| `0xe256` | folder-open | FolderOpen | +| `0xe258` | folder-plus | FolderPlus | +| `0xe25a` | folder-simple | FolderSimple | +| `0xe25c` | folder-simple-minus | FolderSimpleMinus | +| `0xe25e` | folder-simple-plus | FolderSimplePlus | +| `0xe260` | folders | Folders | +| `0xe262` | fork-knife | ForkKnife | +| `0xe264` | framer-logo | FramerLogo | +| `0xe266` | funnel | Funnel | +| `0xe268` | funnel-simple | FunnelSimple | +| `0xe26a` | funnel-simple-x | FunnelSimpleX | +| `0xe26c` | funnel-x | FunnelX | +| `0xe26e` | game-controller | GameController | +| `0xe270` | gear | Gear | +| `0xe272` | gear-six | GearSix | +| `0xe274` | gif | Gif | +| `0xe276` | gift | Gift | +| `0xe278` | git-branch | GitBranch | +| `0xe27a` | git-commit | GitCommit | +| `0xe27c` | git-diff | GitDiff | +| `0xe27e` | git-fork | GitFork | +| `0xe280` | git-merge | GitMerge | +| `0xe282` | git-pull-request | GitPullRequest | +| `0xe284` | globe-simple-x | GlobeSimpleX | +| `0xe286` | globe-x | GlobeX | +| `0xe288` | globe | Globe | +| `0xe28a` | globe-hemisphere-east | GlobeHemisphereEast | +| `0xe28c` | globe-hemisphere-west | GlobeHemisphereWest | +| `0xe28e` | globe-simple | GlobeSimple | +| `0xe290` | globe-stand | GlobeStand | +| `0xe292` | google-logo | GoogleLogo | +| `0xe294` | google-play-logo | GooglePlayLogo | +| `0xe296` | grid-four | GridFour | +| `0xe298` | hand | Hand | +| `0xe29a` | hand-pointing | HandPointing | +| `0xe29c` | handbag | Handbag | +| `0xe29e` | hard-drive | HardDrive | +| `0xe2a0` | hard-drives | HardDrives | +| `0xe2a2` | hash | Hash | +| `0xe2a4` | hash-straight | HashStraight | +| `0xe2a6` | headphones | Headphones | +| `0xe2a8` | heart | Heart | +| `0xe2aa` | heart-straight | HeartStraight | +| `0xe2ac` | heartbeat | Heartbeat | +| `0xe2ae` | hexagon | Hexagon | +| `0xe2b0` | horse | Horse | +| `0xe2b2` | hourglass | Hourglass | +| `0xe2b4` | hourglass-high | HourglassHigh | +| `0xe2b6` | hourglass-low | HourglassLow | +| `0xe2b8` | hourglass-medium | HourglassMedium | +| `0xe2ba` | hourglass-simple | HourglassSimple | +| `0xe2bc` | hourglass-simple-high | HourglassSimpleHigh | +| `0xe2be` | hourglass-simple-low | HourglassSimpleLow | +| `0xe2c0` | hourglass-simple-medium | HourglassSimpleMedium | +| `0xe2c2` | house | House | +| `0xe2c4` | house-line | HouseLine | +| `0xe2c6` | house-simple | HouseSimple | +| `0xe2c8` | identification-card | IdentificationCard | +| `0xe2ca` | image | Image | +| `0xe2cc` | image-square | ImageSquare | +| `0xe2ce` | info | Info | +| `0xe2d0` | instagram-logo | InstagramLogo | +| `0xe2d2` | intersect | Intersect | +| `0xe2d4` | jeep | Jeep | +| `0xe2d6` | key | Key | +| `0xe2d8` | keyboard | Keyboard | +| `0xe2da` | leaf | Leaf | +| `0xe2dc` | lightbulb | Lightbulb | +| `0xe2de` | lightning | Lightning | +| `0xe2e0` | lightning-slash | LightningSlash | +| `0xe2e2` | link | Link | +| `0xe2e4` | link-break | LinkBreak | +| `0xe2e6` | link-simple | LinkSimple | +| `0xe2e8` | link-simple-break | LinkSimpleBreak | +| `0xe2ea` | link-simple-horizontal | LinkSimpleHorizontal | +| `0xe2ec` | link-simple-horizontal-break | LinkSimpleHorizontalBreak | +| `0xe2ee` | linkedin-logo | LinkedinLogo | +| `0xe2f0` | list | List | +| `0xe2f2` | list-bullets | ListBullets | +| `0xe2f4` | list-dashes | ListDashes | +| `0xe2f6` | list-numbers | ListNumbers | +| `0xe2f8` | list-plus | ListPlus | +| `0xe2fa` | lock | Lock | +| `0xe2fe` | lock-key | LockKey | +| `0xe300` | lock-key-open | LockKeyOpen | +| `0xe302` | lock-laminated | LockLaminated | +| `0xe304` | lock-laminated-open | LockLaminatedOpen | +| `0xe306` | lock-open | LockOpen | +| `0xe308` | lock-simple | LockSimple | +| `0xe30a` | lock-simple-open | LockSimpleOpen | +| `0xe30c` | magnifying-glass | MagnifyingGlass | +| `0xe30e` | magnifying-glass-minus | MagnifyingGlassMinus | +| `0xe310` | magnifying-glass-plus | MagnifyingGlassPlus | +| `0xe314` | map-pin-plus | MapPinPlus | +| `0xe316` | map-pin | MapPin | +| `0xe318` | map-pin-line | MapPinLine | +| `0xe31a` | map-trifold | MapTrifold | +| `0xe31c` | martini | Martini | +| `0xe31e` | math-operations | MathOperations | +| `0xe320` | medal | Medal | +| `0xe322` | medium-logo | MediumLogo | +| `0xe324` | megaphone | Megaphone | +| `0xe326` | microphone | Microphone | +| `0xe328` | microphone-slash | MicrophoneSlash | +| `0xe32a` | minus | Minus | +| `0xe32c` | minus-circle | MinusCircle | +| `0xe32e` | monitor | Monitor | +| `0xe330` | moon | Moon | +| `0xe332` | mouse-scroll | MouseScroll | +| `0xe334` | mouse-left-click | MouseLeftClick | +| `0xe336` | mouse-right-click | MouseRightClick | +| `0xe338` | mouse-middle-click | MouseMiddleClick | +| `0xe33a` | mouse | Mouse | +| `0xe33c` | music-note | MusicNote | +| `0xe33e` | music-note-simple | MusicNoteSimple | +| `0xe340` | music-notes | MusicNotes | +| `0xe342` | music-notes-simple | MusicNotesSimple | +| `0xe344` | newspaper | Newspaper | +| `0xe346` | newspaper-clipping | NewspaperClipping | +| `0xe348` | note | Note | +| `0xe34a` | note-blank | NoteBlank | +| `0xe34c` | note-pencil | NotePencil | +| `0xe34e` | notebook | Notebook | +| `0xe350` | number-eight | NumberEight | +| `0xe352` | number-circle-eight | NumberCircleEight | +| `0xe354` | number-square-eight | NumberSquareEight | +| `0xe356` | number-five | NumberFive | +| `0xe358` | number-circle-five | NumberCircleFive | +| `0xe35a` | number-square-five | NumberSquareFive | +| `0xe35c` | number-four | NumberFour | +| `0xe35e` | number-circle-four | NumberCircleFour | +| `0xe360` | number-square-four | NumberSquareFour | +| `0xe362` | number-nine | NumberNine | +| `0xe364` | number-circle-nine | NumberCircleNine | +| `0xe366` | number-square-nine | NumberSquareNine | +| `0xe368` | number-one | NumberOne | +| `0xe36a` | number-circle-one | NumberCircleOne | +| `0xe36c` | number-square-one | NumberSquareOne | +| `0xe36e` | number-seven | NumberSeven | +| `0xe370` | number-circle-seven | NumberCircleSeven | +| `0xe372` | number-square-seven | NumberSquareSeven | +| `0xe374` | number-six | NumberSix | +| `0xe376` | number-circle-six | NumberCircleSix | +| `0xe378` | number-square-six | NumberSquareSix | +| `0xe37a` | number-three | NumberThree | +| `0xe37c` | number-circle-three | NumberCircleThree | +| `0xe37e` | number-square-three | NumberSquareThree | +| `0xe380` | number-two | NumberTwo | +| `0xe382` | number-circle-two | NumberCircleTwo | +| `0xe384` | number-square-two | NumberSquareTwo | +| `0xe386` | number-zero | NumberZero | +| `0xe388` | number-circle-zero | NumberCircleZero | +| `0xe38a` | number-square-zero | NumberSquareZero | +| `0xe38c` | nut | Nut | +| `0xe38e` | octagon | Octagon | +| `0xe390` | package | Package | +| `0xe392` | paint-bucket | PaintBucket | +| `0xe394` | paper-plane | PaperPlane | +| `0xe396` | paper-plane-right | PaperPlaneRight | +| `0xe398` | paper-plane-tilt | PaperPlaneTilt | +| `0xe39a` | paperclip | Paperclip | +| `0xe39c` | path | Path | +| `0xe39e` | pause | Pause | +| `0xe3a0` | pause-circle | PauseCircle | +| `0xe3a2` | peace | Peace | +| `0xe3a8` | person | Person | +| `0xe3aa` | pen | Pen | +| `0xe3ac` | pen-nib | PenNib | +| `0xe3ae` | pencil | Pencil | +| `0xe3b0` | pencil-circle | PencilCircle | +| `0xe3b2` | pencil-line | PencilLine | +| `0xe3b4` | pencil-simple | PencilSimple | +| `0xe3b6` | percent | Percent | +| `0xe3b8` | phone | Phone | +| `0xe3ba` | phone-call | PhoneCall | +| `0xe3bc` | phone-disconnect | PhoneDisconnect | +| `0xe3be` | phone-incoming | PhoneIncoming | +| `0xe3c0` | phone-outgoing | PhoneOutgoing | +| `0xe3c2` | phone-slash | PhoneSlash | +| `0xe3c4` | phone-x | PhoneX | +| `0xe3c6` | phone-transfer | PhoneTransfer | +| `0xe3c8` | numpad | Numpad | +| `0xe3ca` | phone-pause | PhonePause | +| `0xe3cc` | phone-list | PhoneList | +| `0xe3ce` | phosphor-logo | PhosphorLogo | +| `0xe3d0` | play | Play | +| `0xe3d2` | play-circle | PlayCircle | +| `0xe3d4` | plus | Plus | +| `0xe3d6` | plus-circle | PlusCircle | +| `0xe3d8` | plus-minus | PlusMinus | +| `0xe3da` | power | Power | +| `0xe3dc` | printer | Printer | +| `0xe3de` | prohibit | Prohibit | +| `0xe3e0` | prohibit-inset | ProhibitInset | +| `0xe3e2` | push-pin | PushPin | +| `0xe3e4` | push-pin-slash | PushPinSlash | +| `0xe3e6` | qr-code | QrCode | +| `0xe3e8` | question | Question | +| `0xe3e8` | question-mark | QuestionMark | +| `0xe3ea` | radical | Radical | +| `0xe3ec` | receipt | Receipt | +| `0xe3ee` | record | Record | +| `0xe3f0` | rectangle | Rectangle | +| `0xe3f2` | rectangle-dashed | RectangleDashed | +| `0xe3f4` | trademark-registered | TrademarkRegistered | +| `0xe3f6` | repeat | Repeat | +| `0xe3f8` | repeat-once | RepeatOnce | +| `0xe3fa` | rewind-circle | RewindCircle | +| `0xe3fc` | rocket | Rocket | +| `0xe3fe` | rocket-launch | RocketLaunch | +| `0xe400` | rss | Rss | +| `0xe402` | rss-simple | RssSimple | +| `0xe404` | screencast | Screencast | +| `0xe406` | share | Share | +| `0xe408` | share-network | ShareNetwork | +| `0xe40a` | shield | Shield | +| `0xe40c` | shield-check | ShieldCheck | +| `0xe40e` | shield-chevron | ShieldChevron | +| `0xe410` | shield-slash | ShieldSlash | +| `0xe412` | shield-warning | ShieldWarning | +| `0xe416` | shopping-bag | ShoppingBag | +| `0xe418` | shopping-bag-open | ShoppingBagOpen | +| `0xe41e` | shopping-cart | ShoppingCart | +| `0xe420` | shopping-cart-simple | ShoppingCartSimple | +| `0xe422` | shuffle | Shuffle | +| `0xe424` | shuffle-angular | ShuffleAngular | +| `0xe426` | shuffle-simple | ShuffleSimple | +| `0xe428` | sign-in | SignIn | +| `0xe42a` | sign-out | SignOut | +| `0xe42c` | sketch-logo | SketchLogo | +| `0xe42e` | skip-back-circle | SkipBackCircle | +| `0xe430` | skip-forward-circle | SkipForwardCircle | +| `0xe432` | sliders | Sliders | +| `0xe434` | sliders-horizontal | SlidersHorizontal | +| `0xe436` | smiley | Smiley | +| `0xe438` | smiley-blank | SmileyBlank | +| `0xe43a` | smiley-meh | SmileyMeh | +| `0xe43c` | smiley-nervous | SmileyNervous | +| `0xe43e` | smiley-sad | SmileySad | +| `0xe440` | smiley-sticker | SmileySticker | +| `0xe442` | smiley-x-eyes | SmileyXEyes | +| `0xe444` | sort-ascending | SortAscending | +| `0xe446` | sort-descending | SortDescending | +| `0xe448` | spade | Spade | +| `0xe44a` | speaker-high | SpeakerHigh | +| `0xe44c` | speaker-low | SpeakerLow | +| `0xe44e` | speaker-none | SpeakerNone | +| `0xe450` | speaker-simple-high | SpeakerSimpleHigh | +| `0xe452` | speaker-simple-low | SpeakerSimpleLow | +| `0xe454` | speaker-simple-none | SpeakerSimpleNone | +| `0xe456` | speaker-simple-slash | SpeakerSimpleSlash | +| `0xe458` | speaker-simple-x | SpeakerSimpleX | +| `0xe45a` | speaker-slash | SpeakerSlash | +| `0xe45c` | speaker-x | SpeakerX | +| `0xe45e` | square | Square | +| `0xe462` | square-half | SquareHalf | +| `0xe464` | squares-four | SquaresFour | +| `0xe466` | stack | Stack | +| `0xe468` | stack-simple | StackSimple | +| `0xe46a` | star | Star | +| `0xe46c` | stop | Stop | +| `0xe46e` | stop-circle | StopCircle | +| `0xe470` | storefront | Storefront | +| `0xe472` | sun | Sun | +| `0xe474` | sun-dim | SunDim | +| `0xe476` | table | Table | +| `0xe478` | tag | Tag | +| `0xe47a` | tag-simple | TagSimple | +| `0xe47c` | target | Target | +| `0xe47e` | terminal | Terminal | +| `0xe480` | text-align-center | TextAlignCenter | +| `0xe482` | text-align-justify | TextAlignJustify | +| `0xe484` | text-align-left | TextAlignLeft | +| `0xe486` | text-align-right | TextAlignRight | +| `0xe488` | text-t-slash | TextTSlash | +| `0xe48a` | text-t | TextT | +| `0xe48c` | thumbs-down | ThumbsDown | +| `0xe48e` | thumbs-up | ThumbsUp | +| `0xe490` | ticket | Ticket | +| `0xe492` | timer | Timer | +| `0xe494` | tote | Tote | +| `0xe496` | train | Train | +| `0xe498` | subway | Subway | +| `0xe49c` | cable-car | CableCar | +| `0xe49e` | train-regional | TrainRegional | +| `0xe4a0` | train-simple | TrainSimple | +| `0xe4a2` | translate | Translate | +| `0xe4a6` | trash | Trash | +| `0xe4a8` | trash-simple | TrashSimple | +| `0xe4aa` | tray | Tray | +| `0xe4ac` | trend-down | TrendDown | +| `0xe4ae` | trend-up | TrendUp | +| `0xe4b0` | triangle | Triangle | +| `0xe4b2` | triangle-dashed | TriangleDashed | +| `0xe4b4` | truck | Truck | +| `0xe4b6` | truck-trailer | TruckTrailer | +| `0xe4ba` | twitter-logo | TwitterLogo | +| `0xe4bc` | x-logo | XLogo | +| `0xe4be` | upload | Upload | +| `0xe4c0` | upload-simple | UploadSimple | +| `0xe4c2` | user | User | +| `0xe4c4` | user-circle | UserCircle | +| `0xe4c6` | user-circle-gear | UserCircleGear | +| `0xe4c8` | user-circle-minus | UserCircleMinus | +| `0xe4ca` | user-circle-plus | UserCirclePlus | +| `0xe4cc` | user-gear | UserGear | +| `0xe4ce` | user-minus | UserMinus | +| `0xe4d0` | user-plus | UserPlus | +| `0xe4d2` | user-rectangle | UserRectangle | +| `0xe4d4` | user-square | UserSquare | +| `0xe4d6` | users | Users | +| `0xe4d8` | vibrate | Vibrate | +| `0xe4da` | video-camera | VideoCamera | +| `0xe4dc` | video-camera-slash | VideoCameraSlash | +| `0xe4de` | voicemail | Voicemail | +| `0xe4e0` | warning | Warning | +| `0xe4e2` | warning-circle | WarningCircle | +| `0xe4e4` | warning-octagon | WarningOctagon | +| `0xe4e6` | watch | Watch | +| `0xe4e8` | wheelchair | Wheelchair | +| `0xe4ea` | wifi-high | WifiHigh | +| `0xe4ec` | wifi-low | WifiLow | +| `0xe4ee` | wifi-medium | WifiMedium | +| `0xe4f0` | wifi-none | WifiNone | +| `0xe4f2` | wifi-slash | WifiSlash | +| `0xe4f4` | wifi-x | WifiX | +| `0xe4f6` | x | X | +| `0xe4f8` | x-circle | XCircle | +| `0xe4fa` | x-square | XSquare | +| `0xe4fc` | youtube-logo | YoutubeLogo | +| `0xe4fe` | airplane-in-flight | AirplaneInFlight | +| `0xe500` | airplane-taxiing | AirplaneTaxiing | +| `0xe502` | airplane-landing | AirplaneLanding | +| `0xe504` | airplane-takeoff | AirplaneTakeoff | +| `0xe506` | align-bottom | AlignBottom | +| `0xe508` | markdown-logo | MarkdownLogo | +| `0xe50a` | align-center-horizontal | AlignCenterHorizontal | +| `0xe50c` | align-center-vertical | AlignCenterVertical | +| `0xe50e` | align-left | AlignLeft | +| `0xe510` | align-right | AlignRight | +| `0xe512` | align-top | AlignTop | +| `0xe514` | anchor | Anchor | +| `0xe516` | apple-logo | AppleLogo | +| `0xe518` | arrow-fat-down | ArrowFatDown | +| `0xe51a` | arrow-fat-left | ArrowFatLeft | +| `0xe51c` | arrow-fat-line-down | ArrowFatLineDown | +| `0xe51e` | arrow-fat-line-left | ArrowFatLineLeft | +| `0xe520` | arrow-fat-line-right | ArrowFatLineRight | +| `0xe522` | arrow-fat-line-up | ArrowFatLineUp | +| `0xe524` | arrow-fat-lines-down | ArrowFatLinesDown | +| `0xe526` | arrow-fat-lines-left | ArrowFatLinesLeft | +| `0xe528` | arrow-fat-lines-right | ArrowFatLinesRight | +| `0xe52a` | arrow-fat-lines-up | ArrowFatLinesUp | +| `0xe52c` | arrow-fat-right | ArrowFatRight | +| `0xe52e` | arrow-fat-up | ArrowFatUp | +| `0xe530` | arrows-in-line-horizontal | ArrowsInLineHorizontal | +| `0xe532` | arrows-in-line-vertical | ArrowsInLineVertical | +| `0xe534` | arrows-out-line-horizontal | ArrowsOutLineHorizontal | +| `0xe536` | arrows-out-line-vertical | ArrowsOutLineVertical | +| `0xe538` | calculator | Calculator | +| `0xe53a` | checks | Checks | +| `0xe53c` | cloud-fog | CloudFog | +| `0xe53e` | cloud-moon | CloudMoon | +| `0xe540` | cloud-sun | CloudSun | +| `0xe542` | columns-plus-right | ColumnsPlusRight | +| `0xe544` | columns-plus-left | ColumnsPlusLeft | +| `0xe546` | columns | Columns | +| `0xe548` | computer-tower | ComputerTower | +| `0xe54a` | copyright | Copyright | +| `0xe54c` | currency-circle-dollar | CurrencyCircleDollar | +| `0xe54e` | currency-cny | CurrencyCny | +| `0xe550` | currency-dollar | CurrencyDollar | +| `0xe552` | currency-dollar-simple | CurrencyDollarSimple | +| `0xe554` | currency-eur | CurrencyEur | +| `0xe556` | currency-gbp | CurrencyGbp | +| `0xe558` | currency-inr | CurrencyInr | +| `0xe55a` | currency-jpy | CurrencyJpy | +| `0xe55c` | currency-krw | CurrencyKrw | +| `0xe55e` | currency-rub | CurrencyRub | +| `0xe560` | desktop | Desktop | +| `0xe562` | desktop-tower | DesktopTower | +| `0xe564` | disc | Disc | +| `0xe566` | drop-half | DropHalf | +| `0xe568` | eyedropper | Eyedropper | +| `0xe56a` | face-mask | FaceMask | +| `0xe56c` | finn-the-human | FinnTheHuman | +| `0xe56e` | first-aid | FirstAid | +| `0xe570` | first-aid-kit | FirstAidKit | +| `0xe572` | ambulance | Ambulance | +| `0xe574` | fire-truck | FireTruck | +| `0xe576` | github-logo | GithubLogo | +| `0xe57a` | hand-fist | HandFist | +| `0xe57c` | hand-grabbing | HandGrabbing | +| `0xe57e` | hand-palm | HandPalm | +| `0xe580` | hand-waving | HandWaving | +| `0xe582` | handshake | Handshake | +| `0xe584` | headset | Headset | +| `0xe586` | laptop | Laptop | +| `0xe588` | money | Money | +| `0xe58a` | monitor-arrow-up | MonitorArrowUp | +| `0xe58c` | monitor-play | MonitorPlay | +| `0xe58e` | moon-stars | MoonStars | +| `0xe590` | paint-brush-broad | PaintBrushBroad | +| `0xe592` | paperclip-horizontal | PaperclipHorizontal | +| `0xe594` | poker-chip | PokerChip | +| `0xe596` | puzzle-piece | PuzzlePiece | +| `0xe598` | rainbow | Rainbow | +| `0xe59a` | rainbow-cloud | RainbowCloud | +| `0xe59c` | reddit-logo | RedditLogo | +| `0xe59e` | rows-plus-bottom | RowsPlusBottom | +| `0xe5a0` | rows-plus-top | RowsPlusTop | +| `0xe5a2` | rows | Rows | +| `0xe5a4` | skip-back | SkipBack | +| `0xe5a6` | skip-forward | SkipForward | +| `0xe5a8` | slack-logo | SlackLogo | +| `0xe5aa` | snowflake | Snowflake | +| `0xe5ac` | sticker | Sticker | +| `0xe5ae` | suitcase | Suitcase | +| `0xe5b0` | suitcase-simple | SuitcaseSimple | +| `0xe5b2` | trolley | Trolley | +| `0xe5b4` | trolley-suitcase | TrolleySuitcase | +| `0xe5b6` | sun-horizon | SunHorizon | +| `0xe5b8` | swatches | Swatches | +| `0xe5ba` | sword | Sword | +| `0xe5bc` | telegram-logo | TelegramLogo | +| `0xe5be` | text-b | TextB | +| `0xe5c0` | text-italic | TextItalic | +| `0xe5c2` | text-strikethrough | TextStrikethrough | +| `0xe5c4` | text-underline | TextUnderline | +| `0xe5c6` | thermometer | Thermometer | +| `0xe5c8` | thermometer-cold | ThermometerCold | +| `0xe5ca` | thermometer-hot | ThermometerHot | +| `0xe5cc` | thermometer-simple | ThermometerSimple | +| `0xe5ce` | twitch-logo | TwitchLogo | +| `0xe5d0` | whatsapp-logo | WhatsappLogo | +| `0xe5d2` | wind | Wind | +| `0xe5d4` | wrench | Wrench | +| `0xe5d6` | airplane-tilt | AirplaneTilt | +| `0xe5d8` | anchor-simple | AnchorSimple | +| `0xe5da` | app-window | AppWindow | +| `0xe5dc` | arrow-square-in | ArrowSquareIn | +| `0xe5de` | arrow-square-out | ArrowSquareOut | +| `0xe5e0` | article-medium | ArticleMedium | +| `0xe5e2` | article-ny-times | ArticleNyTimes | +| `0xe5e4` | atom | Atom | +| `0xe5e6` | bag-simple | BagSimple | +| `0xe5e8` | bell-ringing | BellRinging | +| `0xe5ea` | bell-simple-ringing | BellSimpleRinging | +| `0xe5ec` | bell-simple-z | BellSimpleZ | +| `0xe5ee` | bell-z | BellZ | +| `0xe5f0` | bookmarks-simple | BookmarksSimple | +| `0xe5f2` | briefcase-metal | BriefcaseMetal | +| `0xe5f4` | bug | Bug | +| `0xe5f6` | bug-beetle | BugBeetle | +| `0xe5f8` | bug-droid | BugDroid | +| `0xe5fa` | cardholder | Cardholder | +| `0xe5fc` | chalkboard | Chalkboard | +| `0xe5fe` | chalkboard-simple | ChalkboardSimple | +| `0xe600` | chalkboard-teacher | ChalkboardTeacher | +| `0xe602` | circle-dashed | CircleDashed | +| `0xe604` | seal | Seal | +| `0xe606` | seal-check | SealCheck | +| `0xe608` | seal-question | SealQuestion | +| `0xe60a` | seal-percent | SealPercent | +| `0xe60c` | seal-warning | SealWarning | +| `0xe60e` | coin | Coin | +| `0xe610` | cpu | Cpu | +| `0xe612` | graphics-card | GraphicsCard | +| `0xe614` | crown | Crown | +| `0xe616` | crown-simple | CrownSimple | +| `0xe618` | currency-btc | CurrencyBtc | +| `0xe61a` | discord-logo | DiscordLogo | +| `0xe61c` | door | Door | +| `0xe61e` | file-arrow-up | FileArrowUp | +| `0xe620` | fire-simple | FireSimple | +| `0xe622` | flag-banner | FlagBanner | +| `0xe624` | flame | Flame | +| `0xe626` | frame-corners | FrameCorners | +| `0xe628` | gauge | Gauge | +| `0xe62a` | ghost | Ghost | +| `0xe62c` | graduation-cap | GraduationCap | +| `0xe62e` | handbag-simple | HandbagSimple | +| `0xe630` | hand-soap | HandSoap | +| `0xe632` | highlighter-circle | HighlighterCircle | +| `0xe634` | infinity | Infinity | +| `0xe636` | knife | Knife | +| `0xe638` | lamp | Lamp | +| `0xe63a` | lifebuoy | Lifebuoy | +| `0xe63c` | lightbulb-filament | LightbulbFilament | +| `0xe63e` | notepad | Notepad | +| `0xe640` | marker-circle | MarkerCircle | +| `0xe642` | megaphone-simple | MegaphoneSimple | +| `0xe644` | mouse-simple | MouseSimple | +| `0xe646` | ny-times-logo | NyTimesLogo | +| `0xe648` | paw-print | PawPrint | +| `0xe64a` | pen-nib-straight | PenNibStraight | +| `0xe64c` | picture-in-picture | PictureInPicture | +| `0xe64e` | pinterest-logo | PinterestLogo | +| `0xe650` | placeholder | Placeholder | +| `0xe652` | planet | Planet | +| `0xe654` | presentation | Presentation | +| `0xe656` | presentation-chart | PresentationChart | +| `0xe658` | projector-screen | ProjectorScreen | +| `0xe65a` | projector-screen-chart | ProjectorScreenChart | +| `0xe65c` | push-pin-simple | PushPinSimple | +| `0xe65e` | push-pin-simple-slash | PushPinSimpleSlash | +| `0xe660` | quotes | Quotes | +| `0xe662` | scribble-loop | ScribbleLoop | +| `0xe664` | sim-card | SimCard | +| `0xe666` | smiley-wink | SmileyWink | +| `0xe668` | snapchat-logo | SnapchatLogo | +| `0xe66a` | spinner | Spinner | +| `0xe66c` | spinner-gap | SpinnerGap | +| `0xe66e` | spotify-logo | SpotifyLogo | +| `0xe670` | t-shirt | TShirt | +| `0xe672` | tag-chevron | TagChevron | +| `0xe674` | toggle-left | ToggleLeft | +| `0xe676` | toggle-right | ToggleRight | +| `0xe678` | tote-simple | ToteSimple | +| `0xe67a` | traffic-sign | TrafficSign | +| `0xe67c` | tree-structure | TreeStructure | +| `0xe67e` | trophy | Trophy | +| `0xe680` | magnet | Magnet | +| `0xe682` | magnet-straight | MagnetStraight | +| `0xe684` | umbrella | Umbrella | +| `0xe686` | umbrella-simple | UmbrellaSimple | +| `0xe688` | wall | Wall | +| `0xe68a` | wallet | Wallet | +| `0xe68c` | users-four | UsersFour | +| `0xe68e` | users-three | UsersThree | +| `0xe690` | square-logo | SquareLogo | +| `0xe692` | windows-logo | WindowsLogo | +| `0xe694` | gitlab-logo | GitlabLogo | +| `0xe696` | gitlab-logo-simple | GitlabLogoSimple | +| `0xe698` | stripe-logo | StripeLogo | +| `0xe69a` | selection | Selection | +| `0xe69c` | selection-plus | SelectionPlus | +| `0xe69e` | selection-slash | SelectionSlash | +| `0xe6a0` | hands-clapping | HandsClapping | +| `0xe6a2` | sparkle | Sparkle | +| `0xe6a4` | star-four | StarFour | +| `0xe6a6` | fast-forward | FastForward | +| `0xe6a8` | rewind | Rewind | +| `0xe6aa` | playlist | Playlist | +| `0xe6ac` | queue | Queue | +| `0xe6ae` | eject-simple | EjectSimple | +| `0xe6b2` | wine | Wine | +| `0xe6b4` | brandy | Brandy | +| `0xe6b6` | magic-wand | MagicWand | +| `0xe6b8` | ruler | Ruler | +| `0xe6ba` | text-h | TextH | +| `0xe6bc` | text-h-one | TextHOne | +| `0xe6be` | text-h-two | TextHTwo | +| `0xe6c0` | text-h-three | TextHThree | +| `0xe6c2` | text-h-four | TextHFour | +| `0xe6c4` | text-h-five | TextHFive | +| `0xe6c6` | text-h-six | TextHSix | +| `0xe6c8` | palette | Palette | +| `0xe6ca` | cookie | Cookie | +| `0xe6cc` | flower-lotus | FlowerLotus | +| `0xe6ce` | bounding-box | BoundingBox | +| `0xe6d0` | polygon | Polygon | +| `0xe6d2` | line-segment | LineSegment | +| `0xe6d4` | line-segments | LineSegments | +| `0xe6d6` | layout | Layout | +| `0xe6d8` | messenger-logo | MessengerLogo | +| `0xe6da` | tree | Tree | +| `0xe6dc` | tree-evergreen | TreeEvergreen | +| `0xe6de` | waves | Waves | +| `0xe6e0` | gender-female | GenderFemale | +| `0xe6e2` | gender-male | GenderMale | +| `0xe6e4` | gender-nonbinary | GenderNonbinary | +| `0xe6e6` | gender-intersex | GenderIntersex | +| `0xe6e8` | gender-transgender | GenderTransgender | +| `0xe6ea` | gender-neuter | GenderNeuter | +| `0xe6ec` | flow-arrow | FlowArrow | +| `0xe6ee` | text-aa | TextAa | +| `0xe6f0` | paint-brush | PaintBrush | +| `0xe6f2` | paint-brush-household | PaintBrushHousehold | +| `0xe6f4` | paint-roller | PaintRoller | +| `0xe6f6` | identification-badge | IdentificationBadge | +| `0xe6f8` | address-book | AddressBook | +| `0xe6fa` | notification | Notification | +| `0xe6fc` | user-focus | UserFocus | +| `0xe6fe` | headlights | Headlights | +| `0xe700` | pill | Pill | +| `0xe702` | file-pdf | FilePdf | +| `0xe704` | file-dashed | FileDashed | +| `0xe706` | shield-plus | ShieldPlus | +| `0xe708` | shield-checkered | ShieldCheckered | +| `0xe70a` | star-half | StarHalf | +| `0xe70c` | ear | Ear | +| `0xe70e` | ear-slash | EarSlash | +| `0xe710` | files | Files | +| `0xe712` | calendar-check | CalendarCheck | +| `0xe714` | calendar-plus | CalendarPlus | +| `0xe716` | soccer-ball | SoccerBall | +| `0xe718` | football | Football | +| `0xe71a` | baseball | Baseball | +| `0xe71c` | person-simple-ski | PersonSimpleSki | +| `0xe71e` | person-simple-snowboard | PersonSimpleSnowboard | +| `0xe720` | tennis-ball | TennisBall | +| `0xe722` | boules | Boules | +| `0xe724` | basketball | Basketball | +| `0xe726` | volleyball | Volleyball | +| `0xe728` | fish | Fish | +| `0xe72a` | fish-simple | FishSimple | +| `0xe72c` | bird | Bird | +| `0xe72e` | person-simple | PersonSimple | +| `0xe730` | person-simple-run | PersonSimpleRun | +| `0xe732` | person-simple-throw | PersonSimpleThrow | +| `0xe734` | person-simple-bike | PersonSimpleBike | +| `0xe736` | person-simple-swim | PersonSimpleSwim | +| `0xe73a` | person-simple-walk | PersonSimpleWalk | +| `0xe73c` | user-list | UserList | +| `0xe73e` | student | Student | +| `0xe740` | video | Video | +| `0xe742` | exam | Exam | +| `0xe744` | selection-inverse | SelectionInverse | +| `0xe746` | selection-all | SelectionAll | +| `0xe748` | cat | Cat | +| `0xe74a` | dog | Dog | +| `0xe74e` | brain | Brain | +| `0xe750` | scales | Scales | +| `0xe752` | password | Password | +| `0xe754` | television | Television | +| `0xe756` | user-switch | UserSwitch | +| `0xe758` | books | Books | +| `0xe75a` | recycle | Recycle | +| `0xe75c` | microphone-stage | MicrophoneStage | +| `0xe75e` | flower | Flower | +| `0xe760` | factory | Factory | +| `0xe762` | robot | Robot | +| `0xe764` | cooking-pot | CookingPot | +| `0xe766` | certificate | Certificate | +| `0xe768` | gas-pump | GasPump | +| `0xe76c` | balloon | Balloon | +| `0xe76e` | vault | Vault | +| `0xe774` | baby | Baby | +| `0xe776` | shower | Shower | +| `0xe778` | tabs | Tabs | +| `0xe77e` | radio | Radio | +| `0xe780` | cake | Cake | +| `0xe782` | key-return | KeyReturn | +| `0xe786` | boat | Boat | +| `0xe78a` | sailboat | Sailboat | +| `0xe78c` | shipping-container | ShippingContainer | +| `0xe78e` | coins | Coins | +| `0xe790` | hamburger | Hamburger | +| `0xe792` | film-strip | FilmStrip | +| `0xe794` | dots-six | DotsSix | +| `0xe796` | pizza | Pizza | +| `0xe79a` | toilet | Toilet | +| `0xe79c` | toilet-paper | ToiletPaper | +| `0xe79e` | flask | Flask | +| `0xe7a0` | test-tube | TestTube | +| `0xe7a2` | prescription | Prescription | +| `0xe7a4` | camera-rotate | CameraRotate | +| `0xe7a8` | image-broken | ImageBroken | +| `0xe7ae` | mountains | Mountains | +| `0xe7b0` | beer-bottle | BeerBottle | +| `0xe7b2` | calendar-dot | CalendarDot | +| `0xe7b4` | calendar-dots | CalendarDots | +| `0xe7b6` | google-cardboard-logo | GoogleCardboardLogo | +| `0xe7b8` | virtual-reality | VirtualReality | +| `0xe7ba` | eyeglasses | Eyeglasses | +| `0xe7bc` | angle | Angle | +| `0xe7be` | battery-vertical-low | BatteryVerticalLow | +| `0xe7c0` | battery-vertical-medium | BatteryVerticalMedium | +| `0xe7c2` | battery-vertical-high | BatteryVerticalHigh | +| `0xe7c4` | battery-vertical-full | BatteryVerticalFull | +| `0xe7c6` | battery-vertical-empty | BatteryVerticalEmpty | +| `0xe7c8` | cursor-click | CursorClick | +| `0xe7cc` | hand-peace | HandPeace | +| `0xe7ce` | coda-logo | CodaLogo | +| `0xe7d0` | dropbox-logo | DropboxLogo | +| `0xe7d2` | open-ai-logo | OpenAiLogo | +| `0xe7d4` | head-circuit | HeadCircuit | +| `0xe7d6` | virus | Virus | +| `0xe7d8` | cursor-text | CursorText | +| `0xe7de` | call-bell | CallBell | +| `0xe7e0` | jar | Jar | +| `0xe7e0` | jar-label | JarLabel | +| `0xe7e0` | tip-jar | TipJar | +| `0xe7e4` | spray-bottle | SprayBottle | +| `0xe7e6` | door-open | DoorOpen | +| `0xe7ea` | stethoscope | Stethoscope | +| `0xe7f2` | bone | Bone | +| `0xe7f4` | behance-logo | BehanceLogo | +| `0xe7f6` | couch | Couch | +| `0xe7fc` | warning-diamond | WarningDiamond | +| `0xe7fe` | coat-hanger | CoatHanger | +| `0xe800` | waveform-slash | WaveformSlash | +| `0xe802` | waveform | Waveform | +| `0xe804` | ice-cream | IceCream | +| `0xe806` | scribble | Scribble | +| `0xe808` | battery-plus | BatteryPlus | +| `0xe80a` | motorcycle | Motorcycle | +| `0xe80c` | sneaker | Sneaker | +| `0xe80e` | hammer | Hammer | +| `0xe810` | hand-heart | HandHeart | +| `0xe812` | egg | Egg | +| `0xe816` | sunglasses | Sunglasses | +| `0xe818` | baby-carriage | BabyCarriage | +| `0xe81a` | confetti | Confetti | +| `0xe81c` | bread | Bread | +| `0xe81e` | bathtub | Bathtub | +| `0xe820` | scooter | Scooter | +| `0xe822` | moped-front | MopedFront | +| `0xe824` | moped | Moped | +| `0xe826` | van | Van | +| `0xe82e` | needle | Needle | +| `0xe830` | cherries | Cherries | +| `0xe832` | asterisk-simple | AsteriskSimple | +| `0xe834` | images-square | ImagesSquare | +| `0xe836` | images | Images | +| `0xe838` | road-horizon | RoadHorizon | +| `0xe83c` | swap | Swap | +| `0xe83e` | detective | Detective | +| `0xe842` | lastfm-logo | LastfmLogo | +| `0xe844` | hospital | Hospital | +| `0xe85e` | brackets-square | BracketsSquare | +| `0xe860` | brackets-curly | BracketsCurly | +| `0xe862` | brackets-angle | BracketsAngle | +| `0xe864` | brackets-round | BracketsRound | +| `0xe86a` | copyleft | Copyleft | +| `0xe86e` | screwdriver | Screwdriver | +| `0xe870` | square-split-horizontal | SquareSplitHorizontal | +| `0xe872` | split-horizontal | SplitHorizontal | +| `0xe874` | square-split-vertical | SquareSplitVertical | +| `0xe876` | split-vertical | SplitVertical | +| `0xe878` | unite-square | UniteSquare | +| `0xe87a` | intersect-square | IntersectSquare | +| `0xe87c` | gear-fine | GearFine | +| `0xe87e` | unite | Unite | +| `0xe880` | exclude-square | ExcludeSquare | +| `0xe882` | exclude | Exclude | +| `0xe88c` | tornado | Tornado | +| `0xe88e` | hurricane | Hurricane | +| `0xe89a` | wheelchair-motion | WheelchairMotion | +| `0xe89c` | signpost | Signpost | +| `0xe89e` | star-of-david | StarOfDavid | +| `0xe8a0` | cross | Cross | +| `0xe8a6` | alien | Alien | +| `0xe8a8` | option | Option | +| `0xe8b0` | calendar-heart | CalendarHeart | +| `0xe8b2` | calendar-star | CalendarStar | +| `0xe8b6` | chart-line-down | ChartLineDown | +| `0xe8ba` | tent | Tent | +| `0xe8be` | play-pause | PlayPause | +| `0xe8c0` | film-reel | FilmReel | +| `0xe8c2` | film-slate | FilmSlate | +| `0xe8c4` | checkerboard | Checkerboard | +| `0xe8c6` | lego | Lego | +| `0xe8c6` | lego-smiley | LegoSmiley | +| `0xe8cc` | car-profile | CarProfile | +| `0xe8ce` | gas-can | GasCan | +| `0xe8d0` | charging-station | ChargingStation | +| `0xe8d2` | wechat-logo | WechatLogo | +| `0xe8d4` | tumblr-logo | TumblrLogo | +| `0xe8dc` | skype-logo | SkypeLogo | +| `0xe8de` | soundcloud-logo | SoundcloudLogo | +| `0xe8e4` | bowl-steam | BowlSteam | +| `0xe8e6` | tea-bag | TeaBag | +| `0xe8e8` | high-heel | HighHeel | +| `0xe8ec` | stairs | Stairs | +| `0xe8f2` | book-open-text | BookOpenText | +| `0xe8f4` | diamonds-four | DiamondsFour | +| `0xe8f6` | google-drive-logo | GoogleDriveLogo | +| `0xe8f8` | folder-dashed | FolderDashed | +| `0xe8fc` | cylinder | Cylinder | +| `0xe902` | taxi | Taxi | +| `0xe906` | pencil-ruler | PencilRuler | +| `0xe914` | file-code | FileCode | +| `0xe916` | skull | Skull | +| `0xe918` | cactus | Cactus | +| `0xe91a` | tree-palm | TreePalm | +| `0xe922` | backpack | Backpack | +| `0xe924` | dna | Dna | +| `0xe92a` | yin-yang | YinYang | +| `0xe946` | plug | Plug | +| `0xe948` | barricade | Barricade | +| `0xe94a` | pepper | Pepper | +| `0xe94e` | dresser | Dresser | +| `0xe950` | chair | Chair | +| `0xe954` | drop-slash | DropSlash | +| `0xe956` | usb | Usb | +| `0xe958` | file-zip | FileZip | +| `0xe95a` | lectern | Lectern | +| `0xe95c` | file-lock | FileLock | +| `0xe95e` | file-cloud | FileCloud | +| `0xe960` | paragraph | Paragraph | +| `0xe964` | basket | Basket | +| `0xe968` | syringe | Syringe | +| `0xe96c` | amazon-logo | AmazonLogo | +| `0xe974` | app-store-logo | AppStoreLogo | +| `0xe976` | google-chrome-logo | GoogleChromeLogo | +| `0xe978` | codepen-logo | CodepenLogo | +| `0xe98a` | patreon-logo | PatreonLogo | +| `0xe98c` | paypal-logo | PaypalLogo | +| `0xe9a0` | notion-logo | NotionLogo | +| `0xe9a8` | traffic-cone | TrafficCone | +| `0xe9aa` | traffic-signal | TrafficSignal | +| `0xe9ac` | steering-wheel | SteeringWheel | +| `0xe9b0` | suitcase-rolling | SuitcaseRolling | +| `0xe9b2` | webcam | Webcam | +| `0xe9b8` | siren | Siren | +| `0xe9ba` | meteor | Meteor | +| `0xe9c0` | feather | Feather | +| `0xe9c2` | circuitry | Circuitry | +| `0xe9c4` | memory | Memory | +| `0xe9c8` | piano-keys | PianoKeys | +| `0xe9cc` | tooth | Tooth | +| `0xe9d0` | castle-turret | CastleTurret | +| `0xe9d8` | campfire | Campfire | +| `0xe9dc` | radioactive | Radioactive | +| `0xe9de` | fallout-shelter | FalloutShelter | +| `0xe9e0` | biohazard | Biohazard | +| `0xe9e4` | ladder | Ladder | +| `0xe9e6` | shovel | Shovel | +| `0xe9e8` | fire-extinguisher | FireExtinguisher | +| `0xe9ec` | tram | Tram | +| `0xe9f0` | trademark | Trademark | +| `0xe9f2` | fan | Fan | +| `0xe9f4` | mask-happy | MaskHappy | +| `0xe9f6` | lighthouse | Lighthouse | +| `0xe9f8` | windmill | Windmill | +| `0xe9fa` | spiral | Spiral | +| `0xe9fc` | axe | Axe | +| `0xe9fe` | cheese | Cheese | +| `0xea04` | piggy-bank | PiggyBank | +| `0xea06` | codesandbox-logo | CodesandboxLogo | +| `0xea08` | speaker-hifi | SpeakerHifi | +| `0xea0e` | compass-tool | CompassTool | +| `0xea12` | calendar-slash | CalendarSlash | +| `0xea14` | calendar-minus | CalendarMinus | +| `0xea1a` | rug | Rug | +| `0xea1c` | text-outdent | TextOutdent | +| `0xea1e` | text-indent | TextIndent | +| `0xea20` | file-audio | FileAudio | +| `0xea22` | file-video | FileVideo | +| `0xea24` | file-image | FileImage | +| `0xea28` | baseball-cap | BaseballCap | +| `0xea2a` | beanie | Beanie | +| `0xea2c` | belt | Belt | +| `0xea32` | gavel | Gavel | +| `0xea34` | bowling-ball | BowlingBall | +| `0xea36` | boxing-glove | BoxingGlove | +| `0xea38` | flag-checkered | FlagCheckered | +| `0xea3a` | strategy | Strategy | +| `0xea3c` | folder-lock | FolderLock | +| `0xea3e` | golf | Golf | +| `0xea42` | ping-pong | PingPong | +| `0xea44` | stool | Stool | +| `0xea46` | office-chair | OfficeChair | +| `0xea48` | stamp | Stamp | +| `0xea4a` | cheers | Cheers | +| `0xea4c` | hand-eye | HandEye | +| `0xea4e` | hand-arrow-down | HandArrowDown | +| `0xea5a` | three-d | ThreeD | +| `0xea5c` | four-k | FourK | +| `0xea5e` | joystick | Joystick | +| `0xea64` | binoculars | Binoculars | +| `0xea66` | hair-dryer | HairDryer | +| `0xea68` | bridge | Bridge | +| `0xea6a` | city | City | +| `0xea6e` | butterfly | Butterfly | +| `0xea78` | keyhole | Keyhole | +| `0xea7c` | parachute | Parachute | +| `0xea7e` | dress | Dress | +| `0xea80` | engine | Engine | +| `0xea84` | lightning-a | LightningA | +| `0xea86` | folder-star | FolderStar | +| `0xea88` | footprints | Footprints | +| `0xea8a` | guitar | Guitar | +| `0xea8c` | hand-coins | HandCoins | +| `0xea8e` | high-definition | HighDefinition | +| `0xea90` | standard-definition | StandardDefinition | +| `0xea92` | shirt-folded | ShirtFolded | +| `0xea96` | cloud-x | CloudX | +| `0xea98` | cloud-warning | CloudWarning | +| `0xea9a` | wave-sine | WaveSine | +| `0xea9c` | wave-sawtooth | WaveSawtooth | +| `0xea9e` | wave-square | WaveSquare | +| `0xeaa0` | wave-triangle | WaveTriangle | +| `0xeaa2` | panorama | Panorama | +| `0xeaa4` | bowl-food | BowlFood | +| `0xeaa6` | chart-donut | ChartDonut | +| `0xeaa8` | chart-polar | ChartPolar | +| `0xeaac` | chart-scatter | ChartScatter | +| `0xeab4` | shrimp | Shrimp | +| `0xeab6` | sidebar | Sidebar | +| `0xeab8` | sigma | Sigma | +| `0xeabe` | cow | Cow | +| `0xeac2` | rabbit | Rabbit | +| `0xeac4` | eyedropper-sample | EyedropperSample | +| `0xeaca` | champagne | Champagne | +| `0xeacc` | flower-tulip | FlowerTulip | +| `0xeace` | microsoft-powerpoint-logo | MicrosoftPowerpointLogo | +| `0xead4` | steam-logo | SteamLogo | +| `0xeada` | currency-eth | CurrencyEth | +| `0xeadc` | list-checks | ListChecks | +| `0xeade` | navigation-arrow | NavigationArrow | +| `0xeae0` | scissors | Scissors | +| `0xeae2` | dots-six-vertical | DotsSixVertical | +| `0xeae6` | television-simple | TelevisionSimple | +| `0xeae8` | terminal-window | TerminalWindow | +| `0xeaee` | align-left-simple | AlignLeftSimple | +| `0xeaf0` | export | Export | +| `0xeaf2` | tiktok-logo | TiktokLogo | +| `0xeaf4` | floppy-disk-back | FloppyDiskBack | +| `0xeaf6` | selection-foreground | SelectionForeground | +| `0xeaf8` | selection-background | SelectionBackground | +| `0xeafa` | user-check | UserCheck | +| `0xeafe` | code-block | CodeBlock | +| `0xeb00` | bezier-curve | BezierCurve | +| `0xeb02` | linux-logo | LinuxLogo | +| `0xeb04` | arrows-vertical | ArrowsVertical | +| `0xeb06` | arrows-horizontal | ArrowsHorizontal | +| `0xeb08` | radio-button | RadioButton | +| `0xeb0a` | textbox | Textbox | +| `0xeb0c` | align-bottom-simple | AlignBottomSimple | +| `0xeb0e` | align-center-horizontal-simple | AlignCenterHorizontalSimple | +| `0xeb10` | align-center-vertical-simple | AlignCenterVerticalSimple | +| `0xeb12` | align-right-simple | AlignRightSimple | +| `0xeb14` | align-top-simple | AlignTopSimple | +| `0xeb16` | square-half-bottom | SquareHalfBottom | +| `0xeb18` | file-png | FilePng | +| `0xeb1a` | file-jpg | FileJpg | +| `0xeb1c` | file-csv | FileCsv | +| `0xeb1e` | file-doc | FileDoc | +| `0xeb20` | file-ppt | FilePpt | +| `0xeb22` | file-xls | FileXls | +| `0xeb24` | file-js | FileJs | +| `0xeb26` | file-ts | FileTs | +| `0xeb28` | file-rs | FileRs | +| `0xeb2a` | file-archive | FileArchive | +| `0xeb2c` | file-py | FilePy | +| `0xeb2e` | file-cpp | FileCpp | +| `0xeb30` | file-c-sharp | FileCSharp | +| `0xeb32` | file-c | FileC | +| `0xeb32` | file-ini | FileIni | +| `0xeb32` | file-txt | FileTxt | +| `0xeb34` | file-css | FileCss | +| `0xeb38` | file-html | FileHtml | +| `0xeb3a` | file-jsx | FileJsx | +| `0xeb3c` | file-tsx | FileTsx | +| `0xeb3e` | file-vue | FileVue | +| `0xeb40` | drop-half-bottom | DropHalfBottom | +| `0xeb42` | gradient | Gradient | +| `0xeb44` | circle-notch | CircleNotch | +| `0xeb46` | folder-user | FolderUser | +| `0xeb48` | coin-vertical | CoinVertical | +| `0xeb4a` | flying-saucer | FlyingSaucer | +| `0xeb4e` | popcorn | Popcorn | +| `0xeb50` | film-script | FilmScript | +| `0xeb52` | currency-ngn | CurrencyNgn | +| `0xeb54` | kanban | Kanban | +| `0xeb56` | plugs | Plugs | +| `0xeb58` | graph | Graph | +| `0xeb5a` | plugs-connected | PlugsConnected | +| `0xeb5c` | plug-charging | PlugCharging | +| `0xeb5e` | folder-simple-lock | FolderSimpleLock | +| `0xeb60` | folder-simple-user | FolderSimpleUser | +| `0xeb62` | beer-stein | BeerStein | +| `0xeb64` | egg-crack | EggCrack | +| `0xeb66` | microsoft-teams-logo | MicrosoftTeamsLogo | +| `0xeb6a` | microsoft-word-logo | MicrosoftWordLogo | +| `0xeb6c` | microsoft-excel-logo | MicrosoftExcelLogo | +| `0xeb70` | microsoft-outlook-logo | MicrosoftOutlookLogo | +| `0xeb78` | stack-overflow-logo | StackOverflowLogo | +| `0xeb7a` | scroll | Scroll | +| `0xeb7c` | music-notes-plus | MusicNotesPlus | +| `0xeb80` | angular-logo | AngularLogo | +| `0xeb8a` | replit-logo | ReplitLogo | +| `0xeb8e` | seat | Seat | +| `0xeb92` | google-photos-logo | GooglePhotosLogo | +| `0xeb94` | google-podcasts-logo | GooglePodcastsLogo | +| `0xeb96` | apple-podcasts-logo | ApplePodcastsLogo | +| `0xeb98` | heart-straight-break | HeartStraightBreak | +| `0xeb9a` | acorn | Acorn | +| `0xeb9c` | pinwheel | Pinwheel | +| `0xeb9e` | mask-sad | MaskSad | +| `0xeba2` | vignette | Vignette | +| `0xeba4` | devices | Devices | +| `0xeba6` | check-fat | CheckFat | +| `0xebaa` | cell-tower | CellTower | +| `0xebac` | signature | Signature | +| `0xebae` | plant | Plant | +| `0xebb4` | scan-smiley | ScanSmiley | +| `0xebb6` | scan | Scan | +| `0xebbc` | equalizer | Equalizer | +| `0xebbe` | popsicle | Popsicle | +| `0xebc6` | pencil-simple-line | PencilSimpleLine | +| `0xebd4` | subtract-square | SubtractSquare | +| `0xebd6` | subtract | Subtract | +| `0xebdc` | list-star | ListStar | +| `0xebde` | list-heart | ListHeart | +| `0xebe0` | list-magnifying-glass | ListMagnifyingGlass | +| `0xebe4` | function | Function | +| `0xebe6` | perspective | Perspective | +| `0xebe8` | heart-break | HeartBreak | +| `0xebf8` | letter-circle-h | LetterCircleH | +| `0xec08` | letter-circle-p | LetterCircleP | +| `0xec14` | letter-circle-v | LetterCircleV | +| `0xec1e` | mailbox | Mailbox | +| `0xec22` | potted-plant | PottedPlant | +| `0xec24` | sidebar-simple | SidebarSimple | +| `0xec26` | ladder-simple | LadderSimple | +| `0xec2a` | folder-simple-dashed | FolderSimpleDashed | +| `0xec2e` | folder-simple-star | FolderSimpleStar | +| `0xec34` | shield-star | ShieldStar | +| `0xec36` | user-circle-dashed | UserCircleDashed | +| `0xec38` | user-circle-check | UserCircleCheck | +| `0xec48` | heart-half | HeartHalf | +| `0xec4a` | police-car | PoliceCar | +| `0xec4c` | currency-kzt | CurrencyKzt | +| `0xec50` | battery-plus-vertical | BatteryPlusVertical | +| `0xec54` | broom | Broom | +| `0xec56` | phone-plus | PhonePlus | +| `0xec58` | camera-plus | CameraPlus | +| `0xec5c` | pentagram | Pentagram | +| `0xec5e` | shapes | Shapes | +| `0xec62` | smiley-angry | SmileyAngry | +| `0xec68` | grains | Grains | +| `0xec6a` | grains-slash | GrainsSlash | +| `0xec6c` | bulldozer | Bulldozer | +| `0xec6e` | tractor | Tractor | +| `0xec70` | farm | Farm | +| `0xec72` | barn | Barn | +| `0xec76` | highlighter | Highlighter | +| `0xec7a` | microscope | Microscope | +| `0xec7c` | cube-transparent | CubeTransparent | +| `0xec7e` | pentagon | Pentagon | +| `0xec80` | pi | Pi | +| `0xec86` | hockey | Hockey | +| `0xec88` | pants | Pants | +| `0xec8c` | grid-nine | GridNine | +| `0xec8e` | metronome | Metronome | +| `0xec90` | hand-tap | HandTap | +| `0xec92` | hand-swipe-right | HandSwipeRight | +| `0xec94` | hand-swipe-left | HandSwipeLeft | +| `0xec96` | text-columns | TextColumns | +| `0xec98` | text-subscript | TextSubscript | +| `0xec9a` | text-superscript | TextSuperscript | +| `0xeca0` | toolbox | Toolbox | +| `0xeca4` | security-camera | SecurityCamera | +| `0xeca6` | control | Control | +| `0xeca8` | user-sound | UserSound | +| `0xecac` | vinyl-record | VinylRecord | +| `0xecae` | webhooks-logo | WebhooksLogo | +| `0xecb2` | park | Park | +| `0xecb4` | goggles | Goggles | +| `0xecb6` | swimming-pool | SwimmingPool | +| `0xecb8` | lockers | Lockers | +| `0xecba` | escalator-down | EscalatorDown | +| `0xecbc` | escalator-up | EscalatorUp | +| `0xecbe` | steps | Steps | +| `0xecc0` | elevator | Elevator | +| `0xecc2` | pix-logo | PixLogo | +| `0xecc4` | intersect-three | IntersectThree | +| `0xecc6` | parallelogram | Parallelogram | +| `0xecc8` | hands-praying | HandsPraying | +| `0xecca` | boot | Boot | +| `0xecce` | sock | Sock | +| `0xecd0` | hoodie | Hoodie | +| `0xecd4` | warehouse | Warehouse | +| `0xecd6` | garage | Garage | +| `0xecd8` | air-traffic-control | AirTrafficControl | +| `0xecdc` | webcam-slash | WebcamSlash | +| `0xecde` | dot | Dot | +| `0xece0` | dot-outline | DotOutline | +| `0xecea` | church | Church | +| `0xecec` | synagogue | Synagogue | +| `0xecee` | mosque | Mosque | +| `0xecf0` | flag-pennant | FlagPennant | +| `0xecf2` | flag-banner-fold | FlagBannerFold | +| `0xecf4` | star-and-crescent | StarAndCrescent | +| `0xecf6` | pencil-simple-slash | PencilSimpleSlash | +| `0xecf8` | pencil-slash | PencilSlash | +| `0xecfa` | shooting-star | ShootingStar | +| `0xecfc` | medal-military | MedalMilitary | +| `0xecfe` | person-arms-spread | PersonArmsSpread | +| `0xed02` | meta-logo | MetaLogo | +| `0xed08` | file-svg | FileSvg | +| `0xed0a` | cube-focus | CubeFocus | +| `0xed0c` | read-cv-logo | ReadCvLogo | +| `0xed0e` | dev-to-logo | DevToLogo | +| `0xed10` | goodreads-logo | GoodreadsLogo | +| `0xed12` | cowboy-hat | CowboyHat | +| `0xed16` | desk | Desk | +| `0xed1c` | tidal-logo | TidalLogo | +| `0xed24` | beach-ball | BeachBall | +| `0xed2c` | clock-countdown | ClockCountdown | +| `0xed2e` | cassette-tape | CassetteTape | +| `0xed30` | tipi | Tipi | +| `0xed32` | slideshow | Slideshow | +| `0xed34` | text-a-underline | TextAUnderline | +| `0xed36` | orange-slice | OrangeSlice | +| `0xed38` | carrot | Carrot | +| `0xed3a` | notches | Notches | +| `0xed3c` | arrows-split | ArrowsSplit | +| `0xed3e` | arrows-merge | ArrowsMerge | +| `0xed40` | receipt-x | ReceiptX | +| `0xed42` | contactless-payment | ContactlessPayment | +| `0xed46` | hard-hat | HardHat | +| `0xed48` | crane | Crane | +| `0xed48` | crane-tower | CraneTower | +| `0xed4a` | plus-square | PlusSquare | +| `0xed4c` | minus-square | MinusSquare | +| `0xed4e` | file-sql | FileSql | +| `0xed50` | file-md | FileMd | +| `0xed52` | share-fat | ShareFat | +| `0xed54` | person-simple-hike | PersonSimpleHike | +| `0xed5c` | person-simple-tai-chi | PersonSimpleTaiChi | +| `0xed60` | sneaker-move | SneakerMove | +| `0xed62` | ranking | Ranking | +| `0xed64` | matrix-logo | MatrixLogo | +| `0xed66` | fediverse-logo | FediverseLogo | +| `0xed68` | mastodon-logo | MastodonLogo | +| `0xed6a` | flip-horizontal | FlipHorizontal | +| `0xed6c` | flip-vertical | FlipVertical | +| `0xed6e` | resize | Resize | +| `0xed70` | line-vertical | LineVertical | +| `0xed74` | drone | Drone | +| `0xed7a` | solar-panel | SolarPanel | +| `0xed7a` | solar-roof | SolarRoof | +| `0xed7c` | nuclear-plant | NuclearPlant | +| `0xed80` | cash-register | CashRegister | +| `0xed82` | log | Log | +| `0xed86` | pipe | Pipe | +| `0xed88` | pipe-wrench | PipeWrench | +| `0xed8c` | oven | Oven | +| `0xed8e` | chef-hat | ChefHat | +| `0xed90` | cigarette | Cigarette | +| `0xed92` | cigarette-slash | CigaretteSlash | +| `0xed98` | disco-ball | DiscoBall | +| `0xed9a` | yarn | Yarn | +| `0xed9e` | threads-logo | ThreadsLogo | +| `0xeda0` | blueprint | Blueprint | +| `0xeda2` | greater-than-or-equal | GreaterThanOrEqual | +| `0xeda4` | less-than-or-equal | LessThanOrEqual | +| `0xeda6` | not-equals | NotEquals | +| `0xeda8` | tilde | Tilde | +| `0xedaa` | approximate-equals | ApproximateEquals | +| `0xedac` | less-than | LessThan | +| `0xedae` | not-member-of | NotMemberOf | +| `0xedb0` | not-subset-of | NotSubsetOf | +| `0xedb2` | not-superset-of | NotSupersetOf | +| `0xedb4` | superset-proper-of | SupersetProperOf | +| `0xedb6` | subset-proper-of | SubsetProperOf | +| `0xedb8` | superset-of | SupersetOf | +| `0xedba` | intersection | Intersection | +| `0xedbc` | empty | Empty | +| `0xedbe` | union | Union | +| `0xedc0` | subset-of | SubsetOf | +| `0xedc2` | member-of | MemberOf | +| `0xedc4` | greater-than | GreaterThan | +| `0xedc6` | lasso | Lasso | +| `0xedc8` | clover | Clover | +| `0xedce` | video-conference | VideoConference | +| `0xedd0` | pint-glass | PintGlass | +| `0xedd2` | tire | Tire | +| `0xedd4` | gps-slash | GpsSlash | +| `0xedd6` | gps-fix | GpsFix | +| `0xedd8` | gps | Gps | +| `0xedda` | network-x | NetworkX | +| `0xeddc` | network-slash | NetworkSlash | +| `0xedde` | network | Network | +| `0xede0` | book-open-user | BookOpenUser | +| `0xede2` | treasure-chest | TreasureChest | +| `0xede6` | towel | Towel | +| `0xede8` | washing-machine | WashingMachine | +| `0xedec` | clock-user | ClockUser | +| `0xedee` | linktree-logo | LinktreeLogo | +| `0xedf2` | device-rotate | DeviceRotate | +| `0xedf4` | stack-minus | StackMinus | +| `0xedf6` | stack-plus | StackPlus | +| `0xedfe` | seatbelt | Seatbelt | +| `0xee02` | racquet | Racquet | +| `0xee04` | avocado | Avocado | +| `0xee06` | island | Island | +| `0xee0a` | bomb | Bomb | +| `0xee0c` | music-notes-minus | MusicNotesMinus | +| `0xee12` | cricket | Cricket | +| `0xee26` | picnic-table | PicnicTable | +| `0xee28` | spinner-ball | SpinnerBall | +| `0xee2a` | visor | Visor | +| `0xee2c` | onigiri | Onigiri | +| `0xee2e` | lamp-pendant | LampPendant | +| `0xee30` | car-battery | CarBattery | +| `0xee32` | drop-simple | DropSimple | +| `0xee34` | asclepius | Asclepius | +| `0xee36` | court-basketball | CourtBasketball | +| `0xee38` | map-pin-simple-line | MapPinSimpleLine | +| `0xee3a` | map-pin-area | MapPinArea | +| `0xee3c` | map-pin-simple-area | MapPinSimpleArea | +| `0xee3e` | map-pin-simple | MapPinSimple | +| `0xee40` | orange | Orange | +| `0xee42` | invoice | Invoice | +| `0xee44` | exclamation-mark | ExclamationMark | +| `0xee46` | device-mobile-slash | DeviceMobileSlash | +| `0xee48` | tree-view | TreeView | +| `0xee4a` | baseball-helmet | BaseballHelmet | +| `0xee4c` | football-helmet | FootballHelmet | +| `0xee4e` | address-book-tabs | AddressBookTabs | +| `0xee50` | cards-three | CardsThree | +| `0xee52` | tray-arrow-up | TrayArrowUp | +| `0xee54` | box-arrow-up | BoxArrowUp | +| `0xee56` | smiley-melting | SmileyMelting | +| `0xee58` | person-simple-circle | PersonSimpleCircle | +| `0xee5a` | hand-arrow-up | HandArrowUp | +| `0xee5c` | eyes | Eyes | +| `0xee5e` | crown-cross | CrownCross | +| `0xee60` | binary | Binary | +| `0xee62` | vector-three | VectorThree | +| `0xee64` | vector-two | VectorTwo | +| `0xee66` | sphere | Sphere | +| `0xee68` | money-wavy | MoneyWavy | +| `0xee74` | speedometer | Speedometer | +| `0xee80` | hand-withdraw | HandWithdraw | +| `0xee82` | hand-deposit | HandDeposit | diff --git a/.claude/skills/ui-design/scripts/gen-phosphor-glyphs.py b/.claude/skills/ui-design/scripts/gen-phosphor-glyphs.py old mode 100644 new mode 100755 index 058e52e8..3819d9c9 --- a/.claude/skills/ui-design/scripts/gen-phosphor-glyphs.py +++ b/.claude/skills/ui-design/scripts/gen-phosphor-glyphs.py @@ -3,27 +3,22 @@ Mirrors `assets/fonts/phosphor/codepoints.csv` (the full bundled glyph set) into a readable, greppable markdown table at -`.claude/skills/ui-design/references/phosphor-glyphs.md`, flagging which -glyphs clide already defines in `lib/widgets/src/icons/phosphor.dart`. +`.claude/skills/ui-design/references/phosphor-glyphs.md`. + +That table is also the source of truth for the `kPhosphorGlyphs` map — after +regenerating it, re-run `dart run tool/gen_phosphor_glyphs.dart` so +`lib/widgets/src/icons/phosphor_glyphs.g.dart` stays in sync. Run from the repo root: python3 .claude/skills/ui-design/scripts/gen-phosphor-glyphs.py """ import csv import pathlib -import re ROOT = pathlib.Path(__file__).resolve().parents[4] CSV = ROOT / "assets/fonts/phosphor/codepoints.csv" -DART = ROOT / "lib/widgets/src/icons/phosphor.dart" OUT = ROOT / ".claude/skills/ui-design/references/phosphor-glyphs.md" -# Codepoint -> camelCase accessor already defined in PhosphorIcons. -defined = {} -for m in re.finditer(r"static const (\w+) = PhosphorIconPainter\((0x[0-9a-fA-F]+)\)", DART.read_text()): - defined[int(m.group(2), 16)] = m.group(1) - rows = list(csv.DictReader(CSV.open())) -n_def = sum(1 for r in rows if int(r["codepoint"], 16) in defined) lines = [ "---", @@ -37,22 +32,21 @@ lines = [ f"All **{len(rows)}** glyphs bundled in clide's Phosphor font " "(`assets/fonts/phosphor/`, MIT). Generated from " "`assets/fonts/phosphor/codepoints.csv` — **do not hand-edit**; regenerate with " - "`python3 .claude/skills/ui-design/scripts/gen-phosphor-glyphs.py`.", + "`python3 .claude/skills/ui-design/scripts/gen-phosphor-glyphs.py`, then re-run " + "`dart run tool/gen_phosphor_glyphs.dart` (this table is the source for the " + "generated `kPhosphorGlyphs` map).", "", - f"The **In clide** column flags the **{n_def}** glyphs already wired into " - "`PhosphorIcons` (`lib/widgets/src/icons/phosphor.dart`) — reach for those first. " - "To use any other glyph, add a one-line `static const` to that class with the " - "codepoint below, then `ClideIcon(PhosphorIcons., size: 13)`. Keep additions " - "to icons we actually use — don't bulk-import.", + "Every glyph is available in code via `PhosphorIcons.byName('')` " + "(T-314) — e.g. `ClideIcon(PhosphorIcons.byName('folder'), size: 13)`. Raw " + "codepoints never appear in feature code; they live only in the generated map. " + "An unknown name renders the `placeholder` glyph, and `phosphor_glyphs_test` " + "asserts every `byName('…')` literal in `lib/` resolves.", "", - "| Codepoint | Name (kebab) | Pascal | In clide |", - "|---|---|---|---|", + "| Codepoint | Name (kebab) | Pascal |", + "|---|---|---|", ] for r in rows: - cp = r["codepoint"] - accessor = defined.get(int(cp, 16)) - in_clide = f"`PhosphorIcons.{accessor}`" if accessor else "" - lines.append(f"| `{cp}` | {r['name']} | {r['pascal_name']} | {in_clide} |") + lines.append(f"| `{r['codepoint']}` | {r['name']} | {r['pascal_name']} |") OUT.write_text("\n".join(lines) + "\n") -print(f"wrote {OUT.relative_to(ROOT)} — {len(rows)} glyphs, {n_def} already defined") +print(f"wrote {OUT.relative_to(ROOT)} — {len(rows)} glyphs") diff --git a/.claude/skills/whats-next/SKILL.md b/.claude/skills/whats-next/SKILL.md index 1a6060bd..a7bd3088 100644 --- a/.claude/skills/whats-next/SKILL.md +++ b/.claude/skills/whats-next/SKILL.md @@ -4,7 +4,8 @@ description: > Surface the best batch of tickets to pick up next from pql. Walks the initiative/epic tree, filters to unblocked work, refines context via parallel agents (or `pql ticket refine` for empty descriptions), and - optionally activates the batch on a fresh branch. Use when the user + optionally activates the batch (directly on main — no topic branch by + default). Use when the user says "what's next", "next batch", "pick up work", or invokes /whats-next. NOT triggered by "what should we work on" in a design context — that's a discussion, not a batch selection. @@ -18,7 +19,8 @@ Dependency-driven batch selection against pql. Three steps: batch selection → refinement review → batch activation. Pql is the single source of truth for tickets and decisions in this repo -(see [pql skill](../pql/SKILL.md) and [`decisions/README.md`](../../../decisions/README.md)). Always run from the repo root. +(see the pql skill — user scope, installed via `pql init` — and +[`governance/README.md`](../../../governance/README.md)). Always run from the repo root. ## Step 0: Sync state @@ -158,8 +160,8 @@ Agent({ Your job: 1. Run `pql decisions show --with-refs --pretty` and - read the linked D/Q-record in decisions/.md. - 2. Grep decisions/questions-*.md for related Q-records. + read the linked D/Q-record in governance/decisions/.md. + 2. Grep governance/questions/.md for related Q-records. 3. Verify referenced files, classes, and APIs actually exist in the current tree (Read/Grep). Flag dangling references. 4. Cross-check against CLAUDE.md guardrails (single process, CLI-first, @@ -217,24 +219,22 @@ Batch transition (comma-separated IDs): pql ticket status T-1,T-2,T-3 in_progress ``` -**Then persist it.** Ticket mutations (status here, and any `ticket new` in -Step 2) land only in the gitignored `.pql/pql.db`. The post-checkout/post-merge -hooks rebuild that DB from the committed changelog on every branch switch — so -un-exported changes vanish silently the next time anyone switches branches. After -creating or transitioning tickets, always: - -```bash -pql plan export # regenerates .pql/changelog/*.sql -git add .pql/changelog && git commit # durable; survives rebuild -``` - -See the [pql skill](../pql/SKILL.md#versioning-planning-state--data-loss-footgun-read-this). +**Then make sure it persists.** Ticket mutations (status here, and any +`ticket new` in Step 2) land only in the gitignored `.pql/pql.db`. The +pre-commit hook runs `pql plan export --stage` automatically — the changelog +is exported and staged on every commit, so never hand-run the export or +`git add .pql/changelog`. The rule is simpler: the turn must land at least +one commit (through the git-commit skill). A ticket-only turn with no commit +leaves the mutations in `pql.db` only, and the post-checkout/post-merge hooks +rebuild that DB from the committed changelog on the next branch switch — +silently dropping them. See the pql skill's "Versioning planning state" +section for the full mechanics. ### 3b. Branch? Default no. Solo-dev flow on this repo — work lands directly on `main` (see recent `git log`). Don't create a topic branch unless the user explicitly asks. -If they do, plain `git checkout -b` is fine; there is no `gh` CLI. +If they do, plain `git checkout -b` is fine. ### 3c. Spawn implementation agents (optional) @@ -263,13 +263,13 @@ End with a tight summary: ## Anti-patterns - Don't skip Step 0 — stale `pql.db` makes the rest of the skill lie. -- Don't leave ticket changes un-exported — `pql.db` is gitignored and the - post-checkout/post-merge hooks rebuild it from the committed changelog, so a - branch switch silently drops un-exported tickets. Always `pql plan export` + - commit `.pql/changelog/` after mutating tickets (Step 3a). +- Don't hand-export or hand-stage `.pql/changelog/` — the pre-commit hook does + both on every commit. The real footgun is a turn that mutates tickets but + never commits: `pql.db` is gitignored and gets rebuilt from the committed + changelog on branch switch, silently dropping un-committed mutations. Land + at least one commit per ticket-mutating turn (Step 3a). - Don't activate a batch the user hasn't confirmed. - Don't spawn refinement agents for tickets that have no description — use `pql ticket refine` instead; it's cheaper and writes back through the proper channel. -- Don't reach for `gh` — this system doesn't have it. Plain `git` only. - Don't `cd` into subdirectories — run everything from the repo root. diff --git a/.pql/changelog/ticket_idmap/2026-07.sql b/.pql/changelog/ticket_idmap/2026-07.sql new file mode 100644 index 00000000..32ae3533 --- /dev/null +++ b/.pql/changelog/ticket_idmap/2026-07.sql @@ -0,0 +1,2 @@ +INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FJ4D0GAXM1FN42PJKG7FE34G', 'T-507', '2026-07-02 09:41:05.241', '2026-07-02 09:41:05.241', NULL, 'd9dec9b9ed45db65467318f53eb05157', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash); +INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FJ4D1M6ESSSQ1ZERTH4V9YN4', 'T-508', '2026-07-02 09:41:14.425', '2026-07-02 09:41:14.425', NULL, '5389a964251dc22408c41ceac6954f4d', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash); diff --git a/.pql/changelog/tickets/2026-07.sql b/.pql/changelog/tickets/2026-07.sql index 146b1d39..4caacb2b 100644 --- a/.pql/changelog/tickets/2026-07.sql +++ b/.pql/changelog/tickets/2026-07.sql @@ -3,3 +3,12 @@ INSERT INTO tickets (record_id, type, parent_record_id, title, description, stat PROGRESS (2026-06-29): force-directed layout SOLVER built + tested (lib/src/graph/force_layout.dart, 6 dart-test cases, commit bcef3a6f) — deterministic Fruchterman-Reingold, Flutter-free. REMAINING (the bulk, multi-session): graph data model from pql backlinks/outlinks over the vault; CustomPaint rendering (nodes+edges); pan/zoom; hover-highlight-subgraph; click-opens-note; filter pane (tag/glob/depth); MultitabPane + context-panel slot (D-47) wiring; widget/golden tests. This is a full interactive Tier-5 pane, a fresh-session undertaking — only its solver core is done. PROGRESS (2026-07-02): the graph rendering + interaction foundation is BUILT + tested (4 slices, all committed). (1) force-directed solver — force_layout.dart (bcef3a6f). (2) link-graph model — vault_graph.dart: VaultGraph.fromOutlinks, neighborhood, edgePairs (084bf842). (3) CustomPaint renderer — graph_painter.dart: edges/nodes/labels, hover-dim, fit transform (6bea1723). (4) interactive GraphView — graph_view.dart: hover-highlight + click-to-open, shared GraphViewport hit-testing (c529703b). The graph is a fully working WIDGET (renders + hover + click). REMAINING = the app-integration phase: pql link-data wiring (pql outlinks over the vault -> the file->outlinks map -> VaultGraph), the pane shell (async load + filter: tag/glob/depth + pan/zoom), and MultitabPane + context-panel slot (D-47) + GraphExtension registration.', 'in_progress', 'medium', NULL, NULL, NULL, '2026-06-10 11:17:23', '2026-07-02 06:35:03.555', NULL, 'a46ad64b03bc1b4126e9882ed7b81a3a', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FB2G2KHKT5CJYR0TK1WQGMD0', 'story', '06FHAX7FV5KWGZQ31617R63W94', 'Tier-5 graph view (builtin.graph)', 'Tier-5 graph VIEW, absorbed from the former T-7 into the unified canvas epic (T-317). Force-directed layout of the vault (or a filtered subset): nodes are notes, edges are wikilinks. Hover highlights the connected subgraph; click opens the note in the editor. Filter pane: tag include/exclude, file glob, depth-from-active. pql provides the link data (pql backlinks / pql outlinks); rendering is owned in-app (CustomPaint, own-the-rendering-stack). Lives in its own slot per D-47 (context panel), uses MultitabPane (T-83). DISTINCT from the in-card graph TEMPLATE (T-321): T-321 renders a graph passed into the conversation drawing card; this is the full interactive graph pane over the whole vault. Relates to the core renderer (T-318) but has its own force-directed layout. + +PROGRESS (2026-06-29): force-directed layout SOLVER built + tested (lib/src/graph/force_layout.dart, 6 dart-test cases, commit bcef3a6f) — deterministic Fruchterman-Reingold, Flutter-free. REMAINING (the bulk, multi-session): graph data model from pql backlinks/outlinks over the vault; CustomPaint rendering (nodes+edges); pan/zoom; hover-highlight-subgraph; click-opens-note; filter pane (tag/glob/depth); MultitabPane + context-panel slot (D-47) wiring; widget/golden tests. This is a full interactive Tier-5 pane, a fresh-session undertaking — only its solver core is done. + +PROGRESS (2026-07-02): the graph rendering + interaction foundation is BUILT + tested (4 slices, all committed). (1) force-directed solver — force_layout.dart (bcef3a6f). (2) link-graph model — vault_graph.dart: VaultGraph.fromOutlinks, neighborhood, edgePairs (084bf842). (3) CustomPaint renderer — graph_painter.dart: edges/nodes/labels, hover-dim, fit transform (6bea1723). (4) interactive GraphView — graph_view.dart: hover-highlight + click-to-open, shared GraphViewport hit-testing (c529703b). The graph is a fully working WIDGET (renders + hover + click). REMAINING = the app-integration phase: pql link-data wiring (pql outlinks over the vault -> the file->outlinks map -> VaultGraph), the pane shell (async load + filter: tag/glob/depth + pan/zoom), and MultitabPane + context-panel slot (D-47) + GraphExtension registration. + +PROGRESS (2026-07-02, session 2): app-integration phase — 3 slices committed. (1) GraphController (graph_controller.dart, 3b67725b) — pql.files + per-file pql.outlinks over the vault -> VaultGraph; loading/error state; debounced files.changed refresh; 6 tests. (2) GraphPanel shell (graph_panel.dart, 6fae1bc4) — loading/empty/error states + GraphView + click-to-open via editor.open; 5 widget tests. (3) GraphExtension registration (extension.dart + builtin.graph i18n, a5acb6ac) — graph.view context-panel tab (D-47), activates after builtin.pql dep; 4 tests; CHANGELOG entry. The graph is now REACHABLE end-to-end (21 graph tests green). REMAINING (T-323 enrichment): pan/zoom on the view; filter controls (tag include/exclude, glob, depth-from-active).', 'in_progress', 'medium', NULL, NULL, NULL, '2026-06-10 11:17:23', '2026-07-02 08:33:27.518', NULL, 'dc254ed9b53362c45d11ac23f600b57d', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FJ4D0GAXM1FN42PJKG7FE34G', 'task', NULL, 'Skill cleanup: apply 2026-07-02 estate-review fixes to clide repo + user scope', 'Apply verified findings from the estate-wide skill review: delete commit/penpot-login/clean-house(project copy) skills; centralize d2-diagram/frame0-wireframe/skill-create to user scope de-contaminated; repoint whats-next (governance/, gh, dead links, step 3a); fix git-commit heredoc guidance + stale sidecar/ADR refs; fix clide skill dock slot + description trim; testmode terminal category; ui-design phosphor glyph reference post-T-314; rewrite skills README index.', 'backlog', 'medium', NULL, NULL, NULL, '2026-07-02 09:41:05.239', '2026-07-02 09:41:05.239', NULL, 'c5ddebbb4ffe8611329732087dd1cebb', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FJ4D1M6ESSSQ1ZERTH4V9YN4', 'task', NULL, 'Distribute the clide skill per-workspace with an install marker', 'Estate review 2026-07-02: the clide skill is repo-agnostic and hand-copied into other repos (settled-reach), drifting. Long-term story: clide installs the skill into each workspace''s .claude/skills/ with a .pql-install.json-style marker (version + sha256) so staleness is detectable, following pql''s clean-house precedent. Until then the canonical copy lives in the clide repo.', 'backlog', 'medium', NULL, NULL, NULL, '2026-07-02 09:41:14.420', '2026-07-02 09:41:14.420', NULL, '698b529e4ea8e4417ddb3b9846b30c13', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);