@yuuvis/client-components 3.0.0 → 3.1.0
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/charts/README.md +64 -0
- package/fesm2022/yuuvis-client-components-charts.mjs +206 -0
- package/fesm2022/yuuvis-client-components-charts.mjs.map +1 -0
- package/fesm2022/yuuvis-client-components-common.mjs +58 -45
- package/fesm2022/yuuvis-client-components-common.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components-table-grid.mjs +108 -0
- package/fesm2022/yuuvis-client-components-table-grid.mjs.map +1 -0
- package/lib/assets/i18n/de.json +6 -6
- package/lib/assets/i18n/en.json +6 -6
- package/package.json +20 -2
- package/table-grid/README.md +90 -0
- package/types/yuuvis-client-components-charts.d.ts +47 -0
- package/types/yuuvis-client-components-table-grid.d.ts +60 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, output, viewChild, Component } from '@angular/core';
|
|
3
|
+
import { AgGridAngular } from 'ag-grid-angular';
|
|
4
|
+
import { themeQuartz, ModuleRegistry, AllCommunityModule } from 'ag-grid-community';
|
|
5
|
+
|
|
6
|
+
const yuuvisThemeParams = {
|
|
7
|
+
backgroundColor: 'var(--ymt-surface)',
|
|
8
|
+
foregroundColor: 'var(--ymt-on-surface)',
|
|
9
|
+
chromeBackgroundColor: 'var(--ymt-surface-container-low)',
|
|
10
|
+
headerBackgroundColor: 'var(--ymt-surface-container)',
|
|
11
|
+
headerTextColor: 'var(--ymt-on-surface)',
|
|
12
|
+
borderColor: 'var(--ymt-outline-variant)',
|
|
13
|
+
rowBorder: { color: 'var(--ymt-outline-variant)', style: 'solid', width: 1 },
|
|
14
|
+
rowHoverColor: 'var(--ymt-hover-background)',
|
|
15
|
+
selectedRowBackgroundColor: 'var(--ymt-selection-background)',
|
|
16
|
+
accentColor: 'var(--ymt-primary)',
|
|
17
|
+
inputBorder: 'var(--ymt-outline)',
|
|
18
|
+
wrapperBorderRadius: 'var(--ymt-corner-m)',
|
|
19
|
+
borderRadius: 'var(--ymt-corner-s)',
|
|
20
|
+
fontFamily: 'var(--ymt-font-body-font)',
|
|
21
|
+
fontSize: 'var(--ymt-font-body-size)',
|
|
22
|
+
headerFontWeight: 700,
|
|
23
|
+
// Inherit color-scheme from the page so `light-dark()` tokens (e.g. --ymt-surface)
|
|
24
|
+
// resolve to the active mode. ag-grid's default forces `color-scheme: light` on
|
|
25
|
+
// its wrapper, which would pin every token to its light branch.
|
|
26
|
+
browserColorScheme: 'inherit'
|
|
27
|
+
};
|
|
28
|
+
const yuuvisTableGridTheme = themeQuartz.withParams(yuuvisThemeParams);
|
|
29
|
+
function buildYuuvisTableGridTheme(overrides) {
|
|
30
|
+
if (!overrides)
|
|
31
|
+
return yuuvisTableGridTheme;
|
|
32
|
+
return themeQuartz.withParams({ ...yuuvisThemeParams, ...overrides });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let modulesRegistered = false;
|
|
36
|
+
/**
|
|
37
|
+
* Registers the AG Grid Community modules exactly once for the lifetime of the
|
|
38
|
+
* application. AG Grid requires modules to be registered before any grid is
|
|
39
|
+
* instantiated; calling this guard from each component constructor keeps the
|
|
40
|
+
* registration lazy without risking duplicate registrations.
|
|
41
|
+
*/
|
|
42
|
+
function ensureAgGridModulesRegistered() {
|
|
43
|
+
if (modulesRegistered)
|
|
44
|
+
return;
|
|
45
|
+
ModuleRegistry.registerModules([AllCommunityModule]);
|
|
46
|
+
modulesRegistered = true;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Thin Angular wrapper around {@link AgGridAngular} that provides a yuuvis-themed
|
|
50
|
+
* data grid with a consistent host class and pre-applied default theme.
|
|
51
|
+
*
|
|
52
|
+
* Inputs are forwarded to the underlying AG Grid instance, and the most common
|
|
53
|
+
* grid events are re-emitted as Angular outputs. Consumers that need access to
|
|
54
|
+
* the raw grid API can read the {@link grid} view child.
|
|
55
|
+
*
|
|
56
|
+
* @typeParam TData - Row data type rendered by the grid.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```html
|
|
60
|
+
* <yuv-table-grid
|
|
61
|
+
* [rowData]="rows()"
|
|
62
|
+
* [columnDefs]="columns"
|
|
63
|
+
* (rowClicked)="onRowClicked($event)">
|
|
64
|
+
* </yuv-table-grid>
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
class YuvTableGridComponent {
|
|
68
|
+
/** Row data rendered by the grid. `null` keeps the grid in its loading state. */
|
|
69
|
+
rowData = input(null, ...(ngDevMode ? [{ debugName: "rowData" }] : /* istanbul ignore next */ []));
|
|
70
|
+
/** Column or column-group definitions describing the grid's structure. */
|
|
71
|
+
columnDefs = input([], ...(ngDevMode ? [{ debugName: "columnDefs" }] : /* istanbul ignore next */ []));
|
|
72
|
+
/** Additional AG Grid options merged with the component's defaults. */
|
|
73
|
+
gridOptions = input({}, ...(ngDevMode ? [{ debugName: "gridOptions" }] : /* istanbul ignore next */ []));
|
|
74
|
+
/** AG Grid theme applied to the grid; defaults to the yuuvis grid theme. */
|
|
75
|
+
theme = input(yuuvisTableGridTheme, ...(ngDevMode ? [{ debugName: "theme" }] : /* istanbul ignore next */ []));
|
|
76
|
+
/** Emitted once the grid has finished initializing and the API is available. */
|
|
77
|
+
gridReady = output();
|
|
78
|
+
/** Emitted whenever the set of selected rows changes. */
|
|
79
|
+
selectionChanged = output();
|
|
80
|
+
/** Emitted when a row is clicked. */
|
|
81
|
+
rowClicked = output();
|
|
82
|
+
/** Emitted when a row is double-clicked. */
|
|
83
|
+
rowDoubleClicked = output();
|
|
84
|
+
/** Emitted when a cell is clicked. */
|
|
85
|
+
cellClicked = output();
|
|
86
|
+
/** Emitted when the grid's sort state changes. */
|
|
87
|
+
sortChanged = output();
|
|
88
|
+
/** Emitted when the grid's filter state changes. */
|
|
89
|
+
filterChanged = output();
|
|
90
|
+
/** Reference to the underlying AG Grid Angular instance for direct API access. */
|
|
91
|
+
grid = viewChild.required(AgGridAngular);
|
|
92
|
+
constructor() {
|
|
93
|
+
ensureAgGridModulesRegistered();
|
|
94
|
+
}
|
|
95
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: YuvTableGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
96
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: YuvTableGridComponent, isStandalone: true, selector: "yuv-table-grid", inputs: { rowData: { classPropertyName: "rowData", publicName: "rowData", isSignal: true, isRequired: false, transformFunction: null }, columnDefs: { classPropertyName: "columnDefs", publicName: "columnDefs", isSignal: true, isRequired: false, transformFunction: null }, gridOptions: { classPropertyName: "gridOptions", publicName: "gridOptions", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { gridReady: "gridReady", selectionChanged: "selectionChanged", rowClicked: "rowClicked", rowDoubleClicked: "rowDoubleClicked", cellClicked: "cellClicked", sortChanged: "sortChanged", filterChanged: "filterChanged" }, host: { classAttribute: "yuv-table-grid" }, viewQueries: [{ propertyName: "grid", first: true, predicate: AgGridAngular, descendants: true, isSignal: true }], ngImport: i0, template: "<ag-grid-angular\n [theme]=\"theme()\"\n [rowData]=\"rowData()\"\n [columnDefs]=\"columnDefs()\"\n [gridOptions]=\"gridOptions()\"\n (gridReady)=\"gridReady.emit($event)\"\n (selectionChanged)=\"selectionChanged.emit($event)\"\n (rowClicked)=\"rowClicked.emit($event)\"\n (rowDoubleClicked)=\"rowDoubleClicked.emit($event)\"\n (cellClicked)=\"cellClicked.emit($event)\"\n (sortChanged)=\"sortChanged.emit($event)\"\n (filterChanged)=\"filterChanged.emit($event)\"\n/>\n", styles: [":host{display:block;width:100%;height:100%;min-height:0}ag-grid-angular{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipSwitchShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "hidePaddedHeaderRows", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "animateColumnResizing", "components", "editType", "suppressStartEditOnTab", "getFullRowEditValidationErrors", "invalidEditValueMode", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "advancedFilterParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableFilterHandlers", "filterHandlers", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "suppressOverlays", "overlayComponent", "overlayComponentParams", "overlayComponentSelector", "activeOverlay", "activeOverlayParams", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "formulaDataSource", "formulaFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "refreshAfterGroupEdit", "rowDragInsertDelay", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupHideColumnsUntilExpanded", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "groupHierarchyConfig", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "tabToNextGridContainer", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "ssrmExpandAllAffectsAllRows", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow", "isRowValidDropPosition"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnsReset", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "bulkEditingStarted", "bulkEditingStopped", "batchEditingStarted", "batchEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "filterUiChanged", "floatingFilterUiChanged", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }] });
|
|
97
|
+
}
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: YuvTableGridComponent, decorators: [{
|
|
99
|
+
type: Component,
|
|
100
|
+
args: [{ selector: 'yuv-table-grid', imports: [AgGridAngular], host: { class: 'yuv-table-grid' }, template: "<ag-grid-angular\n [theme]=\"theme()\"\n [rowData]=\"rowData()\"\n [columnDefs]=\"columnDefs()\"\n [gridOptions]=\"gridOptions()\"\n (gridReady)=\"gridReady.emit($event)\"\n (selectionChanged)=\"selectionChanged.emit($event)\"\n (rowClicked)=\"rowClicked.emit($event)\"\n (rowDoubleClicked)=\"rowDoubleClicked.emit($event)\"\n (cellClicked)=\"cellClicked.emit($event)\"\n (sortChanged)=\"sortChanged.emit($event)\"\n (filterChanged)=\"filterChanged.emit($event)\"\n/>\n", styles: [":host{display:block;width:100%;height:100%;min-height:0}ag-grid-angular{display:block;width:100%;height:100%}\n"] }]
|
|
101
|
+
}], ctorParameters: () => [], propDecorators: { rowData: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowData", required: false }] }], columnDefs: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnDefs", required: false }] }], gridOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "gridOptions", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], gridReady: [{ type: i0.Output, args: ["gridReady"] }], selectionChanged: [{ type: i0.Output, args: ["selectionChanged"] }], rowClicked: [{ type: i0.Output, args: ["rowClicked"] }], rowDoubleClicked: [{ type: i0.Output, args: ["rowDoubleClicked"] }], cellClicked: [{ type: i0.Output, args: ["cellClicked"] }], sortChanged: [{ type: i0.Output, args: ["sortChanged"] }], filterChanged: [{ type: i0.Output, args: ["filterChanged"] }], grid: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AgGridAngular), { isSignal: true }] }] } });
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Generated bundle index. Do not edit.
|
|
105
|
+
*/
|
|
106
|
+
|
|
107
|
+
export { YuvTableGridComponent, buildYuuvisTableGridTheme, yuuvisTableGridTheme };
|
|
108
|
+
//# sourceMappingURL=yuuvis-client-components-table-grid.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yuuvis-client-components-table-grid.mjs","sources":["../../../../../libs/yuuvis/client-components/table-grid/src/lib/table-grid.theme.ts","../../../../../libs/yuuvis/client-components/table-grid/src/lib/table-grid.component.ts","../../../../../libs/yuuvis/client-components/table-grid/src/lib/table-grid.component.html","../../../../../libs/yuuvis/client-components/table-grid/src/yuuvis-client-components-table-grid.ts"],"sourcesContent":["import { themeQuartz, type Theme } from 'ag-grid-community';\n\nconst yuuvisThemeParams = {\n backgroundColor: 'var(--ymt-surface)',\n foregroundColor: 'var(--ymt-on-surface)',\n chromeBackgroundColor: 'var(--ymt-surface-container-low)',\n headerBackgroundColor: 'var(--ymt-surface-container)',\n headerTextColor: 'var(--ymt-on-surface)',\n borderColor: 'var(--ymt-outline-variant)',\n rowBorder: { color: 'var(--ymt-outline-variant)', style: 'solid', width: 1 },\n rowHoverColor: 'var(--ymt-hover-background)',\n selectedRowBackgroundColor: 'var(--ymt-selection-background)',\n accentColor: 'var(--ymt-primary)',\n inputBorder: 'var(--ymt-outline)',\n wrapperBorderRadius: 'var(--ymt-corner-m)',\n borderRadius: 'var(--ymt-corner-s)',\n fontFamily: 'var(--ymt-font-body-font)',\n fontSize: 'var(--ymt-font-body-size)',\n headerFontWeight: 700,\n // Inherit color-scheme from the page so `light-dark()` tokens (e.g. --ymt-surface)\n // resolve to the active mode. ag-grid's default forces `color-scheme: light` on\n // its wrapper, which would pin every token to its light branch.\n browserColorScheme: 'inherit'\n} as const;\n\nexport const yuuvisTableGridTheme: Theme = themeQuartz.withParams(yuuvisThemeParams);\n\nexport type YuuvisTableGridThemeOverrides = Record<string, unknown>;\n\nexport function buildYuuvisTableGridTheme(overrides?: YuuvisTableGridThemeOverrides): Theme {\n if (!overrides) return yuuvisTableGridTheme;\n return themeQuartz.withParams({ ...yuuvisThemeParams, ...overrides });\n}\n","import { Component, input, output, viewChild } from '@angular/core';\nimport { AgGridAngular } from 'ag-grid-angular';\nimport {\n AllCommunityModule,\n ModuleRegistry,\n type CellClickedEvent,\n type ColDef,\n type ColGroupDef,\n type FilterChangedEvent,\n type GridOptions,\n type GridReadyEvent,\n type RowClickedEvent,\n type RowDoubleClickedEvent,\n type SelectionChangedEvent,\n type SortChangedEvent,\n type Theme\n} from 'ag-grid-community';\nimport { yuuvisTableGridTheme } from './table-grid.theme';\n\nlet modulesRegistered = false;\n\n/**\n * Registers the AG Grid Community modules exactly once for the lifetime of the\n * application. AG Grid requires modules to be registered before any grid is\n * instantiated; calling this guard from each component constructor keeps the\n * registration lazy without risking duplicate registrations.\n */\nfunction ensureAgGridModulesRegistered(): void {\n if (modulesRegistered) return;\n ModuleRegistry.registerModules([AllCommunityModule]);\n modulesRegistered = true;\n}\n\n/**\n * Thin Angular wrapper around {@link AgGridAngular} that provides a yuuvis-themed\n * data grid with a consistent host class and pre-applied default theme.\n *\n * Inputs are forwarded to the underlying AG Grid instance, and the most common\n * grid events are re-emitted as Angular outputs. Consumers that need access to\n * the raw grid API can read the {@link grid} view child.\n *\n * @typeParam TData - Row data type rendered by the grid.\n *\n * @example\n * ```html\n * <yuv-table-grid\n * [rowData]=\"rows()\"\n * [columnDefs]=\"columns\"\n * (rowClicked)=\"onRowClicked($event)\">\n * </yuv-table-grid>\n * ```\n */\n@Component({\n selector: 'yuv-table-grid',\n imports: [AgGridAngular],\n templateUrl: './table-grid.component.html',\n styleUrl: './table-grid.component.scss',\n host: { class: 'yuv-table-grid' }\n})\nexport class YuvTableGridComponent<TData = unknown> {\n /** Row data rendered by the grid. `null` keeps the grid in its loading state. */\n readonly rowData = input<TData[] | null>(null);\n\n /** Column or column-group definitions describing the grid's structure. */\n readonly columnDefs = input<(ColDef<TData> | ColGroupDef<TData>)[]>([]);\n\n /** Additional AG Grid options merged with the component's defaults. */\n readonly gridOptions = input<GridOptions<TData>>({});\n\n /** AG Grid theme applied to the grid; defaults to the yuuvis grid theme. */\n readonly theme = input<Theme>(yuuvisTableGridTheme);\n\n /** Emitted once the grid has finished initializing and the API is available. */\n readonly gridReady = output<GridReadyEvent<TData>>();\n\n /** Emitted whenever the set of selected rows changes. */\n readonly selectionChanged = output<SelectionChangedEvent<TData>>();\n\n /** Emitted when a row is clicked. */\n readonly rowClicked = output<RowClickedEvent<TData>>();\n\n /** Emitted when a row is double-clicked. */\n readonly rowDoubleClicked = output<RowDoubleClickedEvent<TData>>();\n\n /** Emitted when a cell is clicked. */\n readonly cellClicked = output<CellClickedEvent<TData>>();\n\n /** Emitted when the grid's sort state changes. */\n readonly sortChanged = output<SortChangedEvent<TData>>();\n\n /** Emitted when the grid's filter state changes. */\n readonly filterChanged = output<FilterChangedEvent<TData>>();\n\n /** Reference to the underlying AG Grid Angular instance for direct API access. */\n readonly grid = viewChild.required(AgGridAngular);\n\n constructor() {\n ensureAgGridModulesRegistered();\n }\n}\n","<ag-grid-angular\n [theme]=\"theme()\"\n [rowData]=\"rowData()\"\n [columnDefs]=\"columnDefs()\"\n [gridOptions]=\"gridOptions()\"\n (gridReady)=\"gridReady.emit($event)\"\n (selectionChanged)=\"selectionChanged.emit($event)\"\n (rowClicked)=\"rowClicked.emit($event)\"\n (rowDoubleClicked)=\"rowDoubleClicked.emit($event)\"\n (cellClicked)=\"cellClicked.emit($event)\"\n (sortChanged)=\"sortChanged.emit($event)\"\n (filterChanged)=\"filterChanged.emit($event)\"\n/>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/lib/assets/i18n/de.json
CHANGED
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
"yuv.object-form-element.error.string.classification.url": "Bitte geben Sie eine gültige URL ein.",
|
|
21
21
|
"yuv.object-form-element.error.string.regex.nomatch": "Die Eingabe entspricht nicht den Vorgaben.",
|
|
22
22
|
"yuv.object-form-element.error.string.whitespaces": "Die Eingabe enthält nur Leerzeichen.",
|
|
23
|
-
"yuv.object-form-element.scroll.button.left": "
|
|
24
|
-
"yuv.object-form-element.scroll.button.right": "
|
|
23
|
+
"yuv.object-form-element.scroll.button.left": "Nach links scrollen",
|
|
24
|
+
"yuv.object-form-element.scroll.button.right": "Nach rechts scrollen",
|
|
25
25
|
"yuv.retention-badge.retain": "Aufbewahrung {{from}} - {{until}}",
|
|
26
|
-
"yuv.theme.default.description": "
|
|
27
|
-
"yuv.theme.default.label": "
|
|
28
|
-
"yuv.theme.highContrast.description": "
|
|
29
|
-
"yuv.theme.highContrast.label": "
|
|
26
|
+
"yuv.theme.default.description": "Standard-Erscheinungsbild",
|
|
27
|
+
"yuv.theme.default.label": "Standard",
|
|
28
|
+
"yuv.theme.highContrast.description": "Erscheinungsbild mit erhöhtem Kontrast für bessere Lesbarkeit",
|
|
29
|
+
"yuv.theme.highContrast.label": "Hoher Kontrast",
|
|
30
30
|
"yuv.popout.popin.tooltip": "",
|
|
31
31
|
"yuv.popout.popout.tooltip": "",
|
|
32
32
|
"yuv.widget-grid.button.cancel": "Abbrechen",
|
package/lib/assets/i18n/en.json
CHANGED
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
"yuv.object-form-element.scroll.button.left": "Scroll left",
|
|
24
24
|
"yuv.object-form-element.scroll.button.right": "Scroll right",
|
|
25
25
|
"yuv.retention-badge.retain": "Retention {{from}} – {{until}}",
|
|
26
|
-
"yuv.theme.default.description": "
|
|
27
|
-
"yuv.theme.default.label": "Default
|
|
28
|
-
"yuv.theme.highContrast.description": "
|
|
29
|
-
"yuv.theme.highContrast.label": "High contrast
|
|
26
|
+
"yuv.theme.default.description": "Default theme",
|
|
27
|
+
"yuv.theme.default.label": "Default",
|
|
28
|
+
"yuv.theme.highContrast.description": "High contrast theme for better accessibility",
|
|
29
|
+
"yuv.theme.highContrast.label": "High contrast",
|
|
30
30
|
"yuv.popout.popin.tooltip": "",
|
|
31
31
|
"yuv.popout.popout.tooltip": "",
|
|
32
32
|
"yuv.widget-grid.button.cancel": "Cancel",
|
|
@@ -47,10 +47,10 @@
|
|
|
47
47
|
"yuv.widget-grid.workspaces.editMode.save": "Save changes",
|
|
48
48
|
"yuv.widget-grid.workspaces.empty": "No workspaces found",
|
|
49
49
|
"yuv.widget-grid.workspaces.empty.button.create": "Create workspace",
|
|
50
|
-
"yuv.widget-grid.workspaces.workspace.delete.confirm.message": "
|
|
50
|
+
"yuv.widget-grid.workspaces.workspace.delete.confirm.message": "Do you really want to delete workspace '{{label}}'?",
|
|
51
51
|
"yuv.widget-grid.workspaces.workspace.label": "Workspace",
|
|
52
52
|
"yuv.widget-grid.workspaces.workspace.menu.create": "Create workspace",
|
|
53
53
|
"yuv.widget-grid.workspaces.workspace.menu.delete": "Delete workspace",
|
|
54
54
|
"yuv.widget-grid.workspaces.workspace.menu.edit": "Edit workspace",
|
|
55
|
-
"yuv.widget-grid.workspaces.workspace.menu.tooltip": "
|
|
55
|
+
"yuv.widget-grid.workspaces.workspace.menu.tooltip": "Manage workspace"
|
|
56
56
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuuvis/client-components",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -8,7 +8,17 @@
|
|
|
8
8
|
"@angular/core": "^21.2.9",
|
|
9
9
|
"@angular/forms": "^21.2.9",
|
|
10
10
|
"@angular/material": "^21.2.7",
|
|
11
|
-
"@yuuvis/material": "^3.0.0-beta.21.0"
|
|
11
|
+
"@yuuvis/material": "^3.0.0-beta.21.0",
|
|
12
|
+
"ag-charts-angular": "^11.0.0",
|
|
13
|
+
"ag-charts-community": "^11.0.0"
|
|
14
|
+
},
|
|
15
|
+
"peerDependenciesMeta": {
|
|
16
|
+
"ag-charts-angular": {
|
|
17
|
+
"optional": true
|
|
18
|
+
},
|
|
19
|
+
"ag-charts-community": {
|
|
20
|
+
"optional": true
|
|
21
|
+
}
|
|
12
22
|
},
|
|
13
23
|
"sideEffects": false,
|
|
14
24
|
"module": "fesm2022/yuuvis-client-components.mjs",
|
|
@@ -25,6 +35,10 @@
|
|
|
25
35
|
"types": "./types/yuuvis-client-components-autocomplete.d.ts",
|
|
26
36
|
"default": "./fesm2022/yuuvis-client-components-autocomplete.mjs"
|
|
27
37
|
},
|
|
38
|
+
"./charts": {
|
|
39
|
+
"types": "./types/yuuvis-client-components-charts.d.ts",
|
|
40
|
+
"default": "./fesm2022/yuuvis-client-components-charts.mjs"
|
|
41
|
+
},
|
|
28
42
|
"./common": {
|
|
29
43
|
"types": "./types/yuuvis-client-components-common.d.ts",
|
|
30
44
|
"default": "./fesm2022/yuuvis-client-components-common.mjs"
|
|
@@ -57,6 +71,10 @@
|
|
|
57
71
|
"types": "./types/yuuvis-client-components-split-view.d.ts",
|
|
58
72
|
"default": "./fesm2022/yuuvis-client-components-split-view.mjs"
|
|
59
73
|
},
|
|
74
|
+
"./table-grid": {
|
|
75
|
+
"types": "./types/yuuvis-client-components-table-grid.d.ts",
|
|
76
|
+
"default": "./fesm2022/yuuvis-client-components-table-grid.mjs"
|
|
77
|
+
},
|
|
60
78
|
"./widget-grid": {
|
|
61
79
|
"types": "./types/yuuvis-client-components-widget-grid.d.ts",
|
|
62
80
|
"default": "./fesm2022/yuuvis-client-components-widget-grid.mjs"
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# @yuuvis/client-components/table-grid
|
|
2
|
+
|
|
3
|
+
Thin wrapper around [ag-grid-angular](https://www.ag-grid.com/angular-data-grid/) wired into the `@yuuvis/material` design system. The grid picks up `--ymt-*` tokens (surface, text color, outlines, focus, typography) so it follows light/dark/high-contrast and any custom palette automatically — no SCSS imports required.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
The peer dependencies are optional — only consumers using this entry point need them:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install ag-grid-angular ag-grid-community
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { Component, signal } from '@angular/core';
|
|
17
|
+
import { YuvTableGridComponent } from '@yuuvis/client-components/table-grid';
|
|
18
|
+
import type { ColDef } from 'ag-grid-community';
|
|
19
|
+
|
|
20
|
+
@Component({
|
|
21
|
+
standalone: true,
|
|
22
|
+
imports: [YuvTableGridComponent],
|
|
23
|
+
template: `<yuv-table-grid [rowData]="rows()" [columnDefs]="cols()" />`
|
|
24
|
+
})
|
|
25
|
+
export class MyTableComponent {
|
|
26
|
+
readonly rows = signal([
|
|
27
|
+
{ id: 1, name: 'Alpha', amount: 120 },
|
|
28
|
+
{ id: 2, name: 'Bravo', amount: 240 }
|
|
29
|
+
]);
|
|
30
|
+
readonly cols = signal<ColDef[]>([
|
|
31
|
+
{ field: 'id', headerName: 'ID', width: 90 },
|
|
32
|
+
{ field: 'name', headerName: 'Name' },
|
|
33
|
+
{ field: 'amount', headerName: 'Amount', type: 'numericColumn' }
|
|
34
|
+
]);
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The grid registers ag-grid's community modules on first construction and applies `yuuvisTableGridTheme` by default.
|
|
39
|
+
|
|
40
|
+
## API
|
|
41
|
+
|
|
42
|
+
| Input | Type | Notes |
|
|
43
|
+
|--------------|-------------------------------------------|----------------------------------------------------------------------|
|
|
44
|
+
| `rowData` | `TData[] \| null` | Forwarded to `<ag-grid-angular>`. |
|
|
45
|
+
| `columnDefs` | `(ColDef \| ColGroupDef)[]` | Forwarded. |
|
|
46
|
+
| `gridOptions`| `GridOptions` | Merged onto the grid; takes precedence over the above. |
|
|
47
|
+
| `theme` | `Theme \| 'legacy'` | Defaults to `yuuvisTableGridTheme`. Pass `buildYuuvisTableGridTheme({...})` to override params. |
|
|
48
|
+
|
|
49
|
+
| Output | Type |
|
|
50
|
+
|--------------------|--------------------------------------|
|
|
51
|
+
| `gridReady` | `GridReadyEvent` |
|
|
52
|
+
| `selectionChanged` | `SelectionChangedEvent` |
|
|
53
|
+
| `rowClicked` | `RowClickedEvent` |
|
|
54
|
+
| `rowDoubleClicked` | `RowDoubleClickedEvent` |
|
|
55
|
+
| `cellClicked` | `CellClickedEvent` |
|
|
56
|
+
| `sortChanged` | `SortChangedEvent` |
|
|
57
|
+
| `filterChanged` | `FilterChangedEvent` |
|
|
58
|
+
|
|
59
|
+
The underlying `AgGridAngular` instance is exposed via `viewChild` (`grid()`) for power use.
|
|
60
|
+
|
|
61
|
+
## Theming
|
|
62
|
+
|
|
63
|
+
`yuuvisTableGridTheme` is built once via ag-grid v33+'s [Theming API](https://www.ag-grid.com/angular-data-grid/theming/) (`themeQuartz.withParams(...)`) where every parameter resolves to `var(--ymt-*)`. ag-grid emits these as `--ag-*` CSS custom properties on the grid root, so the browser handles light/dark/high-contrast resolution at the CSS layer.
|
|
64
|
+
|
|
65
|
+
Customize per-instance with `buildYuuvisTableGridTheme(overrides)`:
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
import { buildYuuvisTableGridTheme } from '@yuuvis/client-components/table-grid';
|
|
69
|
+
|
|
70
|
+
readonly successTheme = buildYuuvisTableGridTheme({
|
|
71
|
+
accentColor: 'var(--ymt-success)'
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
| ag-grid param | yuuvis token |
|
|
76
|
+
|---------------------------------|------------------------------------------------|
|
|
77
|
+
| `backgroundColor` | `var(--ymt-surface)` |
|
|
78
|
+
| `foregroundColor` | `var(--ymt-on-surface)` |
|
|
79
|
+
| `chromeBackgroundColor` | `var(--ymt-surface-container-low)` |
|
|
80
|
+
| `headerBackgroundColor` | `var(--ymt-surface-container)` |
|
|
81
|
+
| `headerTextColor` | `var(--ymt-on-surface)` |
|
|
82
|
+
| `borderColor` / `rowBorderColor`| `var(--ymt-outline-variant)` |
|
|
83
|
+
| `rowHoverColor` | `var(--ymt-hover-background)` |
|
|
84
|
+
| `selectedRowBackgroundColor` | `var(--ymt-selection-background)` |
|
|
85
|
+
| `accentColor` | `var(--ymt-primary)` |
|
|
86
|
+
| `inputBorder` | `var(--ymt-outline)` |
|
|
87
|
+
| `wrapperBorderRadius` | `var(--ymt-corner-m)` |
|
|
88
|
+
| `borderRadius` | `var(--ymt-corner-s)` |
|
|
89
|
+
| `fontFamily` | `var(--ymt-font-body-font)` |
|
|
90
|
+
| `fontSize` | `var(--ymt-font-body-size)` |
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { AgChartOptions, AgChartTheme } from 'ag-charts-community';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Wrapper component around AG Charts that automatically applies the
|
|
6
|
+
* application's chart theme based on the current UI theme (light, dark,
|
|
7
|
+
* high-contrast). Consumers provide standard AG Charts options and may
|
|
8
|
+
* optionally override the theme.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```html
|
|
12
|
+
* <yuv-chart [options]="chartOptions" />
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare class YuvChartComponent {
|
|
16
|
+
private readonly themeService;
|
|
17
|
+
/** AG Charts configuration (data, series, axes, etc.). */
|
|
18
|
+
readonly options: _angular_core.InputSignal<AgChartOptions>;
|
|
19
|
+
/**
|
|
20
|
+
* Optional theme override. When provided, takes precedence over the
|
|
21
|
+
* theme resolved by {@link YuvChartThemeService} from the current UI mode.
|
|
22
|
+
*/
|
|
23
|
+
readonly theme: _angular_core.InputSignal<string | AgChartTheme | undefined>;
|
|
24
|
+
/**
|
|
25
|
+
* Final options passed to AG Charts: the user-supplied {@link options}
|
|
26
|
+
* merged with either the explicit {@link theme} input or the theme
|
|
27
|
+
* derived from the active UI mode.
|
|
28
|
+
*/
|
|
29
|
+
protected readonly mergedOptions: _angular_core.Signal<AgChartOptions>;
|
|
30
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuvChartComponent, never>;
|
|
31
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuvChartComponent, "yuv-chart", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
declare class YuvChartThemeService {
|
|
35
|
+
#private;
|
|
36
|
+
readonly chartTheme: _angular_core.Signal<AgChartTheme>;
|
|
37
|
+
constructor();
|
|
38
|
+
refresh(): void;
|
|
39
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuvChartThemeService, never>;
|
|
40
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<YuvChartThemeService>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
type YuvChartOptions = AgChartOptions;
|
|
44
|
+
type YuvChartMode = 'light' | 'dark' | 'high-contrast';
|
|
45
|
+
|
|
46
|
+
export { YuvChartComponent, YuvChartThemeService };
|
|
47
|
+
export type { YuvChartMode, YuvChartOptions };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { AgGridAngular } from 'ag-grid-angular';
|
|
3
|
+
import { ColDef, ColGroupDef, GridOptions, Theme, GridReadyEvent, SelectionChangedEvent, RowClickedEvent, RowDoubleClickedEvent, CellClickedEvent, SortChangedEvent, FilterChangedEvent } from 'ag-grid-community';
|
|
4
|
+
export { CellClickedEvent, ColDef, ColGroupDef, FilterChangedEvent, GridApi, GridOptions, GridReadyEvent, RowClickedEvent, RowDoubleClickedEvent, SelectionChangedEvent, SortChangedEvent, Theme } from 'ag-grid-community';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Thin Angular wrapper around {@link AgGridAngular} that provides a yuuvis-themed
|
|
8
|
+
* data grid with a consistent host class and pre-applied default theme.
|
|
9
|
+
*
|
|
10
|
+
* Inputs are forwarded to the underlying AG Grid instance, and the most common
|
|
11
|
+
* grid events are re-emitted as Angular outputs. Consumers that need access to
|
|
12
|
+
* the raw grid API can read the {@link grid} view child.
|
|
13
|
+
*
|
|
14
|
+
* @typeParam TData - Row data type rendered by the grid.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```html
|
|
18
|
+
* <yuv-table-grid
|
|
19
|
+
* [rowData]="rows()"
|
|
20
|
+
* [columnDefs]="columns"
|
|
21
|
+
* (rowClicked)="onRowClicked($event)">
|
|
22
|
+
* </yuv-table-grid>
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
declare class YuvTableGridComponent<TData = unknown> {
|
|
26
|
+
/** Row data rendered by the grid. `null` keeps the grid in its loading state. */
|
|
27
|
+
readonly rowData: _angular_core.InputSignal<TData[] | null>;
|
|
28
|
+
/** Column or column-group definitions describing the grid's structure. */
|
|
29
|
+
readonly columnDefs: _angular_core.InputSignal<(ColDef<TData, any> | ColGroupDef<TData>)[]>;
|
|
30
|
+
/** Additional AG Grid options merged with the component's defaults. */
|
|
31
|
+
readonly gridOptions: _angular_core.InputSignal<GridOptions<TData>>;
|
|
32
|
+
/** AG Grid theme applied to the grid; defaults to the yuuvis grid theme. */
|
|
33
|
+
readonly theme: _angular_core.InputSignal<Theme>;
|
|
34
|
+
/** Emitted once the grid has finished initializing and the API is available. */
|
|
35
|
+
readonly gridReady: _angular_core.OutputEmitterRef<GridReadyEvent<TData, any>>;
|
|
36
|
+
/** Emitted whenever the set of selected rows changes. */
|
|
37
|
+
readonly selectionChanged: _angular_core.OutputEmitterRef<SelectionChangedEvent<TData, any>>;
|
|
38
|
+
/** Emitted when a row is clicked. */
|
|
39
|
+
readonly rowClicked: _angular_core.OutputEmitterRef<RowClickedEvent<TData, any>>;
|
|
40
|
+
/** Emitted when a row is double-clicked. */
|
|
41
|
+
readonly rowDoubleClicked: _angular_core.OutputEmitterRef<RowDoubleClickedEvent<TData, any>>;
|
|
42
|
+
/** Emitted when a cell is clicked. */
|
|
43
|
+
readonly cellClicked: _angular_core.OutputEmitterRef<CellClickedEvent<TData, any, any>>;
|
|
44
|
+
/** Emitted when the grid's sort state changes. */
|
|
45
|
+
readonly sortChanged: _angular_core.OutputEmitterRef<SortChangedEvent<TData, any>>;
|
|
46
|
+
/** Emitted when the grid's filter state changes. */
|
|
47
|
+
readonly filterChanged: _angular_core.OutputEmitterRef<FilterChangedEvent<TData, any>>;
|
|
48
|
+
/** Reference to the underlying AG Grid Angular instance for direct API access. */
|
|
49
|
+
readonly grid: _angular_core.Signal<AgGridAngular<any, any>>;
|
|
50
|
+
constructor();
|
|
51
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuvTableGridComponent<any>, never>;
|
|
52
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<YuvTableGridComponent<any>, "yuv-table-grid", never, { "rowData": { "alias": "rowData"; "required": false; "isSignal": true; }; "columnDefs": { "alias": "columnDefs"; "required": false; "isSignal": true; }; "gridOptions": { "alias": "gridOptions"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; }, { "gridReady": "gridReady"; "selectionChanged": "selectionChanged"; "rowClicked": "rowClicked"; "rowDoubleClicked": "rowDoubleClicked"; "cellClicked": "cellClicked"; "sortChanged": "sortChanged"; "filterChanged": "filterChanged"; }, never, never, true, never>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
declare const yuuvisTableGridTheme: Theme;
|
|
56
|
+
type YuuvisTableGridThemeOverrides = Record<string, unknown>;
|
|
57
|
+
declare function buildYuuvisTableGridTheme(overrides?: YuuvisTableGridThemeOverrides): Theme;
|
|
58
|
+
|
|
59
|
+
export { YuvTableGridComponent, buildYuuvisTableGridTheme, yuuvisTableGridTheme };
|
|
60
|
+
export type { YuuvisTableGridThemeOverrides };
|