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,79 @@
|
|
|
1
|
+
<div id="pp-debugger-header" class="qss pos-x[0] pos-y[0] w-full h[40] bg-brand-header border-b[1] border-slate-800 horizontal v-mid px[16] spaced">
|
|
2
|
+
<div class="qss anchored horizontal v-mid gap[8]">
|
|
3
|
+
<span class="qss text-slate-500 font[sans] text-size[12] uppercase tracking-wider">Project</span>
|
|
4
|
+
<span class="qss text-slate-700 font[sans] text-size[12]">/</span>
|
|
5
|
+
<span class="qss text-slate-400 font[sans] text-size[12]">src</span>
|
|
6
|
+
<span class="qss text-slate-700 font[sans] text-size[12]">/</span>
|
|
7
|
+
<span class="qss text-slate-200 font-medium font[sans] text-size[12]">debug_session.rb</span>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="qss anchored horizontal v-mid gap[8]">
|
|
10
|
+
<div class="qss px[12] py[4] bg-emerald-600 rounded[4] text-white text-size[11] weight[600] clickable smooth">Resume</div>
|
|
11
|
+
<div class="qss px[12] py[4] bg-slate-700 rounded[4] text-slate-200 text-size[11] weight[600] clickable smooth">Step Over</div>
|
|
12
|
+
<div class="qss px[12] py[4] bg-rose-600 rounded[4] text-white text-size[11] weight[600] clickable smooth">Stop</div>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<div id="pp-debugger-console" class="qss pos-x[0] pos-b[0] w-full h[180] bg-black border-t[1] border-slate-800 vertical">
|
|
17
|
+
<div class="qss anchored w-full h[24] border-b[1] border-slate-800 px[12] horizontal v-mid spaced">
|
|
18
|
+
<span class="qss text-slate-500 text-size[11] weight[600] uppercase tracking-wider">Console</span>
|
|
19
|
+
<span class="qss text-slate-600 text-size[11] clickable hover:text-slate-400">Clear</span>
|
|
20
|
+
</div>
|
|
21
|
+
<div id="pp-console-output" class="qss anchored w-full flex-1 p[12] vertical gap[4] scroll[auto] foreign">
|
|
22
|
+
<div class="flex gap-2 font-mono text-[11px]">
|
|
23
|
+
<span class="text-slate-600">[12:04:01]</span>
|
|
24
|
+
<span class="text-slate-300">Starting debug session...</span>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="flex gap-2 font-mono text-[11px]">
|
|
27
|
+
<span class="text-slate-600">[12:04:02]</span>
|
|
28
|
+
<span class="text-slate-300">Breakpoint hit at payment_service.rb:42</span>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="flex gap-2 font-mono text-[11px]">
|
|
31
|
+
<span class="text-slate-600">[12:04:03]</span>
|
|
32
|
+
<span class="text-rose-400">Warning: amount exceeds threshold</span>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div id="pp-callstack-pane" class="qss pos-x[0] pos-y[^pp-debugger-header] w[260] pos-b[^pp-debugger-console] bg-brand-main border-r[1] border-slate-800 vertical">
|
|
38
|
+
<div class="qss anchored w-full h[24] border-b[1] border-slate-800 bg-brand-header px[12] horizontal v-mid">
|
|
39
|
+
<span class="qss text-slate-500 font-semibold font[sans] text-size[11] uppercase tracking-widest">Call Stack</span>
|
|
40
|
+
</div>
|
|
41
|
+
<div class="qss anchored w-full flex-1 vertical scroll[auto]">
|
|
42
|
+
<div class="qss anchored w-full px[12] py[8] border-b[1] border-slate-900 hover:bg-slate-800 clickable">
|
|
43
|
+
<div class="qss text-slate-100 text-size[13] weight[500]">process_payment</div>
|
|
44
|
+
<div class="qss text-slate-500 text-size[11]">payment_service.rb:42</div>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="qss anchored w-full px[12] py[8] border-b[1] border-slate-900 hover:bg-slate-800 clickable">
|
|
47
|
+
<div class="qss text-slate-100 text-size[13] weight[500]">execute_transaction</div>
|
|
48
|
+
<div class="qss text-slate-500 text-size[11]">transaction.rb:118</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div id="pp-breakpoints-pane" class="qss pos-r[0] pos-y[^pp-debugger-header] w[280] pos-b[^pp-debugger-console] bg-brand-main border-l[1] border-slate-800 vertical">
|
|
54
|
+
<div class="qss anchored w-full h[24] border-b[1] border-slate-800 bg-brand-header px[12] horizontal v-mid">
|
|
55
|
+
<span class="qss text-slate-500 font-semibold font[sans] text-size[11] uppercase tracking-widest">Breakpoints</span>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="qss anchored w-full flex-1 vertical scroll[auto]">
|
|
58
|
+
<div class="qss anchored w-full px[12] py[8] horizontal v-mid gap[8] border-b[1] border-slate-900">
|
|
59
|
+
<div class="qss w[12] h[12] bg-emerald-500 rounded[2]"></div>
|
|
60
|
+
<span class="qss text-slate-300 text-size[12] font-mono">payment_service.rb:42</span>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<div id="pp-variables-pane" class="qss pos-x[^pp-callstack-pane] pos-y[^pp-debugger-header] pos-r[^pp-breakpoints-pane] pos-b[^pp-debugger-console] bg-brand-main border-l[1] border-r[1] border-slate-800 vertical">
|
|
66
|
+
<div class="qss anchored w-full h[24] border-b[1] border-slate-800 bg-brand-header px[12] horizontal v-mid">
|
|
67
|
+
<span class="qss text-slate-500 font-semibold font[sans] text-size[11] uppercase tracking-widest">Variables</span>
|
|
68
|
+
</div>
|
|
69
|
+
<div class="qss anchored w-full flex-1 vertical scroll[auto]">
|
|
70
|
+
<div class="qss anchored w-full px[12] py[6] horizontal spaced border-b[1] border-slate-900 font-mono">
|
|
71
|
+
<span class="qss text-sky-400 text-size[12]">amount</span>
|
|
72
|
+
<span class="qss text-slate-300 text-size[12]">4200</span>
|
|
73
|
+
</div>
|
|
74
|
+
<div class="qss anchored w-full px[12] py[6] horizontal spaced border-b[1] border-slate-900 font-mono">
|
|
75
|
+
<span class="qss text-sky-400 text-size[12]">currency</span>
|
|
76
|
+
<span class="qss text-slate-300 text-size[12]">"USD"</span>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<div class="flex flex-col h-full w-full bg-slate-900 text-slate-200">
|
|
2
|
+
<header class="flex items-center justify-between px-4 py-2 border-b border-slate-700 bg-slate-800">
|
|
3
|
+
<nav class="flex items-center gap-2 text-sm">
|
|
4
|
+
<span class="text-slate-400">Project</span>
|
|
5
|
+
<span class="text-slate-600">/</span>
|
|
6
|
+
<span class="text-slate-400">src</span>
|
|
7
|
+
<span class="text-slate-600">/</span>
|
|
8
|
+
<span class="text-slate-400">controllers</span>
|
|
9
|
+
<span class="text-slate-600">/</span>
|
|
10
|
+
<span class="text-slate-100 font-medium">debug_session.rb</span>
|
|
11
|
+
</nav>
|
|
12
|
+
<div class="flex items-center gap-2">
|
|
13
|
+
<button type="button" class="px-3 py-1 text-xs font-medium rounded bg-emerald-600 hover:bg-emerald-500 text-white">
|
|
14
|
+
Resume
|
|
15
|
+
</button>
|
|
16
|
+
<button type="button" class="px-3 py-1 text-xs font-medium rounded bg-slate-700 hover:bg-slate-600 text-slate-200">
|
|
17
|
+
Step Over
|
|
18
|
+
</button>
|
|
19
|
+
<button type="button" class="px-3 py-1 text-xs font-medium rounded bg-red-600 hover:bg-red-500 text-white">
|
|
20
|
+
Stop
|
|
21
|
+
</button>
|
|
22
|
+
</div>
|
|
23
|
+
</header>
|
|
24
|
+
|
|
25
|
+
<div class="flex flex-1 min-h-0">
|
|
26
|
+
<section class="flex flex-col flex-1 min-w-0 border-r border-slate-700">
|
|
27
|
+
<h2 class="px-3 py-2 text-xs font-semibold uppercase tracking-wide text-slate-400 border-b border-slate-700 bg-slate-800">
|
|
28
|
+
Call Stack
|
|
29
|
+
</h2>
|
|
30
|
+
<ul class="flex-1 overflow-y-auto divide-y divide-slate-800">
|
|
31
|
+
<li class="px-3 py-2 text-sm hover:bg-slate-800 cursor-pointer">
|
|
32
|
+
<p class="font-medium text-slate-100">process_payment</p>
|
|
33
|
+
<p class="text-xs text-slate-500">payment_service.rb:42</p>
|
|
34
|
+
</li>
|
|
35
|
+
<li class="px-3 py-2 text-sm hover:bg-slate-800 cursor-pointer">
|
|
36
|
+
<p class="font-medium text-slate-100">execute_transaction</p>
|
|
37
|
+
<p class="text-xs text-slate-500">transaction.rb:118</p>
|
|
38
|
+
</li>
|
|
39
|
+
<li class="px-3 py-2 text-sm hover:bg-slate-800 cursor-pointer">
|
|
40
|
+
<p class="font-medium text-slate-100">call</p>
|
|
41
|
+
<p class="text-xs text-slate-500">application_controller.rb:9</p>
|
|
42
|
+
</li>
|
|
43
|
+
</ul>
|
|
44
|
+
</section>
|
|
45
|
+
|
|
46
|
+
<section class="flex flex-col flex-1 min-w-0 border-r border-slate-700">
|
|
47
|
+
<h2 class="px-3 py-2 text-xs font-semibold uppercase tracking-wide text-slate-400 border-b border-slate-700 bg-slate-800">
|
|
48
|
+
Variables
|
|
49
|
+
</h2>
|
|
50
|
+
<ul class="flex-1 overflow-y-auto divide-y divide-slate-800 font-mono text-sm">
|
|
51
|
+
<li class="flex items-center justify-between px-3 py-2 hover:bg-slate-800">
|
|
52
|
+
<span class="text-sky-400">amount</span>
|
|
53
|
+
<span class="text-slate-300">4200</span>
|
|
54
|
+
</li>
|
|
55
|
+
<li class="flex items-center justify-between px-3 py-2 hover:bg-slate-800">
|
|
56
|
+
<span class="text-sky-400">currency</span>
|
|
57
|
+
<span class="text-slate-300">"USD"</span>
|
|
58
|
+
</li>
|
|
59
|
+
<li class="flex items-center justify-between px-3 py-2 hover:bg-slate-800">
|
|
60
|
+
<span class="text-sky-400">status</span>
|
|
61
|
+
<span class="text-amber-400">"pending"</span>
|
|
62
|
+
</li>
|
|
63
|
+
</ul>
|
|
64
|
+
</section>
|
|
65
|
+
|
|
66
|
+
<section class="flex flex-col flex-1 min-w-0">
|
|
67
|
+
<h2 class="px-3 py-2 text-xs font-semibold uppercase tracking-wide text-slate-400 border-b border-slate-700 bg-slate-800">
|
|
68
|
+
Breakpoints
|
|
69
|
+
</h2>
|
|
70
|
+
<ul class="flex-1 overflow-y-auto divide-y divide-slate-800">
|
|
71
|
+
<li class="flex items-center gap-2 px-3 py-2 text-sm hover:bg-slate-800">
|
|
72
|
+
<input type="checkbox" checked class="rounded border-slate-600 bg-slate-700 text-emerald-500 focus:ring-0">
|
|
73
|
+
<span class="text-slate-300">payment_service.rb:42</span>
|
|
74
|
+
</li>
|
|
75
|
+
<li class="flex items-center gap-2 px-3 py-2 text-sm hover:bg-slate-800">
|
|
76
|
+
<input type="checkbox" checked class="rounded border-slate-600 bg-slate-700 text-emerald-500 focus:ring-0">
|
|
77
|
+
<span class="text-slate-300">transaction.rb:118</span>
|
|
78
|
+
</li>
|
|
79
|
+
<li class="flex items-center gap-2 px-3 py-2 text-sm hover:bg-slate-800">
|
|
80
|
+
<input type="checkbox" class="rounded border-slate-600 bg-slate-700 text-emerald-500 focus:ring-0">
|
|
81
|
+
<span class="text-slate-300">application_controller.rb:9</span>
|
|
82
|
+
</li>
|
|
83
|
+
</ul>
|
|
84
|
+
</section>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<footer class="flex flex-col h-48 border-t border-slate-700 bg-black">
|
|
88
|
+
<div class="flex items-center justify-between px-3 py-1 border-b border-slate-800">
|
|
89
|
+
<span class="text-xs font-semibold uppercase tracking-wide text-slate-400">Console</span>
|
|
90
|
+
<button type="button" class="text-xs text-slate-500 hover:text-slate-300">Clear</button>
|
|
91
|
+
</div>
|
|
92
|
+
<div class="flex-1 overflow-y-auto px-3 py-2 font-mono text-xs text-slate-300 space-y-1">
|
|
93
|
+
<p><span class="text-slate-600">[12:04:01]</span> Starting debug session...</p>
|
|
94
|
+
<p><span class="text-slate-600">[12:04:02]</span> Breakpoint hit at payment_service.rb:42</p>
|
|
95
|
+
<p><span class="text-red-400">[12:04:03]</span> Warning: amount exceeds threshold</p>
|
|
96
|
+
</div>
|
|
97
|
+
</footer>
|
|
98
|
+
</div>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= render @partial_path %>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<div id="pp-git-viewer" class="qss w-full h-full">
|
|
2
|
+
|
|
3
|
+
<!-- Left: Commit History Sidebar -->
|
|
4
|
+
<div id="pp-git-history-sidebar" class="qss detached pos-x[0] pos-y[0] w[300] pos-b[^pp-git-metadata] bg-brand-header border-r[1] border-slate-800 scroll[auto] vertical">
|
|
5
|
+
<div class="qss anchored w-full px[12] py[8] border-b[1] border-slate-800">
|
|
6
|
+
<h3 class="text-size[11] weight[700] uppercase tracking[wide] text-slate-400">Commit History</h3>
|
|
7
|
+
</div>
|
|
8
|
+
<div id="pp-git-commit-list" class="qss anchored w-full vertical scroll[auto]">
|
|
9
|
+
<div class="qss anchored w-full horizontal v-mid spaced px[12] py[8] border-b[1] border-slate-800 clickable">
|
|
10
|
+
<span class="text-size[12] font-mono text-slate-300">a1b2c3d</span>
|
|
11
|
+
<span class="foreign bg-emerald-500/10 text-emerald-400 border border-emerald-500/20 rounded-full text-size[11] [padding:2px_8px]">merged</span>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="qss anchored w-full horizontal v-mid spaced px[12] py[8] border-b[1] border-slate-800 clickable">
|
|
14
|
+
<span class="text-size[12] font-mono text-slate-300">7f9e0d2</span>
|
|
15
|
+
<span class="foreign bg-amber-500/10 text-amber-400 border border-amber-500/20 rounded-full text-size[11] [padding:2px_8px]">pending</span>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="qss anchored w-full horizontal v-mid spaced px[12] py[8] border-b[1] border-slate-800 clickable">
|
|
18
|
+
<span class="text-size[12] font-mono text-slate-300">4c8a1f6</span>
|
|
19
|
+
<span class="foreign bg-rose-500/10 text-rose-400 border border-rose-500/20 rounded-full text-size[11] [padding:2px_8px]">reverted</span>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="qss anchored w-full horizontal v-mid spaced px[12] py[8] border-b[1] border-slate-800 clickable">
|
|
22
|
+
<span class="text-size[12] font-mono text-slate-300">e3d5b7a</span>
|
|
23
|
+
<span class="foreign bg-emerald-500/10 text-emerald-400 border border-emerald-500/20 rounded-full text-size[11] [padding:2px_8px]">merged</span>
|
|
24
|
+
</div>
|
|
25
|
+
<!-- Additional commit entries rendered here -->
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<!-- Right: Diff Viewer (Old/New split-pane) -->
|
|
30
|
+
<div id="pp-git-diff-viewer" class="qss detached pos-x[^pp-git-history-sidebar] pos-y[0] pos-r[0] pos-b[^pp-git-metadata] horizontal">
|
|
31
|
+
|
|
32
|
+
<div id="pp-git-diff-old" class="qss anchored h-full flex-1 border-r[1] border-slate-800 bg-brand-main scroll[auto] vertical">
|
|
33
|
+
<div class="qss anchored w-full px[12] py[8] border-b[1] border-slate-800">
|
|
34
|
+
<span class="text-size[11] weight[700] uppercase tracking[wide] text-slate-500">Old</span>
|
|
35
|
+
</div>
|
|
36
|
+
<div id="pp-git-diff-old-content" class="qss anchored w-full foreign">
|
|
37
|
+
<!-- Old version diff content -->
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<div id="pp-git-diff-new" class="qss anchored h-full flex-1 bg-brand-main scroll[auto] vertical">
|
|
42
|
+
<div class="qss anchored w-full px[12] py[8] border-b[1] border-slate-800">
|
|
43
|
+
<span class="text-size[11] weight[700] uppercase tracking[wide] text-slate-500">New</span>
|
|
44
|
+
</div>
|
|
45
|
+
<div id="pp-git-diff-new-content" class="qss anchored w-full foreign">
|
|
46
|
+
<!-- New version diff content -->
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<!-- Bottom: Metadata / Comment Pane -->
|
|
53
|
+
<div id="pp-git-metadata" class="qss detached pos-x[0] pos-b[0] w-full h[120] bg-brand-header border-t[1] border-slate-800 vertical">
|
|
54
|
+
<div class="qss anchored w-full px[12] py[8] border-b[1] border-slate-800">
|
|
55
|
+
<h3 class="text-size[11] weight[700] uppercase tracking[wide] text-slate-400">Metadata / Comment</h3>
|
|
56
|
+
</div>
|
|
57
|
+
<div id="pp-git-metadata-content" class="qss anchored w-full flex-1 px[12] py[8] scroll[auto]">
|
|
58
|
+
<p class="text-size[12] text-slate-400">Select a commit to view metadata and comments.</p>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
</div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<div id="pp-git-history-sidebar" class="qss pos-x[0] pos-y[0] w[300] pos-b[0] bg-brand-main border-r[1] border-slate-800 vertical">
|
|
2
|
+
<div class="qss anchored w-full h[24] border-b[1] border-slate-800 bg-brand-header px[12] horizontal v-mid">
|
|
3
|
+
<span class="qss text-slate-500 font-semibold text-size[11] uppercase tracking-widest">Commit History</span>
|
|
4
|
+
</div>
|
|
5
|
+
<div class="qss anchored w-full flex-1 vertical scroll[auto]">
|
|
6
|
+
<!-- Commit list items -->
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
<div id="pp-git-diff-viewer" class="qss pos-x[^pp-git-history-sidebar] pos-y[0] pos-r[0] pos-b[0] bg-brand-main vertical">
|
|
11
|
+
<div class="qss anchored w-full h[24] border-b[1] border-slate-800 bg-brand-header px[12] horizontal v-mid">
|
|
12
|
+
<span class="qss text-slate-500 font-semibold text-size[11] uppercase tracking-widest">Diff Viewer</span>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<div id="pp-git-history-sidebar" class="qss pos-x[0] pos-y[0] w[250] pos-b[0] bg-brand-main border-r[1] border-slate-800 vertical">
|
|
2
|
+
<div class="qss anchored w-full h[24] border-b[1] border-slate-800 bg-brand-header px[12] horizontal v-mid">
|
|
3
|
+
<span class="qss text-slate-500 font-semibold text-size[11] uppercase tracking-widest">Commit History</span>
|
|
4
|
+
</div>
|
|
5
|
+
<div class="qss anchored w-full flex-1 vertical scroll[auto]">
|
|
6
|
+
<!-- Commit list items -->
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
<div id="pp-git-diff-viewer" class="qss pos-x[^pp-git-history-sidebar] pos-y[0] pos-r[0] pos-b[0] bg-brand-main vertical">
|
|
11
|
+
<div class="qss anchored w-full h[24] border-b[1] border-slate-800 bg-brand-header px[12] horizontal v-mid">
|
|
12
|
+
<span class="qss text-slate-500 font-semibold text-size[11] uppercase tracking-widest">Diff Viewer</span>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<div class="flex flex-col h-full w-full bg-slate-900 text-slate-200">
|
|
2
|
+
<header class="flex items-center justify-between px-4 py-2 border-b border-slate-700 bg-slate-800">
|
|
3
|
+
<nav class="flex items-center gap-2 text-sm">
|
|
4
|
+
<span class="text-slate-400">Repository</span>
|
|
5
|
+
<span class="text-slate-600">/</span>
|
|
6
|
+
<span class="text-slate-100 font-medium">main</span>
|
|
7
|
+
</nav>
|
|
8
|
+
<div class="flex items-center gap-2">
|
|
9
|
+
<button type="button" class="px-3 py-1 text-xs font-medium rounded bg-emerald-600 hover:bg-emerald-500 text-white">
|
|
10
|
+
Pull
|
|
11
|
+
</button>
|
|
12
|
+
<button type="button" class="px-3 py-1 text-xs font-medium rounded bg-slate-700 hover:bg-slate-600 text-slate-200">
|
|
13
|
+
Fetch
|
|
14
|
+
</button>
|
|
15
|
+
<button type="button" class="px-3 py-1 text-xs font-medium rounded bg-red-600 hover:bg-red-500 text-white">
|
|
16
|
+
Discard
|
|
17
|
+
</button>
|
|
18
|
+
</div>
|
|
19
|
+
</header>
|
|
20
|
+
|
|
21
|
+
<div class="flex flex-1 min-h-0">
|
|
22
|
+
<aside class="flex flex-col w-80 shrink-0 border-r border-slate-700">
|
|
23
|
+
<h2 class="px-3 py-2 text-xs font-semibold uppercase tracking-wide text-slate-400 border-b border-slate-700 bg-slate-800">
|
|
24
|
+
Commit History
|
|
25
|
+
</h2>
|
|
26
|
+
<ul class="flex-1 overflow-y-auto divide-y divide-slate-800">
|
|
27
|
+
<li class="px-3 py-2 text-sm bg-slate-800 cursor-pointer">
|
|
28
|
+
<p class="font-medium text-slate-100">Add diff viewer layout</p>
|
|
29
|
+
<p class="text-xs text-slate-500">a1b2c3d · 2 hours ago</p>
|
|
30
|
+
</li>
|
|
31
|
+
<li class="px-3 py-2 text-sm hover:bg-slate-800 cursor-pointer">
|
|
32
|
+
<p class="font-medium text-slate-100">Refactor commit sidebar</p>
|
|
33
|
+
<p class="text-xs text-slate-500">e4f5g6h · 1 day ago</p>
|
|
34
|
+
</li>
|
|
35
|
+
<li class="px-3 py-2 text-sm hover:bg-slate-800 cursor-pointer">
|
|
36
|
+
<p class="font-medium text-slate-100">Fix metadata pane overflow</p>
|
|
37
|
+
<p class="text-xs text-slate-500">i7j8k9l · 2 days ago</p>
|
|
38
|
+
</li>
|
|
39
|
+
<li class="px-3 py-2 text-sm hover:bg-slate-800 cursor-pointer">
|
|
40
|
+
<p class="font-medium text-slate-100">Initial commit</p>
|
|
41
|
+
<p class="text-xs text-slate-500">m0n1o2p · 5 days ago</p>
|
|
42
|
+
</li>
|
|
43
|
+
</ul>
|
|
44
|
+
</aside>
|
|
45
|
+
|
|
46
|
+
<section class="flex flex-col flex-1 min-w-0">
|
|
47
|
+
<h2 class="px-3 py-2 text-xs font-semibold uppercase tracking-wide text-slate-400 border-b border-slate-700 bg-slate-800">
|
|
48
|
+
Diff Viewer
|
|
49
|
+
</h2>
|
|
50
|
+
<div class="flex flex-1 min-h-0">
|
|
51
|
+
<div class="flex flex-col flex-1 min-w-0 border-r border-slate-700">
|
|
52
|
+
<div class="px-3 py-1 text-xs font-medium text-slate-400 border-b border-slate-800 bg-slate-800/50">
|
|
53
|
+
Old
|
|
54
|
+
</div>
|
|
55
|
+
<pre class="flex-1 overflow-auto px-3 py-2 font-mono text-xs text-slate-400 whitespace-pre"><code><span class="block px-2 bg-red-950 text-red-300">- def calculate_total(items)</span>
|
|
56
|
+
<span class="block px-2 bg-red-950 text-red-300">- items.sum(&:price)</span>
|
|
57
|
+
<span class="block px-2"> end</span></code></pre>
|
|
58
|
+
</div>
|
|
59
|
+
<div class="flex flex-col flex-1 min-w-0">
|
|
60
|
+
<div class="px-3 py-1 text-xs font-medium text-slate-400 border-b border-slate-800 bg-slate-800/50">
|
|
61
|
+
New
|
|
62
|
+
</div>
|
|
63
|
+
<pre class="flex-1 overflow-auto px-3 py-2 font-mono text-xs text-slate-400 whitespace-pre"><code><span class="block px-2 bg-emerald-950 text-emerald-300">+ def calculate_total(items, tax_rate: 0.0)</span>
|
|
64
|
+
<span class="block px-2 bg-emerald-950 text-emerald-300">+ items.sum(&:price) * (1 + tax_rate)</span>
|
|
65
|
+
<span class="block px-2"> end</span></code></pre>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
</section>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<footer class="flex flex-col h-48 border-t border-slate-700 bg-black">
|
|
72
|
+
<div class="flex items-center justify-between px-3 py-1 border-b border-slate-800">
|
|
73
|
+
<span class="text-xs font-semibold uppercase tracking-wide text-slate-400">Metadata / Comment</span>
|
|
74
|
+
<button type="button" class="text-xs text-slate-500 hover:text-slate-300">Copy SHA</button>
|
|
75
|
+
</div>
|
|
76
|
+
<div class="flex-1 overflow-y-auto px-3 py-2 grid grid-cols-2 gap-4 text-xs">
|
|
77
|
+
<div class="space-y-1">
|
|
78
|
+
<p><span class="text-slate-500">Author:</span> <span class="text-slate-300">Jane Doe <jane@example.com></span></p>
|
|
79
|
+
<p><span class="text-slate-500">Date:</span> <span class="text-slate-300">2026-08-27 14:32:00</span></p>
|
|
80
|
+
<p><span class="text-slate-500">SHA:</span> <span class="text-slate-300 font-mono">a1b2c3d4e5f6</span></p>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="space-y-1">
|
|
83
|
+
<p class="text-slate-500">Comment</p>
|
|
84
|
+
<p class="text-slate-300">Adds support for tax rate calculation in the diff viewer totals module.</p>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
</footer>
|
|
88
|
+
</div>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<div class="flex flex-col h-full w-full bg-slate-900 text-slate-200">
|
|
2
|
+
<header class="flex items-center justify-between px-4 py-2 border-b border-slate-700 bg-slate-800">
|
|
3
|
+
<nav class="flex items-center gap-2 text-sm">
|
|
4
|
+
<span class="text-slate-400">Repository</span>
|
|
5
|
+
<span class="text-slate-600">/</span>
|
|
6
|
+
<span class="text-slate-100 font-medium">main</span>
|
|
7
|
+
</nav>
|
|
8
|
+
</header>
|
|
9
|
+
|
|
10
|
+
<div class="flex flex-1 min-h-0">
|
|
11
|
+
<!-- Left: Commit History Sidebar (AFTER RESIZE: w-[300px]) -->
|
|
12
|
+
<aside class="flex flex-col w-[300px] shrink-0 border-r border-slate-700">
|
|
13
|
+
<h2 class="px-3 py-2 text-xs font-semibold uppercase tracking-wide text-slate-400 border-b border-slate-700 bg-slate-800">
|
|
14
|
+
Commit History
|
|
15
|
+
</h2>
|
|
16
|
+
<ul class="flex-1 overflow-y-auto divide-y divide-slate-800">
|
|
17
|
+
<li class="px-3 py-2 text-sm bg-slate-800 cursor-pointer">
|
|
18
|
+
<p class="font-medium text-slate-100">Add diff viewer layout</p>
|
|
19
|
+
<p class="text-xs text-slate-500">a1b2c3d · 2 hours ago</p>
|
|
20
|
+
</li>
|
|
21
|
+
</ul>
|
|
22
|
+
</aside>
|
|
23
|
+
|
|
24
|
+
<section class="flex flex-col flex-1 min-w-0">
|
|
25
|
+
<h2 class="px-3 py-2 text-xs font-semibold uppercase tracking-wide text-slate-400 border-b border-slate-700 bg-slate-800">
|
|
26
|
+
Diff Viewer
|
|
27
|
+
</h2>
|
|
28
|
+
</section>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<footer class="flex flex-col h-48 border-t border-slate-700 bg-black">
|
|
32
|
+
<div class="flex items-center justify-between px-3 py-1 border-b border-slate-800">
|
|
33
|
+
<span class="text-xs font-semibold uppercase tracking-wide text-slate-400">Metadata / Comment</span>
|
|
34
|
+
</div>
|
|
35
|
+
</footer>
|
|
36
|
+
</div>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<div class="flex flex-col h-full w-full bg-slate-900 text-slate-200">
|
|
2
|
+
<header class="flex items-center justify-between px-4 py-2 border-b border-slate-700 bg-slate-800">
|
|
3
|
+
<nav class="flex items-center gap-2 text-sm">
|
|
4
|
+
<span class="text-slate-400">Repository</span>
|
|
5
|
+
<span class="text-slate-600">/</span>
|
|
6
|
+
<span class="text-slate-100 font-medium">main</span>
|
|
7
|
+
</nav>
|
|
8
|
+
</header>
|
|
9
|
+
|
|
10
|
+
<div class="flex flex-1 min-h-0">
|
|
11
|
+
<!-- Left: Commit History Sidebar (BEFORE RESIZE: w-64) -->
|
|
12
|
+
<aside class="flex flex-col w-64 shrink-0 border-r border-slate-700">
|
|
13
|
+
<h2 class="px-3 py-2 text-xs font-semibold uppercase tracking-wide text-slate-400 border-b border-slate-700 bg-slate-800">
|
|
14
|
+
Commit History
|
|
15
|
+
</h2>
|
|
16
|
+
<ul class="flex-1 overflow-y-auto divide-y divide-slate-800">
|
|
17
|
+
<li class="px-3 py-2 text-sm bg-slate-800 cursor-pointer">
|
|
18
|
+
<p class="font-medium text-slate-100">Add diff viewer layout</p>
|
|
19
|
+
<p class="text-xs text-slate-500">a1b2c3d · 2 hours ago</p>
|
|
20
|
+
</li>
|
|
21
|
+
</ul>
|
|
22
|
+
</aside>
|
|
23
|
+
|
|
24
|
+
<section class="flex flex-col flex-1 min-w-0">
|
|
25
|
+
<h2 class="px-3 py-2 text-xs font-semibold uppercase tracking-wide text-slate-400 border-b border-slate-700 bg-slate-800">
|
|
26
|
+
Diff Viewer
|
|
27
|
+
</h2>
|
|
28
|
+
</section>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<footer class="flex flex-col h-48 border-t border-slate-700 bg-black">
|
|
32
|
+
<div class="flex items-center justify-between px-3 py-1 border-b border-slate-800">
|
|
33
|
+
<span class="text-xs font-semibold uppercase tracking-wide text-slate-400">Metadata / Comment</span>
|
|
34
|
+
</div>
|
|
35
|
+
</footer>
|
|
36
|
+
</div>
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<div class="flex flex-col h-full w-full bg-slate-900 text-slate-200">
|
|
2
|
+
<header class="flex items-center justify-between px-4 py-2 border-b border-slate-700 bg-slate-800">
|
|
3
|
+
<nav class="flex items-center gap-2 text-sm">
|
|
4
|
+
<span class="text-slate-400">Repository</span>
|
|
5
|
+
<span class="text-slate-600">/</span>
|
|
6
|
+
<span class="text-slate-100 font-medium">main</span>
|
|
7
|
+
</nav>
|
|
8
|
+
<div class="flex items-center gap-2">
|
|
9
|
+
<button type="button" class="px-3 py-1 text-xs font-medium rounded bg-emerald-600 hover:bg-emerald-500 text-white">
|
|
10
|
+
Pull
|
|
11
|
+
</button>
|
|
12
|
+
<button type="button" class="px-3 py-1 text-xs font-medium rounded bg-slate-700 hover:bg-slate-600 text-slate-200">
|
|
13
|
+
Fetch
|
|
14
|
+
</button>
|
|
15
|
+
<button type="button" class="px-3 py-1 text-xs font-medium rounded bg-red-600 hover:bg-red-500 text-white">
|
|
16
|
+
Discard
|
|
17
|
+
</button>
|
|
18
|
+
</div>
|
|
19
|
+
</header>
|
|
20
|
+
|
|
21
|
+
<div class="flex flex-1 min-h-0">
|
|
22
|
+
<aside class="flex flex-col w-64 shrink-0 border-r border-slate-700">
|
|
23
|
+
<h2 class="px-3 py-2 text-xs font-semibold uppercase tracking-wide text-slate-400 border-b border-slate-700 bg-slate-800">
|
|
24
|
+
Commit History
|
|
25
|
+
</h2>
|
|
26
|
+
<ul class="flex-1 overflow-y-auto divide-y divide-slate-800">
|
|
27
|
+
<li class="px-3 py-2 text-sm bg-slate-800 cursor-pointer">
|
|
28
|
+
<p class="font-medium text-slate-100">Add diff viewer layout</p>
|
|
29
|
+
<p class="text-xs text-slate-500">a1b2c3d · 2 hours ago</p>
|
|
30
|
+
</li>
|
|
31
|
+
<li class="px-3 py-2 text-sm hover:bg-slate-800 cursor-pointer">
|
|
32
|
+
<p class="font-medium text-slate-100">Refactor commit sidebar</p>
|
|
33
|
+
<p class="text-xs text-slate-500">e4f5g6h · 1 day ago</p>
|
|
34
|
+
</li>
|
|
35
|
+
<li class="px-3 py-2 text-sm hover:bg-slate-800 cursor-pointer">
|
|
36
|
+
<p class="font-medium text-slate-100">Fix metadata pane overflow</p>
|
|
37
|
+
<p class="text-xs text-slate-500">i7j8k9l · 2 days ago</p>
|
|
38
|
+
</li>
|
|
39
|
+
<li class="px-3 py-2 text-sm hover:bg-slate-800 cursor-pointer">
|
|
40
|
+
<p class="font-medium text-slate-100">Initial commit</p>
|
|
41
|
+
<p class="text-xs text-slate-500">m0n1o2p · 5 days ago</p>
|
|
42
|
+
</li>
|
|
43
|
+
</ul>
|
|
44
|
+
</aside>
|
|
45
|
+
|
|
46
|
+
<section class="flex flex-col flex-1 min-w-0">
|
|
47
|
+
<h2 class="px-3 py-2 text-xs font-semibold uppercase tracking-wide text-slate-400 border-b border-slate-700 bg-slate-800">
|
|
48
|
+
Diff Viewer
|
|
49
|
+
</h2>
|
|
50
|
+
<div class="flex flex-1 min-h-0">
|
|
51
|
+
<div class="flex flex-col flex-1 min-w-0 border-r border-slate-700">
|
|
52
|
+
<div class="px-3 py-1 text-xs font-medium text-slate-400 border-b border-slate-800 bg-slate-800/50">
|
|
53
|
+
Old
|
|
54
|
+
</div>
|
|
55
|
+
<pre class="flex-1 overflow-auto px-3 py-2 font-mono text-xs text-slate-400 whitespace-pre"><code><span class="block px-2 bg-red-950 text-red-300">- def calculate_total(items)</span>
|
|
56
|
+
<span class="block px-2 bg-red-950 text-red-300">- items.sum(&:price)</span>
|
|
57
|
+
<span class="block px-2"> end</span></code></pre>
|
|
58
|
+
</div>
|
|
59
|
+
<div class="flex flex-col flex-1 min-w-0">
|
|
60
|
+
<div class="px-3 py-1 text-xs font-medium text-slate-400 border-b border-slate-800 bg-slate-800/50">
|
|
61
|
+
New
|
|
62
|
+
</div>
|
|
63
|
+
<pre class="flex-1 overflow-auto px-3 py-2 font-mono text-xs text-slate-400 whitespace-pre"><code><span class="block px-2 bg-emerald-950 text-emerald-300">+ def calculate_total(items, tax_rate: 0.0)</span>
|
|
64
|
+
<span class="block px-2 bg-emerald-950 text-emerald-300">+ items.sum(&:price) * (1 + tax_rate)</span>
|
|
65
|
+
<span class="block px-2"> end</span></code></pre>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
</section>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<footer class="flex flex-col h-48 border-t border-slate-700 bg-black">
|
|
72
|
+
<div class="flex items-center justify-between px-3 py-1 border-b border-slate-800">
|
|
73
|
+
<span class="text-xs font-semibold uppercase tracking-wide text-slate-400">Metadata / Comment</span>
|
|
74
|
+
<button type="button" class="text-xs text-slate-500 hover:text-slate-300">Copy SHA</button>
|
|
75
|
+
</div>
|
|
76
|
+
<div class="flex-1 overflow-y-auto px-3 py-2 grid grid-cols-2 gap-4 text-xs">
|
|
77
|
+
<div class="space-y-1">
|
|
78
|
+
<p><span class="text-slate-500">Author:</span> <span class="text-slate-300">Jane Doe <jane@example.com></span></p>
|
|
79
|
+
<p><span class="text-slate-500">Date:</span> <span class="text-slate-300">2026-08-27 14:32:00</span></p>
|
|
80
|
+
<p><span class="text-slate-500">SHA:</span> <span class="text-slate-300 font-mono">a1b2c3d4e5f6</span></p>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="space-y-1">
|
|
83
|
+
<p class="text-slate-500">Comment</p>
|
|
84
|
+
<p class="text-slate-300">Adds support for tax rate calculation in the diff viewer totals module.</p>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
</footer>
|
|
88
|
+
</div>
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<div id="pp-git-viewer-wrapper" class="relative w-full h-full bg-slate-900 text-slate-200 overflow-hidden" style="contain: layout; --footer-height: 120px;">
|
|
2
|
+
|
|
3
|
+
<!-- Left: Commit History Sidebar -->
|
|
4
|
+
<aside id="pp-git-history-sidebar"
|
|
5
|
+
class="absolute left-0 top-0 w-[400px] border-r border-slate-800 bg-slate-900 overflow-y-auto flex flex-col"
|
|
6
|
+
style="contain: layout; bottom: var(--footer-height);">
|
|
7
|
+
|
|
8
|
+
<div class="flex-none w-full px-3 py-2 border-b border-slate-800">
|
|
9
|
+
<h3 class="text-[11px] font-bold uppercase tracking-wide text-slate-400">Commit History</h3>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<div id="pp-git-commit-list" class="flex-1 w-full overflow-y-auto flex flex-col">
|
|
13
|
+
<!-- Item Instance -->
|
|
14
|
+
<div class="flex-none w-full flex items-center justify-between px-3 py-2 border-b border-slate-800 hover:bg-slate-800 cursor-pointer">
|
|
15
|
+
<span class="text-[12px] font-mono text-slate-300">a1b2c3d</span>
|
|
16
|
+
<span class="bg-emerald-500/10 text-emerald-400 border border-emerald-500/20 rounded-full text-[10px] px-2 py-0.5">merged</span>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="flex-none w-full flex items-center justify-between px-3 py-2 border-b border-slate-800 hover:bg-slate-800 cursor-pointer">
|
|
19
|
+
<span class="text-[12px] font-mono text-slate-300">7f9e0d2</span>
|
|
20
|
+
<span class="bg-amber-500/10 text-amber-400 border border-amber-500/20 rounded-full text-[10px] px-2 py-0.5">pending</span>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="flex-none w-full flex items-center justify-between px-3 py-2 border-b border-slate-800 hover:bg-slate-800 cursor-pointer">
|
|
23
|
+
<span class="text-[12px] font-mono text-slate-300">4c8a1f6</span>
|
|
24
|
+
<span class="bg-rose-500/10 text-rose-400 border border-rose-500/20 rounded-full text-[10px] px-2 py-0.5">reverted</span>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</aside>
|
|
28
|
+
|
|
29
|
+
<!-- Right: Diff Viewer (Anchored to Sidebar) -->
|
|
30
|
+
<main id="pp-git-diff-viewer"
|
|
31
|
+
class="absolute right-0 top-0 flex"
|
|
32
|
+
style="contain: layout; left: var(--sidebar-width); bottom: var(--footer-height);">
|
|
33
|
+
|
|
34
|
+
<div id="pp-git-diff-old" class="flex-1 h-full border-r border-slate-800 bg-slate-900 overflow-y-auto flex flex-col">
|
|
35
|
+
<div class="flex-none w-full px-3 py-2 border-b border-slate-800">
|
|
36
|
+
<span class="text-[11px] font-bold uppercase tracking-wide text-slate-500">Old</span>
|
|
37
|
+
</div>
|
|
38
|
+
<div id="pp-git-diff-old-content" class="flex-1 w-full">
|
|
39
|
+
<!-- Old content -->
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<div id="pp-git-diff-new" class="flex-1 h-full bg-slate-900 overflow-y-auto flex flex-col">
|
|
44
|
+
<div class="flex-none w-full px-3 py-2 border-b border-slate-800">
|
|
45
|
+
<span class="text-[11px] font-bold uppercase tracking-wide text-slate-500">New</span>
|
|
46
|
+
</div>
|
|
47
|
+
<div id="pp-git-diff-new-content" class="flex-1 w-full">
|
|
48
|
+
<!-- New content -->
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</main>
|
|
52
|
+
|
|
53
|
+
<!-- Bottom: Metadata (Anchored to Footer Variable) -->
|
|
54
|
+
<footer id="pp-git-metadata"
|
|
55
|
+
class="absolute left-0 right-0 bottom-0 bg-slate-900 border-t border-slate-800 flex flex-col"
|
|
56
|
+
style="contain: layout; height: var(--footer-height);">
|
|
57
|
+
<div class="flex-none w-full px-3 py-2 border-b border-slate-800">
|
|
58
|
+
<h3 class="text-[11px] font-bold uppercase tracking-wide text-slate-400">Metadata / Comment</h3>
|
|
59
|
+
</div>
|
|
60
|
+
<div id="pp-git-metadata-content" class="flex-1 w-full px-3 py-2 overflow-y-auto">
|
|
61
|
+
<p class="text-[12px] text-slate-400">Select a commit to view metadata and comments.</p>
|
|
62
|
+
</div>
|
|
63
|
+
</footer>
|
|
64
|
+
|
|
65
|
+
<script>
|
|
66
|
+
// "Thin Pulse" - Minimal reactive anchoring (Native logic, no JIT)
|
|
67
|
+
(function() {
|
|
68
|
+
const wrapper = document.currentScript.parentElement;
|
|
69
|
+
const sidebar = wrapper.querySelector('#pp-git-history-sidebar');
|
|
70
|
+
|
|
71
|
+
const updateAnchors = () => {
|
|
72
|
+
if (!sidebar) return;
|
|
73
|
+
const rect = sidebar.getBoundingClientRect();
|
|
74
|
+
wrapper.style.setProperty('--sidebar-width', `${rect.width}px`);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
if (sidebar) {
|
|
78
|
+
new MutationObserver(updateAnchors).observe(sidebar, { attributes: true, childList: true, subtree: true });
|
|
79
|
+
window.addEventListener('resize', updateAnchors);
|
|
80
|
+
requestAnimationFrame(updateAnchors);
|
|
81
|
+
}
|
|
82
|
+
})();
|
|
83
|
+
</script>
|
|
84
|
+
|
|
85
|
+
</div>
|