@ponchia/ui 0.6.4 → 0.6.5

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.
package/classes/index.js CHANGED
@@ -279,16 +279,69 @@ export const cls = Object.freeze({
279
279
  reportMeta: 'ui-report__meta',
280
280
  reportToc: 'ui-report__toc',
281
281
  reportSummary: 'ui-report__summary',
282
+ reportDecision: 'ui-report__decision',
283
+ reportDecisionKicker: 'ui-report__decision-kicker',
284
+ reportDecisionTitle: 'ui-report__decision-title',
285
+ reportDecisionBody: 'ui-report__decision-body',
286
+ reportDecisionMeta: 'ui-report__decision-meta',
287
+ reportDecisionGrid: 'ui-report__decision-grid',
288
+ reportDecisionItem: 'ui-report__decision-item',
289
+ reportDecisionLabel: 'ui-report__decision-label',
290
+ reportDecisionValue: 'ui-report__decision-value',
282
291
  reportSection: 'ui-report__section',
283
292
  reportSectionUnnumbered: 'ui-report__section--unnumbered',
284
293
  reportSectionHead: 'ui-report__section-head',
285
294
  reportFinding: 'ui-report__finding',
295
+ reportFindingCritical: 'ui-report__finding--critical',
296
+ reportFindingMajor: 'ui-report__finding--major',
297
+ reportFindingMinor: 'ui-report__finding--minor',
298
+ reportFindingResolved: 'ui-report__finding--resolved',
299
+ reportFindingTitle: 'ui-report__finding-title',
300
+ reportFindingClaim: 'ui-report__finding-claim',
301
+ reportFindingImpact: 'ui-report__finding-impact',
302
+ reportFindingRemediation: 'ui-report__finding-remediation',
303
+ reportFindingEvidence: 'ui-report__finding-evidence',
304
+ reportFindingCaveat: 'ui-report__finding-caveat',
286
305
  reportEvidence: 'ui-report__evidence',
287
306
  reportFigure: 'ui-report__figure',
288
307
  reportCaption: 'ui-report__caption',
289
308
  reportSources: 'ui-report__sources',
290
309
  reportAppendix: 'ui-report__appendix',
291
310
  reportFootnotes: 'ui-report__footnotes',
311
+ reportActions: 'ui-report__actions',
312
+ reportAction: 'ui-report__action',
313
+ reportActionStatus: 'ui-report__action-status',
314
+ reportActionTitle: 'ui-report__action-title',
315
+ reportActionOwner: 'ui-report__action-owner',
316
+ reportActionDue: 'ui-report__action-due',
317
+ reportActionPriority: 'ui-report__action-priority',
318
+ reportActionCriteria: 'ui-report__action-criteria',
319
+ reportActionSource: 'ui-report__action-source',
320
+ claim: 'ui-claim',
321
+ claimSupported: 'ui-claim--supported',
322
+ claimPartial: 'ui-claim--partial',
323
+ claimDisputed: 'ui-claim--disputed',
324
+ claimUnsupported: 'ui-claim--unsupported',
325
+ claimUnknown: 'ui-claim--unknown',
326
+ claimStatement: 'ui-claim__statement',
327
+ claimStatus: 'ui-claim__status',
328
+ claimScope: 'ui-claim__scope',
329
+ claimBasis: 'ui-claim__basis',
330
+ claimLimits: 'ui-claim__limits',
331
+ claimRefs: 'ui-claim__refs',
332
+ claimCaveat: 'ui-claim__caveat',
333
+ evidenceGrid: 'ui-evidence-grid',
334
+ evidenceLedger: 'ui-evidence-ledger',
335
+ evidenceItem: 'ui-evidence-item',
336
+ evidenceItemTitle: 'ui-evidence-item__title',
337
+ evidenceItemMeta: 'ui-evidence-item__meta',
338
+ evidenceItemBody: 'ui-evidence-item__body',
339
+ evidenceItemKind: 'ui-evidence-item__kind',
340
+ evidenceItemMethod: 'ui-evidence-item__method',
341
+ evidenceItemWindow: 'ui-evidence-item__window',
342
+ evidenceItemValue: 'ui-evidence-item__value',
343
+ evidenceItemSource: 'ui-evidence-item__source',
344
+ evidenceItemCaveat: 'ui-evidence-item__caveat',
292
345
  compare: 'ui-compare',
293
346
  compare2up: 'ui-compare--2up',
294
347
  compareCol: 'ui-compare__col',
@@ -721,6 +774,31 @@ const meterTone = (tone) =>
721
774
  tone,
722
775
  );
723
776
 
777
+ const reportFindingSeverity = (severity) =>
778
+ toneClass(
779
+ 'reportFinding',
780
+ {
781
+ critical: cls.reportFindingCritical,
782
+ major: cls.reportFindingMajor,
783
+ minor: cls.reportFindingMinor,
784
+ resolved: cls.reportFindingResolved,
785
+ },
786
+ severity,
787
+ );
788
+
789
+ const claimStatus = (status) =>
790
+ toneClass(
791
+ 'claim',
792
+ {
793
+ supported: cls.claimSupported,
794
+ partial: cls.claimPartial,
795
+ disputed: cls.claimDisputed,
796
+ unsupported: cls.claimUnsupported,
797
+ unknown: cls.claimUnknown,
798
+ },
799
+ status,
800
+ );
801
+
724
802
  export const ui = {
725
803
  button: ({ variant, icon, size } = {}) =>
726
804
  j(
@@ -745,6 +823,8 @@ export const ui = {
745
823
  invert && cls.deltaInvert,
746
824
  ),
747
825
  compare: ({ cols } = {}) => j(cls.compare, cols === 2 && cls.compare2up),
826
+ reportFinding: ({ severity } = {}) => j(cls.reportFinding, reportFindingSeverity(severity)),
827
+ claim: ({ status } = {}) => j(cls.claim, claimStatus(status)),
748
828
  chip: ({ accent } = {}) => j(cls.chip, accent && cls.chipAccent),
749
829
  link: ({ arrow, cta } = {}) => j(cls.link, arrow && cls.linkArrow, cta && cls.linkCta),
750
830
  dot: ({ tone, live } = {}) => j(cls.dot, dotTone(tone), live && cls.dotLive),
package/css/report.css CHANGED
@@ -30,6 +30,24 @@
30
30
  counter-reset: report-section;
31
31
  }
32
32
 
33
+ .ui-report > *,
34
+ .ui-report__cover > *,
35
+ .ui-report__head > *,
36
+ .ui-report__toc > *,
37
+ .ui-report__summary > *,
38
+ .ui-report__decision > *,
39
+ .ui-report__finding > *,
40
+ .ui-report__evidence > *,
41
+ .ui-report__section > *,
42
+ .ui-report__figure > *,
43
+ .ui-claim > *,
44
+ .ui-evidence-grid > *,
45
+ .ui-evidence-ledger > *,
46
+ .ui-compare > *,
47
+ .ui-compare__col > * {
48
+ min-inline-size: 0;
49
+ }
50
+
33
51
  .ui-report__cover {
34
52
  align-content: end;
35
53
  border-block-end: 1px solid var(--line);
@@ -142,8 +160,204 @@
142
160
  border-inline-start: 2px solid var(--accent);
143
161
  }
144
162
 
163
+ .ui-report__decision {
164
+ background: var(--panel);
165
+ border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--line));
166
+ border-inline-start: 3px solid var(--accent);
167
+ border-radius: var(--radius-md);
168
+ display: grid;
169
+ gap: var(--space-sm);
170
+ padding: var(--space-md);
171
+ }
172
+
173
+ .ui-report__decision-kicker {
174
+ color: var(--accent-text);
175
+ font-family: var(--mono);
176
+ font-size: var(--text-2xs);
177
+ letter-spacing: var(--tracking-wide);
178
+ margin: 0;
179
+ text-transform: uppercase;
180
+ }
181
+
182
+ .ui-report__decision-title {
183
+ color: var(--text);
184
+ font-family: var(--display);
185
+ font-size: var(--text-lg);
186
+ font-weight: var(--display-weight);
187
+ letter-spacing: 0;
188
+ line-height: 1.18;
189
+ margin: 0;
190
+ text-transform: uppercase;
191
+ text-wrap: balance;
192
+ }
193
+
194
+ .ui-report__decision-body {
195
+ color: var(--text-soft);
196
+ line-height: 1.6;
197
+ margin: 0;
198
+ max-inline-size: var(--report-measure);
199
+ }
200
+
201
+ .ui-report__decision-meta {
202
+ color: var(--text-dim);
203
+ display: flex;
204
+ flex-wrap: wrap;
205
+ font-family: var(--mono);
206
+ font-size: var(--text-2xs);
207
+ gap: 0.45rem 0.75rem;
208
+ letter-spacing: 0;
209
+ }
210
+
211
+ .ui-report__decision-grid {
212
+ border-block-start: 1px solid var(--line);
213
+ display: grid;
214
+ gap: 0;
215
+ }
216
+
217
+ .ui-report__decision-item {
218
+ align-items: start;
219
+ border-block-end: 1px solid var(--line);
220
+ display: grid;
221
+ gap: var(--space-xs);
222
+ grid-template-columns: minmax(8rem, 14rem) minmax(0, 1fr);
223
+ padding-block: var(--space-xs);
224
+ }
225
+
226
+ .ui-report__decision-label,
227
+ .ui-report__decision-value {
228
+ margin: 0;
229
+ }
230
+
231
+ .ui-report__decision-label {
232
+ color: var(--text-dim);
233
+ font-family: var(--mono);
234
+ font-size: var(--text-2xs);
235
+ letter-spacing: var(--tracking-wide);
236
+ text-transform: uppercase;
237
+ }
238
+
239
+ .ui-report__decision-value {
240
+ color: var(--text-soft);
241
+ line-height: 1.5;
242
+ }
243
+
145
244
  .ui-report__finding {
146
- border-inline-start: 2px solid var(--line-strong);
245
+ --report-finding-tone: var(--line-strong);
246
+
247
+ border-inline-start: 2px solid var(--report-finding-tone);
248
+ }
249
+
250
+ .ui-report__finding--critical {
251
+ --report-finding-tone: var(--danger);
252
+ }
253
+
254
+ .ui-report__finding--major {
255
+ --report-finding-tone: var(--warning);
256
+ }
257
+
258
+ .ui-report__finding--minor {
259
+ --report-finding-tone: var(--info);
260
+ }
261
+
262
+ .ui-report__finding--resolved {
263
+ --report-finding-tone: var(--success);
264
+ }
265
+
266
+ .ui-report__finding-title,
267
+ .ui-report__finding-claim,
268
+ .ui-report__finding-impact,
269
+ .ui-report__finding-remediation,
270
+ .ui-report__finding-evidence,
271
+ .ui-report__finding-caveat {
272
+ margin: 0;
273
+ }
274
+
275
+ .ui-report__finding-title {
276
+ color: var(--text);
277
+ font-size: var(--text-md);
278
+ font-weight: 650;
279
+ line-height: 1.25;
280
+ }
281
+
282
+ .ui-report__finding-claim {
283
+ color: var(--text);
284
+ line-height: 1.6;
285
+ }
286
+
287
+ .ui-report__finding-impact,
288
+ .ui-report__finding-remediation,
289
+ .ui-report__finding-evidence {
290
+ color: var(--text-soft);
291
+ line-height: 1.55;
292
+ }
293
+
294
+ .ui-report__finding-caveat {
295
+ color: var(--text-dim);
296
+ font-size: var(--text-sm);
297
+ line-height: 1.55;
298
+ }
299
+
300
+ .ui-claim {
301
+ --claim-tone: var(--accent);
302
+
303
+ background: var(--panel-soft);
304
+ border: 1px solid var(--line);
305
+ border-inline-start: 2px solid var(--claim-tone);
306
+ border-radius: var(--radius-md);
307
+ display: grid;
308
+ gap: var(--space-xs);
309
+ padding: var(--space-sm);
310
+ }
311
+
312
+ .ui-claim--supported {
313
+ --claim-tone: var(--success);
314
+ }
315
+
316
+ .ui-claim--partial {
317
+ --claim-tone: var(--warning);
318
+ }
319
+
320
+ .ui-claim--disputed,
321
+ .ui-claim--unsupported {
322
+ --claim-tone: var(--danger);
323
+ }
324
+
325
+ .ui-claim--unknown {
326
+ --claim-tone: var(--info);
327
+ }
328
+
329
+ .ui-claim__statement,
330
+ .ui-claim__status,
331
+ .ui-claim__scope,
332
+ .ui-claim__basis,
333
+ .ui-claim__limits,
334
+ .ui-claim__refs,
335
+ .ui-claim__caveat {
336
+ margin: 0;
337
+ }
338
+
339
+ .ui-claim__statement {
340
+ color: var(--text);
341
+ font-weight: 650;
342
+ line-height: 1.45;
343
+ }
344
+
345
+ .ui-claim__status,
346
+ .ui-claim__scope,
347
+ .ui-claim__refs {
348
+ color: var(--text-dim);
349
+ font-family: var(--mono);
350
+ font-size: var(--text-2xs);
351
+ letter-spacing: 0;
352
+ text-transform: uppercase;
353
+ }
354
+
355
+ .ui-claim__basis,
356
+ .ui-claim__limits,
357
+ .ui-claim__caveat {
358
+ color: var(--text-soft);
359
+ font-size: var(--text-sm);
360
+ line-height: 1.55;
147
361
  }
148
362
 
149
363
  .ui-report__evidence {
@@ -208,6 +422,142 @@
208
422
  text-transform: uppercase;
209
423
  }
210
424
 
425
+ .ui-evidence-grid {
426
+ display: grid;
427
+ gap: var(--space-sm);
428
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
429
+ }
430
+
431
+ .ui-evidence-item {
432
+ background: var(--panel-soft);
433
+ border: 1px solid var(--line);
434
+ border-radius: var(--radius-md);
435
+ display: grid;
436
+ gap: 0.35rem;
437
+ padding: var(--space-sm);
438
+ }
439
+
440
+ .ui-evidence-item__title {
441
+ color: var(--text);
442
+ font-size: var(--text-sm);
443
+ font-weight: 600;
444
+ margin: 0;
445
+ }
446
+
447
+ .ui-evidence-item__meta {
448
+ color: var(--text-dim);
449
+ font-family: var(--mono);
450
+ font-size: var(--text-2xs);
451
+ letter-spacing: 0;
452
+ }
453
+
454
+ .ui-evidence-item__body {
455
+ color: var(--text-soft);
456
+ font-size: var(--text-sm);
457
+ line-height: 1.55;
458
+ margin: 0;
459
+ }
460
+
461
+ .ui-evidence-item__kind,
462
+ .ui-evidence-item__method,
463
+ .ui-evidence-item__window,
464
+ .ui-evidence-item__value,
465
+ .ui-evidence-item__source,
466
+ .ui-evidence-item__caveat {
467
+ margin: 0;
468
+ }
469
+
470
+ .ui-evidence-item__kind,
471
+ .ui-evidence-item__method,
472
+ .ui-evidence-item__window,
473
+ .ui-evidence-item__source {
474
+ color: var(--text-dim);
475
+ font-family: var(--mono);
476
+ font-size: var(--text-2xs);
477
+ letter-spacing: 0;
478
+ text-transform: uppercase;
479
+ }
480
+
481
+ .ui-evidence-item__value {
482
+ color: var(--text);
483
+ font-size: var(--text-md);
484
+ font-weight: 650;
485
+ }
486
+
487
+ .ui-evidence-item__caveat {
488
+ color: var(--text-dim);
489
+ font-size: var(--text-sm);
490
+ line-height: 1.5;
491
+ }
492
+
493
+ .ui-evidence-ledger {
494
+ display: grid;
495
+ gap: var(--space-sm);
496
+ }
497
+
498
+ .ui-report__actions {
499
+ border-block-start: 1px solid var(--line);
500
+ display: grid;
501
+ gap: 0;
502
+ }
503
+
504
+ .ui-report__action {
505
+ align-items: start;
506
+ border-block-end: 1px solid var(--line);
507
+ display: grid;
508
+ gap: var(--space-xs);
509
+ grid-template-columns: minmax(0, 1fr) auto;
510
+ padding-block: var(--space-sm);
511
+ }
512
+
513
+ .ui-report__action-status {
514
+ align-self: start;
515
+ color: var(--text-dim);
516
+ font-family: var(--mono);
517
+ font-size: var(--text-2xs);
518
+ letter-spacing: var(--tracking-wide);
519
+ text-transform: uppercase;
520
+ }
521
+
522
+ .ui-report__action-title,
523
+ .ui-report__action-owner,
524
+ .ui-report__action-due,
525
+ .ui-report__action-priority,
526
+ .ui-report__action-criteria,
527
+ .ui-report__action-source {
528
+ margin: 0;
529
+ }
530
+
531
+ .ui-report__action-title {
532
+ color: var(--text);
533
+ font-weight: 650;
534
+ line-height: 1.45;
535
+ }
536
+
537
+ .ui-report__action-owner,
538
+ .ui-report__action-due,
539
+ .ui-report__action-priority,
540
+ .ui-report__action-source {
541
+ color: var(--text-dim);
542
+ font-family: var(--mono);
543
+ font-size: var(--text-2xs);
544
+ letter-spacing: 0;
545
+ text-transform: uppercase;
546
+ }
547
+
548
+ .ui-report__action-criteria {
549
+ color: var(--text-soft);
550
+ font-size: var(--text-sm);
551
+ line-height: 1.5;
552
+ }
553
+
554
+ @media (max-width: 32rem) {
555
+ .ui-report__decision-item,
556
+ .ui-report__action {
557
+ grid-template-columns: 1fr;
558
+ }
559
+ }
560
+
211
561
  .ui-report__sources,
212
562
  .ui-report__appendix,
213
563
  .ui-report__footnotes {
@@ -345,11 +695,14 @@
345
695
 
346
696
  .ui-report__cover,
347
697
  .ui-report__head,
348
- .ui-report__section,
698
+ .ui-report__decision,
349
699
  .ui-report__summary,
350
700
  .ui-report__finding,
351
701
  .ui-report__evidence,
352
- .ui-report__figure {
702
+ .ui-report__figure,
703
+ .ui-claim,
704
+ .ui-evidence-item,
705
+ .ui-report__action {
353
706
  break-inside: avoid;
354
707
  }
355
708
 
package/css/sources.css CHANGED
@@ -117,11 +117,13 @@
117
117
  gap: var(--space-sm);
118
118
  list-style: none;
119
119
  margin: 0;
120
+ min-inline-size: 0;
120
121
  padding: 0;
121
122
  }
122
123
 
123
124
  .ui-source-list__item {
124
125
  margin: 0;
126
+ min-inline-size: 0;
125
127
  }
126
128
 
127
129
  /* --- Source card — a single source preview. --- */
@@ -132,15 +134,28 @@
132
134
  border-radius: var(--radius-md);
133
135
  display: grid;
134
136
  gap: 0.3rem;
137
+ min-inline-size: 0;
135
138
  padding: 0.75rem 0.9rem;
136
139
  print-color-adjust: exact;
137
140
  }
138
141
 
142
+ .ui-source-card:target,
143
+ .ui-source-card.is-source-active {
144
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--src-tone) 22%, transparent);
145
+ outline: 2px solid var(--src-tone);
146
+ outline-offset: 2px;
147
+ }
148
+
149
+ .ui-source-card > * {
150
+ min-inline-size: 0;
151
+ }
152
+
139
153
  .ui-source-card__title {
140
154
  color: var(--text);
141
155
  font-size: var(--text-sm);
142
156
  font-weight: 600;
143
157
  margin: 0;
158
+ overflow-wrap: break-word;
144
159
  }
145
160
 
146
161
  .ui-source-card__origin {
@@ -148,17 +163,20 @@
148
163
  font-family: var(--mono);
149
164
  font-size: var(--text-2xs);
150
165
  letter-spacing: var(--tracking-wide);
166
+ overflow-wrap: anywhere;
151
167
  }
152
168
 
153
169
  .ui-source-card__time {
154
170
  color: var(--text-dim);
155
171
  font-family: var(--mono);
156
172
  font-size: var(--text-2xs);
173
+ overflow-wrap: anywhere;
157
174
  }
158
175
 
159
176
  .ui-source-card__excerpt {
160
177
  color: var(--text-soft);
161
178
  margin: 0;
179
+ overflow-wrap: anywhere;
162
180
  }
163
181
 
164
182
  .ui-source-card__actions {
package/css/tokens.css CHANGED
@@ -282,8 +282,15 @@
282
282
  --shadow-raised: 0 0 0 1px var(--text);
283
283
  }
284
284
 
285
+ :root[data-contrast='high'] {
286
+ --line: var(--line-strong);
287
+ --text-dim: var(--text-soft);
288
+ --focus-ring: var(--accent);
289
+ --shadow-raised: 0 0 0 1px var(--text);
290
+ }
291
+
285
292
  @media (prefers-contrast: more) {
286
- :root {
293
+ :root:root {
287
294
  --line: var(--line-strong);
288
295
  --text-dim: var(--text-soft);
289
296
  --focus-ring: var(--accent);