@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.
@@ -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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"}
@@ -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": "Scrollen nach links",
24
- "yuv.object-form-element.scroll.button.right": "Scrollen nach rechts",
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": "The default application theme",
27
- "yuv.theme.default.label": "Default Theme",
28
- "yuv.theme.highContrast.description": "A theme with high contrast for better accessibility",
29
- "yuv.theme.highContrast.label": "High Contrast Theme",
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",
@@ -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": "The default application theme",
27
- "yuv.theme.default.label": "Default theme",
28
- "yuv.theme.highContrast.description": "A theme with high contrast for better accessibility",
29
- "yuv.theme.highContrast.label": "High contrast theme",
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": "Are you sure you want to delete workspace '{{label}}'?",
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": "Select workspace"
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.0.0",
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 };