@evotecit/canopyx 0.3.13 → 0.3.15

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.
Files changed (99) hide show
  1. package/CanopyX.Html/Assets/canopyx-calendar-edit.js +36 -18
  2. package/CanopyX.Html/Assets/canopyx-calendar-ics.js +7 -5
  3. package/CanopyX.Html/Assets/canopyx-calendar.css +124 -116
  4. package/CanopyX.Html/Assets/canopyx-calendar.js +74 -54
  5. package/CanopyX.Html/Assets/canopyx-cell-range.css +8 -8
  6. package/CanopyX.Html/Assets/canopyx-cell-range.js +1 -1
  7. package/CanopyX.Html/Assets/canopyx-changes.css +113 -113
  8. package/CanopyX.Html/Assets/canopyx-changes.js +7 -10
  9. package/CanopyX.Html/Assets/canopyx-column-groups.css +5 -5
  10. package/CanopyX.Html/Assets/canopyx-column-groups.js +1 -1
  11. package/CanopyX.Html/Assets/canopyx-data.js +2 -2
  12. package/CanopyX.Html/Assets/canopyx-detail-rows.css +9 -9
  13. package/CanopyX.Html/Assets/canopyx-detail-rows.js +2 -2
  14. package/CanopyX.Html/Assets/canopyx-editing.css +18 -18
  15. package/CanopyX.Html/Assets/canopyx-editing.js +1 -1
  16. package/CanopyX.Html/Assets/canopyx-enhance.js +2 -2
  17. package/CanopyX.Html/Assets/canopyx-facets.css +33 -33
  18. package/CanopyX.Html/Assets/canopyx-facets.js +5 -6
  19. package/CanopyX.Html/Assets/canopyx-filter-editor.css +57 -57
  20. package/CanopyX.Html/Assets/canopyx-filter-editor.js +7 -5
  21. package/CanopyX.Html/Assets/canopyx-flow-checks.css +11 -11
  22. package/CanopyX.Html/Assets/canopyx-flow-checks.js +1 -1
  23. package/CanopyX.Html/Assets/canopyx-flow-command.css +7 -7
  24. package/CanopyX.Html/Assets/canopyx-flow-command.js +1 -1
  25. package/CanopyX.Html/Assets/canopyx-flow-dialog.css +7 -7
  26. package/CanopyX.Html/Assets/canopyx-flow-dialog.js +1 -1
  27. package/CanopyX.Html/Assets/canopyx-flow-drafts.css +7 -7
  28. package/CanopyX.Html/Assets/canopyx-flow-drafts.js +1 -1
  29. package/CanopyX.Html/Assets/canopyx-flow-entry.css +17 -76
  30. package/CanopyX.Html/Assets/canopyx-flow-entry.js +9 -3
  31. package/CanopyX.Html/Assets/canopyx-flow-host.css +4 -4
  32. package/CanopyX.Html/Assets/canopyx-flow-host.js +1 -1
  33. package/CanopyX.Html/Assets/canopyx-flow-module.mjs +9 -3
  34. package/CanopyX.Html/Assets/canopyx-flow-pick.css +4 -4
  35. package/CanopyX.Html/Assets/canopyx-flow-pick.js +1 -1
  36. package/CanopyX.Html/Assets/canopyx-flow-preview.css +6 -6
  37. package/CanopyX.Html/Assets/canopyx-flow-preview.js +1 -1
  38. package/CanopyX.Html/Assets/canopyx-flow-records.css +3 -3
  39. package/CanopyX.Html/Assets/canopyx-flow-records.js +1 -1
  40. package/CanopyX.Html/Assets/canopyx-flow-tasks.css +17 -17
  41. package/CanopyX.Html/Assets/canopyx-flow-tasks.js +1 -1
  42. package/CanopyX.Html/Assets/canopyx-flow.css +79 -79
  43. package/CanopyX.Html/Assets/canopyx-flow.js +1 -1
  44. package/CanopyX.Html/Assets/canopyx-format-editor.css +23 -23
  45. package/CanopyX.Html/Assets/canopyx-format-editor.js +2 -3
  46. package/CanopyX.Html/Assets/canopyx-formatting.css +17 -17
  47. package/CanopyX.Html/Assets/canopyx-formatting.js +5 -5
  48. package/CanopyX.Html/Assets/canopyx-forms.css +5 -5
  49. package/CanopyX.Html/Assets/canopyx-forms.js +1 -1
  50. package/CanopyX.Html/Assets/canopyx-grid-module.mjs +94 -51
  51. package/CanopyX.Html/Assets/canopyx-grid-options.css +10 -0
  52. package/CanopyX.Html/Assets/canopyx-grid-options.js +47 -0
  53. package/CanopyX.Html/Assets/canopyx-grid.css +199 -261
  54. package/CanopyX.Html/Assets/canopyx-grid.js +94 -51
  55. package/CanopyX.Html/Assets/canopyx-grouping.css +17 -17
  56. package/CanopyX.Html/Assets/canopyx-grouping.js +12 -9
  57. package/CanopyX.Html/Assets/canopyx-highlight.css +14 -14
  58. package/CanopyX.Html/Assets/canopyx-highlight.js +2 -2
  59. package/CanopyX.Html/Assets/canopyx-interactive.css +94 -155
  60. package/CanopyX.Html/Assets/canopyx-interactive.js +33 -14
  61. package/CanopyX.Html/Assets/canopyx-labels-de.js +5 -0
  62. package/CanopyX.Html/Assets/canopyx-labels-es.js +5 -0
  63. package/CanopyX.Html/Assets/canopyx-labels-fr.js +5 -0
  64. package/CanopyX.Html/Assets/canopyx-labels-it.js +5 -0
  65. package/CanopyX.Html/Assets/canopyx-labels-pl.js +5 -0
  66. package/CanopyX.Html/Assets/canopyx-layouts.css +17 -17
  67. package/CanopyX.Html/Assets/canopyx-layouts.js +2 -10
  68. package/CanopyX.Html/Assets/canopyx-link.css +7 -7
  69. package/CanopyX.Html/Assets/canopyx-link.js +1 -1
  70. package/CanopyX.Html/Assets/canopyx-live.css +9 -9
  71. package/CanopyX.Html/Assets/canopyx-live.js +2 -2
  72. package/CanopyX.Html/Assets/canopyx-matrix.css +74 -74
  73. package/CanopyX.Html/Assets/canopyx-matrix.js +3 -4
  74. package/CanopyX.Html/Assets/canopyx-module.mjs +33 -14
  75. package/CanopyX.Html/Assets/canopyx-pager.css +2 -2
  76. package/CanopyX.Html/Assets/canopyx-pager.js +1 -1
  77. package/CanopyX.Html/Assets/canopyx-presenters.js +2 -2
  78. package/CanopyX.Html/Assets/canopyx-record-panel.css +49 -49
  79. package/CanopyX.Html/Assets/canopyx-record-panel.js +2 -2
  80. package/CanopyX.Html/Assets/canopyx-reporting-module.mjs +98 -54
  81. package/CanopyX.Html/Assets/canopyx-reporting.css +214 -276
  82. package/CanopyX.Html/Assets/canopyx-reporting.js +98 -54
  83. package/CanopyX.Html/Assets/canopyx-timeline.css +28 -28
  84. package/CanopyX.Html/Assets/canopyx-timeline.js +11 -10
  85. package/CanopyX.Html/Assets/canopyx-tree-tools.css +47 -47
  86. package/CanopyX.Html/Assets/canopyx-tree-tools.js +3 -3
  87. package/CanopyX.Html/Assets/canopyx.css +81 -142
  88. package/CanopyX.Html/Assets/canopyx.js +33 -14
  89. package/JavaScript/calendar.d.ts +15 -0
  90. package/JavaScript/grid.d.ts +26 -3
  91. package/JavaScript/locales/de.mjs +5 -0
  92. package/JavaScript/locales/es.mjs +5 -0
  93. package/JavaScript/locales/fr.mjs +5 -0
  94. package/JavaScript/locales/it.mjs +5 -0
  95. package/JavaScript/locales/pl.mjs +5 -0
  96. package/JavaScript/plugins.d.ts +4 -0
  97. package/JavaScript/protocol.d.ts +1 -1
  98. package/README.md +6 -2
  99. package/package.json +5 -1
@@ -1,7 +1,7 @@
1
1
  /* Cell ranges (canopyx.cell-range.source): a tint,an outline on each range's outer edges,touch handles and the fill handle. */
2
2
  .cx-data-grid{
3
- --cx-range-fill:color-mix(in srgb,var(--cx-accent) 14%,transparent);
4
- --cx-range-edge:var(--cx-accent);
3
+ --cx-range-fill:color-mix(in srgb,var(--hfx-color-accent,light-dark(#11776f,#37c9b8)) 14%,transparent);
4
+ --cx-range-edge:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));
5
5
  }
6
6
  .cx-data-grid.cx-cell-ranges .cx-canvas .cx-cell{-webkit-touch-callout:none;}
7
7
  .cx-data-grid .cx-row .cx-cell.cx-range{
@@ -15,20 +15,20 @@ background-position:top,bottom,left,right,0 0;background-repeat:no-repeat;
15
15
  .cx-data-grid .cx-row .cx-cell.cx-range-b{--cx-rb:var(--cx-size-2px);}
16
16
  .cx-data-grid .cx-row .cx-cell.cx-range-l{--cx-rl:var(--cx-size-2px);}
17
17
  .cx-data-grid .cx-row .cx-cell.cx-range-r{--cx-rr:var(--cx-size-2px);}
18
- .cx-data-grid .cx-row .cx-cell.cx-range-fill{outline:var(--cx-size-1px) dashed var(--cx-range-edge);outline-offset:var(--cx-size-neg-2px);}
18
+ .cx-data-grid .cx-row .cx-cell.cx-range-fill{outline:var(--cx-size-1px) dashed var(--cx-range-edge);outline-offset:calc(-1 * var(--hfx-focus-width,2px));}
19
19
  .cx-data-grid .cx-row .cx-cell:is(.cx-range,.cx-range-fill):not([data-cx-pin]){position:relative;}
20
20
  .cx-data-grid :is(.cx-range-handle,.cx-fill-handle){position:absolute;z-index:6;box-sizing:border-box;background:var(--cx-range-edge);touch-action:none;}
21
- .cx-data-grid .cx-range-handle{width:var(--cx-size-14px);height:var(--cx-size-14px);border:var(--cx-size-2px) solid var(--cx-surface);border-radius:50%;box-shadow:0 0 0 var(--cx-size-1px) var(--cx-range-edge);}
21
+ .cx-data-grid .cx-range-handle{width:var(--cx-size-14px);height:var(--cx-size-14px);border:var(--cx-size-2px) solid var(--hfx-color-surface,light-dark(#ffffff,#16181c));border-radius:50%;box-shadow:0 0 0 var(--cx-size-1px) var(--cx-range-edge);}
22
22
  .cx-data-grid .cx-range-handle-start{left:0;top:0;}
23
23
  .cx-data-grid .cx-range-handle-end{right:0;bottom:0;}
24
- .cx-data-grid .cx-fill-handle{right:0;bottom:0;width:var(--cx-size-7px);height:var(--cx-size-7px);border:var(--cx-size-1px) solid var(--cx-surface);cursor:crosshair;}
24
+ .cx-data-grid .cx-fill-handle{right:0;bottom:0;width:var(--cx-size-7px);height:var(--cx-size-7px);border:var(--cx-size-1px) solid var(--hfx-color-surface,light-dark(#ffffff,#16181c));cursor:crosshair;}
25
25
  .cx-data-grid .cx-fill-handle::before{content:"";position:absolute;inset:calc(var(--cx-size-6px) * -1);}
26
26
  .cx-data-grid .cx-paste-report{display:grid;grid-template-columns:1fr auto;align-items:center;gap:var(--cx-size-4px) var(--cx-size-8px);margin:0 0 var(--cx-size-6px);
27
- padding:var(--cx-size-6px) var(--cx-size-6px) var(--cx-size-6px) var(--cx-size-12px);border:var(--cx-size-1px) solid var(--cx-line);border-left:var(--cx-size-3px) solid var(--cx-tone-warning);
28
- border-radius:var(--cx-radius-sm);background:var(--cx-surface);font-size:var(--cx-size-13px);}
27
+ padding:var(--cx-size-6px) var(--cx-size-6px) var(--cx-size-6px) var(--cx-size-12px);border:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));border-left:var(--cx-size-3px) solid var(--hfx-color-status-warn-fg,light-dark(#8c5c05,#eeb640));
28
+ border-radius:var(--hfx-radius-sm,4px);background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));font-size:var(--cx-size-13px);}
29
29
  .cx-data-grid .cx-paste-report p{margin:0;}
30
30
  .cx-data-grid .cx-paste-report details{grid-column:1 / -1;}
31
- .cx-data-grid .cx-paste-report summary{cursor:pointer;color:var(--cx-accent-text,var(--cx-accent));}
31
+ .cx-data-grid .cx-paste-report summary{cursor:pointer;color:var(--hfx-color-accent-text,var(--hfx-color-accent,light-dark(#11776f,#37c9b8)));}
32
32
  .cx-data-grid .cx-paste-report ul{margin:var(--cx-size-4px) 0 0;padding-left:var(--cx-size-20px);max-height:var(--cx-size-160px);overflow:auto;}
33
33
  @media (forced-colors:active){
34
34
  .cx-data-grid{--cx-range-fill:Highlight;--cx-range-edge:CanvasText;}
@@ -1,4 +1,4 @@
1
- (function(global){"use strict";const installed=new WeakSet();const part={version:"e99a39e7cccc57b1",install(context){if(installed.has(context.DataGrid.prototype))return;const{DataGrid,h,setText,fill,columnWidth,foldText,gridButton,gridIcon,gridDecorateButton,cellText,cellValue,isCellObject,numberFormat,gridFreeze,gridMomentFromParts,requireIdentifier,loadGridFilterEditor,CELL_CONTROLS,reachable,gridExportField}=context;const CR_LIMIT=200000;const crBad=problem=>{throw new Error("CanopyX: "+problem+".")};function crOptions(grid){const declared=grid.opts.rangeSelection??grid.view.rangeSelection,clipboard=Object.assign({},grid.view.clipboard,grid.opts.clipboard);const object=declared!==null&&typeof declared==="object"&&!Array.isArray(declared),range=object?declared:{};const flag=value=>value===undefined||typeof value==="boolean";if(declared!==undefined&&typeof declared!=="boolean"&&!object||!flag(range.enabled)||!flag(range.multiple)||!flag(range.fillHandle)||
1
+ (function(global){"use strict";const installed=new WeakSet();const part={version:"91e39c68baaf1d09",install(context){if(installed.has(context.DataGrid.prototype))return;const{DataGrid,h,setText,fill,columnWidth,foldText,gridButton,gridIcon,gridDecorateButton,cellText,cellValue,isCellObject,numberFormat,gridFreeze,gridMomentFromParts,requireIdentifier,loadGridFilterEditor,CELL_CONTROLS,reachable,gridExportField}=context;const CR_LIMIT=200000;const crBad=problem=>{throw new Error("CanopyX: "+problem+".")};function crOptions(grid){const declared=grid.opts.rangeSelection??grid.view.rangeSelection,clipboard=Object.assign({},grid.view.clipboard,grid.opts.clipboard);const object=declared!==null&&typeof declared==="object"&&!Array.isArray(declared),range=object?declared:{};const flag=value=>value===undefined||typeof value==="boolean";if(declared!==undefined&&typeof declared!=="boolean"&&!object||!flag(range.enabled)||!flag(range.multiple)||!flag(range.fillHandle)||
2
2
  !flag(clipboard.copyHeaders)||!flag(clipboard.paste)||clipboard.copyValues!==undefined&&!["display","raw"].includes(clipboard.copyValues))
3
3
  crBad("rangeSelection takes true or { enabled, multiple, fillHandle }, and clipboard { copyHeaders, copyValues, paste }");return Object.freeze({enabled:declared===true||object&&range.enabled!==false,multiple:range.multiple!==false,fillHandle:!!range.fillHandle,headers:!!clipboard.copyHeaders,values:clipboard.copyValues||"display",paste:clipboard.paste!==false})}
4
4
  const crRows=grid=>grid.rowProjection||grid;function crBounds(grid){if(grid.rowProjection)return{first:0,last:grid.rowProjection.rowCount()- 1};const bounds=grid.rowBounds();return{first:Math.max(0,bounds.first),last:bounds.last}}
@@ -1,128 +1,128 @@
1
1
  /* The change views: a text diff,a change list and a propagation view (docs/changes.md). Tones mark what changed,and each change also
2
2
  has a sign,a badge or a symbol,so none relies on colour alone. */
3
- .cx-diff,.cx-changes,.cx-prop{--cx-size-112px:112px;--cx-size-150px:150px;--cx-chg-tint:9%;--cx-chg-strong:28%;min-width:0;color:var(--cx-text);font:var(--cx-font-size)/1.4 var(--cx-font);}
3
+ .cx-diff,.cx-changes,.cx-prop{--cx-size-112px:112px;--cx-size-150px:150px;--cx-chg-tint:9%;--cx-chg-strong:28%;min-width:0;color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));font:var(--hfx-control-font-size,calc(var(--hfx-type-body-size,0.875rem) - var(--cx-compact,0) * .0625rem))/1.4 var(--hfx-font-sans,"Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif);}
4
4
  @media screen{.cx-host[data-cx-theme="dark"] :is(.cx-diff,.cx-changes,.cx-prop){--cx-chg-tint:15%;--cx-chg-strong:36%;}}
5
5
  @media screen and (prefers-color-scheme:dark){.cx-host[data-cx-theme="auto"] :is(.cx-diff,.cx-changes,.cx-prop){--cx-chg-tint:15%;--cx-chg-strong:36%;}}
6
6
  .cx-change-host:is([data-cx-height],[style*="height"]) > :is(.cx-diff,.cx-changes,.cx-prop){height:100%;overflow:auto;}
7
7
  :is(.cx-diff,.cx-changes,.cx-prop) [hidden]{display:none !important;}
8
8
  .cx-chg-ico{width:var(--cx-size-16px);height:var(--cx-size-16px);flex:none;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;}
9
9
  .cx-diff-btn,.cx-chg-action,.cx-chg-more{display:inline-flex;align-items:center;justify-content:center;gap:var(--cx-size-6px);box-sizing:border-box;min-width:var(--cx-size-30px);min-height:var(--cx-size-30px);
10
- padding:0 var(--cx-size-8px);font:inherit;font-size:var(--cx-size-13px);color:var(--cx-text);background:var(--cx-surface);border:var(--cx-size-1px) solid var(--cx-control-border);border-radius:var(--cx-radius-sm);cursor:pointer;}
11
- :is(.cx-diff-btn,.cx-chg-action,.cx-chg-more,.cx-chg-kind,.cx-chg-toggle,.cx-chg-hashbtn):hover{background:var(--cx-hover-bg);}
12
- :is(.cx-diff-btn,.cx-chg-action,.cx-chg-more,.cx-chg-kind,.cx-chg-toggle,.cx-chg-hashbtn,.cx-diff-segbtn,.cx-diff-expand):focus-visible{outline:var(--cx-size-2px) solid var(--cx-accent);outline-offset:var(--cx-size-1px);}
13
- .cx-diff-btn.cx-diff-done{border-color:var(--cx-tone-success);color:var(--cx-tone-success);}
10
+ padding:0 var(--cx-size-8px);font:inherit;font-size:var(--cx-size-13px);color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));border:var(--cx-size-1px) solid var(--hfx-color-border-control,light-dark(#8a8f98,#6e737c));border-radius:var(--hfx-radius-sm,4px);cursor:pointer;}
11
+ :is(.cx-diff-btn,.cx-chg-action,.cx-chg-more,.cx-chg-kind,.cx-chg-toggle,.cx-chg-hashbtn):hover{background:var(--hfx-color-hover,light-dark(#f5f5f5,#232529));}
12
+ :is(.cx-diff-btn,.cx-chg-action,.cx-chg-more,.cx-chg-kind,.cx-chg-toggle,.cx-chg-hashbtn,.cx-diff-segbtn,.cx-diff-expand):focus-visible{outline:var(--hfx-focus-width,2px) solid var(--hfx-color-focus-ring,light-dark(#02726a,#37c9b8));outline-offset:var(--hfx-focus-offset,2px);}
13
+ .cx-diff-btn.cx-diff-done{border-color:var(--hfx-color-status-good-fg,light-dark(#177345,#4cc78a));color:var(--hfx-color-status-good-fg,light-dark(#177345,#4cc78a));}
14
14
  .cx-diff{position:relative;display:flex;flex-direction:column;gap:var(--cx-size-8px);max-height:100%;}
15
15
  .cx-diff-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--cx-size-8px) var(--cx-size-12px);}
16
16
  .cx-diff-title{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--cx-size-4px) var(--cx-size-10px);min-width:0;flex:1 1 var(--cx-size-240px);}
17
- .cx-diff-path{font-family:var(--cx-font-mono);font-size:var(--cx-size-13px);font-weight:600;overflow-wrap:anywhere;}
18
- .cx-diff-stats{display:inline-flex;gap:var(--cx-size-6px);font-family:var(--cx-font-mono);font-size:var(--cx-size-12px);font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}
19
- .cx-diff-plus{color:var(--cx-tone-success);}
20
- .cx-diff-minus{color:var(--cx-tone-danger);}
17
+ .cx-diff-path{font-family:var(--hfx-font-mono,"Cascadia Mono","Cascadia Code",Consolas,"SFMono-Regular",Menlo,monospace);font-size:var(--cx-size-13px);font-weight:600;overflow-wrap:anywhere;}
18
+ .cx-diff-stats{display:inline-flex;gap:var(--cx-size-6px);font-family:var(--hfx-font-mono,"Cascadia Mono","Cascadia Code",Consolas,"SFMono-Regular",Menlo,monospace);font-size:var(--cx-size-12px);font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;}
19
+ .cx-diff-plus{color:var(--hfx-color-status-good-fg,light-dark(#177345,#4cc78a));}
20
+ .cx-diff-minus{color:var(--hfx-color-status-bad-fg,light-dark(#b8292a,#f47171));}
21
21
  .cx-diff-tools{display:flex;flex-wrap:wrap;align-items:center;gap:var(--cx-size-6px);}
22
- .cx-diff-seg{display:inline-flex;border:var(--cx-size-1px) solid var(--cx-control-border);border-radius:var(--cx-radius-sm);overflow:hidden;}
23
- .cx-diff-segbtn{min-height:var(--cx-size-30px);padding:0 var(--cx-size-10px);font:inherit;font-size:var(--cx-size-13px);color:var(--cx-text);background:var(--cx-surface);border:0;cursor:pointer;}
24
- .cx-diff-segbtn + .cx-diff-segbtn{border-inline-start:var(--cx-size-1px) solid var(--cx-control-border);}
25
- .cx-diff-segbtn[aria-checked="true"]{background:var(--cx-accent-soft);color:var(--cx-accent-text);font-weight:600;}
22
+ .cx-diff-seg{display:inline-flex;border:var(--cx-size-1px) solid var(--hfx-color-border-control,light-dark(#8a8f98,#6e737c));border-radius:var(--hfx-radius-sm,4px);overflow:hidden;}
23
+ .cx-diff-segbtn{min-height:var(--cx-size-30px);padding:0 var(--cx-size-10px);font:inherit;font-size:var(--cx-size-13px);color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));border:0;cursor:pointer;}
24
+ .cx-diff-segbtn + .cx-diff-segbtn{border-inline-start:var(--cx-size-1px) solid var(--hfx-color-border-control,light-dark(#8a8f98,#6e737c));}
25
+ .cx-diff-segbtn[aria-checked="true"]{background:var(--hfx-color-accent-subtle,light-dark(#e7f1f1,#1b3435));color:var(--hfx-color-accent-text,light-dark(#02726a,#37c9b8));font-weight:600;}
26
26
  .cx-diff-notes{display:grid;gap:var(--cx-size-4px);}
27
- .cx-diff-note{padding:var(--cx-size-6px) var(--cx-size-10px);font-size:var(--cx-size-13px);color:var(--cx-text);background:var(--cx-hover-bg);border-inline-start:var(--cx-size-3px) solid var(--cx-line-strong);border-radius:var(--cx-radius-sm);}
27
+ .cx-diff-note{padding:var(--cx-size-6px) var(--cx-size-10px);font-size:var(--cx-size-13px);color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));background:var(--hfx-color-hover,light-dark(#f5f5f5,#232529));border-inline-start:var(--cx-size-3px) solid var(--hfx-color-border-strong,light-dark(#cdd0d5,#363a42));border-radius:var(--hfx-radius-sm,4px);}
28
28
  .cx-diff-note:is(.cx-tone-info,.cx-tone-warning,.cx-tone-danger,.cx-tone-success){border-inline-start-color:var(--cx-chg-note);}
29
- .cx-diff-note.cx-tone-info{--cx-chg-note:var(--cx-tone-info);}
30
- .cx-diff-note.cx-tone-warning{--cx-chg-note:var(--cx-tone-warning);}
31
- .cx-diff-note.cx-tone-danger{--cx-chg-note:var(--cx-tone-danger);}
32
- .cx-diff-note.cx-tone-success{--cx-chg-note:var(--cx-tone-success);}
33
- .cx-diff-state{padding:var(--cx-size-16px);color:var(--cx-muted);text-align:center;border:var(--cx-size-1px) dashed var(--cx-line-strong);border-radius:var(--cx-radius);}
34
- .cx-diff-scroll{position:relative;flex:0 1 auto;min-height:0;max-height:var(--cx-diff-max-height,70vh);overflow:auto;background:var(--cx-surface);border:var(--cx-size-1px) solid var(--cx-line);
35
- border-radius:var(--cx-radius);font-family:var(--cx-font-mono);font-size:var(--cx-size-12px);overscroll-behavior:contain;}
29
+ .cx-diff-note.cx-tone-info{--cx-chg-note:var(--hfx-color-status-info-fg,light-dark(#2b5fc0,#74a2f7));}
30
+ .cx-diff-note.cx-tone-warning{--cx-chg-note:var(--hfx-color-status-warn-fg,light-dark(#8c5c05,#eeb640));}
31
+ .cx-diff-note.cx-tone-danger{--cx-chg-note:var(--hfx-color-status-bad-fg,light-dark(#b8292a,#f47171));}
32
+ .cx-diff-note.cx-tone-success{--cx-chg-note:var(--hfx-color-status-good-fg,light-dark(#177345,#4cc78a));}
33
+ .cx-diff-state{padding:var(--cx-size-16px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));text-align:center;border:var(--cx-size-1px) dashed var(--hfx-color-border-strong,light-dark(#cdd0d5,#363a42));border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));}
34
+ .cx-diff-scroll{position:relative;flex:0 1 auto;min-height:0;max-height:var(--cx-diff-max-height,70vh);overflow:auto;background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));border:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));
35
+ border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));font-family:var(--hfx-font-mono,"Cascadia Mono","Cascadia Code",Consolas,"SFMono-Regular",Menlo,monospace);font-size:var(--cx-size-12px);overscroll-behavior:contain;}
36
36
  .cx-change-host:is([data-cx-height],[style*="height"]) .cx-diff-scroll{flex:1 1 auto;max-height:none;}
37
37
  .cx-diff-frame{position:relative;display:flex;flex-direction:column;flex:0 1 auto;min-height:0;}
38
38
  .cx-change-host:is([data-cx-height],[style*="height"]) .cx-diff-frame{flex:1 1 auto;}
39
39
  .cx-diff-edge{position:absolute;top:calc(var(--cx-size-1px) + var(--cx-diff-head,0px));bottom:calc(var(--cx-size-1px) + var(--cx-diff-bar-x,0px));width:var(--cx-size-32px);z-index:3;pointer-events:none;
40
- --cx-diff-shade:color-mix(in srgb,var(--cx-text) 26%,transparent);--cx-diff-line:color-mix(in srgb,var(--cx-accent) 70%,transparent);}
40
+ --cx-diff-shade:color-mix(in srgb,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)) 26%,transparent);--cx-diff-line:color-mix(in srgb,var(--hfx-color-accent,light-dark(#11776f,#37c9b8)) 70%,transparent);}
41
41
  .cx-diff-edge-start{inset-inline-start:var(--cx-size-1px);background:linear-gradient(to right,var(--cx-diff-shade),transparent);border-inline-start:var(--cx-size-2px) solid var(--cx-diff-line);}
42
42
  .cx-diff-edge-end{inset-inline-end:calc(var(--cx-size-1px) + var(--cx-diff-bar-y,0px));background:linear-gradient(to left,var(--cx-diff-shade),transparent);border-inline-end:var(--cx-size-2px) solid var(--cx-diff-line);}
43
43
  .cx-diff-edge-start:dir(rtl){background:linear-gradient(to left,var(--cx-diff-shade),transparent);}
44
44
  .cx-diff-edge-end:dir(rtl){background:linear-gradient(to right,var(--cx-diff-shade),transparent);}
45
45
  :is(.cx-diff,.cx-changes) [data-cx-tip]{position:relative;}
46
46
  :is(.cx-diff,.cx-changes) [data-cx-tip]:not([data-cx-tip-off]):focus-visible::after{content:attr(data-cx-tip);position:absolute;bottom:calc(100% + var(--cx-size-6px));inset-inline-end:0;z-index:6;padding:var(--cx-size-2px) var(--cx-size-8px);
47
- font-size:var(--cx-size-12px);font-weight:400;line-height:1.4;white-space:nowrap;color:var(--cx-surface);background:var(--cx-text);border-radius:var(--cx-radius-sm);pointer-events:none;}
47
+ font-size:var(--cx-size-12px);font-weight:400;line-height:1.4;white-space:nowrap;color:var(--hfx-color-surface,light-dark(#ffffff,#16181c));background:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));border-radius:var(--hfx-radius-sm,4px);pointer-events:none;}
48
48
  @media (hover:hover){
49
49
  :is(.cx-diff,.cx-changes) [data-cx-tip]:not([data-cx-tip-off]):hover::after{content:attr(data-cx-tip);position:absolute;bottom:calc(100% + var(--cx-size-6px));inset-inline-end:0;z-index:6;padding:var(--cx-size-2px) var(--cx-size-8px);
50
- font-size:var(--cx-size-12px);font-weight:400;line-height:1.4;white-space:nowrap;color:var(--cx-surface);background:var(--cx-text);border-radius:var(--cx-radius-sm);pointer-events:none;}
50
+ font-size:var(--cx-size-12px);font-weight:400;line-height:1.4;white-space:nowrap;color:var(--hfx-color-surface,light-dark(#ffffff,#16181c));background:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));border-radius:var(--hfx-radius-sm,4px);pointer-events:none;}
51
51
  }
52
52
  .cx-diff-tools [data-cx-tip]::after{bottom:auto !important;top:calc(100% + var(--cx-size-6px));}
53
- .cx-diff-scroll:focus-visible{outline:var(--cx-size-2px) solid var(--cx-accent);outline-offset:calc(var(--cx-size-2px) * -1);}
54
- .cx-diff-columns{position:sticky;top:0;z-index:2;display:grid;grid-template-columns:1fr 1fr;background:var(--cx-head-bg);border-bottom:var(--cx-size-1px) solid var(--cx-line);
55
- font-family:var(--cx-font);font-size:var(--cx-size-12px);font-weight:600;color:var(--cx-muted);}
53
+ .cx-diff-scroll:focus-visible{outline:var(--hfx-focus-width,2px) solid var(--hfx-color-focus-ring,light-dark(#02726a,#37c9b8));outline-offset:calc(var(--cx-size-2px) * -1);}
54
+ .cx-diff-columns{position:sticky;top:0;z-index:2;display:grid;grid-template-columns:1fr 1fr;background:var(--hfx-color-surface-sunken,light-dark(#f7f8f9,#111317));border-bottom:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));
55
+ font-family:var(--hfx-font-sans,"Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif);font-size:var(--cx-size-12px);font-weight:600;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
56
56
  .cx-diff-colhead{padding:var(--cx-size-4px) var(--cx-size-10px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
57
- .cx-diff-colhead + .cx-diff-colhead{border-inline-start:var(--cx-size-1px) solid var(--cx-line);}
57
+ .cx-diff-colhead + .cx-diff-colhead{border-inline-start:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
58
58
  .cx-diff-canvas{position:relative;}
59
59
  .cx-diff-row{position:absolute;top:0;inset-inline-start:0;width:100%;height:20px;display:grid;grid-template-columns:var(--cx-diff-num) var(--cx-diff-num) 2ch minmax(0,1fr);line-height:20px;contain:layout style;}
60
60
  .cx-diff-split .cx-diff-pairrow{grid-template-columns:var(--cx-diff-num) minmax(0,1fr) var(--cx-diff-num) minmax(0,1fr);}
61
- .cx-diff-num{padding:0 var(--cx-size-8px);text-align:end;color:var(--cx-muted);font-variant-numeric:tabular-nums;user-select:none;}
62
- .cx-diff-pairrow .cx-diff-num:nth-child(3){border-inline-start:var(--cx-size-1px) solid var(--cx-line);}
63
- .cx-diff-sign{text-align:center;color:var(--cx-muted);user-select:none;}
61
+ .cx-diff-num{padding:0 var(--cx-size-8px);text-align:end;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));font-variant-numeric:tabular-nums;user-select:none;}
62
+ .cx-diff-pairrow .cx-diff-num:nth-child(3){border-inline-start:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
63
+ .cx-diff-sign{text-align:center;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));user-select:none;}
64
64
  .cx-diff-code{padding-inline:var(--cx-size-6px) var(--cx-size-16px);white-space:pre;overflow:hidden;tab-size:4;}
65
- .cx-diff-del{--cx-chg-diff:var(--cx-tone-danger);}
66
- .cx-diff-add{--cx-chg-diff:var(--cx-tone-success);}
67
- .cx-diff-row:is(.cx-diff-del,.cx-diff-add),.cx-diff-pairrow .cx-diff-code:is(.cx-diff-del,.cx-diff-add){background:color-mix(in srgb,var(--cx-chg-diff) var(--cx-chg-tint),var(--cx-surface));}
65
+ .cx-diff-del{--cx-chg-diff:var(--hfx-color-status-bad-fg,light-dark(#b8292a,#f47171));}
66
+ .cx-diff-add{--cx-chg-diff:var(--hfx-color-status-good-fg,light-dark(#177345,#4cc78a));}
67
+ .cx-diff-row:is(.cx-diff-del,.cx-diff-add),.cx-diff-pairrow .cx-diff-code:is(.cx-diff-del,.cx-diff-add){background:color-mix(in srgb,var(--cx-chg-diff) var(--cx-chg-tint),var(--hfx-color-surface,light-dark(#ffffff,#16181c)));}
68
68
  .cx-diff-row:is(.cx-diff-del,.cx-diff-add) :is(.cx-diff-num,.cx-diff-sign),.cx-diff-pairrow .cx-diff-num:is(.cx-diff-del,.cx-diff-add){
69
- color:color-mix(in srgb,var(--cx-chg-diff) 70%,var(--cx-text));background:color-mix(in srgb,var(--cx-chg-diff) calc(var(--cx-chg-tint) * 1.8),var(--cx-surface));}
70
- .cx-diff-mark{color:inherit;text-decoration:none;border-radius:var(--cx-size-2px);background:color-mix(in srgb,var(--cx-chg-diff) var(--cx-chg-strong),var(--cx-surface));}
71
- .cx-diff-blank{background:repeating-linear-gradient(135deg,transparent 0 var(--cx-size-5px),color-mix(in srgb,var(--cx-line) 55%,transparent) var(--cx-size-5px) var(--cx-size-6px));}
72
- .cx-diff-gaprow{background:var(--cx-head-bg);color:var(--cx-muted);}
73
- .cx-diff-gap{grid-column:1 / -1;display:flex;align-items:center;gap:var(--cx-size-6px);padding:0 var(--cx-size-10px);font-family:var(--cx-font);font-size:var(--cx-size-12px);}
74
- .cx-diff-expand{min-height:20px;padding:0 var(--cx-size-4px);font:inherit;color:var(--cx-accent-text);background:none;border:0;border-radius:var(--cx-radius-sm);cursor:pointer;}
75
- .cx-diff-expand::before{content:"\22EF ";color:var(--cx-muted);}
69
+ color:color-mix(in srgb,var(--cx-chg-diff) 70%,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));background:color-mix(in srgb,var(--cx-chg-diff) calc(var(--cx-chg-tint) * 1.8),var(--hfx-color-surface,light-dark(#ffffff,#16181c)));}
70
+ .cx-diff-mark{color:inherit;text-decoration:none;border-radius:var(--cx-size-2px);background:color-mix(in srgb,var(--cx-chg-diff) var(--cx-chg-strong),var(--hfx-color-surface,light-dark(#ffffff,#16181c)));}
71
+ .cx-diff-blank{background:repeating-linear-gradient(135deg,transparent 0 var(--cx-size-5px),color-mix(in srgb,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)) 55%,transparent) var(--cx-size-5px) var(--cx-size-6px));}
72
+ .cx-diff-gaprow{background:var(--hfx-color-surface-sunken,light-dark(#f7f8f9,#111317));color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
73
+ .cx-diff-gap{grid-column:1 / -1;display:flex;align-items:center;gap:var(--cx-size-6px);padding:0 var(--cx-size-10px);font-family:var(--hfx-font-sans,"Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif);font-size:var(--cx-size-12px);}
74
+ .cx-diff-expand{min-height:20px;padding:0 var(--cx-size-4px);font:inherit;color:var(--hfx-color-accent-text,light-dark(#02726a,#37c9b8));background:none;border:0;border-radius:var(--hfx-radius-sm,4px);cursor:pointer;}
75
+ .cx-diff-expand::before{content:"\22EF ";color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
76
76
  .cx-diff-expand:hover{text-decoration:underline;}
77
- .cx-diff-current{box-shadow:inset var(--cx-size-3px) 0 0 var(--cx-accent);}
78
- .cx-diff-current:dir(rtl){box-shadow:inset calc(var(--cx-size-3px) * -1) 0 0 var(--cx-accent);}
79
- .cx-diff-probe{position:absolute;visibility:hidden;pointer-events:none;font-family:var(--cx-font-mono);font-size:var(--cx-size-12px);white-space:pre;}
77
+ .cx-diff-current{box-shadow:inset var(--cx-size-3px) 0 0 var(--hfx-color-accent,light-dark(#11776f,#37c9b8));}
78
+ .cx-diff-current:dir(rtl){box-shadow:inset calc(var(--cx-size-3px) * -1) 0 0 var(--hfx-color-accent,light-dark(#11776f,#37c9b8));}
79
+ .cx-diff-probe{position:absolute;visibility:hidden;pointer-events:none;font-family:var(--hfx-font-mono,"Cascadia Mono","Cascadia Code",Consolas,"SFMono-Regular",Menlo,monospace);font-size:var(--cx-size-12px);white-space:pre;}
80
80
  .cx-diff-print{display:none;}
81
81
  .cx-changes{container-type:inline-size;display:flex;flex-direction:column;gap:var(--cx-size-8px);}
82
82
  .cx-chg-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--cx-size-8px) var(--cx-size-12px);}
83
83
  .cx-chg-kinds{display:flex;flex-wrap:wrap;gap:var(--cx-size-6px);}
84
- .cx-chg-kind{display:inline-flex;align-items:center;gap:var(--cx-size-6px);min-height:var(--cx-size-30px);padding:0 var(--cx-size-8px) 0 var(--cx-size-4px);font:inherit;color:var(--cx-text);
85
- background:var(--cx-surface);border:var(--cx-size-1px) solid var(--cx-line-strong);border-radius:var(--cx-size-999px);cursor:pointer;}
86
- .cx-chg-kind[aria-pressed="true"]{border-color:var(--cx-accent);background:var(--cx-accent-soft);}
84
+ .cx-chg-kind{display:inline-flex;align-items:center;gap:var(--cx-size-6px);min-height:var(--cx-size-30px);padding:0 var(--cx-size-8px) 0 var(--cx-size-4px);font:inherit;color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));
85
+ background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));border:var(--cx-size-1px) solid var(--hfx-color-border-strong,light-dark(#cdd0d5,#363a42));border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));cursor:pointer;}
86
+ .cx-chg-kind[aria-pressed="true"]{border-color:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));background:var(--hfx-color-accent-subtle,light-dark(#e7f1f1,#1b3435));}
87
87
  .cx-chg-count{font-size:var(--cx-size-13px);font-weight:600;font-variant-numeric:tabular-nums;}
88
88
  .cx-chg-switch{display:inline-flex;align-items:center;gap:var(--cx-size-6px);min-height:var(--cx-size-30px);font-size:var(--cx-size-13px);cursor:pointer;}
89
- .cx-chg-switch input{width:var(--cx-size-16px);height:var(--cx-size-16px);margin:0;accent-color:var(--cx-accent);}
90
- .cx-chg-summary{margin-inline-start:auto;font-size:var(--cx-size-13px);color:var(--cx-muted);font-variant-numeric:tabular-nums;}
89
+ .cx-chg-switch input{width:var(--cx-size-16px);height:var(--cx-size-16px);margin:0;accent-color:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));}
90
+ .cx-chg-summary{margin-inline-start:auto;font-size:var(--cx-size-13px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));font-variant-numeric:tabular-nums;}
91
91
  .cx-chg-printnote{display:none;}
92
92
  .cx-chg-tools{display:flex;flex-wrap:wrap;gap:var(--cx-size-6px);}
93
93
  .cx-chg-summary:empty ~ .cx-chg-tools{margin-inline-start:auto;}
94
94
  a.cx-chg-action{text-decoration:none;}
95
95
  .cx-chg-panel{display:grid;gap:var(--cx-size-6px);max-width:var(--cx-size-640px);margin:0 var(--cx-size-12px) var(--cx-size-10px) calc(var(--cx-size-30px) + var(--cx-size-16px));padding:var(--cx-size-10px) var(--cx-size-12px);
96
- background:var(--cx-head-bg);border:var(--cx-size-1px) solid var(--cx-line);border-radius:var(--cx-radius);}
96
+ background:var(--hfx-color-surface-sunken,light-dark(#f7f8f9,#111317));border:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));}
97
97
  .cx-chg-barpanel > .cx-chg-panel{margin:var(--cx-size-8px) 0 0;}
98
98
  .cx-chg-asklabel{font-size:var(--cx-size-13px);font-weight:600;}
99
- .cx-chg-reasonbox{box-sizing:border-box;width:100%;min-height:var(--cx-size-56px);padding:var(--cx-size-6px) var(--cx-size-8px);font:inherit;font-size:var(--cx-size-13px);color:var(--cx-text);background:var(--cx-surface);
100
- border:var(--cx-size-1px) solid var(--cx-control-border);border-radius:var(--cx-radius-sm);resize:vertical;}
101
- .cx-chg-reasonbox:focus-visible{outline:var(--cx-size-2px) solid var(--cx-accent);outline-offset:var(--cx-size-1px);}
102
- .cx-chg-reasonbox[aria-invalid="true"]{border-color:var(--cx-tone-danger);}
103
- .cx-chg-hint{font-size:var(--cx-size-12px);color:var(--cx-muted);}
104
- .cx-chg-askerror{font-size:var(--cx-size-12px);font-weight:600;color:var(--cx-tone-danger);}
99
+ .cx-chg-reasonbox{box-sizing:border-box;width:100%;min-height:var(--cx-size-56px);padding:var(--cx-size-6px) var(--cx-size-8px);font:inherit;font-size:var(--cx-size-13px);color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));
100
+ border:var(--cx-size-1px) solid var(--hfx-color-border-control,light-dark(#8a8f98,#6e737c));border-radius:var(--hfx-radius-sm,4px);resize:vertical;}
101
+ .cx-chg-reasonbox:focus-visible{outline:var(--hfx-focus-width,2px) solid var(--hfx-color-focus-ring,light-dark(#02726a,#37c9b8));outline-offset:var(--hfx-focus-offset,2px);}
102
+ .cx-chg-reasonbox[aria-invalid="true"]{border-color:var(--hfx-color-status-bad-fg,light-dark(#b8292a,#f47171));}
103
+ .cx-chg-hint{font-size:var(--cx-size-12px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
104
+ .cx-chg-askerror{font-size:var(--cx-size-12px);font-weight:600;color:var(--hfx-color-status-bad-fg,light-dark(#b8292a,#f47171));}
105
105
  .cx-chg-askerror:empty{display:none;}
106
106
  .cx-chg-askbtns{display:flex;flex-wrap:wrap;gap:var(--cx-size-6px);}
107
- .cx-chg-action.cx-chg-primary{color:var(--cx-on-accent);background:var(--cx-accent);border-color:var(--cx-accent);}
107
+ .cx-chg-action.cx-chg-primary{color:var(--hfx-color-accent-contrast,light-dark(#ffffff,#0c0d10));background:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));border-color:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));}
108
108
  .cx-chg-note{margin:0;font-size:var(--cx-size-13px);}
109
109
  .cx-chg-badge{display:inline-flex;align-items:center;box-sizing:border-box;max-width:100%;min-height:var(--cx-size-22px);padding:0 var(--cx-size-8px);overflow:hidden;font-size:var(--cx-size-12px);font-weight:600;
110
- white-space:nowrap;text-overflow:ellipsis;color:var(--cx-muted);border:var(--cx-size-1px) solid currentColor;border-radius:var(--cx-size-999px);}
111
- .cx-chg-badge.cx-tone-success{color:var(--cx-tone-success);}
112
- .cx-chg-badge.cx-tone-danger{color:var(--cx-tone-danger);}
113
- .cx-chg-badge.cx-tone-info{color:var(--cx-tone-info);}
114
- .cx-chg-badge.cx-tone-warning{color:var(--cx-tone-warning);}
110
+ white-space:nowrap;text-overflow:ellipsis;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));border:var(--cx-size-1px) solid currentColor;border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));}
111
+ .cx-chg-badge.cx-tone-success{color:var(--hfx-color-status-good-fg,light-dark(#177345,#4cc78a));}
112
+ .cx-chg-badge.cx-tone-danger{color:var(--hfx-color-status-bad-fg,light-dark(#b8292a,#f47171));}
113
+ .cx-chg-badge.cx-tone-info{color:var(--hfx-color-status-info-fg,light-dark(#2b5fc0,#74a2f7));}
114
+ .cx-chg-badge.cx-tone-warning{color:var(--hfx-color-status-warn-fg,light-dark(#8c5c05,#eeb640));}
115
115
  .cx-chg-badge.cx-toned{color:var(--cx-t);}
116
116
  .cx-chg-list,.cx-chg-sublist,.cx-chg-reasons{list-style:none;margin:0;padding:0;}
117
- .cx-chg-list{border:var(--cx-size-1px) solid var(--cx-line);border-radius:var(--cx-radius);background:var(--cx-surface);}
118
- .cx-chg-folder{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--cx-size-6px);padding:var(--cx-size-6px) var(--cx-size-12px);background:var(--cx-head-bg);border-bottom:var(--cx-size-1px) solid var(--cx-line);}
119
- .cx-chg-group + .cx-chg-group .cx-chg-folder{border-top:var(--cx-size-1px) solid var(--cx-line);}
120
- .cx-chg-foldername{font-family:var(--cx-font-mono);font-size:var(--cx-size-12px);font-weight:600;overflow-wrap:anywhere;}
121
- .cx-chg-foldercount{font-size:var(--cx-size-12px);color:var(--cx-muted);}
122
- .cx-chg-item + .cx-chg-item{border-top:var(--cx-size-1px) solid var(--cx-line);}
117
+ .cx-chg-list{border:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));}
118
+ .cx-chg-folder{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--cx-size-6px);padding:var(--cx-size-6px) var(--cx-size-12px);background:var(--hfx-color-surface-sunken,light-dark(#f7f8f9,#111317));border-bottom:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
119
+ .cx-chg-group + .cx-chg-group .cx-chg-folder{border-top:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
120
+ .cx-chg-foldername{font-family:var(--hfx-font-mono,"Cascadia Mono","Cascadia Code",Consolas,"SFMono-Regular",Menlo,monospace);font-size:var(--cx-size-12px);font-weight:600;overflow-wrap:anywhere;}
121
+ .cx-chg-foldercount{font-size:var(--cx-size-12px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
122
+ .cx-chg-item + .cx-chg-item{border-top:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
123
123
  .cx-chg-row{display:grid;grid-template-columns:var(--cx-size-30px) var(--cx-size-112px) minmax(0,1fr) auto auto;grid-template-areas:"toggle badge main meta actions";align-items:center;
124
124
  column-gap:var(--cx-size-10px);row-gap:var(--cx-size-4px);padding:var(--cx-size-6px) var(--cx-size-12px) var(--cx-size-6px) var(--cx-size-6px);}
125
- .cx-chg-toggle{grid-area:toggle;display:inline-flex;align-items:center;justify-content:center;width:var(--cx-size-30px);height:var(--cx-size-30px);padding:0;color:var(--cx-muted);background:none;border:0;border-radius:var(--cx-radius-sm);cursor:pointer;}
125
+ .cx-chg-toggle{grid-area:toggle;display:inline-flex;align-items:center;justify-content:center;width:var(--cx-size-30px);height:var(--cx-size-30px);padding:0;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));background:none;border:0;border-radius:var(--hfx-radius-sm,4px);cursor:pointer;}
126
126
  .cx-chg-toggle .cx-chg-ico{transition:transform .12s;}
127
127
  .cx-chg-toggle[aria-expanded="true"] .cx-chg-ico{transform:rotate(90deg);}
128
128
  .cx-chg-toggle:dir(rtl) .cx-chg-ico{transform:scaleX(-1);}
@@ -130,40 +130,40 @@ column-gap:var(--cx-size-10px);row-gap:var(--cx-size-4px);padding:var(--cx-size-
130
130
  .cx-chg-row > .cx-chg-badge{grid-area:badge;justify-self:start;}
131
131
  .cx-chg-main{grid-area:main;min-width:0;display:grid;gap:var(--cx-size-2px);}
132
132
  .cx-chg-title{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--cx-size-2px) var(--cx-size-8px);min-width:0;}
133
- .cx-chg-name{font-family:var(--cx-font-mono);font-size:var(--cx-size-13px);font-weight:600;overflow-wrap:anywhere;}
134
- .cx-chg-from,.cx-chg-sub{font-size:var(--cx-size-12px);color:var(--cx-muted);overflow-wrap:anywhere;}
133
+ .cx-chg-name{font-family:var(--hfx-font-mono,"Cascadia Mono","Cascadia Code",Consolas,"SFMono-Regular",Menlo,monospace);font-size:var(--cx-size-13px);font-weight:600;overflow-wrap:anywhere;}
134
+ .cx-chg-from,.cx-chg-sub{font-size:var(--cx-size-12px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));overflow-wrap:anywhere;}
135
135
  .cx-chg-flags{display:flex;flex-wrap:wrap;gap:var(--cx-size-4px);}
136
136
  .cx-chg-flag{display:inline-flex;align-items:center;gap:var(--cx-size-4px);padding:var(--cx-size-1px) var(--cx-size-8px) var(--cx-size-1px) var(--cx-size-6px);font-size:var(--cx-size-12px);font-weight:600;
137
- color:var(--cx-chg-flag,var(--cx-text));background:color-mix(in srgb,var(--cx-chg-flag,var(--cx-text)) 12%,var(--cx-surface));border-radius:var(--cx-radius-sm);}
137
+ color:var(--cx-chg-flag,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));background:color-mix(in srgb,var(--cx-chg-flag,var(--hfx-color-text,light-dark(#16181c,#f2f3f5))) 12%,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));border-radius:var(--hfx-radius-sm,4px);}
138
138
  .cx-chg-flag .cx-chg-ico{width:var(--cx-size-12px);height:var(--cx-size-12px);}
139
- .cx-chg-flag.cx-tone-warning,.cx-chg-reason.cx-tone-warning{--cx-chg-flag:var(--cx-tone-warning);}
140
- .cx-chg-flag.cx-tone-danger,.cx-chg-reason.cx-tone-danger{--cx-chg-flag:var(--cx-tone-danger);}
141
- .cx-chg-flag.cx-tone-info,.cx-chg-reason.cx-tone-info{--cx-chg-flag:var(--cx-tone-info);}
139
+ .cx-chg-flag.cx-tone-warning,.cx-chg-reason.cx-tone-warning{--cx-chg-flag:var(--hfx-color-status-warn-fg,light-dark(#8c5c05,#eeb640));}
140
+ .cx-chg-flag.cx-tone-danger,.cx-chg-reason.cx-tone-danger{--cx-chg-flag:var(--hfx-color-status-bad-fg,light-dark(#b8292a,#f47171));}
141
+ .cx-chg-flag.cx-tone-info,.cx-chg-reason.cx-tone-info{--cx-chg-flag:var(--hfx-color-status-info-fg,light-dark(#2b5fc0,#74a2f7));}
142
142
  .cx-chg-flag.cx-toned,.cx-chg-reason.cx-toned{--cx-chg-flag:var(--cx-t);}
143
143
  .cx-chg-meta{grid-area:meta;display:grid;grid-template-columns:var(--cx-size-150px) auto;align-items:center;column-gap:var(--cx-size-12px);font-size:var(--cx-size-12px);}
144
- .cx-chg-size{text-align:end;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--cx-text-2);}
144
+ .cx-chg-size{text-align:end;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--hfx-color-text-secondary,light-dark(#4d525b,#b0b4bc));}
145
145
  .cx-chg-hash{display:inline-flex;align-items:center;gap:var(--cx-size-2px);min-width:calc(var(--cx-size-150px) + var(--cx-size-56px));white-space:nowrap;}
146
- .cx-chg-hashbtn{padding:var(--cx-size-1px) var(--cx-size-4px);font-family:var(--cx-font-mono);font-size:var(--cx-size-12px);color:var(--cx-text-2);background:none;border:0;border-radius:var(--cx-radius-sm);cursor:copy;}
147
- .cx-chg-arrow{color:var(--cx-muted);}
146
+ .cx-chg-hashbtn{padding:var(--cx-size-1px) var(--cx-size-4px);font-family:var(--hfx-font-mono,"Cascadia Mono","Cascadia Code",Consolas,"SFMono-Regular",Menlo,monospace);font-size:var(--cx-size-12px);color:var(--hfx-color-text-secondary,light-dark(#4d525b,#b0b4bc));background:none;border:0;border-radius:var(--hfx-radius-sm,4px);cursor:copy;}
147
+ .cx-chg-arrow{color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
148
148
  .cx-chg-actions{grid-area:actions;display:flex;gap:var(--cx-size-4px);justify-content:flex-end;}
149
149
  .cx-chg-action:not(.cx-chg-textaction){padding:0;width:var(--cx-size-30px);}
150
150
  .cx-chg-detail{display:grid;gap:var(--cx-size-10px);padding:var(--cx-size-4px) var(--cx-size-12px) var(--cx-size-12px) calc(var(--cx-size-30px) + var(--cx-size-16px));}
151
- .cx-chg-dhead{font-size:var(--cx-size-12px);font-weight:600;color:var(--cx-muted);text-transform:uppercase;letter-spacing:var(--cx-size-d04em);}
151
+ .cx-chg-dhead{font-size:var(--cx-size-12px);font-weight:600;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));text-transform:uppercase;letter-spacing:var(--cx-size-d04em);}
152
152
  .cx-chg-reasons{display:grid;gap:var(--cx-size-4px);font-size:var(--cx-size-13px);}
153
- .cx-chg-reason{color:var(--cx-chg-flag,var(--cx-text));}
153
+ .cx-chg-reason{color:var(--cx-chg-flag,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));}
154
154
  .cx-chg-facts{border-collapse:collapse;font-size:var(--cx-size-13px);width:100%;max-width:var(--cx-size-640px);}
155
- .cx-chg-facts :is(th,td){padding:var(--cx-size-4px) var(--cx-size-10px);text-align:start;vertical-align:top;border-bottom:var(--cx-size-1px) solid var(--cx-line);}
156
- .cx-chg-facts thead th{font-size:var(--cx-size-12px);color:var(--cx-muted);font-weight:600;background:var(--cx-head-bg);}
157
- .cx-chg-facts tbody th{font-weight:400;color:var(--cx-muted);white-space:nowrap;}
158
- .cx-chg-mono{font-family:var(--cx-font-mono);font-size:var(--cx-size-12px);overflow-wrap:anywhere;}
155
+ .cx-chg-facts :is(th,td){padding:var(--cx-size-4px) var(--cx-size-10px);text-align:start;vertical-align:top;border-bottom:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
156
+ .cx-chg-facts thead th{font-size:var(--cx-size-12px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));font-weight:600;background:var(--hfx-color-surface-sunken,light-dark(#f7f8f9,#111317));}
157
+ .cx-chg-facts tbody th{font-weight:400;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));white-space:nowrap;}
158
+ .cx-chg-mono{font-family:var(--hfx-font-mono,"Cascadia Mono","Cascadia Code",Consolas,"SFMono-Regular",Menlo,monospace);font-size:var(--cx-size-12px);overflow-wrap:anywhere;}
159
159
  .cx-chg-changed{font-weight:600;}
160
- .cx-chg-factnote{margin-top:var(--cx-size-2px);font-family:var(--cx-font);font-size:var(--cx-size-12px);font-weight:400;color:var(--cx-muted);}
160
+ .cx-chg-factnote{margin-top:var(--cx-size-2px);font-family:var(--hfx-font-sans,"Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif);font-size:var(--cx-size-12px);font-weight:400;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
161
161
  .cx-chg-facts.cx-chg-onevalue :is(th,td):first-child{width:28%;}
162
- .cx-chg-facts td.cx-tone-warning{color:var(--cx-tone-warning);}
163
- .cx-chg-facts td.cx-tone-danger{color:var(--cx-tone-danger);}
164
- .cx-chg-facts td.cx-tone-success{color:var(--cx-tone-success);}
162
+ .cx-chg-facts td.cx-tone-warning{color:var(--hfx-color-status-warn-fg,light-dark(#8c5c05,#eeb640));}
163
+ .cx-chg-facts td.cx-tone-danger{color:var(--hfx-color-status-bad-fg,light-dark(#b8292a,#f47171));}
164
+ .cx-chg-facts td.cx-tone-success{color:var(--hfx-color-status-good-fg,light-dark(#177345,#4cc78a));}
165
165
  .cx-chg-diff{--cx-diff-max-height:var(--cx-size-480px);min-width:0;}
166
- .cx-chg-empty{padding:var(--cx-size-16px);text-align:center;color:var(--cx-muted);border:var(--cx-size-1px) dashed var(--cx-line);border-radius:var(--cx-radius);}
166
+ .cx-chg-empty{padding:var(--cx-size-16px);text-align:center;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));border:var(--cx-size-1px) dashed var(--hfx-color-border,light-dark(#e2e4e7,#272a30));border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));}
167
167
  .cx-chg-more{align-self:flex-start;}
168
168
  @container (max-width:700px){
169
169
  .cx-chg-row{grid-template-columns:var(--cx-size-30px) minmax(0,1fr) auto;grid-template-areas:"toggle badge actions" ". main main" ". meta meta";}
@@ -175,42 +175,42 @@ color:var(--cx-chg-flag,var(--cx-text));background:color-mix(in srgb,var(--cx-ch
175
175
  .cx-prop{container-type:inline-size;display:flex;flex-direction:column;gap:var(--cx-size-10px);}
176
176
  .cx-prop-head{display:flex;flex-wrap:wrap;align-items:center;gap:var(--cx-size-6px) var(--cx-size-10px);}
177
177
  .cx-prop-summary{font-size:var(--cx-size-14px);}
178
- :is(.cx-prop-state,.cx-prop-key,.cx-prop-badge){display:inline-flex;align-items:center;gap:var(--cx-size-4px);font-weight:600;color:var(--cx-chg-state,var(--cx-muted));}
179
- .cx-prop-state{padding:var(--cx-size-2px) var(--cx-size-8px) var(--cx-size-2px) var(--cx-size-6px);border-radius:var(--cx-radius-sm);background:color-mix(in srgb,var(--cx-chg-state,var(--cx-text)) 10%,var(--cx-surface));}
180
- .cx-prop-badge.cx-prop-attn{padding:0 var(--cx-size-6px) 0 var(--cx-size-4px);border-radius:var(--cx-radius-sm);background:color-mix(in srgb,var(--cx-chg-state) 12%,var(--cx-surface));}
181
- :is(.cx-prop-state,.cx-prop-key,.cx-prop-badge,.cx-prop-fill).cx-tone-success{--cx-chg-state:var(--cx-tone-success);}
182
- :is(.cx-prop-state,.cx-prop-key,.cx-prop-badge,.cx-prop-fill).cx-tone-warning{--cx-chg-state:var(--cx-tone-warning);}
183
- :is(.cx-prop-state,.cx-prop-key,.cx-prop-badge,.cx-prop-fill).cx-tone-danger{--cx-chg-state:var(--cx-tone-danger);}
184
- :is(.cx-prop-state,.cx-prop-key,.cx-prop-badge,.cx-prop-fill).cx-tone-muted{--cx-chg-state:var(--cx-muted);}
178
+ :is(.cx-prop-state,.cx-prop-key,.cx-prop-badge){display:inline-flex;align-items:center;gap:var(--cx-size-4px);font-weight:600;color:var(--cx-chg-state,var(--hfx-color-text-muted,light-dark(#626770,#8f949d)));}
179
+ .cx-prop-state{padding:var(--cx-size-2px) var(--cx-size-8px) var(--cx-size-2px) var(--cx-size-6px);border-radius:var(--hfx-radius-sm,4px);background:color-mix(in srgb,var(--cx-chg-state,var(--hfx-color-text,light-dark(#16181c,#f2f3f5))) 10%,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));}
180
+ .cx-prop-badge.cx-prop-attn{padding:0 var(--cx-size-6px) 0 var(--cx-size-4px);border-radius:var(--hfx-radius-sm,4px);background:color-mix(in srgb,var(--cx-chg-state) 12%,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));}
181
+ :is(.cx-prop-state,.cx-prop-key,.cx-prop-badge,.cx-prop-fill).cx-tone-success{--cx-chg-state:var(--hfx-color-status-good-fg,light-dark(#177345,#4cc78a));}
182
+ :is(.cx-prop-state,.cx-prop-key,.cx-prop-badge,.cx-prop-fill).cx-tone-warning{--cx-chg-state:var(--hfx-color-status-warn-fg,light-dark(#8c5c05,#eeb640));}
183
+ :is(.cx-prop-state,.cx-prop-key,.cx-prop-badge,.cx-prop-fill).cx-tone-danger{--cx-chg-state:var(--hfx-color-status-bad-fg,light-dark(#b8292a,#f47171));}
184
+ :is(.cx-prop-state,.cx-prop-key,.cx-prop-badge,.cx-prop-fill).cx-tone-muted{--cx-chg-state:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
185
185
  .cx-prop-counts{display:flex;flex-wrap:wrap;gap:var(--cx-size-4px) var(--cx-size-16px);margin:0;padding:0;list-style:none;font-size:var(--cx-size-13px);}
186
186
  .cx-prop-count{display:inline-flex;align-items:center;gap:var(--cx-size-6px);}
187
- .cx-prop-key{font-weight:400;color:var(--cx-text);}
187
+ .cx-prop-key{font-weight:400;color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));}
188
188
  .cx-prop-key .cx-chg-ico{color:var(--cx-chg-state);}
189
189
  .cx-prop-number{font-weight:600;font-variant-numeric:tabular-nums;}
190
- .cx-prop-table{width:100%;border-collapse:collapse;font-size:var(--cx-size-13px);background:var(--cx-surface);border:var(--cx-size-1px) solid var(--cx-line);border-radius:var(--cx-radius);}
191
- .cx-prop-table :is(th,td){padding:var(--cx-size-6px) var(--cx-size-10px);text-align:start;vertical-align:top;border-bottom:var(--cx-size-1px) solid var(--cx-line);}
192
- .cx-prop-table thead th{font-size:var(--cx-size-12px);font-weight:600;color:var(--cx-muted);background:var(--cx-head-bg);white-space:nowrap;}
190
+ .cx-prop-table{width:100%;border-collapse:collapse;font-size:var(--cx-size-13px);background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));border:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));}
191
+ .cx-prop-table :is(th,td){padding:var(--cx-size-6px) var(--cx-size-10px);text-align:start;vertical-align:top;border-bottom:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
192
+ .cx-prop-table thead th{font-size:var(--cx-size-12px);font-weight:600;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));background:var(--hfx-color-surface-sunken,light-dark(#f7f8f9,#111317));white-space:nowrap;}
193
193
  .cx-prop-table tbody th{font-weight:600;}
194
- .cx-prop-group th{font-size:var(--cx-size-12px);font-weight:600;background:var(--cx-group-bg);}
195
- .cx-prop-groupcount{font-weight:400;color:var(--cx-muted);}
194
+ .cx-prop-group th{font-size:var(--cx-size-12px);font-weight:600;background:var(--hfx-color-row-alt,light-dark(#fafafa,#1d1f23));}
195
+ .cx-prop-groupcount{font-weight:400;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
196
196
  .cx-prop-name{margin-inline-end:var(--cx-size-6px);}
197
- .cx-prop-source{display:inline-block;padding:0 var(--cx-size-6px);font-size:var(--cx-size-11px);font-weight:600;color:var(--cx-muted);border:var(--cx-size-1px) solid var(--cx-line-strong);border-radius:var(--cx-size-999px);}
198
- .cx-prop-sub,.cx-prop-delay,.cx-prop-none{display:block;font-size:var(--cx-size-12px);font-weight:400;color:var(--cx-muted);}
197
+ .cx-prop-source{display:inline-block;padding:0 var(--cx-size-6px);font-size:var(--cx-size-11px);font-weight:600;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));border:var(--cx-size-1px) solid var(--hfx-color-border-strong,light-dark(#cdd0d5,#363a42));border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));}
198
+ .cx-prop-sub,.cx-prop-delay,.cx-prop-none{display:block;font-size:var(--cx-size-12px);font-weight:400;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
199
199
  .cx-prop-first,.cx-prop-last{white-space:nowrap;font-variant-numeric:tabular-nums;}
200
200
  .cx-prop-lanecell{width:var(--cx-size-160px);vertical-align:middle !important;}
201
- .cx-prop-lane{position:relative;height:var(--cx-size-8px);min-width:var(--cx-size-92px);background:var(--cx-hover-bg);border-radius:var(--cx-size-999px);overflow:hidden;}
202
- .cx-prop-fill{height:100%;background:color-mix(in srgb,var(--cx-chg-state,var(--cx-muted)) 70%,var(--cx-surface));border-radius:inherit;}
203
- .cx-prop-fill.cx-prop-open{background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--cx-chg-state) 55%,var(--cx-surface)) 0 var(--cx-size-4px),transparent var(--cx-size-4px) var(--cx-size-8px));}
201
+ .cx-prop-lane{position:relative;height:var(--cx-size-8px);min-width:var(--cx-size-92px);background:var(--hfx-color-hover,light-dark(#f5f5f5,#232529));border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));overflow:hidden;}
202
+ .cx-prop-fill{height:100%;background:color-mix(in srgb,var(--cx-chg-state,var(--hfx-color-text-muted,light-dark(#626770,#8f949d))) 70%,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));border-radius:inherit;}
203
+ .cx-prop-fill.cx-prop-open{background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--cx-chg-state) 55%,var(--hfx-color-surface,light-dark(#ffffff,#16181c))) 0 var(--cx-size-4px),transparent var(--cx-size-4px) var(--cx-size-8px));}
204
204
  @container (max-width:560px){
205
205
  .cx-prop-table thead{display:none;}
206
206
  .cx-prop-table,.cx-prop-table tbody{display:block;}
207
- .cx-prop-table tr{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name state" "first last" "lane lane";column-gap:var(--cx-size-10px);padding:var(--cx-size-8px) var(--cx-size-10px);border-bottom:var(--cx-size-1px) solid var(--cx-line);}
208
- .cx-prop-table tr.cx-prop-group{display:block;padding:var(--cx-size-6px) var(--cx-size-10px);background:var(--cx-group-bg);}
207
+ .cx-prop-table tr{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name state" "first last" "lane lane";column-gap:var(--cx-size-10px);padding:var(--cx-size-8px) var(--cx-size-10px);border-bottom:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
208
+ .cx-prop-table tr.cx-prop-group{display:block;padding:var(--cx-size-6px) var(--cx-size-10px);background:var(--hfx-color-row-alt,light-dark(#fafafa,#1d1f23));}
209
209
  .cx-prop-table :is(th,td){display:block;padding:0;border:0;}
210
210
  .cx-prop-row > th{grid-area:name;}
211
211
  .cx-prop-statecell{grid-area:state;text-align:end;}
212
212
  .cx-prop-first{grid-area:first;margin-top:var(--cx-size-4px);}
213
- .cx-prop-last{grid-area:last;margin-top:var(--cx-size-4px);text-align:end;color:var(--cx-muted);}
213
+ .cx-prop-last{grid-area:last;margin-top:var(--cx-size-4px);text-align:end;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
214
214
  .cx-prop-lanecell{grid-area:lane;width:auto;margin-top:var(--cx-size-6px);}
215
215
  }
216
216
  @media print{
@@ -220,11 +220,11 @@ color:var(--cx-chg-flag,var(--cx-text));background:color-mix(in srgb,var(--cx-ch
220
220
  .cx-chg-summary{margin-inline-start:0;}
221
221
  .cx-diff .cx-diff-print{display:block;}
222
222
  .cx-diff,.cx-changes,.cx-prop{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
223
- .cx-diff-printtable{width:100%;border-collapse:collapse;font-family:var(--cx-font-mono);font-size:var(--cx-size-11px);}
223
+ .cx-diff-printtable{width:100%;border-collapse:collapse;font-family:var(--hfx-font-mono,"Cascadia Mono","Cascadia Code",Consolas,"SFMono-Regular",Menlo,monospace);font-size:var(--cx-size-11px);}
224
224
  .cx-diff-printtable td{padding:0 var(--cx-size-4px);vertical-align:top;}
225
- .cx-diff-printtable :is(.cx-diff-num,.cx-diff-sign){width:1%;white-space:nowrap;text-align:end;color:var(--cx-muted);}
225
+ .cx-diff-printtable :is(.cx-diff-num,.cx-diff-sign){width:1%;white-space:nowrap;text-align:end;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
226
226
  .cx-diff-printtable .cx-diff-code{white-space:pre-wrap;word-break:break-all;}
227
- .cx-diff-printtable tr:is(.cx-diff-del,.cx-diff-add){background:color-mix(in srgb,var(--cx-chg-diff) 12%,#fff);}
227
+ .cx-diff-printtable tr:is(.cx-diff-del,.cx-diff-add){background:color-mix(in srgb,var(--cx-chg-diff) 12%,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));}
228
228
  .cx-chg-row{grid-template-columns:var(--cx-size-112px) minmax(0,1fr) auto;grid-template-areas:"badge main meta";}
229
229
  .cx-chg-facts{table-layout:fixed;max-width:none;}
230
230
  .cx-chg-facts thead th:first-child{width:28%;}
@@ -1,4 +1,4 @@
1
- (function(global){"use strict";const installed=new WeakSet();const part={version:"2db8e138da4b5658",install(context){if(installed.has(context.CHANGES_IMPL))return;const{CHANGES_IMPL,h,setText,fill,plural,numberFormat,gridFreeze,toneOf,applyTone,svgIcon,PROTOCOL}=context;const CHANGE_LABELS={changeInline:"Inline",changeSplit:"Side by side",changeLayout:"Layout",changeCopyDiff:"Copy diff",changeCopied:"Copied",changeCopyFailed:"Could not copy",changeNext:"Next change",changePrevious:"Previous change",changePosition:"Change {index} of {count}",changeShowLines:"[one]Show {count} more line[other]Show {count} more lines",changeHiddenLines:"[one]{count} unchanged line not included[other]{count} unchanged lines not included",changeLineCounts:"Lines added: {added}, removed: {removed}",changeLineAdded:"Added line {line}",changeLineRemoved:"Removed line {line}",changeLineContext:"Line {line}",changeBefore:"Before",changeAfter:"After",changeBinary:"Binary file: compared by size and hash, not by lines.",changeUnavailable:"The content of this file is not available.",changeIdentical:"The text did not change.",changeTruncated:"Some changes are not shown: the comparison was too large.",changeTooLarge:"These texts are too long to compare here.",changeDiffOf:"Changes in {name}",changeAdded:"Added",changeRemoved:"Removed",changeModified:"Modified",changeRenamed:"Renamed",changeFlaggedOnly:"Flagged only",changeFlaggedCount:"{count} flagged",changeNoItems:"No changes to show.",changeSize:"Size",changeHash:"Hash",changeTime:"Time",changeCopyHash:"Copy the full hash",changeDetails:"Details of {name}",changeFileCount:"[one]{count} file[other]{count} files",changeFrom:"from {path}",changeShowMore:"Show more",changeFlags:"Flags",changeFacts:"Details",changeRoot:"Top level",changeShown:"{shown} of {total} shown",changeFilter:"Show changes",changeActions:"Actions for {name}",changeConverged:"Converged",changePropagating:"Propagating",changeFault:"Fault",changeUnknown:"Unknown",changeReplica:"Replica",changeState:"State",changeFirstSeen:"First seen",changeLastSeen:"Last seen",changeTimeline:"Delay",changeNotSeen:"Not seen yet",changeDelay:"+{duration}",changeSource:"Source",changeProgress:"{converged} of {total} have the change",changeSeconds:"{count} s",changeMinutes:"{count} min",changeHours:"{count} h",changeDays:"{count} d",changeUtcTime:"{time} UTC",changeExportCsv:"Export CSV",changeExportJson:"Export JSON",changeReason:"Reason",changeReasonHint:"{action}: say why. The reason is kept with the action.",changeReasonRequired:"Enter a reason first.",changeCancel:"Cancel",changeUnclaimed:"This page cannot carry out “{action}” itself. Copy the request to pass it on.",changeCopyRequest:"Copy request",changeFiltered:"Filtered: {filters}",changePrintLimit:"[one]{count} more line is not printed.[other]{count} more lines are not printed."};function changeLabels(...sources){const labels={...CHANGE_LABELS};for(const source of sources){if(source==null)continue;if(typeof source!=="object"||Array.isArray(source))changeFail("labels must be an object of strings");for(const[name,text]of Object.entries(source)){if(!Object.hasOwn(labels,name)){if(/^change[A-Z]/.test(name)) changeFail("there is no change label '" + name + "'"); continue; }
1
+ (function(global){"use strict";const installed=new WeakSet();const part={version:"2810fb06a78b85e3",install(context){if(installed.has(context.CHANGES_IMPL))return;const{CHANGES_IMPL,h,setText,fill,plural,numberFormat,gridFreeze,toneOf,applyTone,svgIcon,PROTOCOL}=context;const CHANGE_LABELS={changeInline:"Inline",changeSplit:"Side by side",changeLayout:"Layout",changeCopyDiff:"Copy diff",changeCopied:"Copied",changeCopyFailed:"Could not copy",changeNext:"Next change",changePrevious:"Previous change",changePosition:"Change {index} of {count}",changeShowLines:"[one]Show {count} more line[other]Show {count} more lines",changeHiddenLines:"[one]{count} unchanged line not included[other]{count} unchanged lines not included",changeLineCounts:"Lines added: {added}, removed: {removed}",changeLineAdded:"Added line {line}",changeLineRemoved:"Removed line {line}",changeLineContext:"Line {line}",changeBefore:"Before",changeAfter:"After",changeBinary:"Binary file: compared by size and hash, not by lines.",changeUnavailable:"The content of this file is not available.",changeIdentical:"The text did not change.",changeTruncated:"Some changes are not shown: the comparison was too large.",changeTooLarge:"These texts are too long to compare here.",changeDiffOf:"Changes in {name}",changeAdded:"Added",changeRemoved:"Removed",changeModified:"Modified",changeRenamed:"Renamed",changeFlaggedOnly:"Flagged only",changeFlaggedCount:"{count} flagged",changeNoItems:"No changes to show.",changeSize:"Size",changeHash:"Hash",changeTime:"Time",changeCopyHash:"Copy the full hash",changeDetails:"Details of {name}",changeFileCount:"[one]{count} file[other]{count} files",changeFrom:"from {path}",changeShowMore:"Show more",changeFlags:"Flags",changeFacts:"Details",changeRoot:"Top level",changeShown:"{shown} of {total} shown",changeFilter:"Show changes",changeActions:"Actions for {name}",changeConverged:"Converged",changePropagating:"Propagating",changeFault:"Fault",changeUnknown:"Unknown",changeReplica:"Replica",changeState:"State",changeFirstSeen:"First seen",changeLastSeen:"Last seen",changeTimeline:"Delay",changeNotSeen:"Not seen yet",changeDelay:"+{duration}",changeSource:"Source",changeProgress:"{converged} of {total} have the change",changeSeconds:"{count} s",changeMinutes:"{count} min",changeHours:"{count} h",changeDays:"{count} d",changeUtcTime:"{time} UTC",changeExportCsv:"Export CSV",changeExportJson:"Export JSON",changeReason:"Reason",changeReasonHint:"{action}: say why. The reason is kept with the action.",changeReasonRequired:"Enter a reason first.",changeCancel:"Cancel",changeUnclaimed:"This page cannot carry out “{action}” itself. Copy the request to pass it on.",changeCopyRequest:"Copy request",changeFiltered:"Filtered: {filters}",changePrintLimit:"[one]{count} more line is not printed.[other]{count} more lines are not printed."};function changeLabels(...sources){const labels={...CHANGE_LABELS};for(const source of sources){if(source==null)continue;if(typeof source!=="object"||Array.isArray(source))changeFail("labels must be an object of strings");for(const[name,text]of Object.entries(source)){if(!Object.hasOwn(labels,name)){if(/^change[A-Z]/.test(name)) changeFail("there is no change label '" + name + "'"); continue; }
2
2
  if(typeof text!=="string"||!/\S/.test(text)) changeFail("label '" + name + "' must be a string with visible text");
3
3
  labels[name]=text}}
4
4
  return Object.freeze(labels)}
@@ -96,8 +96,7 @@ const DIFF_ROW=20,DIFF_OVERSCAN=30,DIFF_SPLIT_WIDTH=900;let changesPrinting=fals
96
96
  class DiffView{constructor(host,options,doc){this.host=host;this.options=options;this.lifetime=new AbortController();this.doc=doc||diffDocument(options.view);this.labels=changeLabels(options.baseLabels,this.doc.labels,options.labels);this.lang=options.lang||host.closest("[lang]")?.getAttribute("lang")||document.documentElement.lang||"en";this.format=numberFormat(this.lang);this.mounted=new Map();this.pool=[];this.current=-1;this.chosen=this.doc.layout==="auto"?null:this.doc.layout;this.prepare();this.build()}
97
97
  emit(name,detail,callback){const event=new CustomEvent("canopyx:"+name,{detail,bubbles:true});this.host.dispatchEvent(event);if(typeof this.options[callback]==="function"){try{this.options[callback](detail,event)}catch(error){this.host.dispatchEvent(new CustomEvent("canopyx:error",{detail:{error,hook:callback},bubbles:true}))}}}
98
98
  prepare(){const doc=this.doc;this.tooLarge=doc.content==="text"&&!doc.hunks.length&&(doc.left.length>DIFF_CLIENT_LINES||doc.right.length>DIFF_CLIENT_LINES);this.hunks=doc.content!=="text"||this.tooLarge?[]:doc.hunks.length?doc.hunks:diffHunks(doc.left,doc.right,doc.context);const built=diffRows(doc,this.hunks);this.rows=built.rows;this.added=built.added;this.removed=built.removed}
99
- build(){const doc=this.doc,labels=this.labels,signal=this.lifetime.signal;if(!this.host.closest("[data-cx-theme]")){this.host.setAttribute("data-cx-theme","auto");this.addedTheme=true}
100
- const root=this.root=h("div","cx-diff");const head=h("div","cx-diff-head"),title=this.titleBox=h("div","cx-diff-title"),tools=this.tools=h("div","cx-diff-tools");head.append(title,tools);this.notes=h("div","cx-diff-notes");this.state=h("div","cx-diff-state");this.state.hidden=true;const scroll=this.scroll=h("div","cx-diff-scroll");scroll.tabIndex=0;scroll.setAttribute("role","table");this.columns=h("div","cx-diff-columns");this.columns.setAttribute("role","row");this.columns.setAttribute("aria-rowindex","1");this.canvas=h("div","cx-diff-canvas");this.canvas.setAttribute("role","rowgroup");scroll.append(this.columns,this.canvas);this.live=h("div","cx-sr-only");this.live.setAttribute("aria-live","polite");this.print=h("div","cx-diff-print");const frame=this.frameBox=h("div","cx-diff-frame");this.edgeStart=h("div","cx-diff-edge cx-diff-edge-start");this.edgeEnd=h("div","cx-diff-edge cx-diff-edge-end");this.edgeStart.hidden=this.edgeEnd.hidden=true;frame.append(scroll,this.edgeStart,this.edgeEnd);root.append(head,this.notes,this.state,frame,this.live,this.print);this.host.appendChild(root);this.probe=h("span","cx-diff-probe");setText(this.probe,"0000000000");root.appendChild(this.probe);this.buildTools();changeTips(root,signal);scroll.addEventListener("scroll",()=>{this.schedule();this.edges()},{passive:true,signal});scroll.addEventListener("keydown",event=>this.onKey(event),{signal});scroll.addEventListener("click",event=>this.onClick(event),{signal});global.addEventListener("beforeprint",()=>this.renderPrint(),{signal});this.resize=new ResizeObserver(()=>{if(!this.destroyed)this.layout()});this.resize.observe(root);this.refresh();if(changesInPrint())this.renderPrint()}
99
+ build(){const doc=this.doc,labels=this.labels,signal=this.lifetime.signal;const root=this.root=h("div","cx-diff");const head=h("div","cx-diff-head"),title=this.titleBox=h("div","cx-diff-title"),tools=this.tools=h("div","cx-diff-tools");head.append(title,tools);this.notes=h("div","cx-diff-notes");this.state=h("div","cx-diff-state");this.state.hidden=true;const scroll=this.scroll=h("div","cx-diff-scroll");scroll.tabIndex=0;scroll.setAttribute("role","table");this.columns=h("div","cx-diff-columns");this.columns.setAttribute("role","row");this.columns.setAttribute("aria-rowindex","1");this.canvas=h("div","cx-diff-canvas");this.canvas.setAttribute("role","rowgroup");scroll.append(this.columns,this.canvas);this.live=h("div","cx-sr-only");this.live.setAttribute("aria-live","polite");this.print=h("div","cx-diff-print");const frame=this.frameBox=h("div","cx-diff-frame");this.edgeStart=h("div","cx-diff-edge cx-diff-edge-start");this.edgeEnd=h("div","cx-diff-edge cx-diff-edge-end");this.edgeStart.hidden=this.edgeEnd.hidden=true;frame.append(scroll,this.edgeStart,this.edgeEnd);root.append(head,this.notes,this.state,frame,this.live,this.print);this.host.appendChild(root);this.probe=h("span","cx-diff-probe");setText(this.probe,"0000000000");root.appendChild(this.probe);this.buildTools();changeTips(root,signal);scroll.addEventListener("scroll",()=>{this.schedule();this.edges()},{passive:true,signal});scroll.addEventListener("keydown",event=>this.onKey(event),{signal});scroll.addEventListener("click",event=>this.onClick(event),{signal});global.addEventListener("beforeprint",()=>this.renderPrint(),{signal});this.resize=new ResizeObserver(()=>{if(!this.destroyed)this.layout()});this.resize.observe(root);this.refresh();if(changesInPrint())this.renderPrint()}
101
100
  buildTools(){const labels=this.labels,tools=this.tools,signal=this.lifetime.signal;const group=this.layoutGroup=h("div","cx-diff-seg");group.setAttribute("role","radiogroup");group.setAttribute("aria-label",labels.changeLayout);this.layoutButtons=["inline","split"].map(mode=>{const button=h("button","cx-diff-segbtn");button.type="button";button.setAttribute("role","radio");button._mode=mode;setText(button,mode==="inline"?labels.changeInline:labels.changeSplit);button.addEventListener("click",()=>this.setLayout(mode),{signal});button.addEventListener("keydown",event=>{if(!["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"].includes(event.key))return;event.preventDefault();const next=mode==="inline"?"split":"inline";this.setLayout(next);this.layoutButtons.find(item=>item._mode===next).focus()},{signal});group.appendChild(button);return button});const button=(label,icon,action,text)=>{const element=h("button","cx-diff-btn");element.type="button";element.appendChild(changeIcon(icon));if(text){const name=h("span");setText(name,label);element.appendChild(name)}else{element.setAttribute("aria-label",label);element.setAttribute("data-cx-tip",label)}
102
101
  element.addEventListener("click",action,{signal});return element};this.prevButton=button(labels.changePrevious,"up",()=>this.move(-1));this.nextButton=button(labels.changeNext,"down",()=>this.move(1));this.copyButton=button(labels.changeCopyDiff,"copy",()=>this.copy(),true);tools.append(group,this.prevButton,this.nextButton,this.copyButton)}
103
102
  refresh(){const doc=this.doc,labels=this.labels,title=this.titleBox;title.replaceChildren();const name=h("span","cx-diff-path");setText(name,doc.path?(doc.previousPath&&doc.previousPath!==doc.path?doc.previousPath+" → "+doc.path:doc.path):doc.label);title.appendChild(name);if(doc.content==="text"&&!this.tooLarge){const stats=h("span","cx-diff-stats"),plus=h("span","cx-diff-plus"),minus=h("span","cx-diff-minus");setText(plus,"+"+this.format.format(this.added));setText(minus,"−"+this.format.format(this.removed));const spoken=h("span","cx-sr-only");setText(spoken,fill(labels.changeLineCounts,{added:this.format.format(this.added),removed:this.format.format(this.removed)}));plus.setAttribute("aria-hidden","true");minus.setAttribute("aria-hidden","true");stats.append(plus,minus,spoken);title.appendChild(stats)}
@@ -132,11 +131,10 @@ else{tr.className=row.kind==="-"?"cx-diff-del":row.kind==="+"?"cx-diff-add":"";f
132
131
  const code=this.codeCell(row),td=h("td","cx-diff-code");td.append(...code.childNodes);tr.appendChild(td)}
133
132
  body.appendChild(tr)}
134
133
  if(written>5000){const rest=this.rows.slice(5000).reduce((sum,row)=>sum +(row.t==="gap"?row.count:1),0);if(rest>0){const tr=h("tr"),td=h("td","cx-diff-gap");td.colSpan=4;setText(td,"⋯ "+changeCount(this.labels.changePrintLimit,rest,this.lang,{count:this.format.format(rest)}));tr.appendChild(td);body.appendChild(tr)}}
135
- table.appendChild(body);this.print.replaceChildren(table)},getHunks(){return this.hunks.map(hunk=>({before:hunk.before,after:hunk.after,lines:hunk.lines.map(line=>(line.kind==="="?" ":line.kind)+ line.text)}))},update(view){this.doc=diffDocument(view);this.labels=changeLabels(this.options.baseLabels,this.doc.labels,this.options.labels);this.source=view;this.current=-1;this.prepare();this.refresh()}});function diffCreate(host,options,doc){const view=new DiffView(host,options,doc);const impl={ready:Promise.resolve().then(()=>{if(view.destroyed)return impl;host.setAttribute("data-cx-ready","");view.emit("diffReady",{diff:view.doc.id},"onReady");return impl}),document:()=>view.source||options.view,getLayout:()=>view.shown,setLayout:mode=>view.setLayout(mode),next:()=>view.move(1),previous:()=>view.move(-1),expandAll:()=>view.expandAll(),copy:()=>view.copy(),getHunks:()=>view.getHunks(),update:next=>view.update(next),destroy:()=>{if(view.destroyed)return;view.destroyed=true;view.lifetime.abort();view.resize.disconnect();cancelAnimationFrame(view.frame);clearTimeout(view.copyTimer);view.root.remove();host.removeAttribute("data-cx-ready");if(view.addedTheme)host.removeAttribute("data-cx-theme")}};return impl}
134
+ table.appendChild(body);this.print.replaceChildren(table)},getHunks(){return this.hunks.map(hunk=>({before:hunk.before,after:hunk.after,lines:hunk.lines.map(line=>(line.kind==="="?" ":line.kind)+ line.text)}))},update(view){this.doc=diffDocument(view);this.labels=changeLabels(this.options.baseLabels,this.doc.labels,this.options.labels);this.source=view;this.current=-1;this.prepare();this.refresh()}});function diffCreate(host,options,doc){const view=new DiffView(host,options,doc);const impl={ready:Promise.resolve().then(()=>{if(view.destroyed)return impl;host.setAttribute("data-cx-ready","");view.emit("diffReady",{diff:view.doc.id},"onReady");return impl}),document:()=>view.source||options.view,getLayout:()=>view.shown,setLayout:mode=>view.setLayout(mode),next:()=>view.move(1),previous:()=>view.move(-1),expandAll:()=>view.expandAll(),copy:()=>view.copy(),getHunks:()=>view.getHunks(),update:next=>view.update(next),destroy:()=>{if(view.destroyed)return;view.destroyed=true;view.lifetime.abort();view.resize.disconnect();cancelAnimationFrame(view.frame);clearTimeout(view.copyTimer);view.root.remove();host.removeAttribute("data-cx-ready")}};return impl}
136
135
  class ChangeListView{constructor(host,options){this.host=host;this.options=options;this.lifetime=new AbortController();this.doc=changesDocument(options.view);this.labels=changeLabels(this.doc.labels,options.labels);this.lang=host.closest("[lang]")?.getAttribute("lang")||document.documentElement.lang||"en";this.format=numberFormat(this.lang);this.kinds=new Set();this.flaggedOnly=this.doc.flaggedOnly;this.limit=this.doc.pageSize;this.diffs=new Map();this.open=new Set(this.doc.expandFlagged?this.doc.items.filter(item=>item.flags.length).map(item=>item.id):[]);if(options.state)this.applyState(options.state,false);this.build()}
137
136
  emit(name,detail,callback){const event=new CustomEvent("canopyx:"+name,{detail,bubbles:true});this.host.dispatchEvent(event);if(typeof this.options[callback]==="function"){try{this.options[callback](detail,event)}catch(error){this.host.dispatchEvent(new CustomEvent("canopyx:error",{detail:{error,hook:callback},bubbles:true}))}}}
138
- build(){const signal=this.lifetime.signal;if(!this.host.closest("[data-cx-theme]")){this.host.setAttribute("data-cx-theme","auto");this.addedTheme=true}
139
- const root=this.root=h("div","cx-changes");this.bar=h("div","cx-chg-bar");this.list=h("ul","cx-chg-list");this.list.setAttribute("aria-label",this.doc.label);this.empty=h("div","cx-chg-empty");this.empty.hidden=true;this.more=h("button","cx-chg-more");this.more.type="button";this.more.hidden=true;this.live=h("div","cx-sr-only");this.live.setAttribute("aria-live","polite");this.barPanel=h("div","cx-chg-barpanel");root.append(this.bar,this.barPanel,this.list,this.empty,this.more,this.live);this.host.appendChild(root);root.addEventListener("click",event=>this.onClick(event),{signal});root.addEventListener("keydown",event=>this.onKey(event),{signal});changeTips(root,signal);root.addEventListener("change",event=>{if(event.target===this.flagSwitch){this.applyState({flaggedOnly:event.target.checked});this.flagSwitch?.focus()}},{signal});this.more.addEventListener("click",()=>{const shown=new Set([...this.list.querySelectorAll("[data-cx-item]")].map(item=>item.getAttribute("data-cx-item")));this.limit +=this.doc.pageSize;this.render();if(this.more.hidden)[...this.list.querySelectorAll("[data-cx-item]")].find(item=>!shown.has(item.getAttribute("data-cx-item")))?.querySelector(".cx-chg-toggle")?.focus()},{signal});this.printing=changesInPrint();global.addEventListener("beforeprint",()=>{this.printing=true;this.render()},{signal});global.addEventListener("afterprint",()=>{this.printing=false;this.render()},{signal});this.render()}
137
+ build(){const signal=this.lifetime.signal;const root=this.root=h("div","cx-changes");this.bar=h("div","cx-chg-bar");this.list=h("ul","cx-chg-list");this.list.setAttribute("aria-label",this.doc.label);this.empty=h("div","cx-chg-empty");this.empty.hidden=true;this.more=h("button","cx-chg-more");this.more.type="button";this.more.hidden=true;this.live=h("div","cx-sr-only");this.live.setAttribute("aria-live","polite");this.barPanel=h("div","cx-chg-barpanel");root.append(this.bar,this.barPanel,this.list,this.empty,this.more,this.live);this.host.appendChild(root);root.addEventListener("click",event=>this.onClick(event),{signal});root.addEventListener("keydown",event=>this.onKey(event),{signal});changeTips(root,signal);root.addEventListener("change",event=>{if(event.target===this.flagSwitch){this.applyState({flaggedOnly:event.target.checked});this.flagSwitch?.focus()}},{signal});this.more.addEventListener("click",()=>{const shown=new Set([...this.list.querySelectorAll("[data-cx-item]")].map(item=>item.getAttribute("data-cx-item")));this.limit +=this.doc.pageSize;this.render();if(this.more.hidden)[...this.list.querySelectorAll("[data-cx-item]")].find(item=>!shown.has(item.getAttribute("data-cx-item")))?.querySelector(".cx-chg-toggle")?.focus()},{signal});this.printing=changesInPrint();global.addEventListener("beforeprint",()=>{this.printing=true;this.render()},{signal});global.addEventListener("afterprint",()=>{this.printing=false;this.render()},{signal});this.render()}
140
138
  visible(){return this.doc.items.filter(item=>(!this.kinds.size||this.kinds.has(item.kind))&&(!this.flaggedOnly||item.flags.length))}
141
139
  folders(items){if(!this.doc.groupByFolder)return[["","",items]];const groups=new Map();for(const item of items){const folder=changePath(item.path)[0],key=folder.replace(/\\/g, "/");
142
140
  if(!groups.has(key))groups.set(key,[key,folder,[]]);groups.get(key)[2].push(item)}
@@ -175,7 +173,7 @@ return box},onClick(event){const target=event.target.closest?.("button, a.cx-chg
175
173
  if(target.classList.contains("cx-chg-kind")){const kinds=new Set(this.kinds);if(kinds.has(target._kind))kinds.delete(target._kind);else kinds.add(target._kind);this.applyState({kinds:[...kinds]});[...this.bar.querySelectorAll(".cx-chg-kind")].find(button=>button._kind===target._kind)?.focus();return}
176
174
  if(target.classList.contains("cx-chg-toggle")){const id=target.closest("[data-cx-item]").getAttribute("data-cx-item");this.toggle(id);this.focusItem(id);return}
177
175
  if(target.classList.contains("cx-chg-hashbtn")){this.copyText(target._copy);return}
178
- if(target._action)this.act(target._action,target._item,target)},async copyText(text){const ok=await changeCopy(text);if(!this.destroyed)setText(this.live,ok?this.labels.changeCopied:this.labels.changeCopyFailed);return ok},onKey(event){if(!event.target.classList?.contains("cx-chg-toggle")||event.key!=="ArrowDown"&&event.key!=="ArrowUp"&&event.key!=="Home"&&event.key!=="End")return;const toggles=[...this.list.querySelectorAll(".cx-chg-toggle")],at=toggles.indexOf(event.target);const next=event.key==="Home"?0:event.key==="End"?toggles.length-1:at +(event.key==="ArrowDown"?1:-1);if(next<0||next>=toggles.length)return;event.preventDefault();toggles[next].focus()}});function changeListCreate(host,options){const view=new ChangeListView(host,options);const impl={ready:Promise.resolve().then(()=>{if(view.destroyed)return impl;host.setAttribute("data-cx-ready","");view.emit("changesReady",{list:view.doc.id},"onReady");return impl}),document:()=>view.source||options.view,getState:()=>view.getState(),setState:state=>view.applyState(state),toggle:(id,open)=>view.toggle(id,open),focusItem:id=>view.focusItem(id),update:next=>view.update(next),destroy:()=>{if(view.destroyed)return;view.destroyed=true;view.lifetime.abort();view.panelLife?.abort();for(const diff of view.diffs.values())diff.destroy();view.root.remove();host.removeAttribute("data-cx-ready");if(view.addedTheme)host.removeAttribute("data-cx-theme")}};return impl}
176
+ if(target._action)this.act(target._action,target._item,target)},async copyText(text){const ok=await changeCopy(text);if(!this.destroyed)setText(this.live,ok?this.labels.changeCopied:this.labels.changeCopyFailed);return ok},onKey(event){if(!event.target.classList?.contains("cx-chg-toggle")||event.key!=="ArrowDown"&&event.key!=="ArrowUp"&&event.key!=="Home"&&event.key!=="End")return;const toggles=[...this.list.querySelectorAll(".cx-chg-toggle")],at=toggles.indexOf(event.target);const next=event.key==="Home"?0:event.key==="End"?toggles.length-1:at +(event.key==="ArrowDown"?1:-1);if(next<0||next>=toggles.length)return;event.preventDefault();toggles[next].focus()}});function changeListCreate(host,options){const view=new ChangeListView(host,options);const impl={ready:Promise.resolve().then(()=>{if(view.destroyed)return impl;host.setAttribute("data-cx-ready","");view.emit("changesReady",{list:view.doc.id},"onReady");return impl}),document:()=>view.source||options.view,getState:()=>view.getState(),setState:state=>view.applyState(state),toggle:(id,open)=>view.toggle(id,open),focusItem:id=>view.focusItem(id),update:next=>view.update(next),destroy:()=>{if(view.destroyed)return;view.destroyed=true;view.lifetime.abort();view.panelLife?.abort();for(const diff of view.diffs.values())diff.destroy();view.root.remove();host.removeAttribute("data-cx-ready")}};return impl}
179
177
  const CHANGE_LINK=/^(?:#|\/(?!\/)|\.{1,2}\/|https?:\/\/|mailto:)/i;
180
178
  function changeHref(value){if(typeof value!=="string")return null;const href=value.trim();return CHANGE_LINK.test(href)&&!/[\\\u0000-\u001f\u007f]/.test(href) ? href : null;
181
179
  }
@@ -202,8 +200,7 @@ const id=(this.host.id||"cx-changes")+ "-reason-"+this.uid(),field=h("textarea",
202
200
  this.send(pending.action,pending.item,reason)};confirm.addEventListener("click",submit,{signal});field.addEventListener("input",()=>{pending.text=field.value},{signal});field.addEventListener("keydown",event=>{if(event.key==="Escape"){event.preventDefault();event.stopPropagation();cancel.click()}
203
201
  else if(event.key==="Enter"&&(event.ctrlKey||event.metaKey)){event.preventDefault();submit()}},{signal});const buttons=h("div","cx-chg-askbtns");buttons.append(confirm,cancel);box.append(label,field,hint,error,buttons);return box},focusPanel(){const target=this.root.querySelector(".cx-chg-panel :is(textarea, button)");if(target)target.focus()},focusAction(action,item){const scope=item?this.list.querySelector("[data-cx-item=\""+CSS.escape(item.id)+ "\"] > .cx-chg-row"):this.bar;scope?.querySelector("[data-cx-action=\""+CSS.escape(action.id)+ "\"]")?.focus()},exportItems(format){const items=this.folders(this.visible()).flatMap(group=>group[2]),name=(this.doc.id.replace(/[^\w.-]+/g, "-") || "changes") + "." + format;
204
202
  const text=format==="csv"?""+changeCsv(items)
205
- :JSON.stringify({list:this.doc.id,label:this.doc.label,exported:new Date().toISOString(),filters:{kinds:[...this.kinds],flaggedOnly:this.flaggedOnly},items:items.map(changeExportItem)},null,2);const saved=changeDownload(name,format==="csv"?"text/csv;charset=utf-8":"application/json",text);this.emit("changeExport",{list:this.doc.id,format,count:items.length,saved},"onExport");return saved}});const PROPAGATION_RANK={fault:3,propagating:2,unknown:1,converged:0};class PropagationView{constructor(host,options){this.host=host;this.options=options;this.lifetime=new AbortController();this.doc=propagationDocument(options.view);this.labels=changeLabels(this.doc.labels,options.labels);this.lang=host.closest("[lang]")?.getAttribute("lang")||document.documentElement.lang||"en";this.format=numberFormat(this.lang);if(!host.closest("[data-cx-theme]")){host.setAttribute("data-cx-theme","auto");this.addedTheme=true}
206
- this.root=h("div","cx-prop");host.appendChild(this.root);this.render()}
203
+ :JSON.stringify({list:this.doc.id,label:this.doc.label,exported:new Date().toISOString(),filters:{kinds:[...this.kinds],flaggedOnly:this.flaggedOnly},items:items.map(changeExportItem)},null,2);const saved=changeDownload(name,format==="csv"?"text/csv;charset=utf-8":"application/json",text);this.emit("changeExport",{list:this.doc.id,format,count:items.length,saved},"onExport");return saved}});const PROPAGATION_RANK={fault:3,propagating:2,unknown:1,converged:0};class PropagationView{constructor(host,options){this.host=host;this.options=options;this.lifetime=new AbortController();this.doc=propagationDocument(options.view);this.labels=changeLabels(this.doc.labels,options.labels);this.lang=host.closest("[lang]")?.getAttribute("lang")||document.documentElement.lang||"en";this.format=numberFormat(this.lang);this.root=h("div","cx-prop");host.appendChild(this.root);this.render()}
207
204
  emit(name,detail,callback){const event=new CustomEvent("canopyx:"+name,{detail,bubbles:true});this.host.dispatchEvent(event);if(typeof this.options[callback]==="function"){try{this.options[callback](detail,event)}catch(error){this.host.dispatchEvent(new CustomEvent("canopyx:error",{detail:{error,hook:callback},bubbles:true}))}}}
208
205
  stateText(state){return this.labels["change"+state[0].toUpperCase()+ state.slice(1)]}
209
206
  badge(state,className){const badge=h("span"),[icon,tone]=PROPAGATION_LOOK[state];applyTone(badge,className +(state==="fault"||state==="propagating"?" cx-prop-attn":""),toneOf(tone));const text=h("span");setText(text,this.stateText(state));badge.append(changeIcon(icon),text);return badge}
@@ -220,5 +217,5 @@ let delay=null;if(witness.firstSeen!==null){const time=h("span");setText(time,ch
220
217
  setText(last,witness.lastSeen!==null?changeTimeText(witness.lastSeen,this.doc.local,labels):"");const track=h("div","cx-prop-lane"),fillBar=h("div","cx-prop-fill");track.setAttribute("aria-hidden","true");const reached=witness.firstSeen!==null&&span?Math.min(1,Math.max(0,(witness.firstSeen-start)/ span)) : witness.state === "unknown" || !span ? 0 : 1;
221
218
  fillBar.style.width=(reached*100).toFixed(1)+ "%";applyTone(fillBar,"cx-prop-fill" +(witness.firstSeen===null&&witness.state!=="unknown"?" cx-prop-open":""),toneOf(PROPAGATION_LOOK[witness.state][1]));track.appendChild(fillBar);if(delay)track.title=delay;lane.appendChild(track);tr.append(name,state,first,last,lane);return tr}
222
219
  update(view){this.doc=propagationDocument(view);this.labels=changeLabels(this.doc.labels,this.options.labels);this.source=view;this.render()}}
223
- function propagationCreate(host,options){const view=new PropagationView(host,options);const impl={ready:Promise.resolve().then(()=>{if(view.destroyed)return impl;host.setAttribute("data-cx-ready","");view.emit("propagationReady",{propagation:view.doc.id},"onReady");return impl}),document:()=>view.source||options.view,update:next=>view.update(next),destroy:()=>{if(view.destroyed)return;view.destroyed=true;view.lifetime.abort();view.root.remove();host.removeAttribute("data-cx-ready");if(view.addedTheme)host.removeAttribute("data-cx-theme")}};return impl}
220
+ function propagationCreate(host,options){const view=new PropagationView(host,options);const impl={ready:Promise.resolve().then(()=>{if(view.destroyed)return impl;host.setAttribute("data-cx-ready","");view.emit("propagationReady",{propagation:view.doc.id},"onReady");return impl}),document:()=>view.source||options.view,update:next=>view.update(next),destroy:()=>{if(view.destroyed)return;view.destroyed=true;view.lifetime.abort();view.root.remove();host.removeAttribute("data-cx-ready")}};return impl}
224
221
  Object.assign(CHANGES_IMPL,{diff:diffCreate,changes:changeListCreate,propagation:propagationCreate});installed.add(context.CHANGES_IMPL)}};(global.CanopyXParts||=[]).push(["changes",part])})(typeof window!=="undefined"?window:globalThis);