Skip to content

Phase 12: Integrate unplugin-icons with Material Design Icons#1059

Merged
Tim020 merged 2 commits into
feature/vue3-migrationfrom
feature/vue3-migration-phase-12-icons
May 19, 2026
Merged

Phase 12: Integrate unplugin-icons with Material Design Icons#1059
Tim020 merged 2 commits into
feature/vue3-migrationfrom
feature/vue3-migration-phase-12-icons

Conversation

@Tim020
Copy link
Copy Markdown
Contributor

@Tim020 Tim020 commented May 19, 2026

Summary

Bootstrap Vue Next deprecated its built-in <b-icon-*> components with no direct replacement. During Phase 12's live view work, inline SVG blobs were used as a stopgap. This PR installs unplugin-icons (BVN's recommended replacement), wires it into the existing unplugin-vue-components auto-import pipeline, and replaces all icon usage across the V3 UI with Material Design Icons components.

Icon set selection

Three sets were evaluated side-by-side via a dev-only preview page (Bootstrap Icons, MDI, Phosphor). Material Design Icons was chosen for its comprehensive coverage, clean style, and natural pairing with Bootstrap 5 + BVN.

What changed

Infrastructure (vite.config.ts, tsconfig.json, package.json)

  • Added unplugin-icons plugin with compiler: 'vue3'
  • Added IconsResolve() to the existing unplugin-vue-components resolvers array — no manual imports needed anywhere
  • Added @iconify-json/mdi for the MDI icon set
  • Added unplugin-icons/types/vue to tsconfig.json types

Icon replacements across 20 components

Icons were sourced from two origins in the V2 codebase:

  1. Inline SVG blobs (verbatim copies of Bootstrap Icons SVGs)
  2. Unicode text-character substitutes (/, &#215;, &#8659;, +, , , ) used in places where V2 had <b-icon-*> components
V2 icon / character Component MDI replacement
check-square-fill / ConfigActs, ScriptRevisions, CompiledScripts IMdiCheckboxMarked
x-square-fill / ConfigActs IMdiCloseBox
plus-square-fill / + ScriptLineCueEditor, ScriptLinePart, ScriptLineEditor, ScriptLineViewer, ScriptLineViewerCompact IMdiPlusBox
pencil-fill SessionTagDropdown IMdiPencil
chevron-up / ScriptRevisions, ConfigSettings, ConfigCues, SessionTagList, StageDirectionStyles, StageManager IMdiChevronUp
chevron-down / (same) IMdiChevronDown
&#215; (×) StageManager, TimelineSidePanel IMdiClose
&#8659; (⬇) MicTimeline, CrewTimeline, StageTimeline IMdiDownload
check-circle / MicAllocations IMdiCheckCircle
x-circle / MicAllocations IMdiCloseCircle
exclamation-triangle / MicAllocations IMdiAlert

Not replaced: The SVG canvas elements in MicTimeline, CrewTimeline, StageTimeline, and RevisionGraph are dynamic drawing surfaces (ref="svgRef" with bound dimensions) — not icon library consumers.

Test plan

  • npm run build — no errors; icon components resolve and tree-shake into bundle
  • npm run typecheckIMdi* components resolve without errors
  • npm run ci-lint — passes
  • npm run test:run — all Vitest tests pass
  • Acts & Scenes config: interval_after toggle shows green check / red × correctly
  • Script Revisions: current revision shows green check; collapse/expand chevrons work
  • Compiled Scripts: current revision shows green check
  • Cue editor: add-cue + button renders in cue-add mode
  • Session tag dropdown: pencil icon renders in button
  • Config Settings: section expand/collapse chevrons work
  • Stage Manager: section chevrons and × remove buttons work
  • Timeline Side Panel: × close/remove buttons work
  • Mic / Crew / Stage timeline export buttons render download icon
  • Mic Allocations: check/× allocation toggles and conflict warning icon render correctly

🤖 Generated with Claude Code

Replaces all inline SVGs and Unicode text-character icon substitutes across
the V3 UI with auto-imported MDI components (unplugin-icons + unplugin-vue-
components resolver). Removes the bi and ph iconify packages after user chose
MDI following a side-by-side preview page comparison.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@Tim020 Tim020 added the claude Issues created by Claude label May 19, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 19, 2026

Client V3 Test Results

23 tests  ±0   23 ✅ ±0   0s ⏱️ ±0s
 2 suites ±0    0 💤 ±0 
 1 files   ±0    0 ❌ ±0 

Results for commit a56a086. ± Comparison against base commit 2bb49ec.

♻️ This comment has been updated with latest results.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 19, 2026

Client Test Results

128 tests  ±0   128 ✅ ±0   0s ⏱️ ±0s
  6 suites ±0     0 💤 ±0 
  1 files   ±0     0 ❌ ±0 

Results for commit a56a086. ± Comparison against base commit 2bb49ec.

♻️ This comment has been updated with latest results.

@github-actions
Copy link
Copy Markdown

Python Test Results

  1 files  ±0    1 suites  ±0   1m 37s ⏱️ +2s
603 tests ±0  603 ✅ ±0  0 💤 ±0  0 ❌ ±0 
608 runs  ±0  608 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit 8fb036d. ± Comparison against base commit 2bb49ec.

- StageManagerPane: ▼/▶ expand indicators → IMdiChevronDown/IMdiChevronRight;
  📌 pin emoji → IMdiPin
- TimelineSidePanel: ⚠ Conflicts heading → IMdiAlert
- RevisionGraph: +/-/↺ zoom buttons → IMdiMagnifyPlus/IMdiMagnifyMinus/IMdiRefresh
  (V2 used b-icon-zoom-in, b-icon-zoom-out, b-icon-arrow-clockwise)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@sonarqubecloud
Copy link
Copy Markdown

@Tim020 Tim020 merged commit 2a89e5b into feature/vue3-migration May 19, 2026
16 checks passed
@Tim020 Tim020 deleted the feature/vue3-migration-phase-12-icons branch May 19, 2026 21:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

claude Issues created by Claude medium-diff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant