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
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<%# Icon: Rocket (launch/fast action) %>
|
|
2
|
+
<%# Source: https://heroicons.com/ %>
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg"
|
|
4
|
+
fill="none"
|
|
5
|
+
viewBox="0 0 24 24"
|
|
6
|
+
stroke-width="1.5"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
class="<%= css_class %>">
|
|
9
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M15.59 14.37a6 6 0 0 1-5.84 7.38v-4.8m5.84-2.58a14.98 14.98 0 0 0 6.16-12.12A14.98 14.98 0 0 0 9.631 8.41m5.96 5.96a14.926 14.926 0 0 1-5.841 2.58m-.119-8.54a6 6 0 0 0-7.381 5.84h4.8m2.581-5.84a14.927 14.927 0 0 0-2.58 5.84m2.699 2.7c-.103.021-.207.041-.311.06a15.09 15.09 0 0 1-2.448-2.448 14.9 14.9 0 0 1 .06-.312m-2.24 2.39a4.493 4.493 0 0 0-1.757 4.306 4.493 4.493 0 0 0 4.306-1.758M16.5 9a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Z" />
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 5c7.18 0 13 5.82 13 13M6 11a7 7 0 017 7m-6 0a1 1 0 11-2 0 1 1 0 012 0z"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7H5a2 2 0 00-2 2v9a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-3m-1 4l-3 3m0 0l-3-3m3 3V4"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<%# Icon: Search Minus (zoom out/reduce magnification) %>
|
|
2
|
+
<%# Source: https://heroicons.com/ %>
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg"
|
|
4
|
+
fill="none"
|
|
5
|
+
viewBox="0 0 24 24"
|
|
6
|
+
stroke-width="1.5"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
class="<%= css_class %>">
|
|
9
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM13.5 10.5h-6" />
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<%# Icon: Search Plus (zoom in/magnify) %>
|
|
2
|
+
<%# Source: https://heroicons.com/ %>
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg"
|
|
4
|
+
fill="none"
|
|
5
|
+
viewBox="0 0 24 24"
|
|
6
|
+
stroke-width="1.5"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
class="<%= css_class %>">
|
|
9
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM10.5 7.5v6m3-3h-6" />
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<rect x="3" y="4" width="18" height="5" rx="1" stroke-width="2"></rect>
|
|
3
|
+
<rect x="3" y="12" width="18" height="5" rx="1" stroke-width="2"></rect>
|
|
4
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 7h.01M7 15h.01"></path>
|
|
5
|
+
<path stroke="#EF4444" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M17 7l-4 4m0-4l4 4"></path>
|
|
6
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 16l-4-4m0 0l4-4m-4 4h14m-5 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h7a3 3 0 013 3v1"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %> animate-spin" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
|
3
|
+
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<%# Icon: Store (shop/storefront) %>
|
|
2
|
+
<%# Source: https://heroicons.com/ %>
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg"
|
|
4
|
+
fill="none"
|
|
5
|
+
viewBox="0 0 24 24"
|
|
6
|
+
stroke-width="1.5"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
class="<%= css_class %>">
|
|
9
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M13.5 21v-7.5a.75.75 0 0 1 .75-.75h3a.75.75 0 0 1 .75.75V21m-4.5 0H2.36m11.14 0H18m0 0h3.64m-1.39 0V9.349M3.75 21V9.349m0 0a3.001 3.001 0 0 0 3.75-.615A2.993 2.993 0 0 0 9.75 9.75c.896 0 1.7-.393 2.25-1.016a2.993 2.993 0 0 0 2.25 1.016c.896 0 1.7-.393 2.25-1.015a3.001 3.001 0 0 0 3.75.614m-16.5 0a3.004 3.004 0 0 1-.621-4.72l1.189-1.19A1.5 1.5 0 0 1 3.129 3h17.74a1.5 1.5 0 0 1 1.061.44l1.19 1.189a3 3 0 0 1-.621 4.72M6.75 18h3.75a.75.75 0 0 0 .75-.75V13.5a.75.75 0 0 0-.75-.75H6.75a.75.75 0 0 0-.75.75v3.75c0 .414.336.75.75.75Z" />
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 10h18M3 14h18m-9-4v8m-7 0h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%# Icon: Tags (multiple tags/labels) %>
|
|
2
|
+
<%# Source: https://heroicons.com/ - tag %>
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg"
|
|
4
|
+
fill="none"
|
|
5
|
+
viewBox="0 0 24 24"
|
|
6
|
+
stroke-width="1.5"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
class="<%= css_class %>">
|
|
9
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z" />
|
|
10
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M6 6h.008v.008H6V6Z" />
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"></path>
|
|
3
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 10h10a8 8 0 018 8v2M3 10l6 6m-6-6l6-6"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<%# Icon: User Circle (User Profile Circle) %>
|
|
2
|
+
<%# Source: https://heroicons.com/ (user-circle) %>
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg"
|
|
4
|
+
fill="none"
|
|
5
|
+
viewBox="0 0 24 24"
|
|
6
|
+
stroke-width="1.5"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
class="<%= css_class %>">
|
|
9
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z" />
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<%# Icon: User Plus (Add User) %>
|
|
2
|
+
<%# Source: https://heroicons.com/ (user-plus) %>
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg"
|
|
4
|
+
fill="none"
|
|
5
|
+
viewBox="0 0 24 24"
|
|
6
|
+
stroke-width="1.5"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
class="<%= css_class %>">
|
|
9
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M19 7.5v3m0 0v3m0-3h3m-3 0h-3m-2.25-4.125a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zM4 19.235v-.11a6.375 6.375 0 0112.75 0v.109A12.318 12.318 0 0110.374 21c-2.331 0-4.512-.645-6.374-1.766z" />
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg class="<%= local_assigns[:css_class] || 'w-4 h-4' %>" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="<%= local_assigns[:aria_hidden] || 'true' %>">
|
|
2
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z"></path>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%# Icon: Wrench (tools/settings/configuration) %>
|
|
2
|
+
<%# Source: https://heroicons.com/ %>
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg"
|
|
4
|
+
fill="none"
|
|
5
|
+
viewBox="0 0 24 24"
|
|
6
|
+
stroke-width="1.5"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
class="<%= css_class %>">
|
|
9
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M21.75 6.75a4.5 4.5 0 0 1-4.884 4.484c-1.076-.091-2.264.071-2.95.904l-7.152 8.684a2.548 2.548 0 1 1-3.586-3.586l8.684-7.152c.833-.686.995-1.874.904-2.95a4.5 4.5 0 0 1 6.336-4.486l-3.276 3.276a3.004 3.004 0 0 0 2.25 2.25l3.276-3.276c.256.565.398 1.192.398 1.852Z" />
|
|
10
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M4.867 19.125h.008v.008h-.008v-.008Z" />
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
<div class="max-w-7xl mx-auto">
|
|
2
|
+
<!-- Header -->
|
|
3
|
+
<%= render "style_guide/sections/header" %>
|
|
4
|
+
|
|
5
|
+
<div class="section-divider"></div>
|
|
6
|
+
|
|
7
|
+
<!-- Theme Switcher Section -->
|
|
8
|
+
<%= render "style_guide/sections/theme_switcher" %>
|
|
9
|
+
|
|
10
|
+
<!-- Icons Section -->
|
|
11
|
+
<%= render "style_guide/sections/icons" %>
|
|
12
|
+
|
|
13
|
+
<div class="section-divider"></div>
|
|
14
|
+
|
|
15
|
+
<!-- Images Section -->
|
|
16
|
+
<%= render "style_guide/sections/images" %>
|
|
17
|
+
|
|
18
|
+
<div class="section-divider"></div>
|
|
19
|
+
|
|
20
|
+
<!-- Typography Section -->
|
|
21
|
+
<%= render "style_guide/sections/typography" %>
|
|
22
|
+
|
|
23
|
+
<div class="section-divider"></div>
|
|
24
|
+
|
|
25
|
+
<!-- Colors Section -->
|
|
26
|
+
<%= render "style_guide/sections/colors" %>
|
|
27
|
+
|
|
28
|
+
<div class="section-divider"></div>
|
|
29
|
+
|
|
30
|
+
<!-- Gradients Section -->
|
|
31
|
+
<%= render "style_guide/sections/gradients" %>
|
|
32
|
+
|
|
33
|
+
<div class="section-divider"></div>
|
|
34
|
+
|
|
35
|
+
<!-- Buttons Section -->
|
|
36
|
+
<%= render "style_guide/sections/buttons" %>
|
|
37
|
+
|
|
38
|
+
<div class="section-divider"></div>
|
|
39
|
+
|
|
40
|
+
<!-- Forms Section -->
|
|
41
|
+
<%= render "style_guide/sections/forms" %>
|
|
42
|
+
|
|
43
|
+
<div class="section-divider"></div>
|
|
44
|
+
|
|
45
|
+
<!-- File Upload Section -->
|
|
46
|
+
<%= render "style_guide/sections/file_upload" %>
|
|
47
|
+
|
|
48
|
+
<div class="section-divider"></div>
|
|
49
|
+
|
|
50
|
+
<!-- Profile Components Section -->
|
|
51
|
+
<%= render "style_guide/sections/profile_components" %>
|
|
52
|
+
|
|
53
|
+
<div class="section-divider"></div>
|
|
54
|
+
|
|
55
|
+
<!-- Cards Section -->
|
|
56
|
+
<%= render "style_guide/sections/cards" %>
|
|
57
|
+
|
|
58
|
+
<div class="section-divider"></div>
|
|
59
|
+
|
|
60
|
+
<!-- Badges Section -->
|
|
61
|
+
<%= render "style_guide/sections/badges" %>
|
|
62
|
+
|
|
63
|
+
<div class="section-divider"></div>
|
|
64
|
+
|
|
65
|
+
<!-- Alerts Section -->
|
|
66
|
+
<%= render "style_guide/sections/alerts" %>
|
|
67
|
+
|
|
68
|
+
<div class="section-divider"></div>
|
|
69
|
+
|
|
70
|
+
<!-- Loading Indicators Section -->
|
|
71
|
+
<%= render "style_guide/sections/loading" %>
|
|
72
|
+
|
|
73
|
+
<div class="section-divider"></div>
|
|
74
|
+
|
|
75
|
+
<!-- Pagination Section -->
|
|
76
|
+
<%= render "style_guide/sections/pagination" %>
|
|
77
|
+
</div>
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<section id="alerts">
|
|
2
|
+
<h2 class="text-3xl font-bold mb-4">Alerts</h2>
|
|
3
|
+
<p class="text-text-secondary mb-6">
|
|
4
|
+
Alert messages for different notification types.
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<!-- Success Alert -->
|
|
8
|
+
<div class="code-example-wrapper">
|
|
9
|
+
<div class="code-example-preview">
|
|
10
|
+
<h3 class="text-xl font-semibold mb-4">Success Alert</h3>
|
|
11
|
+
<div class="p-4 rounded-lg bg-notification bg-opacity-10 border border-notification">
|
|
12
|
+
<div class="flex items-center gap-3">
|
|
13
|
+
<%= render_theme_icon("check_circle", css_class: "w-5 h-5 text-notification flex-shrink-0") %>
|
|
14
|
+
<div class="flex-1">
|
|
15
|
+
<h4 class="font-semibold text-notification mb-1">Success!</h4>
|
|
16
|
+
<p class="text-sm text-text-secondary">Your operation completed successfully.</p>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="code-example-code">
|
|
22
|
+
<pre><code><div class="p-4 rounded-lg bg-notification bg-opacity-10 border border-notification">
|
|
23
|
+
<div class="flex items-center gap-3">
|
|
24
|
+
<%= render_theme_icon("check_circle", css_class: "w-5 h-5 text-notification") %>
|
|
25
|
+
<div>
|
|
26
|
+
<h4 class="font-semibold text-notification mb-1">Success!</h4>
|
|
27
|
+
<p class="text-sm">Message</p>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div></code></pre>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<!-- Error Alert -->
|
|
35
|
+
<div class="code-example-wrapper">
|
|
36
|
+
<div class="code-example-preview">
|
|
37
|
+
<h3 class="text-xl font-semibold mb-4">Error Alert</h3>
|
|
38
|
+
<div class="p-4 rounded-lg bg-alert bg-opacity-10 border border-alert">
|
|
39
|
+
<div class="flex items-center gap-3">
|
|
40
|
+
<%= render_theme_icon("alert_circle", css_class: "w-5 h-5 text-alert flex-shrink-0") %>
|
|
41
|
+
<div class="flex-1">
|
|
42
|
+
<h4 class="font-semibold text-alert mb-1">Error!</h4>
|
|
43
|
+
<p class="text-sm text-text-secondary">An error occurred. Please try again.</p>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="code-example-code">
|
|
49
|
+
<pre><code><div class="p-4 rounded-lg bg-alert bg-opacity-10 border border-alert">
|
|
50
|
+
<div class="flex items-center gap-3">
|
|
51
|
+
<%= render_theme_icon("alert_circle", css_class: "w-5 h-5 text-alert") %>
|
|
52
|
+
<div>
|
|
53
|
+
<h4 class="font-semibold text-alert mb-1">Error!</h4>
|
|
54
|
+
<p class="text-sm">Message</p>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
</div></code></pre>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<!-- Warning Alert -->
|
|
62
|
+
<div class="code-example-wrapper">
|
|
63
|
+
<div class="code-example-preview">
|
|
64
|
+
<h3 class="text-xl font-semibold mb-4">Warning Alert</h3>
|
|
65
|
+
<div class="p-4 rounded-lg bg-warning bg-opacity-10 border border-warning">
|
|
66
|
+
<div class="flex items-center gap-3">
|
|
67
|
+
<%= render_theme_icon("alert_triangle", css_class: "w-5 h-5 text-warning flex-shrink-0") %>
|
|
68
|
+
<div class="flex-1">
|
|
69
|
+
<h4 class="font-semibold text-warning mb-1">Warning!</h4>
|
|
70
|
+
<p class="text-sm text-text-secondary">This action cannot be undone.</p>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
<div class="code-example-code">
|
|
76
|
+
<pre><code><div class="p-4 rounded-lg bg-warning bg-opacity-10 border border-warning">
|
|
77
|
+
<div class="flex items-center gap-3">
|
|
78
|
+
<%= render_theme_icon("alert_triangle", css_class: "w-5 h-5 text-warning") %>
|
|
79
|
+
<div>
|
|
80
|
+
<h4 class="font-semibold text-warning mb-1">Warning!</h4>
|
|
81
|
+
<p class="text-sm">Message</p>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</div></code></pre>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<!-- Info Alert -->
|
|
89
|
+
<div class="code-example-wrapper">
|
|
90
|
+
<div class="code-example-preview">
|
|
91
|
+
<h3 class="text-xl font-semibold mb-4">Info Alert</h3>
|
|
92
|
+
<div class="p-4 rounded-lg bg-accent bg-opacity-10 border border-accent">
|
|
93
|
+
<div class="flex items-center gap-3">
|
|
94
|
+
<%= render_theme_icon("question", css_class: "w-5 h-5 text-accent flex-shrink-0") %>
|
|
95
|
+
<div class="flex-1">
|
|
96
|
+
<h4 class="font-semibold text-accent mb-1">Information</h4>
|
|
97
|
+
<p class="text-sm text-text-secondary">Here's some helpful information for you.</p>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="code-example-code">
|
|
103
|
+
<pre><code><div class="p-4 rounded-lg bg-accent bg-opacity-10 border border-accent">
|
|
104
|
+
<div class="flex items-center gap-3">
|
|
105
|
+
<%= render_theme_icon("question", css_class: "w-5 h-5 text-accent") %>
|
|
106
|
+
<div>
|
|
107
|
+
<h4 class="font-semibold text-accent mb-1">Information</h4>
|
|
108
|
+
<p class="text-sm">Message</p>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
</div></code></pre>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
</section>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<section id="badges">
|
|
2
|
+
<h2 class="text-3xl font-bold mb-4">Badges</h2>
|
|
3
|
+
<p class="text-text-secondary mb-6">
|
|
4
|
+
Small labels and badges for status indicators and tags.
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<!-- Status Badges -->
|
|
8
|
+
<div class="code-example-wrapper">
|
|
9
|
+
<div class="code-example-preview">
|
|
10
|
+
<h3 class="text-xl font-semibold mb-4">Status Badges</h3>
|
|
11
|
+
<div class="flex flex-wrap gap-3">
|
|
12
|
+
<span class="px-3 py-1 rounded-full text-sm bg-notification text-white">Success</span>
|
|
13
|
+
<span class="px-3 py-1 rounded-full text-sm bg-alert text-white">Error</span>
|
|
14
|
+
<span class="px-3 py-1 rounded-full text-sm bg-warning text-white">Warning</span>
|
|
15
|
+
<span class="px-3 py-1 rounded-full text-sm bg-accent text-white">Info</span>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="code-example-code">
|
|
19
|
+
<pre><code><span class="px-3 py-1 rounded-full text-sm bg-notification text-white">Success</span>
|
|
20
|
+
<span class="px-3 py-1 rounded-full text-sm bg-alert text-white">Error</span></code></pre>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<!-- Outline Badges -->
|
|
25
|
+
<div class="code-example-wrapper">
|
|
26
|
+
<div class="code-example-preview">
|
|
27
|
+
<h3 class="text-xl font-semibold mb-4">Outline Badges</h3>
|
|
28
|
+
<div class="flex flex-wrap gap-3">
|
|
29
|
+
<span class="px-3 py-1 rounded-full text-sm border border-notification text-notification">Success</span>
|
|
30
|
+
<span class="px-3 py-1 rounded-full text-sm border border-alert text-alert">Error</span>
|
|
31
|
+
<span class="px-3 py-1 rounded-full text-sm border border-warning text-warning">Warning</span>
|
|
32
|
+
<span class="px-3 py-1 rounded-full text-sm border border-accent text-accent">Info</span>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="code-example-code">
|
|
36
|
+
<pre><code><span class="px-3 py-1 rounded-full text-sm border border-notification text-notification">Success</span></code></pre>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<!-- Counter Badges -->
|
|
41
|
+
<div class="code-example-wrapper">
|
|
42
|
+
<div class="code-example-preview">
|
|
43
|
+
<h3 class="text-xl font-semibold mb-4">Counter Badges</h3>
|
|
44
|
+
<div class="flex flex-wrap gap-4 items-center">
|
|
45
|
+
<div class="relative">
|
|
46
|
+
<%= render_theme_icon("bell", css_class: "w-6 h-6") %>
|
|
47
|
+
<span class="absolute -top-2 -right-2 px-2 py-1 text-xs rounded-full bg-alert text-white">3</span>
|
|
48
|
+
</div>
|
|
49
|
+
<div class="relative">
|
|
50
|
+
<%= render_theme_icon("envelope", css_class: "w-6 h-6") %>
|
|
51
|
+
<span class="absolute -top-2 -right-2 px-2 py-1 text-xs rounded-full bg-accent text-white">12</span>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
<div class="code-example-code">
|
|
56
|
+
<pre><code><div class="relative">
|
|
57
|
+
<%= render_theme_icon("bell", css_class: "w-6 h-6") %>
|
|
58
|
+
<span class="absolute -top-2 -right-2 px-2 py-1 text-xs rounded-full bg-alert text-white">3</span>
|
|
59
|
+
</div></code></pre>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<!-- Tag Badges -->
|
|
64
|
+
<div class="code-example-wrapper">
|
|
65
|
+
<div class="code-example-preview">
|
|
66
|
+
<h3 class="text-xl font-semibold mb-4">Tag Badges</h3>
|
|
67
|
+
<div class="flex flex-wrap gap-2">
|
|
68
|
+
<span class="px-2 py-1 text-xs rounded bg-surface border border-border">Rails</span>
|
|
69
|
+
<span class="px-2 py-1 text-xs rounded bg-surface border border-border">Ruby</span>
|
|
70
|
+
<span class="px-2 py-1 text-xs rounded bg-surface border border-border">Tailwind</span>
|
|
71
|
+
<span class="px-2 py-1 text-xs rounded bg-surface border border-border">TypeScript</span>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
<div class="code-example-code">
|
|
75
|
+
<pre><code><span class="px-2 py-1 text-xs rounded bg-surface border border-border">Tag</span></code></pre>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</section>
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
<section id="buttons">
|
|
2
|
+
<h2 class="text-3xl font-bold mb-4">Buttons</h2>
|
|
3
|
+
<p class="text-text-secondary mb-6">
|
|
4
|
+
Button styles and variants using gradient backgrounds and hover states.
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<!-- Submit Buttons -->
|
|
8
|
+
<div class="code-example-wrapper">
|
|
9
|
+
<div class="code-example-preview">
|
|
10
|
+
<h3 class="text-xl font-semibold mb-4">Submit Buttons (Gradient)</h3>
|
|
11
|
+
<div class="flex flex-wrap gap-4">
|
|
12
|
+
<input type="submit" value="Submit Form" class="px-6 py-2 rounded cursor-pointer">
|
|
13
|
+
<button type="submit" class="px-6 py-2 rounded cursor-pointer">Submit Button</button>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="code-example-code">
|
|
17
|
+
<pre><code><input type="submit" value="Submit Form" class="px-6 py-2 rounded cursor-pointer">
|
|
18
|
+
<button type="submit" class="px-6 py-2 rounded cursor-pointer">Submit</button></code></pre>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<!-- Primary Buttons -->
|
|
23
|
+
<div class="code-example-wrapper">
|
|
24
|
+
<div class="code-example-preview">
|
|
25
|
+
<h3 class="text-xl font-semibold mb-4">Primary Buttons</h3>
|
|
26
|
+
<div class="flex flex-wrap gap-4">
|
|
27
|
+
<button class="px-4 py-2 bg-accent text-white rounded hover:opacity-90 transition">
|
|
28
|
+
Primary Action
|
|
29
|
+
</button>
|
|
30
|
+
<button class="px-4 py-2 bg-notification text-white rounded hover:opacity-90 transition">
|
|
31
|
+
Success Action
|
|
32
|
+
</button>
|
|
33
|
+
<button class="px-4 py-2 bg-alert text-white rounded hover:opacity-90 transition">
|
|
34
|
+
Danger Action
|
|
35
|
+
</button>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="code-example-code">
|
|
39
|
+
<pre><code><button class="px-4 py-2 bg-accent text-white rounded hover:opacity-90 transition">
|
|
40
|
+
Primary Action
|
|
41
|
+
</button></code></pre>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<!-- Icon Buttons -->
|
|
46
|
+
<div class="code-example-wrapper">
|
|
47
|
+
<div class="code-example-preview">
|
|
48
|
+
<h3 class="text-xl font-semibold mb-4">Buttons with Icons</h3>
|
|
49
|
+
<div class="flex flex-wrap gap-4">
|
|
50
|
+
<button class="px-4 py-2 bg-accent text-white rounded hover:opacity-90 transition flex items-center gap-2">
|
|
51
|
+
<%= render_theme_icon("plus", css_class: "w-4 h-4") %>
|
|
52
|
+
<span>Add Item</span>
|
|
53
|
+
</button>
|
|
54
|
+
<button class="px-4 py-2 bg-surface border border-border rounded hover:border-accent transition flex items-center gap-2 text-text-primary">
|
|
55
|
+
<%= render_theme_icon("download", css_class: "w-4 h-4") %>
|
|
56
|
+
<span>Download</span>
|
|
57
|
+
</button>
|
|
58
|
+
<button class="p-2 bg-surface border border-border rounded hover:border-accent transition text-text-primary">
|
|
59
|
+
<%= render_theme_icon("cog", css_class: "w-5 h-5") %>
|
|
60
|
+
</button>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
<div class="code-example-code">
|
|
64
|
+
<pre><code><!-- Primary button with icon -->
|
|
65
|
+
<button class="px-4 py-2 bg-accent text-white rounded flex items-center gap-2">
|
|
66
|
+
<%= render_theme_icon("plus", css_class: "w-4 h-4") %>
|
|
67
|
+
<span>Add Item</span>
|
|
68
|
+
</button>
|
|
69
|
+
|
|
70
|
+
<!-- Outline button with icon -->
|
|
71
|
+
<button class="px-4 py-2 bg-surface border border-border rounded text-text-primary">
|
|
72
|
+
<%= render_theme_icon("download", css_class: "w-4 h-4") %>
|
|
73
|
+
<span>Download</span>
|
|
74
|
+
</button></code></pre>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
|
|
78
|
+
<!-- Button-Styled Links -->
|
|
79
|
+
<div class="code-example-wrapper">
|
|
80
|
+
<div class="code-example-preview">
|
|
81
|
+
<h3 class="text-xl font-semibold mb-4">Button-Styled Links</h3>
|
|
82
|
+
<p class="text-sm text-text-secondary mb-4">Links that look like buttons for navigation CTAs</p>
|
|
83
|
+
<div class="flex flex-wrap gap-4">
|
|
84
|
+
<a href="#buttons" class="inline-block px-6 py-2 rounded cursor-pointer no-underline" style="background-image: linear-gradient(to right, var(--gradient-from), var(--gradient-to)); color: var(--button-text-color); font-weight: 600;">
|
|
85
|
+
Gradient Link Button
|
|
86
|
+
</a>
|
|
87
|
+
<a href="#buttons" class="inline-block px-4 py-2 bg-accent text-white rounded hover:opacity-90 transition no-underline">
|
|
88
|
+
Primary Link Button
|
|
89
|
+
</a>
|
|
90
|
+
<a href="#buttons" class="inline-block px-4 py-2 bg-surface border border-border rounded hover:border-accent transition no-underline">
|
|
91
|
+
Outline Link Button
|
|
92
|
+
</a>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
<div class="code-example-code">
|
|
96
|
+
<pre><code><!-- Gradient link button -->
|
|
97
|
+
<a href="#" class="inline-block px-6 py-2 rounded cursor-pointer no-underline"
|
|
98
|
+
style="background-image: linear-gradient(to right, var(--gradient-from), var(--gradient-to));
|
|
99
|
+
color: var(--button-text-color); font-weight: 600;">
|
|
100
|
+
Gradient Link
|
|
101
|
+
</a>
|
|
102
|
+
|
|
103
|
+
<!-- Primary link button -->
|
|
104
|
+
<a href="#" class="inline-block px-4 py-2 bg-accent text-white rounded hover:opacity-90 transition no-underline">
|
|
105
|
+
Primary Link
|
|
106
|
+
</a>
|
|
107
|
+
|
|
108
|
+
<!-- Outline link button -->
|
|
109
|
+
<a href="#" class="inline-block px-4 py-2 bg-surface border border-border rounded hover:border-accent transition no-underline">
|
|
110
|
+
Outline Link
|
|
111
|
+
</a></code></pre>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<!-- Link Style Buttons -->
|
|
116
|
+
<div class="code-example-wrapper">
|
|
117
|
+
<div class="code-example-preview">
|
|
118
|
+
<h3 class="text-xl font-semibold mb-4">Link Style Buttons</h3>
|
|
119
|
+
<p class="text-sm text-text-secondary mb-4">Buttons and links styled as plain text links</p>
|
|
120
|
+
<div class="flex flex-wrap gap-4">
|
|
121
|
+
<button class="text-accent hover:underline">Link Button</button>
|
|
122
|
+
<a href="#buttons" class="text-accent hover:underline">Link Element</a>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
<div class="code-example-code">
|
|
126
|
+
<pre><code><button class="text-accent hover:underline">Link Button</button>
|
|
127
|
+
<a href="#" class="text-accent hover:underline">Link Element</a></code></pre>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
</section>
|