Remove ExperimentalWarning component and all its usages across the
application. Update submission form text to remove experimental language
and remove the "Request this icon" button from icon search.
Move gradient detection to parent component (icon-details) so the
customize button is hidden entirely rather than showing an error
message after the customizer opens.
Update ensureSvgAttributes to create viewBox from existing width/height
dimensions if missing, and always set width/height to 100% for proper
scaling within container elements.
Detect linearGradient and radialGradient elements in SVGs and hide
the "Customize Icon" button when found, as color customization is
not supported for gradient-based icons.
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
Signed-off-by: Thomas Camlong <thomas@ajnart.dev>
- Add id="close-customizer" to close button for reliable test selection
- Add id="customized-svg-preview" to preview container for testing
- Update test to use reliable selectors instead of fragile locators
- Replace 'react' test icon with 'sonarr' for better test coverage
- Add test to verify SVG preview updates when colors change
- Remove redundant tests for color changes and action buttons
- Format playwright.config.ts with double quotes and tabs
- Change dev server command from npm to pnpm
- Add @playwright/test dependency to pnpm-lock.yaml
Add UI components required for icon customization:
- ColorPicker: HSL-based color picker with presets
- Modal: full-screen modal component for customizer
These components are dependencies for the icon customizer feature.
Integrate IconCustomizerInline into icon details page and improve type safety:
- Add inline color customizer button with "NEW" badge
- Replace any types with proper CommunityIconData type
- Add clipboard availability checks to all copy operations
- Improve error handling in handleCopyUrl, handleCopyImage, handleDownload
- Add filename sanitization for downloads
- Add type guards for assetUrls array operations
- Better error messages with specific error details
- Remove unused AlertTriangle import
Add IconCustomizer modal component for full-screen color customization:
- Full-screen modal with side-by-side layout
- Color picker with RGB inputs, hex input, native color picker, and Tailwind palette
- Real-time preview of customized SVG
- Copy customized SVG to clipboard
- Improved error handling and clipboard API checks
- Uses shared SVG color utilities for consistency
Add IconCustomizerInline component for customizing SVG colors inline:
- Extracts colors from SVG using shared utilities
- Provides color picker for each unique color found
- Supports copy and download of customized SVG
- Includes info button with popover explaining the feature
- Handles clipboard API availability checks
- Improved error handling with detailed messages
- Filename sanitization for downloads
- Update icon-card to show base icon in grid displays
- Update icon-details to show base icon in detail page header
Previously, the code defaulted to showing the light theme variant
(iconData.colors?.light) when available. Now it consistently shows
the base icon (using the icon's name directly) as intended.
- Normalize categories to lowercase when collecting unique categories
- Use case-insensitive comparison in handleCategoryChange
- Use case-insensitive comparison for checkbox checked state
This ensures categories with different casing are treated as the same
category, preventing duplicates and improving filter reliability.
- Remove filter excluding added_to_collection items from community submissions
- Change sort order from created to updated time
- Update status priority to display added_to_collection right after pending items
Community authors (from PocketBase) now have:
- Empty avatar_url: shows fallback initial in Avatar component
- Empty html_url: renders name as plain text instead of link
This distinguishes community contributors from GitHub users visually.
Update types and getAuthorData function to handle both:
- GitHub users (numeric IDs) - fetches from GitHub API
- Internal PocketBase users (string IDs) - uses embedded metadata
This allows community submissions from PocketBase to display
author information without requiring a GitHub account.
Add admin-protected server action that triggers the add-icon.yml
GitHub workflow via the GitHub Actions API. Validates auth token
server-side by calling PocketBase authRefresh.
- Add break-words utility to prevent text overflow in rejection reason
- Replace red color scheme with primary theme colors
- Improve spacing and layout of status section
- Add rejectionReason prop to IconDetails component
- Add biome-ignore comment to carbon component for intentional lint bypass
- Add type="button" to expandable row button to prevent form submission
- Prefix unused parameters with underscore for clarity
- Remove unused Check import from submissions data table
- Improve type safety in hooks
- Add title attribute to error icon in login modal for screen readers
- Fix separator role from "separator" to "presentation" with aria-hidden
- Standardize tabIndex values to "0" for proper keyboard navigation
- Improve button text rendering in login modal
- Remove semicolons from TypeScript/TSX files
- Format import statements consistently
- Remove trailing commas in type definitions
- Apply consistent code style across components and lib files