Commit Graph

397 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
9dbf3a9dae Improve OAuth error handling and UX based on code review
Co-authored-by: ajnart <49837342+ajnart@users.noreply.github.com>
2026-01-08 09:54:28 +00:00
copilot-swe-agent[bot]
2bfb024eb4 Add GitHub OAuth setup documentation to README
Co-authored-by: ajnart <49837342+ajnart@users.noreply.github.com>
2026-01-08 09:51:30 +00:00
copilot-swe-agent[bot]
2d521a814b Enable GitHub OAuth login in login modal
Co-authored-by: ajnart <49837342+ajnart@users.noreply.github.com>
2026-01-08 09:50:09 +00:00
Thomas Camlong
69fe41b069 feat: add admin comment on approval 2026-01-06 04:43:37 +01:00
Thomas Camlong
f2d3d92063 feat: add admin comments to success emails 2026-01-06 04:41:38 +01:00
Thomas Camlong
7567336aa4 chore: fix compose 2025-12-31 12:21:14 +01:00
Thomas Camlong
bad5443fb4 (chore): update docker compose 2025-12-31 12:14:09 +01:00
Thomas Camlong
e059b0f3ea refactor(web): batch submissions into single workflow dispatch
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.
2025-12-29 11:26:50 +01:00
Thomas Camlong
bfbc1245d5 feat(dashboard): add bulk trigger UI for approved submissions
- Add checkbox column for selecting approved submissions (admin only)
- Add bulk actions toolbar with "Trigger All" button
- Integrate useBulkTriggerWorkflow hook in dashboard page
- Column is conditionally rendered only for admin users
2025-12-29 11:08:10 +01:00
Thomas Camlong
f2fb70025f feat(hooks): add useBulkTriggerWorkflow hook
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
2025-12-29 11:08:01 +01:00
Thomas Camlong
91890837e7 feat(api): add bulk trigger workflow server action
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
2025-12-29 11:07:52 +01:00
Thomas Camlong
d713f13d3a refactor: remove experimental warning components and update submission UI
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.
2025-12-26 21:26:04 +01:00
Thomas Camlong
42a1351c56 chore(deps): update next from 16.0.9 to 16.1.1 2025-12-26 21:26:00 +01:00
Thomas Camlong
26e3998ae3 Revert "Update web/src/components/icon-details.tsx"
This reverts commit 4dd98a3807.
2025-12-26 20:24:57 +01:00
Thomas Camlong
53acbc791e Update web/src/components/icon-details.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Thomas Camlong <thomas@ajnart.dev>
2025-12-26 20:24:08 +01:00
Thomas Camlong
4dd98a3807 Update web/src/components/icon-details.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Thomas Camlong <thomas@ajnart.dev>
2025-12-26 20:19:19 +01:00
Thomas Camlong
7f18cbcbb2 style(community-icon-search): code formatting 2025-12-26 20:00:04 +01:00
Thomas Camlong
92a5101613 refactor(icon-customizer-inline): remove gradient detection
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.
2025-12-26 19:59:56 +01:00
Thomas Camlong
a178037791 fix(svg-color-utils): ensure SVGs scale properly within containers
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.
2025-12-26 19:59:47 +01:00
Thomas Camlong
c91e05829e feat(icon-details): hide customize button for SVGs with gradients
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.
2025-12-26 19:59:37 +01:00
Thomas Camlong
d1c67c4c77 Merge pull request #2755 from homarr-labs/feat/improve-categories 2025-12-26 18:32:46 +01:00
Thomas Camlong
093eb9909c Potential fix for pull request finding 'Unmatchable dollar in regular expression'
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>
2025-12-26 18:29:23 +01:00
Thomas Camlong
b7e157c9bd chore: remove unused screenshot script
- Delete the take-screenshots.mjs file as it is no longer needed
- This cleanup helps maintain a leaner codebase
2025-12-26 18:25:57 +01:00
Thomas Camlong
3239f82d88 fix: add transition duration to customizer button animation
- Add transition duration of 0.2s to motion.div for smoother animation
- Improves visual consistency when opening/closing icon customizer
2025-12-26 18:01:33 +01:00
Thomas Camlong
edf0e048b9 test: add test IDs and improve icon customizer tests
- 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
2025-12-26 18:01:32 +01:00
Thomas Camlong
b363967344 chore: update playwright config formatting and use pnpm
- 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
2025-12-26 18:01:31 +01:00
copilot-swe-agent[bot]
9d510a1865 docs: Add comprehensive Playwright setup documentation
Co-authored-by: ajnart <49837342+ajnart@users.noreply.github.com>
2025-12-26 15:21:49 +00:00
copilot-swe-agent[bot]
de39acfa55 feat(tests): Add screenshot script and test documentation
Co-authored-by: ajnart <49837342+ajnart@users.noreply.github.com>
2025-12-26 15:17:38 +00:00
copilot-swe-agent[bot]
2a86e79c32 feat(tests): Setup Playwright e2e tests for SVG customizer
Co-authored-by: ajnart <49837342+ajnart@users.noreply.github.com>
2025-12-26 15:11:03 +00:00
Thomas Camlong
cf9dc96f55 refactor(color-picker): remove unused export 2025-12-26 16:01:10 +01:00
Thomas Camlong
16ac249bf8 style: apply code formatting to actions, hooks, and api files
Apply consistent code formatting across multiple files:
- Remove semicolons for consistency with project style
- Improve code readability
- Files: github actions, submission hooks, and api utilities
2025-12-26 15:58:20 +01:00
Thomas Camlong
67f0bc5637 style(icons): apply code formatting to icon-details component
Apply consistent code formatting to icon-details component:
- Remove semicolons for consistency with project style
- Improve code readability
2025-12-26 15:58:17 +01:00
Thomas Camlong
56dd6c19db style(icons): apply code formatting to customizer components
Apply consistent code formatting to icon customizer components:
- Remove semicolons for consistency with project style
- Improve code readability and maintainability
2025-12-26 15:58:15 +01:00
Thomas Camlong
211aa5190b style(svg-utils): apply code formatting
Apply consistent code formatting to SVG color utilities:
- Remove semicolons for consistency with project style
- Improve code readability
2025-12-26 15:58:13 +01:00
Thomas Camlong
25b462c8dd feat(ui): add color picker and modal components
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.
2025-12-26 15:56:28 +01:00
Thomas Camlong
36a47844fb feat(icons): integrate customizer and improve icon-details
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
2025-12-26 15:56:19 +01:00
Thomas Camlong
36854ed4c8 feat(icons): add modal icon color customizer component
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
2025-12-26 15:56:16 +01:00
Thomas Camlong
3ddd0ea1aa feat(icons): add inline icon color customizer component
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
2025-12-26 15:56:13 +01:00
Thomas Camlong
46d8b509e5 feat(icons): add shared SVG color manipulation utilities
Create centralized utility functions for SVG color processing:
- normalizeColor: handles hex, rgb, rgba, CSS named colors
- extractColorsFromSvg: extracts fill/stroke colors from attributes, inline styles, and style tags
- applyColorMappingsToSvg: applies color mappings to SVG elements
- Color conversion helpers: hexToHsl, hslToHex, hexToRgb, rgbToHex
- ensureSvgAttributes: ensures SVG has required viewBox/width/height
- isClipboardAvailable: checks clipboard API availability

Supports CSS named colors (white, black, red, etc.) and inline style attributes.
2025-12-26 15:56:09 +01:00
Thomas Camlong
d94f1c2105 fix(icons): display base icon instead of light variant
- 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.
2025-12-24 20:10:06 +01:00
Thomas Camlong
f71e06629c feat(search): make category filtering case-insensitive
- 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.
2025-12-24 20:09:55 +01:00
Thomas Camlong
c374725c78 feat(community): show added_to_collection icons in gallery with higher priority
- 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
2025-12-24 16:00:27 +01:00
Thomas Camlong
9894520b4d fix(api): use empty strings for community author avatar/link
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.
2025-12-24 14:41:59 +01:00
Thomas Camlong
db22376200 feat(api): support internal PocketBase users as icon authors
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.
2025-12-24 14:35:08 +01:00
Thomas Camlong
a7187d6791 chore(docker): add GITHUB_TOKEN env var for workflow trigger
Add GITHUB_TOKEN to docker-compose environment to enable the
GitHub CI trigger feature at runtime.
2025-12-24 14:14:08 +01:00
Thomas Camlong
b73480d568 chore(build): fix build 2025-12-24 11:19:53 +01:00
Thomas Camlong
ca061086f5 chore(build): fix build 2025-12-24 11:19:47 +01:00
Thomas Camlong
6ab9d4422f feat(dashboard): wire up GitHub workflow trigger in dashboard page
Add handleTriggerWorkflow handler and pass workflow mutation state
to SubmissionsDataTable component.
2025-12-24 11:16:04 +01:00
Thomas Camlong
71ac720a7e feat(dashboard): add "Run GitHub CI" button for approved submissions
Add button in SubmissionDetails for admins to trigger the GitHub
workflow on approved submissions. Shows workflow URL after trigger.
2025-12-24 11:15:56 +01:00
Thomas Camlong
f0de475027 feat(dashboard): add useTriggerWorkflow hook for GitHub CI
Add React Query mutation hook that calls the GitHub workflow
server action, passing the auth token from localStorage.
2025-12-24 11:15:47 +01:00