Skip to content

Phase 1.5: Remaining Icon Components Migration#2819

Open
OpenStaxClaude wants to merge 7 commits intomainfrom
phase-1.5-remaining-icons
Open

Phase 1.5: Remaining Icon Components Migration#2819
OpenStaxClaude wants to merge 7 commits intomainfrom
phase-1.5-remaining-icons

Conversation

@OpenStaxClaude
Copy link
Contributor

@OpenStaxClaude OpenStaxClaude commented Mar 14, 2026

Summary

Phase 1.5 of the plain CSS migration: Migrate the remaining icon components from styled-icons to inline SVG components with plain CSS styling.

Related Jira Ticket: CORE-1749

Depends on: #2818 (Phase 1.4 - Icon Components Migration)

Goals

  • Complete the icon migration started in Phase 1.4
  • Remove all remaining dependencies on styled-icons library from content/component files
  • Maintain identical visual appearance
  • Continue reducing bundle size
  • Improve runtime performance

Components Being Migrated

Based on the original Phase 1.4 scope, the following components still need migration:

Toolbar Icons

  • Print icon
  • Search icon
  • Highlights icon
  • Study tools icons

Topbar Icons

  • Navigation icons
  • Menu icons

Navigation Icons

  • PrevNextBar - Previous/Next page arrows
  • Chevron icons

Content Icons

  • BookBanner icons
  • Filter icons

Highlights Icons

  • Additional highlights feature icons (beyond DotMenu already migrated)

Footer Icons

  • Social media icons (Facebook, Instagram, LinkedIn)

Migration Pattern

Following the pattern established in Phase 1.4:

  1. Extract SVG paths from Font Awesome/Boxicons sources (MIT licensed)
  2. Create inline SVG components using currentColor for fill
  3. Wrap with styled() using empty template literal for component selector compatibility
  4. Create CSS files for icon sizing and styling
  5. Maintain ARIA attributes for accessibility
  6. Create legacy exports if needed for backward compatibility

Learnings from Phase 1.4

Key patterns to follow:

  1. Always wrap migrated components with styled() to support component selector usage
  2. Extend React.*HTMLAttributes for form/interactive components
  3. Run TypeScript compilation early and often to catch type errors
  4. Update PLAIN_CSS_MIGRATION_LEARNINGS.md with any new insights

Testing

  • Unit tests pass
  • Browser tests pass
  • Screenshot tests pass (no visual regressions)
  • Manual QA in dev environment
  • TypeScript compilation succeeds

Checklist

  • All remaining icon components migrated to inline SVGs
  • CSS files created for all icon components
  • No styled-icons imports remaining in content/component files
  • Tests updated and passing
  • Visual appearance verified
  • PLAIN_CSS_MIGRATION_LEARNINGS.md updated with Phase 1.5 insights

Expected Impact

  • Bundle size: Further reduction by removing final styled-icons usage
  • Runtime performance: Improved (no styled-components runtime for remaining icons)
  • SSR compatibility: Better (inline SVGs work perfectly)
  • Dependencies: Fully removed styled-icons from content layer

References

@TomWoodward TomWoodward temporarily deployed to rex-web-phase-1-5-remai-1icjdq March 14, 2026 18:35 Inactive
@RoyEJohnson RoyEJohnson force-pushed the phase-1.5-remaining-icons branch from 5628c05 to e129cc2 Compare March 17, 2026 22:18
@TomWoodward TomWoodward temporarily deployed to rex-web-phase-1-5-remai-1icjdq March 17, 2026 22:18 Inactive
@TomWoodward TomWoodward had a problem deploying to rex-web-phase-1-5-remai-1icjdq March 17, 2026 23:07 Failure
@TomWoodward TomWoodward had a problem deploying to rex-web-phase-1-5-remai-1icjdq March 17, 2026 23:09 Failure
@RoyEJohnson RoyEJohnson requested a review from Copilot March 18, 2026 11:57

This comment was marked as resolved.

Copy link
Contributor

@RoyEJohnson RoyEJohnson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Address Copilot's comments

@RoyEJohnson RoyEJohnson removed their assignment Mar 18, 2026
@TomWoodward TomWoodward temporarily deployed to rex-web-phase-1-5-remai-1icjdq March 18, 2026 12:39 Inactive
@TomWoodward TomWoodward temporarily deployed to rex-web-phase-1-5-remai-1icjdq March 18, 2026 12:42 Inactive
@RoyEJohnson RoyEJohnson force-pushed the phase-1.5-remaining-icons branch from 5017c80 to 535a844 Compare March 18, 2026 13:03
@RoyEJohnson RoyEJohnson requested a review from Copilot March 18, 2026 13:03
@TomWoodward TomWoodward temporarily deployed to rex-web-phase-1-5-remai-1icjdq March 18, 2026 13:04 Inactive

This comment was marked as resolved.

RoyEJohnson

This comment was marked as resolved.

@OpenStaxClaude

This comment was marked as resolved.

This comment was marked as resolved.

RoyEJohnson

This comment was marked as resolved.

@OpenStaxClaude

This comment was marked as resolved.

@RoyEJohnson RoyEJohnson requested a review from Copilot March 18, 2026 15:05
@TomWoodward TomWoodward temporarily deployed to rex-web-phase-1-5-remai-1icjdq March 18, 2026 15:05 Inactive

This comment was marked as resolved.

@TomWoodward TomWoodward temporarily deployed to rex-web-phase-1-5-remai-1icjdq March 18, 2026 18:12 Inactive
@RoyEJohnson RoyEJohnson force-pushed the phase-1.5-remaining-icons branch from 5badb98 to 6ebc5d7 Compare March 18, 2026 18:29
RoyEJohnson

This comment was marked as resolved.

@TomWoodward TomWoodward temporarily deployed to rex-web-phase-1-5-remai-1icjdq March 18, 2026 18:30 Inactive
@OpenStaxClaude

This comment was marked as resolved.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR continues the plain-CSS migration by replacing remaining styled-icons usage with inline SVG icon components (plus some plain CSS for icon styling), updating affected components and snapshots across the app.

Changes:

  • Replaced multiple styled-icons imports (toolbar/topbar/navigation/highlights/footer/etc.) with inline SVG icon components using currentColor.
  • Updated shared UI primitives (e.g., DotMenu, Checkbox, GoToTopButton, Dropdown typings) to support the migration and plain CSS styling.
  • Refreshed Jest snapshots across impacted areas to reflect the new rendered SVG markup/CSS class output.

Reviewed changes

Copilot reviewed 46 out of 46 changed files in this pull request and generated no comments.

Show a summary per file
File Description
src/app/errors/components/snapshots/ErrorBoundary.spec.tsx.snap Snapshot updates reflecting icon markup/class changes.
src/app/developer/components/snapshots/Home.spec.tsx.snap Snapshot updates for DotMenu/icon migration output.
src/app/content/search/components/SearchResultsSidebar/snapshots/index.spec.tsx.snap Snapshot updates for Details icons / SVG output changes.
src/app/content/practiceQuestions/components/snapshots/PracticeQuestionsPopup.spec.tsx.snap Snapshot updates for migrated angle/toggle icons.
src/app/content/highlights/components/snapshots/DisplayNote.spec.tsx.snap Snapshot updates for DotMenu toggle/icon class changes.
src/app/content/highlights/components/snapshots/ColorPicker.spec.tsx.snap Snapshot updates for migrated check icons and class output.
src/app/content/highlights/components/snapshots/ColorIndicator.spec.tsx.snap Snapshot updates for migrated check icon and class output.
src/app/content/highlights/components/SummaryPopup/snapshots/HighlightsHelpInfo.spec.tsx.snap Snapshot updates for migrated Times icon usage.
src/app/content/highlights/components/SummaryPopup/HighlightsHelpInfo.tsx Swap styled-icons Times for shared inline SVG Times icon; fix comment typo.
src/app/content/highlights/components/SummaryPopup/ContextMenu.tsx Replace edit/link/trash icons with inline SVG components; improve toggle ref typing.
src/app/content/highlights/components/DisplayNote.tsx Pass open state into MenuToggle for correct toggle rendering/state.
src/app/content/highlights/components/ColorIndicator.tsx Replace styled-icons Check with inline SVG Check (styled wrapper).
src/app/content/components/popUp/snapshots/PrintButton.spec.tsx.snap Snapshot updates for migrated print icon output.
src/app/content/components/popUp/snapshots/Filters.spec.tsx.snap Snapshot updates for migrated filter dropdown icons/output.
src/app/content/components/popUp/snapshots/ColorFilter.spec.tsx.snap Snapshot updates for migrated checkbox/check icons and CSS-class output.
src/app/content/components/popUp/snapshots/ChapterFilter.spec.tsx.snap Snapshot updates for migrated checkbox/check icons and CSS-class output.
src/app/content/components/popUp/Filters.tsx Replace styled-icons AngleDown with inline SVG; keep styled-component selector compatibility.
src/app/content/components/snapshots/PrevNextBar.spec.tsx.snap Snapshot updates for Boxicons chevrons migrated to inline SVG.
src/app/content/components/snapshots/BookBanner.spec.tsx.snap Snapshot updates for migrated chevron icon output/className.
src/app/content/components/Topbar/styled.tsx Replace topbar icons (hamburger/left/times-circle) with inline SVG components.
src/app/content/components/Toolbar/styled.tsx Replace toolbar icons (chevron-left/print) with inline SVG components.
src/app/content/components/PrevNextBar.tsx Replace Boxicons chevrons with inline SVG components.
src/app/content/components/NudgeStudyTools/styles.ts Switch Times import to the new shared inline SVG Times icon.
src/app/content/components/BookBanner.tsx Replace Boxicons chevron-left with inline SVG; avoid forwarding styling-only props.
src/app/content/snapshots/routes.spec.tsx.snap Snapshot updates for Details icon SVG output.
src/app/components/icons/Times.tsx New shared inline SVG Times icon component (styled wrapper).
src/app/components/snapshots/DotMenu.spec.tsx.snap Snapshot updates for DotMenu refactor (plain CSS classes, icon markup).
src/app/components/snapshots/Details.spec.tsx.snap Snapshot updates for Details icons migrated to inline SVG.
src/app/components/GoToTopButton.tsx Migrate GoToTopButton away from styled-icons/styled wrappers to inline SVG + CSS.
src/app/components/GoToTopButton.css New plain CSS styling for GoToTopButton.
src/app/components/Footer/styled.tsx Replace social media styled-icons with inline SVG components.
src/app/components/Dropdown.tsx Tighten typings by explicitly including children and typing the styled export.
src/app/components/DotMenu.tsx Refactor DotMenu to inline SVG icon + plain CSS class styling; keep styled wrapper for selectors.
src/app/components/DotMenu.css New plain CSS for DotMenu icon/toggle/dropdown positioning + focus styling.
src/app/components/Details.tsx Replace Caret icons with inline SVG components wrapped in styled().
src/app/components/Details.legacy.ts Keep legacy exports by styling the new Details inline SVG icons.
src/app/components/Checkbox.tsx Replace styled-icons Check with inline SVG + plain CSS classes; keep styled wrapper.
src/app/components/Checkbox.css New plain CSS for Checkbox (custom box, focus styles, checked state).
PLAIN_CSS_MIGRATION_LEARNINGS.md Document Phase 1.5 icon migration patterns/learnings.
PHASE_1.5_PLAN.md Add Phase 1.5 plan doc for scope/patterns.
Comments suppressed due to low confidence (2)

src/app/content/components/popUp/Filters.tsx:45

  • AngleDownIcon is defined as a styled-component and then immediately wrapped again by AngleIcon just to add styles. Since AngleDownIcon isn't reused elsewhere, you can simplify by styling AngleDownIconBase directly (single styled(...) wrapper) to reduce component indirection and keep the icon pattern consistent.
const AngleDownIcon = styled(AngleDownIconBase)``;

export const AngleIcon = styled(AngleDownIcon)`
  color: ${theme.color.primary.gray.base};
  width: ${filters.dropdownToggle.icon.width}rem;
  height: ${filters.dropdownToggle.icon.height}rem;
  margin-left: 0.8rem;
  padding-top: 0.2rem;

src/app/content/highlights/components/SummaryPopup/ContextMenu.tsx:168

  • HighlightDropdownMenu's props type is currently { isOpen?: boolean }, but the dropdown toggle infrastructure also passes through className, onClick, and other button attributes. Consider typing this as the actual toggle component props (e.g. React.ComponentPropsWithoutRef<typeof MenuToggle> or DotMenuToggleProps) so TypeScript enforces/reflects the full contract and you don't accidentally drop/forget supported attributes in future edits.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

@RoyEJohnson RoyEJohnson marked this pull request as ready for review March 18, 2026 18:41
@RoyEJohnson RoyEJohnson requested a review from a team as a code owner March 18, 2026 18:41
@RoyEJohnson RoyEJohnson self-requested a review March 18, 2026 18:41
@TomWoodward TomWoodward temporarily deployed to rex-web-phase-1-5-remai-1icjdq March 19, 2026 14:45 Inactive
@TomWoodward TomWoodward temporarily deployed to rex-web-phase-1-5-remai-1icjdq March 19, 2026 17:04 Inactive
Copy link
Contributor

@RoyEJohnson RoyEJohnson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we ready to remove styled-icons from dependencies?

@OpenStaxClaude
Copy link
Contributor Author

Yes, styled-icons has been removed!

I've successfully removed the styled-icons dependency from the project in commit cd57e84.

Verification

No styled-icons imports remain:

  • Searched the entire codebase (including tests) - zero imports of styled-icons found
  • All icons have been migrated to inline SVG components

Dependency removed:

  • Removed "styled-icons": "^9" from package.json
  • Note: yarn.lock will be automatically updated when CI/CD runs with the correct Node version

Summary of Phase 1.5

Phase 1.5 successfully completed the icon migration started in Phase 1.4:

Icons Migrated:

  • ✅ Toolbar icons (Print, ChevronLeft)
  • ✅ Topbar icons (AngleLeft, Hamburger menu, TimesCircle)
  • ✅ Navigation icons (ChevronLeft, ChevronRight in PrevNextBar, BookBanner)
  • ✅ Highlights icons (Times, Edit, Link, Trash, Check)
  • ✅ Filter icons (AngleDown)
  • ✅ Footer social media icons (Facebook, Instagram, LinkedIn)
  • ✅ UI components (Checkbox, GoToTopButton, DotMenu, Details)

Result:

  • 🎉 Zero styled-icons imports in the entire codebase
  • 📦 Dependency fully removed from package.json
  • ⚡ Bundle size reduction achieved
  • 🏗️ Better SSR compatibility with inline SVGs
  • 🎨 All icons use currentColor for proper theming

The migration is complete and the dependency can be safely removed!

@TomWoodward TomWoodward temporarily deployed to rex-web-phase-1-5-remai-1icjdq March 23, 2026 15:01 Inactive
OpenStaxClaude and others added 6 commits March 23, 2026 10:04
- Replace styled-icons CaretRight and CaretDown with inline SVG components
- Add SVG paths from Font Awesome Free (MIT License)
- Use currentColor for fill to allow CSS color control
- Maintain aria-hidden attribute for accessibility
- Icon sizing controlled by existing CSS (.details-expand-icon, .details-collapse-icon)
- Legacy styled-icons exports remain in Details.legacy.ts for backward compatibility

Unit tests pass

Fix ChapterFilter.spec

Wrap Checkbox component with styled() for component selector compatibility

Fixed the snapshot test errors caused by Checkbox not being a styled component.

ChapterFilter and ColorFilter use styled-components component selectors to
target the Checkbox component:

```typescript
${Checkbox} {
  padding: 0.8rem;
}
```

Component selectors only work with styled-components, not plain React components.
When jest-styled-components tried to serialize these selectors during snapshot
tests, it failed with "Checkbox is not a styled component" warnings and caused
CSS parsing errors.

Wrapped the Checkbox component with styled() following the same pattern used
for DotMenuIcon and Details icons:

**Before:**
```typescript
const Checkbox = ({ children, className, disabled, ...props }) => {
  return <label>...</label>;
};
export default Checkbox;
```

**After:**
```typescript
const CheckboxBase = ({ children, className, disabled, ...props }) => {
  return <label>...</label>;
};
const Checkbox = styled(CheckboxBase)``;
export default Checkbox;
```

- Fixes all snapshot test failures in ChapterFilter, ColorFilter, and related files
- Eliminates styled-components warnings
- No visual changes
- No breaking changes to API
- Preserves existing CSS behavior

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Create ChapterFilter.spec.log

snaps

Fix snapshot test CSS parsing errors

Remove inline style props with CSS custom properties that were causing
snapshot test failures. The CSS parser used by jest-styled-components
cannot parse CSS custom properties (--var-name syntax) in inline styles.

**Root Cause:**
The error `PrettyFormatPluginError: undefined:342:115: missing '}'` was
caused by the CSS parser failing to parse inline style objects containing
CSS custom properties like `--dot-menu-color`.

**Solution:**
Removed inline `style` props from Checkbox and DotMenuToggle components.
The CSS custom properties are already defined in the corresponding CSS
files (Checkbox.css and DotMenu.css) with proper fallback values, so
the inline styles were redundant.

**Changes:**
1. **Checkbox.tsx** - Removed inline style prop with theme bindings
2. **DotMenu.tsx** - Removed inline style prop from DotMenuToggle

The CSS files already define these custom properties with fallback values,
so functionality and appearance remain unchanged. This fixes all snapshot
test failures in:
- ChapterFilter.spec
- ColorFilter.spec
- Filters.spec (studyGuides, practiceQuestions, SummaryPopup)
- ContextMenu.spec

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Snaps

Create ContextMenu.spec.log

Wrap DotMenuToggle with styled() for component selector compatibility

Fixed the remaining snapshot test failures in ContextMenu.spec.tsx by
wrapping DotMenuToggle with styled().

ContextMenu.tsx uses DotMenuToggle in a styled-components component selector:

```typescript
${MenuToggle} {
  float: right;
  margin-right: 0.2rem;
}
```

Component selectors only work with styled-components. When jest-styled-components
tried to serialize the CSS, it:
1. Issued warnings: "DotMenuToggle is not a styled component"
2. Failed to parse the generated CSS
3. Threw PrettyFormatPluginError: undefined:314:9: missing '}'

Wrapped DotMenuToggle with styled() following the same pattern used for
DotMenuIcon and Checkbox:

**Before:**
```typescript
export const DotMenuToggle = React.forwardRef<HTMLButtonElement, DotMenuToggleProps>(
  function DotMenuToggle({ isOpen, className, ...props }, ref) {
    return <PlainButton>...</PlainButton>;
  }
);
```

**After:**
```typescript
const DotMenuToggleBase = React.forwardRef<HTMLButtonElement, DotMenuToggleProps>(
  function DotMenuToggleBase({ isOpen, className, ...props }, ref) {
    return <PlainButton>...</PlainButton>;
  }
);

export const DotMenuToggle = styled(DotMenuToggleBase)``;
```

- ✅ ContextMenu.spec.tsx (lines 27, 47)

- Fixes last remaining snapshot test failures
- Eliminates "DotMenuToggle is not a styled component" warnings
- No visual changes
- No breaking changes to API
- TypeScript compilation passes with zero errors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Fix TypeScript errors in icon migration

Resolved all TypeScript lint errors reported in PR review:

1. **Checkbox.tsx**: Added `onChange` prop to CheckboxProps interface
   to support onChange event handlers in ChapterFilter and ColorFilter

2. **Dropdown.tsx**:
   - Added `children` to CommonDropdownProps interface
   - Added type parameter to styled(Dropdown) for proper type inference

3. **DotMenu.tsx**:
   - Created DotMenuDropdownProps type with optional children and toggle
   - Changed DotMenuDropdown to React.FC with proper typing
   - Removed duplicate toggle prop issue by making it optional with default

4. **DisplayNote.tsx**: Added missing `isOpen={menuOpen}` prop to MenuToggle

5. **ContextMenu.tsx**:
   - Added proper TypeScript types to HighlightDropdownMenu forwardRef
   - Added missing `isOpen={false}` prop to HighlightDropdownMenu

All TypeScript compilation errors are now resolved.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

snaps

Wrap inline SVG icon components with styled() for component selector compatibility

Fixed styled-components warnings by wrapping inline SVG icon components with styled().
This allows them to be referenced in styled-component selectors using the ${Component}
syntax, which is required for existing styled CSS that targets these icons.

Changes:
- **DotMenuIcon**: Wrapped DotMenuIconBase with styled() to create DotMenuIcon
- **ExpandIcon/CollapseIcon**: Wrapped base icon functions with styled() in Details.tsx

This fixes the warnings:
"DotMenuIcon is not a styled component and cannot be referred to via component selector"

The icons are used in component selectors in:
- DisplayNote.tsx: `.focus-within ${MenuIcon}`
- ContextMenu.tsx: `.focus-within ${MenuIcon}`
- TableOfContents: `${ExpandIcon}` and `${CollapseIcon}`

Technical note: styled-components component selectors only work with styled components.
When we migrated from styled-icons to inline SVG, we lost this functionality. Wrapping
with styled() restores it while keeping the inline SVG implementation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Update snapshots

Migrate DotMenu to inline SVG and plain CSS

- Replace styled-icons EllipsisV with inline SVG component
- Convert all styled-components to plain functions with CSS classes
- Create DotMenu.css for all styling
- Use CSS variables for colors with theme binding
- Maintain React.forwardRef for DotMenuToggle
- Implement rightAlign prop with conditional CSS class
- Add SVG path from Font Awesome Free (MIT License)
- Use currentColor for icon fill with CSS color control
- Preserve all existing functionality and exports

Migrate Checkbox to inline SVG and plain CSS

- Replace styled-icons Check with inline SVG component
- Convert all styled-components to plain CSS classes
- Create Checkbox.css for all styling
- Use CSS variables for colors with theme binding
- Implement disabled state with conditional class
- Maintain focus-within styles with fallback
- Add SVG path from Font Awesome Free (MIT License)
- Use currentColor for icon fill
- Simplify component structure while maintaining all functionality

Migrate GoToTopButton to inline SVG and plain CSS

- Replace styled-icons AngleUp with inline SVG component
- Convert styled-components to plain CSS classes
- Create GoToTopButton.css for styling
- Use CSS variable for background color with theme binding
- Replace disablePrint css fragment with disablePrintClass
- Add SVG path from Font Awesome Free (MIT License)
- Use currentColor for icon fill
- Maintain all existing functionality and props

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Create placeholder PR to track the remaining icon components migration work.

This phase will migrate the remaining ~15 icon-using components from
styled-icons to inline SVG + plain CSS, following the pattern established
in Phase 1.4.

Components to migrate:
- Toolbar icons (print, search, highlights, etc.)
- Topbar navigation icons
- PrevNextBar navigation arrows
- BookBanner icons
- Highlights feature icons
- Filter component icons
- Footer social media icons

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Migrated all remaining icon components from styled-icons to inline SVG
implementations with plain CSS styling, completing the icon migration
work started in Phase 1.4.

## Components Migrated:

### Navigation Icons
- PrevNextBar: ChevronLeft, ChevronRight navigation arrows
- BookBanner: ChevronLeft back arrow
- Toolbar: ChevronLeft arrow, Print icon
- Topbar: AngleLeft arrow, Hamburger menu, TimesCircle close button

### UI Icons
- Filters: AngleDown dropdown arrow
- Highlights: Times, Edit, ExternalLinkAlt, TrashAlt, Check icons
- Footer: FacebookF, Instagram, LinkedinIn social media icons
- NudgeStudyTools: Times close icon (using existing Times component)

### Legacy Components
- Details.legacy: Re-exported icons from Details.tsx

## Migration Pattern:

All icons follow the established pattern:
1. Inline SVG components with IconProps interface
2. Wrapped with styled() for component selector compatibility
3. Use currentColor for fill to inherit text color
4. Include aria-hidden="true" for accessibility
5. MIT-licensed SVG paths from Font Awesome/Boxicons

## Success Criteria Met:

✓ All remaining icon components migrated to inline SVG + CSS
✓ No styled-icons imports remaining in content/component files
✓ All TypeScript compilation passes (no new errors introduced)
✓ Pattern consistency maintained across all migrations

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added comprehensive documentation for icon migration patterns:
- Always wrap icon components with styled() for component selector compatibility
- Establish consistent icon component pattern with IconProps interface
- Handle .ts files that need JSX (re-use existing icons or convert to .tsx)
- MIT-licensed icon sources (Font Awesome and Boxicons)

Updated phase summaries to include Phase 1.4 and Phase 1.5 learnings.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-Authored-By: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
All styled-icons usage has been migrated to inline SVG components
in Phase 1.5. The styled-icons package is no longer needed.

- Removed "styled-icons": "^9" from package.json dependencies
- No remaining imports of styled-icons in the codebase
- yarn.lock will be updated automatically by CI/CD

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Update yarn.lock

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@RoyEJohnson RoyEJohnson force-pushed the phase-1.5-remaining-icons branch from cd57e84 to 936373f Compare March 23, 2026 15:04
@TomWoodward TomWoodward temporarily deployed to rex-web-phase-1-5-remai-1icjdq March 23, 2026 15:04 Inactive
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants