completion-kit 0.28.2 → 0.28.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d0c33e552c40afdb63f16e277e560089aba5d5805160579b40aeb37d83150ad7
4
- data.tar.gz: 1e1582e056c438a931b2444bf2dd1e0f6816c58de5d15140ffb345ed3f316109
3
+ metadata.gz: ff8dc1fe1d84c274b21d8ff9d3dd6e21d547f9c780ba0a071c875abcac3d5459
4
+ data.tar.gz: de30042560e897432acbb192aebb6a3735301b644383b2ba49eb123f77e80607
5
5
  SHA512:
6
- metadata.gz: 46eea8e7ec849b1ecf4580378951e2a2508895cfb2be0bd18109530258da74f0d4a2ff8488c4f2ee8f5b2768a4abe302a4f5817bc2950de5f71a439c987b8b74
7
- data.tar.gz: 2a632272fef9d7d1f1acf10c12ecd62ff174b0e0389736d91d3be6a639830337edcc3008b959b8657dcb61392cf41d6a5d5f5fa3b6f7a27b68cbbeb40e933c29
6
+ metadata.gz: abf4fea98a8014b6f8cd7155cc54edfdc40bd23a2d2d08a2a864dcc7764e841a1d2554950aca3b22b48b786151da0f5b8237c4ff82c6924799664d2a6c663cd0
7
+ data.tar.gz: 6fc8a7683d26cad922086fafd56cacdbd762f4bc766078a1bf5c0f2335a429ba4ec1c5ccac509bec7650a60e9d20747f29680d28344161f186fdff4dca2d9f62
@@ -3200,7 +3200,75 @@ select.ck-input {
3200
3200
  .ck-delta--negative { color: var(--ck-danger); background: var(--ck-danger-soft); }
3201
3201
  .ck-delta--zero { color: var(--ck-dim); }
3202
3202
 
3203
- .ck-run-compare-table td { vertical-align: middle; }
3203
+ .ck-run-compare-table td { vertical-align: top; }
3204
+
3205
+ .ck-table-scroll { overflow-x: auto; }
3206
+
3207
+ .ck-run-compare-table th { white-space: nowrap; }
3208
+ .ck-run-compare-table th:nth-child(1) { width: 7rem; }
3209
+ .ck-run-compare-table th:nth-child(2) { width: 15rem; }
3210
+ .ck-run-compare-table th:nth-child(3) { width: 12rem; }
3211
+ .ck-run-compare-table th:nth-child(4) { width: 8rem; }
3212
+ .ck-run-compare-table th:nth-child(5) { width: auto; }
3213
+
3214
+ .ck-run-compare-table th.ck-num,
3215
+ .ck-run-compare-table td.ck-num { text-align: right; }
3216
+ .ck-run-compare-table td.ck-num { font-variant-numeric: tabular-nums; }
3217
+
3218
+ .ck-run-compare-table .ck-compare-metric {
3219
+ white-space: nowrap;
3220
+ overflow: hidden;
3221
+ text-overflow: ellipsis;
3222
+ color: var(--ck-text);
3223
+ font-weight: 500;
3224
+ }
3225
+
3226
+ .ck-cmp-score__pair { display: inline-flex; align-items: center; gap: 0.45rem; }
3227
+ .ck-cmp-score__arrow { color: var(--ck-dim); font-size: 0.78rem; }
3228
+ .ck-cmp-score__link { display: inline-flex; text-decoration: none; border-radius: 7px; transition: box-shadow 0.12s ease; }
3229
+ .ck-cmp-score__link:hover { box-shadow: 0 0 0 1px var(--ck-accent); }
3230
+ .ck-cmp-score__none { color: var(--ck-dim); }
3231
+
3232
+ .ck-cmp-delta .ck-delta { display: inline-flex; align-items: baseline; gap: 0.2rem; }
3233
+ .ck-delta__arrow { font-size: 0.72rem; }
3234
+
3235
+ .ck-cmp-ver__one, .ck-cmp-ver__pair {
3236
+ font-family: var(--ck-mono);
3237
+ font-size: 0.78rem;
3238
+ color: var(--ck-dim);
3239
+ }
3240
+ .ck-cmp-ver__pair { color: var(--ck-muted); }
3241
+ .ck-cmp-ver__arrow { color: var(--ck-dim); margin: 0 0.3rem; }
3242
+
3243
+ .ck-compare-case { white-space: nowrap; }
3244
+ .ck-compare-case__num {
3245
+ display: block;
3246
+ font-family: var(--ck-mono);
3247
+ font-size: 0.82rem;
3248
+ font-weight: 600;
3249
+ color: var(--ck-text);
3250
+ }
3251
+ .ck-compare-case__runs {
3252
+ display: flex;
3253
+ gap: 0.6rem;
3254
+ margin-top: 0.25rem;
3255
+ }
3256
+ .ck-compare-case__run {
3257
+ font-family: var(--ck-mono);
3258
+ font-size: 0.72rem;
3259
+ letter-spacing: 0.04em;
3260
+ }
3261
+ .ck-compare-case__run--absent {
3262
+ color: var(--ck-dim);
3263
+ cursor: default;
3264
+ }
3265
+
3266
+ .ck-run-compare-table tbody tr:hover { background: transparent; }
3267
+ .ck-run-compare-table tbody tr { border-bottom: none; }
3268
+ .ck-run-compare-table tbody:not(:first-of-type) > tr:first-child > td {
3269
+ border-top: 1px solid var(--ck-line);
3270
+ }
3271
+ .ck-run-compare-table tbody:hover > tr > td { background: var(--ck-surface-hover); }
3204
3272
 
3205
3273
  @media (max-width: 900px) {
3206
3274
  .ck-grid--sidebar,
@@ -3991,10 +4059,11 @@ a.ck-metric-group-pill {
3991
4059
 
3992
4060
  .ck-responses-table th:nth-child(1), .ck-responses-table td:nth-child(1) { width: 3.5rem; white-space: nowrap; }
3993
4061
  .ck-responses-table th:nth-child(2), .ck-responses-table td:nth-child(2) { width: auto; }
3994
- .ck-responses-table th:nth-child(3), .ck-responses-table td:nth-child(3) { width: 14rem; white-space: nowrap; }
4062
+ .ck-responses-table th:nth-child(3), .ck-responses-table td:nth-child(3) { width: 8rem; white-space: nowrap; }
3995
4063
  .ck-responses-table th:nth-child(4), .ck-responses-table td:nth-child(4) { width: 5.5rem; white-space: nowrap; }
3996
- .ck-responses-table th:nth-child(5), .ck-responses-table td:nth-child(5) { width: 8rem; white-space: nowrap; }
4064
+ .ck-responses-table th:nth-child(5), .ck-responses-table td:nth-child(5) { width: 7rem; white-space: nowrap; }
3997
4065
  .ck-responses-table th:nth-child(6), .ck-responses-table td:nth-child(6) { width: 3rem; }
4066
+ .ck-responses-table .ck-metric-bar--compact { flex-wrap: wrap; row-gap: 3px; }
3998
4067
 
3999
4068
 
4000
4069
  table.ck-runs-table {
@@ -0,0 +1,12 @@
1
+ <% has_value = kind == "check" ? !passed.nil? : score.present? %>
2
+ <% if has_value && response %>
3
+ <%= link_to run_response_path(run, response), class: "ck-cmp-score__link", title: "#{side}: open this response (#{run.name})" do %>
4
+ <% if kind == "check" %>
5
+ <%= ck_check_badge(passed) %>
6
+ <% else %>
7
+ <span class="<%= ck_badge_classes(ck_score_kind(score.to_f)) %>"><%= score %></span>
8
+ <% end %>
9
+ <% end %>
10
+ <% else %>
11
+ <span class="ck-cmp-score__none">—</span>
12
+ <% end %>
@@ -7,7 +7,7 @@
7
7
  <section class="ck-page-header">
8
8
  <div>
9
9
  <h1 class="ck-title">Comparing runs</h1>
10
- <p class="ck-meta-copy"><strong>A</strong>: <%= link_to @run.name, run_path(@run), class: "ck-link" %> &middot; <strong>B</strong>: <%= link_to @other_run.name, run_path(@other_run), class: "ck-link" %></p>
10
+ <p class="ck-meta-copy"><strong>A</strong>: <%= link_to @run.name, run_path(@run), class: "ck-link" %> &middot; <strong>B</strong>: <%= link_to @other_run.name, run_path(@other_run), class: "ck-link" %> &middot; <strong>Δ</strong> = B &minus; A</p>
11
11
  </div>
12
12
  <div class="ck-actions">
13
13
  <%= link_to "Pick another", compare_run_path(@run), class: ck_button_classes(:light, variant: :outline) %>
@@ -19,81 +19,63 @@
19
19
  <p>No responses to compare yet.</p>
20
20
  </div>
21
21
  <% else %>
22
+ <div class="ck-table-scroll">
22
23
  <table class="ck-results-table ck-run-compare-table">
23
24
  <thead>
24
25
  <tr>
25
26
  <th scope="col">Case</th>
26
27
  <th scope="col">Metric</th>
27
- <th scope="col">A score</th>
28
- <th scope="col">B score</th>
29
- <th scope="col">Δ</th>
30
- <th scope="col">A version</th>
31
- <th scope="col">B version</th>
28
+ <th scope="col">A → B</th>
29
+ <th scope="col" class="ck-num">Δ</th>
30
+ <th scope="col">Version</th>
32
31
  </tr>
33
32
  </thead>
34
- <tbody>
35
33
  <% @comparison[:rows].each do |row| %>
36
34
  <% case_label = ((row[:left_response].row_index || 0) + 1).to_s %>
35
+ <tbody class="ck-compare-group">
37
36
  <% row[:per_metric].each_with_index do |pm, idx| %>
38
37
  <tr>
39
38
  <% if idx == 0 %>
40
- <td rowspan="<%= row[:per_metric].size %>">
41
- <%= link_to case_label, run_response_path(@run, row[:left_response]), class: "ck-link" %>
42
- <% if row[:right_response] %>
43
- <span class="ck-meta-copy">/ <%= link_to "B", run_response_path(@other_run, row[:right_response]), class: "ck-link" %></span>
44
- <% end %>
39
+ <td rowspan="<%= row[:per_metric].size %>" class="ck-compare-case">
40
+ <span class="ck-compare-case__num">Case <%= case_label %></span>
41
+ <span class="ck-compare-case__runs">
42
+ <%= link_to "A ↗", run_response_path(@run, row[:left_response]),
43
+ class: "ck-link ck-compare-case__run",
44
+ title: "Open this case in run A (#{@run.name})" %>
45
+ <% if row[:right_response] %>
46
+ <%= link_to "B ↗", run_response_path(@other_run, row[:right_response]),
47
+ class: "ck-link ck-compare-case__run",
48
+ title: "Open this case in run B (#{@other_run.name})" %>
49
+ <% else %>
50
+ <span class="ck-compare-case__run ck-compare-case__run--absent" title="No matching response in run B">B</span>
51
+ <% end %>
52
+ </span>
45
53
  </td>
46
54
  <% end %>
47
- <td><%= pm[:metric_name] %></td>
48
- <td>
49
- <% if pm[:kind] == "check" %>
50
- <% if pm[:left_passed].nil? %>
51
- <span class="ck-meta-copy">—</span>
52
- <% else %>
53
- <%= ck_check_badge(pm[:left_passed]) %>
54
- <% end %>
55
- <% elsif pm[:left_score] %>
56
- <span class="<%= ck_badge_classes(ck_score_kind(pm[:left_score].to_f)) %>"><%= pm[:left_score] %></span>
57
- <% else %>
58
- <span class="ck-meta-copy">—</span>
59
- <% end %>
60
- </td>
61
- <td>
62
- <% if pm[:kind] == "check" %>
63
- <% if pm[:right_passed].nil? %>
64
- <span class="ck-meta-copy">—</span>
65
- <% else %>
66
- <%= ck_check_badge(pm[:right_passed]) %>
67
- <% end %>
68
- <% elsif pm[:right_score] %>
69
- <span class="<%= ck_badge_classes(ck_score_kind(pm[:right_score].to_f)) %>"><%= pm[:right_score] %></span>
70
- <% else %>
71
- <span class="ck-meta-copy">—</span>
72
- <% end %>
55
+ <td class="ck-compare-metric" data-label="Metric" title="<%= pm[:metric_name] %>"><%= pm[:metric_name] %></td>
56
+ <td class="ck-cmp-score" data-label="A → B">
57
+ <span class="ck-cmp-score__pair">
58
+ <%= render "compare_score", kind: pm[:kind], passed: pm[:left_passed], score: pm[:left_score], response: row[:left_response], run: @run, side: "A" %>
59
+ <span class="ck-cmp-score__arrow" aria-hidden="true">→</span>
60
+ <%= render "compare_score", kind: pm[:kind], passed: pm[:right_passed], score: pm[:right_score], response: row[:right_response], run: @other_run, side: "B" %>
61
+ </span>
73
62
  </td>
74
- <td>
63
+ <td class="ck-num ck-cmp-delta" data-label="Δ">
75
64
  <% if pm[:kind] == "check" %>
76
- <%= ck_result_change_badge(pm[:result_change]) || content_tag(:span, "—", class: "ck-meta-copy") %>
65
+ <%= ck_result_change_badge(pm[:result_change]) || content_tag(:span, "—", class: "ck-cmp-score__none") %>
77
66
  <% elsif pm[:delta] %>
78
- <% delta_class = pm[:delta] > 0 ? "ck-delta--positive" : pm[:delta] < 0 ? "ck-delta--negative" : "ck-delta--zero" %>
79
- <span class="ck-delta <%= delta_class %>"><%= pm[:delta].positive? ? "+#{pm[:delta]}" : pm[:delta].to_s %></span>
67
+ <% d = pm[:delta] %>
68
+ <% dcls = d > 0 ? "ck-delta--positive" : d < 0 ? "ck-delta--negative" : "ck-delta--zero" %>
69
+ <span class="ck-delta <%= dcls %>"><span class="ck-delta__arrow" aria-hidden="true"><%= d > 0 ? "▲" : d < 0 ? "▼" : "=" %></span><%= d > 0 ? "+#{d}" : d.to_s %></span>
80
70
  <% else %>
81
- <span class="ck-meta-copy">—</span>
82
- <% end %>
83
- </td>
84
- <td>
85
- <% if pm[:left_version_label] %>
86
- <span class="ck-source-chip ck-source-chip--current"><%= pm[:left_version_label] %></span>
87
- <% end %>
88
- </td>
89
- <td>
90
- <% if pm[:right_version_label] %>
91
- <span class="ck-source-chip ck-source-chip--current"><%= pm[:right_version_label] %></span>
71
+ <span class="ck-cmp-score__none">—</span>
92
72
  <% end %>
93
73
  </td>
74
+ <td class="ck-cmp-ver" data-label="Version"><% lv = pm[:left_version_label]; rv = pm[:right_version_label] %><% if lv && rv && lv != rv %><span class="ck-cmp-ver__pair"><%= lv %><span class="ck-cmp-ver__arrow" aria-hidden="true">→</span><%= rv %></span><% elsif lv || rv %><span class="ck-cmp-ver__one"><%= lv || rv %></span><% end %></td>
94
75
  </tr>
95
76
  <% end %>
77
+ </tbody>
96
78
  <% end %>
97
- </tbody>
98
79
  </table>
80
+ </div>
99
81
  <% end %>
@@ -1,3 +1,3 @@
1
1
  module CompletionKit
2
- VERSION = "0.28.2"
2
+ VERSION = "0.28.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: completion-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.28.2
4
+ version: 0.28.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damien Bastin
@@ -407,6 +407,7 @@ files:
407
407
  - app/views/completion_kit/provider_credentials/statuses.turbo_stream.erb
408
408
  - app/views/completion_kit/responses/show.html.erb
409
409
  - app/views/completion_kit/runs/_actions.html.erb
410
+ - app/views/completion_kit/runs/_compare_score.html.erb
410
411
  - app/views/completion_kit/runs/_form.html.erb
411
412
  - app/views/completion_kit/runs/_response_row.html.erb
412
413
  - app/views/completion_kit/runs/_row.html.erb