@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
@@ -2,8 +2,8 @@
2
2
  .cx-data-grid .cx-grid-pager [hidden]{display:none !important;}
3
3
  .cx-data-grid .cx-grid-pager .cx-pages{display:inline-flex;align-items:center;gap:var(--cx-size-4px);}
4
4
  .cx-data-grid .cx-grid-pager .cx-pages .cx-button{width:auto;min-width:var(--cx-size-30px);padding:0 var(--cx-size-8px);font-variant-numeric:tabular-nums;}
5
- .cx-data-grid .cx-grid-pager .cx-pages .cx-button[aria-current="page"]{border-color:var(--cx-accent);background:var(--cx-accent-soft);color:var(--cx-accent-text);font-weight:600;}
6
- .cx-data-grid .cx-grid-pager .cx-gap{min-width:var(--cx-size-16px);text-align:center;color:var(--cx-muted);}
5
+ .cx-data-grid .cx-grid-pager .cx-pages .cx-button[aria-current="page"]{border-color:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));background:var(--hfx-color-accent-subtle,light-dark(#e7f1f1,#1b3435));color:var(--hfx-color-accent-text,light-dark(#02726a,#37c9b8));font-weight:600;}
6
+ .cx-data-grid .cx-grid-pager .cx-gap{min-width:var(--cx-size-16px);text-align:center;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
7
7
  .cx-phone .cx-grid-pager .cx-pages .cx-button{min-width:var(--cx-size-44px);}
8
8
  @media (forced-colors:active){
9
9
  .cx-data-grid .cx-grid-pager .cx-pages .cx-button[aria-current="page"]{border-color:Highlight;outline:var(--cx-size-2px) solid Highlight;}
@@ -1,4 +1,4 @@
1
- (function(global){"use strict";const installed=new WeakSet();const part={version:"8f804f70b96409f2",install(context){if(installed.has(context.GRID_PAGER_IMPL))return;const{DataGrid,GRID_PAGER_IMPL,h,setText,fill,gridButton,gridOption,numberFormat,gridCountLabel}=context;const BUILD_PAGER=DataGrid.prototype.buildPager,SYNC_PAGER=DataGrid.prototype.syncPager;const PAGER_INFO=["range","sentence","none"];function pagerSettings(view){const pager=view.pager,fail=name=>{throw new Error("CanopyX: invalid pager "+name+".")};if(!pager||typeof pager!=="object"||Array.isArray(pager))fail("settings");const flag=(name,fallback)=>{if(pager[name]!==undefined&&typeof pager[name]!=="boolean")fail(name);return pager[name]===undefined?fallback:pager[name]};const numbers=pager.numbers===undefined?0:pager.numbers;if(!Number.isInteger(numbers)||numbers!==0&&(numbers<5||numbers>15))fail("numbers");if(pager.info!==undefined&&!PAGER_INFO.includes(pager.info))fail("info");let lengths=null;if(pager.lengths!==undefined){if(!Array.isArray(pager.lengths)||!pager.lengths.length||pager.lengths.length>16)fail("lengths");const seen=new Set();lengths=pager.lengths.map(entry=>{const item=entry!==null&&typeof entry==="object"?entry:{value:entry};if(item.value!=="all"&&!(Number.isInteger(item.value)&&item.value>=1&&item.value<=10000)||seen.has(item.value)||
1
+ (function(global){"use strict";const installed=new WeakSet();const part={version:"3dcab112113081dd",install(context){if(installed.has(context.GRID_PAGER_IMPL))return;const{DataGrid,GRID_PAGER_IMPL,h,setText,fill,gridButton,gridOption,numberFormat,gridCountLabel}=context;const BUILD_PAGER=DataGrid.prototype.buildPager,SYNC_PAGER=DataGrid.prototype.syncPager;const PAGER_INFO=["range","sentence","none"];function pagerSettings(view){const pager=view.pager,fail=name=>{throw new Error("CanopyX: invalid pager "+name+".")};if(!pager||typeof pager!=="object"||Array.isArray(pager))fail("settings");const flag=(name,fallback)=>{if(pager[name]!==undefined&&typeof pager[name]!=="boolean")fail(name);return pager[name]===undefined?fallback:pager[name]};const numbers=pager.numbers===undefined?0:pager.numbers;if(!Number.isInteger(numbers)||numbers!==0&&(numbers<5||numbers>15))fail("numbers");if(pager.info!==undefined&&!PAGER_INFO.includes(pager.info))fail("info");let lengths=null;if(pager.lengths!==undefined){if(!Array.isArray(pager.lengths)||!pager.lengths.length||pager.lengths.length>16)fail("lengths");const seen=new Set();lengths=pager.lengths.map(entry=>{const item=entry!==null&&typeof entry==="object"?entry:{value:entry};if(item.value!=="all"&&!(Number.isInteger(item.value)&&item.value>=1&&item.value<=10000)||seen.has(item.value)||
2
2
  item.label!==undefined&&(typeof item.label!=="string"||!item.label.trim()||item.label.length>64))fail("lengths");seen.add(item.value);return{value:item.value,label:item.label}}).filter(item=>item.value!=="all"||view.source.kind==="inline")}
3
3
  return{lengths,numbers,info:pager.info||"range",lengthMenu:flag("lengthMenu",true),pageInput:flag("pageInput",!numbers),firstLast:flag("firstLast",true)}}
4
4
  function pagerWindow(current,count,max){const range=(start,end)=>Array.from({length:Math.max(0,end-start)},(_,index)=>start+index);if(count<=max)return range(0,count);if(current<max-3)return[...range(0,max-2),null,count-1];if(current>count-max+2)return[0,null,...range(count-max+2,count)];const inner=max-4,start=current-Math.floor((inner-1)/ 2);
@@ -1,8 +1,8 @@
1
- (function(global){"use strict";const installed=new WeakSet();const part={version:"b6a65af41d9187d9",install(context){if(installed.has(context.GRID_PRESENTER_IMPL))return;const{GRID_PRESENTER_IMPL,h,setText,fill,cellValue,cellText,isCellObject,columnNumericTone,columnValueTone,gridPresenterTone,gridPresenterLink,numberFormat,toneColors,toneOf,applyTone,gridIcon,badgeElement,GRID_HISTORY_KINDS,GRID_HISTORY_IMPL,RECORD_IMPL}=context;function gridRenderPresenter(grid,column,options,record,complete){return(row,element)=>{const cell=row.cells[column.id],raw=cellValue(cell),text=cellText(cell,column,grid.fmt),object=isCellObject(cell);const rule=columnNumericTone(column,raw),declaredTone=columnValueTone(column,cell),tone=declaredTone||gridPresenterTone(options,raw,object?cell.tone:null);element.classList.add("cx-presented-cell");if(rule||object&&cell.title)element.title=rule?.label||cell.title;if(declaredTone)applyTone(element,element.className,toneOf(declaredTone));if(rule)element.setAttribute("aria-description",rule.label);const add=(value,cls="cx-presenter-text",tag="span")=>{const item=h(tag,cls),textItem=/^(cx-presenter-text|p-mono|p-link|cx-wrapped-text|p-muted)\b/.test(cls);setText(item,value);
1
+ (function(global){"use strict";const installed=new WeakSet();const part={version:"4337e3756b443220",install(context){if(installed.has(context.GRID_PRESENTER_IMPL))return;const{GRID_PRESENTER_IMPL,h,setText,fill,cellValue,cellText,isCellObject,columnNumericTone,columnValueTone,gridPresenterTone,gridPresenterLink,numberFormat,toneColors,toneOf,applyTone,gridIcon,badgeElement,GRID_HISTORY_KINDS,GRID_HISTORY_IMPL,RECORD_IMPL}=context;function gridRenderPresenter(grid,column,options,record,complete){return(row,element)=>{const cell=row.cells[column.id],raw=cellValue(cell),text=cellText(cell,column,grid.fmt),object=isCellObject(cell);const rule=columnNumericTone(column,raw),declaredTone=columnValueTone(column,cell),tone=declaredTone||gridPresenterTone(options,raw,object?cell.tone:null);element.classList.add("cx-presented-cell");if(rule||object&&cell.title)element.title=rule?.label||cell.title;if(declaredTone)applyTone(element,element.className,toneOf(declaredTone));if(rule)element.setAttribute("aria-description",rule.label);const add=(value,cls="cx-presenter-text",tag="span")=>{const item=h(tag,cls),textItem=/^(cx-presenter-text|p-mono|p-link|cx-wrapped-text|p-muted)\b/.test(cls);setText(item,value);
2
2
  if(declaredTone&&textItem)item.style.color="inherit";if(column.wrap&&textItem){item.classList.add("cx-wrapped-text");item.style.maxWidth="100%";item.style.flex="none";item.title=rule?.label||String(value);if(complete){item.style.webkitLineClamp="unset";item.style.maxHeight="none"}
3
3
  else{const lines=record?column.maxLines??2:grid.layoutMode==="cards"?Math.min(column.maxLines??2,2):grid.autoRows?column.maxLines??2:1;item.style.webkitLineClamp=String(lines);item.style.maxHeight=lines*1.4+"em"}}
4
4
  element.appendChild(item);return item};const more=(value,label=grid.labels.gridShowMore)=>{const button=add(label,"cx-link cx-presenter-expand","button");button.type="button";button.setAttribute("aria-haspopup","dialog");button.setAttribute("aria-label",fill(grid.labels.gridExpandCell,{column:column.title}));button.addEventListener("click",()=>grid.showReportingText(column,value,button,row.id,options.mono));return button};if(GRID_HISTORY_KINDS.includes(options.kind)){if(GRID_HISTORY_IMPL.render)GRID_HISTORY_IMPL.render(grid,column,options,cell,element,text);else grid.loadHistory()}else if(options.kind==="structured"){if(RECORD_IMPL.summary)RECORD_IMPL.summary(grid,column,options,row,element,text);else{add(text);grid.loadRecordPanel()}}else if(raw==null&&object&&cell.text==="")add("");else if(raw==null&&(!object||cell.text===undefined)||text==="")add("—","p-missing");else if(options.kind==="link"){const href=gridPresenterLink(cellValue(options.hrefColumn?row.cells[options.hrefColumn]:cell));const link=add(text,"p-link",href?"a":"span");if(href){link.href=href;if(options.newWindow){link.target="_blank";link.rel="noopener noreferrer"}}}else if(options.kind==="icon"){add(options.glyph,"cx-presenter-icon").setAttribute("aria-hidden","true");add(text)}
5
- else if(options.kind==="boolean"&&typeof raw==="boolean"){const value=add(raw?"":"—",raw?"p-bool-yes"+(options.inverted?" cx-bool-bad":""):"p-bool-no");value.setAttribute("role","img");value.setAttribute("aria-label",raw?grid.labels.yes:grid.labels.no);if(raw)value.appendChild(gridIcon("check"))}else if(options.kind==="state"||options.kind==="enum"){if(options.quietTones?.includes(tone))add(text,(options.quietStyle==="plain"?"cx-presenter-text":"p-muted")+(options.kind==="enum"?" p-inset":""));else if(options.kind==="state"||tone==="success"){const state=add("","p-state"+(tone==="success"?" quiet":""));const dot=h("span","p-dot "+(tone==="success"?"quiet":tone));toneColors(dot,toneOf(tone));state.append(dot,document.createTextNode(text))}else{const pill=add(text,"p-pill "+tone);applyTone(pill,pill.className,toneOf(tone))}}else if(options.kind==="change"){const delta=cellValue(row.cells[options.deltaColumn]);if(typeof delta==="number")add((delta===0?"":delta>0?"↑ ":"↓ ")+numberFormat(grid.lang).format(Math.abs(delta)),"p-delta "+(delta===0?"flat":(delta>0)===!!options.higherIsGood?"good":"bad"));add(text)}else if(options.kind==="progress"&&typeof raw==="number"){const box=add("","p-progress"),track=h("span","track"),bar=h("span","fill "+tone),maximum=options.maximum||100;track.setAttribute("role","progressbar");track.setAttribute("aria-label",column.title);track.setAttribute("aria-valuemin","0");track.setAttribute("aria-valuemax",String(maximum));track.setAttribute("aria-valuenow",String(Math.min(maximum,Math.max(0,raw))));track.setAttribute("aria-valuetext",text);bar.style.width=Math.min(100,Math.max(0,raw/maximum*100))+"%";toneColors(bar,toneOf(tone));track.appendChild(bar);box.append(track,document.createTextNode(text));
5
+ else if(options.kind==="boolean"&&typeof raw==="boolean"){const value=add(raw?"":"—",raw?"p-bool-yes"+(options.inverted?" cx-bool-bad":""):"p-bool-no");value.setAttribute("role","img");value.setAttribute("aria-label",raw?grid.labels.yes:grid.labels.no);if(raw)value.appendChild(gridIcon("check"))}else if(options.kind==="state"||options.kind==="enum"){if(options.quietTones?.includes(tone))add(text,(options.quietStyle==="plain"?"cx-presenter-text":"p-muted")+(options.kind==="enum"?" p-inset":""));else if(options.kind==="state"){const state=add("","p-state"+(tone==="success"?" quiet":""));const dot=h("span","p-dot "+(tone==="success"?"quiet":tone));toneColors(dot,toneOf(tone));state.append(dot,document.createTextNode(text))}else{const pill=add(text,"p-pill "+tone);applyTone(pill,pill.className,toneOf(tone))}}else if(options.kind==="change"){const delta=cellValue(row.cells[options.deltaColumn]);if(typeof delta==="number")add((delta===0?"":delta>0?"↑ ":"↓ ")+numberFormat(grid.lang).format(Math.abs(delta)),"p-delta "+(delta===0?"flat":(delta>0)===!!options.higherIsGood?"good":"bad"));add(text)}else if(options.kind==="progress"&&typeof raw==="number"){const box=add("","p-progress"),track=h("span","track"),bar=h("span","fill "+tone),maximum=options.maximum||100;track.setAttribute("role","progressbar");track.setAttribute("aria-label",column.title);track.setAttribute("aria-valuemin","0");track.setAttribute("aria-valuemax",String(maximum));track.setAttribute("aria-valuenow",String(Math.min(maximum,Math.max(0,raw))));track.setAttribute("aria-valuetext",text);bar.style.width=Math.min(100,Math.max(0,raw/maximum*100))+"%";toneColors(bar,toneOf(tone));track.appendChild(bar);box.append(track,document.createTextNode(text));
6
6
  }else if(options.kind==="identifier"){add(text,options.mono?"p-mono":"cx-presenter-text");const secondary=options.secondaryColumn?cellText(row.cells[options.secondaryColumn],grid.columns.find(item=>item.id===options.secondaryColumn),grid.fmt):object&&cell.secondary;if(secondary)add(secondary,"p-sub")}else if(options.kind==="tags"||options.kind==="list"){const values=text.split(options.separator).map(item=>item.trim()).filter(Boolean),limit=options.kind==="tags"?3:options.limit||3;const preview=add("","cx-tag-list");element.classList.add("cx-list-cell");for(const value of values.slice(0,limit)){const tag=h("span","p-tag");setText(tag,value);preview.appendChild(tag)}
7
7
  if(values.length>limit||options.kind==="list")more(text,values.length>limit?"+"+(values.length-limit):grid.labels.gridShowMore)}else if(options.kind==="longText"){if(column.wrap){add(text,"cx-wrapped-text"+(options.mono?" p-mono":""))}else{const budget=Math.max(256,Math.ceil((column.renderWidth||column.width)/7*5));
8
8
  const preview=add(text.length>budget?text.slice(0,budget).replace(/[\uD800-\uDBFF]$/,"")+" …":text,"cx-wrapped-text"+(options.mono?" p-mono":""));
@@ -1,93 +1,93 @@
1
1
  /* ---------- record panel: the rich record drawer of flat grids and trees ---------- */
2
2
  body .cx-host.cx-drawer.cx-record-drawer{max-width:var(--cx-size-640px);}
3
- .cx-record-btn{display:inline-flex;align-items:center;gap:var(--cx-size-6px);min-height:var(--cx-size-28px);padding:0 var(--cx-size-8px);border:var(--cx-size-1px) solid transparent;border-radius:var(--cx-radius-sm);background:transparent;color:inherit;font:inherit;cursor:pointer;text-align:start;}
4
- .cx-record-btn:hover{background:var(--cx-hover-bg);}
5
- .cx-drawer :is(.cx-record-btn,.cx-record-tab):focus-visible{outline:var(--cx-size-2px) solid var(--cx-accent);outline-offset:var(--cx-size-1px);}
3
+ .cx-record-btn{display:inline-flex;align-items:center;gap:var(--cx-size-6px);min-height:var(--cx-size-28px);padding:0 var(--cx-size-8px);border:var(--cx-size-1px) solid transparent;border-radius:var(--hfx-radius-sm,4px);background:transparent;color:inherit;font:inherit;cursor:pointer;text-align:start;}
4
+ .cx-record-btn:hover{background:var(--hfx-color-hover,light-dark(#f5f5f5,#232529));}
5
+ .cx-drawer :is(.cx-record-btn,.cx-record-tab):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);}
6
6
  .cx-record-btn .cx-ico{width:var(--cx-size-16px);height:var(--cx-size-16px);flex:none;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;}
7
- .cx-drawer .cx-record-link{min-height:0;padding:0;border:0;color:var(--cx-accent-text);text-decoration:underline;text-underline-offset:var(--cx-size-2px);overflow-wrap:anywhere;}
7
+ .cx-drawer .cx-record-link{min-height:0;padding:0;border:0;color:var(--hfx-color-accent-text,light-dark(#02726a,#37c9b8));text-decoration:underline;text-underline-offset:var(--cx-size-2px);overflow-wrap:anywhere;}
8
8
  .cx-drawer .cx-record-link:hover{background:transparent;text-decoration-thickness:var(--cx-size-2px);}
9
- .cx-record-trail{display:flex;align-items:center;gap:var(--cx-size-8px);min-width:0;margin:0 0 var(--cx-size-4px);font-size:var(--cx-size-13px);color:var(--cx-muted);}
10
- .cx-drawer .cx-record-back{min-height:0;padding:0 var(--cx-size-4px) 0 0;color:var(--cx-accent-text);font-weight:600;}
9
+ .cx-record-trail{display:flex;align-items:center;gap:var(--cx-size-8px);min-width:0;margin:0 0 var(--cx-size-4px);font-size:var(--cx-size-13px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
10
+ .cx-drawer .cx-record-back{min-height:0;padding:0 var(--cx-size-4px) 0 0;color:var(--hfx-color-accent-text,light-dark(#02726a,#37c9b8));font-weight:600;}
11
11
  .cx-record-crumbs{display:flex;align-items:center;gap:var(--cx-size-4px);min-width:0;margin:0;padding:0;list-style:none;overflow:hidden;}
12
12
  .cx-record-crumbs li{display:flex;align-items:center;gap:var(--cx-size-4px);min-width:0;}
13
13
  .cx-record-crumbs li::before{content:"›";}
14
- .cx-drawer .cx-record-crumb{display:block;max-width:var(--cx-size-160px);min-height:0;padding:0 var(--cx-size-2px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--cx-muted);}
15
- .cx-record-summary{flex:none;display:flex;flex-wrap:wrap;align-items:center;gap:var(--cx-size-8px) var(--cx-size-20px);padding:var(--cx-size-10px) var(--cx-size-16px);border-bottom:var(--cx-size-1px) solid var(--cx-line);background:var(--cx-head-bg);}
14
+ .cx-drawer .cx-record-crumb{display:block;max-width:var(--cx-size-160px);min-height:0;padding:0 var(--cx-size-2px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
15
+ .cx-record-summary{flex:none;display:flex;flex-wrap:wrap;align-items:center;gap:var(--cx-size-8px) var(--cx-size-20px);padding:var(--cx-size-10px) var(--cx-size-16px);border-bottom:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));background:var(--hfx-color-surface-sunken,light-dark(#f7f8f9,#111317));}
16
16
  .cx-record-status{display:flex;align-items:center;gap:var(--cx-size-6px);}
17
17
  .cx-record-facts{display:flex;flex-wrap:wrap;gap:var(--cx-size-6px) var(--cx-size-20px);margin:0;}
18
18
  .cx-record-fact{min-width:0;}
19
- .cx-record-fact dt{font-size:var(--cx-size-11d5px);letter-spacing:var(--cx-size-d04em);text-transform:uppercase;color:var(--cx-muted);}
19
+ .cx-record-fact dt{font-size:var(--cx-size-11d5px);letter-spacing:var(--cx-size-d04em);text-transform:uppercase;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
20
20
  .cx-record-fact dd{margin:0;font-weight:600;overflow-wrap:anywhere;}
21
21
  .cx-drawer .cx-drawer-h > .cx-record-menu{position:relative;flex:none;}
22
- .cx-drawer .cx-record-menu-btn{justify-content:center;width:var(--cx-control-h);height:var(--cx-control-h);padding:0;}
23
- .cx-record-menu-list{position:absolute;right:0;top:calc(100% + var(--cx-size-4px));z-index:5;display:flex;flex-direction:column;min-width:var(--cx-size-180px);padding:var(--cx-size-4px);background:var(--cx-surface);border:var(--cx-size-1px) solid var(--cx-line);border-radius:var(--cx-radius);box-shadow:var(--cx-panel-shadow);}
22
+ .cx-drawer .cx-record-menu-btn{justify-content:center;width:var(--hfx-control-height-md,calc(36px - var(--cx-compact,0) * 8px));height:var(--hfx-control-height-md,calc(36px - var(--cx-compact,0) * 8px));padding:0;}
23
+ .cx-record-menu-list{position:absolute;right:0;top:calc(100% + var(--cx-size-4px));z-index:5;display:flex;flex-direction:column;min-width:var(--cx-size-180px);padding:var(--cx-size-4px);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-overlay,var(--hfx-radius-lg,10px));box-shadow:var(--hfx-elevation-2,0 1px 2px rgba(22,24,28,.05),0 6px 18px -10px rgba(22,24,28,.18));}
24
24
  .cx-record-menu-item{justify-content:flex-start;min-height:var(--cx-size-32px);white-space:nowrap;}
25
- .cx-record-tools{position:sticky;top:0;z-index:3;background:var(--cx-surface);border-bottom:var(--cx-size-1px) solid var(--cx-line);}
25
+ .cx-record-tools{position:sticky;top:0;z-index:3;background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));border-bottom:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
26
26
  .cx-record-tabs{display:flex;gap:var(--cx-size-2px);padding:0 var(--cx-size-10px);overflow-x:auto;scrollbar-width:thin;}
27
- .cx-record-tab{flex:none;padding:var(--cx-size-10px) var(--cx-size-10px) var(--cx-size-8px);border:0;border-bottom:var(--cx-size-2px) solid transparent;background:transparent;color:var(--cx-muted);font:inherit;font-weight:600;white-space:nowrap;cursor:pointer;}
28
- .cx-record-tab:hover{color:var(--cx-text);}
29
- .cx-record-tab[aria-selected="true"]{color:var(--cx-text);border-bottom-color:var(--cx-accent);}
27
+ .cx-record-tab{flex:none;padding:var(--cx-size-10px) var(--cx-size-10px) var(--cx-size-8px);border:0;border-bottom:var(--cx-size-2px) solid transparent;background:transparent;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));font:inherit;font-weight:600;white-space:nowrap;cursor:pointer;}
28
+ .cx-record-tab:hover{color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));}
29
+ .cx-record-tab[aria-selected="true"]{color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));border-bottom-color:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));}
30
30
  .cx-record-subtools{display:flex;flex-wrap:wrap;align-items:center;gap:var(--cx-size-4px) var(--cx-size-12px);padding:var(--cx-size-6px) var(--cx-size-12px);}
31
- .cx-record-tabs + .cx-record-subtools{border-top:var(--cx-size-1px) solid var(--cx-line);}
31
+ .cx-record-tabs + .cx-record-subtools{border-top:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
32
32
  .cx-record-jump{display:flex;flex-wrap:wrap;gap:var(--cx-size-4px);flex:1;min-width:0;}
33
- .cx-drawer .cx-record-jump-link{min-height:var(--cx-size-24px);padding:0 var(--cx-size-10px);border-color:var(--cx-line);border-radius:var(--cx-size-999px);font-size:var(--cx-size-13px);color:var(--cx-accent-text);}
34
- .cx-drawer .cx-record-empty{margin-inline-start:auto;min-height:var(--cx-size-24px);font-size:var(--cx-size-13px);color:var(--cx-muted);}
35
- .cx-record-section{border-bottom:var(--cx-size-1px) solid var(--cx-line);}
33
+ .cx-drawer .cx-record-jump-link{min-height:var(--cx-size-24px);padding:0 var(--cx-size-10px);border-color:var(--hfx-color-border,light-dark(#e2e4e7,#272a30));border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));font-size:var(--cx-size-13px);color:var(--hfx-color-accent-text,light-dark(#02726a,#37c9b8));}
34
+ .cx-drawer .cx-record-empty{margin-inline-start:auto;min-height:var(--cx-size-24px);font-size:var(--cx-size-13px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
35
+ .cx-record-section{border-bottom:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
36
36
  .cx-record-section:last-child{border-bottom:0;}
37
- .cx-record-section .cx-record-section{border-bottom:0;margin:0 var(--cx-size-16px) var(--cx-size-4px);border-inline-start:var(--cx-size-2px) solid var(--cx-line);}
37
+ .cx-record-section .cx-record-section{border-bottom:0;margin:0 var(--cx-size-16px) var(--cx-size-4px);border-inline-start:var(--cx-size-2px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
38
38
  .cx-record-section-h{margin:0;font:inherit;}
39
- .cx-drawer .cx-record-toggle{width:100%;padding:var(--cx-size-10px) var(--cx-size-16px) var(--cx-size-4px);border-radius:0;font-size:var(--cx-size-11d5px);font-weight:700;letter-spacing:var(--cx-size-d06em);text-transform:uppercase;color:var(--cx-muted);}
39
+ .cx-drawer .cx-record-toggle{width:100%;padding:var(--cx-size-10px) var(--cx-size-16px) var(--cx-size-4px);border-radius:var(--hfx-radius-none,0);font-size:var(--cx-size-11d5px);font-weight:700;letter-spacing:var(--cx-size-d06em);text-transform:uppercase;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
40
40
  .cx-record-toggle .cx-ico{width:var(--cx-size-14px);height:var(--cx-size-14px);transform:rotate(90deg);transition:transform .12s;}
41
41
  .cx-record-toggle[aria-expanded="false"] .cx-ico{transform:none;}
42
- .cx-drawer .cx-record-section .cx-record-section .cx-record-toggle{padding:var(--cx-size-6px) var(--cx-size-10px) var(--cx-size-2px);font-size:var(--cx-size-13px);letter-spacing:0;text-transform:none;color:var(--cx-text);}
42
+ .cx-drawer .cx-record-section .cx-record-section .cx-record-toggle{padding:var(--cx-size-6px) var(--cx-size-10px) var(--cx-size-2px);font-size:var(--cx-size-13px);letter-spacing:0;text-transform:none;color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));}
43
43
  .cx-record-section .cx-record-section .cx-dl{padding:var(--cx-size-4px) var(--cx-size-10px) var(--cx-size-6px);}
44
44
  .cx-record-section-b{padding-bottom:var(--cx-size-6px);}
45
45
  .cx-record-section-b > .cx-dl{padding-top:var(--cx-size-6px);padding-bottom:var(--cx-size-6px);}
46
- .cx-record-object{grid-template-columns:minmax(var(--cx-size-92px),max-content) 1fr;gap:var(--cx-size-2px) var(--cx-size-12px);padding:var(--cx-size-2px) 0 var(--cx-size-2px) var(--cx-size-10px);border-inline-start:var(--cx-size-2px) solid var(--cx-line);}
46
+ .cx-record-object{grid-template-columns:minmax(var(--cx-size-92px),max-content) 1fr;gap:var(--cx-size-2px) var(--cx-size-12px);padding:var(--cx-size-2px) 0 var(--cx-size-2px) var(--cx-size-10px);border-inline-start:var(--cx-size-2px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
47
47
  .cx-drawer .cx-record-object dd{margin-bottom:0;}
48
48
  .cx-record-section-b,.cx-record-object-value{container-type:inline-size;min-width:0;}
49
49
  @container (max-width:400px){
50
50
  .cx-record-object,.cx-record-section-b > .cx-dl{grid-template-columns:minmax(0,1fr);gap:var(--cx-size-2px) 0;}
51
51
  }
52
52
  .cx-record-block{padding:var(--cx-size-6px) var(--cx-size-16px) var(--cx-size-10px);}
53
- .cx-record-block-h{margin-bottom:var(--cx-size-6px);font-size:var(--cx-size-13px);color:var(--cx-muted);}
53
+ .cx-record-block-h{margin-bottom:var(--cx-size-6px);font-size:var(--cx-size-13px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
54
54
  .cx-record-custom{padding:var(--cx-size-6px) var(--cx-size-16px);}
55
55
  .cx-record-custom:empty{display:none;}
56
56
  .cx-record-chips{display:flex;flex-wrap:wrap;gap:var(--cx-size-4px);}
57
- .cx-drawer .cx-record-chip{display:inline-flex;align-items:center;max-width:100%;min-height:var(--cx-size-22px);padding:0 var(--cx-size-8px);border:var(--cx-size-1px) solid var(--cx-line-strong);border-radius:var(--cx-radius-sm);font-size:var(--cx-size-13px);overflow-wrap:anywhere;text-decoration:none;}
58
- .cx-drawer .cx-record-chip:is(.cx-tone-info,.cx-tone-success,.cx-tone-warning,.cx-tone-danger,.cx-toned){background:color-mix(in srgb,currentColor 9%,var(--cx-surface));border-color:color-mix(in srgb,currentColor 38%,var(--cx-surface));}
59
- .cx-drawer .cx-record-chip.cx-record-link{color:var(--cx-accent-text);}
60
- .cx-drawer .cx-diff-removed{text-decoration:line-through;color:var(--cx-muted);}
61
- .cx-drawer .cx-diff-added{font-weight:600;border-color:var(--cx-accent);}
62
- .cx-record-more-count{margin-inline-start:var(--cx-size-4px);color:var(--cx-muted);font-size:var(--cx-size-12d5px);}
63
- .cx-drawer :is(.cx-record-more,.cx-record-load-more,.cx-record-retry){margin-top:var(--cx-size-6px);border-color:var(--cx-line);color:var(--cx-accent-text);}
57
+ .cx-drawer .cx-record-chip{display:inline-flex;align-items:center;max-width:100%;min-height:var(--cx-size-22px);padding:0 var(--cx-size-8px);border:var(--cx-size-1px) solid var(--hfx-color-border-strong,light-dark(#cdd0d5,#363a42));border-radius:var(--hfx-radius-status,999px);font-size:var(--cx-size-13px);overflow-wrap:anywhere;text-decoration:none;}
58
+ .cx-drawer .cx-record-chip:is(.cx-tone-info,.cx-tone-success,.cx-tone-warning,.cx-tone-danger,.cx-toned){background:color-mix(in srgb,currentColor 9%,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));border-color:color-mix(in srgb,currentColor 38%,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));}
59
+ .cx-drawer .cx-record-chip.cx-record-link{color:var(--hfx-color-accent-text,light-dark(#02726a,#37c9b8));}
60
+ .cx-drawer .cx-diff-removed{text-decoration:line-through;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
61
+ .cx-drawer .cx-diff-added{font-weight:600;border-color:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));}
62
+ .cx-record-more-count{margin-inline-start:var(--cx-size-4px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));font-size:var(--cx-size-12d5px);}
63
+ .cx-drawer :is(.cx-record-more,.cx-record-load-more,.cx-record-retry){margin-top:var(--cx-size-6px);border-color:var(--hfx-color-border,light-dark(#e2e4e7,#272a30));color:var(--hfx-color-accent-text,light-dark(#02726a,#37c9b8));}
64
64
  :is(.cx-record-diff,.cx-record-table){width:100%;border-collapse:collapse;font-size:var(--cx-size-13px);}
65
- :is(.cx-record-diff,.cx-record-table) :is(th,td){padding:var(--cx-size-4px) var(--cx-size-8px);border-bottom:var(--cx-size-1px) solid var(--cx-line);text-align:start;vertical-align:top;overflow-wrap:anywhere;}
66
- :is(.cx-record-diff,.cx-record-table) thead th{font-size:var(--cx-size-12px);font-weight:600;color:var(--cx-muted);}
65
+ :is(.cx-record-diff,.cx-record-table) :is(th,td){padding:var(--cx-size-4px) var(--cx-size-8px);border-bottom:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));text-align:start;vertical-align:top;overflow-wrap:anywhere;}
66
+ :is(.cx-record-diff,.cx-record-table) thead th{font-size:var(--cx-size-12px);font-weight:600;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
67
67
  .cx-record-diff tbody th{width:30%;font-weight:600;}
68
- .cx-record-diff .cx-diff-before{color:var(--cx-muted);}
68
+ .cx-record-diff .cx-diff-before{color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
69
69
  .cx-record-diff-compact{margin-top:var(--cx-size-6px);}
70
70
  .cx-record-diff-compact thead{display:none;}
71
- .cx-record-collection-h{display:flex;align-items:center;gap:var(--cx-size-8px);margin-bottom:var(--cx-size-6px);font-size:var(--cx-size-13px);color:var(--cx-muted);}
72
- .cx-drawer .cx-record-open-all{margin-inline-start:auto;color:var(--cx-accent-text);font-weight:600;}
73
- .cx-record-nested{height:var(--cx-size-360px);border:var(--cx-size-1px) solid var(--cx-line);border-radius:var(--cx-radius);background:var(--cx-surface);}
71
+ .cx-record-collection-h{display:flex;align-items:center;gap:var(--cx-size-8px);margin-bottom:var(--cx-size-6px);font-size:var(--cx-size-13px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
72
+ .cx-drawer .cx-record-open-all{margin-inline-start:auto;color:var(--hfx-color-accent-text,light-dark(#02726a,#37c9b8));font-weight:600;}
73
+ .cx-record-nested{height:var(--cx-size-360px);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));}
74
74
  .cx-record-nested.cx-host{padding:0;}
75
- .cx-record-card{margin-bottom:var(--cx-size-8px);padding:var(--cx-size-8px) var(--cx-size-12px);border:var(--cx-size-1px) solid var(--cx-line);border-radius:var(--cx-radius);}
75
+ .cx-record-card{margin-bottom:var(--cx-size-8px);padding:var(--cx-size-8px) var(--cx-size-12px);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));}
76
76
  .cx-record-card-title{font-weight:600;}
77
77
  .cx-drawer .cx-record-card .cx-dl{grid-template-columns:1fr;gap:0;padding:var(--cx-size-4px) 0 0;}
78
- .cx-record-card dt{font-size:var(--cx-size-12px);color:var(--cx-muted);}
78
+ .cx-record-card dt{font-size:var(--cx-size-12px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
79
79
  .cx-drawer .cx-record-card dd{margin-bottom:var(--cx-size-4px);}
80
80
  .cx-timeline{position:relative;margin:0;padding:0;list-style:none;}
81
- .cx-timeline-day{padding:var(--cx-size-8px) 0 var(--cx-size-2px);font-size:var(--cx-size-11d5px);font-weight:700;letter-spacing:var(--cx-size-d04em);color:var(--cx-muted);}
81
+ .cx-timeline-day{padding:var(--cx-size-8px) 0 var(--cx-size-2px);font-size:var(--cx-size-11d5px);font-weight:700;letter-spacing:var(--cx-size-d04em);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
82
82
  .cx-timeline-item{position:relative;display:grid;grid-template-columns:var(--cx-size-16px) 1fr;gap:var(--cx-size-8px);padding:var(--cx-size-4px) 0 var(--cx-size-8px);}
83
- .cx-timeline-item::before{content:"";position:absolute;left:calc(var(--cx-size-8px) - var(--cx-size-1px));top:var(--cx-size-20px);bottom:0;width:var(--cx-size-2px);background:var(--cx-line);}
83
+ .cx-timeline-item::before{content:"";position:absolute;left:calc(var(--cx-size-8px) - var(--cx-size-1px));top:var(--cx-size-20px);bottom:0;width:var(--cx-size-2px);background:var(--hfx-color-border,light-dark(#e2e4e7,#272a30));}
84
84
  .cx-timeline-item:last-child::before{display:none;}
85
- .cx-timeline-dot{width:var(--cx-size-10px);height:var(--cx-size-10px);margin:var(--cx-size-5px) auto 0;border-radius:50%;color:var(--cx-muted);background:currentColor;}
85
+ .cx-timeline-dot{width:var(--cx-size-10px);height:var(--cx-size-10px);margin:var(--cx-size-5px) auto 0;border-radius:50%;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));background:currentColor;}
86
86
  .cx-timeline-dot:is(.cx-tone-info,.cx-tone-success,.cx-tone-warning,.cx-tone-danger,.cx-toned){color:var(--cx-t,inherit);}
87
- .cx-timeline-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--cx-size-6px);font-size:var(--cx-size-12d5px);color:var(--cx-muted);}
87
+ .cx-timeline-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--cx-size-6px);font-size:var(--cx-size-12d5px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
88
88
  .cx-timeline-summary{margin-top:var(--cx-size-2px);overflow-wrap:anywhere;}
89
- .cx-record-note{margin:var(--cx-size-8px) var(--cx-size-16px);color:var(--cx-muted);font-style:italic;}
90
- .cx-record-error{display:flex;flex-wrap:wrap;align-items:center;gap:var(--cx-size-8px);color:var(--cx-tone-danger);font-style:normal;}
89
+ .cx-record-note{margin:var(--cx-size-8px) var(--cx-size-16px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));font-style:italic;}
90
+ .cx-record-error{display:flex;flex-wrap:wrap;align-items:center;gap:var(--cx-size-8px);color:var(--hfx-color-status-bad-fg,light-dark(#b8292a,#f47171));font-style:normal;}
91
91
  .cx-drawer.cx-phone :is(.cx-record-btn,.cx-record-tab){min-height:var(--cx-size-44px);}
92
92
  .cx-drawer.cx-phone .cx-record-menu-btn{width:var(--cx-size-44px);height:var(--cx-size-44px);}
93
93
  .cx-drawer.cx-phone .cx-record-crumbs{display:none;}
@@ -97,15 +97,15 @@ body .cx-host.cx-drawer.cx-record-drawer{max-width:var(--cx-size-640px);}
97
97
  .cx-record-print{display:none;}
98
98
  @media print{
99
99
  html.cx-record-printing body > :not(.cx-record-print){display:none !important;}
100
- html.cx-record-printing .cx-record-print{display:block;padding:0;font:var(--cx-size-12px)/1.4 var(--cx-font);color:var(--cx-text);background:var(--cx-surface);}
100
+ html.cx-record-printing .cx-record-print{display:block;padding:0;font:var(--cx-size-12px)/1.4 var(--hfx-font-sans,"Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif);color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));}
101
101
  .cx-record-print h1{margin:0 0 var(--cx-size-4px);font-size:var(--cx-size-20px);}
102
102
  .cx-record-print h2{margin:var(--cx-size-16px) 0 var(--cx-size-4px);font-size:var(--cx-size-16px);}
103
103
  .cx-record-print .cx-record-section{break-inside:avoid;border:0;}
104
- .cx-record-print .cx-record-section-h{margin:var(--cx-size-10px) 0 var(--cx-size-2px);font-size:var(--cx-size-11d5px);font-weight:700;text-transform:uppercase;color:var(--cx-muted);}
104
+ .cx-record-print .cx-record-section-h{margin:var(--cx-size-10px) 0 var(--cx-size-2px);font-size:var(--cx-size-11d5px);font-weight:700;text-transform:uppercase;color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
105
105
  .cx-record-print .cx-dl{display:grid;grid-template-columns:var(--cx-size-180px) 1fr;gap:var(--cx-size-2px) var(--cx-size-12px);margin:0;padding:0;}
106
106
  .cx-record-print dd{margin:0;}
107
- .cx-record-print .p-sub{margin-inline-start:var(--cx-size-6px);color:var(--cx-muted);}
108
- .cx-record-print .cx-record-summary{border:var(--cx-size-1px) solid var(--cx-line);background:var(--cx-surface);}
107
+ .cx-record-print .p-sub{margin-inline-start:var(--cx-size-6px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
108
+ .cx-record-print .cx-record-summary{border:var(--cx-size-1px) solid var(--hfx-color-border,light-dark(#e2e4e7,#272a30));background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));}
109
109
  }
110
110
  @media (prefers-reduced-motion:reduce){.cx-record-toggle .cx-ico{transition:none;}}
111
111
  @media (forced-colors:active){.cx-record-tab[aria-selected="true"]{border-bottom-color:Highlight;}.cx-timeline-dot{forced-color-adjust:none;background:CanvasText;}}
@@ -1,4 +1,4 @@
1
- (function(global){"use strict";const installed=new WeakSet();const part={version:"e78e0e62d74d6811",install(context){if(installed.has(context.RECORD_IMPL))return;const{RECORD_IMPL,TreeGrid,h,setText,fill,cellText,cellValue,isCellObject,formatValue,toneOf,applyTone,toneColors,validateGridRows,badgeElement,loadSidecar,requireIdentifier,PROTOCOL,foldText,createTreeGrid,svgIcon,gridExportField,columnNumericTone,columnValueTone,validateColumnValues}=context;const RECORD_KINDS=["items","fields","records","events","changes"],RECORD_LINK_KEY=/^[A-Za-z][\w.-]{0,31}$/, RECORD_MAX_STRUCTURE_DEPTH = 8;
1
+ (function(global){"use strict";const installed=new WeakSet();const part={version:"94adeb844689e329",install(context){if(installed.has(context.RECORD_IMPL))return;const{RECORD_IMPL,TreeGrid,h,setText,fill,cellText,cellValue,isCellObject,formatValue,toneOf,applyTone,toneColors,validateGridRows,badgeElement,loadSidecar,requireIdentifier,PROTOCOL,foldText,createTreeGrid,svgIcon,gridExportField,columnNumericTone,columnValueTone,validateColumnValues}=context;const RECORD_KINDS=["items","fields","records","events","changes"],RECORD_LINK_KEY=/^[A-Za-z][\w.-]{0,31}$/, RECORD_MAX_STRUCTURE_DEPTH = 8;
2
2
  const recordKind=cell=>{const kinds=isCellObject(cell)&&!Array.isArray(cell)?RECORD_KINDS.filter(name=>cell[name]!==undefined):[];if(kinds.length>1)recordFail("a cell carries at most one structured value.");return kinds[0]||null};const recordFail=message=>{throw new Error("CanopyX: "+message)};const recordText=(value,max=256)=>typeof value==="string"&&!!value.trim()&&value.length<=max;const recordGridHelpers=()=>RECORD_IMPL.grid||{};function recordCheckValue(cell,depth=0){if(cell==null)return;if(depth>RECORD_MAX_STRUCTURE_DEPTH)recordFail("structured values nest at most "+RECORD_MAX_STRUCTURE_DEPTH+" levels.");const kind=recordKind(cell);if(kind==="items")for(const item of cell.items||[])recordCheckValue(item,depth+1);if(kind==="fields")for(const field of cell.fields||[])recordCheckValue(field.value,depth+1);if(kind==="changes")for(const change of cell.changes||[]){recordCheckValue(change.before,depth+1);recordCheckValue(change.after,depth+1)}
3
3
  if(kind==="events")for(const event of cell.events||[])for(const change of event.changes||[]){recordCheckValue(change.before,depth+1);recordCheckValue(change.after,depth+1)}
4
4
  if(kind==="records")recordCheckRows(cell.records.rows||cell.records.roots,depth+1)}
@@ -72,7 +72,7 @@ function recordCollection(ctx,field,list,element){if(!list||typeof list!=="objec
72
72
  fill(labels.recordCount,{shown:recordCount(ctx,rows.length),total:recordCount(ctx,total)}));if(total>5||total>rows.length||ctx.print)head.appendChild(count);if(!ctx.print&&list.target?.view){const openAll=recordButton(labels.recordOpenAll,()=>recordOpenAll(ctx,field,list).catch(error=>ctx.view.emit("error",{error})),"cx-record-open-all","open");openAll.disabled=!recordCanOpenAll(list);head.appendChild(openAll)}
73
73
  const body=h("div","cx-record-collection-b");if(head.firstChild)block.appendChild(head);block.appendChild(body);if(ctx.print)recordTable(ctx,list,body);else if(ctx.phone&&!list.roots)recordCards(ctx,field,list,body);else recordNested(ctx,field,list,body);if(!ctx.print&&!list.roots&&rows.length<total&&recordLoader(ctx.view)){const more=recordButton(labels.recordLoadMore,()=>recordMore(ctx,field,list,more),"cx-record-load-more");block.appendChild(more)}
74
74
  element.appendChild(block)}
75
- function recordNested(ctx,field,list,body){const grid=recordGridHelpers(),host=h("div","cx-host cx-record-nested"),rows=list.rows,tree=!!list.roots||!grid.createDataGrid;host.setAttribute("data-cx-theme",ctx.view.host.getAttribute("data-cx-theme")||"auto");const columns=list.columns.map(column=>({kind:"text",sortable:true,...column})),id="cx-record-" + ++recordNestedSeq;const byKey=new Map(rows.map((row,at)=>["r"+String(at).padStart(6,"0"),row]));const open=item=>{const row=byKey.get(item.id)||item,ref=recordRowRef(list,row);if(ref)ctx.navigate(ref,host)};let api;if(tree){const roots=list.roots||rows.map(row=>({id:row.id,label:recordRowTitle(list,row,ctx.fmt),cells:row.cells}));host.classList.add("cx-record-nested-tree");api=createTreeGrid(host,{view:{protocol:PROTOCOL,type:"view",id,label:field.title,columns,source:{kind:"inline"},roots,rowHeight:30},labels:ctx.view.opts.labels,toolbar:false,onDetails:({node})=>open(node)})}else{const length=Math.min(Math.max(list.pageLength||10,1),100),paged=rows.length>length;api=grid.createDataGrid(host,{view:{protocol:PROTOCOL,type:"grid",id,label:field.title,rowHeight:30,pageSize:Math.min(10000,Math.max(rows.length,1)),selection:"none",search:rows.length>8,columns,source:{kind:"inline"},rows:[...byKey].map(([key,row])=>({...row,id:key})),toolbar:{filters:false,columns:false,views:false,export:false,more:false,count:false,columnMenus:false},...(paged?{presentation:"paged",pageLength:length}:{}),rowAction:rows.some(row=>recordRowRef(list,row))?"details":"none"},labels:ctx.view.opts.labels,...(rows.length>8?{}:{toolbar:false}),onDetails:({row})=>open(row)})}
75
+ function recordNested(ctx,field,list,body){const grid=recordGridHelpers(),host=h("div","cx-host cx-record-nested"),rows=list.rows,tree=!!list.roots||!grid.createDataGrid;const columns=list.columns.map(column=>({kind:"text",sortable:true,...column})),id="cx-record-" + ++recordNestedSeq;const byKey=new Map(rows.map((row,at)=>["r"+String(at).padStart(6,"0"),row]));const open=item=>{const row=byKey.get(item.id)||item,ref=recordRowRef(list,row);if(ref)ctx.navigate(ref,host)};let api;if(tree){const roots=list.roots||rows.map(row=>({id:row.id,label:recordRowTitle(list,row,ctx.fmt),cells:row.cells}));host.classList.add("cx-record-nested-tree");api=createTreeGrid(host,{view:{protocol:PROTOCOL,type:"view",id,label:field.title,columns,source:{kind:"inline"},roots,rowHeight:30},labels:ctx.view.opts.labels,toolbar:false,onDetails:({node})=>open(node)})}else{const length=Math.min(Math.max(list.pageLength||10,1),100),paged=rows.length>length;api=grid.createDataGrid(host,{view:{protocol:PROTOCOL,type:"grid",id,label:field.title,rowHeight:30,pageSize:Math.min(10000,Math.max(rows.length,1)),selection:"none",search:rows.length>8,columns,source:{kind:"inline"},rows:[...byKey].map(([key,row])=>({...row,id:key})),toolbar:{filters:false,columns:false,views:false,export:false,more:false,count:false,columnMenus:false},...(paged?{presentation:"paged",pageLength:length}:{}),rowAction:rows.some(row=>recordRowRef(list,row))?"details":"none"},labels:ctx.view.opts.labels,...(rows.length>8?{}:{toolbar:false}),onDetails:({row})=>open(row)})}
76
76
  host.style.setProperty("--cx-record-rows",String(Math.min(tree?(list.roots||rows).length:Math.min(rows.length,list.pageLength||10),12)));body.appendChild(host);recordOnDispose(ctx.signal,()=>api.destroy());api.ready?.catch(error=>{if(!ctx.signal.aborted)ctx.view.emit("error",{error})})}
77
77
  function recordCards(ctx,field,list,body){const holder=h("div","cx-record-cards"),rows=list.rows,columns=list.columns,step=10;const card=row=>{const item=h("div","cx-record-card"),title=h("div","cx-record-card-title"),ref=recordRowRef(list,row),text=recordRowTitle(list,row,ctx.fmt);item.setAttribute("role","group");item.setAttribute("aria-label",text);if(ref)recordLink(ctx,{value:text,ref},{id:field.id,kind:"text"},title);else setText(title,text);const fields=h("dl","cx-dl");for(const column of columns.slice(1)){const cell=row.cells?.[column.id],spec={id:column.id,title:column.title,kind:column.kind||"text"};if(recordEmpty(cell,spec,ctx.fmt))continue;const term=h("dt"),value=h("dd");setText(term,column.title);recordValue(ctx,spec,cell,value,1);fields.append(term,value)}
78
78
  item.append(title,fields);return item};for(const row of rows.slice(0,step))holder.appendChild(card(row));body.appendChild(holder);if(rows.length>step){const more=recordButton(fill(ctx.labels.recordShowAll,{count:recordCount(ctx,rows.length)}),()=>{more.remove();for(const row of rows.slice(step))holder.appendChild(card(row));holder.children[step]?.querySelector("button")?.focus()},"cx-record-more");body.appendChild(more)}}