@evotecit/canopyx 0.3.16 → 0.3.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CanopyX.Html/Assets/canopyx-board.css +50 -0
- package/CanopyX.Html/Assets/canopyx-board.js +39 -0
- package/CanopyX.Html/Assets/canopyx-buckets.js +15 -0
- package/CanopyX.Html/Assets/canopyx-calculations.css +7 -0
- package/CanopyX.Html/Assets/canopyx-calculations.js +52 -0
- package/CanopyX.Html/Assets/canopyx-calendar-edit.js +3 -3
- package/CanopyX.Html/Assets/canopyx-calendar.css +74 -80
- package/CanopyX.Html/Assets/canopyx-calendar.js +26 -31
- package/CanopyX.Html/Assets/canopyx-cell-range.css +4 -4
- package/CanopyX.Html/Assets/canopyx-cell-range.js +16 -14
- package/CanopyX.Html/Assets/canopyx-changes.css +61 -79
- package/CanopyX.Html/Assets/canopyx-changes.js +18 -15
- package/CanopyX.Html/Assets/canopyx-column-groups.css +5 -1
- package/CanopyX.Html/Assets/canopyx-column-groups.js +15 -9
- package/CanopyX.Html/Assets/canopyx-compare.css +37 -0
- package/CanopyX.Html/Assets/canopyx-compare.js +12 -0
- package/CanopyX.Html/Assets/canopyx-data.js +3 -3
- package/CanopyX.Html/Assets/canopyx-detail-rows.css +4 -4
- package/CanopyX.Html/Assets/canopyx-detail-rows.js +1 -1
- package/CanopyX.Html/Assets/canopyx-editing.css +5 -5
- package/CanopyX.Html/Assets/canopyx-editing.js +2 -2
- package/CanopyX.Html/Assets/canopyx-enhance.js +5 -5
- package/CanopyX.Html/Assets/canopyx-export.js +54 -13
- package/CanopyX.Html/Assets/canopyx-facets.css +32 -22
- package/CanopyX.Html/Assets/canopyx-facets.js +19 -15
- package/CanopyX.Html/Assets/canopyx-filter-editor.css +75 -89
- package/CanopyX.Html/Assets/canopyx-filter-editor.js +20 -16
- package/CanopyX.Html/Assets/canopyx-flow-checks.css +3 -3
- package/CanopyX.Html/Assets/canopyx-flow-checks.js +1 -1
- package/CanopyX.Html/Assets/canopyx-flow-command.css +3 -3
- package/CanopyX.Html/Assets/canopyx-flow-command.js +1 -1
- package/CanopyX.Html/Assets/canopyx-flow-dialog.css +4 -4
- package/CanopyX.Html/Assets/canopyx-flow-dialog.js +1 -1
- package/CanopyX.Html/Assets/canopyx-flow-drafts.css +2 -2
- package/CanopyX.Html/Assets/canopyx-flow-drafts.js +1 -1
- package/CanopyX.Html/Assets/canopyx-flow-entry.css +142 -17
- package/CanopyX.Html/Assets/canopyx-flow-entry.js +5 -5
- package/CanopyX.Html/Assets/canopyx-flow-host.css +2 -2
- package/CanopyX.Html/Assets/canopyx-flow-host.js +1 -1
- package/CanopyX.Html/Assets/canopyx-flow-module.mjs +5 -5
- package/CanopyX.Html/Assets/canopyx-flow-pick.css +4 -4
- package/CanopyX.Html/Assets/canopyx-flow-pick.js +1 -1
- package/CanopyX.Html/Assets/canopyx-flow-preview.css +1 -1
- package/CanopyX.Html/Assets/canopyx-flow-preview.js +1 -1
- package/CanopyX.Html/Assets/canopyx-flow-records.css +2 -2
- package/CanopyX.Html/Assets/canopyx-flow-records.js +1 -1
- package/CanopyX.Html/Assets/canopyx-flow-tasks.css +4 -4
- package/CanopyX.Html/Assets/canopyx-flow-tasks.js +1 -1
- package/CanopyX.Html/Assets/canopyx-flow.css +41 -41
- package/CanopyX.Html/Assets/canopyx-flow.js +1 -1
- package/CanopyX.Html/Assets/canopyx-format-editor.css +9 -9
- package/CanopyX.Html/Assets/canopyx-format-editor.js +2 -2
- package/CanopyX.Html/Assets/canopyx-formatting.css +13 -13
- package/CanopyX.Html/Assets/canopyx-formatting.js +12 -11
- package/CanopyX.Html/Assets/canopyx-forms.css +3 -3
- package/CanopyX.Html/Assets/canopyx-forms.js +1 -1
- package/CanopyX.Html/Assets/canopyx-grid-module.mjs +220 -155
- package/CanopyX.Html/Assets/canopyx-grid-options.css +8 -8
- package/CanopyX.Html/Assets/canopyx-grid-options.js +9 -2
- package/CanopyX.Html/Assets/canopyx-grid.css +285 -150
- package/CanopyX.Html/Assets/canopyx-grid.js +220 -155
- package/CanopyX.Html/Assets/canopyx-grouping.css +23 -16
- package/CanopyX.Html/Assets/canopyx-grouping.js +24 -17
- package/CanopyX.Html/Assets/canopyx-highlight.css +10 -10
- package/CanopyX.Html/Assets/canopyx-highlight.js +1 -1
- package/CanopyX.Html/Assets/canopyx-interactive.css +215 -91
- package/CanopyX.Html/Assets/canopyx-interactive.js +47 -52
- package/CanopyX.Html/Assets/canopyx-labels-de.js +177 -9
- package/CanopyX.Html/Assets/canopyx-labels-es.js +177 -9
- package/CanopyX.Html/Assets/canopyx-labels-fr.js +176 -8
- package/CanopyX.Html/Assets/canopyx-labels-it.js +176 -8
- package/CanopyX.Html/Assets/canopyx-labels-pl.js +176 -8
- package/CanopyX.Html/Assets/canopyx-layouts.css +49 -21
- package/CanopyX.Html/Assets/canopyx-layouts.js +36 -14
- package/CanopyX.Html/Assets/canopyx-link.css +3 -3
- package/CanopyX.Html/Assets/canopyx-link.js +4 -4
- package/CanopyX.Html/Assets/canopyx-links.js +2 -2
- package/CanopyX.Html/Assets/canopyx-live.css +3 -5
- package/CanopyX.Html/Assets/canopyx-live.js +3 -3
- package/CanopyX.Html/Assets/canopyx-matrix.css +32 -39
- package/CanopyX.Html/Assets/canopyx-matrix.js +11 -11
- package/CanopyX.Html/Assets/canopyx-module.mjs +47 -52
- package/CanopyX.Html/Assets/canopyx-office-export.js +2936 -0
- package/CanopyX.Html/Assets/canopyx-pager.css +1 -1
- package/CanopyX.Html/Assets/canopyx-pager.js +1 -1
- package/CanopyX.Html/Assets/canopyx-path.css +45 -0
- package/CanopyX.Html/Assets/canopyx-path.js +28 -0
- package/CanopyX.Html/Assets/canopyx-pivot.css +75 -0
- package/CanopyX.Html/Assets/canopyx-pivot.js +72 -0
- package/CanopyX.Html/Assets/canopyx-plan.css +63 -0
- package/CanopyX.Html/Assets/canopyx-plan.js +71 -0
- package/CanopyX.Html/Assets/canopyx-presenters.js +2 -2
- package/CanopyX.Html/Assets/canopyx-record-panel.css +51 -45
- package/CanopyX.Html/Assets/canopyx-record-panel.js +30 -22
- package/CanopyX.Html/Assets/canopyx-reporting-module.mjs +262 -197
- package/CanopyX.Html/Assets/canopyx-reporting.css +300 -164
- package/CanopyX.Html/Assets/canopyx-reporting.js +262 -197
- package/CanopyX.Html/Assets/canopyx-stack.css +35 -0
- package/CanopyX.Html/Assets/canopyx-stack.js +24 -0
- package/CanopyX.Html/Assets/canopyx-time-slider.css +18 -0
- package/CanopyX.Html/Assets/canopyx-time-slider.js +27 -0
- package/CanopyX.Html/Assets/canopyx-timeline.css +19 -19
- package/CanopyX.Html/Assets/canopyx-timeline.js +6 -5
- package/CanopyX.Html/Assets/canopyx-tree-tools.css +47 -46
- package/CanopyX.Html/Assets/canopyx-tree-tools.js +15 -12
- package/CanopyX.Html/Assets/canopyx-ui-menu.css +41 -0
- package/CanopyX.Html/Assets/canopyx-ui-menu.js +64 -0
- package/CanopyX.Html/Assets/canopyx-ui-navigation.css +73 -0
- package/CanopyX.Html/Assets/canopyx-ui-navigation.js +39 -0
- package/CanopyX.Html/Assets/canopyx-ui-overlays.css +79 -0
- package/CanopyX.Html/Assets/canopyx-ui-overlays.js +45 -0
- package/CanopyX.Html/Assets/canopyx-ui-picker.css +12 -0
- package/CanopyX.Html/Assets/canopyx-ui-picker.js +6 -0
- package/CanopyX.Html/Assets/canopyx-ui-stepper.css +174 -0
- package/CanopyX.Html/Assets/canopyx-ui-stepper.js +48 -0
- package/CanopyX.Html/Assets/canopyx-ui-tabs.css +153 -0
- package/CanopyX.Html/Assets/canopyx-ui-tabs.js +47 -0
- package/CanopyX.Html/Assets/canopyx-values.css +5 -0
- package/CanopyX.Html/Assets/canopyx-values.js +13 -0
- package/CanopyX.Html/Assets/canopyx-view-intents.css +12 -0
- package/CanopyX.Html/Assets/canopyx-view-intents.js +56 -0
- package/CanopyX.Html/Assets/canopyx.css +212 -85
- package/CanopyX.Html/Assets/canopyx.js +38 -26
- package/JavaScript/board.d.ts +30 -0
- package/JavaScript/changes.d.ts +4 -1
- package/JavaScript/column-groups.d.ts +24 -4
- package/JavaScript/facets.d.ts +5 -3
- package/JavaScript/grid.d.ts +161 -17
- package/JavaScript/hosts.d.ts +16 -1
- package/JavaScript/index.d.ts +4 -2
- package/JavaScript/locales/de.mjs +177 -9
- package/JavaScript/locales/es.mjs +177 -9
- package/JavaScript/locales/fr.mjs +176 -8
- package/JavaScript/locales/it.mjs +176 -8
- package/JavaScript/locales/pl.mjs +176 -8
- package/JavaScript/matrix.d.ts +4 -1
- package/JavaScript/path.d.ts +33 -0
- package/JavaScript/pivot.d.ts +135 -0
- package/JavaScript/plan.d.ts +23 -0
- package/JavaScript/protocol.d.ts +18 -3
- package/JavaScript/records.d.ts +4 -0
- package/JavaScript/stack.d.ts +28 -0
- package/JavaScript/time-slider.d.ts +58 -0
- package/JavaScript/ui.d.ts +261 -0
- package/JavaScript/view-intents.d.ts +45 -0
- package/README.md +76 -187
- package/README.nuget.md +63 -87
- package/ThirdParty/OfficeIMO/LICENSE +21 -0
- package/ThirdParty/OfficeIMO/README.md +13 -0
- package/package.json +76 -3
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
(function (global) {
|
|
3
3
|
const labels = Object.freeze({
|
|
4
4
|
gridNoExportColumns: "Żadna widoczna kolumna nie obsługuje eksportu.",
|
|
5
|
+
gridDownloadXlsx: "Skoroszyt Excel (.xlsx)",
|
|
6
|
+
gridDownloadPdf: "PDF",
|
|
7
|
+
gridExportWorkbookHint: "Formatowanie, grupy i sumy",
|
|
8
|
+
gridExportPdfHint: "Raport stronicowany z powtarzanymi nagłówkami",
|
|
9
|
+
gridExportCsvHint: "Wartości tekstowe (.csv)",
|
|
10
|
+
gridExportCopy: "Kopiuj do schowka",
|
|
5
11
|
searchPlaceholder: "Szukaj",
|
|
12
|
+
gridRegexSearch: "Szukaj według wzorca",
|
|
6
13
|
searchResults: "Wyniki wyszukiwania",
|
|
7
14
|
searchResultCount: "Wyniki: {count}",
|
|
8
15
|
searchResultCountOfTotal: "Wyniki: {count} z {total}",
|
|
@@ -117,7 +124,7 @@ const labels = Object.freeze({
|
|
|
117
124
|
gridAllResults: "Wszystkie wyniki",
|
|
118
125
|
gridVisibleRows: "Widoczne wiersze",
|
|
119
126
|
gridAllRows: "Wszystkie wiersze",
|
|
120
|
-
gridDownloadCsv: "
|
|
127
|
+
gridDownloadCsv: "CSV",
|
|
121
128
|
gridCopy: "Kopiuj",
|
|
122
129
|
gridDetails: "Szczegóły rekordu",
|
|
123
130
|
gridCellRangeSelected: "Zaznaczono wiersze: {rows} × kolumny: {columns}",
|
|
@@ -216,7 +223,7 @@ const labels = Object.freeze({
|
|
|
216
223
|
gridGroupMissing: "Brak wartości",
|
|
217
224
|
gridGroupExpand: "Rozwiń grupę",
|
|
218
225
|
gridGroupCollapse: "Zwiń grupę",
|
|
219
|
-
gridSummary: "
|
|
226
|
+
gridSummary: "Suma całkowita",
|
|
220
227
|
gridGroupOrder: "Kolejność grup jest ustalona w raporcie",
|
|
221
228
|
gridAggregateCount: "liczba {value}",
|
|
222
229
|
gridAggregateSum: "suma {value}",
|
|
@@ -351,7 +358,7 @@ const labels = Object.freeze({
|
|
|
351
358
|
gridLiveChanged: "Zmienione wiersze: dodane {added}, zaktualizowane {updated}, usunięte {removed}",
|
|
352
359
|
gridLiveSorted: "Wiersze przeniesiono na miejsca zgodne z sortowaniem.",
|
|
353
360
|
gridLiveRecordRemoved: "Ten rekord został usunięty.",
|
|
354
|
-
gridFacetPanel: "
|
|
361
|
+
gridFacetPanel: "Doprecyzuj",
|
|
355
362
|
gridFacetPanelHide: "Ukryj panel filtrów",
|
|
356
363
|
gridFacetPanelShow: "Pokaż panel filtrów",
|
|
357
364
|
gridFacetShowMore: "Pokaż więcej: {count}",
|
|
@@ -507,11 +514,6 @@ const labels = Object.freeze({
|
|
|
507
514
|
calendarOccurrenceTitle: "Zmień wydarzenie cykliczne",
|
|
508
515
|
calendarOccurrenceReadOnly: "Nie można zapisać tej części serii, ponieważ niektóre wartości są tylko do odczytu.",
|
|
509
516
|
calendarThisEvent: "To wydarzenie",
|
|
510
|
-
calendarEditOccurrence: "Edytuj to wystąpienie",
|
|
511
|
-
calendarRemoveOccurrence: "Usuń to wystąpienie",
|
|
512
|
-
calendarOccurrenceScope: "Zmienia się tylko {date}; pozostałe daty wydarzenia {title} pozostają bez zmian.",
|
|
513
|
-
calendarSharedResources: "{count} {resources}",
|
|
514
|
-
calendarResourceWindow: "{resources} {start}–{end} z {total}",
|
|
515
517
|
calendarThisAndFollowing: "To i następne wydarzenia",
|
|
516
518
|
calendarAllEvents: "Wszystkie wydarzenia",
|
|
517
519
|
calendarSources: "Kalendarze",
|
|
@@ -775,6 +777,172 @@ const labels = Object.freeze({
|
|
|
775
777
|
changeCopyRequest: "Kopiuj żądanie",
|
|
776
778
|
changeFiltered: "Filtry: {filters}",
|
|
777
779
|
changePrintLimit: "Pominięte w wydruku wiersze: {count}.",
|
|
780
|
+
gridPivotFieldOptions: "Opcje pola",
|
|
781
|
+
gridCalculationResultType: "Typ wyniku",
|
|
782
|
+
gridCalculationDivideZero: "Dzielenie przez zero",
|
|
783
|
+
gridCalculationAdd: "Dodaj kolumnę obliczeniową",
|
|
784
|
+
gridCalculationTitle: "Nazwa kolumny",
|
|
785
|
+
gridCalculationId: "Identyfikator kolumny",
|
|
786
|
+
gridCalculationExpression: "Wyrażenie",
|
|
787
|
+
gridCalculationError: "Błąd obliczenia: {error}",
|
|
788
|
+
gridCalculationInvalid: "Sprawdź wyrażenie, odwołania do kolumn i typ wyniku.",
|
|
789
|
+
gridCalculationHelp: "Użyj [columnId], działań arytmetycznych, IF, COALESCE, ROUND, CONCAT, DATEPART lub DATEDIFF.",
|
|
790
|
+
gridCalculationNumber: "Liczba",
|
|
791
|
+
gridCalculationDate: "Data i czas",
|
|
792
|
+
gridPivot: "Tabela przestawna",
|
|
793
|
+
gridPivotRows: "Grupy wierszy",
|
|
794
|
+
gridPivotColumns: "Grupy kolumn",
|
|
795
|
+
gridPivotValues: "Wartości",
|
|
796
|
+
gridPivotFlat: "Pokaż rekordy",
|
|
797
|
+
gridPivotConfigure: "Ustawienia tabeli przestawnej",
|
|
798
|
+
gridPivotOther: "Pozostałe",
|
|
799
|
+
gridPivotLimited: "Widoczne ścieżki kolumn: {shown} z {total}; reszta w grupie Pozostałe. Sumy częściowe obejmują wszystkie pasujące elementy podrzędne.",
|
|
800
|
+
gridPivotColumn: "Wybierz kolumnę",
|
|
801
|
+
gridPivotTopN: "Najwyższe kolumny",
|
|
802
|
+
gridPivotSort: "Kolejność wierszy",
|
|
803
|
+
gridPivotDrill: "Pokaż rekordy dla: {row}, {column}",
|
|
804
|
+
gridPivotReturn: "Wróć do tabeli przestawnej",
|
|
805
|
+
gridPivotInvalid: "Wybierz poprawne osie i co najmniej jedną wartość.",
|
|
806
|
+
gridShowAs: "Pokaż wartości jako",
|
|
807
|
+
gridShowAsValue: "Wartość",
|
|
808
|
+
gridShowAsPercentGrandTotal: "% sumy całkowitej",
|
|
809
|
+
gridShowAsPercentParent: "% sumy grupy nadrzędnej",
|
|
810
|
+
gridShowAsPercentColumn: "% sumy kolumny",
|
|
811
|
+
gridShowAsPercentRow: "% sumy wiersza",
|
|
812
|
+
gridShowAsRunningTotal: "Suma narastająca",
|
|
813
|
+
gridShowAsRank: "Pozycja",
|
|
814
|
+
gridShowAsDifference: "Różnica względem poprzedniej wartości",
|
|
815
|
+
gridShowAsPercentChange: "% zmiany względem poprzedniej wartości",
|
|
816
|
+
gridBucket: "Przedział",
|
|
817
|
+
gridBucketNone: "Dokładne wartości",
|
|
818
|
+
gridBucketDay: "Dzień",
|
|
819
|
+
gridBucketWeek: "Tydzień",
|
|
820
|
+
gridBucketMonth: "Miesiąc",
|
|
821
|
+
gridBucketQuarter: "Kwartał",
|
|
822
|
+
gridBucketYear: "Rok",
|
|
823
|
+
gridBucketHour: "Godzina dnia",
|
|
824
|
+
gridBucketWeekday: "Dzień tygodnia",
|
|
825
|
+
gridBucketWidth: "Szerokość przedziału",
|
|
826
|
+
gridBucketEdges: "Granice przedziałów",
|
|
827
|
+
gridBucketOrigin: "Początek przedziałów",
|
|
828
|
+
gridBucketInvalid: "Podaj poprawne ustawienia przedziałów.",
|
|
829
|
+
boardLane: "Tor",
|
|
830
|
+
boardUnassigned: "Nieprzypisane",
|
|
831
|
+
boardEmpty: "Brak rekordów w tym torze",
|
|
832
|
+
boardWip: "{count} / {limit}",
|
|
833
|
+
boardWipFull: "Tor {lane} osiągnął limit pracy ({limit}).",
|
|
834
|
+
boardMove: "Przenieś do toru",
|
|
835
|
+
boardMoved: "Przeniesiono {title} do {lane}.",
|
|
836
|
+
boardRejected: "Przeniesienie nie zostało zaakceptowane.",
|
|
837
|
+
boardPending: "Oczekiwanie na akceptację przeniesienia…",
|
|
838
|
+
boardPartial: "Wyświetlono pierwsze {count} rekordów. Zawęź filtry, aby zobaczyć pozostałe.",
|
|
839
|
+
boardKeys: "Alt+Lewo lub Alt+Prawo przenosi między torami; Góra i Dół przegląda karty.",
|
|
840
|
+
planMilestone: "Kamień milowy",
|
|
841
|
+
planCritical: "Ścieżka krytyczna",
|
|
842
|
+
planBaseline: "Plan bazowy: {start} – {end}",
|
|
843
|
+
planDependency: "{from} kończy się przed rozpoczęciem {to}",
|
|
844
|
+
planDependencyConflict: "Konflikt zależności z {task}",
|
|
845
|
+
planOverlapConflict: "Nakłada się na {task}",
|
|
846
|
+
planIncomplete: "Pełna sieć zadań jest niedostępna; host musi sprawdzić tę propozycję.",
|
|
847
|
+
planInvalidRange: "Zadanie musi kończyć się w chwili rozpoczęcia lub później.",
|
|
848
|
+
planInvalidResource: "Wybierz zasób zadania.",
|
|
849
|
+
planProposal: "Propozycja {task}: {start} – {end}",
|
|
850
|
+
planMoveHint: "Alt+Lewo lub Alt+Prawo proponuje nową datę; Alt+Góra lub Alt+Dół proponuje zasób.",
|
|
851
|
+
planActual: "Rzeczywiste",
|
|
852
|
+
planPending: "Propozycja oczekuje na hosta",
|
|
853
|
+
planBaselineLabel: "Plan bazowy",
|
|
854
|
+
planDependencies: "Zależności",
|
|
855
|
+
planConflict: "Konflikt",
|
|
856
|
+
calendarEditOccurrence: "Edytuj to wystąpienie",
|
|
857
|
+
calendarRemoveOccurrence: "Usuń to wystąpienie",
|
|
858
|
+
calendarOccurrenceScope: "Zmienia się tylko {date}; pozostałe daty wydarzenia {title} pozostają bez zmian.",
|
|
859
|
+
calendarSharedResources: "{count} {resources}",
|
|
860
|
+
calendarResourceWindow: "{resources} {start}–{end} z {total}",
|
|
861
|
+
viewIntentWords: "Całe słowa",
|
|
862
|
+
viewIntentSubstring: "Tekst zawiera",
|
|
863
|
+
viewIntentPreview: "Proponowane zmiany",
|
|
864
|
+
viewIntentApplied: "Zastosowano zmiany widoku.",
|
|
865
|
+
viewIntentSuperseded: "Widok się zmienił. Ponownie wyświetl podgląd propozycji.",
|
|
866
|
+
viewIntentSearch: "Szukaj: {search}",
|
|
867
|
+
viewIntentSort: "Sortuj według {columns}",
|
|
868
|
+
viewIntentGroup: "Grupuj wiersze według {columns}",
|
|
869
|
+
viewIntentColumns: "Pokaż kolumny: {columns}",
|
|
870
|
+
compareSummary: "Porównanie zbiorów danych",
|
|
871
|
+
compareAdded: "Dodane",
|
|
872
|
+
compareRemoved: "Usunięte",
|
|
873
|
+
compareChanged: "Zmienione",
|
|
874
|
+
compareUnchanged: "Bez zmian",
|
|
875
|
+
compareOnlyChanges: "Tylko zmiany",
|
|
876
|
+
compareColumnChanges: "[one]{column}: {count} zmieniona komórka[few]{column}: {count} zmienione komórki[many]{column}: {count} zmienionych komórek[other]{column}: {count} zmienionych komórek",
|
|
877
|
+
compareChanges: "Zmiany",
|
|
878
|
+
viewIntentClearSearch: "Wyczyść wyszukiwanie",
|
|
879
|
+
viewIntentRemoveGrouping: "Usuń grupowanie",
|
|
880
|
+
viewIntentFlat: "Pokaż rekordy",
|
|
881
|
+
viewIntentAscending: "rosnąco",
|
|
882
|
+
viewIntentDescending: "malejąco",
|
|
883
|
+
viewIntentNotEqual: "nie jest",
|
|
884
|
+
viewIntentGreater: "większe niż",
|
|
885
|
+
viewIntentAtLeast: "co najmniej",
|
|
886
|
+
viewIntentLess: "mniejsze niż",
|
|
887
|
+
viewIntentAtMost: "co najwyżej",
|
|
888
|
+
viewIntentFilter: "Pokaż wiersze, gdzie {column} {operator} {values}",
|
|
889
|
+
viewIntentOnly: "Pokaż tylko {column}: {values}",
|
|
890
|
+
viewIntentPivot: "Wiersze: {rows}; kolumny: {columns}; wartości: {values}",
|
|
891
|
+
viewIntentAllRows: "wszystkie rekordy",
|
|
892
|
+
viewIntentTotals: "sumy",
|
|
893
|
+
viewIntentTuples: "Pokaż pasujące kombinacje {columns}: {values}",
|
|
894
|
+
viewIntentExcludeTuples: "Wyklucz pasujące kombinacje {columns}: {values}",
|
|
895
|
+
viewIntentNoChanges: "Ten widok jest już wybrany.",
|
|
896
|
+
pathEmpty: "Brak ścieżek do wyświetlenia",
|
|
897
|
+
pathSource: "Źródło",
|
|
898
|
+
pathTarget: "Cel",
|
|
899
|
+
pathStep: "Krok {number} z {total}",
|
|
900
|
+
pathCycle: "Cykl",
|
|
901
|
+
pathForeign: "Zewnętrzny",
|
|
902
|
+
pathDisabled: "Wyłączony",
|
|
903
|
+
pathKeys: "Przeglądaj kroki klawiszem Tab lub strzałkami; Enter lub Spacja otwiera rekord.",
|
|
904
|
+
pathPartial: "Wyświetlono {shown} z {total} kroków.",
|
|
905
|
+
stackWinner: "Wynik wybrany",
|
|
906
|
+
stackEnforced: "Wymuszona",
|
|
907
|
+
stackFiltered: "Odfiltrowana",
|
|
908
|
+
stackEmpty: "Brak warstw do wyświetlenia.",
|
|
909
|
+
stackOrder: "Kolejność przetwarzania",
|
|
910
|
+
stackTruncated: "Wyświetlono {shown} z {total} warstw w kolejności przetwarzania; wybrana warstwa jest zawsze uwzględniona.",
|
|
911
|
+
timePlay: "Odtwórz",
|
|
912
|
+
timePause: "Wstrzymaj",
|
|
913
|
+
timePrevious: "Poprzedni stan",
|
|
914
|
+
timeNext: "Następny stan",
|
|
915
|
+
timePosition: "Stan {index} z {count}",
|
|
916
|
+
timeFrame: "Stan z {time}",
|
|
917
|
+
timeReducedMotion: "Automatyczne odtwarzanie jest wyłączone z powodu ograniczenia ruchu. Przeglądaj stany ręcznie.",
|
|
918
|
+
tabsMore: "Więcej",
|
|
919
|
+
tabsMoreSelected: "Więcej: {label}",
|
|
920
|
+
tabsScrollPrevious: "Poprzednie karty",
|
|
921
|
+
tabsScrollNext: "Następne karty",
|
|
922
|
+
tabsSection: "Sekcja",
|
|
923
|
+
tabsPosition: "{current} z {total}",
|
|
924
|
+
tabsPause: "Wstrzymaj",
|
|
925
|
+
tabsPlay: "Odtwórz",
|
|
926
|
+
tabsMotionDisabled: "Automatyczne przełączanie kart jest wyłączone przy ograniczeniu ruchu",
|
|
927
|
+
stepperStepOf: "Krok {current} z {total}",
|
|
928
|
+
stepperBack: "Wstecz",
|
|
929
|
+
stepperNext: "Dalej",
|
|
930
|
+
stepperFinish: "Zakończ",
|
|
931
|
+
stepperSkip: "Pomiń",
|
|
932
|
+
stepperSaveDraft: "Zapisz wersję roboczą",
|
|
933
|
+
stepperAllSteps: "Wszystkie kroki",
|
|
934
|
+
stepperOptional: "Opcjonalny",
|
|
935
|
+
stepperCompleted: "Ukończono",
|
|
936
|
+
stepperSkipped: "Pominięto",
|
|
937
|
+
stepperIssues: "Problemy do rozwiązania: {count}",
|
|
938
|
+
stepperIssue: "1 problem do rozwiązania",
|
|
939
|
+
dialogClose: "Zamknij",
|
|
940
|
+
drawerClose: "Zamknij",
|
|
941
|
+
drawerPrevious: "Poprzedni rekord",
|
|
942
|
+
drawerNext: "Następny rekord",
|
|
943
|
+
stateLoading: "Ładowanie…",
|
|
944
|
+
stateRetry: "Ponów",
|
|
945
|
+
stateDetails: "Szczegóły",
|
|
778
946
|
});
|
|
779
947
|
const staticLabels = Object.freeze({
|
|
780
948
|
overflowNote: "Pokazano {shown} z {total} wierszy.",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/* The Layout menu: radio groups for the mode and the density. */
|
|
2
|
-
.cx-chrome .cx-grid-layout > .cx-grid-panel{display:block;width:var(--cx-size-244px);padding:var(--
|
|
3
|
-
.cx-layout-group{padding:var(--
|
|
4
|
-
.cx-layout-group + .cx-layout-group{border-top:var(--
|
|
5
|
-
.cx-layout-title{padding:0 var(--
|
|
6
|
-
.cx-layout-choice{display:flex;align-items:center;gap:var(--
|
|
2
|
+
.cx-chrome .cx-grid-layout > .cx-grid-panel{display:block;width:var(--cx-size-244px);padding:var(--hfx-space-1-5,6px) var(--hfx-space-2,0.5rem);}
|
|
3
|
+
.cx-layout-group{padding:var(--hfx-space-1,0.25rem) 0;}
|
|
4
|
+
.cx-layout-group + .cx-layout-group{border-top:var(--hfx-border-width,1px) solid var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));margin-top:var(--hfx-space-1,0.25rem);padding-top:var(--hfx-space-2,0.5rem);}
|
|
5
|
+
.cx-layout-title{padding:0 var(--hfx-space-1-5,6px) var(--hfx-space-1,0.25rem);font-size:var(--hfx-type-caption-size,0.75rem);font-weight:700;color:var(--hfx-color-text-secondary,var(--hfx-color-text-muted,light-dark(#626770,#8f949d)));}
|
|
6
|
+
.cx-layout-choice{display:flex;align-items:center;gap:var(--hfx-space-2,0.5rem);min-height:var(--cx-size-32px);padding:0 var(--hfx-space-1-5,6px);border-radius:var(--hfx-radius-sm,4px);cursor:pointer;}
|
|
7
7
|
.cx-layout-choice:hover{background:var(--hfx-color-hover,light-dark(#f5f5f5,#232529));}
|
|
8
8
|
.cx-layout-choice input{flex:none;width:var(--cx-size-16px);height:var(--cx-size-16px);margin:0;accent-color:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));}
|
|
9
|
-
.cx-layout-choice:has(input:focus-visible){outline:var(--hfx-focus-width,2px) solid var(--hfx-color-focus-ring,light-dark(#02726a,#37c9b8));outline-offset:calc(-1 * var(--
|
|
9
|
+
.cx-layout-choice:has(input:focus-visible){outline:var(--hfx-focus-width,2px) solid var(--hfx-color-focus-ring,light-dark(#02726a,#37c9b8));outline-offset:calc(-1 * var(--hfx-space-0-5,2px));}
|
|
10
10
|
.cx-chrome.cx-phone .cx-grid-layout > summary{width:var(--cx-size-44px);font-size:0;padding:0;}
|
|
11
11
|
.cx-chrome.cx-phone .cx-layout-choice{min-height:var(--cx-size-44px);}
|
|
12
12
|
.cx-layouts:not(.cx-data-grid)[data-cx-density="compact"]{}
|
|
@@ -14,35 +14,63 @@
|
|
|
14
14
|
.cx-layouts:not(.cx-data-grid)[data-cx-layout="scroll"] .cx-hcell:first-child,.cx-layouts:not(.cx-data-grid)[data-cx-layout="scroll"] .cx-row > .cx-tree{position:sticky;left:0;z-index:1;}
|
|
15
15
|
.cx-layouts:not(.cx-data-grid)[data-cx-layout="scroll"] .cx-hcell:first-child{z-index:2;background:var(--hfx-table-header-background,var(--hfx-color-surface-sunken,light-dark(#f7f8f9,#111317)));}
|
|
16
16
|
.cx-layouts:not(.cx-data-grid)[data-cx-layout="scroll"] .cx-row > .cx-tree{background:inherit;}
|
|
17
|
-
.cx-data-grid[data-cx-layout="cards"] .cx-grid{overflow-x:hidden;}
|
|
17
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-grid{overflow-x:hidden;overflow-anchor:none;}
|
|
18
18
|
.cx-data-grid[data-cx-layout="cards"] :is(.cx-canvas,.cx-head){width:100% !important;min-width:0;}
|
|
19
19
|
.cx-data-grid[data-cx-layout="cards"] .cx-head{display:none;}
|
|
20
|
-
.cx-chrome .cx-grid-sort > .cx-grid-panel{display:block;width:var(--cx-size-280px);padding:var(--
|
|
21
|
-
.cx-sort-list{display:flex;flex-direction:column;gap:var(--
|
|
22
|
-
.cx-grid-sort .cx-grid-selection-controls{padding:var(--
|
|
23
|
-
.cx-sort-choice{display:flex;align-items:center;gap:var(--
|
|
20
|
+
.cx-chrome .cx-grid-sort > .cx-grid-panel{display:block;width:var(--cx-size-280px);padding:var(--hfx-space-1-5,6px) var(--hfx-space-2,0.5rem);}
|
|
21
|
+
.cx-sort-list{display:flex;flex-direction:column;gap:var(--hfx-space-0-5,2px);}
|
|
22
|
+
.cx-grid-sort .cx-grid-selection-controls{padding:var(--hfx-space-1,0.25rem) var(--hfx-space-1-5,6px) var(--hfx-space-2,0.5rem);margin-bottom:var(--hfx-space-1-5,6px);border-bottom:var(--hfx-border-width,1px) solid var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));}
|
|
23
|
+
.cx-sort-choice{display:flex;align-items:center;gap:var(--hfx-space-1,0.25rem);min-height:var(--cx-size-32px);}
|
|
24
24
|
.cx-chrome .cx-sort-choice .cx-sort-column{flex:1;min-width:0;justify-content:start;border:0;border-radius:var(--hfx-radius-sm,4px);background:transparent;overflow:hidden;text-overflow:ellipsis;}
|
|
25
|
-
.cx-chrome .cx-sort-choice span.cx-sort-column{padding:0 var(--cx-size-11px);color:var(--hfx-color-text-muted,light-dark(#626770,#8f949d));}
|
|
25
|
+
.cx-chrome .cx-sort-choice span.cx-sort-column{padding:0 var(--cx-size-11px);color:var(--hfx-color-text-secondary,var(--hfx-color-text-muted,light-dark(#626770,#8f949d)));}
|
|
26
26
|
.cx-chrome .cx-sort-choice .cx-sort-column[aria-pressed="true"]{color:var(--hfx-color-accent-text,light-dark(#02726a,#37c9b8));background:var(--hfx-color-accent-subtle,light-dark(#e7f1f1,#1b3435));font-weight:600;}
|
|
27
27
|
.cx-chrome .cx-sort-choice .cx-sort-menu{flex:none;border:0;background:transparent;color:var(--hfx-color-text-secondary,light-dark(#4d525b,#b0b4bc));}
|
|
28
28
|
.cx-chrome.cx-phone .cx-grid-sort > summary{width:var(--cx-size-44px);font-size:0;padding:0;}
|
|
29
29
|
.cx-chrome.cx-phone .cx-sort-choice{min-height:var(--cx-size-44px);}
|
|
30
30
|
.cx-chrome.cx-phone .cx-sort-choice .cx-button{min-height:var(--cx-size-44px);}
|
|
31
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-grid{background:color-mix(in srgb,var(--hfx-color-surface-card,var(--hfx-color-surface,light-dark(#ffffff,#16181c))) 96%,var(--hfx-color-text-primary,var(--hfx-color-text,light-dark(#16181c,#f2f3f5))));}
|
|
32
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-row:not(.cx-grid-group):not(.cx-detail-row){
|
|
33
|
+
width:var(--cx-card-width) !important;min-width:0;height:var(--cx-card-height) !important;
|
|
34
|
+
border:var(--hfx-border-width,1px) solid var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));border-radius:var(--hfx-radius-container,var(--hfx-radius-lg,10px));background:var(--hfx-color-surface-card,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));
|
|
35
|
+
box-shadow:var(--hfx-elevation-1,0 1px 2px rgba(22,24,28,.06));
|
|
36
|
+
}
|
|
31
37
|
.cx-data-grid[data-cx-layout="cards"] .cx-row:not(.cx-status):not(.cx-grid-group){
|
|
32
|
-
|
|
33
|
-
grid-auto-flow:row
|
|
38
|
+
display:grid;grid-template-columns:repeat(var(--cx-card-cols,1),minmax(0,1fr));grid-template-rows:var(--cx-card-title);grid-auto-rows:var(--cx-card-field);
|
|
39
|
+
grid-auto-flow:row;align-content:start;column-gap:var(--cx-size-16px);row-gap:var(--cx-card-gap);padding:var(--cx-card-pad);
|
|
34
40
|
}
|
|
35
|
-
.cx-data-grid[data-cx-layout="cards"] .cx-row:is(.cx-
|
|
41
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-row:is(.cx-grid-group,.cx-detail-row){width:100% !important;}
|
|
36
42
|
.cx-data-grid[data-cx-layout="cards"] .cx-row:not(.cx-status):not(.cx-grid-group) > .cx-cell{
|
|
37
43
|
width:auto !important;height:auto;min-width:0;padding:0;position:relative !important;left:auto !important;right:auto !important;box-shadow:none;background:transparent;
|
|
38
|
-
flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--
|
|
44
|
+
flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--hfx-space-0-5,2px);text-align:left;
|
|
45
|
+
}
|
|
46
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-row:not(.cx-status):not(.cx-grid-group) > .cx-cell:first-child{
|
|
47
|
+
grid-column:1/-1;height:var(--cx-card-title);flex-direction:row;align-items:center;justify-content:flex-start;gap:var(--hfx-space-1-5,6px);font-weight:var(--hfx-weight-semibold,600);font-size:var(--hfx-type-heading-size,0.9375rem);
|
|
48
|
+
}
|
|
49
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-cell:is([data-cx-card="wide"],[data-cx-card="pill"],[data-cx-card="footer"]){grid-column:1/-1;}
|
|
50
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-cell[data-cx-label]::before{
|
|
51
|
+
content:attr(data-cx-label) / "";display:block;flex:none;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
|
|
52
|
+
font-size:var(--hfx-type-caption-size,0.75rem);font-weight:var(--hfx-weight-semibold,600);line-height:var(--hfx-type-caption-line-height,1.35);color:var(--hfx-color-text-secondary,var(--hfx-color-text-muted,light-dark(#626770,#8f949d)));
|
|
39
53
|
}
|
|
40
|
-
.cx-data-grid[data-cx-layout="cards"] .cx-row
|
|
41
|
-
|
|
42
|
-
|
|
54
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-row > .cx-cell[data-cx-card="footer"]{
|
|
55
|
+
flex-direction:row;justify-content:flex-start;gap:var(--hfx-space-1-5,6px);border-top:var(--hfx-border-width,1px) solid var(--hfx-color-surface-line,var(--hfx-color-border,light-dark(#e2e4e7,#272a30)));color:var(--hfx-color-text-secondary,var(--hfx-color-text-muted,light-dark(#626770,#8f949d)));font-size:var(--hfx-type-caption-size,0.75rem);
|
|
56
|
+
}
|
|
57
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-cell[data-cx-card="pill"] :is(.p-pill,.p-state){border-radius:var(--hfx-radius-pill,999px);max-width:100%;overflow:hidden;text-overflow:ellipsis;}
|
|
58
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-cell[data-cx-card="pill"] .p-state{padding:var(--hfx-space-0-5,2px) var(--hfx-space-2,0.5rem);background:color-mix(in srgb,currentColor 8%,var(--hfx-color-surface-card,var(--hfx-color-surface,light-dark(#ffffff,#16181c))));}
|
|
43
59
|
.cx-data-grid[data-cx-layout="cards"] .cx-cell > :is(.cx-text,.cx-presenter-text){max-width:100%;}
|
|
60
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-card-templated > :not(.cx-card-slot):not(.cx-grid-row-select){display:none;}
|
|
61
|
+
.cx-card-slot{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:pre;}
|
|
62
|
+
.cx-page-header-space{flex:none;}
|
|
63
|
+
.cx-page-header-space[hidden]{display:none;}
|
|
64
|
+
.cx-data-grid[data-cx-page-header] .cx-grid{contain:size style;}
|
|
65
|
+
@media print{
|
|
66
|
+
.cx-data-grid[data-cx-page-header] .cx-head{position:static !important;clip-path:none !important;}
|
|
67
|
+
.cx-page-header-space{display:none;}
|
|
68
|
+
}
|
|
44
69
|
.cx-data-grid[data-cx-layout="cards"] .cx-row:not(.cx-status):not(.cx-grid-group) > .cx-cell:first-child::before{content:none;}
|
|
45
|
-
.cx-data-grid[data-cx-layout="cards"] .cx-row[aria-selected="true"]{box-shadow:inset var(--
|
|
70
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-row[aria-selected="true"]{box-shadow:inset var(--hfx-indicator-width,2px) 0 0 var(--hfx-color-accent,light-dark(#11776f,#37c9b8));}
|
|
46
71
|
@media (forced-colors:active){
|
|
47
|
-
.cx-data-grid[data-cx-layout="cards"] .cx-row[aria-selected="true"]{forced-color-adjust:none;box-shadow:
|
|
72
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-row[aria-selected="true"]{forced-color-adjust:none;box-shadow:none;outline:var(--hfx-focus-width,2px) solid Highlight;outline-offset:calc(-1 * var(--hfx-focus-width,2px));}
|
|
48
73
|
}
|
|
74
|
+
.cx-data-grid[data-cx-page-header] .cx-head{box-shadow:inset 0 calc(-1 * var(--hfx-border-width,1px)) 0 var(--hfx-color-border-strong,light-dark(#cdd0d5,#363a42));}
|
|
75
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-row:not(.cx-status):not(.cx-grid-group):hover{background:var(--hfx-color-hover,light-dark(#f5f5f5,#232529));}
|
|
76
|
+
.cx-data-grid[data-cx-layout="cards"] .cx-row[aria-selected="true"]{background:var(--hfx-color-accent-subtle,light-dark(#e7f1f1,#1b3435));border-color:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));}
|
|
@@ -1,31 +1,53 @@
|
|
|
1
|
-
(function(global){"use strict";const installed=new WeakSet();const part={version:"
|
|
2
|
-
function
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
function
|
|
1
|
+
(function(global){"use strict";const installed=new WeakSet();const part={version:"90267e35e7edf3a4",install(context){if(installed.has(context.VIEW_MODES))return;const{VIEW_MODES,TreeGrid,h,setText,fill,numberFormat,foldText,cellText,cellValue,isCellObject,setAttr,toneOf,watchFlyout,densityRowHeight,layoutAnchor,layoutRows,layoutApplyTree,MAX_PROTOCOL_INTEGER,LAYOUT_DENSITIES,plural,svgIcon}=context;const CARD_METRICS={compact:{pad:12,field:36,gap:8,title:28},default:{pad:16,field:40,gap:10,title:30},comfortable:{pad:20,field:44,gap:12,title:32}};const CARD_MIN=280,CARD_GUTTER=16,CARD_COLUMN_GAP=16,CARD_WIDE=["longText","tags","list"];function cardWide(column){return!!column.wrap||!!column.flex||CARD_WIDE.includes(column.presenter?.kind)}
|
|
2
|
+
function cardRole(column,index,columns){if(!index)return "title";if(["enum","state"].includes(column.presenter?.kind))return "pill";if(index===columns.length-1&&column.kind==="datetime")return "footer";return cardWide(column)?"wide":"field"}
|
|
3
|
+
VIEW_MODES.cardRole=cardRole;function cardGeometry(view){const metrics={...CARD_METRICS[view.density]},available=Math.max(0,(view.grid.clientWidth||view.host.clientWidth)- 2*CARD_GUTTER);const lanes=view.rowProjection?1:Math.max(1,Math.floor((available+CARD_COLUMN_GAP)/ (CARD_MIN + CARD_COLUMN_GAP)));
|
|
4
|
+
const width=Math.max(0,(available -(lanes-1)*CARD_COLUMN_GAP)/ lanes), fields = (view.cols || []).slice(1);
|
|
5
|
+
const columns=width-2*metrics.pad>=264?2:1,span=columns;const font=parseFloat(getComputedStyle(view.grid).fontSize),clampLines=column=>Math.min(column.maxLines??2,2);if(fields.some(column=>column.wrap))metrics.field=Math.max(metrics.field,Math.ceil(11.5*1.35+1+font*1.4*Math.max(...fields.filter(column=>column.wrap).map(clampLines))));if(view.cols?.[0]?.wrap)metrics.title=Math.max(metrics.title,Math.ceil((font+1)*1.4*clampLines(view.cols[0])));let lines=0,used=0;fields.forEach((column,index)=>{const role=cardRole(column,index+1,view.cols),size=role==="field"?1:columns;if(used&&used+size>columns){lines++;used=0}
|
|
6
|
+
used +=size;if(used===columns){lines++;used=0}});if(used)lines++;const height=2*metrics.pad+metrics.title+lines*(metrics.field+metrics.gap)+ 2;return{columns,span,lanes,width,metrics,height,pitch:height+CARD_COLUMN_GAP}}
|
|
7
|
+
function cardStyle(view,geometry){const style=view.host.style,{metrics}=geometry;style.setProperty("--cx-card-cols",String(geometry.columns));style.setProperty("--cx-card-span",String(geometry.span));style.setProperty("--cx-card-pad",metrics.pad+"px");style.setProperty("--cx-card-field",metrics.field+"px");style.setProperty("--cx-card-gap",metrics.gap+"px");style.setProperty("--cx-card-title",metrics.title+"px");style.setProperty("--cx-card-width",geometry.width+"px");style.setProperty("--cx-card-height",geometry.height+"px");view.cardGeometry=geometry;cardMinHeight(view)}
|
|
8
|
+
function cardMinHeight(view){const count=view.rowProjection?view.rowProjection.rowCount():Math.max(0,view.rowBounds().last-view.pageOffset+1);if(!count&&view.fitEmpty)return;const bands=Math.ceil(count / view.cardGeometry.lanes), chrome = [...view.host.children].reduce((height, child) => height + (child === view.grid ? 0 : child.offsetHeight), 2);
|
|
9
|
+
view.host.style.setProperty("--cx-min-h",chrome+Math.min(2,Math.max(1,bands))*view.cardGeometry.pitch+CARD_GUTTER+"px")}
|
|
10
|
+
function cardTotal(view){const bounds=view.rowBounds(),count=Math.max(0,bounds.last-bounds.first+1);return count?Math.ceil(count / view.cardGeometry.lanes) * view.rowH + CARD_GUTTER : 0;
|
|
11
|
+
}
|
|
12
|
+
function layoutCardRows(view,anchor){const ownedFocus=view.canvas.contains(document.activeElement);if(view.layoutMode==="cards"&&!view.rowProjection){for(const row of[...view.rowCache.values(),...view.placeholders.values()])row.hpx=view.rowH;view.total=cardTotal(view);view.syncScrollRange(anchor?view.rowTop(anchor.index)+ anchor.share*view.rowH:0);view.render()}else layoutRows(view,anchor);if(ownedFocus)layoutKeepFocus(view)}
|
|
13
|
+
function layoutKeepFocus(view){if(!view.focused||!view.canvas.contains(document.activeElement))return;cancelAnimationFrame(view.cardFocusFrame);view.cardFocusFrame=requestAnimationFrame(()=>{if(view.destroyed||!view.canvas.contains(document.activeElement))return;const rows=view.rowProjection||view,index=rows.indexOf(view.focused);if(index>=0){view.revealGridRow(view.focused,index,rows);view.render()}})}
|
|
14
|
+
function layoutApplyGrid(view,mode,anchor){if(mode==="cards"){if(view.cardAutoRows===undefined){view.cardAutoRows=view.autoRows;view.autoRows=false}}
|
|
8
15
|
else if(view.cardAutoRows!==undefined){view.autoRows=view.cardAutoRows;view.cardAutoRows=undefined;view.rowOffsets=null}
|
|
9
16
|
view.fitFont=null;view.fitKey=null;view.layout=(view.layout||0)+ 1;view.version++;view.layoutApplying=true;try{view.buildHeader();view.syncColumnControls()}finally{view.layoutApplying=false}
|
|
10
|
-
if(mode==="cards"){const geometry=cardGeometry(view);cardStyle(view,geometry);view.rowH=geometry.
|
|
11
|
-
else view.rowH=densityRowHeight(view,view.density);
|
|
12
|
-
function layoutApply(view,mode,density){const active=document.activeElement,held=view.canvas.contains(active)?active:null;const cell=held?.closest(".cx-cell"),row=view.focused,column=cell&&view.cols[view.rowCells(cell.parentNode).indexOf(cell)]?.id;view.layoutMode=mode;view.density=density;view.host.setAttribute("data-cx-density",density);if(mode==="fit")view.host.removeAttribute("data-cx-layout");else view.host.setAttribute("data-cx-layout",mode);view.host.style.setProperty("--cx-row-h",densityRowHeight(view,density)+ "px");if(view.kind==="grid")layoutApplyGrid(view,mode);else layoutApplyTree(view);if(held&&row&&view.rendered.get(row)){const at=column?view.cols.findIndex(item=>item.id===column):-1;if(at>=0)view.focusCell(row,at,null);else view.rendered.get(row).focus({preventScroll:true})}}
|
|
17
|
+
if(mode==="cards"){const geometry=cardGeometry(view);cardStyle(view,geometry);view.rowH=geometry.pitch}
|
|
18
|
+
else view.rowH=densityRowHeight(view,view.density);layoutCardRows(view,anchor);view.syncPinnedShadows?.()}
|
|
19
|
+
function layoutApply(view,mode,density){const active=document.activeElement,held=view.canvas.contains(active)?active:null,anchor=view.kind==="grid"?layoutAnchor(view):null;const cell=held?.closest(".cx-cell"),row=view.focused,column=cell&&view.cols[view.rowCells(cell.parentNode).indexOf(cell)]?.id;view.layoutMode=mode;view.density=density;view.host.setAttribute("data-cx-density",density);if(mode==="fit")view.host.removeAttribute("data-cx-layout");else view.host.setAttribute("data-cx-layout",mode);view.host.style.setProperty("--cx-row-h",densityRowHeight(view,density)+ "px");if(view.kind==="grid")layoutApplyGrid(view,mode,anchor);else layoutApplyTree(view);if(held&&row&&view.rendered.get(row)){const at=column?view.cols.findIndex(item=>item.id===column):-1;if(at>=0)view.focusCell(row,at,null);else view.rendered.get(row).focus({preventScroll:true})}}
|
|
20
|
+
function cardTemplateSlot(view,row,column,slot){const templates=view.view.cardTemplate;if(!templates||!Object.hasOwn(templates,column.id))return;const text=templates[column.id].replace(/\{([^{}]+)\}/g, (_, id) => {
|
|
21
|
+
const definition=view.columns.find(item=>item.id===id);return cellText(row.h.cells[id],definition,view.fmt)});slot.cell.classList.add("cx-card-templated");const content=slot.cardTemplateContent||=h("span","cx-card-slot");if(content.parentNode!==slot.cell)slot.cell.appendChild(content);const check=slot.cell.querySelector(".cx-grid-row-select");if(check&&check.parentNode!==slot.cell)slot.cell.prepend(check);setText(content,text);content.title=text}
|
|
13
22
|
const LAYOUT_ICON='<rect x="4" y="4" width="16" height="7" rx="1.5"/><rect x="4" y="13" width="16" height="7" rx="1.5"/>';let layoutSeq=0;function layoutGroup(view,legend,name,choices,current,choose){const group=h("div","cx-layout-group"),title=h("div","cx-layout-title");title.id=name+"-title";group.setAttribute("role","radiogroup");group.setAttribute("aria-labelledby",title.id);setText(title,legend);group.appendChild(title);for(const[value,text]of choices){const label=h("label","cx-layout-choice"),input=h("input");input.type="radio";input.name=name;input.value=value;input.checked=value===current;input.addEventListener("change",()=>{if(input.checked)choose(value)});label.append(input,document.createTextNode(text));group.appendChild(label)}
|
|
14
23
|
return group}
|
|
15
24
|
function layoutModeText(view,mode){return view.labels[mode==="fit"?"layoutFit":mode==="scroll"?"layoutScroll":"layoutCards"]}
|
|
16
25
|
function layoutDensityText(view,density){return view.labels[density==="compact"?"layoutCompact":density==="comfortable"?"layoutComfortable":"layoutNormal"]}
|
|
17
26
|
function layoutMenu(view){if(view.tools.layout===false||typeof view.controlPanel!=="function")return;const{details,panel}=view.controlPanel(view.labels.layoutMenu,"cx-grid-layout"),id=view.id+"-layout-" + ++layoutSeq;const icon=details.firstChild.querySelector("svg");if(icon)icon.replaceWith(svgIcon(LAYOUT_ICON));const choose=change=>Promise.resolve().then(()=>VIEW_MODES.setLayout(view,change)).catch(error=>view.emit("error",{error}));const render=()=>{const options=view.layoutOptions;if(panel.firstChild){for(const input of panel.querySelectorAll("input"))input.checked=input.value===view.layoutMode||input.value===view.density;return}
|
|
18
27
|
panel.replaceChildren(...[options.modes.length>1&&layoutGroup(view,view.labels.layoutMenu,id+"-mode",options.modes.map(mode=>[mode,layoutModeText(view,mode)]),view.layoutMode,mode=>choose({mode})),layoutGroup(view,view.labels.layoutDensity,id+"-density",LAYOUT_DENSITIES.map(density=>[density,layoutDensityText(view,density)]),view.density,density=>choose({density}))].filter(Boolean))};render();view.layoutMenu={details,render};const anchor=view.toolbar.querySelector(".cx-grid-views")||view.spacer;if(anchor&&anchor.parentNode===view.toolbar)view.toolbar.insertBefore(details,anchor)}
|
|
19
|
-
VIEW_MODES.layoutsStart=view=>{if(
|
|
28
|
+
VIEW_MODES.layoutsStart=view=>{if(view.layoutOptions&&!view.layoutMenu)layoutMenu(view);if(view.layoutOptions&&!view.sortMenu)sortMenu(view);if(view.kind==="grid"&&view.view.stickyHeader)pageHeaderStart(view);if(view.layoutStarted)return;view.layoutStarted=true;view.host.classList.add("cx-layouts");view.lifetime.signal.addEventListener("abort",()=>{cancelAnimationFrame(view.cardFocusFrame);view.host.classList.remove("cx-layouts");for(const name of["cols","span","pad","field","gap","title","width","height"])view.host.style.removeProperty("--cx-card-"+name)},{once:true});view.host.setAttribute("data-cx-density",view.density);if(view.layoutMode!=="fit"||view.kind==="grid"&&view.density!==view.declaredDensity)layoutApply(view,view.layoutMode,view.density)};VIEW_MODES.refreshCardDensity=view=>{const anchor=layoutAnchor(view),geometry=cardGeometry(view);cardStyle(view,geometry);view.rowH=geometry.pitch;view.version++;layoutCardRows(view,anchor)};VIEW_MODES.setLayout=(view,change)=>{if(!change||typeof change!=="object"||Array.isArray(change)||Object.keys(change).some(key=>!["mode","density"].includes(key))||
|
|
20
29
|
change.mode!==undefined&&!view.layoutOptions.modes.includes(change.mode)||change.density!==undefined&&!LAYOUT_DENSITIES.includes(change.density))
|
|
21
30
|
throw new Error("CanopyX: setLayout takes a mode the view allows and a density.");if(!view.layoutStarted)VIEW_MODES.layoutsStart(view);const mode=change.mode??view.layoutMode,density=change.density??view.density;if(mode!==view.layoutMode||density!==view.density){layoutApply(view,mode,density);view.layoutMenu?.render();view.sortMenu?.sync();if(view.live){setText(view.live,"");setText(view.live,fill(view.labels.layoutChanged,{mode:layoutModeText(view,mode),density:layoutDensityText(view,density)}))}
|
|
22
31
|
view.stateChanged();view.emit("layout",{mode,density})}
|
|
23
|
-
return Promise.resolve(view.getLayout())};if(VIEW_MODES.DataGrid){const proto=VIEW_MODES.DataGrid.prototype,paint=proto.fillRow,widths=proto.applyWidths;proto.
|
|
24
|
-
|
|
32
|
+
return Promise.resolve(view.getLayout())};if(VIEW_MODES.DataGrid){const proto=VIEW_MODES.DataGrid.prototype,paint=proto.fillRow,widths=proto.applyWidths;const rowTop=proto.rowTop,rowAt=proto.rowAt,renderPass=proto.renderPass,pageStep=proto.gridPageStep;const tiled=view=>view.layoutMode==="cards"&&view.cardGeometry&&!view.rowProjection;proto.rowTop=function(index){if(!tiled(this))return rowTop.call(this,index);return CARD_GUTTER+Math.floor((index-this.pageOffset)/ this.cardGeometry.lanes) * this.rowH;
|
|
33
|
+
};proto.rowAt=function(top){if(!tiled(this))return rowAt.call(this,top);const bounds=this.rowBounds();return Math.max(bounds.first,Math.min(bounds.last,bounds.first+Math.max(0,Math.floor((top-CARD_GUTTER)/ this.rowH)) * this.cardGeometry.lanes));
|
|
34
|
+
};proto.gridPageStep=function(row,direction,...args){if(!tiled(this))return pageStep.call(this,row,direction,...args);return row._ri+direction*this.cardGeometry.lanes*Math.max(1,Math.floor((this.grid.clientHeight-this.head.offsetHeight)/ this.rowH));
|
|
35
|
+
};proto.renderPass=function(...args){const cards=this.layoutMode==="cards"&&this.cardGeometry;if(cards&&!!this.rowProjection!==!!this.cardProjection){const geometry=cardGeometry(this);if(geometry.lanes!==this.cardGeometry.lanes||geometry.height!==this.cardGeometry.height){cardStyle(this,geometry);this.rowH=geometry.pitch;this.layout=(this.layout||0)+ 1;this.version++}
|
|
36
|
+
this.cardProjection=!!this.rowProjection}
|
|
37
|
+
const tile=tiled(this),viewport=this.viewportHeight;if(cards)cardMinHeight(this);if(tile){const total=cardTotal(this);if(this.total!==total){this.total=total;this.syncScrollRange(this.logicalTop())}
|
|
38
|
+
this.viewportHeight=(viewport??this.grid.clientHeight-this.head.offsetHeight)+ this.rowH}
|
|
39
|
+
try{return renderPass.apply(this,args)}
|
|
40
|
+
finally{this.viewportHeight=viewport;for(const[row,element]of this.rendered){const lane=tile?(row._ri-this.pageOffset)%this.cardGeometry.lanes:0;element.style.left=cards&&!row.group&&!row.status?CARD_GUTTER+lane*(this.cardGeometry.width+CARD_COLUMN_GAP)+ "px":"";if(cards&&tile&&row.status){element.style.left=CARD_GUTTER+lane*(this.cardGeometry.width+CARD_COLUMN_GAP)+ "px";element.style.width=this.cardGeometry.width+"px"}}}};proto.fillRow=function(element,row){paint.call(this,element,row);if(this.layoutMode!=="cards"||!element._cells||row.status||row.group)return;element._cells.forEach((slot,index)=>{const column=this.cols[index],cell=slot&&slot.cell;if(!column||!cell)return;const label=index?column.title:null,wide=cardRole(column,index,this.cols);if((cell.getAttribute("data-cx-label")??null)!==label){if(label===null)cell.removeAttribute("data-cx-label");else cell.setAttribute("data-cx-label",label)}
|
|
41
|
+
if((cell.getAttribute("data-cx-card")??null)!==wide){if(wide)cell.setAttribute("data-cx-card",wide);else cell.removeAttribute("data-cx-card")}
|
|
42
|
+
cardTemplateSlot(this,row,column,slot)})};proto.applyWidths=function(...args){const result=widths.apply(this,args);if(this.layoutMode==="cards"&&!this.layoutApplying&&this.cols&&this.sized){const anchor=layoutAnchor(this),previous=this.cardGeometry,geometry=cardGeometry(this);cardStyle(this,geometry);if(geometry.pitch!==this.rowH||geometry.lanes!==previous?.lanes||geometry.width!==previous?.width){this.rowH=geometry.pitch;this.layout=(this.layout||0)+ 1;this.version++;layoutCardRows(this,anchor)}
|
|
43
|
+
layoutKeepFocus(this)}
|
|
25
44
|
return result}}
|
|
26
45
|
const SORT_ICON='<path d="M8 5v14M4.5 15.5 8 19l3.5-3.5M16 19V5M12.5 8.5 16 5l3.5 3.5"/>';function sortMenuRender(view,panel){const query=view.acceptedQuery,sorts=query?query.sort:[],parts=[];if(view.selectionControls)parts.push(view.selectionControls);const list=h("div","cx-sort-list");list.setAttribute("role","group");list.setAttribute("aria-label",view.labels.layoutSort);for(const column of view.cols||[]){if(!column.sortable&&view.tools.columnMenus===false)continue;const row=h("div","cx-sort-choice"),at=sorts.findIndex(sort=>sort.column===column.id),sort=sorts[at];if(column.sortable){const button=h("button","cx-button cx-sort-column"),arrow=sort?sort.direction==="asc"?" \u2191":" \u2193":"";button.type="button";setText(button,column.title+arrow +(sort&&sorts.length>1?" " +(at+1):""));button.setAttribute("aria-pressed",String(!!sort));button.setAttribute("aria-label",column.title +(sort?", "+view.labels[sort.direction==="asc"?"gridSortAscending":"gridSortDescending"]:""));button.addEventListener("click",event=>view.querySortHeader(column.id,event));row.appendChild(button)}else{const title=h("span","cx-sort-column");setText(title,column.title);row.appendChild(title)}
|
|
27
|
-
if(view.tools.columnMenus!==false&&typeof view.openColumnMenu==="function"){const menu=h("button","cx-button icon cx-sort-menu");menu.type="button";menu.setAttribute("aria-label",fill(view.labels.gridColumnMenu,{column:column.title}));menu.setAttribute("aria-haspopup","menu");menu.appendChild(document.createTextNode("\u22ef"));menu.addEventListener("click",()=>view.openColumnMenu(column.id,menu));row.appendChild(menu)}
|
|
46
|
+
if(view.tools.columnMenus!==false&&typeof view.openColumnMenu==="function"){const menu=h("button","cx-button icon cx-sort-menu");menu.type="button";menu.dataset.cxSortColumnMenu=column.id;menu.setAttribute("aria-expanded","false");view.adoptColumnAnchor(column.id,"data-cx-sort-column-menu",menu);menu.setAttribute("aria-label",fill(view.labels.gridColumnMenu,{column:column.title}));menu.setAttribute("aria-haspopup","menu");menu.appendChild(document.createTextNode("\u22ef"));menu.addEventListener("click",()=>view.openColumnMenu(column.id,menu));row.appendChild(menu)}
|
|
28
47
|
list.appendChild(row)}
|
|
29
48
|
parts.push(list);panel.replaceChildren(...parts)}
|
|
30
49
|
function sortMenu(view){if(view.kind!=="grid"||view.tools.layout===false||!view.layoutOptions.modes.includes("cards")||typeof view.controlPanel!=="function")return;const{details,panel}=view.controlPanel(view.labels.layoutSort,"cx-grid-sort",target=>sortMenuRender(view,target));const icon=details.firstChild.querySelector("svg");if(icon)icon.replaceWith(svgIcon(SORT_ICON));const anchor=view.layoutMenu?.details||view.toolbar.querySelector(".cx-grid-views")||view.spacer;if(anchor&&anchor.parentNode===view.toolbar)view.toolbar.insertBefore(details,anchor);view.host.addEventListener("canopyx:query",()=>{if(details.open)sortMenuRender(view,panel)},{signal:view.lifetime.signal});view.sortMenu={details,sync:()=>{details.hidden=view.layoutMode!=="cards";if(details.hidden)details.open=false}};view.sortMenu.sync()}
|
|
50
|
+
function pageHeaderStart(view){if(view.pageHeader||view.view.autoHeight===false)return;const head=view.head,grid=view.grid,signal=view.lifetime.signal,names=["position","top","left","width","min-width","clip-path","z-index"],previous=names.map(name=>[name,head.style.getPropertyValue(name),head.style.getPropertyPriority(name)]),spacer=h("div","cx-page-header-space");spacer.setAttribute("aria-hidden","true");spacer.hidden=true;grid.insertBefore(spacer,head);let frame=0,fixed=false;const restore=()=>{if(!fixed)return;fixed=false;spacer.hidden=true;for(const[name,value,priority]of previous){if(value)head.style.setProperty(name,value,priority);else head.style.removeProperty(name)}
|
|
51
|
+
view.host.removeAttribute("data-cx-page-header")};const update=()=>{frame=0;const box=grid.getBoundingClientRect(),height=head.offsetHeight,top=Math.max(0,parseFloat(getComputedStyle(view.host).getPropertyValue("--cx-sticky-top"))||0),fits=grid.scrollHeight<=grid.clientHeight+1;if(view.destroyed||view.layoutMode==="cards"||!height||!fits||box.top>=top||box.bottom<=top||!grid.checkVisibility()){restore();return}
|
|
52
|
+
fixed=true;spacer.hidden=false;spacer.style.height=height+"px";const width=Math.max(grid.clientWidth,view.rowWidth||0),left=box.left+grid.clientLeft-grid.scrollLeft,clipLeft=Math.max(0,grid.scrollLeft),clipRight=Math.max(0,width-grid.clientWidth-clipLeft);Object.assign(head.style,{position:"fixed",top:Math.min(top,box.bottom-height)+ "px",left:left+"px",width:width+"px",minWidth:width+"px",clipPath:"inset(0 "+clipRight+"px 0 "+clipLeft+"px)",zIndex:"20"});view.host.setAttribute("data-cx-page-header","true");view.gridPopover?.position()};const schedule=()=>{if(!frame)frame=requestAnimationFrame(update)};const observer=new ResizeObserver(schedule);for(const element of[grid,head,view.host])observer.observe(element);window.addEventListener("scroll",schedule,{capture:true,passive:true,signal});window.addEventListener("resize",schedule,{passive:true,signal});for(const name of["query","layout"])view.host.addEventListener("canopyx:"+name,schedule,{signal});signal.addEventListener("abort",()=>{cancelAnimationFrame(frame);observer.disconnect();restore();spacer.remove()},{once:true});view.pageHeader={schedule};schedule()}
|
|
31
53
|
installed.add(context.VIEW_MODES)}};(global.CanopyXParts||=[]).push(["layouts",part])})(typeof window!=="undefined"?window:globalThis);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/* Linked views: external filter chips and highlighted rows. The info tone keeps both apart from the reader's own chips and selection. */
|
|
2
|
-
.cx-has-linked,.cx-link-bar,.cx-link-chip{--cx-linked-bg:color-mix(in srgb,var(--hfx-color-status-info-fg,light-dark(#2b5fc0,#74a2f7)) 14%,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));}
|
|
2
|
+
.cx-has-linked,.cx-link-bar,.cx-link-chip{--cx-linked-bg:color-mix(in srgb,var(--hfx-color-status-info-fg,light-dark(#2b5fc0,#74a2f7)) 14%,var(--hfx-color-surface-card,var(--hfx-color-surface,light-dark(#ffffff,#16181c))));}
|
|
3
3
|
.cx-has-linked .cx-row[data-cx-linked="true"]{background:var(--cx-linked-bg);}
|
|
4
4
|
.cx-has-linked .cx-row[data-cx-linked="true"][aria-selected="true"]{background:color-mix(in srgb,var(--hfx-color-status-info-fg,light-dark(#2b5fc0,#74a2f7)) 14%,var(--hfx-color-accent-subtle,light-dark(#e7f1f1,#1b3435)));}
|
|
5
5
|
.cx-has-linked .cx-row[data-cx-linked="true"] [data-cx-pin]{background:var(--cx-linked-bg);}
|
|
6
6
|
.cx-has-linked .cx-row[data-cx-linked="true"] > :first-child{box-shadow:inset var(--cx-size-3px) 0 0 var(--hfx-color-status-info-fg,light-dark(#2b5fc0,#74a2f7));}
|
|
7
7
|
.cx-link-bar{flex:none;display:flex;flex-wrap:wrap;gap:var(--cx-size-6px);padding:0 0 var(--cx-size-8px);min-width:0;}
|
|
8
|
-
.cx-link-chip{max-width:100%;height:var(--cx-size-24px);min-height:var(--cx-size-24px);padding:0 var(--cx-size-9px);border:0;border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));background:var(--cx-linked-bg);color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));font:inherit;font-size:var(--cx-size-13px);white-space:nowrap;overflow:hidden;cursor:pointer;}
|
|
8
|
+
.cx-link-chip{max-width:100%;height:var(--cx-size-24px);min-height:var(--cx-size-24px);padding:0 var(--cx-size-9px);border:0;border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));background:var(--cx-linked-bg);color:var(--hfx-color-text-primary,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));font:inherit;font-size:var(--cx-size-13px);white-space:nowrap;overflow:hidden;cursor:pointer;}
|
|
9
9
|
.cx-data-grid .cx-link-chip.cx-grid-chip{background:var(--cx-linked-bg);}
|
|
10
|
-
.cx-link-chip:hover{background:color-mix(in srgb,var(--hfx-color-status-info-fg,light-dark(#2b5fc0,#74a2f7)) 22%,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));}
|
|
10
|
+
.cx-link-chip:hover{background:color-mix(in srgb,var(--hfx-color-status-info-fg,light-dark(#2b5fc0,#74a2f7)) 22%,var(--hfx-color-surface-card,var(--hfx-color-surface,light-dark(#ffffff,#16181c))));}
|
|
11
11
|
.cx-link-chip: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);}
|
|
12
12
|
@media (forced-colors:active){
|
|
13
13
|
.cx-has-linked .cx-row[data-cx-linked="true"]{outline:var(--cx-size-2px) dashed Highlight;outline-offset:calc(-1 * var(--hfx-focus-width,2px));}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(global){"use strict";const installed=new WeakSet();const part={version:"
|
|
1
|
+
(function(global){"use strict";const installed=new WeakSet();const part={version:"7485f5c9875e9f9b",install(context){if(installed.has(context.LINK_IMPL))return;const{LINK_IMPL,h,setText,filterChipContent,fill,numberFormat,cellValue,setAttr,cellMatches}=context;const{TreeGrid,DataGrid}=LINK_IMPL;const LINK_SOURCE=/^[A-Za-z0-9][\w.:-]{0,127}$/, LINK_MAX_KEYS = 10000, LINK_MAX_VALUES = 1000;
|
|
2
2
|
const linkText=(value,name,max)=>{if(value===undefined)return undefined;if(typeof value!=="string"||!/\S/.test(value) || value.length > max) throw new Error("CanopyX: link " + name + " must be visible text of at most " + max + " characters.");
|
|
3
3
|
return value};const linkIsoDate=value=>typeof value==="string"&&/^\d{4}-\d\d-\d\dT.*(?:Z|[+-]\d\d:\d\d)$/.test(value) && Number.isFinite(Date.parse(value));
|
|
4
4
|
function linkColumn(grid,field){const column=grid.view.columns.find(item=>item.id===field);if(!column)throw new Error("CanopyX: a link names the undeclared column '"+field+"'.");return column}
|
|
@@ -11,12 +11,12 @@ function linkCell(grid,record,field){return grid.kind==="tree"&&field===grid.vie
|
|
|
11
11
|
function linkPredicates(filters){return filters.flatMap(filter=>filter.values?[{column:filter.field,operator:filter.values.length===1?"eq":"in",values:filter.values.slice()}]:
|
|
12
12
|
[filter.range[0]==null?null:{column:filter.field,operator:"ge",values:[filter.range[0]]},filter.range[1]==null?null:{column:filter.field,operator:"le",values:[filter.range[1]]}].filter(Boolean))}
|
|
13
13
|
function linkMatcher(grid){const predicates=linkPredicates(grid.linkFilters).map(predicate=>{const column=linkColumn(grid,predicate.column);return[predicate,column.kind===undefined?{...column,kind:"text"}:column]});return record=>predicates.every(([predicate,column])=>cellMatches(linkCell(grid,record,column.id),predicate,column))}
|
|
14
|
-
const LINK_COMMON={setExternalFilter(source,filter){return this.linkSet(source,filter,"api")},clearExternalFilters(source){return source===undefined?this.linkApply([],"api"):this.linkSet(source,null,"api")},linkSet(source,filter,reason){if(typeof source!=="string"||!LINK_SOURCE.test(source))throw new Error("CanopyX: a link source is 1 to 128 letters, digits, '.', ':', '_' or '-'.");const list=filter==null?[]:(Array.isArray(filter)?filter:[filter]).map(item=>linkFilter(this,source,item));if(list.length>8)throw new Error("CanopyX: one source applies at most 8 external filters.");const next=(this.linkFilters||[]).filter(item=>item.source!==source).concat(list);if(next.length>32)throw new Error("CanopyX: a view takes at most 32 external filters.");return this.linkApply(next,reason)},async linkApply(next,reason){if(this.destroyed)return false;if(JSON.stringify(next)===JSON.stringify(this.linkFilters||[]))return this.linkPending||true;const pending=this.linkCommit(next,reason);this.linkPending=pending;try{return await pending}finally{if(this.linkPending===pending)this.linkPending=null}},linkChanged(reason){const committed=this.linkCommitted||[],last=committed[committed.length-1],count=this.linkCount();this.emit("externalfilter",{filters:this.getExternalFilters(),reason:reason||"api"});setText(this.live,!last?this.labels.linkCleared:count==null?fill(this.labels.linkFilteredBy,{source:last.sourceLabel,values:linkValuesText(this,last)}):
|
|
15
|
-
fill(this.labels.linkFiltered,{source:last.sourceLabel,count:numberFormat(this.lang).format(count)}))},linkChip(source,run){const filters=this.linkCommitted.filter(item=>item.source===source),first=filters[0];const
|
|
14
|
+
const LINK_COMMON={setExternalFilter(source,filter){return this.linkSet(source,filter,"api")},clearExternalFilters(source){return source===undefined?this.linkApply([],"api"):this.linkSet(source,null,"api")},linkSet(source,filter,reason){if(typeof source!=="string"||!LINK_SOURCE.test(source))throw new Error("CanopyX: a link source is 1 to 128 letters, digits, '.', ':', '_' or '-'.");const list=filter==null?[]:(Array.isArray(filter)?filter:[filter]).map(item=>linkFilter(this,source,item));if(list.length>8)throw new Error("CanopyX: one source applies at most 8 external filters.");const sourceLabel=(Array.isArray(filter)?filter:[filter]).find(item=>item?.sourceLabel)?.sourceLabel;if(sourceLabel)for(const item of list)item.sourceLabel=sourceLabel;const next=(this.linkFilters||[]).filter(item=>item.source!==source).concat(list);if(next.length>32)throw new Error("CanopyX: a view takes at most 32 external filters.");return this.linkApply(next,reason)},async linkApply(next,reason){if(this.destroyed)return false;if(JSON.stringify(next)===JSON.stringify(this.linkFilters||[]))return this.linkPending||true;const pending=this.linkCommit(next,reason);this.linkPending=pending;try{return await pending}finally{if(this.linkPending===pending)this.linkPending=null}},linkChanged(reason){const committed=this.linkCommitted||[],last=committed[committed.length-1],count=this.linkCount();this.emit("externalfilter",{filters:this.getExternalFilters(),reason:reason||"api"});setText(this.live,!last?this.labels.linkCleared:count==null?fill(this.labels.linkFilteredBy,{source:last.sourceLabel,values:linkValuesText(this,last)}):
|
|
15
|
+
fill(this.labels.linkFiltered,{source:last.sourceLabel,count:numberFormat(this.lang).format(count)}))},linkChip(source,run){const filters=this.linkCommitted.filter(item=>item.source===source),first=filters[0];const caption=(item,describeRange=false)=>(filters.length>1&&!item.label?linkColumn(this,item.field).title+": ":"")+ linkValuesText(this,item,describeRange);const values=filters.map(item=>caption(item)).join(" · ");const description=filters.map(item=>caption(item,true)).join(" · ");const text=fill(this.labels.linkFilteredBy,{source:first.sourceLabel,values});const button=h("button","cx-button cx-link-chip" +(this.kind==="grid"?" cx-grid-chip":""));button.type="button";filterChipContent(button,text);button.title=fill(this.labels.linkFilteredBy,{source:first.sourceLabel,values:description});button.setAttribute("aria-label",fill(this.labels.linkRemoveFilter,{source:first.sourceLabel,values:description}));button.setAttribute("data-cx-condition","link-"+source);button.setAttribute("data-cx-link-source",source);button.onclick=()=>{button.focus({preventScroll:true});run()};return button},linkSources(){return Array.from(new Set((this.linkCommitted||[]).map(item=>item.source)))},linkRemove(source){try{this.linkSet(source,null,"user").catch(error=>{if(!error||error.name!=="AbortError")this.emit("error",{error})})}
|
|
16
16
|
catch(error){this.emit("error",{error})}}};Object.assign(TreeGrid.prototype,LINK_COMMON);if(DataGrid)Object.assign(DataGrid.prototype,LINK_COMMON);if(DataGrid){const{gridQueryStart}=LINK_IMPL;const proto=DataGrid.prototype,SET_QUERY=proto.setQuery,FOR_CHANGE=proto.queryForChange,GET_STATE=proto.getState;const SUMMARY=proto.syncQuerySummary,CHROME=proto.syncGridChrome,NOTICE=proto.setNotice,DESTROY=proto.destroy;const same=(a,b)=>JSON.stringify(a)===JSON.stringify(b),LINK_OWN=LINK_IMPL.queryOwn;const strip=(filters,tail)=>{filters=filters||[];if(!tail||!tail.length||filters.length<tail.length)return filters;return tail.every((filter,index)=>same(filters[filters.length-tail.length+index],filter))?filters.slice(0,filters.length-tail.length):filters};const tailOf=(grid,pending)=>pending&&grid.pendingQuery&&grid.linkSent?grid.linkSent.ext:grid.linkAcceptedExt;Object.assign(proto,{setQuery(input,paging){const desired=this.linkFilters||[];if(!desired.length&&!this.linkAcceptedExt&&!this.linkSent)return SET_QUERY.call(this,input,paging);const ext=linkPredicates(desired),own=!input||!input.filters?[]:input[LINK_OWN]?input.filters:strip(input.filters,tailOf(this,true));const before=this.queryEpoch,promise=SET_QUERY.call(this,{...(input||{}),filters:own.concat(ext),[LINK_OWN]:undefined},paging);if(this.queryEpoch!==before)this.linkSent={epoch:this.queryEpoch,ext,desired:desired.slice()};return promise.catch(error=>{if((!error||error.name!=="AbortError")&&!this.destroyed&&!this.pendingQuery){if(this.lastFailedQuery&&this.linkSent?.epoch===this.queryEpoch)
|
|
17
17
|
this.lastFailedQuery={...this.lastFailedQuery,filters:strip(this.lastFailedQuery.filters,this.linkSent.ext),[LINK_OWN]:true};this.linkFilters=(this.linkCommitted||[]).slice();this.linkReason=null;this.linkSent=null;this.syncQuerySummary()}
|
|
18
18
|
throw error})},queryForChange(includeQueuedInput,includeExternal){const query=FOR_CHANGE.call(this,includeQueuedInput),tail=tailOf(this,true);if(includeExternal)return query;return tail&&query.filters?{...query,filters:strip(query.filters,tail),[LINK_OWN]:true}:query},getState(){const state=GET_STATE.call(this);if(!this.linkAcceptedExt)return state;const own=strip(state.query.filters,this.linkAcceptedExt);const kept=linkPredicates((this.linkCommitted||[]).filter(filter=>filter.persist)).filter(filter=>!own.some(item=>same(item,filter)));return{...state,query:{...state.query,filters:own.concat(kept)}}},async linkCommit(next,reason){this.linkFilters=next;this.linkReason=reason;if(!this.acceptedQuery&&!this.pendingQuery)await this.ready;try{await this.setQuery(gridQueryStart(this.queryForChange(true)));return true}
|
|
19
|
-
catch(error){if(error&&error.name==="AbortError")return false;throw error}},linkClearAll(){this.linkFilters=[];this.linkReason="user"},linkCount(){return this.snapshot?this.snapshot.matched:0},linkChips(){this.syncQuerySummary()},syncGridChrome(){CHROME.call(this);const summary=this.linkAcceptedExt&&this.acceptedQuery&&this.toolbar.querySelector(".cx-grid-filters > summary");if(!summary)return;const group=item=>item?item.filters.length+item.groups.reduce((sum,child)=>sum+group(child),0):0;const count=strip(this.acceptedQuery.filters,this.linkAcceptedExt).length+group(this.acceptedQuery.filterGroup);summary.classList.toggle("active",!!count);summary.querySelector(".badge")?.remove();if(count){const badge=h("span","badge");setText(badge,String(count));summary.appendChild(badge)}},syncQuerySummary(){let changed=false;if(this.acceptedQuery&&this.acceptedQuery!==this.linkSeenQuery){this.linkSeenQuery=this.acceptedQuery;const sent=this.linkSent&&this.linkSent.epoch===this.queryEpoch?this.linkSent:null;if(sent){this.linkAcceptedExt=sent.ext;changed=!same(this.linkCommitted||[],sent.desired);this.linkCommitted=sent.desired}}
|
|
19
|
+
catch(error){if(error&&error.name==="AbortError")return false;throw error}},linkClearAll(){this.linkFilters=[];this.linkReason="user"},linkCount(){return this.snapshot?this.snapshot.matched:0},linkChips(){this.syncQuerySummary()},syncGridChrome(){CHROME.call(this);const summary=this.linkAcceptedExt&&this.acceptedQuery&&this.toolbar.querySelector(".cx-grid-filters > summary");if(!summary)return;const group=item=>item?item.filters.length+item.groups.reduce((sum,child)=>sum+group(child),0):0;const count=strip(this.acceptedQuery.filters,this.linkAcceptedExt).length+group(this.acceptedQuery.filterGroup)+(this.acceptedQuery.tupleFilters?.length||0);summary.classList.toggle("active",!!count);summary.querySelector(".badge")?.remove();if(count){const badge=h("span","badge");setText(badge,String(count));summary.appendChild(badge)}},syncQuerySummary(){let changed=false;if(this.acceptedQuery&&this.acceptedQuery!==this.linkSeenQuery){this.linkSeenQuery=this.acceptedQuery;const sent=this.linkSent&&this.linkSent.epoch===this.queryEpoch?this.linkSent:null;if(sent){this.linkAcceptedExt=sent.ext;changed=!same(this.linkCommitted||[],sent.desired);this.linkCommitted=sent.desired}}
|
|
20
20
|
const active=document.activeElement,key=this.queryChips&&this.queryChips.contains(active)?active.getAttribute("data-cx-condition"):null;SUMMARY.call(this);if(this.queryChips&&this.acceptedQuery&&this.linkAcceptedExt){const tail=this.linkAcceptedExt.length,filters=this.acceptedQuery.filters;for(let index=filters.length-tail;index<filters.length;index++)this.queryChips.querySelector('[data-cx-condition="filter-'+index+'"]')?.remove();const chips=this.linkSources().map(source=>this.linkChip(source,()=>this.linkRemove(source)));this.queryChips.prepend(...chips);const clear=this.queryChips.querySelector('[data-cx-condition="clear"]');if(clear&&chips.length){const run=clear.onclick;clear.onclick=event=>{this.linkClearAll();run(event)}}
|
|
21
21
|
if(key&&key.startsWith("link-")){const target=[...this.queryChips.children].find(item=>item.getAttribute("data-cx-condition")===key)||this.queryChips.querySelector(".cx-link-chip, .cx-grid-chip");(target||this.searchInput||this.grid).focus({preventScroll:true})}}
|
|
22
22
|
if(changed){const reason=this.linkReason;this.linkReason=null;this.linkChanged(reason)}},setNotice(...args){NOTICE.apply(this,args);const clear=(this.linkFilters?.length||this.linkCommitted?.length)&&this.notice.querySelector(".acts button");if(clear){const run=clear.onclick;clear.onclick=event=>{this.linkClearAll();run(event)}}},destroy(){this.host.classList.remove("cx-has-linked");return DESTROY.call(this)}})}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
(function(global){"use strict";const installed=new WeakSet();const part={version:"
|
|
1
|
+
(function(global){"use strict";const installed=new WeakSet();const part={version:"c6579c9401f0971d",install(context){if(installed.has(context.TreeGrid.prototype))return;const{TreeGrid,navigationScope}=context;Object.assign(TreeGrid.prototype,{deepLinkName(){return "cx."+encodeURIComponent(this.view.id)},hashParams(){return(global.location.hash||"").replace(/^#/, "").split("&").filter(Boolean);
|
|
2
2
|
},currentLink(){if(this.opts.parseLink){return(global.location.hash||"").replace(/^#/, "");
|
|
3
3
|
}
|
|
4
4
|
const prefix=this.deepLinkName()+ "=";const param=this.hashParams().find((p)=>p.startsWith(prefix));return param?param.slice(prefix.length):null},openDeepLink(){const link=this.view.deepLink?this.currentLink():null;if(link!==this.link&&this.linkOpening)this.linkOpening.abort();if(link==null||link===this.link){if(link==null)this.link=null;return link!=null&&this.linkTask&&this.linkTask.link===link?this.linkTask.promise:Promise.resolve()}
|
|
5
|
-
this.link=link;if(this.linkOpening)this.linkOpening.abort();const current=this.linkOpening=new AbortController();const promise=this.openLink(link,current);this.linkTask={link,promise};promise.then(()=>{if(this.linkTask&&this.linkTask.promise===promise)this.linkTask=null});return promise},async openLink(link,current){const navigation=navigationScope(this,current.signal,true);try{const ids=this.opts.parseLink?await navigation.wait(this.opts.parseLink(link)):link.split("/").filter(Boolean).map(decodeURIComponent);if(Array.isArray(ids)&&ids.length&&!navigation.cancelled()&&
|
|
5
|
+
this.link=link;if(this.linkOpening)this.linkOpening.abort();const current=this.linkOpening=new AbortController();const promise=this.openLink(link,current);this.linkTask={link,promise};promise.then(()=>{if(this.linkTask&&this.linkTask.promise===promise)this.linkTask=null});return promise},async openLink(link,current){const navigation=navigationScope(this,current.signal,true);const cancelled=navigation.cancelled;navigation.cancelled=()=>cancelled()||this.currentLink()!==link;try{const ids=this.opts.parseLink?await navigation.wait(this.opts.parseLink(link)):link.split("/").filter(Boolean).map(decodeURIComponent);if(Array.isArray(ids)&&ids.length&&!navigation.cancelled()&&
|
|
6
6
|
!await this.navigatePath(ids,{select:true,focus:false},navigation)&&!navigation.cancelled()){this.link=null}}catch(e){if(!navigation.cancelled()){this.link=null;this.announce(e&&e.message?e.message:String(e))}}finally{const cancelled=navigation.cancelled();navigation.dispose();if(this.linkOpening===current){if(cancelled&&this.link===link)this.link=null;this.linkOpening=null}
|
|
7
7
|
current.abort()}},writeDeepLink(w,revision=this.selectionRevision){if(!this.view.deepLink){return}
|
|
8
8
|
let hash;if(this.opts.formatLink){let link=null;try{link=this.opts.formatLink(w?this.pathOf(w):[],w?w.h:null)}catch(e){if(global.console)global.console.error(e)}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
/* Live data: the order prompt sits in the toolbar (over the rows without one);changed cells flash (a still outline with reduced motion). */
|
|
2
2
|
.cx-data-grid.cx-live-grid{position:relative;}
|
|
3
|
-
.cx-data-grid .cx-live-bar{display:inline-flex;align-items:center;gap:var(--cx-size-6px);flex:none;max-width:100%;height:var(--hfx-control-height-md,calc(36px - var(--cx-compact,0) * 8px));padding:0 var(--cx-size-2px) 0 var(--cx-size-10px);border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));background:var(--hfx-color-accent-subtle,light-dark(#e7f1f1,#1b3435));color:var(--hfx-color-text,light-dark(#16181c,#f2f3f5));font-size:var(--cx-size-13d5px);white-space:nowrap;}
|
|
3
|
+
.cx-data-grid .cx-live-bar{display:inline-flex;align-items:center;gap:var(--cx-size-6px);flex:none;max-width:100%;height:var(--hfx-control-height-md,calc(36px - var(--cx-compact,0) * 8px));padding:0 var(--cx-size-2px) 0 var(--cx-size-10px);border-radius:var(--hfx-radius-control,var(--hfx-radius-md,6px));background:var(--hfx-color-accent-subtle,light-dark(#e7f1f1,#1b3435));color:var(--hfx-color-text-primary,var(--hfx-color-text,light-dark(#16181c,#f2f3f5)));font-size:var(--cx-size-13d5px);white-space:nowrap;}
|
|
4
4
|
.cx-data-grid .cx-live-bar[hidden]{display:none;}
|
|
5
|
-
.cx-data-grid .cx-live-bar.cx-live-float{position:absolute;left:50%;z-index:4;transform:translateX(-50%);max-width:calc(100% - var(--cx-size-24px));border:var(--cx-size-1px) solid var(--hfx-color-border-strong,light-dark(#cdd0d5,#363a42));background:var(--hfx-color-surface,light-dark(#ffffff,#16181c));box-shadow:var(--hfx-elevation-2,0 1px 2px rgba(22,24,28,.05),0 6px 18px -10px rgba(22,24,28,.18));}
|
|
5
|
+
.cx-data-grid .cx-live-bar.cx-live-float{position:absolute;left:50%;z-index:4;transform:translateX(-50%);max-width:calc(100% - var(--cx-size-24px));border:var(--cx-size-1px) solid var(--hfx-color-border-strong,light-dark(#cdd0d5,#363a42));background:var(--hfx-color-surface-card,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));box-shadow:var(--hfx-elevation-2,0 1px 2px rgba(22,24,28,.05),0 6px 18px -10px rgba(22,24,28,.18));}
|
|
6
6
|
.cx-data-grid .cx-live-bar .cx-ico{flex:none;width:var(--cx-size-16px);height:var(--cx-size-16px);color:var(--hfx-color-accent,light-dark(#11776f,#37c9b8));}
|
|
7
7
|
.cx-data-grid .cx-live-bar-text{overflow:hidden;text-overflow:ellipsis;}
|
|
8
|
-
.cx-data-grid .cx-live-bar .cx-button{
|
|
9
|
-
.cx-data-grid .cx-live-bar .cx-button:hover{background:color-mix(in srgb,var(--hfx-color-accent,light-dark(#11776f,#37c9b8)) 10%,var(--hfx-color-surface,light-dark(#ffffff,#16181c)));}
|
|
10
|
-
.cx-data-grid .cx-live-bar .cx-button: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);}
|
|
8
|
+
.cx-data-grid .cx-live-bar .cx-button{block-size:var(--hfx-control-height-sm,calc(28px - var(--cx-compact,0) * 4px));min-block-size:var(--hfx-control-height-sm,calc(28px - var(--cx-compact,0) * 4px));padding:0 var(--hfx-space-2,0.5rem);}
|
|
11
9
|
.cx-data-grid.cx-phone .cx-live-bar{height:var(--cx-size-44px);padding:0 0 0 var(--cx-size-8px);background:transparent;}
|
|
12
10
|
.cx-data-grid.cx-phone .cx-live-bar:not(.cx-live-float) .cx-live-bar-text{position:absolute;width:var(--cx-size-1px);height:var(--cx-size-1px);overflow:hidden;clip-path:inset(50%);white-space:nowrap;}
|
|
13
11
|
.cx-data-grid.cx-phone .cx-live-bar .cx-button{height:var(--cx-size-44px);min-height:var(--cx-size-44px);min-width:var(--cx-size-44px);background:var(--hfx-color-accent-subtle,light-dark(#e7f1f1,#1b3435));}
|