neon_sakura 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.ai-reviewer/README.md +182 -0
- data/.ai-reviewer/ai-reviewer.sh +56 -0
- data/.ai-reviewer/build-system-prompt.sh +136 -0
- data/.ai-reviewer/extract-claude-sections.sh +32 -0
- data/.ai-reviewer/test-ai-reviewer.sh +40 -0
- data/.ai-reviewer-config.yml +190 -0
- data/.github/dependabot.yml +12 -0
- data/.github/settings.yml +70 -0
- data/.github/workflows/ai-pr-review-on-comment.yml +384 -0
- data/.github/workflows/ai-pr-review.yml +328 -0
- data/.github/workflows/license-check.yml +78 -0
- data/.github/workflows/lint.yml +79 -0
- data/.github/workflows/security.yml +131 -0
- data/.github/workflows/semgrep.yml +26 -0
- data/.github/workflows/test.yml +44 -0
- data/.gitignore +75 -0
- data/.rubocop.yml +33 -0
- data/.ruby-version +1 -0
- data/.simplecov +14 -0
- data/.stylelintignore +10 -0
- data/.stylelintrc.json +37 -0
- data/AGENTS.md +51 -0
- data/CHANGELOG.md +568 -0
- data/CLAUDE.md +632 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +327 -0
- data/LICENSE +21 -0
- data/README.md +1209 -0
- data/Rakefile +25 -0
- data/app/assets/images/cherry_blossom.svg +1525 -0
- data/app/assets/images/cherry_blossom_tree.png +0 -0
- data/app/assets/images/prysm-icon.png +0 -0
- data/app/assets/stylesheets/base.css +29 -0
- data/app/assets/stylesheets/components.css +1652 -0
- data/app/assets/stylesheets/forms.css +152 -0
- data/app/assets/stylesheets/loading.css +145 -0
- data/app/assets/stylesheets/neon_sakura.css +40 -0
- data/app/assets/stylesheets/pagy-tailwind.css +120 -0
- data/app/assets/stylesheets/theme-default.css +40 -0
- data/app/assets/stylesheets/theme-green.css +84 -0
- data/app/assets/stylesheets/theme-purple.css +94 -0
- data/app/assets/stylesheets/theme-red.css +84 -0
- data/app/assets/stylesheets/utility-borders.css +29 -0
- data/app/assets/stylesheets/utility-colors.css +185 -0
- data/app/assets/stylesheets/utility-effects.css +123 -0
- data/app/assets/stylesheets/utility-gradients.css +158 -0
- data/app/assets/stylesheets/utility-layout.css +132 -0
- data/app/assets/stylesheets/utility-reset.css +13 -0
- data/app/assets/stylesheets/utility-responsive.css +145 -0
- data/app/assets/stylesheets/utility-sizing.css +99 -0
- data/app/assets/stylesheets/utility-spacing.css +174 -0
- data/app/assets/stylesheets/utility-typography.css +97 -0
- data/app/controllers/errors_controller.rb +120 -0
- data/app/controllers/style_guide_controller.rb +117 -0
- data/app/helpers/errors_helper.rb +12 -0
- data/app/helpers/neon_sakura/navbar_helper.rb +43 -0
- data/app/helpers/style_guide_helper.rb +36 -0
- data/app/javascript/neon_sakura/dropdown.js +22 -0
- data/app/javascript/neon_sakura/navbar.js +71 -0
- data/app/javascript/neon_sakura/theme_switcher.js +187 -0
- data/app/views/errors/show.html.erb +105 -0
- data/app/views/layouts/error.html.erb +19 -0
- data/app/views/layouts/mission_control/jobs/_application_selection.html.erb +14 -0
- data/app/views/layouts/mission_control/jobs/_navigation.html.erb +21 -0
- data/app/views/layouts/mission_control/jobs/application.html.erb +453 -0
- data/app/views/layouts/style_guide.html.erb +416 -0
- data/app/views/shared/_file_upload.html.erb +184 -0
- data/app/views/shared/_footer.html.erb +23 -0
- data/app/views/shared/_header.html.erb +42 -0
- data/app/views/shared/_navbar.html.erb +306 -0
- data/app/views/shared/_profile_image_selector.html.erb +165 -0
- data/app/views/shared/_theme_switcher.html.erb +64 -0
- data/app/views/shared/icons/_adjustments.html.erb +10 -0
- data/app/views/shared/icons/_alert_circle.html.erb +3 -0
- data/app/views/shared/icons/_alert_triangle.html.erb +3 -0
- data/app/views/shared/icons/_archive.html.erb +3 -0
- data/app/views/shared/icons/_arrow_down.html.erb +3 -0
- data/app/views/shared/icons/_arrow_left.html.erb +3 -0
- data/app/views/shared/icons/_arrow_up.html.erb +3 -0
- data/app/views/shared/icons/_arrows_pointing_in.html.erb +10 -0
- data/app/views/shared/icons/_arrows_pointing_out.html.erb +10 -0
- data/app/views/shared/icons/_artemis_logo.html.erb +26 -0
- data/app/views/shared/icons/_auth_banner.html.erb +1 -0
- data/app/views/shared/icons/_bars.html.erb +10 -0
- data/app/views/shared/icons/_bell.html.erb +3 -0
- data/app/views/shared/icons/_book.html.erb +3 -0
- data/app/views/shared/icons/_bookmark.html.erb +3 -0
- data/app/views/shared/icons/_box.html.erb +3 -0
- data/app/views/shared/icons/_brain.html.erb +3 -0
- data/app/views/shared/icons/_briefcase.html.erb +3 -0
- data/app/views/shared/icons/_calendar.html.erb +3 -0
- data/app/views/shared/icons/_camera.html.erb +4 -0
- data/app/views/shared/icons/_chart_bar.html.erb +3 -0
- data/app/views/shared/icons/_chart_line.html.erb +10 -0
- data/app/views/shared/icons/_chart_pie.html.erb +11 -0
- data/app/views/shared/icons/_chat.html.erb +3 -0
- data/app/views/shared/icons/_check.html.erb +3 -0
- data/app/views/shared/icons/_check_circle.html.erb +3 -0
- data/app/views/shared/icons/_cherry_blossom.html.erb +1516 -0
- data/app/views/shared/icons/_cherry_blossom_silhouette.html.erb +1016 -0
- data/app/views/shared/icons/_cherry_blossom_single_flower.html.erb +1125 -0
- data/app/views/shared/icons/_cherry_blossom_tree.html.erb +159 -0
- data/app/views/shared/icons/_chevron_down.html.erb +3 -0
- data/app/views/shared/icons/_chevron_right.html.erb +9 -0
- data/app/views/shared/icons/_clipboard.html.erb +3 -0
- data/app/views/shared/icons/_clock.html.erb +3 -0
- data/app/views/shared/icons/_close.html.erb +3 -0
- data/app/views/shared/icons/_cog.html.erb +4 -0
- data/app/views/shared/icons/_crop.html.erb +10 -0
- data/app/views/shared/icons/_crown.html.erb +3 -0
- data/app/views/shared/icons/_disc.html.erb +3 -0
- data/app/views/shared/icons/_download.html.erb +3 -0
- data/app/views/shared/icons/_dragonfly.html.erb +58 -0
- data/app/views/shared/icons/_duplicate.html.erb +4 -0
- data/app/views/shared/icons/_edit.html.erb +3 -0
- data/app/views/shared/icons/_envelope.html.erb +3 -0
- data/app/views/shared/icons/_eraser.html.erb +10 -0
- data/app/views/shared/icons/_external_link.html.erb +3 -0
- data/app/views/shared/icons/_eye.html.erb +4 -0
- data/app/views/shared/icons/_file_csv.html.erb +10 -0
- data/app/views/shared/icons/_file_export.html.erb +10 -0
- data/app/views/shared/icons/_file_image.html.erb +10 -0
- data/app/views/shared/icons/_file_import.html.erb +10 -0
- data/app/views/shared/icons/_file_question.html.erb +6 -0
- data/app/views/shared/icons/_film.html.erb +3 -0
- data/app/views/shared/icons/_filter.html.erb +3 -0
- data/app/views/shared/icons/_folder.html.erb +3 -0
- data/app/views/shared/icons/_folder_open.html.erb +3 -0
- data/app/views/shared/icons/_folder_plus.html.erb +3 -0
- data/app/views/shared/icons/_globe.html.erb +3 -0
- data/app/views/shared/icons/_google.html.erb +11 -0
- data/app/views/shared/icons/_heart.html.erb +3 -0
- data/app/views/shared/icons/_heart_broken.html.erb +11 -0
- data/app/views/shared/icons/_heart_pulse.html.erb +4 -0
- data/app/views/shared/icons/_history.html.erb +11 -0
- data/app/views/shared/icons/_home.html.erb +10 -0
- data/app/views/shared/icons/_image.html.erb +3 -0
- data/app/views/shared/icons/_inbox.html.erb +3 -0
- data/app/views/shared/icons/_info_circle.html.erb +10 -0
- data/app/views/shared/icons/_key.html.erb +3 -0
- data/app/views/shared/icons/_layers.html.erb +10 -0
- data/app/views/shared/icons/_lightbulb.html.erb +10 -0
- data/app/views/shared/icons/_lightning.html.erb +3 -0
- data/app/views/shared/icons/_list.html.erb +3 -0
- data/app/views/shared/icons/_lock.html.erb +3 -0
- data/app/views/shared/icons/_logout.html.erb +3 -0
- data/app/views/shared/icons/_magazine.html.erb +3 -0
- data/app/views/shared/icons/_magic.html.erb +3 -0
- data/app/views/shared/icons/_minus.html.erb +10 -0
- data/app/views/shared/icons/_mobile.html.erb +10 -0
- data/app/views/shared/icons/_moon.html.erb +3 -0
- data/app/views/shared/icons/_network.html.erb +10 -0
- data/app/views/shared/icons/_new_item_banner.html.erb +1 -0
- data/app/views/shared/icons/_ouroboros.html.erb +24 -0
- data/app/views/shared/icons/_package.html.erb +3 -0
- data/app/views/shared/icons/_palette.html.erb +3 -0
- data/app/views/shared/icons/_paper_plane.html.erb +10 -0
- data/app/views/shared/icons/_photo.html.erb +10 -0
- data/app/views/shared/icons/_play.html.erb +4 -0
- data/app/views/shared/icons/_plus.html.erb +3 -0
- data/app/views/shared/icons/_pocket.html.erb +11 -0
- data/app/views/shared/icons/_prysm-icon.html.erb +34 -0
- data/app/views/shared/icons/_prysm.html.erb +13 -0
- data/app/views/shared/icons/_pushbullet-1.html.erb +29 -0
- data/app/views/shared/icons/_pushbullet-2.html.erb +2 -0
- data/app/views/shared/icons/_puzzle.html.erb +10 -0
- data/app/views/shared/icons/_qrcode.html.erb +3 -0
- data/app/views/shared/icons/_question.html.erb +3 -0
- data/app/views/shared/icons/_receipt.html.erb +10 -0
- data/app/views/shared/icons/_redo.html.erb +3 -0
- data/app/views/shared/icons/_refresh.html.erb +3 -0
- data/app/views/shared/icons/_rocket.html.erb +10 -0
- data/app/views/shared/icons/_rss.html.erb +3 -0
- data/app/views/shared/icons/_save.html.erb +3 -0
- data/app/views/shared/icons/_search.html.erb +3 -0
- data/app/views/shared/icons/_search_minus.html.erb +10 -0
- data/app/views/shared/icons/_search_plus.html.erb +10 -0
- data/app/views/shared/icons/_server_error.html.erb +6 -0
- data/app/views/shared/icons/_share.html.erb +3 -0
- data/app/views/shared/icons/_shield_check.html.erb +3 -0
- data/app/views/shared/icons/_sign_in.html.erb +3 -0
- data/app/views/shared/icons/_spinner.html.erb +4 -0
- data/app/views/shared/icons/_star.html.erb +3 -0
- data/app/views/shared/icons/_store.html.erb +10 -0
- data/app/views/shared/icons/_sun.html.erb +3 -0
- data/app/views/shared/icons/_sync.html.erb +3 -0
- data/app/views/shared/icons/_table.html.erb +3 -0
- data/app/views/shared/icons/_tag.html.erb +3 -0
- data/app/views/shared/icons/_tags.html.erb +11 -0
- data/app/views/shared/icons/_tools.html.erb +4 -0
- data/app/views/shared/icons/_trash.html.erb +3 -0
- data/app/views/shared/icons/_undo.html.erb +3 -0
- data/app/views/shared/icons/_unlock.html.erb +3 -0
- data/app/views/shared/icons/_upload.html.erb +3 -0
- data/app/views/shared/icons/_user.html.erb +3 -0
- data/app/views/shared/icons/_user_circle.html.erb +10 -0
- data/app/views/shared/icons/_user_plus.html.erb +10 -0
- data/app/views/shared/icons/_video.html.erb +3 -0
- data/app/views/shared/icons/_wrench.html.erb +11 -0
- data/app/views/style_guide/index.html.erb +77 -0
- data/app/views/style_guide/sections/_alerts.html.erb +114 -0
- data/app/views/style_guide/sections/_badges.html.erb +78 -0
- data/app/views/style_guide/sections/_buttons.html.erb +130 -0
- data/app/views/style_guide/sections/_cards.html.erb +84 -0
- data/app/views/style_guide/sections/_colors.html.erb +106 -0
- data/app/views/style_guide/sections/_file_upload.html.erb +135 -0
- data/app/views/style_guide/sections/_forms.html.erb +129 -0
- data/app/views/style_guide/sections/_gradients.html.erb +253 -0
- data/app/views/style_guide/sections/_header.html.erb +12 -0
- data/app/views/style_guide/sections/_icons.html.erb +55 -0
- data/app/views/style_guide/sections/_images.html.erb +40 -0
- data/app/views/style_guide/sections/_loading.html.erb +242 -0
- data/app/views/style_guide/sections/_pagination.html.erb +212 -0
- data/app/views/style_guide/sections/_profile_components.html.erb +203 -0
- data/app/views/style_guide/sections/_theme_switcher.html.erb +72 -0
- data/app/views/style_guide/sections/_typography.html.erb +65 -0
- data/bin/ai-optimize-claude-md +540 -0
- data/bin/ai-review-local +345 -0
- data/bin/ai-security-review +585 -0
- data/bin/brakeman +9 -0
- data/bin/install-hooks +57 -0
- data/bin/rake +7 -0
- data/bin/rubocop +10 -0
- data/bin/verify_setup.rb +31 -0
- data/config/brakeman.ignore +28 -0
- data/config/initializers/neon_sakura.rb +15 -0
- data/config/license_overrides.yml +13 -0
- data/config/routes.rb +21 -0
- data/config/theme_mappings.yml +61 -0
- data/docs/PRYSM_ASSETS.md +210 -0
- data/docs/plans/extract_ai_reviewer_plan.md +151 -0
- data/docs/plans/neon_sakura_gem_plan.md +138 -0
- data/lib/neon_sakura/configuration.rb +94 -0
- data/lib/neon_sakura/engine.rb +48 -0
- data/lib/neon_sakura/icon_helper.rb +54 -0
- data/lib/neon_sakura/profile_helper.rb +24 -0
- data/lib/neon_sakura/stylesheet_helper.rb +40 -0
- data/lib/neon_sakura/theme_helper.rb +63 -0
- data/lib/neon_sakura/theme_importer.rb +112 -0
- data/lib/neon_sakura/version.rb +5 -0
- data/lib/neon_sakura.rb +13 -0
- data/neon_sakura.gemspec +50 -0
- data/package.json +18 -0
- data/scripts/git-hooks/post-merge +132 -0
- data/scripts/git-hooks/pre-commit +123 -0
- data/scripts/git-hooks/pre-push +127 -0
- data/scripts/license-check.rb +587 -0
- data/settings.local.json +12 -0
- data/yarn.lock +778 -0
- metadata +503 -0
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,568 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.1.4] - 2025-01-XX
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **Gravatar Support** - New `ProfileHelper` with `gravatar_url` method
|
|
14
|
+
- Generates Gravatar URLs from email addresses
|
|
15
|
+
- Configurable image size (default: 80px)
|
|
16
|
+
- Uses MD5 hashing for Gravatar GUID (acceptable for public identifiers)
|
|
17
|
+
- Returns identicon as default for unregistered emails
|
|
18
|
+
|
|
19
|
+
- **File Upload Component** - Drag-and-drop file upload with preview
|
|
20
|
+
- Configurable file types (`accept` parameter)
|
|
21
|
+
- Maximum file size validation
|
|
22
|
+
- Optional image preview
|
|
23
|
+
- Multiple file support
|
|
24
|
+
- Drag-and-drop highlighting
|
|
25
|
+
- Stimulus controller integration
|
|
26
|
+
- Theme-aware styling with CSS variables
|
|
27
|
+
|
|
28
|
+
- **Profile Image Selector Component** - Radio card selection UI
|
|
29
|
+
- Choose between default avatar, Gravatar, or uploaded image
|
|
30
|
+
- Preview images for each option
|
|
31
|
+
- Selection indicator
|
|
32
|
+
- Fully accessible with hidden radio buttons
|
|
33
|
+
- ActiveStorage integration for uploads (optional)
|
|
34
|
+
- Responsive grid layout
|
|
35
|
+
|
|
36
|
+
- **9 New Heroicons** - High-priority icons for prys-m migration
|
|
37
|
+
- `bars` - Hamburger menu (bars-3)
|
|
38
|
+
- `chart_line` - Line chart visualization
|
|
39
|
+
- `chart_pie` - Pie chart visualization
|
|
40
|
+
- `user_circle` - User profile circle
|
|
41
|
+
- `user_plus` - Add user/invitation
|
|
42
|
+
- `info_circle` - Information/help
|
|
43
|
+
- `lightbulb` - Ideas/tips/features
|
|
44
|
+
- `paper_plane` - Send/submit
|
|
45
|
+
- `history` - Recent/past items
|
|
46
|
+
|
|
47
|
+
- **Icon Audit Documentation** - Complete missing icons analysis
|
|
48
|
+
- Created `docs/MISSING_ICONS.md`
|
|
49
|
+
- Tracks 20-25 missing icons from prys-m
|
|
50
|
+
- Prioritized by usage frequency
|
|
51
|
+
- Heroicons source mapping
|
|
52
|
+
- Implementation plan for remaining icons
|
|
53
|
+
|
|
54
|
+
### Added (Previous)
|
|
55
|
+
- **Style Guide Favicon** - Added palette icon as favicon for style guide
|
|
56
|
+
- Uses inline SVG data URI with purple color (#a855f7)
|
|
57
|
+
- Appears in browser tab for easy identification
|
|
58
|
+
- Matches the style guide's theme-focused purpose
|
|
59
|
+
|
|
60
|
+
- **Enhanced Pagy Examples** - Comprehensive pagination control examples in style guide
|
|
61
|
+
- **4 Live Examples**: info_tag, series_nav_js, series_nav, input_nav_js
|
|
62
|
+
- **Pagy 43.x API**: Updated to use instance methods (`@pagy.info_tag` instead of `pagy_info(@pagy)`)
|
|
63
|
+
- **Interactive**: All navigation controls are functional and demonstrate different pagination styles
|
|
64
|
+
- **Code Examples**: Each example shows the exact ERB code needed for Pagy 43.x
|
|
65
|
+
- **Controller Setup**: Includes Pagy 43.x controller configuration with `:offset` paginator
|
|
66
|
+
- **Helper Reference**: Complete documentation of available Pagy 43.x instance methods
|
|
67
|
+
|
|
68
|
+
### Fixed
|
|
69
|
+
- **CRITICAL: Propshaft @import Bug Fixed** - Resolved asset loading issues in consuming applications
|
|
70
|
+
- **Issue**: CSS `@import` statements do NOT work with Propshaft across gem boundaries
|
|
71
|
+
- **Root Cause**: Previous documentation incorrectly claimed Propshaft expands `@import` into `<link>` tags (this is Sprockets behavior, not Propshaft)
|
|
72
|
+
- **Impact**: Apps using neon_sakura with Propshaft would fail to load any styles
|
|
73
|
+
- **Solution**: Created `neon_sakura_stylesheets` helper that loads all CSS files individually in correct cascade order
|
|
74
|
+
|
|
75
|
+
- **Style Guide Pagy Pagination** - Fixed Pagy 43.x API compatibility
|
|
76
|
+
- **Issue**: "wrong number of arguments (given 1, expected 0)" error when viewing pagination section
|
|
77
|
+
- **Root Cause**: Pagy 43.x has completely different API - uses `Pagy::Method` instead of `Pagy::Backend`
|
|
78
|
+
- **Impact**: Style guide pagination examples failed to initialize in apps using Pagy 43.x
|
|
79
|
+
- **Solution**:
|
|
80
|
+
- Added support for Pagy 43.x API: `include Pagy::Method` and `pagy(:offset, collection, **options)`
|
|
81
|
+
- Maintained backward compatibility with older Pagy versions using `Pagy::Backend` and `pagy_array`
|
|
82
|
+
- Controller now detects Pagy version and uses appropriate API automatically
|
|
83
|
+
- Changed parameter from `items:` to `limit:` (modern Pagy convention)
|
|
84
|
+
|
|
85
|
+
- **Style Guide Icon Modal Display** - Fixed icons not appearing in modal zoom viewer
|
|
86
|
+
- **Issue**: Icons appeared blank/invisible in modal even though modal opened correctly
|
|
87
|
+
- **Root Cause 1**: Prysm icon had hardcoded `class="w-6 h-6"` instead of using `css_class` parameter
|
|
88
|
+
- **Root Cause 2**: JavaScript used fragile selector `[class*="w-8"]` which failed for icons without that class
|
|
89
|
+
- **Root Cause 3**: ERB template engine tried to evaluate `<%= %>` inside JavaScript string literal
|
|
90
|
+
- **Root Cause 4**: Tailwind classes (`w-64 h-64`) not reliably sizing SVG elements in modal context
|
|
91
|
+
- **Impact**: Modal opened but showed blank/broken content, MissingTemplate errors
|
|
92
|
+
- **Solution**:
|
|
93
|
+
- Updated prysm icon to use proper `css_class` parameter like all other icons
|
|
94
|
+
- Rewrote JavaScript to use robust SVG cloning with `querySelector('svg')`
|
|
95
|
+
- Set explicit width/height styles (256px) instead of Tailwind classes for reliable sizing
|
|
96
|
+
- Properly handle SVG className using `baseVal` property
|
|
97
|
+
- Preserve color classes while removing size classes
|
|
98
|
+
- Escaped ERB delimiters in JavaScript using string concatenation
|
|
99
|
+
|
|
100
|
+
- **Style Guide Modal Display** - Fixed icon and image zoom modal not appearing as overlay
|
|
101
|
+
- **Issue**: Modal was appearing at bottom of page instead of as centered overlay
|
|
102
|
+
- **Root Cause**: Conflicting CSS classes (both `hidden` and `flex`) and inline styles
|
|
103
|
+
- **Solution**: Restructured modal with proper CSS classes and backdrop
|
|
104
|
+
- New modal structure: `.modal-overlay` → `.modal-backdrop` + `.modal-container`
|
|
105
|
+
- Proper fixed positioning with z-index layering
|
|
106
|
+
- Modal backdrop prevents page scrolling when open
|
|
107
|
+
- Smooth fade-in/out transitions
|
|
108
|
+
- Close via button, backdrop click, or ESC key
|
|
109
|
+
|
|
110
|
+
### Added
|
|
111
|
+
- **Style Guide Modal Zoom** - Interactive zoom functionality for icon and image modals
|
|
112
|
+
- **Zoom Controls**: Visible control panel with zoom in, zoom out, and reset buttons
|
|
113
|
+
- **Zoom Range**: 50% to 500% in 25% increments
|
|
114
|
+
- **Mouse Wheel Support**: Scroll to zoom in/out directly on modal content
|
|
115
|
+
- **Pan/Drag**: Click and drag to pan when zoomed in (cursor changes to grab/grabbing)
|
|
116
|
+
- **Keyboard Shortcuts**:
|
|
117
|
+
- `+` or `=` - Zoom in
|
|
118
|
+
- `-` or `_` - Zoom out
|
|
119
|
+
- `0` - Reset to 100%
|
|
120
|
+
- `Esc` - Close modal
|
|
121
|
+
- **Smart Features**:
|
|
122
|
+
- Auto-reset zoom when opening/closing modals
|
|
123
|
+
- Buttons disable at min/max zoom levels
|
|
124
|
+
- Smooth transitions for zoom and pan
|
|
125
|
+
- Zoom level percentage display
|
|
126
|
+
- **New Icons**: Added `minus` and `arrows_pointing_in` icons for zoom controls
|
|
127
|
+
- **CSS Classes**: `.zoom-controls`, `.zoom-control-button`, `.zoomable-wrapper`, `.zoomable-content`
|
|
128
|
+
|
|
129
|
+
- **Secondary Blue Gradient** - New theme-independent cyan-to-blue gradient for all themes
|
|
130
|
+
- CSS variables: `--gradient-secondary-blue-from` (#0891b2) and `--gradient-secondary-blue-to` (#2563eb)
|
|
131
|
+
- Utility class: `.bg-gradient-secondary-blue` for background gradients
|
|
132
|
+
- Available in all themes (purple, green, red × light, dark)
|
|
133
|
+
- Added to style guide with live preview and code examples
|
|
134
|
+
- Usage: `<button class="bg-gradient-secondary-blue">Secondary Blue</button>`
|
|
135
|
+
|
|
136
|
+
- **Navbar Link Color System** - Unified cyan navbar styling across all themes
|
|
137
|
+
- CSS variables: `--navbar-link-color` and `--navbar-link-hover` in all themes
|
|
138
|
+
- Dark modes: Bright cyan (#06b6d4) with lighter hover (#22d3ee)
|
|
139
|
+
- Light modes: Darker cyan (#0891b2) with darker hover (#0e7490) for contrast
|
|
140
|
+
- Utility classes: `.text-navbar-link` and `.hover:text-navbar-link`
|
|
141
|
+
- All navbar links (regular, dropdown, logout) use consistent cyan colors
|
|
142
|
+
- Active links show cyan color with cyan underline
|
|
143
|
+
- Replaces theme-specific accent colors with unified cyan across purple, green, and red themes
|
|
144
|
+
|
|
145
|
+
- **StylesheetHelper Module** - New helper for Propshaft-compatible CSS loading
|
|
146
|
+
- `neon_sakura_stylesheets` helper loads all 18 CSS files in correct order (added loading.css)
|
|
147
|
+
- Proper cascade: themes → utilities → loading → components → forms → pagination
|
|
148
|
+
- Replaces broken `@import` approach with individual `stylesheet_link_tag` calls
|
|
149
|
+
- Available automatically in all views via ActionView integration
|
|
150
|
+
|
|
151
|
+
- **Ouroboros Logo Icon** - New SVG icon depicting a serpent eating its own tail
|
|
152
|
+
- Available via `render_theme_icon("ouroboros", css_class: "w-6 h-6")`
|
|
153
|
+
- Theme-aware coloring with currentColor
|
|
154
|
+
- Includes decorative scales and detailed head/tail design
|
|
155
|
+
|
|
156
|
+
- **Loading Indicators** - Comprehensive loading states and animations (`loading.css`)
|
|
157
|
+
- **Spinners**: Basic, accent, small (16px), and large (48px) variants
|
|
158
|
+
- `.spinner-basic` - Border color spinner
|
|
159
|
+
- `.spinner-accent` - Accent color spinner
|
|
160
|
+
- `.spinner-small` - Compact 16px spinner
|
|
161
|
+
- `.spinner-large` - Large 48px spinner
|
|
162
|
+
- **Progress Bars**: Determinate and indeterminate progress indicators
|
|
163
|
+
- `.progress-bar-container` - Progress bar wrapper
|
|
164
|
+
- `.progress-bar-fill` - Fill with gradient (set width via style)
|
|
165
|
+
- `.progress-bar-indeterminate` - Animated sliding progress bar
|
|
166
|
+
- **Skeleton Loaders**: Placeholder content while loading
|
|
167
|
+
- `.skeleton-text` - Text line placeholder with shimmer animation
|
|
168
|
+
- `.skeleton-avatar` - Circular avatar placeholder
|
|
169
|
+
- **Loading Overlay**: Full-screen loading state (`.loading-overlay`)
|
|
170
|
+
- All loading indicators are theme-aware using CSS custom properties
|
|
171
|
+
|
|
172
|
+
- **Gradient System Enhancements**
|
|
173
|
+
- **Alternative Purple Gradient** - Secondary three-color purple gradient
|
|
174
|
+
- CSS Variables: `--gradient-secondary-start`, `--gradient-secondary-mid`, `--gradient-secondary-end`
|
|
175
|
+
- Colors: Purple (#b038dc) → Blue (#4c3ba5) → Indigo (#393e9c)
|
|
176
|
+
- Utility class: `.bg-gradient-secondary-purple`
|
|
177
|
+
- Available only in purple themes (light and dark)
|
|
178
|
+
- **Navbar Gradient** - Accent to notification gradient (third gradient option)
|
|
179
|
+
- CSS Variables: `--gradient-navbar-from`, `--gradient-navbar-to`
|
|
180
|
+
- Maps to accent color → notification color for each theme
|
|
181
|
+
- Utility class: `.bg-gradient-navbar`
|
|
182
|
+
- Available in all themes:
|
|
183
|
+
- Purple: Purple → Green
|
|
184
|
+
- Red: Red → Green
|
|
185
|
+
- Green: Green → Green
|
|
186
|
+
- **Gradients Section** in Style Guide - Showcases all gradient options with examples
|
|
187
|
+
- Primary gradient (theme-specific button gradients)
|
|
188
|
+
- Navbar gradient (accent to notification)
|
|
189
|
+
- Secondary gradient (purple themes only)
|
|
190
|
+
- Complete CSS variables documentation
|
|
191
|
+
- Visual comparisons and code examples
|
|
192
|
+
|
|
193
|
+
- **Style Guide Feature** - Development/test-only comprehensive UI documentation at `/style-guide`
|
|
194
|
+
- Automatically injected route and navbar link (visible only in dev/test environments)
|
|
195
|
+
- Configurable via `enable_style_guide` (default: true) and `style_guide_navbar_position` (default: :end)
|
|
196
|
+
- Dynamic sections showcasing all components with live previews and code examples:
|
|
197
|
+
- **Icons**: All 94 SVG icons (including ouroboros) with clickable zoom modal and helper usage examples
|
|
198
|
+
- **Images**: All gem images with clickable zoom modal, display and usage instructions
|
|
199
|
+
- **Theme Switcher**: Live theme preview for all 6 themes (green/purple/red × light/dark)
|
|
200
|
+
- **Typography**: Heading styles, text colors, gradients
|
|
201
|
+
- **Colors**: CSS custom property reference with theme-aware color swatches
|
|
202
|
+
- **Gradients**: Primary, navbar, and secondary (purple only) gradient examples with visual comparisons
|
|
203
|
+
- **Buttons**: Submit buttons, primary buttons, icon buttons, link buttons
|
|
204
|
+
- **Forms**: Text inputs, textareas, selects, checkboxes, radio buttons
|
|
205
|
+
- **Cards**: Basic cards, cards with headers, card grids
|
|
206
|
+
- **Badges**: Status badges, outline badges, counter badges, tag badges
|
|
207
|
+
- **Alerts**: Success, error, warning, and info alerts
|
|
208
|
+
- **Loading Indicators**: Spinners, progress bars, skeleton loaders with working animations
|
|
209
|
+
- **Pagination**: Pagy integration examples (configurable via `style_guide_pagy_examples`, graceful error handling)
|
|
210
|
+
- Environment-restricted: Returns 404 in production (route not defined)
|
|
211
|
+
- Comprehensive test coverage with 30+ new tests
|
|
212
|
+
- Helper method: `example_with_code(title, code, &block)` for rendering component examples
|
|
213
|
+
- Navbar auto-injection via engine initializer (configurable position: :start, :end, :before_logout, or integer)
|
|
214
|
+
- **Pagy Configuration**: New `style_guide_pagy_examples` option (default: true)
|
|
215
|
+
- When enabled: Automatically detects Pagy availability and shows working examples
|
|
216
|
+
- When disabled: Hides pagination section entirely
|
|
217
|
+
- Graceful error handling: Shows helpful error message if Pagy installation fails
|
|
218
|
+
- Error messages include configuration instructions to disable examples if Pagy not needed
|
|
219
|
+
|
|
220
|
+
### Changed
|
|
221
|
+
- **Documentation Corrections** - Fixed incorrect Propshaft information in CLAUDE.md and README.md
|
|
222
|
+
- Removed misleading "each @import becomes a separate <link> tag" claims (lines 34, 293, 427)
|
|
223
|
+
- Added correct usage instructions with `neon_sakura_stylesheets` helper
|
|
224
|
+
- Updated "Usage" section with proper Propshaft-compatible code examples
|
|
225
|
+
- Added warning against using `@import "neon_sakura.css"` in application.css (doesn't work with Propshaft)
|
|
226
|
+
|
|
227
|
+
### Migration Guide (CRITICAL for all Propshaft users)
|
|
228
|
+
Apps experiencing missing styles must update their layouts:
|
|
229
|
+
|
|
230
|
+
**Before (BROKEN with Propshaft):**
|
|
231
|
+
```erb
|
|
232
|
+
<%= stylesheet_link_tag "neon_sakura", "data-turbo-track": "reload" %>
|
|
233
|
+
```
|
|
234
|
+
OR
|
|
235
|
+
```css
|
|
236
|
+
/* application.css */
|
|
237
|
+
@import "neon_sakura.css";
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
**After (CORRECT for Propshaft):**
|
|
241
|
+
```erb
|
|
242
|
+
<%# Load neon_sakura stylesheets (Propshaft-compatible) %>
|
|
243
|
+
<%= neon_sakura_stylesheets %>
|
|
244
|
+
|
|
245
|
+
<%# Load your app-specific styles %>
|
|
246
|
+
<%= stylesheet_link_tag 'application', 'data-turbo-track': 'reload' %>
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## [0.1.2] - 2025-12-21
|
|
250
|
+
|
|
251
|
+
### Changed
|
|
252
|
+
- **CSS Architecture Refactored**: Split monolithic `base.css` into 18 modular files with flat structure
|
|
253
|
+
- Created 4 theme files (`theme-default.css`, `theme-purple.css`, `theme-green.css`, `theme-red.css`)
|
|
254
|
+
- Created 10 utility files (`utility-reset.css`, `utility-layout.css`, `utility-sizing.css`, `utility-spacing.css`, `utility-colors.css`, `utility-borders.css`, `utility-typography.css`, `utility-gradients.css`, `utility-effects.css`, `utility-responsive.css`)
|
|
255
|
+
- Each theme file contains both light and dark variants for easier maintenance
|
|
256
|
+
- **Flat file structure** in root `app/assets/stylesheets/` (no subdirectories) for Propshaft compatibility
|
|
257
|
+
- Improved discoverability and maintainability with descriptive file naming
|
|
258
|
+
- **Color Consistency**: Replaced all remaining hardcoded colors with CSS variables
|
|
259
|
+
- Gradient utilities now use theme-aware variables instead of hardcoded hex colors
|
|
260
|
+
- Button text colors now use `var(--color-text-primary)` in all files
|
|
261
|
+
- Focus ring colors updated to use CSS variables
|
|
262
|
+
- **Documentation**: Updated CLAUDE.md and README.md with new CSS file structure and contribution guidelines
|
|
263
|
+
- **CSS Linting**: Added Stylelint with industry-standard configuration
|
|
264
|
+
- Created package.json with Stylelint dependencies
|
|
265
|
+
- Added .stylelintrc.json configuration file
|
|
266
|
+
- Added .stylelintignore for vendor files
|
|
267
|
+
- Integrated Stylelint into pre-commit git hook
|
|
268
|
+
- Created GitHub Actions workflow for automated linting (RuboCop, Stylelint, Brakeman, Bundle Audit)
|
|
269
|
+
- Fixed duplicate `.pagy-nav` selector in components.css
|
|
270
|
+
- **Asset Pipeline Fix**: Restructured to flat file architecture for Propshaft compatibility
|
|
271
|
+
- **Critical fix**: Moved all CSS files to root `app/assets/stylesheets/` directory (removed subdirectories)
|
|
272
|
+
- Propshaft serves all assets from flat `/assets/` URL path; subdirectory `@import` statements caused 404 errors
|
|
273
|
+
- `base.css` imports all theme and utility files (backward compatibility for apps loading base.css directly)
|
|
274
|
+
- `neon_sakura.css` imports all theme and utility files plus components (complete manifest)
|
|
275
|
+
- Each `@import` becomes a separate `<link>` tag served by Propshaft
|
|
276
|
+
- **Breaking for subdirectory references**: Any custom CSS importing via subdirectory paths must update to flat file names
|
|
277
|
+
- Fixed 404 errors: `/assets/themes/purple.css` → `/assets/theme-purple.css`
|
|
278
|
+
|
|
279
|
+
### Fixed
|
|
280
|
+
- Gradient utilities now properly adapt to current theme (green themes show green gradients, purple themes show purple gradients)
|
|
281
|
+
- All components now fully support theme switching without hardcoded color values
|
|
282
|
+
|
|
283
|
+
### Migration Guide
|
|
284
|
+
1. Update Gemfile: `gem 'neon_sakura', '~> 0.1.2'`
|
|
285
|
+
2. Run `bundle update neon_sakura`
|
|
286
|
+
3. **No application changes required** - the refactoring is fully backward compatible
|
|
287
|
+
4. The new modular structure only affects gem development, not consuming applications
|
|
288
|
+
|
|
289
|
+
### Backward Compatibility
|
|
290
|
+
- **100% backward compatible** - all existing applications continue to work without changes
|
|
291
|
+
- `base.css` is now a manifest file that imports all theme and utility modules
|
|
292
|
+
- No changes to utility class names or component styles
|
|
293
|
+
- CSS cascade order preserved
|
|
294
|
+
|
|
295
|
+
## [0.1.1] - 2025-12-20
|
|
296
|
+
|
|
297
|
+
### Added
|
|
298
|
+
- **406 Not Acceptable error page** - Added custom error page with helpful message for browser compatibility issues
|
|
299
|
+
- **Multi-theme support**: 6 built-in themes (Green Light/Dark, Purple Light/Dark, Red Light/Dark)
|
|
300
|
+
- **Theme switcher component** (`shared/theme_switcher`) with 3 modes:
|
|
301
|
+
- Disabled mode (1 theme): Shows current theme, button disabled
|
|
302
|
+
- Toggle mode (2 themes): Simple moon/sun toggle button
|
|
303
|
+
- Dropdown mode (3+ themes): Dropdown menu with checkmarks on current theme
|
|
304
|
+
- **Theme configuration API**: Configure `default_theme`, `available_themes`, `enable_theme_persistence`, `theme_api_endpoint`
|
|
305
|
+
- **Theme persistence**: localStorage-based with optional backend API support
|
|
306
|
+
- **Theme Helper module** (`NeonSakura::ThemeHelper`) for server-side theme detection
|
|
307
|
+
- **Theme Importer** (`NeonSakura::ThemeImporter`) for importing Bootstrap, Material UI, and custom themes
|
|
308
|
+
- **Theme mapping system**: YAML configuration (`config/theme_mappings.yml`) for framework theme conversion
|
|
309
|
+
- **Reusable dropdown.js module**: Extracted from navbar for use across components
|
|
310
|
+
- **New icons**: `sun`, `moon`, `palette`, `prysm` (prys-m logo with two triangles design)
|
|
311
|
+
- **Icon Helper module** (`NeonSakura::IconHelper`) with methods for icon management:
|
|
312
|
+
- `render_icon(name, options = {})` - Renders an icon partial with CSS class, aria-hidden, and aria-label options
|
|
313
|
+
- `available_icons` - Returns array of all available icon names
|
|
314
|
+
- `icon_exists?(name)` - Checks if an icon exists
|
|
315
|
+
- `render_icon_list(icon_names, options = {})` - Renders multiple icons in a container with custom styling
|
|
316
|
+
- **Theme Helper icon rendering** (`render_theme_icon`) - Theme-aware icon rendering method in ThemeHelper
|
|
317
|
+
- **Bootstrap compatibility CSS** (`compat/bootstrap.css`): Optional class aliases for gradual migration
|
|
318
|
+
- **Theme switching JavaScript** (`theme_switcher.js`): Handles theme switching, localStorage, cookies, and optional backend sync
|
|
319
|
+
|
|
320
|
+
### Changed
|
|
321
|
+
- **CSS refactored to use custom properties**: All hardcoded colors replaced with `var(--color-*)` references
|
|
322
|
+
- base.css: All utility classes now use CSS variables for colors
|
|
323
|
+
- components.css: All component styles now use CSS variables for colors
|
|
324
|
+
- forms.css: All form styles now use CSS variables for colors and gradients
|
|
325
|
+
- Base.css now uses CSS custom properties with 4 theme variants via `data-theme-name` and `data-theme-mode` attributes
|
|
326
|
+
- Dropdown JavaScript extracted to separate tested module for reusability
|
|
327
|
+
- **Default configuration**: All 4 themes available by default in new installations
|
|
328
|
+
- Color system now uses semantic variables: `--color-text-primary`, `--color-background`, `--color-accent`, etc.
|
|
329
|
+
- Intermediate color shades now use `color-mix()` function for smooth transitions
|
|
330
|
+
- **Gradient system**: Added `--gradient-from`, `--gradient-to`, `--gradient-from-hover`, `--gradient-to-hover` variables for theme-configurable button gradients
|
|
331
|
+
- Green themes: Green to cyan gradients (#10b981 → #06b6d4)
|
|
332
|
+
- Purple themes: Blue to purple gradients (#2563eb → #9333ea)
|
|
333
|
+
- Red themes: Red to orange gradients (#dc2626 → #f97316)
|
|
334
|
+
- **Text gradient system**: Added `--text-gradient-from`, `--text-gradient-to` variables for theme-configurable heading and link gradients
|
|
335
|
+
- Each theme has color-appropriate text gradients for headings
|
|
336
|
+
- **Warning color**: Added `--color-warning` variable for consistent warning colors across themes
|
|
337
|
+
- Mission Control navbar now synchronized with main navbar styling and includes theme selector
|
|
338
|
+
- **Red themes**: Added 2 new themes (Red Light and Red Dark) with red-to-orange color scheme
|
|
339
|
+
|
|
340
|
+
### Fixed
|
|
341
|
+
- Search button text visibility in light theme (now uses white text)
|
|
342
|
+
- Advanced search toggle button now uses theme-configurable gradients instead of hardcoded cyan/blue
|
|
343
|
+
- Input submit buttons now use theme-configurable gradients instead of hardcoded purple
|
|
344
|
+
- Heading and link gradients now match theme colors (green for green themes, purple/blue for purple themes)
|
|
345
|
+
- Green themes now use green gradients throughout instead of purple/blue
|
|
346
|
+
- Navbar link colors now properly show white by default with cyan hover state
|
|
347
|
+
- Theme selector dropdown now appears in Mission Control navbar Tools menu
|
|
348
|
+
- Dropdown event listeners no longer duplicate on re-initialization
|
|
349
|
+
- **Navbar dropdown menus now work correctly after Turbo page navigation** - removed blocking initialization guard that prevented dropdowns from re-initializing on subsequent page loads
|
|
350
|
+
- **Pagy pagination now uses pagy_input_nav_js for responsive design** - Fastest! Combines navigation and info in minimum space using Pagy's built-in JavaScript navigation with input field for direct page jumping.
|
|
351
|
+
- **Download button text color** - Changed from mixed accent color to solid white (#ffffff) for better contrast and readability on gradient backgrounds
|
|
352
|
+
|
|
353
|
+
### Migration Guide
|
|
354
|
+
1. Update Gemfile: `gem 'neon_sakura', '~> 0.1.1'`
|
|
355
|
+
2. Run `bundle update neon_sakura`
|
|
356
|
+
3. **IMPORTANT**: Mount the engine in `config/routes.rb`:
|
|
357
|
+
```ruby
|
|
358
|
+
Rails.application.routes.draw do
|
|
359
|
+
mount NeonSakura::Engine => "/", as: "neon_sakura"
|
|
360
|
+
# ... rest of your routes
|
|
361
|
+
end
|
|
362
|
+
```
|
|
363
|
+
4. **For responsive pagination** (recommended):
|
|
364
|
+
- Enable pagy extra in `config/initializers/pagy.rb`:
|
|
365
|
+
```ruby
|
|
366
|
+
require 'pagy/extras/input_nav_js'
|
|
367
|
+
```
|
|
368
|
+
- Add pagy to `config/importmap.rb`:
|
|
369
|
+
```ruby
|
|
370
|
+
pin "pagy", to: "https://cdn.jsdelivr.net/npm/pagy@9.3.3/javascripts/pagy.min.js"
|
|
371
|
+
```
|
|
372
|
+
- Import in `app/javascript/application.js`:
|
|
373
|
+
```javascript
|
|
374
|
+
import "pagy"
|
|
375
|
+
```
|
|
376
|
+
- Replace `pagy_nav` or `pagy_nav_search` with `pagy_input_nav_js` in views
|
|
377
|
+
3. **Optional - Enable theme switching**:
|
|
378
|
+
- Add to `config/initializers/neon_sakura.rb`:
|
|
379
|
+
```ruby
|
|
380
|
+
config.available_themes = [
|
|
381
|
+
{ name: "green", mode: "light", label: "Green Light" },
|
|
382
|
+
{ name: "green", mode: "dark", label: "Green Dark" },
|
|
383
|
+
{ name: "purple", mode: "light", label: "Purple Light" },
|
|
384
|
+
{ name: "purple", mode: "dark", label: "Purple Dark" }
|
|
385
|
+
]
|
|
386
|
+
config.default_theme = { name: "purple", mode: "dark" } # Optional, defaults to purple-dark
|
|
387
|
+
```
|
|
388
|
+
- Add theme switcher to navbar: `<%= render "shared/theme_switcher" %>`
|
|
389
|
+
4. **Optional - Database persistence**:
|
|
390
|
+
- Add migration: `rails g migration AddThemeToUsers theme_name:string theme_mode:string`
|
|
391
|
+
- Configure endpoint: `config.theme_api_endpoint = "/settings/theme"`
|
|
392
|
+
5. **Optional - Import external themes**:
|
|
393
|
+
- Use `NeonSakura::ThemeImporter.from_bootstrap(vars)` or `.from_material_ui(vars)`
|
|
394
|
+
- Use Bootstrap compatibility CSS: `@import "neon_sakura/compat/bootstrap.css"` (optional)
|
|
395
|
+
|
|
396
|
+
### Backward Compatibility
|
|
397
|
+
- Existing apps continue to work without changes (defaults to "purple-dark" theme)
|
|
398
|
+
- All utility classes maintain their original names
|
|
399
|
+
- CSS variables have sensible fallbacks
|
|
400
|
+
- No breaking changes to existing APIs
|
|
401
|
+
|
|
402
|
+
## [0.1.0] - 2025-12-20
|
|
403
|
+
|
|
404
|
+
### Added
|
|
405
|
+
- Extracted Artemis navigation bar component as reusable `shared/navbar` partial
|
|
406
|
+
- Configurable navigation positioning via `nav_position` (:none, :top, :under_heading)
|
|
407
|
+
- Support for three link types: simple links, dropdown menus, and form buttons
|
|
408
|
+
- Block/yield support for custom content in navbar (e.g., prys-m's Quick Import form)
|
|
409
|
+
- NavbarHelper module with utility methods for active state detection and condition evaluation
|
|
410
|
+
- Icon support for all navigation links via `icon` parameter
|
|
411
|
+
- Conditional link rendering via `condition` parameter for dynamic navigation
|
|
412
|
+
- Navbar JavaScript module (navbar.js) for dropdown functionality using vanilla JS
|
|
413
|
+
- Configuration options: `nav_position`, `app_icon`, `show_search`
|
|
414
|
+
- Active state highlighting for current page navigation links with `nav-active` class
|
|
415
|
+
- Responsive navigation design with mobile support
|
|
416
|
+
|
|
417
|
+
### Changed
|
|
418
|
+
- **BREAKING**: Removed `mission_control_nav_links` configuration option
|
|
419
|
+
- Migration: Use `nav_links` instead for unified navigation across all layouts
|
|
420
|
+
- Enhanced `nav_links` schema to support:
|
|
421
|
+
- `type` field for link, dropdown, or button types
|
|
422
|
+
- `icon` field for icon partial names
|
|
423
|
+
- `condition` field for conditional rendering with Ruby code evaluation
|
|
424
|
+
- `active_paths` array for additional path matching
|
|
425
|
+
- `method` field for button HTTP methods (:get, :post, :patch, :delete)
|
|
426
|
+
- `target` field for link targets (e.g., "_blank")
|
|
427
|
+
- `aria_label` field for custom accessibility labels
|
|
428
|
+
- Dropdown functionality now uses gem's navbar.js instead of requiring Stimulus
|
|
429
|
+
- Navigation styling consolidated in components.css (already present)
|
|
430
|
+
|
|
431
|
+
### Fixed
|
|
432
|
+
- Navigation dropdown z-index for proper layering above other content
|
|
433
|
+
- Active state detection now supports multiple paths via `active_paths` array
|
|
434
|
+
- Logout button styling properly supports Rails form button helpers
|
|
435
|
+
|
|
436
|
+
### Removed
|
|
437
|
+
- `mission_control_nav_links` configuration option (use `nav_links` instead)
|
|
438
|
+
|
|
439
|
+
### Migration Guide
|
|
440
|
+
1. Update Gemfile: `gem 'neon_sakura', '~> 0.1.0'`
|
|
441
|
+
2. Run `bundle update neon_sakura`
|
|
442
|
+
3. Replace `render "shared/nav"` with `render "shared/navbar"` in views
|
|
443
|
+
4. Update configuration in `config/initializers/neon_sakura.rb`:
|
|
444
|
+
- Rename `mission_control_nav_links` to `nav_links`
|
|
445
|
+
- Add `nav_position` (options: `:none`, `:top`, `:under_heading`)
|
|
446
|
+
- Enhance nav_links with new schema (type, icon, condition, etc.)
|
|
447
|
+
5. Remove application-specific navbar partials (now provided by gem)
|
|
448
|
+
6. Remove Stimulus dropdown controller if only used for navbar (now handled by gem)
|
|
449
|
+
|
|
450
|
+
## [0.0.9] - 2025-12-18
|
|
451
|
+
|
|
452
|
+
### Added
|
|
453
|
+
- Configurable Mission Control navigation via `mission_control_nav_links` configuration option
|
|
454
|
+
- Support for flat links, dropdown menus, and form buttons in Mission Control navigation
|
|
455
|
+
- Navigation link types: "link", "dropdown", and "button"
|
|
456
|
+
- Automatic "Back to {app_name}" link and "Start Auto-refresh" button displayed inline below custom navigation
|
|
457
|
+
- Comprehensive Mission Control navigation documentation in README.md
|
|
458
|
+
- Remove duplicated back button
|
|
459
|
+
|
|
460
|
+
### Changed
|
|
461
|
+
- Mission Control layout now uses configured navigation instead of hardcoded Artemis navigation
|
|
462
|
+
- When `mission_control_nav_links` is nil or empty, the custom navigation is hidden (falls back to default Mission Control navigation)
|
|
463
|
+
- `app_name` configuration now used for "Back to {app_name}" link
|
|
464
|
+
- "Start Auto-refresh" button now appears inline with "Back to" link, not in the navigation bar
|
|
465
|
+
- Icon names in documentation updated to use underscores (e.g., `arrow_left` instead of `arrow-left`) to match actual file names
|
|
466
|
+
|
|
467
|
+
### Fixed
|
|
468
|
+
- Mission Control auto-refresh button positioning - now inline with "Back to" link instead of in navigation bar
|
|
469
|
+
- Hardcoded navigation that prevented customization for different applications
|
|
470
|
+
- Icon naming inconsistencies in documentation (hyphens vs underscores)
|
|
471
|
+
|
|
472
|
+
## [0.0.8] - 2025-12-17
|
|
473
|
+
|
|
474
|
+
### Changed
|
|
475
|
+
- **BREAKING**: Converted all icons to inline `.svg.erb` partials with `currentColor` support
|
|
476
|
+
- Icons now properly work with Tailwind `text-*` color classes
|
|
477
|
+
- Simplified usage: `<%= render 'shared/icons/clock', css_class: 'w-6 h-6 text-green-400' %>`
|
|
478
|
+
- Removed all external SVG files (now inline partials only)
|
|
479
|
+
- Updated spinner to use CSS animation
|
|
480
|
+
|
|
481
|
+
### Fixed
|
|
482
|
+
- Multi-colored icons now work correctly in consuming applications
|
|
483
|
+
- Icons properly inherit colors from CSS classes
|
|
484
|
+
|
|
485
|
+
## [0.0.5 - 0.0.7] - 2025-12-17
|
|
486
|
+
- Extracted all embedded SVG icons to external files
|
|
487
|
+
- Icon SVGs use explicit cyan color (#7DD3FC) for Propshaft compatibility
|
|
488
|
+
- Converted spinner from SVG to animated GIF
|
|
489
|
+
- Updated 87 icon view partials to use image_tag
|
|
490
|
+
- Moved icons to root app/assets/images/ directory
|
|
491
|
+
- Resolve issues loading assets
|
|
492
|
+
|
|
493
|
+
### Changed
|
|
494
|
+
- **BREAKING**: Extracted all embedded SVG icons to external files in `app/assets/images/`
|
|
495
|
+
- All icon SVGs now use explicit cyan color (#7DD3FC) instead of `currentColor` for compatibility with Propshaft
|
|
496
|
+
- Converted spinner from SVG to animated GIF for better visual feedback
|
|
497
|
+
- Updated all 87 icon view partials to use `image_tag` instead of embedded SVG code
|
|
498
|
+
- Moved all icon files from `app/assets/images/icons/` to root `app/assets/images/` for Propshaft compatibility
|
|
499
|
+
|
|
500
|
+
### Fixed
|
|
501
|
+
- Fixed `chevron_down.svg` broken SVG (removed embedded ERB code)
|
|
502
|
+
- Fixed `server_error.svg` X visibility by changing color to red (#EF4444)
|
|
503
|
+
- Added explicit Propshaft asset paths configuration in engine initializer
|
|
504
|
+
- All icon SVGs now have proper `width="24" height="24"` attributes for correct rendering
|
|
505
|
+
|
|
506
|
+
### Updated
|
|
507
|
+
- Updated artemis application spinner usage to remove `animate-spin` class (no longer needed with GIF)
|
|
508
|
+
|
|
509
|
+
## [0.0.4] - 2025-12-16
|
|
510
|
+
|
|
511
|
+
### Added
|
|
512
|
+
- Progress bar component (`.progress-bar-container` and `.progress-bar`)
|
|
513
|
+
- Support for dynamic progress width via CSS custom property `--progress-width`
|
|
514
|
+
- Gradient styling for progress bars (cyan-500 to blue-500)
|
|
515
|
+
- SVGs from Dragonfly archived project
|
|
516
|
+
- Cherry blossom tree icon in both PNG and SVG formats (`cherry_blossom_tree.png` and `cherry_blossom_tree.svg`) with corresponding view partial
|
|
517
|
+
- Add in Prys-m images
|
|
518
|
+
- Update mission control ui to have auto-refresh
|
|
519
|
+
- Minor workflow fix
|
|
520
|
+
|
|
521
|
+
## [0.0.3] - 2025-12-10
|
|
522
|
+
|
|
523
|
+
### Added
|
|
524
|
+
- ErrorsController for handling common HTTP error codes (400, 401, 403, 404, 422, 500, 503)
|
|
525
|
+
- ErrorsHelper with route helper support for error pages
|
|
526
|
+
- Error view template with dark-themed styling and icon support
|
|
527
|
+
- Automatic error page routes via Rails engine (can be disabled via configuration)
|
|
528
|
+
- Configuration option `enable_error_pages` to control automatic error routes (default: true)
|
|
529
|
+
- Comprehensive error controller and helper tests
|
|
530
|
+
- Configuration tests for new `enable_error_pages` option
|
|
531
|
+
- Support for both HTML and JSON error responses
|
|
532
|
+
- Custom error messages and details via request parameters
|
|
533
|
+
- Comprehensive configuration documentation in README.md
|
|
534
|
+
- Documentation for automatic error routes and configuration in README.md
|
|
535
|
+
|
|
536
|
+
## [0.0.2] - 2025-12-10
|
|
537
|
+
### Bugfixes
|
|
538
|
+
- Resolved name-spacing issues
|
|
539
|
+
|
|
540
|
+
## [0.0.1] - 2025-12-09
|
|
541
|
+
|
|
542
|
+
### Added
|
|
543
|
+
- Initial release of neon_sakura gem
|
|
544
|
+
- Extracted styling and theming components from Artemis Rails application
|
|
545
|
+
- Base CSS styles with utility classes, layout, typography, and colors
|
|
546
|
+
- Component CSS for UI elements (navigation, cards, badges, buttons, tables, alerts)
|
|
547
|
+
- Form styling CSS
|
|
548
|
+
- Pagination styles (pagy-tailwind.css)
|
|
549
|
+
- Mission Control layout template
|
|
550
|
+
- Error page layout template
|
|
551
|
+
- SVG icon components (29 files)
|
|
552
|
+
- Site footer component
|
|
553
|
+
- Vanilla JavaScript dropdown functionality
|
|
554
|
+
- Proper gem structure with lib/, app/, and asset directories
|
|
555
|
+
|
|
556
|
+
### Changed
|
|
557
|
+
- Updated gemspec with proper metadata and author details
|
|
558
|
+
- Configured gem for Rails 8+ compatibility
|
|
559
|
+
- Set up proper asset pipeline integration
|
|
560
|
+
- Updated AI reviewer configuration to use Neon Sakura gem project context
|
|
561
|
+
- Updated AI reviewer build system prompt for Neon Sakura gem project
|
|
562
|
+
- Updated CLAUDE.md to include detailed project guidelines for AI reviewer
|
|
563
|
+
|
|
564
|
+
### Fixed
|
|
565
|
+
- Ensured all CSS imports work correctly in gem context
|
|
566
|
+
- Verified JavaScript components work with Propshaft asset pipeline
|
|
567
|
+
|
|
568
|
+
[0.0.1]: https://github.com/trex22/neon_sakura/releases/tag/v0.0.1
|