Updated triggerAddIconWorkflow to accept comma-separated submission IDs.
Simplified triggerBulkAddIconWorkflow to join IDs and dispatch once
instead of triggering multiple separate workflows.
This works in tandem with the updated add-icon.yml workflow to process
all submissions sequentially in a single run.
Add React Query mutation hook for bulk workflow triggering:
- Shows success toast with count of triggered workflows
- Shows warning toast if some workflows failed
- Includes link to view workflows on GitHub
Add triggerBulkAddIconWorkflow function that:
- Accepts an array of submission IDs
- Triggers workflows sequentially with 500ms delay
- Returns individual results for each submission
- Handles errors gracefully per-submission
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.