@evotecit/canopyx 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -60,7 +60,7 @@ function fill(template,values){return template.replace(/\{(\w+)\}/g, (match, nam
60
60
  const pluralRules=new Map();function plural(template,count,lang){if(!template.startsWith("["))return template;const forms={};for(const match of template.matchAll(/\[(zero|one|two|few|many|other)\]([^[]*)/g)) forms[match[1]] = match[2];
61
61
  let rules=pluralRules.get(lang);if(!rules){try{rules=new Intl.PluralRules(lang||"en")}catch(_){rules=new Intl.PluralRules("en")}pluralRules.set(lang,rules)}
62
62
  return forms[rules.select(Number(count))]??forms.other??template}
63
- let DEFAULT_LABELS=Object.freeze({searchPlaceholder:"Search",searchResults:"Search results",searchResultCount:"{count} results",searchResultCountOfTotal:"{count} of {total} results",searchResultCountOfMany:"{count} of many results",searchNoResults:"No results",searchTooShort:"Type at least {min} characters",searchWordTooShort:"Type a word of at least {min} characters",searchFailed:"Search failed: {error}",columns:"Columns",visibleColumns:"Visible columns",resizeColumn:"Resize {column}",columnWidth:"{width} pixels",loading:"Loading…",loadError:"Could not load: {error} (Enter to retry)",queryFailed:"Could not update the view: {error}",showMore:"Show more ({loaded} of {total} loaded)",showMoreUnknownTotal:"Show more ({loaded} loaded)",pageLoaded:"{loaded} of {total} loaded",itemsLoaded:"{count} items",yes:"Yes",no:"No",utcTime:"{time} UTC",localTime:"{time} local time",mountError:"This view could not be displayed: {error}"});function labelsFor(...sources){const labels=Object.assign({},DEFAULT_LABELS);for(const source of sources){if(source==null)continue;if(typeof source!=="object"||Array.isArray(source))throw new Error("CanopyX: labels must be an object of strings.");Object.keys(source).forEach((name)=>{if(!Object.hasOwn(DEFAULT_LABELS,name)&&!/^(?:gridEdit|format|calendar|flow)[A-Z]\w{0,63}$/.test(name)) throw new Error("CanopyX: there is no label '" + name + "'.");
63
+ let DEFAULT_LABELS=Object.freeze({searchPlaceholder:"Search",searchResults:"Search results",searchResultCount:"{count} results",searchResultCountOfTotal:"{count} of {total} results",searchResultCountOfMany:"{count} of many results",searchNoResults:"No results",searchTooShort:"Type at least {min} characters",searchWordTooShort:"Type a word of at least {min} characters",searchFailed:"Search failed: {error}",columns:"Columns",visibleColumns:"Visible columns",resizeColumn:"Resize {column}",columnWidth:"{width} pixels",loading:"Loading…",loadError:"Could not load: {error} (Enter to retry)",queryFailed:"Could not update the view: {error}",showMore:"Show more ({loaded} of {total} loaded)",showMoreUnknownTotal:"Show more ({loaded} loaded)",pageLoaded:"{loaded} of {total} loaded",itemsLoaded:"{count} items",yes:"Yes",no:"No",utcTime:"{time} UTC",localTime:"{time} local time",mountError:"This view could not be displayed: {error}"});function labelsFor(...sources){const labels=Object.assign({},DEFAULT_LABELS);for(const source of sources){if(source==null)continue;if(typeof source!=="object"||Array.isArray(source))throw new Error("CanopyX: labels must be an object of strings.");Object.keys(source).forEach((name)=>{if(!Object.hasOwn(DEFAULT_LABELS,name)&&!/^(?:gridEdit|format|calendar|flow|matrix)[A-Z]\w{0,63}$/.test(name)) throw new Error("CanopyX: there is no label '" + name + "'.");
64
64
  if(typeof source[name]!=="string"||!/\S/.test(source[name])) throw new Error("CanopyX: label '" + name + "' must be a string with visible text.");
65
65
  if((name==="utcTime"||name==="localTime")&&source[name].indexOf("{time}")<0)throw new Error("CanopyX: label '"+name+"' must hold {time}.");labels[name]=source[name]})}
66
66
  return Object.freeze(labels)}
@@ -504,7 +504,7 @@ if(active>=0){list.children[active].setAttribute("aria-selected","false")}
504
504
  active=active<0?(delta<0?hits.length-1:0):(active+delta+hits.length)%hits.length;const item=list.children[active];item.setAttribute("aria-selected","true");input.setAttribute("aria-activedescendant",item.id);item.scrollIntoView({block:"nearest"})};input.addEventListener("input",()=>{cancelNavigation();sequence++;clearTimeout(timer);hits=[];close();timer=setTimeout(run,150)});input.addEventListener("keydown",(e)=>{if(e.defaultPrevented||e.isComposing)return;if(e.key==="ArrowDown"||e.key==="ArrowUp"){move(e.key==="ArrowDown"?1:-1)}else if(e.key==="Enter"){if(!list.hidden){choose(active>=0?active:0)}}else if(e.key==="Escape"){cancelNavigation();sequence++;clearTimeout(timer);if(list.hidden){input.value=""}
505
505
  close()}else{return}
506
506
  e.preventDefault()});input.addEventListener("blur",()=>{cancelNavigation();sequence++;clearTimeout(timer);clearTimeout(blurTimer);blurTimer=setTimeout(close,150)});this.cancelSearch=()=>{cancelNavigation();sequence++;clearTimeout(timer);clearTimeout(blurTimer);hits=[];close()};box.appendChild(input);box.appendChild(list);box.appendChild(status);bar.appendChild(box);this.searchInput=input}});function watchFlyout(anchorElement,panel,isOpen){const position=()=>{if(!isOpen())return;const anchor=anchorElement.getBoundingClientRect(),fixed=getComputedStyle(panel).position==="fixed";const below=Math.max(0,global.innerHeight-anchor.bottom-8);const above=Math.max(0,anchor.top-8);const opensAbove=below<120&&above>below,room=opensAbove?above:below;panel.style.maxHeight=(panel.classList.contains("cx-fb")?room:Math.min(320,room))+ "px";panel.style.top=opensAbove?"auto":fixed?anchor.bottom+"px":"100%";panel.style.bottom=opensAbove?fixed?global.innerHeight-anchor.top+"px":"100%":"auto";const width=panel.getBoundingClientRect().width;panel.style.left=Math.max(8,Math.min(anchor.left,global.innerWidth-width-8))-(fixed?0:anchor.left)+ "px"};global.addEventListener("resize",position);global.addEventListener("scroll",position,true);return{position,dispose:()=>{global.removeEventListener("resize",position);global.removeEventListener("scroll",position,true)}}}
507
- const PART_URL=typeof document!=="undefined"&&document.currentScript?.src;const PARTS={"tree-tools":["ce442e100494535d","canopyx-tree-tools.149c371950d66a15.js","canopyx-tree-tools.ef7a3fb9c9115a82.css"],"export":["8b99c0b7b0ec37c5","canopyx-export.6989ea36f5d6da7b.js"],"links":["f1ab7e32b501ce37","canopyx-links.d96addeefb3eccf5.js"],"search":["521eebd6e1bbbd35","canopyx-search.14c69f4551c69f23.js"],"link":["fa0c9e888463553b","canopyx-link.4ec39bc39fa6cf50.js","canopyx-link.8435c892613926ac.css"],"highlight":["f39423961654c1e2","canopyx-highlight.a6f93893d36ab343.js","canopyx-highlight.5b6d2e0d979f9f9b.css"],"layouts":["fa8c686f21626884","canopyx-layouts.e7250c82a6abf52e.js","canopyx-layouts.0b75738924533ee8.css"],"record-panel":["bcc06276c7933af6","canopyx-record-panel.a374fb4254f9115c.js","canopyx-record-panel.f3691d54cefaab04.css"]},PART_CODE=new Map(),partName=name=>typeof name==="string"&&/^[a-z][a-z\d-]{0,31}$/.test(name);
507
+ const PART_URL=typeof document!=="undefined"&&document.currentScript?.src;const PARTS={"tree-tools":["dbc7cd1bfd91ce63","canopyx-tree-tools.879d4297cd1760d6.js","canopyx-tree-tools.ef7a3fb9c9115a82.css"],"export":["8b99c0b7b0ec37c5","canopyx-export.6989ea36f5d6da7b.js"],"links":["f1ab7e32b501ce37","canopyx-links.d96addeefb3eccf5.js"],"search":["521eebd6e1bbbd35","canopyx-search.14c69f4551c69f23.js"],"link":["fa0c9e888463553b","canopyx-link.4ec39bc39fa6cf50.js","canopyx-link.8435c892613926ac.css"],"highlight":["f39423961654c1e2","canopyx-highlight.a6f93893d36ab343.js","canopyx-highlight.5b6d2e0d979f9f9b.css"],"layouts":["fa8c686f21626884","canopyx-layouts.e7250c82a6abf52e.js","canopyx-layouts.0b75738924533ee8.css"],"record-panel":["bcc06276c7933af6","canopyx-record-panel.a374fb4254f9115c.js","canopyx-record-panel.f3691d54cefaab04.css"]},PART_CODE=new Map(),partName=name=>typeof name==="string"&&/^[a-z][a-z\d-]{0,31}$/.test(name);
508
508
  function registerPart(name,part){if(!partName(name)||!part||typeof part.version!=="string"||typeof part.install!=="function"||
509
509
  part.requires!==undefined&&!(Array.isArray(part.requires)&&part.requires.every(partName)))throw new Error("CanopyX: invalid part.");PART_CODE.set(name,part)}
510
510
  function definePart(View,name,label,context){const parts=View.prototype.parts||={};return parts[name]={name,label,context,parts}}
@@ -740,5 +740,5 @@ watcher.observe(host)}
740
740
  function mount(root,automatic){const scope=root||document;const created=[];const showError=(host,err,api,view)=>{if(api){api.destroy();if(host.canopyx===api)delete host.canopyx}
741
741
  const message=err&&err.message?err.message:String(err);let labels=DEFAULT_LABELS;for(const attempt of[()=>labelsFor(view&&view.labels,view&&configured.has(view.id)?configured.get(view.id).labels:null),()=>labelsFor(view&&view.labels)]){try{labels=attempt();break}catch(e){labels=DEFAULT_LABELS}}
742
742
  const notice=document.createElement("div");notice.className="cx-mount-error";notice.setAttribute("role","alert");setText(notice,fill(labels.mountError,{error:message}));host.classList.add("cx-host");host.setAttribute("data-canopyx-mounted","true");host.setAttribute("data-cx-error",message);host.appendChild(notice);if(global.console)global.console.error(err)};const selector="[data-canopyx-host]:not([data-canopyx-mounted])";(scope.matches?.(selector)?[scope]:scope.querySelectorAll(selector)).forEach((host)=>{const config=host.querySelector("script.cx-config"),mode=host.getAttribute("data-cx-mount");if(!config||(automatic===true&&mode==="manual")){return}
743
- if(mode==="visible"&&host!==scope&&global.IntersectionObserver)return mountWhenVisible(host);watcher?.unobserve(host);host.setAttribute("data-canopyx-mounted","true");let view=null;try{view=JSON.parse(config.textContent);if(view===Object(view))parsedViews.add(view);const flow=view&&view.kind==="flow"&&typeof FLOW_API==="object";const create=flow?FLOW_API.createFlow:view&&view.type==="grid"&&typeof createDataGrid==="function"?createDataGrid:createTreeGrid;const api=create(host,Object.assign({},view&&configured.get(view.id),flow?{flow:view}:{view}));created.push(api);api.ready.catch((err)=>{if(view.type!=="grid"&&activeGrids.get(host)===api&&host.canopyx===api)showError(host,err,api,view)})}catch(err){showError(host,err,null,view)}});return created}
744
- global.CanopyX=Object.freeze(Object.assign({protocol:PROTOCOL,createTreeGrid,configure,unconfigure,mount:(root)=>mount(root,false),sources:Object.freeze({inline:inlineSource,sidecar:sidecarSource,remote:remoteSource}),badge:hostBadge,labels:DEFAULT_LABELS,registerExportFormat,use,registerPart,setNonce},typeof GRID_API==="object"?GRID_API:{},typeof FLOW_API==="object"?FLOW_API:{}));const navigation=global.performance&&performance.getEntriesByType?performance.getEntriesByType("navigation")[0]:null;if(document.readyState==="loading"||(document.readyState==="interactive"&&navigation&&navigation.domContentLoadedEventStart===0)){document.addEventListener("DOMContentLoaded",()=>mount(document,true))}else{mount(document,true)}})(typeof window!=="undefined"?window:this);
743
+ if(mode==="visible"&&host!==scope&&global.IntersectionObserver)return mountWhenVisible(host);watcher?.unobserve(host);host.setAttribute("data-canopyx-mounted","true");let view=null;try{view=JSON.parse(config.textContent);if(view===Object(view))parsedViews.add(view);const flow=view&&view.kind==="flow"&&typeof FLOW_API==="object",matrix=view&&view.type==="matrix"&&typeof MATRIX_API==="object";const create=flow?FLOW_API.createFlow:matrix?MATRIX_API.createMatrix:view&&view.type==="grid"&&typeof createDataGrid==="function"?createDataGrid:createTreeGrid;const api=create(host,Object.assign({},view&&configured.get(view.id),flow?{flow:view}:{view}));created.push(api);api.ready.catch((err)=>{if(view.type!=="grid"&&!matrix&&activeGrids.get(host)===api&&host.canopyx===api)showError(host,err,api,view)})}catch(err){showError(host,err,null,view)}});return created}
744
+ global.CanopyX=Object.freeze(Object.assign({protocol:PROTOCOL,createTreeGrid,configure,unconfigure,mount:(root)=>mount(root,false),sources:Object.freeze({inline:inlineSource,sidecar:sidecarSource,remote:remoteSource}),badge:hostBadge,labels:DEFAULT_LABELS,registerExportFormat,use,registerPart,setNonce},typeof GRID_API==="object"?GRID_API:{},typeof FLOW_API==="object"?FLOW_API:{},typeof MATRIX_API==="object"?MATRIX_API:{}));const navigation=global.performance&&performance.getEntriesByType?performance.getEntriesByType("navigation")[0]:null;if(document.readyState==="loading"||(document.readyState==="interactive"&&navigation&&navigation.domContentLoadedEventStart===0)){document.addEventListener("DOMContentLoaded",()=>mount(document,true))}else{mount(document,true)}})(typeof window!=="undefined"?window:this);
@@ -589,6 +589,39 @@ const labels = Object.freeze({
589
589
  flowCopied: "Kopiert",
590
590
  flowSavedIt: "Ich habe es gespeichert",
591
591
  flowShownOnce: "Wird nur einmal angezeigt. Jetzt kopieren.",
592
+ matrixRows: "Zeilen",
593
+ matrixColumns: "Spalten",
594
+ matrixSearch: "Zeilen und Spalten suchen",
595
+ matrixSortBy: "Sortieren nach",
596
+ matrixGroupBy: "Gruppieren nach",
597
+ matrixByLabel: "Name",
598
+ matrixByTotal: "Gesamt",
599
+ matrixAsListed: "Wie aufgeführt",
600
+ matrixNoGrouping: "Keine Gruppen",
601
+ matrixDescending: "Absteigend",
602
+ matrixOnlyProblems: "Nur Probleme",
603
+ matrixHideEmpty: "Leere Zeilen und Spalten ausblenden",
604
+ matrixSize: "{rows} × {columns}",
605
+ matrixShown: "Zeilen: {rows} von {totalRows}, Spalten: {columns} von {totalColumns}",
606
+ matrixAttention: "Erfordert Aufmerksamkeit: {count}",
607
+ matrixLegend: "Zustände",
608
+ matrixFilter: "Filtern",
609
+ matrixClearFilters: "Filter löschen",
610
+ matrixNoMatches: "Keine Zeilen oder Spalten passen.",
611
+ matrixSelf: "Dasselbe Element",
612
+ matrixNoData: "Keine Daten",
613
+ matrixCell: "{row} und {column}: {state}",
614
+ matrixTotal: "Gesamt",
615
+ matrixItemTotal: "{item}: {count}",
616
+ matrixExpandGroup: "{group} aufklappen",
617
+ matrixCollapseGroup: "{group} zuklappen",
618
+ matrixGroupCount: "Elemente: {count}",
619
+ matrixDetails: "Details",
620
+ matrixClose: "Schließen",
621
+ matrixValue: "Wert",
622
+ matrixState: "Zustand",
623
+ matrixAllClear: "Nichts erfordert Aufmerksamkeit",
624
+ matrixShowMore: "Mehr anzeigen",
592
625
  });
593
626
  const staticLabels = Object.freeze({
594
627
  overflowNote: "{shown} Zeilen angezeigt. Gesamtzahl: {total}.",
@@ -589,6 +589,39 @@ const labels = Object.freeze({
589
589
  flowCopied: "Copiado",
590
590
  flowSavedIt: "Lo he guardado",
591
591
  flowShownOnce: "Se muestra solo una vez. Cópielo ahora.",
592
+ matrixRows: "Filas",
593
+ matrixColumns: "Columnas",
594
+ matrixSearch: "Buscar filas y columnas",
595
+ matrixSortBy: "Ordenar por",
596
+ matrixGroupBy: "Agrupar por",
597
+ matrixByLabel: "Nombre",
598
+ matrixByTotal: "Total",
599
+ matrixAsListed: "Como en la lista",
600
+ matrixNoGrouping: "Sin grupos",
601
+ matrixDescending: "Descendente",
602
+ matrixOnlyProblems: "Solo problemas",
603
+ matrixHideEmpty: "Ocultar filas y columnas vacías",
604
+ matrixSize: "{rows} × {columns}",
605
+ matrixShown: "Filas: {rows} de {totalRows}, columnas: {columns} de {totalColumns}",
606
+ matrixAttention: "Requieren atención: {count}",
607
+ matrixLegend: "Estados",
608
+ matrixFilter: "Filtrar",
609
+ matrixClearFilters: "Borrar filtros",
610
+ matrixNoMatches: "Ninguna fila o columna coincide.",
611
+ matrixSelf: "El mismo elemento",
612
+ matrixNoData: "Sin datos",
613
+ matrixCell: "{row} y {column}: {state}",
614
+ matrixTotal: "Total",
615
+ matrixItemTotal: "{item}: {count}",
616
+ matrixExpandGroup: "Expandir {group}",
617
+ matrixCollapseGroup: "Contraer {group}",
618
+ matrixGroupCount: "Elementos: {count}",
619
+ matrixDetails: "Detalles",
620
+ matrixClose: "Cerrar",
621
+ matrixValue: "Valor",
622
+ matrixState: "Estado",
623
+ matrixAllClear: "Nada requiere atención",
624
+ matrixShowMore: "Mostrar más",
592
625
  });
593
626
  const staticLabels = Object.freeze({
594
627
  overflowNote: "Filas mostradas: {shown}. Total: {total}.",
@@ -589,6 +589,39 @@ const labels = Object.freeze({
589
589
  flowCopied: "Copié",
590
590
  flowSavedIt: "Je l'ai enregistré",
591
591
  flowShownOnce: "Affiché une seule fois. Copiez-le maintenant.",
592
+ matrixRows: "Lignes",
593
+ matrixColumns: "Colonnes",
594
+ matrixSearch: "Rechercher des lignes et des colonnes",
595
+ matrixSortBy: "Trier par",
596
+ matrixGroupBy: "Regrouper par",
597
+ matrixByLabel: "Nom",
598
+ matrixByTotal: "Total",
599
+ matrixAsListed: "Comme listé",
600
+ matrixNoGrouping: "Aucun groupe",
601
+ matrixDescending: "Décroissant",
602
+ matrixOnlyProblems: "Problèmes uniquement",
603
+ matrixHideEmpty: "Masquer les lignes et colonnes vides",
604
+ matrixSize: "{rows} × {columns}",
605
+ matrixShown: "Lignes : {rows} sur {totalRows}, colonnes : {columns} sur {totalColumns}",
606
+ matrixAttention: "À examiner : {count}",
607
+ matrixLegend: "États",
608
+ matrixFilter: "Filtrer",
609
+ matrixClearFilters: "Effacer les filtres",
610
+ matrixNoMatches: "Aucune ligne ni colonne ne correspond.",
611
+ matrixSelf: "Même élément",
612
+ matrixNoData: "Aucune donnée",
613
+ matrixCell: "{row} et {column} : {state}",
614
+ matrixTotal: "Total",
615
+ matrixItemTotal: "{item} : {count}",
616
+ matrixExpandGroup: "Développer {group}",
617
+ matrixCollapseGroup: "Réduire {group}",
618
+ matrixGroupCount: "Éléments : {count}",
619
+ matrixDetails: "Détails",
620
+ matrixClose: "Fermer",
621
+ matrixValue: "Valeur",
622
+ matrixState: "État",
623
+ matrixAllClear: "Rien à examiner",
624
+ matrixShowMore: "Afficher plus",
592
625
  });
593
626
  const staticLabels = Object.freeze({
594
627
  overflowNote: "{shown} lignes affichées sur {total}.",
@@ -589,6 +589,39 @@ const labels = Object.freeze({
589
589
  flowCopied: "Copiato",
590
590
  flowSavedIt: "L'ho salvato",
591
591
  flowShownOnce: "Mostrato una sola volta. Copialo ora.",
592
+ matrixRows: "Righe",
593
+ matrixColumns: "Colonne",
594
+ matrixSearch: "Cerca righe e colonne",
595
+ matrixSortBy: "Ordina per",
596
+ matrixGroupBy: "Raggruppa per",
597
+ matrixByLabel: "Nome",
598
+ matrixByTotal: "Totale",
599
+ matrixAsListed: "Come elencato",
600
+ matrixNoGrouping: "Nessun gruppo",
601
+ matrixDescending: "Decrescente",
602
+ matrixOnlyProblems: "Solo problemi",
603
+ matrixHideEmpty: "Nascondi righe e colonne vuote",
604
+ matrixSize: "{rows} × {columns}",
605
+ matrixShown: "Righe: {rows} di {totalRows}, colonne: {columns} di {totalColumns}",
606
+ matrixAttention: "Richiedono attenzione: {count}",
607
+ matrixLegend: "Stati",
608
+ matrixFilter: "Filtra",
609
+ matrixClearFilters: "Cancella filtri",
610
+ matrixNoMatches: "Nessuna riga o colonna corrisponde.",
611
+ matrixSelf: "Stesso elemento",
612
+ matrixNoData: "Nessun dato",
613
+ matrixCell: "{row} e {column}: {state}",
614
+ matrixTotal: "Totale",
615
+ matrixItemTotal: "{item}: {count}",
616
+ matrixExpandGroup: "Espandi {group}",
617
+ matrixCollapseGroup: "Comprimi {group}",
618
+ matrixGroupCount: "Elementi: {count}",
619
+ matrixDetails: "Dettagli",
620
+ matrixClose: "Chiudi",
621
+ matrixValue: "Valore",
622
+ matrixState: "Stato",
623
+ matrixAllClear: "Niente richiede attenzione",
624
+ matrixShowMore: "Mostra altro",
592
625
  });
593
626
  const staticLabels = Object.freeze({
594
627
  overflowNote: "Righe mostrate: {shown} su {total}.",
@@ -589,6 +589,39 @@ const labels = Object.freeze({
589
589
  flowCopied: "Skopiowano",
590
590
  flowSavedIt: "Mam to zapisane",
591
591
  flowShownOnce: "Widoczne tylko raz. Skopiuj teraz.",
592
+ matrixRows: "Wiersze",
593
+ matrixColumns: "Kolumny",
594
+ matrixSearch: "Szukaj wierszy i kolumn",
595
+ matrixSortBy: "Sortuj według",
596
+ matrixGroupBy: "Grupuj według",
597
+ matrixByLabel: "Nazwa",
598
+ matrixByTotal: "Razem",
599
+ matrixAsListed: "Jak na liście",
600
+ matrixNoGrouping: "Bez grup",
601
+ matrixDescending: "Malejąco",
602
+ matrixOnlyProblems: "Tylko problemy",
603
+ matrixHideEmpty: "Ukryj puste wiersze i kolumny",
604
+ matrixSize: "{rows} × {columns}",
605
+ matrixShown: "Wiersze: {rows} z {totalRows}, kolumny: {columns} z {totalColumns}",
606
+ matrixAttention: "Wymaga uwagi: {count}",
607
+ matrixLegend: "Stany",
608
+ matrixFilter: "Filtruj",
609
+ matrixClearFilters: "Wyczyść filtry",
610
+ matrixNoMatches: "Brak pasujących wierszy lub kolumn.",
611
+ matrixSelf: "Ten sam element",
612
+ matrixNoData: "Brak danych",
613
+ matrixCell: "{row} i {column}: {state}",
614
+ matrixTotal: "Razem",
615
+ matrixItemTotal: "{item}: {count}",
616
+ matrixExpandGroup: "Rozwiń {group}",
617
+ matrixCollapseGroup: "Zwiń {group}",
618
+ matrixGroupCount: "Elementy: {count}",
619
+ matrixDetails: "Szczegóły",
620
+ matrixClose: "Zamknij",
621
+ matrixValue: "Wartość",
622
+ matrixState: "Stan",
623
+ matrixAllClear: "Nic nie wymaga uwagi",
624
+ matrixShowMore: "Pokaż więcej",
592
625
  });
593
626
  const staticLabels = Object.freeze({
594
627
  overflowNote: "Pokazano {shown} z {total} wierszy.",
@@ -1,4 +1,4 @@
1
- (function(global){"use strict";const installed=new WeakSet();const part={version:"2fa02b9178c6c5df",install(context){if(installed.has(context.DataGrid.prototype))return;const{DataGrid,h,setText,fill,gridButton,gridIcon,gridQuery,gridResultShape,gridQueryRows,gridCompare,gridOrder,validateGridRows,validateGridPage,validateGridCursorPage,gridFreeze,requireIdentifier,checkDocument,cellValue,PROTOCOL,GRID_REPORTING,VIEW_MODES,inlineGridSource}=context;const LIVE_KEYS=new Set(["stableOrder","flash","batchMs","pollMs","load","announce","pauseWhenHidden"]);const LIVE_MAX_ROWS=100000;function liveOptions(view,options){const read=value=>{if(value===undefined||value===true||value===false)return{};if(!value||typeof value!=="object"||Array.isArray(value)||Object.keys(value).some(key=>!LIVE_KEYS.has(key)))
1
+ (function(global){"use strict";const installed=new WeakSet();const part={version:"e49f69556b65916b",install(context){if(installed.has(context.DataGrid.prototype))return;const{DataGrid,h,setText,fill,gridButton,gridIcon,gridQuery,gridResultShape,gridQueryRows,gridCompare,gridOrder,gridIdOrder,validateGridRows,validateGridPage,validateGridCursorPage,gridFreeze,requireIdentifier,checkDocument,cellValue,PROTOCOL,GRID_REPORTING,VIEW_MODES,inlineGridSource}=context;const LIVE_KEYS=new Set(["stableOrder","flash","batchMs","pollMs","load","announce","pauseWhenHidden"]);const LIVE_MAX_ROWS=100000;function liveOptions(view,options){const read=value=>{if(value===undefined||value===true||value===false)return{};if(!value||typeof value!=="object"||Array.isArray(value)||Object.keys(value).some(key=>!LIVE_KEYS.has(key)))
2
2
  throw new Error("CanopyX: live takes stableOrder, flash, batchMs, pollMs, load, announce and pauseWhenHidden.");return value};const merged=options.live===false?{}:{...read(view.live),...read(options.live)},flash=merged.flash;const integer=(value,min,max)=>value===undefined||Number.isInteger(value)&&value>=min&&value<=max;if(["stableOrder","announce","pauseWhenHidden"].some(key=>merged[key]!==undefined&&typeof merged[key]!=="boolean")||
3
3
  !(flash===undefined||typeof flash==="boolean"||flash&&typeof flash==="object"&&Object.keys(flash).every(key=>key==="durationMs")&&integer(flash.durationMs,100,10000))||
4
4
  !integer(merged.batchMs,0,60000)||!(merged.pollMs===undefined||merged.pollMs===0||integer(merged.pollMs,250,86400000))||
@@ -19,7 +19,7 @@ function liveDiff(rows,current){const add=[],keep=new Set();for(const row of row
19
19
  return{add,update:[],remove:[...current.keys()].filter(id=>!keep.has(id))}}
20
20
  const liveCopy=value=>JSON.parse(JSON.stringify(value));function liveColumns(view){return new Map(view.columns.map(column=>[column.id,column]))}
21
21
  function liveComparer(grid,query){const columns=liveColumns(grid.view),compare=GRID_REPORTING.compare?.(grid.view)||gridCompare;const sorts=query.sort.map(sort=>[columns.get(sort.column),sort.direction]);return(a,b)=>{for(const[column,direction]of sorts){const result=compare(a,b,column,direction);if(result)return result}
22
- return gridOrder(a.id,b.id)}}
22
+ return gridIdOrder(a.id,b.id)}}
23
23
  function liveMatcher(grid,query){const columns=liveColumns(grid.view),unsorted={...query,sort:[]};const view={columns:grid.view.columns,searchColumns:grid.view.searchColumns,rows:null};return row=>{view.rows=[row];return gridQueryRows(view,unsorted,columns,false).length===1}}
24
24
  function liveIndexOrder(order){order.at=new Map();order.ids.forEach((id,index)=>order.at.set(id,index));return order}
25
25
  Object.assign(DataGrid.prototype,{liveRows(){if(this.liveRowsOf!==this.view.rows){this.liveRowMap=new Map();for(const row of this.view.rows)this.liveRowMap.set(row.id,row);this.liveRowsOf=this.view.rows}
@@ -0,0 +1,153 @@
1
+ /* The matrix view: a sticky header with column labels written upwards,sticky row headers and totals,windowed cells. */
2
+ .cx-matrix-host{display:block;}
3
+ .cx-matrix [hidden]{display:none !important;}
4
+ .cx-matrix{display:flex;flex-direction:column;gap:var(--cx-size-8px);box-sizing:border-box;max-height:100%;font:var(--cx-font-size)/1.35 var(--cx-font);color:var(--cx-text);
5
+ --mx-line:color-mix(in srgb,var(--cx-line) 70%,var(--cx-surface));--mx-none:color-mix(in srgb,var(--cx-muted) 42%,var(--cx-surface));
6
+ --mx-raised:color-mix(in srgb,var(--cx-shadow-ink) 18%,transparent);}
7
+ .cx-mx-bar{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:var(--cx-size-8px);}
8
+ .cx-mx-input{box-sizing:border-box;height:var(--cx-size-32px);padding:0 var(--cx-size-10px);font:inherit;color:var(--cx-text);background:var(--cx-surface);
9
+ border:var(--cx-size-1px) solid var(--cx-control-border);border-radius:var(--cx-radius-sm);color-scheme:inherit;}
10
+ .cx-mx-search{flex:1 1 var(--cx-size-180px);max-width:var(--cx-size-320px);}
11
+ .cx-mx-button{box-sizing:border-box;min-height:var(--cx-size-32px);padding:0 var(--cx-size-12px);font:inherit;color:var(--cx-text);background:var(--cx-surface);
12
+ border:var(--cx-size-1px) solid var(--cx-control-border);border-radius:var(--cx-radius-sm);cursor:pointer;}
13
+ .cx-mx-button:hover{background:var(--cx-hover-bg);}
14
+ .cx-mx-button.cx-mx-active{border-color:var(--cx-accent);color:var(--cx-accent-text);}
15
+ .cx-mx-switch{display:inline-flex;align-items:center;gap:var(--cx-size-6px);min-height:var(--cx-size-24px);cursor:pointer;}
16
+ .cx-mx-check{width:var(--cx-size-16px);height:var(--cx-size-16px);margin:0;accent-color:var(--cx-accent);}
17
+ .cx-mx-summary{margin-inline-start:auto;color:var(--cx-muted);font-size:var(--cx-size-13px);font-variant-numeric:tabular-nums;}
18
+ .cx-mx-panel{position:absolute;top:calc(100% + var(--cx-size-4px));inset-inline-start:0;z-index:30;box-sizing:border-box;width:min(var(--cx-size-340px),100%);max-height:var(--cx-size-60vh);
19
+ overflow:auto;display:grid;gap:var(--cx-size-10px);padding:var(--cx-size-12px);background:var(--cx-surface);border:var(--cx-size-1px) solid var(--cx-line-strong);
20
+ border-radius:var(--cx-radius);box-shadow:0 var(--cx-size-8px) var(--cx-size-24px) color-mix(in srgb,var(--cx-shadow-ink) 16%,transparent);}
21
+ .cx-mx-field{display:grid;gap:var(--cx-size-4px);font-size:var(--cx-size-13px);color:var(--cx-muted);}
22
+ .cx-mx-field .cx-mx-input{color:var(--cx-text);}
23
+ .cx-mx-facet{display:grid;gap:var(--cx-size-4px);margin:0;padding:0;border:0;min-width:0;}
24
+ .cx-mx-facet legend{padding:0 0 var(--cx-size-4px);font-size:var(--cx-size-13px);color:var(--cx-muted);}
25
+ .cx-mx-keycount{color:var(--cx-muted);font-variant-numeric:tabular-nums;margin-inline-start:var(--cx-size-4px);}
26
+ .cx-mx-legend{display:flex;flex-wrap:wrap;gap:var(--cx-size-6px) var(--cx-size-16px);font-size:var(--cx-size-13px);}
27
+ .cx-mx-key{display:inline-flex;align-items:center;gap:var(--cx-size-6px);}
28
+ .cx-mx-swatch{display:inline-flex;align-items:center;justify-content:center;width:var(--cx-size-20px);height:var(--cx-size-20px);border-radius:var(--cx-radius-sm);
29
+ border:var(--cx-size-1px) solid var(--mx-line);flex:none;}
30
+ .cx-mx-swatch.cx-mx-none{background:var(--cx-surface);}
31
+ .cx-mx-swatch.cx-mx-none::after{content:"";width:var(--cx-size-3px);height:var(--cx-size-3px);border-radius:50%;background:var(--mx-none);}
32
+ .cx-mx-scroll{position:relative;flex:0 1 auto;box-sizing:border-box;width:fit-content;max-width:100%;min-height:0;max-height:var(--cx-size-100vh);overflow:auto;background:var(--cx-surface);border:var(--cx-size-1px) solid var(--cx-line);border-radius:var(--cx-radius);
33
+ overscroll-behavior:contain;scrollbar-color:var(--cx-scrollbar-thumb,auto) var(--cx-scrollbar-track,auto);}
34
+ .cx-mx-head{position:sticky;top:0;z-index:3;width:var(--mx-content-w);background:var(--cx-head-bg);}
35
+ .cx-mx-head.cx-mx-raised{box-shadow:0 var(--cx-size-6px) var(--cx-size-8px) calc(var(--cx-size-6px) * -1) var(--mx-raised);}
36
+ .cx-mx-band,.cx-mx-hrow,.cx-mx-frow{position:relative;display:flex;}
37
+ .cx-mx-band{height:var(--mx-band-h);border-bottom:var(--cx-size-1px) solid var(--mx-line);}
38
+ .cx-mx-hrow{height:var(--mx-head-h);border-bottom:var(--cx-size-1px) solid var(--cx-line);}
39
+ .cx-mx-spacer{flex:none;width:var(--mx-cols-w);}
40
+ .cx-mx-corner{position:sticky;inset-inline-start:0;z-index:2;box-sizing:border-box;flex:none;width:var(--mx-head-w);display:flex;flex-direction:column;justify-content:flex-end;
41
+ gap:var(--cx-size-2px);padding:var(--cx-size-6px) var(--cx-size-10px);background:var(--cx-head-bg);border-inline-end:var(--cx-size-1px) solid var(--cx-line);
42
+ font-size:var(--cx-size-12px);font-weight:600;color:var(--cx-muted);}
43
+ .cx-mx-corner-columns{align-self:flex-end;}
44
+ .cx-mx-corner-columns::after{content:" \2192";}
45
+ .cx-mx-corner-rows::after{content:" \2193";}
46
+ .cx-mx-corner-columns:dir(rtl)::after{content:" \2190";}
47
+ .cx-mx-hcell{position:absolute;top:0;bottom:0;box-sizing:border-box;width:var(--mx-cell-w);contain:strict;display:flex;align-items:flex-end;justify-content:center;padding-bottom:var(--cx-size-6px);
48
+ border-inline-end:var(--cx-size-1px) solid var(--mx-line);font-size:var(--cx-size-12px);}
49
+ .cx-mx-vlabel{writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-height:calc(var(--mx-head-h) - var(--cx-size-12px));}
50
+ .cx-mx-bcell{position:absolute;top:0;bottom:0;box-sizing:border-box;display:flex;align-items:center;padding:0 var(--cx-size-4px);border-inline-end:var(--cx-size-1px) solid var(--cx-line);
51
+ overflow:hidden;font-size:var(--cx-size-12px);font-weight:600;}
52
+ .cx-mx-bandcorner,.cx-mx-bandend{background:var(--cx-head-bg);}
53
+ .cx-mx-bcell .cx-mx-toggle{max-width:100%;overflow:hidden;}
54
+ .cx-mx-bclip .cx-mx-toggle{visibility:hidden;}
55
+ .cx-mx-total{position:sticky;inset-inline-end:0;z-index:2;box-sizing:border-box;flex:none;width:var(--mx-total-w);display:flex;align-items:center;justify-content:flex-end;
56
+ padding:0 var(--cx-size-10px);background:var(--cx-surface);border-inline-start:var(--cx-size-1px) solid var(--cx-line);font-variant-numeric:tabular-nums;font-weight:600;}
57
+ .cx-mx-htotal{background:var(--cx-head-bg);align-items:flex-end;padding-bottom:var(--cx-size-6px);font-size:var(--cx-size-12px);color:var(--cx-muted);}
58
+ .cx-mx-total.cx-mx-zero,.cx-mx-fcell.cx-mx-zero{font-weight:400;color:var(--cx-muted);}
59
+ .cx-mx-body{position:relative;width:var(--mx-content-w);}
60
+ .cx-mx-row{position:absolute;top:0;inset-inline-start:0;display:flex;contain:layout style;width:var(--mx-content-w);height:var(--mx-row-h);box-sizing:border-box;border-bottom:var(--cx-size-1px) solid var(--mx-line);}
61
+ .cx-mx-rowhead{position:sticky;inset-inline-start:0;z-index:2;box-sizing:border-box;flex:none;width:var(--mx-head-w);display:flex;align-items:center;gap:var(--cx-size-6px);
62
+ min-width:0;padding:0 var(--cx-size-10px);background:var(--cx-surface);border-inline-end:var(--cx-size-1px) solid var(--cx-line);white-space:nowrap;overflow:hidden;}
63
+ .cx-mx-member .cx-mx-rowhead{padding-inline-start:var(--cx-size-24px);}
64
+ .cx-mx-label{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;}
65
+ .cx-mx-rowhead > .cx-mx-label{flex:none;max-width:100%;}
66
+ .cx-mx-sub{color:var(--cx-muted);font-size:var(--cx-size-12px);overflow:hidden;text-overflow:ellipsis;}
67
+ .cx-mx-heading{background:var(--cx-head-bg);}
68
+ .cx-mx-heading .cx-mx-rowhead,.cx-mx-rolledrow .cx-mx-rowhead{width:auto;min-width:var(--mx-head-w);background:var(--cx-head-bg);font-weight:600;}
69
+ .cx-mx-heading .cx-mx-total,.cx-mx-rolledrow .cx-mx-total{background:var(--cx-head-bg);}
70
+ .cx-mx-toggle{display:inline-flex;align-items:center;gap:var(--cx-size-6px);min-width:0;min-height:var(--cx-size-24px);padding:0;font:inherit;color:inherit;background:none;border:0;cursor:pointer;}
71
+ .cx-mx-toggle::before{content:"";flex:none;width:0;height:0;border-block:var(--cx-size-4px) solid transparent;border-inline-start:var(--cx-size-6px) solid currentColor;transition:transform .12s;}
72
+ .cx-mx-toggle[aria-expanded="true"]::before{transform:rotate(90deg);}
73
+ .cx-mx-toggle:dir(rtl)[aria-expanded="true"]::before{transform:rotate(-90deg);}
74
+ .cx-mx-hcell .cx-mx-toggle{flex-direction:column;}
75
+ .cx-mx-cell{position:absolute;top:0;box-sizing:border-box;width:var(--mx-cell-w);height:100%;contain:strict;display:flex;align-items:center;justify-content:center;gap:var(--cx-size-2px);
76
+ border-inline-end:var(--cx-size-1px) solid var(--mx-line);font-size:var(--cx-size-11px);font-variant-numeric:tabular-nums;cursor:pointer;color:var(--cx-muted);}
77
+ .cx-mx-cell.cx-tone-danger{color:var(--cx-tone-danger);}
78
+ .cx-mx-cell.cx-tone-warning{color:var(--cx-tone-warning);}
79
+ .cx-mx-cell.cx-tone-info{color:var(--cx-tone-info);}
80
+ .cx-mx-cell.cx-tone-success{color:var(--cx-tone-success);}
81
+ .cx-mx-cell.cx-toned{color:var(--cx-t);}
82
+ .cx-mx-cell.cx-tone-success:not(.cx-mx-attn){color:var(--cx-quiet);}
83
+ .cx-mx-cell.cx-mx-none{color:var(--mx-none);}
84
+ .cx-mx-cell.cx-mx-attn{background:var(--mx-bg,var(--cx-hover-bg));font-weight:600;}
85
+ .cx-mx-attn.cx-tone-danger{--mx-bg:var(--cx-tone-danger-bg);}
86
+ .cx-mx-attn.cx-tone-warning{--mx-bg:var(--cx-tone-warning-bg);}
87
+ .cx-mx-attn.cx-tone-info{--mx-bg:var(--cx-tone-info-bg);}
88
+ .cx-mx-attn.cx-tone-success{--mx-bg:var(--cx-tone-success-bg);}
89
+ .cx-mx-attn.cx-toned{color:var(--cx-t);--mx-bg:var(--cx-t-bg,color-mix(in srgb,var(--cx-t) 12%,var(--cx-surface)));}
90
+ .cx-host[data-cx-theme="dark"] .cx-mx-attn.cx-tone-danger{--mx-bg:color-mix(in srgb,var(--cx-tone-danger-bg) 62%,var(--cx-surface));}
91
+ @media (prefers-color-scheme:dark){.cx-host[data-cx-theme="auto"] .cx-mx-attn.cx-tone-danger{--mx-bg:color-mix(in srgb,var(--cx-tone-danger-bg) 62%,var(--cx-surface));}}
92
+ .cx-mx-cell.cx-mx-self{cursor:default;background:repeating-linear-gradient(135deg,transparent 0 var(--cx-size-4px),var(--mx-line) var(--cx-size-4px) var(--cx-size-5px));}
93
+ .cx-mx-cell.cx-mx-rolled{box-shadow:inset 0 0 0 var(--cx-size-1px) var(--mx-line);}
94
+ .cx-mx-canvas{position:absolute;top:0;cursor:pointer;}
95
+ .cx-mx-cell.cx-mx-focus{z-index:1;background:transparent;border:0;cursor:pointer;}
96
+ .cx-mx-hover{position:absolute;top:0;z-index:1;box-sizing:border-box;width:var(--mx-cell-w);height:100%;pointer-events:none;box-shadow:inset 0 0 0 var(--cx-size-2px) var(--cx-accent);}
97
+ .cx-mx-gridline{color:var(--mx-line);}
98
+ .cx-mx-symbol{width:var(--cx-size-14px);height:var(--cx-size-14px);flex:none;}
99
+ .cx-mx-swatch .cx-mx-symbol{width:var(--cx-size-13px);height:var(--cx-size-13px);}
100
+ .cx-mx-value{overflow:hidden;white-space:nowrap;}
101
+ .cx-mx-foot{position:sticky;bottom:0;z-index:3;width:var(--mx-content-w);background:var(--cx-head-bg);border-top:var(--cx-size-1px) solid var(--cx-line-strong);}
102
+ .cx-mx-foot.cx-mx-raised{box-shadow:0 calc(var(--cx-size-6px) * -1) var(--cx-size-8px) calc(var(--cx-size-6px) * -1) var(--mx-raised);}
103
+ .cx-mx-frow{height:var(--mx-row-h);}
104
+ .cx-mx-foothead{background:var(--cx-head-bg);font-weight:600;}
105
+ .cx-mx-fcell{position:absolute;top:0;bottom:0;box-sizing:border-box;width:var(--mx-cell-w);contain:strict;display:flex;align-items:center;justify-content:center;
106
+ border-inline-end:var(--cx-size-1px) solid var(--mx-line);font-size:var(--cx-size-11px);font-weight:600;font-variant-numeric:tabular-nums;}
107
+ .cx-mx-foot .cx-mx-total{background:var(--cx-head-bg);}
108
+ .cx-matrix :is(.cx-mx-cell,.cx-mx-rowhead,.cx-mx-hcell,.cx-mx-total,.cx-mx-fcell,.cx-mx-corner):focus-visible{outline:var(--cx-size-2px) solid var(--cx-accent);outline-offset:calc(var(--cx-size-2px) * -1);z-index:4;}
109
+ .cx-mx-empty{padding:var(--cx-size-24px);text-align:center;color:var(--cx-muted);border:var(--cx-size-1px) dashed var(--cx-line);border-radius:var(--cx-radius);}
110
+ .cx-mx-tip{position:absolute;z-index:20;box-sizing:border-box;max-width:var(--cx-size-320px);padding:var(--cx-size-8px) var(--cx-size-10px);pointer-events:none;
111
+ background:var(--cx-surface);border:var(--cx-size-1px) solid var(--cx-line-strong);border-radius:var(--cx-radius);font-size:var(--cx-size-13px);
112
+ box-shadow:0 var(--cx-size-4px) var(--cx-size-16px) color-mix(in srgb,var(--cx-shadow-ink) 14%,transparent);}
113
+ .cx-matrix{position:relative;}
114
+ .cx-mx-tiptitle{font-weight:600;margin-bottom:var(--cx-size-4px);}
115
+ .cx-mx-tiplist,.cx-mx-details{display:grid;grid-template-columns:auto 1fr;gap:var(--cx-size-2px) var(--cx-size-10px);margin:0;}
116
+ .cx-mx-tiplist dt,.cx-mx-details dt{color:var(--cx-muted);}
117
+ .cx-mx-tiplist dd,.cx-mx-details dd{margin:0;overflow-wrap:anywhere;}
118
+ .cx-mx-dialog{box-sizing:border-box;width:min(var(--cx-size-420px),calc(100vw - var(--cx-size-32px)));padding:var(--cx-size-16px);color:var(--cx-text);background:var(--cx-surface);
119
+ border:var(--cx-size-1px) solid var(--cx-line-strong);border-radius:var(--cx-radius);}
120
+ .cx-mx-dialog::backdrop{background:color-mix(in srgb,var(--cx-shadow-ink) 35%,transparent);}
121
+ .cx-mx-dialoghead{display:flex;align-items:center;gap:var(--cx-size-10px);margin-bottom:var(--cx-size-12px);}
122
+ .cx-mx-dialogtitle{margin:0;font-size:var(--cx-size-17px);}
123
+ .cx-mx-dialog .cx-mx-button{margin-top:var(--cx-size-16px);}
124
+ .cx-mx-cards{display:grid;align-content:start;gap:var(--cx-size-8px);flex:0 1 auto;min-height:0;max-height:var(--cx-size-100vh);overflow:auto;overscroll-behavior:contain;}
125
+ .cx-mx-cardlist,.cx-mx-cardcells{list-style:none;margin:0;padding:0;display:grid;gap:var(--cx-size-8px);}
126
+ .cx-mx-card{padding:var(--cx-size-10px) var(--cx-size-12px);border:var(--cx-size-1px) solid var(--cx-line);border-radius:var(--cx-radius);background:var(--cx-surface);}
127
+ .cx-mx-cardgroup{padding:var(--cx-size-4px) 0 0;font-size:var(--cx-size-13px);font-weight:600;color:var(--cx-muted);}
128
+ .cx-mx-cardhead{display:flex;align-items:center;justify-content:space-between;gap:var(--cx-size-8px);font-weight:600;}
129
+ .cx-mx-card .cx-mx-total{position:static;width:auto;padding:0;border:0;background:none;}
130
+ .cx-mx-cardcells{gap:var(--cx-size-4px);margin-top:var(--cx-size-6px);}
131
+ .cx-mx-cardcell{display:flex;align-items:center;gap:var(--cx-size-8px);font-size:var(--cx-size-13px);}
132
+ .cx-mx-print{display:none;}
133
+ .cx-mx-phone .cx-mx-input,.cx-mx-phone .cx-mx-button{min-height:var(--cx-size-44px);height:auto;}
134
+ .cx-mx-phone .cx-mx-search{max-width:none;flex-basis:100%;}
135
+ .cx-mx-phone .cx-mx-switch{min-height:var(--cx-size-44px);}
136
+ .cx-mx-phone .cx-mx-rowhead .cx-mx-sub:not(.cx-mx-toggle .cx-mx-sub){display:none;}
137
+ .cx-mx-phone .cx-mx-total{padding:0 var(--cx-size-6px);}
138
+ .cx-mx-phone .cx-mx-summary{margin-inline-start:0;flex-basis:100%;}
139
+ @media print{
140
+ .cx-matrix .cx-mx-bar,.cx-matrix .cx-mx-scroll,.cx-matrix .cx-mx-cards,.cx-matrix .cx-mx-tip{display:none !important;}
141
+ .cx-matrix .cx-mx-print{display:block;}
142
+ .cx-matrix-host{max-height:none !important;}
143
+ .cx-mx-printtable{border-collapse:collapse;font-size:var(--cx-size-11px);}
144
+ .cx-mx-printtable :is(th,td){border:var(--cx-size-1px) solid var(--cx-line);padding:var(--cx-size-2px) var(--cx-size-4px);text-align:center;}
145
+ .cx-mx-printtable th[scope="row"]{text-align:start;}
146
+ .cx-mx-printtable caption{text-align:start;font-weight:600;padding-bottom:var(--cx-size-6px);}
147
+ .cx-mx-printattn{font-weight:700;}
148
+ }
149
+ @media (forced-colors:active){
150
+ .cx-mx-cell.cx-mx-attn{border:var(--cx-size-1px) solid CanvasText;}
151
+ .cx-matrix :is(.cx-mx-cell,.cx-mx-rowhead,.cx-mx-hcell):focus-visible{outline-color:Highlight;}
152
+ }
153
+ @media (prefers-reduced-motion:reduce){.cx-mx-toggle::before{transition:none;}}