parapet-rails 0.1.0
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/MIT-LICENSE +20 -0
- data/README.md +48 -0
- data/Rakefile +7 -0
- data/app/assets/config/parapet/grammar-registry.json +52 -0
- data/app/assets/images/parapet/icons/activities/component-inspector.svg +4 -0
- data/app/assets/images/parapet/icons/activities/coverage-heatmap.svg +3 -0
- data/app/assets/images/parapet/icons/activities/discovery-sidebar.svg +3 -0
- data/app/assets/images/parapet/icons/activities/environment-toggles.svg +4 -0
- data/app/assets/images/parapet/icons/activities/failure-inspector.svg +5 -0
- data/app/assets/images/parapet/icons/activities/flaky-history.svg +3 -0
- data/app/assets/images/parapet/icons/activities/flight-recorder.svg +5 -0
- data/app/assets/images/parapet/icons/activities/health-graph.svg +3 -0
- data/app/assets/images/parapet/icons/activities/injection-engine.svg +3 -0
- data/app/assets/images/parapet/icons/activities/live-sql-stream.svg +5 -0
- data/app/assets/images/parapet/icons/activities/live-web-preview.svg +4 -0
- data/app/assets/images/parapet/icons/activities/monaco-editor.svg +5 -0
- data/app/assets/images/parapet/icons/activities/progress-area.svg +3 -0
- data/app/assets/images/parapet/icons/activities/registry-metadata.svg +5 -0
- data/app/assets/images/parapet/icons/activities/seed-inspector.svg +4 -0
- data/app/assets/images/parapet/icons/activities/slow-test-bottlenecks.svg +4 -0
- data/app/assets/images/parapet/icons/activities/smart-search.svg +4 -0
- data/app/assets/images/parapet/icons/activities/snippet-library.svg +4 -0
- data/app/assets/images/parapet/icons/activities/terminal.svg +4 -0
- data/app/assets/images/parapet/icons/activities/unified-schema-view.svg +4 -0
- data/app/assets/images/parapet/icons/activities/visual-comparison.svg +3 -0
- data/app/assets/images/parapet/icons/activities/visual-summary-bar.svg +5 -0
- data/app/assets/images/parapet/icons/nav/ideas.svg +4 -0
- data/app/assets/images/parapet/icons/nav/languages.svg +8 -0
- data/app/assets/images/parapet/icons/nav/profile.svg +4 -0
- data/app/assets/images/parapet/icons/nav/pulse.svg +7 -0
- data/app/assets/images/parapet/icons/nav/settings.svg +4 -0
- data/app/assets/images/parapet/icons/nav/state.svg +5 -0
- data/app/assets/images/parapet/icons/nav/styles.svg +7 -0
- data/app/assets/images/parapet/icons/nav/tests.svg +4 -0
- data/app/assets/images/parapet/icons/nav/traffic.svg +12 -0
- data/app/assets/javascripts/parapet/activity-card.js +439 -0
- data/app/assets/javascripts/parapet/activity-cards.js +291 -0
- data/app/assets/javascripts/parapet/activity-registry.js +181 -0
- data/app/assets/javascripts/parapet/activity-toggles.js +76 -0
- data/app/assets/javascripts/parapet/application.js +37 -0
- data/app/assets/javascripts/parapet/card-failure-inspector.js +134 -0
- data/app/assets/javascripts/parapet/card-file-editor.js +1722 -0
- data/app/assets/javascripts/parapet/card-progress-area.js +297 -0
- data/app/assets/javascripts/parapet/card-smart-search.js +114 -0
- data/app/assets/javascripts/parapet/card-snippet-library.js +251 -0
- data/app/assets/javascripts/parapet/explorer-resizer.js +92 -0
- data/app/assets/javascripts/parapet/parapet_qss.js +342 -0
- data/app/assets/javascripts/parapet/proficiency-filter.js +53 -0
- data/app/assets/javascripts/parapet/sidebar-resizer.js +197 -0
- data/app/assets/javascripts/parapet/styles-workbench.js +819 -0
- data/app/assets/javascripts/parapet/tree-logic.js +320 -0
- data/app/assets/stylesheets/parapet/_qss_variables.scss +122 -0
- data/app/assets/stylesheets/parapet/parapet_qss.scss +69 -0
- data/app/assets/stylesheets/parapet/qss_application.css +260940 -0
- data/app/assets/stylesheets/parapet/qss_application.css.map +1 -0
- data/app/assets/stylesheets/parapet/qss_application.scss +5 -0
- data/app/assets/stylesheets/parapet/qss_workspace.scss +209 -0
- data/app/assets/stylesheets/parapet/sample.qss +22 -0
- data/app/controllers/parapet/application_controller.rb +54 -0
- data/app/controllers/parapet/base_controller.rb +18 -0
- data/app/controllers/parapet/build_suite/dashboard_controller.rb +10 -0
- data/app/controllers/parapet/css_suite/compiler_controller.rb +95 -0
- data/app/controllers/parapet/css_suite/dashboard_controller.rb +10 -0
- data/app/controllers/parapet/css_suite/preview_controller.rb +46 -0
- data/app/controllers/parapet/dashboard_controller.rb +8 -0
- data/app/controllers/parapet/drafts_controller.rb +30 -0
- data/app/controllers/parapet/explorers_controller.rb +53 -0
- data/app/controllers/parapet/files_controller.rb +208 -0
- data/app/controllers/parapet/footers_controller.rb +24 -0
- data/app/controllers/parapet/intentions_suite/dashboard_controller.rb +10 -0
- data/app/controllers/parapet/landing_controller.rb +14 -0
- data/app/controllers/parapet/monitor_suite/dashboard_controller.rb +10 -0
- data/app/controllers/parapet/pm_suite/publish_controller.rb +16 -0
- data/app/controllers/parapet/polyglot_suite/dashboard_controller.rb +10 -0
- data/app/controllers/parapet/runner_controller.rb +34 -0
- data/app/controllers/parapet/sessions_controller.rb +35 -0
- data/app/controllers/parapet/signal_suite/dashboard_controller.rb +10 -0
- data/app/controllers/parapet/test_suite/dashboard_controller.rb +10 -0
- data/app/controllers/parapet/widgets_controller.rb +33 -0
- data/app/helpers/parapet/application_helper.rb +23 -0
- data/app/helpers/parapet/icon_helper.rb +57 -0
- data/app/jobs/parapet/application_job.rb +4 -0
- data/app/mailers/parapet/application_mailer.rb +6 -0
- data/app/models/parapet/activity.rb +14 -0
- data/app/models/parapet/application_record.rb +5 -0
- data/app/models/parapet/current.rb +6 -0
- data/app/models/parapet/draft_recovery.rb +9 -0
- data/app/models/parapet/internal_record.rb +34 -0
- data/app/models/parapet/run_history.rb +22 -0
- data/app/models/parapet/runtime_setting.rb +8 -0
- data/app/models/parapet/session.rb +7 -0
- data/app/models/parapet/suite_assignment.rb +30 -0
- data/app/models/parapet/user.rb +12 -0
- data/app/services/parapet/activity_phrase_renderer.rb +35 -0
- data/app/services/parapet/activity_writer.rb +26 -0
- data/app/services/parapet/authorization.rb +198 -0
- data/app/services/parapet/consistency_auditor.rb +58 -0
- data/app/services/parapet/directory_scanner.rb +159 -0
- data/app/services/parapet/draft_recovery_store.rb +18 -0
- data/app/services/parapet/explorer_manager.rb +402 -0
- data/app/services/parapet/file_save_service.rb +21 -0
- data/app/services/parapet/git_side_ref_committer.rb +50 -0
- data/app/services/parapet/noun_discovery.rb +26 -0
- data/app/services/parapet/publish_gate.rb +83 -0
- data/app/services/parapet/test_runner.rb +178 -0
- data/app/views/layouts/parapet/application.html.erb +83 -0
- data/app/views/layouts/parapet/landing.html.erb +19 -0
- data/app/views/parapet/activities/_ai_error_explainer.html.erb +33 -0
- data/app/views/parapet/activities/_ai_explainer_widget.html.erb +20 -0
- data/app/views/parapet/activities/_calendar_widget.html.erb +31 -0
- data/app/views/parapet/activities/_code_snippets_widget.html.erb +22 -0
- data/app/views/parapet/activities/_coverage_explorer.html.erb +1 -0
- data/app/views/parapet/activities/_dropdown_test.html.erb +20 -0
- data/app/views/parapet/activities/_explorer_node.html.erb +102 -0
- data/app/views/parapet/activities/_explorer_tree.html.erb +16 -0
- data/app/views/parapet/activities/_file_editor.html.erb +183 -0
- data/app/views/parapet/activities/_file_explorer.html.erb +23 -0
- data/app/views/parapet/activities/_fix_suggestions_widget.html.erb +13 -0
- data/app/views/parapet/activities/_generic.html.erb +6 -0
- data/app/views/parapet/activities/_live_preview.html.erb +13 -0
- data/app/views/parapet/activities/_perspective_filters.html.erb +36 -0
- data/app/views/parapet/activities/_progress_area.html.erb +37 -0
- data/app/views/parapet/activities/_project_explorer.html.erb +1 -0
- data/app/views/parapet/activities/_registry_explorer.html.erb +1 -0
- data/app/views/parapet/activities/_run_history.html.erb +2 -0
- data/app/views/parapet/activities/_smart_search.html.erb +11 -0
- data/app/views/parapet/activities/file_explorer/_perspective_scripts.html.erb +58 -0
- data/app/views/parapet/activities/file_explorer/_perspectives.html.erb +0 -0
- data/app/views/parapet/activities/file_explorer/_viewport_scripts.html.erb +33 -0
- data/app/views/parapet/css_suite/_workbench.html.erb +51 -0
- data/app/views/parapet/dashboards/index.html.erb +113 -0
- data/app/views/parapet/debug_panel.html.erb +79 -0
- data/app/views/parapet/debug_panel_tailwind.html.erb +98 -0
- data/app/views/parapet/erb_patch_test.html.erb +5 -0
- data/app/views/parapet/explorers/show.html.erb +1 -0
- data/app/views/parapet/git_viewer.html.erb +62 -0
- data/app/views/parapet/git_viewer_after.html.erb +14 -0
- data/app/views/parapet/git_viewer_before.html.erb +14 -0
- data/app/views/parapet/git_viewer_governed.html.erb +88 -0
- data/app/views/parapet/git_viewer_governed_after.html.erb +36 -0
- data/app/views/parapet/git_viewer_governed_before.html.erb +36 -0
- data/app/views/parapet/git_viewer_tailwind.html.erb +88 -0
- data/app/views/parapet/git_viewer_thin_wrapper.html.erb +85 -0
- data/app/views/parapet/hierarchical_layout_test.html.erb +85 -0
- data/app/views/parapet/hybrid_stress_test.html.erb +25 -0
- data/app/views/parapet/index.html.erb +35 -0
- data/app/views/parapet/mutation_stress_test.html.erb +82 -0
- data/app/views/parapet/recursive_anchoring_test.html.erb +66 -0
- data/app/views/parapet/sessions/new.html.erb +28 -0
- data/app/views/parapet/shared/_cad_inspector.html.erb +92 -0
- data/app/views/parapet/shared/_discovery_sidebar.html.erb +48 -0
- data/app/views/parapet/shared/_explorer_bar.html.erb +71 -0
- data/app/views/parapet/shared/_footer.html.erb +10 -0
- data/app/views/parapet/shared/_footer_ideas.html.erb +36 -0
- data/app/views/parapet/shared/_footer_languages.html.erb +33 -0
- data/app/views/parapet/shared/_footer_pulse.html.erb +33 -0
- data/app/views/parapet/shared/_footer_state.html.erb +33 -0
- data/app/views/parapet/shared/_footer_styles.html.erb +37 -0
- data/app/views/parapet/shared/_footer_tests.html.erb +39 -0
- data/app/views/parapet/shared/_footer_traffic.html.erb +45 -0
- data/app/views/parapet/shared/_global_nav.html.erb +55 -0
- data/app/views/parapet/shared/_head.html.erb +4 -0
- data/app/views/parapet/shared/_header.html.erb +20 -0
- data/app/views/parapet/shared/_object_inspector.html.erb +76 -0
- data/app/views/parapet/shared/_ribbon_header.html.erb +3 -0
- data/app/views/parapet/shared/_root_selector_modal.html.erb +15 -0
- data/app/views/parapet/shared/_tab_bar.html.erb +62 -0
- data/app/views/parapet/shared/activities_ribbon/_agent_group.html.erb +15 -0
- data/app/views/parapet/shared/activities_ribbon/_analysis_group.html.erb +15 -0
- data/app/views/parapet/shared/activities_ribbon/_architect_group.html.erb +21 -0
- data/app/views/parapet/shared/activities_ribbon/_explorer_group.html.erb +12 -0
- data/app/views/parapet/shared/activities_ribbon/_inspector_group.html.erb +15 -0
- data/app/views/parapet/shared/activities_ribbon/_proficiency_filter.html.erb +24 -0
- data/app/views/parapet/shared/activities_ribbon/_runner_group.html.erb +21 -0
- data/app/views/parapet/shared/activities_ribbon/_spatial_inspector_group.html.erb +18 -0
- data/app/views/parapet/shared/activities_ribbon/_studio_group.html.erb +18 -0
- data/app/views/parapet/shared/activities_ribbon/_stylist_group.html.erb +18 -0
- data/app/views/parapet/shared/explorers/_base.html.erb +107 -0
- data/app/views/parapet/shared/explorers/_css.html.erb +1 -0
- data/app/views/parapet/shared/explorers/_intentions.html.erb +1 -0
- data/app/views/parapet/shared/explorers/_project.html.erb +1 -0
- data/app/views/parapet/shared/explorers/_tests.html.erb +1 -0
- data/app/views/parapet/shared/head/_meta.html.erb +3 -0
- data/app/views/parapet/shared/head/_styles_activities.html.erb +152 -0
- data/app/views/parapet/shared/head/_styles_shared.html.erb +52 -0
- data/app/views/parapet/shared/head/_styles_workspace.html.erb +67 -0
- data/app/views/parapet/shared/ribbon_header/_diagnostic_controls.html.erb +17 -0
- data/app/views/parapet/shared/ribbon_header/_execution_controls.html.erb +28 -0
- data/app/views/parapet/shared/ribbon_header/_focus_search.html.erb +5 -0
- data/app/views/parapet/shared/root_selector/_header.html.erb +10 -0
- data/app/views/parapet/shared/root_selector/_path_input.html.erb +13 -0
- data/app/views/parapet/shared/root_selector/_quick_select.html.erb +20 -0
- data/app/views/parapet/shared/root_selector/_scripts.html.erb +61 -0
- data/app/views/parapet/shared/root_selector/_warning.html.erb +11 -0
- data/app/views/parapet/shared/widgets/_base.html.erb +6 -0
- data/app/views/parapet/shared/widgets/_css.html.erb +79 -0
- data/app/views/parapet/widgets/_explainer.html.erb +17 -0
- data/app/views/parapet/widgets/_hotkeys.html.erb +20 -0
- data/app/views/parapet/widgets/_search.html.erb +68 -0
- data/app/views/parapet/widgets/_spatial_inspector.html.erb +54 -0
- data/app/views/parapet/widgets/_widget-explainer.html.erb +17 -0
- data/app/views/parapet/widgets/_widget-hotkeys.html.erb +20 -0
- data/app/views/parapet/widgets/_widget-search.html.erb +68 -0
- data/app/views/parapet/widgets/_widget-snippets.html.erb +18 -0
- data/app/views/parapet/widgets/_widget-suggestions.html.erb +15 -0
- data/app/views/parapet/widgets/show.html.erb +3 -0
- data/app/views/shared/_footer.html.erb +0 -0
- data/config/parapet/qss_config.yml +117 -0
- data/config/parapet/qss_registry.yml +14 -0
- data/config/routes.rb +40 -0
- data/db/migrate/20260916035300_create_run_histories.rb +16 -0
- data/db/migrate/20261002000000_expand_run_histories_for_activity_tracking.rb +7 -0
- data/db/parapet_migrate/20260929184200_create_parapet_users.rb +12 -0
- data/db/parapet_migrate/20260929184300_create_parapet_sessions.rb +9 -0
- data/db/parapet_migrate/20260930000000_create_parapet_runtime_settings.rb +12 -0
- data/db/parapet_migrate/20260930000100_create_parapet_suite_assignments.rb +14 -0
- data/db/parapet_migrate/20261002000000_create_parapet_activities.rb +16 -0
- data/db/parapet_migrate/20261002000100_create_parapet_draft_recoveries.rb +13 -0
- data/db/parapet_schema.rb +64 -0
- data/db/schema.rb +21 -0
- data/db/schema.released.rb +0 -0
- data/lib/parapet/engine.rb +11 -0
- data/lib/parapet/environment_guard.rb +14 -0
- data/lib/parapet/version.rb +3 -0
- data/lib/parapet-rails.rb +1 -0
- data/lib/parapet.rb +59 -0
- data/lib/tasks/parapet_qss.rake +26 -0
- data/lib/tasks/parapet_tasks.rake +25 -0
- data/lib/tasks/randomize_explorer_health.rb +101 -0
- metadata +423 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<!-- Footer: Signal Suite -->
|
|
2
|
+
<%= turbo_frame_tag "qss-suite-footer", class: "qss-w-full qss-flex qss-items-center qss-justify-between qss-px-2" do %>
|
|
3
|
+
<div class="qss-flex qss-items-center qss-gap-4">
|
|
4
|
+
<div class="qss-flex qss-items-center qss-gap-1 qss-opacity-80" title="Current git branch">
|
|
5
|
+
<i class="lucide-git-branch qss-w-3 qss-h-3"></i>
|
|
6
|
+
<span class="qss-font-mono">main</span>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="qss-flex qss-items-center qss-gap-1.5 qss-opacity-60" title="Log stream state">
|
|
9
|
+
<i class="lucide-scroll qss-w-3 qss-h-3"></i>
|
|
10
|
+
<span class="qss-uppercase qss-tracking-widest">Stream: Idle</span>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="qss-flex qss-items-center qss-gap-1.5 qss-opacity-60" title="Active log filter">
|
|
13
|
+
<i class="lucide-filter qss-w-3 qss-h-3"></i>
|
|
14
|
+
<span class="qss-uppercase qss-tracking-widest">All Levels</span>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<div class="qss-flex qss-items-center qss-gap-3 qss-opacity-50 qss-font-mono" title="Last captured signal">
|
|
19
|
+
<i class="lucide-zap qss-w-3 qss-h-3"></i>
|
|
20
|
+
<span>No events captured</span>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div class="qss-flex qss-items-center qss-gap-4">
|
|
24
|
+
<div class="qss-flex qss-items-center qss-gap-1.5 qss-opacity-80" title="ActionCable: connected Last ping: just now">
|
|
25
|
+
<span class="qss-uppercase qss-tracking-widest">Cable</span>
|
|
26
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399]"></div>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="qss-flex qss-items-center qss-gap-1.5" title="Parapet: ready ActionCable: connected Last ping: just now">
|
|
29
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399]"></div>
|
|
30
|
+
<span class="qss-uppercase qss-tracking-widest">Ready</span>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
<% end %>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<!-- Footer: Database Suite -->
|
|
2
|
+
<%= turbo_frame_tag "qss-suite-footer", class: "qss-w-full qss-flex qss-items-center qss-justify-between qss-px-2" do %>
|
|
3
|
+
<div class="qss-flex qss-items-center qss-gap-4">
|
|
4
|
+
<div class="qss-flex qss-items-center qss-gap-1 qss-opacity-80" title="Current git branch">
|
|
5
|
+
<i class="lucide-git-branch qss-w-3 qss-h-3"></i>
|
|
6
|
+
<span class="qss-font-mono">main</span>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="qss-flex qss-items-center qss-gap-1.5" title="Database connection: connected">
|
|
9
|
+
<span class="qss-uppercase qss-tracking-widest qss-opacity-80">DB</span>
|
|
10
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399]"></div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="qss-flex qss-items-center qss-gap-1.5 qss-opacity-60" title="Active adapter">
|
|
13
|
+
<i class="lucide-database qss-w-3 qss-h-3"></i>
|
|
14
|
+
<span class="qss-font-mono qss-uppercase qss-tracking-widest">SQLite3</span>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<div class="qss-flex qss-items-center qss-gap-3 qss-opacity-60 qss-font-mono" title="Last migration action">
|
|
19
|
+
<i class="lucide-arrow-right-left qss-w-3 qss-h-3"></i>
|
|
20
|
+
<span>No recent migrations</span>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div class="qss-flex qss-items-center qss-gap-4">
|
|
24
|
+
<div class="qss-flex qss-items-center qss-gap-1.5 qss-opacity-60" title="Benched schema drafts: migration changes not yet flushed to source">
|
|
25
|
+
<i class="lucide-layers qss-w-3 qss-h-3"></i>
|
|
26
|
+
<span class="qss-uppercase qss-tracking-widest qss-font-mono">Bench: 0</span>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="qss-flex qss-items-center qss-gap-1.5" title="Parapet: ready ActionCable: connected Last ping: just now">
|
|
29
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399]"></div>
|
|
30
|
+
<span class="qss-uppercase qss-tracking-widest">Ready</span>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
<% end %>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<!-- Footer: CSS Suite (Drawn with Agentic CSS) -->
|
|
2
|
+
<%= turbo_frame_tag "qss-suite-footer", class: "qss-absolute qss-pos-x[0] qss-pos-y[0] qss-w-pct[1000] qss-h-pct[1000]" do %>
|
|
3
|
+
|
|
4
|
+
<!-- Left Group: Git & Engine Info -->
|
|
5
|
+
<div id="qss-footer-git-branch" class="qss-absolute qss-pos-x[16] qss-pos-y[6] qss-opacity-80" title="Current git branch">
|
|
6
|
+
<i class="lucide-git-branch qss-w-3 qss-h-3 qss-absolute qss-pos-x[0] qss-pos-y[0]"></i>
|
|
7
|
+
<span class="qss-font-mono qss-text-[10px] qss-absolute qss-pos-x[16] qss-pos-y[0]">main</span>
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
<div id="qss-footer-sandbox" class="qss-absolute qss-pos-x[80] qss-pos-y[6] qss-opacity-60" title="Active CSS sandbox branch — none active">
|
|
11
|
+
<i class="lucide-flask-conical qss-w-3 qss-h-3 qss-absolute qss-pos-x[0] qss-pos-y[0]"></i>
|
|
12
|
+
<span class="qss-uppercase qss-tracking-widest qss-text-[9px] qss-absolute qss-pos-x[18] qss-pos-y[0]">Sandbox: None</span>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<div id="qss-footer-engine" class="qss-absolute qss-pos-x[185] qss-pos-y[6] qss-opacity-60" title="Active CSS engine">
|
|
16
|
+
<i class="lucide-wind qss-w-3 qss-h-3 qss-absolute qss-pos-x[0] qss-pos-y[0]"></i>
|
|
17
|
+
<span class="qss-uppercase qss-tracking-widest qss-text-[9px] qss-absolute qss-pos-x[18] qss-pos-y[0]">Agentic CSS</span>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<!-- Center Group: Performance/Bench -->
|
|
21
|
+
<div id="qss-footer-bench" class="qss-absolute qss-pos-x[calc(50%-40px)] qss-pos-y[6] qss-text-amber-200" title="Benched CSS changes">
|
|
22
|
+
<i class="lucide-layers qss-w-3 qss-h-3 qss-absolute qss-pos-x[0] qss-pos-y[0]"></i>
|
|
23
|
+
<span class="qss-uppercase qss-tracking-widest qss-font-mono qss-text-[9px] qss-absolute qss-pos-x[18] qss-pos-y[0]">Bench: 0</span>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<!-- Right Group: Status & Connectivity -->
|
|
27
|
+
<div id="qss-footer-cable" class="qss-absolute qss-pos-r[80] qss-pos-y[6] qss-opacity-80" title="ActionCable connected">
|
|
28
|
+
<span class="qss-uppercase qss-tracking-widest qss-text-[9px] qss-absolute qss-pos-x[0] qss-pos-y[0]">Cable</span>
|
|
29
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399] qss-absolute qss-pos-x[35] qss-pos-y[3]"></div>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<div id="qss-footer-ready" class="qss-absolute qss-pos-r[16] qss-pos-y[6]" title="Parapet Ready">
|
|
33
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399] qss-absolute qss-pos-x[0] qss-pos-y[3]"></div>
|
|
34
|
+
<span class="qss-uppercase qss-tracking-widest qss-text-[9px] qss-absolute qss-pos-x[10] qss-pos-y[0]">Ready</span>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<% end %>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!-- Footer: Test Suite -->
|
|
2
|
+
<%= turbo_frame_tag "qss-suite-footer", class: "qss-w-full qss-flex qss-items-center qss-justify-between qss-px-2" do %>
|
|
3
|
+
<div class="qss-flex qss-items-center qss-gap-4">
|
|
4
|
+
<div class="qss-flex qss-items-center qss-gap-1 qss-opacity-80" title="Current git branch">
|
|
5
|
+
<i class="lucide-git-branch qss-w-3 qss-h-3"></i>
|
|
6
|
+
<span class="qss-font-mono">main</span>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="qss-flex qss-items-center qss-gap-1.5" title="Test runner state">
|
|
9
|
+
<i class="lucide-circle-dot qss-w-3 qss-h-3 qss-text-slate-300"></i>
|
|
10
|
+
<span class="qss-uppercase qss-tracking-widest qss-text-slate-200">Idle</span>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="qss-flex qss-items-center qss-gap-1 qss-opacity-60" title="Runner process ID">
|
|
13
|
+
<i class="lucide-cpu qss-w-3 qss-h-3"></i>
|
|
14
|
+
<span class="qss-font-mono">PID: —</span>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<div class="qss-flex qss-items-center qss-gap-3 qss-font-mono">
|
|
19
|
+
<span class="qss-text-emerald-300" title="Last run: passed">— passed</span>
|
|
20
|
+
<span class="qss-text-red-300" title="Last run: failed">— failed</span>
|
|
21
|
+
<span class="qss-text-slate-300 qss-opacity-60" title="Last run: duration">—</span>
|
|
22
|
+
<span class="qss-opacity-40" title="Run timer">00:00:00</span>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<div class="qss-flex qss-items-center qss-gap-4">
|
|
26
|
+
<div class="qss-flex qss-items-center qss-gap-1.5 qss-opacity-60" title="Benched changes: Parapet-managed drafts not yet flushed to source">
|
|
27
|
+
<i class="lucide-layers qss-w-3 qss-h-3"></i>
|
|
28
|
+
<span class="qss-uppercase qss-tracking-widest">Bench: 0</span>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="qss-flex qss-items-center qss-gap-1.5 qss-opacity-80" title="ActionCable: connected Last ping: just now">
|
|
31
|
+
<span class="qss-uppercase qss-tracking-widest">Cable</span>
|
|
32
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399]"></div>
|
|
33
|
+
</div>
|
|
34
|
+
<div class="qss-flex qss-items-center qss-gap-1.5" title="Parapet: ready ActionCable: connected Last ping: just now">
|
|
35
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399]"></div>
|
|
36
|
+
<span class="qss-uppercase qss-tracking-widest">Ready</span>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
<% end %>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!-- Footer: Process Monitor Suite -->
|
|
2
|
+
<%= turbo_frame_tag "qss-suite-footer", class: "qss-w-full qss-flex qss-items-center qss-justify-between qss-px-2" do %>
|
|
3
|
+
<div class="qss-flex qss-items-center qss-gap-3">
|
|
4
|
+
<div class="qss-flex qss-items-center qss-gap-1.5" title="Application server: running">
|
|
5
|
+
<span class="qss-uppercase qss-tracking-widest qss-opacity-70">APP</span>
|
|
6
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399]"></div>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="qss-flex qss-items-center qss-gap-1.5" title="Database: connected">
|
|
9
|
+
<span class="qss-uppercase qss-tracking-widest qss-opacity-70">DB</span>
|
|
10
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399]"></div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="qss-flex qss-items-center qss-gap-1.5" title="ActionCable (Solid Cable): connected">
|
|
13
|
+
<span class="qss-uppercase qss-tracking-widest qss-opacity-70">Cable</span>
|
|
14
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399]"></div>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="qss-flex qss-items-center qss-gap-1.5" title="Background jobs (Solid Queue): running">
|
|
17
|
+
<span class="qss-uppercase qss-tracking-widest qss-opacity-70">Queue</span>
|
|
18
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399]"></div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<div class="qss-flex qss-items-center qss-gap-2" title="Job queue: completed / total">
|
|
23
|
+
<span class="qss-opacity-60 qss-uppercase qss-tracking-widest">Jobs</span>
|
|
24
|
+
<div class="qss-flex qss-flex-col qss-gap-[2px] qss-w-20" title="Top: completed · Bottom: total queued">
|
|
25
|
+
<div class="qss-h-[3px] qss-w-full qss-bg-white/20 qss-rounded-full qss-overflow-hidden">
|
|
26
|
+
<div id="pp-traffic-completed-bar" class="qss-h-full qss-bg-emerald-400 qss-rounded-full" style="width: 0%"></div>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="qss-h-[3px] qss-w-full qss-bg-white/20 qss-rounded-full qss-overflow-hidden">
|
|
29
|
+
<div id="pp-traffic-total-bar" class="qss-h-full qss-bg-indigo-300 qss-rounded-full" style="width: 0%"></div>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
<span class="qss-font-mono qss-opacity-60">0 / 0</span>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<div class="qss-flex qss-items-center qss-gap-4">
|
|
36
|
+
<div class="qss-flex qss-items-center qss-gap-1 qss-opacity-60" title="Runner process ID">
|
|
37
|
+
<i class="lucide-cpu qss-w-3 qss-h-3"></i>
|
|
38
|
+
<span class="qss-font-mono">PID: —</span>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="qss-flex qss-items-center qss-gap-1.5" title="Parapet: ready All services: healthy Last ping: just now">
|
|
41
|
+
<div class="qss-w-[5px] qss-h-[5px] qss-rounded-full qss-bg-emerald-400 qss-shadow-[0_0_8px_#34d399]"></div>
|
|
42
|
+
<span class="qss-uppercase qss-tracking-widest">Ready</span>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
<% end %>
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<div id="pp-global-nav" class="qss bg-brand-main border-r border-slate-800 contain-layout" style="position: absolute; left: 0; top: var(--header-h); width: var(--global-nav-w, var(--global-nav-w-default)); bottom: 0; overflow: hidden;">
|
|
2
|
+
<!-- Top Menu Button -->
|
|
3
|
+
<div id="pp-nav-menu" class="centered contain-layout" style="width: 100%; height: calc(24 * var(--qnt)); margin-top: calc(4 * var(--qnt));">
|
|
4
|
+
<div class="w-16 h-16">
|
|
5
|
+
<svg class="w-full h-full contain text-slate-500 opacity-60 hover:opacity-100 hover:bright-150 clickable smooth" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" title="Menu">
|
|
6
|
+
<line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
|
|
7
|
+
</svg>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<!-- Suite Navigation Icons -->
|
|
12
|
+
<div id="pp-suite-nav-icons" class="vertical v-mid gap-1 qss-content-driven contain-layout" style="width: 100%; height: auto; margin-top: calc(12 * var(--qnt));">
|
|
13
|
+
<% [
|
|
14
|
+
{ id: "tests", route: "tests", icon: "tests", title: "Test Suite (In Development)" },
|
|
15
|
+
{ id: "css", route: "css", icon: "styles", title: "CSS Suite" },
|
|
16
|
+
{ id: "intentions", route: "intentions", icon: "state", title: "Intentions Suite (In Development)" },
|
|
17
|
+
{ id: "signal", route: "signal", icon: "pulse", title: "Signal Suite (Coming Soon)" },
|
|
18
|
+
{ id: "monitor", route: "monitor", icon: "traffic", title: "Process Monitor (Coming Soon)" },
|
|
19
|
+
{ id: "polyglot", route: "polyglot", icon: "languages", title: "Polyglot Suite (Coming Soon)" },
|
|
20
|
+
{ id: "build", route: "build", icon: "ideas", title: "Build Suite (Coming Soon)" }
|
|
21
|
+
].each do |item|
|
|
22
|
+
is_active = request.path.include?("/#{item[:id]}") || request.path.include?("/#{item[:route]}")
|
|
23
|
+
opacity_class = is_active ? "opacity-100" : "opacity-40"
|
|
24
|
+
%>
|
|
25
|
+
<%= link_to parapet.send("#{item[:route]}_suite_path"),
|
|
26
|
+
class: "horizontal centered suite-nav-link w-full h-20",
|
|
27
|
+
data: { suite: item[:id] },
|
|
28
|
+
title: item[:title] do %>
|
|
29
|
+
<div class="w-16 h-16">
|
|
30
|
+
<%= image_tag "parapet/icons/nav/#{item[:icon]}.svg",
|
|
31
|
+
class: "w-full h-full contain #{opacity_class} hover:opacity-100 hover:bright-150 smooth",
|
|
32
|
+
data: { suite: item[:id] } %>
|
|
33
|
+
</div>
|
|
34
|
+
<% end %>
|
|
35
|
+
<% end %>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<!-- Account/System Icons (Bottom) -->
|
|
39
|
+
<div id="pp-nav-account" class="vertical v-mid gap-1 qss-content-driven contain-layout" style="width: 100%; height: auto; margin-top: auto; margin-bottom: calc(4 * var(--qnt));">
|
|
40
|
+
<div class="w-16 h-16">
|
|
41
|
+
<%= image_tag "parapet/icons/nav/settings.svg",
|
|
42
|
+
class: "w-full h-full contain clickable opacity-60 hover:opacity-100 hover:bright-150 smooth",
|
|
43
|
+
title: "Settings" %>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="w-16 h-16">
|
|
46
|
+
<%= image_tag "parapet/icons/nav/profile.svg",
|
|
47
|
+
class: "w-full h-full contain clickable opacity-60 hover:opacity-100 hover:bright-150 smooth",
|
|
48
|
+
title: "User Profile" %>
|
|
49
|
+
</div>
|
|
50
|
+
<div class="w-16 h-16">
|
|
51
|
+
<%= button_to "Sign out", logout_path, method: :delete,
|
|
52
|
+
class: "w-full h-full border-0 bg-transparent text-xs text-slate-400 hover:text-slate-100" %>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<div id="pp-header-inner" class="qss-header-inner">
|
|
2
|
+
<div id="pp-header-branding" class="qss-header-branding" style="--branding-w: 200px;">
|
|
3
|
+
<span id="pp-logo" class="qss-w-[100] qss-h-full text-indigo-500 font-black font-sans tracking-tighter text-size[20] italic">PARAPET</span>
|
|
4
|
+
|
|
5
|
+
<div id="pp-header-tagline" class="qss-header-tagline" style="--tagline-w: 150px;">
|
|
6
|
+
<span class="text-slate-500 font-semibold font-sans text-size[11] uppercase tracking-widest qss-legibility-override">Rails Development</span>
|
|
7
|
+
<span class="text-slate-600 font-sans text-size[11] italic qss-legibility-override">Specs / Tests / CSS in Real Time</span>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<%= render "parapet/shared/activities_ribbon/proficiency_filter" %>
|
|
12
|
+
|
|
13
|
+
<div id="pp-header-ribbon" class="qss-header-ribbon">
|
|
14
|
+
<%= render "parapet/shared/activities_ribbon/explorer_group" %>
|
|
15
|
+
<%= render "parapet/shared/activities_ribbon/studio_group" %>
|
|
16
|
+
<%= render "parapet/shared/activities_ribbon/agent_group" %>
|
|
17
|
+
<%= render "parapet/shared/activities_ribbon/runner_group" %>
|
|
18
|
+
<%= render "parapet/shared/activities_ribbon/analysis_group" %>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<div id="pp-object-inspector-content" class="qss anchored w-full vertical flex-1 scroll-auto dev-border contain-layout">
|
|
2
|
+
<!-- 1. QSS Grammar (Top Reference) -->
|
|
3
|
+
<div id="pp-grammar-container" class="qss anchored w-full vertical border-b border-slate-800 dev-border contain-layout">
|
|
4
|
+
<div id="pp-grammar-header" class="qss anchored w-full h-44 bg-slate-900 px-2.5 horizontal v-mid spaced clickable group contain-layout">
|
|
5
|
+
<span class="qss text-size-11 text-slate-500 font-bold uppercase tracking qss-legibility-override">QSS Grammar</span>
|
|
6
|
+
<i class="icon-book text-size-12 text-slate-600 group-hover:text-indigo-400 smooth qss-legibility-override"></i>
|
|
7
|
+
</div>
|
|
8
|
+
<div id="pp-grammar-body" class="qss anchored w-full bg-slate-950 p-2 vertical qss-content-driven contain-layout" style="height: calc(150 * var(--qnt));">
|
|
9
|
+
<div id="pp-grammar-search-wrapper" class="qss anchored w-full mb-1.5 qss-content-driven contain-layout">
|
|
10
|
+
<input type="text" placeholder="Search adjectives..." class="qss w-full bg-slate-900 border border-slate-800 rounded-2 px-2 py-1 text-white text-size-11 outline-none border-indigo-500/20 focus:border-indigo-500/50 smooth qss-legibility-override" />
|
|
11
|
+
</div>
|
|
12
|
+
<div id="pp-grammar-list-wrapper" class="qss anchored w-full flex-1 scroll-auto contain-layout" style="height: calc(150 * var(--qnt));">
|
|
13
|
+
<!-- Populated by JS -->
|
|
14
|
+
<div class="qss p-3 text-size-11 text-slate-600 italic">Initializing Grammar...</div>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<!-- 2. QSS Inspector (Physics) -->
|
|
20
|
+
<div id="pp-physics-container" class="qss anchored w-full vertical border-b border-slate-800 dev-border contain-layout">
|
|
21
|
+
<div id="pp-physics-header" class="qss anchored w-full h-44 bg-slate-900 px-2.5 horizontal v-mid spaced clickable group contain-layout">
|
|
22
|
+
<span class="qss text-size-11 text-slate-500 font-bold uppercase tracking qss-legibility-override">QSS Inspector</span>
|
|
23
|
+
<i class="icon-maximize text-size-12 text-slate-600 group-hover:text-emerald-400 smooth qss-legibility-override"></i>
|
|
24
|
+
</div>
|
|
25
|
+
<div id="pp-physics-body" class="qss anchored w-full p-2.5 bg-slate-950 vertical gap-2 contain-layout">
|
|
26
|
+
<div id="pp-physics-target" class="qss anchored w-full horizontal spaced v-mid contain-layout">
|
|
27
|
+
<span class="qss text-size-11 text-slate-600 font-bold uppercase qss-legibility-override">Target Noun</span>
|
|
28
|
+
<span class="qss font-mono text-indigo-400 text-size-11 font-bold">#none</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<div id="pp-physics-stats" class="qss anchored w-full horizontal spaced border-t border-slate-900 pt-1.5 contain-layout">
|
|
32
|
+
<div id="pp-stat-x" class="qss anchored vertical centered w-44 qss-ergonomic-override contain-layout">
|
|
33
|
+
<span class="qss text-size-11 text-slate-600 uppercase mb-0.5 qss-legibility-override">Pos-X</span>
|
|
34
|
+
<span class="qss font-mono text-white text-size-11 bg-slate-900 px-1 py-0.5 rounded-2">0</span>
|
|
35
|
+
</div>
|
|
36
|
+
<div id="pp-stat-y" class="qss anchored vertical centered w-44 qss-ergonomic-override contain-layout">
|
|
37
|
+
<span class="qss text-size-11 text-slate-600 uppercase mb-0.5 qss-legibility-override">Pos-Y</span>
|
|
38
|
+
<span class="qss font-mono text-white text-size-11 bg-slate-900 px-1 py-0.5 rounded-2">0</span>
|
|
39
|
+
</div>
|
|
40
|
+
<div id="pp-stat-w" class="qss anchored vertical centered w-44 qss-ergonomic-override contain-layout">
|
|
41
|
+
<span class="qss text-size-11 text-slate-600 uppercase mb-0.5 qss-legibility-override">Width</span>
|
|
42
|
+
<span class="qss font-mono text-emerald-400 text-size-11 bg-slate-900 px-1 py-0.5 rounded-2">0</span>
|
|
43
|
+
</div>
|
|
44
|
+
<div id="pp-stat-h" class="qss anchored vertical centered w-44 qss-ergonomic-override contain-layout">
|
|
45
|
+
<span class="qss text-size-11 text-slate-600 uppercase mb-0.5 qss-legibility-override">Height</span>
|
|
46
|
+
<span class="qss font-mono text-emerald-400 text-size-11 bg-slate-900 px-1 py-0.5 rounded-2">0</span>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<!-- 3. Styles Editor (Chemistry) -->
|
|
53
|
+
<div id="pp-chemistry-container" class="qss anchored w-full vertical flex-1 dev-border contain-layout">
|
|
54
|
+
<div id="pp-chemistry-header" class="qss anchored w-full h-44 bg-slate-900 px-2.5 horizontal v-mid spaced clickable group contain-layout">
|
|
55
|
+
<span class="qss text-size-11 text-slate-500 font-bold uppercase tracking qss-legibility-override">Styles Editor</span>
|
|
56
|
+
<i class="icon-edit-3 text-size-12 text-slate-600 group-hover:text-amber-400 smooth qss-legibility-override"></i>
|
|
57
|
+
</div>
|
|
58
|
+
<div id="pp-styles-editor" class="qss anchored w-full flex-1 bg-slate-950 scroll-auto p-2.5 contain-layout">
|
|
59
|
+
<div id="pp-adjectives-section" class="qss anchored vertical gap-1 contain-layout">
|
|
60
|
+
<span class="qss text-size-11 text-slate-500 font-bold uppercase mb-1 qss-legibility-override">Active Adjectives</span>
|
|
61
|
+
<div id="pp-active-adjectives-list" class="qss anchored horizontal flex-wrap gap-1 contain-layout">
|
|
62
|
+
<div class="qss px-1.5 py-0.5 bg-slate-900 text-slate-400 rounded-2 text-size-11 italic qss-legibility-override">Select an element...</div>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<div id="pp-alchemy-section" class="qss anchored w-full mt-4 vertical gap-2 contain-layout">
|
|
67
|
+
<span class="qss text-size-11 text-slate-500 font-bold uppercase qss-legibility-override">Quick Alchemy</span>
|
|
68
|
+
<div id="pp-alchemy-buttons" class="qss anchored horizontal gap-1 contain-layout">
|
|
69
|
+
<button id="pp-btn-flip-h" class="qss flex-1 h-44 bg-slate-900 hover:bg-slate-800 text-size-11 text-slate-400 rounded-4 border-none clickable smooth qss-legibility-override">FLIP-H</button>
|
|
70
|
+
<button id="pp-btn-flip-v" class="qss flex-1 h-44 bg-slate-900 hover:bg-slate-800 text-size-11 text-slate-400 rounded-4 border-none clickable smooth qss-legibility-override">FLIP-V</button>
|
|
71
|
+
<button id="pp-btn-ghost" class="qss flex-1 h-44 bg-slate-900 hover:bg-slate-800 text-size-11 text-slate-400 rounded-4 border-none clickable smooth qss-legibility-override">GHOST</button>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div id="root-selector-modal" class="qss-fixed qss-inset-0 qss-z-[2000] qss-hidden qss-items-center qss-justify-center qss-bg-black/60 qss-backdrop-blur-sm qss-p-4">
|
|
2
|
+
<div class="qss-bg-[#1a1d23] qss-border qss-border-slate-700 qss-rounded-lg qss-shadow-2xl qss-w-full qss-max-w-lg qss-overflow-hidden qss-flex qss-flex-col qss-max-h-[80vh]">
|
|
3
|
+
<%= render 'parapet/shared/root_selector/header' %>
|
|
4
|
+
<%= render 'parapet/shared/root_selector/warning' %>
|
|
5
|
+
<%= render 'parapet/shared/root_selector/path_input' %>
|
|
6
|
+
<%= render 'parapet/shared/root_selector/quick_select' %>
|
|
7
|
+
|
|
8
|
+
<!-- Footer -->
|
|
9
|
+
<div class="qss-px-4 qss-py-3 qss-border-t qss-border-slate-700 qss-bg-[#111418] qss-flex qss-justify-end">
|
|
10
|
+
<button onclick="closeRootModal()" class="qss-text-[10px] qss-font-bold qss-uppercase qss-text-slate-500 hover:qss-text-slate-300 qss-transition-colors">Cancel</button>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<%= render 'parapet/shared/root_selector/scripts' %>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<!-- Tab Bar -->
|
|
2
|
+
<div class="qss-min-h-[32px] qss-bg-[#1a1d23] qss-border-b qss-border-slate-800 qss-flex qss-flex-wrap qss-items-center qss-overflow-hidden">
|
|
3
|
+
<!-- Active Tab: user_spec.rb -->
|
|
4
|
+
<div class="qss-h-8 qss-flex qss-items-center qss-px-2 qss-bg-[#111418] qss-border-r qss-border-slate-800 qss-text-[11px] qss-font-medium qss-text-slate-300 qss-gap-2 qss-whitespace-nowrap">
|
|
5
|
+
<svg class="tab-bar-icon qss-w-3.5 qss-h-3.5 qss-text-red-500" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3h12l4 6-10 13L2 9Z"/><path d="M11 3 8 9l4 13 4-13-3-6"/><path d="M2 9h20"/></svg>
|
|
6
|
+
<span>user_spec.rb</span>
|
|
7
|
+
<i class="lucide-x qss-w-3 qss-h-3 qss-text-slate-600 hover:qss-text-white qss-cursor-pointer qss-ml-1"></i>
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
<!-- auth_request_spec.rb -->
|
|
11
|
+
<div class="qss-h-8 qss-flex qss-items-center qss-px-2 qss-border-r qss-border-slate-800 qss-text-[11px] qss-font-medium qss-text-slate-500 qss-gap-2 hover:qss-text-slate-300 qss-cursor-pointer qss-whitespace-nowrap">
|
|
12
|
+
<svg class="tab-bar-icon qss-w-3.5 qss-h-3.5 qss-text-red-400" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3h12l4 6-10 13L2 9Z"/><path d="M11 3 8 9l4 13 4-13-3-6"/><path d="M2 9h20"/></svg>
|
|
13
|
+
<span>auth_request_spec.rb</span>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<!-- user_registration.feature -->
|
|
17
|
+
<div class="qss-h-8 qss-flex qss-items-center qss-px-2 qss-border-r qss-border-slate-800 qss-text-[11px] qss-font-medium qss-text-slate-500 qss-gap-2 hover:qss-text-slate-300 qss-cursor-pointer qss-whitespace-nowrap">
|
|
18
|
+
<svg class="tab-bar-icon qss-w-3.5 qss-h-3.5 qss-text-emerald-500" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/><line x1="10" y1="9" x2="8" y2="9"/></svg>
|
|
19
|
+
<span>user_registration.feature</span>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<!-- db_cleanup.rake -->
|
|
23
|
+
<div class="qss-h-8 qss-flex qss-items-center qss-px-2 qss-border-r qss-border-slate-800 qss-text-[11px] qss-font-medium qss-text-slate-500 qss-gap-2 hover:qss-text-slate-300 qss-cursor-pointer qss-whitespace-nowrap">
|
|
24
|
+
<svg class="tab-bar-icon qss-w-3.5 qss-h-3.5 qss-text-orange-500" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 17V5a2 2 0 0 0-2-2H4"/><path d="M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3"/></svg>
|
|
25
|
+
<span>db_cleanup.rake</span>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<!-- user.rb -->
|
|
29
|
+
<div class="qss-h-8 qss-flex qss-items-center qss-px-2 qss-border-r qss-border-slate-800 qss-text-[11px] qss-font-medium qss-text-slate-500 qss-gap-2 hover:qss-text-slate-300 qss-cursor-pointer qss-whitespace-nowrap">
|
|
30
|
+
<svg class="tab-bar-icon qss-w-3.5 qss-h-3.5 qss-text-red-600" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3h12l4 6-10 13L2 9Z"/><path d="M11 3 8 9l4 13 4-13-3-6"/><path d="M2 9h20"/></svg>
|
|
31
|
+
<span>user.rb</span>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<!-- _user.html.erb -->
|
|
35
|
+
<div class="qss-h-8 qss-flex qss-items-center qss-px-2 qss-border-r qss-border-slate-800 qss-text-[11px] qss-font-medium qss-text-slate-500 qss-gap-2 hover:qss-text-slate-300 qss-cursor-pointer qss-whitespace-nowrap">
|
|
36
|
+
<svg class="tab-bar-icon qss-w-3.5 qss-h-3.5 qss-text-indigo-400" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg>
|
|
37
|
+
<span>_user.html.erb</span>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<!-- user_factory.rb -->
|
|
41
|
+
<div class="qss-h-8 qss-flex qss-items-center qss-px-2 qss-border-r qss-border-slate-800 qss-text-[11px] qss-font-medium qss-text-slate-500 qss-gap-2 hover:qss-text-slate-300 qss-cursor-pointer qss-whitespace-nowrap">
|
|
42
|
+
<svg class="tab-bar-icon qss-w-3.5 qss-h-3.5 qss-text-amber-500" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M3 5V19A9 3 0 0 0 21 19V5"/><path d="M3 12A9 3 0 0 0 21 12"/></svg>
|
|
43
|
+
<span>user_factory.rb</span>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<!-- dashboard.test.js -->
|
|
47
|
+
<div class="qss-h-8 qss-flex qss-items-center qss-px-2 qss-border-r qss-border-slate-800 qss-text-[11px] qss-font-medium qss-text-slate-500 qss-gap-2 hover:qss-text-slate-300 qss-cursor-pointer qss-whitespace-nowrap">
|
|
48
|
+
<svg class="tab-bar-icon qss-w-3.5 qss-h-3.5 qss-text-yellow-500" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"/><polyline points="14 2 14 8 20 8"/><path d="M8 13h8"/><path d="M8 17h8"/><path d="M10 9H8"/></svg>
|
|
49
|
+
<span>dashboard.test.js</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<!-- application.css -->
|
|
53
|
+
<div class="qss-h-8 qss-flex qss-items-center qss-px-2 qss-border-r qss-border-slate-800 qss-text-[11px] qss-font-medium qss-text-slate-500 qss-gap-2 hover:qss-text-slate-300 qss-cursor-pointer qss-whitespace-nowrap">
|
|
54
|
+
<svg class="tab-bar-icon qss-w-3.5 qss-h-3.5 qss-text-pink-500" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="13.5" cy="6.5" r=".5"/><circle cx="17.5" cy="10.5" r=".5"/><circle cx="8.5" cy="7.5" r=".5"/><circle cx="6.5" cy="12.5" r=".5"/><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.92 0 1.71-.7 1.71-1.61 0-.43-.17-.83-.44-1.13l-.14-.15a1 1 0 0 1-.21-.33c-.03-.11-.04-.22-.04-.33 0-.55.45-1 1-1h2.12c2.76 0 5-2.24 5-5 0-4.42-4.03-8-9-8z"/></svg>
|
|
55
|
+
<span>application.css</span>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<!-- Add New Tab -->
|
|
59
|
+
<div class="qss-h-8 qss-flex qss-items-center qss-px-2 qss-text-slate-600 hover:qss-text-white qss-cursor-pointer">
|
|
60
|
+
<i class="lucide-plus qss-w-3.5 qss-h-3.5"></i>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!-- Agent Intelligence Group -->
|
|
2
|
+
<div class="qss-ribbon-group">
|
|
3
|
+
<div class="qss-ribbon-activities">
|
|
4
|
+
<div class="qss-activity-item" data-activity-id="agent-chat" title="Agent Chat (A)">
|
|
5
|
+
<%= pp_icon 'message-square' %>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="qss-activity-item" data-activity-id="agent-auto-draw" title="Auto-Draw from Prompt (D)">
|
|
8
|
+
<%= pp_icon 'sparkles' %>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="qss-activity-item" data-activity-id="agent-verify" title="Verify Constraints (V)">
|
|
11
|
+
<%= pp_icon 'shield-check' %>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
<span class="qss-text-[7px] qss-font-bold qss-text-slate-500 qss-uppercase qss-tracking-tight">Agent Intelligence</span>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!-- Analysis Group -->
|
|
2
|
+
<div class="qss-ribbon-group">
|
|
3
|
+
<div class="qss-ribbon-activities">
|
|
4
|
+
<div class="qss-activity-item" data-proficiency="2" data-activity-id="coverage-heatmap" title="Coverage Heatmap (A) - Analysis">
|
|
5
|
+
<%= pp_icon 'coverage-heatmap' %>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="qss-activity-item" data-proficiency="2" data-activity-id="flaky-history" title="Flaky History (A) - Analysis">
|
|
8
|
+
<%= pp_icon 'flaky-history' %>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="qss-activity-item" data-proficiency="2" data-activity-id="slow-test-bottlenecks" title="Slow Test Bottlenecks (A) - Analysis">
|
|
11
|
+
<%= pp_icon 'slow-test-bottlenecks' %>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
<span class="qss-text-[7px] qss-font-bold qss-text-slate-500 qss-uppercase qss-tracking-tight">Analysis</span>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!-- Architect (Drawing Tools) -->
|
|
2
|
+
<div class="qss-ribbon-group">
|
|
3
|
+
<div class="qss-ribbon-activities">
|
|
4
|
+
<div class="qss-activity-item" data-activity-id="draw-rect" title="Draw Rectangle (R)">
|
|
5
|
+
<%= pp_icon 'square' %>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="qss-activity-item" data-activity-id="draw-circle" title="Draw Circle (O)">
|
|
8
|
+
<%= pp_icon 'circle' %>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="qss-activity-item" data-activity-id="draw-line" title="Draw Line (L)">
|
|
11
|
+
<%= pp_icon 'minus' %>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="qss-activity-item" data-activity-id="draw-text" title="Add Text (T)">
|
|
14
|
+
<%= pp_icon 'type' %>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="qss-activity-item" data-activity-id="draw-frame" title="Create Frame (F)">
|
|
17
|
+
<%= pp_icon 'frame' %>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
<span class="qss-text-[7px] qss-font-bold qss-text-slate-500 qss-uppercase qss-tracking-tight">Architect</span>
|
|
21
|
+
</div>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- Explorer Group -->
|
|
2
|
+
<div class="qss-ribbon-group">
|
|
3
|
+
<div class="qss-ribbon-activities">
|
|
4
|
+
<div class="qss-activity-item" data-proficiency="2" data-activity-id="smart-search" title="Smart Search (A) - Explorer">
|
|
5
|
+
<%= pp_icon 'smart-search' %>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="qss-activity-item" data-proficiency="2" data-activity-id="registry-metadata" title="Registry Metadata (A) - Explorer">
|
|
8
|
+
<%= pp_icon 'registry-metadata' %>
|
|
9
|
+
</div>
|
|
10
|
+
</div>
|
|
11
|
+
<span class="qss-text-[7px] qss-font-bold qss-text-slate-500 qss-uppercase qss-tracking-tight">Explorer</span>
|
|
12
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!-- Inspector Group -->
|
|
2
|
+
<div class="qss-ribbon-group">
|
|
3
|
+
<div class="qss-ribbon-activities">
|
|
4
|
+
<div class="qss-activity-item" data-proficiency="2" data-activity-id="seed-inspector" title="Seed Inspector (A) - Inspector">
|
|
5
|
+
<%= pp_icon 'seed-inspector' %>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="qss-activity-item" data-proficiency="2" data-activity-id="unified-schema-view" title="Unified Schema View (A) - Inspector">
|
|
8
|
+
<%= pp_icon 'unified-schema-view' %>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="qss-activity-item" data-proficiency="2" data-activity-id="live-sql-stream" title="Live SQL Stream (A) - Inspector">
|
|
11
|
+
<%= pp_icon 'live-sql-stream' %>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
<span class="qss-text-[7px] qss-font-bold qss-text-slate-500 qss-uppercase qss-tracking-tight">Inspector</span>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<!-- Proficiency Chevron Filter -->
|
|
2
|
+
<div class="qss-proficiency-filter-wrap">
|
|
3
|
+
<div id="qss-proficiency-filter" class="qss-proficiency-filter-items" title="Filter by Proficiency: Novice (N), Intermediate (I), Advanced (A), Power (P)">
|
|
4
|
+
<div class="qss-chevron-hitbox" data-level="0" id="qss-hitbox-novice">
|
|
5
|
+
<div class="qss-chevron-bar qss-bg-novice"></div>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="qss-chevron-hitbox" data-level="1" id="qss-hitbox-intermediate">
|
|
8
|
+
<div class="qss-chevron-bar qss-bg-intermediate"></div>
|
|
9
|
+
<div class="qss-chevron-bar qss-bg-intermediate"></div>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="qss-chevron-hitbox" data-level="2" id="qss-hitbox-advanced">
|
|
12
|
+
<div class="qss-chevron-bar qss-bg-advanced"></div>
|
|
13
|
+
<div class="qss-chevron-bar qss-bg-advanced"></div>
|
|
14
|
+
<div class="qss-chevron-bar qss-bg-advanced"></div>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="qss-chevron-hitbox" data-level="3" id="qss-hitbox-power">
|
|
17
|
+
<div class="qss-chevron-bar qss-bg-power"></div>
|
|
18
|
+
<div class="qss-chevron-bar qss-bg-power"></div>
|
|
19
|
+
<div class="qss-chevron-bar qss-bg-power"></div>
|
|
20
|
+
<div class="qss-chevron-bar qss-bg-power"></div>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
<span class="qss-text-[7px] qss-font-bold qss-text-slate-500 qss-uppercase qss-tracking-tight">Level</span>
|
|
24
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!-- Runner Group -->
|
|
2
|
+
<div class="qss-ribbon-group">
|
|
3
|
+
<div class="qss-ribbon-activities">
|
|
4
|
+
<div class="qss-activity-item" data-proficiency="0" data-activity-id="progress-area" title="Diagnostic Area (N) - Runner">
|
|
5
|
+
<%= pp_icon 'progress-area' %>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="qss-activity-item" data-proficiency="1" data-activity-id="visual-summary-bar" title="Visual Summary Bar (I) - Runner">
|
|
8
|
+
<%= pp_icon 'visual-summary-bar' %>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="qss-activity-item" data-proficiency="1" data-activity-id="ai-error-explainer" title="Failure Inspector (I) - Runner">
|
|
11
|
+
<%= pp_icon 'failure-inspector' %>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="qss-activity-item" data-proficiency="3" data-activity-id="terminal" title="Terminal (P) - Runner">
|
|
14
|
+
<%= pp_icon 'terminal' %>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="qss-activity-item" data-proficiency="2" data-activity-id="visual-comparison" title="Visual Comparison (A) - Runner">
|
|
17
|
+
<%= pp_icon 'visual-comparison' %>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
<span class="qss-text-[7px] qss-font-bold qss-text-slate-500 qss-uppercase qss-tracking-tight">Runner</span>
|
|
21
|
+
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!-- Spatial Inspector -->
|
|
2
|
+
<div class="qss-ribbon-group">
|
|
3
|
+
<div class="qss-ribbon-activities">
|
|
4
|
+
<div class="qss-activity-item" data-activity-id="spatial-lock" title="Spatial Lock (S)">
|
|
5
|
+
<%= pp_icon 'lock' %>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="qss-activity-item" data-activity-id="spatial-measure" title="Measure Distance (D)">
|
|
8
|
+
<%= pp_icon 'ruler' %>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="qss-activity-item" data-activity-id="spatial-grid" title="Toggle Spatial Grid (G)">
|
|
11
|
+
<%= pp_icon 'grid-3x3' %>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="qss-activity-item" data-activity-id="spatial-3d" title="3D Preview (3)">
|
|
14
|
+
<%= pp_icon 'box' %>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
<span class="qss-text-[7px] qss-font-bold qss-text-slate-500 qss-uppercase qss-tracking-tight">Spatial</span>
|
|
18
|
+
</div>
|