@cocoar/data-grid 0.1.0 → 0.2.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/README.md +553 -4
- package/fesm2022/cocoar-data-grid.mjs +466 -14
- package/fesm2022/cocoar-data-grid.mjs.map +1 -1
- package/package.json +5 -3
- package/types/cocoar-data-grid.d.ts +116 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cocoar-data-grid.mjs","sources":["../../../../libs/data-grid/src/lib/builders/coar-grid-column-builder.ts","../../../../libs/data-grid/src/lib/builders/coar-grid-column-factory.ts","../../../../libs/data-grid/src/lib/theme/cocoar-theme.ts","../../../../libs/data-grid/src/lib/builders/coar-grid-builder.ts","../../../../libs/data-grid/src/lib/directive/coar-data-grid.directive.ts","../../../../libs/data-grid/src/lib/models/index.ts","../../../../libs/data-grid/src/index.ts","../../../../libs/data-grid/src/cocoar-data-grid.ts"],"sourcesContent":["import { Type } from '@angular/core';\nimport type {\n ColDef,\n CellClassParams,\n CellStyle,\n ValueFormatterParams,\n ValueGetterFunc,\n CellDoubleClickedEvent,\n ITooltipParams,\n} from 'ag-grid-community';\n\n/**\n * Fluent builder for AG Grid column definitions.\n *\n * @example\n * ```ts\n * const column = new CoarGridColumnBuilder<User>('name')\n * .header('Full Name')\n * .sortable()\n * .flex(1)\n * .build();\n * ```\n */\nexport class CoarGridColumnBuilder<TData = unknown, TValue = unknown> {\n readonly #colDef: ColDef<TData, TValue>;\n\n constructor(field?: keyof TData | string) {\n this.#colDef = {\n field: field?.toString() as ColDef<TData, TValue>['field'],\n headerName: field?.toString(),\n resizable: true,\n sortable: false,\n };\n }\n\n // ============================================================\n // Basic Properties\n // ============================================================\n\n /** Set the field name (data property) */\n field(value: keyof TData | string): this {\n this.#colDef.field = value.toString() as ColDef<TData, TValue>['field'];\n this.#colDef.headerName = this.#colDef.headerName || value.toString();\n return this;\n }\n\n /** Set the column header text */\n header(value: string): this {\n this.#colDef.headerName = value;\n return this;\n }\n\n /** Set header tooltip */\n headerTooltip(value: string): this {\n this.#colDef.headerTooltip = value;\n return this;\n }\n\n // ============================================================\n // Sizing\n // ============================================================\n\n /** Set fixed width in pixels */\n width(value: number, minWidth?: number, maxWidth?: number): this {\n this.#colDef.width = value;\n if (minWidth !== undefined) this.#colDef.minWidth = minWidth;\n if (maxWidth !== undefined) this.#colDef.maxWidth = maxWidth;\n return this;\n }\n\n /** Set fixed width (min, max, and width all the same) */\n fixedWidth(value: number): this {\n this.#colDef.width = value;\n this.#colDef.minWidth = value;\n this.#colDef.maxWidth = value;\n return this;\n }\n\n /** Set minimum width */\n minWidth(value: number): this {\n this.#colDef.minWidth = value;\n return this;\n }\n\n /** Set maximum width */\n maxWidth(value: number): this {\n this.#colDef.maxWidth = value;\n return this;\n }\n\n /** Set flex grow factor for fluid width */\n flex(value = 1): this {\n this.#colDef.flex = value;\n return this;\n }\n\n // ============================================================\n // Behavior\n // ============================================================\n\n /** Enable/disable sorting */\n sortable(value = true): this {\n this.#colDef.sortable = value;\n return this;\n }\n\n /** Enable/disable resizing */\n resizable(value = true): this {\n this.#colDef.resizable = value;\n return this;\n }\n\n /** Hide/show column */\n hidden(value = true): this {\n this.#colDef.hide = value;\n return this;\n }\n\n /** Pin column to left or right */\n pinned(value: 'left' | 'right' | null): this {\n this.#colDef.pinned = value;\n return this;\n }\n\n /** Lock column position */\n lockPosition(value: boolean | 'left' | 'right' = true): this {\n this.#colDef.lockPosition = value;\n return this;\n }\n\n // ============================================================\n // Cell Rendering\n // ============================================================\n\n /** Set custom cell renderer component */\n cellRenderer(component: Type<unknown>, params?: Record<string, unknown>): this {\n this.#colDef.cellRenderer = component;\n if (params) {\n this.#colDef.cellRendererParams = { ...this.#colDef.cellRendererParams, ...params };\n }\n return this;\n }\n\n /** Set cell renderer parameters */\n cellRendererParams(params: Record<string, unknown>): this {\n this.#colDef.cellRendererParams = { ...this.#colDef.cellRendererParams, ...params };\n return this;\n }\n\n /** Set value formatter for display */\n valueFormatter(fn: (params: ValueFormatterParams<TData, TValue>) => string): this {\n this.#colDef.valueFormatter = fn;\n return this;\n }\n\n /** Set value getter to transform data before display */\n valueGetter(fn: ValueGetterFunc<TData, TValue>): this {\n this.#colDef.valueGetter = fn;\n return this;\n }\n\n // ============================================================\n // Styling\n // ============================================================\n\n /** Set CSS class for cells */\n cellClass(\n value: string | string[] | ((params: CellClassParams<TData, TValue>) => string | string[])\n ): this {\n this.#colDef.cellClass = value;\n return this;\n }\n\n /** Set CSS style for cells */\n cellStyle(\n value: CellStyle | ((params: CellClassParams<TData, TValue>) => CellStyle | null | undefined)\n ): this {\n this.#colDef.cellStyle = value;\n return this;\n }\n\n /** Add a conditional CSS class rule */\n classRule(\n className: string,\n condition: string | ((params: CellClassParams<TData, TValue>) => boolean)\n ): this {\n if (!this.#colDef.cellClassRules) {\n this.#colDef.cellClassRules = {};\n }\n this.#colDef.cellClassRules[className] = condition;\n return this;\n }\n\n // ============================================================\n // Tooltips\n // ============================================================\n\n /** Show tooltip with field value or custom function */\n tooltip(value?: string | ((params: ITooltipParams<TData, TValue>) => string)): this {\n if (value === undefined) {\n this.#colDef.tooltipField = this.#colDef.field;\n } else if (typeof value === 'string') {\n this.#colDef.tooltipField = value as ColDef<TData, TValue>['tooltipField'];\n } else {\n this.#colDef.tooltipValueGetter = value;\n }\n return this;\n }\n\n // ============================================================\n // Events\n // ============================================================\n\n /** Handle cell double-click */\n onCellDoubleClicked(handler: (event: CellDoubleClickedEvent<TData, TValue>) => void): this {\n this.#colDef.onCellDoubleClicked = handler;\n return this;\n }\n\n // ============================================================\n // Filtering\n // ============================================================\n\n /** Enable/disable filtering */\n filter(value: boolean | string = true): this {\n this.#colDef.filter = value;\n return this;\n }\n\n /** Set filter parameters */\n filterParams(params: Record<string, unknown>): this {\n this.#colDef.filterParams = params;\n return this;\n }\n\n // ============================================================\n // Advanced Options\n // ============================================================\n\n /** Set any AG Grid ColDef option directly */\n option<K extends keyof ColDef<TData, TValue>>(key: K, value: ColDef<TData, TValue>[K]): this {\n this.#colDef[key] = value;\n return this;\n }\n\n /** Apply custom modifications to the column definition */\n customize(fn: (colDef: ColDef<TData, TValue>) => void): this {\n fn(this.#colDef);\n return this;\n }\n\n // ============================================================\n // Build\n // ============================================================\n\n /** Build and return the AG Grid ColDef */\n build(): ColDef<TData, TValue> {\n return { ...this.#colDef };\n }\n}\n","import { CoarGridColumnBuilder } from './coar-grid-column-builder';\n\n/**\n * Factory for creating typed column builders.\n * Provides convenient methods for common column types.\n *\n * @example\n * ```ts\n * // In column definitions:\n * CoarGridBuilder.create<User>()\n * .columns([\n * col => col.field('name').header('Name').flex(1),\n * col => col.field('createdAt').header('Created').width(150),\n * ])\n * ```\n */\nexport class CoarGridColumnFactory<TData = unknown> {\n /**\n * Create a column builder for the given field\n */\n field<TValue = unknown>(fieldName: keyof TData | string): CoarGridColumnBuilder<TData, TValue> {\n return new CoarGridColumnBuilder<TData, TValue>(fieldName);\n }\n\n /**\n * Create a date column with standard formatting\n */\n date(\n fieldName: keyof TData | string,\n format = 'short'\n ): CoarGridColumnBuilder<TData, Date | string> {\n const builder = new CoarGridColumnBuilder<TData, Date | string>(fieldName);\n\n // Add basic date formatting\n builder.valueFormatter((params) => {\n const value = params.value;\n if (!value) return '';\n\n const date = value instanceof Date ? value : new Date(value);\n if (isNaN(date.getTime())) return String(value);\n\n // Use Intl for locale-aware formatting\n switch (format) {\n case 'short':\n return date.toLocaleDateString();\n case 'long':\n return date.toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n case 'datetime':\n return date.toLocaleString();\n default:\n return date.toLocaleDateString();\n }\n });\n\n return builder;\n }\n\n /**\n * Create a number column with standard formatting\n */\n number(fieldName: keyof TData | string, decimals = 0): CoarGridColumnBuilder<TData, number> {\n const builder = new CoarGridColumnBuilder<TData, number>(fieldName);\n\n builder.valueFormatter((params) => {\n const value = params.value;\n if (value === null || value === undefined) return '';\n return value.toLocaleString(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n });\n\n // Right-align numbers\n builder.cellClass('text-right');\n\n return builder;\n }\n\n /**\n * Create a currency column\n */\n currency(\n fieldName: keyof TData | string,\n currency = 'USD'\n ): CoarGridColumnBuilder<TData, number> {\n const builder = new CoarGridColumnBuilder<TData, number>(fieldName);\n\n builder.valueFormatter((params) => {\n const value = params.value;\n if (value === null || value === undefined) return '';\n return value.toLocaleString(undefined, {\n style: 'currency',\n currency,\n });\n });\n\n // Right-align currency\n builder.cellClass('text-right');\n\n return builder;\n }\n\n /**\n * Create a boolean column (displays Yes/No or custom values)\n */\n boolean(\n fieldName: keyof TData | string,\n options: { trueValue?: string; falseValue?: string } = {}\n ): CoarGridColumnBuilder<TData, boolean> {\n const { trueValue = 'Yes', falseValue = 'No' } = options;\n const builder = new CoarGridColumnBuilder<TData, boolean>(fieldName);\n\n builder.valueFormatter((params) => {\n if (params.value === null || params.value === undefined) return '';\n return params.value ? trueValue : falseValue;\n });\n\n return builder;\n }\n}\n","/**\n * Cocoar Theme for AG Grid\n *\n * Creates a customized AG Grid theme using the v33+ theming API.\n * Maps Cocoar design tokens to AG Grid parameters.\n */\nimport { themeQuartz, type Theme } from 'ag-grid-community';\n\n/**\n * Creates the Cocoar AG Grid theme\n *\n * @example\n * ```typescript\n * import { createCocoarTheme } from '@cocoar/data-grid';\n *\n * const gridOptions = {\n * theme: createCocoarTheme(),\n * // ...\n * };\n * ```\n */\nexport function createCocoarTheme(): Theme {\n return themeQuartz.withParams({\n // Typography - Use CSS variables from Cocoar tokens\n fontFamily: 'var(--coar-font-family-body, Poppins, sans-serif)',\n fontSize: 14,\n\n // Spacing\n spacing: 4,\n cellHorizontalPadding: 16,\n rowHeight: 40,\n headerHeight: 40,\n\n // Colors (use CSS vars for light/dark mode support)\n backgroundColor: 'var(--coar-color-surface, #ffffff)',\n foregroundColor: 'var(--coar-color-text-primary, #1a1a1a)',\n borderColor: 'var(--coar-color-border, #e5e7eb)',\n\n // Header\n headerBackgroundColor: 'var(--coar-color-surface-alt, #f9fafb)',\n headerTextColor: 'var(--coar-color-text-primary, #1a1a1a)',\n headerFontWeight: 600,\n\n // Rows\n oddRowBackgroundColor: 'var(--coar-color-surface, #ffffff)',\n rowHoverColor: 'var(--coar-color-surface-hover, #f3f4f6)',\n\n // Selection\n selectedRowBackgroundColor: 'var(--coar-color-primary-light, #e0e7ff)',\n rangeSelectionBackgroundColor: 'var(--coar-color-primary-light, #e0e7ff)',\n\n // Borders\n borderRadius: 6,\n wrapperBorder: false,\n columnBorder: true,\n rowBorder: true,\n });\n}\n\n/**\n * Pre-configured Cocoar theme instance\n *\n * @example\n * ```typescript\n * import { cocoarTheme } from '@cocoar/data-grid';\n *\n * <ag-grid-angular [theme]=\"cocoarTheme\" />\n * ```\n */\nexport const cocoarTheme = createCocoarTheme();\n","import { AgGridAngular } from 'ag-grid-angular';\nimport type {\n ColDef,\n GridApi,\n GridOptions,\n GridReadyEvent,\n RowClickedEvent,\n RowDoubleClickedEvent,\n CellClickedEvent,\n CellDoubleClickedEvent,\n GetRowIdFunc,\n RowClassParams,\n IRowNode,\n IsExternalFilterPresentParams,\n} from 'ag-grid-community';\nimport { Observable, Subject, takeUntil } from 'rxjs';\n\nimport { CoarGridColumnBuilder } from './coar-grid-column-builder';\nimport { CoarGridColumnFactory } from './coar-grid-column-factory';\nimport { cocoarTheme } from '../theme/cocoar-theme';\n\n/** Column definition input - either a builder or a factory function */\nexport type ColumnDefinition<TData> =\n | CoarGridColumnBuilder<TData>\n | ((factory: CoarGridColumnFactory<TData>) => CoarGridColumnBuilder<TData>);\n\n/**\n * Fluent builder for AG Grid configuration.\n *\n * @example\n * ```ts\n * const gridBuilder = CoarGridBuilder.create<User>()\n * .columns([\n * col => col.field('name').header('Name').flex(1),\n * col => col.field('email').header('Email').flex(1),\n * col => col.field('role').header('Role').width(100),\n * ])\n * .rowData(users)\n * .rowId(user => user.id)\n * .onRowClicked(event => console.log(event.data));\n * ```\n */\nexport class CoarGridBuilder<TData = unknown> {\n #grid?: AgGridAngular<TData>;\n #destroy$ = new Subject<void>();\n #gridReady$ = new Subject<GridReadyEvent<TData>>();\n\n #gridOptions: GridOptions<TData> = {};\n #columnDefs: ColDef<TData>[] = [];\n #rowData: TData[] | null = null;\n #rowData$?: Observable<TData[] | null | undefined>;\n\n /** Observable that emits when grid is ready */\n readonly gridReady$ = this.#gridReady$.asObservable();\n\n private constructor() {\n this.#gridOptions = this.#createDefaultOptions();\n }\n\n /** Create a new grid builder */\n static create<TData>(): CoarGridBuilder<TData> {\n return new CoarGridBuilder<TData>();\n }\n\n /** Get the AG Grid API (available after grid ready) */\n get api(): GridApi<TData> | undefined {\n return this.#grid?.api;\n }\n\n // ============================================================\n // Private helpers\n // ============================================================\n\n #createDefaultOptions(): GridOptions<TData> {\n return {\n theme: cocoarTheme,\n suppressPropertyNamesCheck: true,\n animateRows: true,\n rowSelection: undefined,\n };\n }\n\n #mergeOptions(options: GridOptions<TData>): void {\n this.#gridOptions = { ...this.#gridOptions, ...options };\n }\n\n // ============================================================\n // Column Configuration\n // ============================================================\n\n /** Define columns using builders or factory functions */\n columns(definitions: ColumnDefinition<TData>[]): this {\n const factory = new CoarGridColumnFactory<TData>();\n this.#columnDefs = definitions.map((def) => {\n if (def instanceof CoarGridColumnBuilder) {\n return def.build();\n }\n return def(factory).build();\n });\n return this;\n }\n\n /** Set default column definition applied to all columns */\n defaultColDef(\n definition:\n | Partial<ColDef<TData>>\n | ((builder: CoarGridColumnBuilder<TData>) => CoarGridColumnBuilder<TData>)\n ): this {\n if (typeof definition === 'function') {\n const builder = new CoarGridColumnBuilder<TData>();\n this.#gridOptions.defaultColDef = definition(builder).build();\n } else {\n this.#gridOptions.defaultColDef = definition;\n }\n return this;\n }\n\n // ============================================================\n // Data Configuration\n // ============================================================\n\n /** Set row data (static array) */\n rowData(data: TData[] | null): this {\n this.#rowData = data;\n this.#rowData$ = undefined;\n return this;\n }\n\n /** Set row data (observable) */\n rowData$(data$: Observable<TData[] | null | undefined>): this {\n this.#rowData$ = data$;\n this.#rowData = null;\n return this;\n }\n\n /** Set row ID getter for immutable data updates */\n rowId(getRowId: GetRowIdFunc<TData>): this {\n this.#gridOptions.getRowId = getRowId;\n return this;\n }\n\n // ============================================================\n // Row Selection\n // ============================================================\n\n /** Enable row selection */\n rowSelection(mode: 'single' | 'multiple'): this {\n this.#mergeOptions({ rowSelection: mode });\n return this;\n }\n\n // ============================================================\n // Row Styling\n // ============================================================\n\n /** Set row class rules */\n rowClassRules(\n rules: Record<string, ((params: RowClassParams<TData>) => boolean) | string>\n ): this {\n this.#mergeOptions({ rowClassRules: rules });\n return this;\n }\n\n /** Set dynamic row class */\n rowClass(fn: (params: RowClassParams<TData>) => string | string[] | undefined): this {\n this.#mergeOptions({ getRowClass: fn });\n return this;\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n /** Handle grid ready event */\n onGridReady(handler: (event: GridReadyEvent<TData>) => void): this {\n const existing = this.#gridOptions.onGridReady;\n this.#gridOptions.onGridReady = (event) => {\n existing?.(event);\n handler(event);\n };\n return this;\n }\n\n /** Handle row click */\n onRowClicked(handler: (event: RowClickedEvent<TData>) => void): this {\n this.#mergeOptions({ onRowClicked: handler });\n return this;\n }\n\n /** Handle row double-click */\n onRowDoubleClicked(handler: (event: RowDoubleClickedEvent<TData>) => void): this {\n this.#mergeOptions({ onRowDoubleClicked: handler });\n return this;\n }\n\n /** Handle cell click */\n onCellClicked(handler: (event: CellClickedEvent<TData>) => void): this {\n this.#mergeOptions({ onCellClicked: handler });\n return this;\n }\n\n /** Handle cell double-click */\n onCellDoubleClicked(handler: (event: CellDoubleClickedEvent<TData>) => void): this {\n this.#mergeOptions({ onCellDoubleClicked: handler });\n return this;\n }\n\n // ============================================================\n // External Filtering\n // ============================================================\n\n /** Set external filter */\n externalFilter(\n doesFilterPass: (node: IRowNode<TData>) => boolean,\n isFilterPresent?: (params: IsExternalFilterPresentParams<TData>) => boolean\n ): this {\n this.#mergeOptions({\n isExternalFilterPresent: isFilterPresent ?? (() => true),\n doesExternalFilterPass: doesFilterPass,\n });\n return this;\n }\n\n // ============================================================\n // Grid Options\n // ============================================================\n\n /** Enable row animation */\n animateRows(value = true): this {\n this.#mergeOptions({ animateRows: value });\n return this;\n }\n\n /** Set any AG Grid option directly */\n option<K extends keyof GridOptions<TData>>(key: K, value: GridOptions<TData>[K]): this {\n this.#gridOptions[key] = value;\n return this;\n }\n\n /** Merge additional grid options */\n options(options: GridOptions<TData>): this {\n this.#mergeOptions(options);\n return this;\n }\n\n // ============================================================\n // Internal - Used by directive\n // ============================================================\n\n /** @internal Called by the directive to bind to AG Grid */\n _bind(grid: AgGridAngular<TData>): void {\n this.#grid = grid;\n\n // Set grid options\n grid.gridOptions = this.#gridOptions;\n grid.columnDefs = this.#columnDefs;\n\n // Set static row data if provided\n if (this.#rowData !== null) {\n grid.rowData = this.#rowData;\n }\n\n // Subscribe to grid ready\n grid.gridReady.pipe(takeUntil(this.#destroy$)).subscribe((event) => {\n this.#gridReady$.next(event);\n\n // Subscribe to observable row data if provided\n if (this.#rowData$) {\n this.#rowData$.pipe(takeUntil(this.#destroy$)).subscribe((data) => {\n if (data === null || data === undefined) {\n event.api.setGridOption('rowData', []);\n event.api.setGridOption('loading', true);\n } else {\n event.api.setGridOption('rowData', data);\n event.api.setGridOption('loading', false);\n }\n });\n }\n });\n }\n\n /** @internal Called by the directive on destroy */\n _destroy(): void {\n this.#destroy$.next();\n this.#destroy$.complete();\n this.#gridReady$.complete();\n }\n\n /** Get column definitions (for directive) */\n _getColumnDefs(): ColDef<TData>[] {\n return this.#columnDefs;\n }\n\n /** Get grid options (for directive) */\n _getGridOptions(): GridOptions<TData> {\n return this.#gridOptions;\n }\n\n /** Get static row data (for directive) */\n _getRowData(): TData[] | null {\n return this.#rowData;\n }\n}\n","import { Directive, Input, OnDestroy, OnInit, inject } from '@angular/core';\nimport { AgGridAngular } from 'ag-grid-angular';\n\nimport { CoarGridBuilder } from '../builders/coar-grid-builder';\n\n/**\n * Directive that binds a CoarGridBuilder to an AG Grid instance.\n *\n * @example\n * ```html\n * <ag-grid-angular\n * [coarDataGrid]=\"gridBuilder\"\n * class=\"ag-theme-cocoar\"\n * />\n * ```\n *\n * @example\n * ```ts\n * // In component:\n * readonly gridBuilder = CoarGridBuilder.create<User>()\n * .columns([\n * col => col.field('name').header('Name').flex(1),\n * col => col.field('email').header('Email').flex(1),\n * ])\n * .rowData(this.users);\n * ```\n */\n@Directive({\n selector: 'ag-grid-angular[coarDataGrid]',\n exportAs: 'coarDataGrid',\n standalone: true,\n host: {\n class: 'ag-theme-cocoar',\n style: 'display: flex; flex-direction: column; flex-grow: 1;',\n },\n})\nexport class CoarDataGridDirective<TData> implements OnInit, OnDestroy {\n readonly #agGrid = inject(AgGridAngular<TData>);\n\n #gridBuilder?: CoarGridBuilder<TData>;\n\n /**\n * The grid builder configuration\n */\n @Input()\n set coarDataGrid(value: CoarGridBuilder<TData>) {\n this.#gridBuilder = value;\n }\n\n ngOnInit(): void {\n if (!this.#gridBuilder) {\n console.warn('CoarDataGridDirective: No grid builder provided');\n return;\n }\n\n // Bind the builder to the AG Grid instance\n this.#gridBuilder._bind(this.#agGrid);\n }\n\n ngOnDestroy(): void {\n this.#gridBuilder?._destroy();\n }\n}\n","/**\n * Minimal type definitions for @cocoar/data-grid\n * Re-exports commonly used AG Grid types and adds Cocoar-specific extensions\n */\n\n// Re-export commonly used AG Grid types\nexport type {\n ColDef,\n GridOptions,\n GridApi,\n GridReadyEvent,\n RowClickedEvent,\n RowDoubleClickedEvent,\n CellClickedEvent,\n CellDoubleClickedEvent,\n ColumnState,\n GetRowIdFunc,\n RowClassParams,\n ValueFormatterParams,\n ValueGetterParams,\n CellClassParams,\n ICellRendererParams,\n IRowNode,\n} from 'ag-grid-community';\n\n/**\n * Extended column definition with Cocoar-specific properties\n */\nexport interface CoarColDef<TData = unknown> {\n /** AG Grid field name */\n field?: string;\n /** Column header text */\n headerName?: string;\n /** Fixed width in pixels */\n width?: number;\n /** Minimum width in pixels */\n minWidth?: number;\n /** Maximum width in pixels */\n maxWidth?: number;\n /** Flex grow factor for fluid columns */\n flex?: number;\n /** Whether column is sortable */\n sortable?: boolean;\n /** Whether column is resizable */\n resizable?: boolean;\n /** Whether column is hidden */\n hide?: boolean;\n /** Pin column to left or right */\n pinned?: 'left' | 'right' | null;\n /** Custom cell renderer component */\n cellRenderer?: unknown;\n /** Parameters for cell renderer */\n cellRendererParams?: Record<string, unknown>;\n /** Value formatter function */\n valueFormatter?: (params: ValueFormatterParams<TData>) => string;\n /** Value getter function */\n valueGetter?: (params: ValueGetterParams<TData>) => unknown;\n /** CSS class for cells */\n cellClass?: string | string[] | ((params: CellClassParams<TData>) => string | string[]);\n /** CSS style for cells */\n cellStyle?:\n | Record<string, string>\n | ((params: CellClassParams<TData>) => Record<string, string> | null | undefined);\n /** Filter type */\n filter?: boolean | string;\n}\n\nimport type { ValueFormatterParams, ValueGetterParams, CellClassParams } from 'ag-grid-community';\n","// @cocoar/data-grid - AG Grid wrapper with Cocoar theme\n\n// Builders (fluent API for grid configuration)\nexport {\n CoarGridBuilder,\n CoarGridColumnBuilder,\n CoarGridColumnFactory,\n type ColumnDefinition,\n} from './lib/builders';\n\n// Directive (connects builder to AG Grid)\nexport { CoarDataGridDirective } from './lib/directive';\n\n// Theme (Cocoar-styled AG Grid theme)\nexport { cocoarTheme, createCocoarTheme } from './lib/theme/cocoar-theme';\n\n// Types (re-exports from AG Grid + Cocoar extensions)\nexport * from './lib/models';\n\n// Note: Theme CSS should be imported separately in your app's styles:\n// @import '@cocoar/data-grid/lib/theme/ag-theme-cocoar.css';\n// or include the path in angular.json styles array\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cocoar-data-grid.mjs","sources":["../../../../libs/data-grid/src/lib/builders/coar-grid-column-builder.ts","../../../../libs/data-grid/src/lib/cell-renderers/tag-cell-renderer.component.ts","../../../../libs/data-grid/src/lib/cell-renderers/icon-cell-renderer.component.ts","../../../../libs/data-grid/src/lib/cell-renderers/date-cell-renderer.component.ts","../../../../libs/data-grid/src/lib/builders/coar-grid-column-factory.ts","../../../../libs/data-grid/src/lib/theme/cocoar-theme.ts","../../../../libs/data-grid/src/lib/builders/coar-grid-builder.ts","../../../../libs/data-grid/src/lib/directive/coar-data-grid.directive.ts","../../../../libs/data-grid/src/lib/models/index.ts","../../../../libs/data-grid/src/index.ts","../../../../libs/data-grid/src/cocoar-data-grid.ts"],"sourcesContent":["import { Type } from '@angular/core';\nimport type {\n ColDef,\n CellClassParams,\n CellStyle,\n ValueFormatterParams,\n ValueGetterFunc,\n CellDoubleClickedEvent,\n ITooltipParams,\n GetQuickFilterTextParams,\n RowDragCallback,\n IRowNode,\n} from 'ag-grid-community';\n\n/**\n * Fluent builder for AG Grid column definitions.\n *\n * @example\n * ```ts\n * const column = new CoarGridColumnBuilder<User>('name')\n * .header('Full Name')\n * .sortable()\n * .flex(1)\n * .build();\n * ```\n */\nexport class CoarGridColumnBuilder<TData = unknown, TValue = unknown> {\n readonly #colDef: ColDef<TData, TValue>;\n\n constructor(field?: keyof TData | string) {\n this.#colDef = {\n field: field?.toString() as ColDef<TData, TValue>['field'],\n headerName: field?.toString(),\n resizable: true,\n sortable: false,\n };\n }\n\n // ============================================================\n // Basic Properties\n // ============================================================\n\n /** Set the field name (data property) */\n field(value: keyof TData | string): this {\n this.#colDef.field = value.toString() as ColDef<TData, TValue>['field'];\n this.#colDef.headerName = this.#colDef.headerName || value.toString();\n return this;\n }\n\n /** Set the column header text */\n header(value: string): this {\n this.#colDef.headerName = value;\n return this;\n }\n\n /** Set header tooltip */\n headerTooltip(value: string): this {\n this.#colDef.headerTooltip = value;\n return this;\n }\n\n // ============================================================\n // Sizing\n // ============================================================\n\n /** Set fixed width in pixels */\n width(value: number, minWidth?: number, maxWidth?: number): this {\n this.#colDef.width = value;\n if (minWidth !== undefined) this.#colDef.minWidth = minWidth;\n if (maxWidth !== undefined) this.#colDef.maxWidth = maxWidth;\n return this;\n }\n\n /** Set fixed width (min, max, and width all the same) */\n fixedWidth(value: number): this {\n this.#colDef.width = value;\n this.#colDef.minWidth = value;\n this.#colDef.maxWidth = value;\n return this;\n }\n\n /** Set minimum width */\n minWidth(value: number): this {\n this.#colDef.minWidth = value;\n return this;\n }\n\n /** Set maximum width */\n maxWidth(value: number): this {\n this.#colDef.maxWidth = value;\n return this;\n }\n\n /** Set flex grow factor for fluid width */\n flex(value = 1): this {\n this.#colDef.flex = value;\n return this;\n }\n\n // ============================================================\n // Behavior\n // ============================================================\n\n /** Enable/disable sorting */\n sortable(value = true): this {\n this.#colDef.sortable = value;\n return this;\n }\n\n /** Enable/disable resizing */\n resizable(value = true): this {\n this.#colDef.resizable = value;\n return this;\n }\n\n /** Hide/show column */\n hidden(value = true): this {\n this.#colDef.hide = value;\n return this;\n }\n\n /** Pin column to left or right */\n pinned(value: 'left' | 'right' | null): this {\n this.#colDef.pinned = value;\n return this;\n }\n\n /** Lock column position */\n lockPosition(value: boolean | 'left' | 'right' = true): this {\n this.#colDef.lockPosition = value;\n return this;\n }\n\n // ============================================================\n // Cell Rendering\n // ============================================================\n\n /** Set custom cell renderer component */\n cellRenderer(component: Type<unknown>, params?: Record<string, unknown>): this {\n this.#colDef.cellRenderer = component;\n if (params) {\n this.#colDef.cellRendererParams = { ...this.#colDef.cellRendererParams, ...params };\n }\n return this;\n }\n\n /** Set cell renderer parameters */\n cellRendererParams(params: Record<string, unknown>): this {\n this.#colDef.cellRendererParams = { ...this.#colDef.cellRendererParams, ...params };\n return this;\n }\n\n /** Set value formatter for display */\n valueFormatter(fn: (params: ValueFormatterParams<TData, TValue>) => string): this {\n this.#colDef.valueFormatter = fn;\n return this;\n }\n\n /** Set value getter to transform data before display */\n valueGetter(fn: ValueGetterFunc<TData, TValue>): this {\n this.#colDef.valueGetter = fn;\n return this;\n }\n\n // ============================================================\n // Styling\n // ============================================================\n\n /** Set CSS class for cells */\n cellClass(\n value: string | string[] | ((params: CellClassParams<TData, TValue>) => string | string[])\n ): this {\n this.#colDef.cellClass = value;\n return this;\n }\n\n /** Set CSS style for cells */\n cellStyle(\n value: CellStyle | ((params: CellClassParams<TData, TValue>) => CellStyle | null | undefined)\n ): this {\n this.#colDef.cellStyle = value;\n return this;\n }\n\n /** Add a conditional CSS class rule */\n classRule(\n className: string,\n condition: string | ((params: CellClassParams<TData, TValue>) => boolean)\n ): this {\n if (!this.#colDef.cellClassRules) {\n this.#colDef.cellClassRules = {};\n }\n this.#colDef.cellClassRules[className] = condition;\n return this;\n }\n\n // ============================================================\n // Tooltips\n // ============================================================\n\n /** Show tooltip with field value or custom function */\n tooltip(value?: string | ((params: ITooltipParams<TData, TValue>) => string)): this {\n if (value === undefined) {\n this.#colDef.tooltipField = this.#colDef.field;\n } else if (typeof value === 'string') {\n this.#colDef.tooltipField = value as ColDef<TData, TValue>['tooltipField'];\n } else {\n this.#colDef.tooltipValueGetter = value;\n }\n return this;\n }\n\n // ============================================================\n // Events\n // ============================================================\n\n /** Handle cell double-click */\n onCellDoubleClicked(handler: (event: CellDoubleClickedEvent<TData, TValue>) => void): this {\n this.#colDef.onCellDoubleClicked = handler;\n return this;\n }\n\n // ============================================================\n // Filtering\n // ============================================================\n\n /** Enable/disable filtering */\n filter(value: boolean | string = true): this {\n this.#colDef.filter = value;\n return this;\n }\n\n /** Set filter parameters */\n filterParams(params: Record<string, unknown>): this {\n this.#colDef.filterParams = params;\n return this;\n }\n\n // ============================================================\n // Quick Filter\n // ============================================================\n\n /** Set quick filter text extractor or disable quick filtering for this column */\n quickFilter(\n fn: boolean | ((params: GetQuickFilterTextParams<TData, TValue>) => string)\n ): this {\n if (typeof fn === 'boolean') {\n this.#colDef.getQuickFilterText = fn ? undefined : () => '';\n } else {\n this.#colDef.getQuickFilterText = fn;\n }\n return this;\n }\n\n // ============================================================\n // Sorting\n // ============================================================\n\n /** Set custom sort comparator */\n comparator(\n fn: (\n valueA: TValue,\n valueB: TValue,\n nodeA: IRowNode<TData>,\n nodeB: IRowNode<TData>,\n isDescending: boolean\n ) => number\n ): this {\n this.#colDef.comparator = fn as ColDef<TData, TValue>['comparator'];\n return this;\n }\n\n // ============================================================\n // Row Drag\n // ============================================================\n\n /** Enable row drag on this column */\n rowDrag(value: boolean | RowDragCallback<TData, TValue> = true): this {\n this.#colDef.rowDrag = value;\n return this;\n }\n\n // ============================================================\n // Cell Renderer (config pattern)\n // ============================================================\n\n /** Set cell renderer with config object (params wrapped in `config` key) */\n cellRendererConfig(component: Type<unknown>, config: Record<string, unknown> | object): this {\n this.#colDef.cellRenderer = component;\n this.#colDef.cellRendererParams = { ...this.#colDef.cellRendererParams, config };\n return this;\n }\n\n // ============================================================\n // Advanced Options\n // ============================================================\n\n /** Set any AG Grid ColDef option directly */\n option<K extends keyof ColDef<TData, TValue>>(key: K, value: ColDef<TData, TValue>[K]): this {\n this.#colDef[key] = value;\n return this;\n }\n\n /** Apply custom modifications to the column definition */\n customize(fn: (colDef: ColDef<TData, TValue>) => void): this {\n fn(this.#colDef);\n return this;\n }\n\n // ============================================================\n // Build\n // ============================================================\n\n /** Build and return the AG Grid ColDef */\n build(): ColDef<TData, TValue> {\n return { ...this.#colDef };\n }\n}\n","import { Component, ChangeDetectionStrategy, inject } from '@angular/core';\nimport type { ICellRendererParams } from 'ag-grid-community';\nimport type { ICellRendererAngularComp } from 'ag-grid-angular';\nimport { CoarTagComponent, type TagVariant } from '@cocoar/ui/components';\nimport { COAR_I18N_PROVIDER, type CoarI18nProvider } from '@cocoar/localization';\nimport type { TagCellRendererConfig } from './tag-cell-renderer.models';\n\ninterface TagItem {\n label: string;\n variant: TagVariant;\n}\n\n@Component({\n selector: 'coar-tag-cell-renderer',\n standalone: true,\n imports: [CoarTagComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: flex;\n align-items: center;\n gap: var(--coar-spacing-xs, 4px);\n flex-wrap: wrap;\n height: 100%;\n }\n `,\n template: `\n @for (tag of tags; track tag.label) {\n <coar-tag [variant]=\"tag.variant\" [size]=\"size\">{{ tag.label }}</coar-tag>\n }\n `,\n})\nexport class CoarTagCellRendererComponent implements ICellRendererAngularComp {\n tags: TagItem[] = [];\n size: 's' | 'm' | 'l' = 's';\n\n private config: TagCellRendererConfig = {};\n private readonly i18n = inject(COAR_I18N_PROVIDER, { optional: true }) as CoarI18nProvider | null;\n\n agInit(params: ICellRendererParams & { config?: TagCellRendererConfig }): void {\n this.config = params.config ?? {};\n this.size = this.config.size ?? 's';\n this.updateTags(params.value);\n }\n\n refresh(params: ICellRendererParams & { config?: TagCellRendererConfig }): boolean {\n this.updateTags(params.value);\n return true;\n }\n\n private updateTags(value: unknown): void {\n const rawLabels = this.extractLabels(value);\n this.tags = rawLabels.map((label) => ({\n label: this.translateLabel(label),\n variant: this.resolveVariant(label),\n }));\n }\n\n private extractLabels(value: unknown): string[] {\n if (value == null) return [];\n if (Array.isArray(value)) {\n return value.map((item) => this.labelFromItem(item));\n }\n if (typeof value === 'string') {\n const separator = this.config.separator ?? ',';\n return value\n .split(separator)\n .map((s) => s.trim())\n .filter(Boolean);\n }\n return [String(value)];\n }\n\n private labelFromItem(item: unknown): string {\n if (item != null && typeof item === 'object' && this.config.labelProperty) {\n return String((item as Record<string, unknown>)[this.config.labelProperty] ?? '');\n }\n return String(item ?? '');\n }\n\n private translateLabel(label: string): string {\n if (this.config.i18nPrefix && this.i18n) {\n return this.i18n.t(this.config.i18nPrefix + label);\n }\n return label;\n }\n\n private resolveVariant(label: string): TagVariant {\n return this.config.variantMap?.[label] ?? this.config.variant ?? 'neutral';\n }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport type { ICellRendererParams } from 'ag-grid-community';\nimport type { ICellRendererAngularComp } from 'ag-grid-angular';\nimport { CoarIconComponent, type CoarIconSize } from '@cocoar/ui/components';\nimport type { IconCellRendererConfig } from './icon-cell-renderer.models';\n\n@Component({\n selector: 'coar-icon-cell-renderer',\n standalone: true,\n imports: [CoarIconComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n }\n\n :host(.clickable) {\n cursor: pointer;\n }\n `,\n template: `\n @if (iconName) {\n <coar-icon\n [name]=\"iconName\"\n [size]=\"size\"\n [source]=\"source\"\n [color]=\"color\"\n />\n }\n `,\n host: {\n '[class.clickable]': '!!onClick',\n '(click)': 'handleClick()',\n },\n})\nexport class CoarIconCellRendererComponent implements ICellRendererAngularComp {\n iconName = '';\n size: CoarIconSize = 's';\n source: string | undefined;\n color = 'inherit';\n onClick: ((params: ICellRendererParams) => void) | undefined;\n\n private params!: ICellRendererParams;\n\n agInit(params: ICellRendererParams & { config?: IconCellRendererConfig }): void {\n this.params = params;\n const config = params.config ?? {};\n this.size = config.size ?? 's';\n this.source = config.source;\n this.color = config.color ?? 'inherit';\n this.onClick = config.onClick;\n this.iconName = params.value ?? '';\n }\n\n refresh(params: ICellRendererParams & { config?: IconCellRendererConfig }): boolean {\n this.params = params;\n this.iconName = params.value ?? '';\n return true;\n }\n\n handleClick(): void {\n this.onClick?.(this.params);\n }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport type { ICellRendererParams } from 'ag-grid-community';\nimport type { ICellRendererAngularComp } from 'ag-grid-angular';\nimport { CoarDatePipe } from '@cocoar/localization';\nimport type { DateCellRendererConfig } from './date-cell-renderer.models';\n\n@Component({\n selector: 'coar-date-cell-renderer',\n standalone: true,\n imports: [CoarDatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: flex;\n align-items: center;\n height: 100%;\n }\n `,\n template: `{{ dateValue | coarDate }}`,\n})\nexport class CoarDateCellRendererComponent implements ICellRendererAngularComp {\n dateValue: Date | string | null = null;\n\n agInit(params: ICellRendererParams & { config?: DateCellRendererConfig }): void {\n this.updateValue(params.value);\n }\n\n refresh(params: ICellRendererParams & { config?: DateCellRendererConfig }): boolean {\n this.updateValue(params.value);\n return true;\n }\n\n private updateValue(value: unknown): void {\n if (!value) {\n this.dateValue = null;\n return;\n }\n if (value instanceof Date) {\n this.dateValue = value;\n } else if (typeof value === 'string') {\n this.dateValue = value;\n } else {\n this.dateValue = null;\n }\n }\n}\n","import { CoarGridColumnBuilder } from './coar-grid-column-builder';\nimport { CoarTagCellRendererComponent } from '../cell-renderers/tag-cell-renderer.component';\nimport { CoarIconCellRendererComponent } from '../cell-renderers/icon-cell-renderer.component';\nimport { CoarDateCellRendererComponent } from '../cell-renderers/date-cell-renderer.component';\nimport type { TagCellRendererConfig } from '../cell-renderers/tag-cell-renderer.models';\nimport type { IconCellRendererConfig } from '../cell-renderers/icon-cell-renderer.models';\nimport type { DateCellRendererConfig } from '../cell-renderers/date-cell-renderer.models';\n\n/**\n * Factory for creating typed column builders.\n * Provides convenient methods for common column types.\n *\n * @example\n * ```ts\n * // In column definitions:\n * CoarGridBuilder.create<User>()\n * .columns([\n * col => col.field('name').header('Name').flex(1),\n * col => col.field('createdAt').header('Created').width(150),\n * col => col.tag('status', { variantMap: { active: 'success' } }),\n * col => col.icon('type', { size: 's' }),\n * ])\n * ```\n */\nexport class CoarGridColumnFactory<TData = unknown> {\n /**\n * Create a column builder for the given field\n */\n field<TValue = unknown>(fieldName: keyof TData | string): CoarGridColumnBuilder<TData, TValue> {\n return new CoarGridColumnBuilder<TData, TValue>(fieldName);\n }\n\n /**\n * Create a date column with standard or custom formatting.\n *\n * @param format - Preset name ('short' | 'long' | 'datetime'), Intl options object, or custom formatter function\n */\n date(\n fieldName: keyof TData | string,\n format: string | Intl.DateTimeFormatOptions | ((date: Date) => string) = 'short'\n ): CoarGridColumnBuilder<TData, Date | string> {\n const builder = new CoarGridColumnBuilder<TData, Date | string>(fieldName);\n\n builder.valueFormatter((params) => {\n const value = params.value;\n if (!value) return '';\n\n const date = value instanceof Date ? value : new Date(value);\n if (isNaN(date.getTime())) return String(value);\n\n // Custom formatter function\n if (typeof format === 'function') {\n return format(date);\n }\n\n // Intl options object\n if (typeof format === 'object') {\n return new Intl.DateTimeFormat(undefined, format).format(date);\n }\n\n // Preset string\n switch (format) {\n case 'short':\n return date.toLocaleDateString();\n case 'long':\n return date.toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n case 'datetime':\n return date.toLocaleString();\n default:\n return date.toLocaleDateString();\n }\n });\n\n return builder;\n }\n\n /**\n * Create a number column with standard formatting\n */\n number(fieldName: keyof TData | string, decimals = 0): CoarGridColumnBuilder<TData, number> {\n const builder = new CoarGridColumnBuilder<TData, number>(fieldName);\n\n builder.valueFormatter((params) => {\n const value = params.value;\n if (value === null || value === undefined) return '';\n return value.toLocaleString(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n });\n\n // Right-align numbers\n builder.cellClass('text-right');\n\n return builder;\n }\n\n /**\n * Create a currency column\n */\n currency(\n fieldName: keyof TData | string,\n currency = 'USD'\n ): CoarGridColumnBuilder<TData, number> {\n const builder = new CoarGridColumnBuilder<TData, number>(fieldName);\n\n builder.valueFormatter((params) => {\n const value = params.value;\n if (value === null || value === undefined) return '';\n return value.toLocaleString(undefined, {\n style: 'currency',\n currency,\n });\n });\n\n // Right-align currency\n builder.cellClass('text-right');\n\n return builder;\n }\n\n /**\n * Create a boolean column (displays Yes/No or custom values)\n */\n boolean(\n fieldName: keyof TData | string,\n options: { trueValue?: string; falseValue?: string } = {}\n ): CoarGridColumnBuilder<TData, boolean> {\n const { trueValue = 'Yes', falseValue = 'No' } = options;\n const builder = new CoarGridColumnBuilder<TData, boolean>(fieldName);\n\n builder.valueFormatter((params) => {\n if (params.value === null || params.value === undefined) return '';\n return params.value ? trueValue : falseValue;\n });\n\n return builder;\n }\n\n /**\n * Create a tag column that renders values as `<coar-tag>` elements.\n *\n * Supports string (split by separator), array, and object array values.\n *\n * @param config - Tag rendering configuration (variantMap, size, i18nPrefix, etc.)\n */\n tag(\n fieldName: keyof TData | string,\n config?: TagCellRendererConfig\n ): CoarGridColumnBuilder<TData, string | string[]> {\n const builder = new CoarGridColumnBuilder<TData, string | string[]>(fieldName);\n builder.cellRendererConfig(CoarTagCellRendererComponent, config ?? {});\n builder.sortable();\n\n // Alphabetical comparator on joined tag labels\n const separator = config?.separator ?? ',';\n builder.comparator((valueA, valueB) => {\n const normalize = (v: unknown): string => {\n if (Array.isArray(v)) return v.map(String).sort().join(',');\n if (typeof v === 'string') return v.split(separator).map((s) => s.trim()).sort().join(',');\n return String(v ?? '');\n };\n return normalize(valueA).localeCompare(normalize(valueB));\n });\n\n return builder;\n }\n\n /**\n * Create an icon column that renders values as `<coar-icon>` elements.\n *\n * The cell value is used as the icon name.\n *\n * @param config - Icon rendering configuration (size, source, color, onClick)\n */\n icon(\n fieldName: keyof TData | string,\n config?: IconCellRendererConfig\n ): CoarGridColumnBuilder<TData, string> {\n const builder = new CoarGridColumnBuilder<TData, string>(fieldName);\n builder.cellRendererConfig(CoarIconCellRendererComponent, config ?? {});\n return builder;\n }\n\n /**\n * Create a date column with locale-aware rendering via `CoarDatePipe`.\n *\n * Unlike `date()`, this uses a cell renderer component for full locale integration.\n *\n * @param config - Date rendering configuration (showSeconds, customFormat)\n */\n localDate(\n fieldName: keyof TData | string,\n config?: DateCellRendererConfig\n ): CoarGridColumnBuilder<TData, Date | string> {\n const builder = new CoarGridColumnBuilder<TData, Date | string>(fieldName);\n builder.cellRendererConfig(CoarDateCellRendererComponent, config ?? {});\n builder.sortable();\n return builder;\n }\n}\n","/**\n * Cocoar Theme for AG Grid\n *\n * Creates a customized AG Grid theme using the v33+ theming API.\n * Maps Cocoar design tokens to AG Grid parameters.\n */\nimport { themeQuartz, type Theme } from 'ag-grid-community';\n\n/**\n * Creates the Cocoar AG Grid theme\n *\n * @example\n * ```typescript\n * import { createCocoarTheme } from '@cocoar/data-grid';\n *\n * const gridOptions = {\n * theme: createCocoarTheme(),\n * // ...\n * };\n * ```\n */\nexport function createCocoarTheme(): Theme {\n return themeQuartz.withParams({\n // Typography - Use CSS variables from Cocoar tokens\n fontFamily: 'var(--coar-font-family-body, Poppins, sans-serif)',\n fontSize: 14,\n\n // Spacing\n spacing: 4,\n cellHorizontalPadding: 16,\n rowHeight: 40,\n headerHeight: 40,\n\n // Colors (use CSS vars for light/dark mode support)\n backgroundColor: 'var(--coar-color-surface, #ffffff)',\n foregroundColor: 'var(--coar-color-text-primary, #1a1a1a)',\n borderColor: 'var(--coar-color-border, #e5e7eb)',\n\n // Header\n headerBackgroundColor: 'var(--coar-color-surface-alt, #f9fafb)',\n headerTextColor: 'var(--coar-color-text-primary, #1a1a1a)',\n headerFontWeight: 600,\n\n // Rows\n oddRowBackgroundColor: 'var(--coar-color-surface, #ffffff)',\n rowHoverColor: 'var(--coar-color-surface-hover, #f3f4f6)',\n\n // Selection\n selectedRowBackgroundColor: 'var(--coar-color-primary-light, #e0e7ff)',\n rangeSelectionBackgroundColor: 'var(--coar-color-primary-light, #e0e7ff)',\n\n // Borders\n borderRadius: 6,\n wrapperBorder: false,\n columnBorder: true,\n rowBorder: true,\n });\n}\n\n/**\n * Pre-configured Cocoar theme instance\n *\n * @example\n * ```typescript\n * import { cocoarTheme } from '@cocoar/data-grid';\n *\n * <ag-grid-angular [theme]=\"cocoarTheme\" />\n * ```\n */\nexport const cocoarTheme = createCocoarTheme();\n","import { AgGridAngular } from 'ag-grid-angular';\nimport type {\n ColDef,\n GridApi,\n GridOptions,\n GridReadyEvent,\n RowClickedEvent,\n RowDoubleClickedEvent,\n CellClickedEvent,\n CellDoubleClickedEvent,\n GetRowIdFunc,\n RowClassParams,\n IRowNode,\n IsExternalFilterPresentParams,\n GridSizeChangedEvent,\n CellContextMenuEvent,\n ColumnState,\n PostSortRowsParams,\n} from 'ag-grid-community';\nimport { Observable, Subject, takeUntil } from 'rxjs';\n\nimport { CoarGridColumnBuilder } from './coar-grid-column-builder';\nimport { CoarGridColumnFactory } from './coar-grid-column-factory';\nimport { cocoarTheme } from '../theme/cocoar-theme';\n\n/** Column definition input - either a builder or a factory function */\nexport type ColumnDefinition<TData> =\n | CoarGridColumnBuilder<TData, any>\n | ((factory: CoarGridColumnFactory<TData>) => CoarGridColumnBuilder<TData, any>);\n\n/**\n * Fluent builder for AG Grid configuration.\n *\n * @example\n * ```ts\n * const gridBuilder = CoarGridBuilder.create<User>()\n * .columns([\n * col => col.field('name').header('Name').flex(1),\n * col => col.field('email').header('Email').flex(1),\n * col => col.field('role').header('Role').width(100),\n * ])\n * .rowData(users)\n * .rowId(user => user.id)\n * .onRowClicked(event => console.log(event.data));\n * ```\n */\nexport class CoarGridBuilder<TData = unknown> {\n #grid?: AgGridAngular<TData>;\n #destroy$ = new Subject<void>();\n #gridReady$ = new Subject<GridReadyEvent<TData>>();\n\n #gridOptions: GridOptions<TData> = {};\n #columnDefs: ColDef<TData>[] = [];\n #rowData: TData[] | null = null;\n #rowData$?: Observable<TData[] | null | undefined>;\n\n // Deferred state (applied after grid ready)\n #columnState?: ColumnState[] | Observable<ColumnState[] | undefined>;\n #openRows$?: Observable<string[]>;\n #sortFilterTriggers: Observable<unknown>[] = [];\n #externalFilterTriggers: Observable<unknown>[] = [];\n\n // Viewport event handlers (wired by directive)\n #viewportClickHandler?: ($event: MouseEvent, api: GridApi<TData>) => void;\n #viewportContextMenuHandler?: ($event: MouseEvent, api: GridApi<TData>) => void;\n\n /** Observable that emits when grid is ready */\n readonly gridReady$ = this.#gridReady$.asObservable();\n\n private constructor() {\n this.#gridOptions = this.#createDefaultOptions();\n }\n\n /** Create a new grid builder */\n static create<TData>(): CoarGridBuilder<TData> {\n return new CoarGridBuilder<TData>();\n }\n\n /** Get the AG Grid API (available after grid ready) */\n get api(): GridApi<TData> | undefined {\n return this.#grid?.api;\n }\n\n // ============================================================\n // Private helpers\n // ============================================================\n\n #createDefaultOptions(): GridOptions<TData> {\n return {\n theme: cocoarTheme,\n animateRows: true,\n rowSelection: undefined,\n };\n }\n\n #mergeOptions(options: GridOptions<TData>): void {\n this.#gridOptions = { ...this.#gridOptions, ...options };\n }\n\n #composeHandler<E>(\n existing: ((event: E) => void) | undefined,\n handler: (event: E) => void\n ): (event: E) => void {\n if (existing) {\n return (event: E) => {\n existing(event);\n handler(event);\n };\n }\n return handler;\n }\n\n // ============================================================\n // Column Configuration\n // ============================================================\n\n /** Define columns using builders or factory functions */\n columns(definitions: ColumnDefinition<TData>[]): this {\n const factory = new CoarGridColumnFactory<TData>();\n this.#columnDefs = definitions.map((def) => {\n if (def instanceof CoarGridColumnBuilder) {\n return def.build();\n }\n return def(factory).build();\n });\n return this;\n }\n\n /** Set default column definition applied to all columns */\n defaultColDef(\n definition:\n | Partial<ColDef<TData>>\n | ((builder: CoarGridColumnBuilder<TData>) => CoarGridColumnBuilder<TData>)\n ): this {\n if (typeof definition === 'function') {\n const builder = new CoarGridColumnBuilder<TData>();\n this.#gridOptions.defaultColDef = definition(builder).build();\n } else {\n this.#gridOptions.defaultColDef = definition;\n }\n return this;\n }\n\n // ============================================================\n // Data Configuration\n // ============================================================\n\n /** Set row data (static array) */\n rowData(data: TData[] | null): this {\n this.#rowData = data;\n this.#rowData$ = undefined;\n return this;\n }\n\n /** Set row data (observable) */\n rowData$(data$: Observable<TData[] | null | undefined>): this {\n this.#rowData$ = data$;\n this.#rowData = null;\n return this;\n }\n\n /** Set row ID getter for immutable data updates */\n rowId(getRowId: GetRowIdFunc<TData>): this {\n this.#gridOptions.getRowId = getRowId;\n return this;\n }\n\n // ============================================================\n // Row Selection\n // ============================================================\n\n /** Enable row selection */\n rowSelection(mode: 'single' | 'multiple'): this {\n const mapped = mode === 'single' ? 'singleRow' : 'multiRow';\n this.#mergeOptions({ rowSelection: { mode: mapped } });\n return this;\n }\n\n // ============================================================\n // Row Styling\n // ============================================================\n\n /** Set row class rules */\n rowClassRules(\n rules: Record<string, ((params: RowClassParams<TData>) => boolean) | string>\n ): this {\n this.#mergeOptions({ rowClassRules: rules });\n return this;\n }\n\n /** Set dynamic row class */\n rowClass(fn: (params: RowClassParams<TData>) => string | string[] | undefined): this {\n this.#mergeOptions({ getRowClass: fn });\n return this;\n }\n\n // ============================================================\n // Sorting\n // ============================================================\n\n /** Set initial sort column and direction */\n defaultSort(field: string, direction: 'asc' | 'desc'): this {\n this.#gridOptions.initialState = {\n ...this.#gridOptions.initialState,\n sort: {\n sortModel: [{ colId: field, sort: direction }],\n },\n };\n return this;\n }\n\n /** Set custom post-sort function to reorder rows after AG Grid sorts */\n sortFunction(fn: (params: PostSortRowsParams<TData>) => void): this {\n this.#mergeOptions({ postSortRows: fn });\n return this;\n }\n\n /** Re-trigger sort and filter when the given observable emits */\n updateSortAndFilterWhen(trigger: Observable<unknown>): this {\n this.#sortFilterTriggers.push(trigger);\n return this;\n }\n\n // ============================================================\n // Column State\n // ============================================================\n\n /** Merge column state to restore column widths, order, visibility */\n columnState(state: ColumnState[] | Observable<ColumnState[] | undefined>): this {\n this.#columnState = state;\n return this;\n }\n\n // ============================================================\n // Tree / Group Data\n // ============================================================\n\n /** Set which parent rows are expanded (observable of row IDs) */\n openRows(openRows$: Observable<string[]>): this {\n this.#openRows$ = openRows$;\n return this;\n }\n\n // ============================================================\n // Editing\n // ============================================================\n\n /** Enable full-row editing mode */\n fullRowEdit(value = true): this {\n this.#mergeOptions({ editType: value ? 'fullRow' : undefined });\n return this;\n }\n\n /** Stop cell editing when cells lose focus */\n stopEditingWhenCellsLoseFocus(value = true): this {\n this.#mergeOptions({ stopEditingWhenCellsLoseFocus: value });\n return this;\n }\n\n // ============================================================\n // Resize\n // ============================================================\n\n /** Enable shift-key column resize mode */\n shiftResizeMode(value = true): this {\n this.#mergeOptions({ colResizeDefault: value ? 'shift' : undefined });\n return this;\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n /** Handle grid ready event */\n onGridReady(handler: (event: GridReadyEvent<TData>) => void): this {\n this.#gridOptions.onGridReady = this.#composeHandler(\n this.#gridOptions.onGridReady,\n handler\n );\n return this;\n }\n\n /** Handle row click */\n onRowClicked(handler: (event: RowClickedEvent<TData>) => void): this {\n this.#mergeOptions({ onRowClicked: handler });\n return this;\n }\n\n /** Handle row double-click */\n onRowDoubleClicked(handler: (event: RowDoubleClickedEvent<TData>) => void): this {\n this.#mergeOptions({ onRowDoubleClicked: handler });\n return this;\n }\n\n /** Handle cell click */\n onCellClicked(handler: (event: CellClickedEvent<TData>) => void): this {\n this.#mergeOptions({ onCellClicked: handler });\n return this;\n }\n\n /** Handle cell double-click */\n onCellDoubleClicked(handler: (event: CellDoubleClickedEvent<TData>) => void): this {\n this.#mergeOptions({ onCellDoubleClicked: handler });\n return this;\n }\n\n /** Handle grid size changed event */\n onGridSizeChanged(handler: (event: GridSizeChangedEvent<TData>) => void): this {\n this.#gridOptions.onGridSizeChanged = this.#composeHandler(\n this.#gridOptions.onGridSizeChanged,\n handler\n );\n return this;\n }\n\n /** Handle cell context menu (right-click). Ctrl+click is passed through to the browser. */\n onCellContextMenu(handler: (event: CellContextMenuEvent<TData>) => void): this {\n this.#mergeOptions({\n onCellContextMenu: (event: CellContextMenuEvent<TData>) => {\n const mouseEvent = event.event as MouseEvent | undefined;\n if (mouseEvent?.ctrlKey) return;\n handler(event);\n },\n });\n return this;\n }\n\n /**\n * Handle click on the grid viewport (empty area outside cells).\n * Wired by the directive via HostListener.\n */\n onViewportClick(handler: ($event: MouseEvent, api: GridApi<TData>) => void): this {\n this.#viewportClickHandler = handler;\n return this;\n }\n\n /**\n * Handle context menu on the grid viewport (empty area outside cells).\n * Wired by the directive via HostListener.\n */\n onViewportContextMenu(handler: ($event: MouseEvent, api: GridApi<TData>) => void): this {\n this.#viewportContextMenuHandler = handler;\n return this;\n }\n\n // ============================================================\n // External Filtering\n // ============================================================\n\n /** Set external filter */\n externalFilter(\n doesFilterPass: (node: IRowNode<TData>) => boolean,\n isFilterPresent?: (params: IsExternalFilterPresentParams<TData>) => boolean\n ): this {\n this.#mergeOptions({\n isExternalFilterPresent: isFilterPresent ?? (() => true),\n doesExternalFilterPass: doesFilterPass,\n });\n return this;\n }\n\n /** Re-trigger external filter when the given observable emits */\n updateExternalFilterWhen(trigger: Observable<unknown>): this {\n this.#externalFilterTriggers.push(trigger);\n return this;\n }\n\n // ============================================================\n // Grid Options\n // ============================================================\n\n /** Enable row animation */\n animateRows(value = true): this {\n this.#mergeOptions({ animateRows: value });\n return this;\n }\n\n /** Set any AG Grid option directly */\n option<K extends keyof GridOptions<TData>>(key: K, value: GridOptions<TData>[K]): this {\n this.#gridOptions[key] = value;\n return this;\n }\n\n /** Merge additional grid options */\n options(options: GridOptions<TData>): this {\n this.#mergeOptions(options);\n return this;\n }\n\n // ============================================================\n // Internal - Used by directive\n // ============================================================\n\n /** @internal Called by the directive to bind to AG Grid */\n _bind(grid: AgGridAngular<TData>): void {\n this.#grid = grid;\n\n // Set grid options\n grid.gridOptions = this.#gridOptions;\n grid.columnDefs = this.#columnDefs;\n\n // Set static row data if provided\n if (this.#rowData !== null) {\n grid.rowData = this.#rowData;\n }\n\n // Subscribe to grid ready\n grid.gridReady.pipe(takeUntil(this.#destroy$)).subscribe((event) => {\n this.#gridReady$.next(event);\n\n // Subscribe to observable row data if provided\n if (this.#rowData$) {\n this.#rowData$.pipe(takeUntil(this.#destroy$)).subscribe((data) => {\n if (data === null || data === undefined) {\n event.api.setGridOption('rowData', []);\n event.api.setGridOption('loading', true);\n } else {\n event.api.setGridOption('rowData', data);\n event.api.setGridOption('loading', false);\n }\n });\n }\n\n // Apply column state\n if (this.#columnState) {\n if (this.#columnState instanceof Observable) {\n (this.#columnState as Observable<ColumnState[] | undefined>)\n .pipe(takeUntil(this.#destroy$))\n .subscribe((state) => {\n if (state) {\n event.api.applyColumnState({ state, applyOrder: true });\n }\n });\n } else {\n event.api.applyColumnState({ state: this.#columnState, applyOrder: true });\n }\n }\n\n // Subscribe to sort/filter triggers\n for (const trigger of this.#sortFilterTriggers) {\n trigger.pipe(takeUntil(this.#destroy$)).subscribe(() => {\n event.api.onSortChanged();\n event.api.onFilterChanged();\n });\n }\n\n // Subscribe to external filter triggers\n for (const trigger of this.#externalFilterTriggers) {\n trigger.pipe(takeUntil(this.#destroy$)).subscribe(() => {\n event.api.onFilterChanged();\n });\n }\n\n // Subscribe to open rows\n if (this.#openRows$) {\n this.#openRows$.pipe(takeUntil(this.#destroy$)).subscribe((openRowIds) => {\n event.api.forEachNode((node) => {\n if (node.group || node.master) {\n const shouldBeOpen = openRowIds.includes(node.key ?? node.id ?? '');\n if (node.expanded !== shouldBeOpen) {\n node.setExpanded(shouldBeOpen);\n }\n }\n });\n });\n }\n });\n }\n\n /** @internal Called by the directive on destroy */\n _destroy(): void {\n this.#destroy$.next();\n this.#destroy$.complete();\n this.#gridReady$.complete();\n }\n\n /** @internal Get viewport click handler (for directive) */\n _getViewportClickHandler(): (($event: MouseEvent, api: GridApi<TData>) => void) | undefined {\n return this.#viewportClickHandler;\n }\n\n /** @internal Get viewport context menu handler (for directive) */\n _getViewportContextMenuHandler(): (($event: MouseEvent, api: GridApi<TData>) => void) | undefined {\n return this.#viewportContextMenuHandler;\n }\n\n /** @internal Check if a cell context menu handler is registered (for directive) */\n _hasCellContextMenuHandler(): boolean {\n return this.#gridOptions.onCellContextMenu != null;\n }\n\n /** Get column definitions (for directive) */\n _getColumnDefs(): ColDef<TData>[] {\n return this.#columnDefs;\n }\n\n /** Get grid options (for directive) */\n _getGridOptions(): GridOptions<TData> {\n return this.#gridOptions;\n }\n\n /** Get static row data (for directive) */\n _getRowData(): TData[] | null {\n return this.#rowData;\n }\n}\n","import { Directive, HostListener, Input, OnDestroy, OnInit, inject } from '@angular/core';\nimport { AgGridAngular } from 'ag-grid-angular';\n\nimport { CoarGridBuilder } from '../builders/coar-grid-builder';\n\nconst VIEWPORT_CLASSES = ['ag-body-viewport', 'ag-center-cols-viewport'];\n\nfunction isViewportTarget(event: MouseEvent): boolean {\n const target = event.target as HTMLElement;\n return VIEWPORT_CLASSES.some((cls) => target.classList.contains(cls));\n}\n\n/**\n * Directive that binds a CoarGridBuilder to an AG Grid instance.\n *\n * @example\n * ```html\n * <ag-grid-angular\n * [coarDataGrid]=\"gridBuilder\"\n * class=\"ag-theme-cocoar\"\n * />\n * ```\n *\n * @example\n * ```ts\n * // In component:\n * readonly gridBuilder = CoarGridBuilder.create<User>()\n * .columns([\n * col => col.field('name').header('Name').flex(1),\n * col => col.field('email').header('Email').flex(1),\n * ])\n * .rowData(this.users);\n * ```\n */\n@Directive({\n selector: 'ag-grid-angular[coarDataGrid]',\n exportAs: 'coarDataGrid',\n standalone: true,\n host: {\n class: 'ag-theme-cocoar',\n style: 'display: flex; flex-direction: column; flex-grow: 1;',\n },\n})\nexport class CoarDataGridDirective<TData> implements OnInit, OnDestroy {\n readonly #agGrid = inject(AgGridAngular<TData>);\n\n #gridBuilder?: CoarGridBuilder<TData>;\n\n /**\n * The grid builder configuration\n */\n @Input()\n set coarDataGrid(value: CoarGridBuilder<TData>) {\n this.#gridBuilder = value;\n }\n\n ngOnInit(): void {\n if (!this.#gridBuilder) {\n console.warn('CoarDataGridDirective: No grid builder provided');\n return;\n }\n\n // Bind the builder to the AG Grid instance\n this.#gridBuilder._bind(this.#agGrid);\n }\n\n ngOnDestroy(): void {\n this.#gridBuilder?._destroy();\n }\n\n @HostListener('click', ['$event'])\n onHostClick($event: MouseEvent): void {\n if ($event.ctrlKey) return;\n\n const handler = this.#gridBuilder?._getViewportClickHandler();\n if (handler && isViewportTarget($event)) {\n $event.preventDefault();\n handler($event, this.#agGrid.api);\n }\n }\n\n @HostListener('contextmenu', ['$event'])\n onHostContextMenu($event: MouseEvent): void {\n if ($event.ctrlKey) return;\n\n if (isViewportTarget($event)) {\n const handler = this.#gridBuilder?._getViewportContextMenuHandler();\n if (handler) {\n $event.preventDefault();\n handler($event, this.#agGrid.api);\n }\n } else if (this.#gridBuilder?._hasCellContextMenuHandler()) {\n // Suppress the browser context menu — AG Grid's onCellContextMenu handles it\n $event.preventDefault();\n }\n }\n}\n","/**\n * Minimal type definitions for @cocoar/data-grid\n * Re-exports commonly used AG Grid types and adds Cocoar-specific extensions\n */\n\n// Re-export commonly used AG Grid types\nexport type {\n ColDef,\n GridOptions,\n GridApi,\n GridReadyEvent,\n RowClickedEvent,\n RowDoubleClickedEvent,\n CellClickedEvent,\n CellDoubleClickedEvent,\n CellContextMenuEvent,\n GridSizeChangedEvent,\n ColumnState,\n GetRowIdFunc,\n RowClassParams,\n ValueFormatterParams,\n ValueGetterParams,\n CellClassParams,\n ICellRendererParams,\n IRowNode,\n PostSortRowsParams,\n GetQuickFilterTextParams,\n RowDragCallback,\n} from 'ag-grid-community';\n\n/**\n * Extended column definition with Cocoar-specific properties\n */\nexport interface CoarColDef<TData = unknown> {\n /** AG Grid field name */\n field?: string;\n /** Column header text */\n headerName?: string;\n /** Fixed width in pixels */\n width?: number;\n /** Minimum width in pixels */\n minWidth?: number;\n /** Maximum width in pixels */\n maxWidth?: number;\n /** Flex grow factor for fluid columns */\n flex?: number;\n /** Whether column is sortable */\n sortable?: boolean;\n /** Whether column is resizable */\n resizable?: boolean;\n /** Whether column is hidden */\n hide?: boolean;\n /** Pin column to left or right */\n pinned?: 'left' | 'right' | null;\n /** Custom cell renderer component */\n cellRenderer?: unknown;\n /** Parameters for cell renderer */\n cellRendererParams?: Record<string, unknown>;\n /** Value formatter function */\n valueFormatter?: (params: ValueFormatterParams<TData>) => string;\n /** Value getter function */\n valueGetter?: (params: ValueGetterParams<TData>) => unknown;\n /** CSS class for cells */\n cellClass?: string | string[] | ((params: CellClassParams<TData>) => string | string[]);\n /** CSS style for cells */\n cellStyle?:\n | Record<string, string>\n | ((params: CellClassParams<TData>) => Record<string, string> | null | undefined);\n /** Filter type */\n filter?: boolean | string;\n}\n\nimport type { ValueFormatterParams, ValueGetterParams, CellClassParams } from 'ag-grid-community';\n","// @cocoar/data-grid - AG Grid wrapper with Cocoar theme\n\n// Builders (fluent API for grid configuration)\nexport {\n CoarGridBuilder,\n CoarGridColumnBuilder,\n CoarGridColumnFactory,\n type ColumnDefinition,\n} from './lib/builders';\n\n// Directive (connects builder to AG Grid)\nexport { CoarDataGridDirective } from './lib/directive';\n\n// Theme (Cocoar-styled AG Grid theme)\nexport { cocoarTheme, createCocoarTheme } from './lib/theme/cocoar-theme';\n\n// Cell renderer config types (public API)\nexport type { TagCellRendererConfig } from './lib/cell-renderers';\nexport type { IconCellRendererConfig } from './lib/cell-renderers';\nexport type { DateCellRendererConfig } from './lib/cell-renderers';\n\n// Types (re-exports from AG Grid + Cocoar extensions)\nexport * from './lib/models';\n\n// Note: Theme CSS should be imported separately in your app's styles:\n// @import '@cocoar/data-grid/lib/theme/ag-theme-cocoar.css';\n// or include the path in angular.json styles array\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cocoar/data-grid",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "AG Grid wrapper components for the Cocoar Design System",
|
|
5
5
|
"author": "Cocoar",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -25,8 +25,10 @@
|
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
27
|
"@angular/core": "^21.0.0",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
28
|
+
"@cocoar/localization": "0.2.0",
|
|
29
|
+
"@cocoar/ui": "0.2.0",
|
|
30
|
+
"ag-grid-angular": "^35.0.0",
|
|
31
|
+
"ag-grid-community": "^35.0.0",
|
|
30
32
|
"rxjs": "^7.8.0"
|
|
31
33
|
},
|
|
32
34
|
"sideEffects": false,
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { AgGridAngular } from 'ag-grid-angular';
|
|
2
|
-
import { ValueFormatterParams, ValueGetterFunc, CellClassParams, CellStyle, ITooltipParams, CellDoubleClickedEvent, ColDef, GridReadyEvent, GridApi, GetRowIdFunc, RowClassParams, RowClickedEvent, RowDoubleClickedEvent, CellClickedEvent,
|
|
3
|
-
export { CellClassParams, CellClickedEvent, CellDoubleClickedEvent, ColDef, ColumnState, GetRowIdFunc, GridApi, GridOptions, GridReadyEvent, ICellRendererParams, IRowNode, RowClassParams, RowClickedEvent, RowDoubleClickedEvent, ValueFormatterParams, ValueGetterParams } from 'ag-grid-community';
|
|
2
|
+
import { ValueFormatterParams, ValueGetterFunc, CellClassParams, CellStyle, ITooltipParams, CellDoubleClickedEvent, GetQuickFilterTextParams, IRowNode, RowDragCallback, ColDef, ICellRendererParams, GridReadyEvent, GridApi, GetRowIdFunc, RowClassParams, PostSortRowsParams, ColumnState, RowClickedEvent, RowDoubleClickedEvent, CellClickedEvent, GridSizeChangedEvent, CellContextMenuEvent, IsExternalFilterPresentParams, GridOptions, Theme, ValueGetterParams } from 'ag-grid-community';
|
|
3
|
+
export { CellClassParams, CellClickedEvent, CellContextMenuEvent, CellDoubleClickedEvent, ColDef, ColumnState, GetQuickFilterTextParams, GetRowIdFunc, GridApi, GridOptions, GridReadyEvent, GridSizeChangedEvent, ICellRendererParams, IRowNode, PostSortRowsParams, RowClassParams, RowClickedEvent, RowDoubleClickedEvent, RowDragCallback, ValueFormatterParams, ValueGetterParams } from 'ag-grid-community';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
5
|
import * as i0 from '@angular/core';
|
|
6
6
|
import { Type, OnInit, OnDestroy } from '@angular/core';
|
|
7
|
+
import { TagVariant, TagSize, CoarIconSize } from '@cocoar/ui/components';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Fluent builder for AG Grid column definitions.
|
|
@@ -68,6 +69,14 @@ declare class CoarGridColumnBuilder<TData = unknown, TValue = unknown> {
|
|
|
68
69
|
filter(value?: boolean | string): this;
|
|
69
70
|
/** Set filter parameters */
|
|
70
71
|
filterParams(params: Record<string, unknown>): this;
|
|
72
|
+
/** Set quick filter text extractor or disable quick filtering for this column */
|
|
73
|
+
quickFilter(fn: boolean | ((params: GetQuickFilterTextParams<TData, TValue>) => string)): this;
|
|
74
|
+
/** Set custom sort comparator */
|
|
75
|
+
comparator(fn: (valueA: TValue, valueB: TValue, nodeA: IRowNode<TData>, nodeB: IRowNode<TData>, isDescending: boolean) => number): this;
|
|
76
|
+
/** Enable row drag on this column */
|
|
77
|
+
rowDrag(value?: boolean | RowDragCallback<TData, TValue>): this;
|
|
78
|
+
/** Set cell renderer with config object (params wrapped in `config` key) */
|
|
79
|
+
cellRendererConfig(component: Type<unknown>, config: Record<string, unknown> | object): this;
|
|
71
80
|
/** Set any AG Grid ColDef option directly */
|
|
72
81
|
option<K extends keyof ColDef<TData, TValue>>(key: K, value: ColDef<TData, TValue>[K]): this;
|
|
73
82
|
/** Apply custom modifications to the column definition */
|
|
@@ -76,6 +85,39 @@ declare class CoarGridColumnBuilder<TData = unknown, TValue = unknown> {
|
|
|
76
85
|
build(): ColDef<TData, TValue>;
|
|
77
86
|
}
|
|
78
87
|
|
|
88
|
+
interface TagCellRendererConfig {
|
|
89
|
+
/** Delimiter to split a string value into multiple tags (default: ',') */
|
|
90
|
+
separator?: string;
|
|
91
|
+
/** Default variant applied to all tags */
|
|
92
|
+
variant?: TagVariant;
|
|
93
|
+
/** Map a tag value to a specific variant */
|
|
94
|
+
variantMap?: Record<string, TagVariant>;
|
|
95
|
+
/** Tag size (default: 's') */
|
|
96
|
+
size?: TagSize;
|
|
97
|
+
/** Prefix for i18n translation keys (optional). When set, translates via `i18n.t(prefix + value)` */
|
|
98
|
+
i18nPrefix?: string;
|
|
99
|
+
/** Property name to read the label from when values are objects */
|
|
100
|
+
labelProperty?: string;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
interface IconCellRendererConfig {
|
|
104
|
+
/** Icon size (default: 's') */
|
|
105
|
+
size?: CoarIconSize;
|
|
106
|
+
/** Icon source registry key */
|
|
107
|
+
source?: string;
|
|
108
|
+
/** CSS color value for the icon */
|
|
109
|
+
color?: string;
|
|
110
|
+
/** Click handler — when set, the icon becomes clickable */
|
|
111
|
+
onClick?: (params: ICellRendererParams) => void;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
interface DateCellRendererConfig {
|
|
115
|
+
/** Include seconds in time display */
|
|
116
|
+
showSeconds?: boolean;
|
|
117
|
+
/** Custom Angular date format string (bypasses CoarDatePipe) */
|
|
118
|
+
customFormat?: string;
|
|
119
|
+
}
|
|
120
|
+
|
|
79
121
|
/**
|
|
80
122
|
* Factory for creating typed column builders.
|
|
81
123
|
* Provides convenient methods for common column types.
|
|
@@ -87,6 +129,8 @@ declare class CoarGridColumnBuilder<TData = unknown, TValue = unknown> {
|
|
|
87
129
|
* .columns([
|
|
88
130
|
* col => col.field('name').header('Name').flex(1),
|
|
89
131
|
* col => col.field('createdAt').header('Created').width(150),
|
|
132
|
+
* col => col.tag('status', { variantMap: { active: 'success' } }),
|
|
133
|
+
* col => col.icon('type', { size: 's' }),
|
|
90
134
|
* ])
|
|
91
135
|
* ```
|
|
92
136
|
*/
|
|
@@ -96,9 +140,11 @@ declare class CoarGridColumnFactory<TData = unknown> {
|
|
|
96
140
|
*/
|
|
97
141
|
field<TValue = unknown>(fieldName: keyof TData | string): CoarGridColumnBuilder<TData, TValue>;
|
|
98
142
|
/**
|
|
99
|
-
* Create a date column with standard formatting
|
|
143
|
+
* Create a date column with standard or custom formatting.
|
|
144
|
+
*
|
|
145
|
+
* @param format - Preset name ('short' | 'long' | 'datetime'), Intl options object, or custom formatter function
|
|
100
146
|
*/
|
|
101
|
-
date(fieldName: keyof TData | string, format?: string): CoarGridColumnBuilder<TData, Date | string>;
|
|
147
|
+
date(fieldName: keyof TData | string, format?: string | Intl.DateTimeFormatOptions | ((date: Date) => string)): CoarGridColumnBuilder<TData, Date | string>;
|
|
102
148
|
/**
|
|
103
149
|
* Create a number column with standard formatting
|
|
104
150
|
*/
|
|
@@ -114,10 +160,34 @@ declare class CoarGridColumnFactory<TData = unknown> {
|
|
|
114
160
|
trueValue?: string;
|
|
115
161
|
falseValue?: string;
|
|
116
162
|
}): CoarGridColumnBuilder<TData, boolean>;
|
|
163
|
+
/**
|
|
164
|
+
* Create a tag column that renders values as `<coar-tag>` elements.
|
|
165
|
+
*
|
|
166
|
+
* Supports string (split by separator), array, and object array values.
|
|
167
|
+
*
|
|
168
|
+
* @param config - Tag rendering configuration (variantMap, size, i18nPrefix, etc.)
|
|
169
|
+
*/
|
|
170
|
+
tag(fieldName: keyof TData | string, config?: TagCellRendererConfig): CoarGridColumnBuilder<TData, string | string[]>;
|
|
171
|
+
/**
|
|
172
|
+
* Create an icon column that renders values as `<coar-icon>` elements.
|
|
173
|
+
*
|
|
174
|
+
* The cell value is used as the icon name.
|
|
175
|
+
*
|
|
176
|
+
* @param config - Icon rendering configuration (size, source, color, onClick)
|
|
177
|
+
*/
|
|
178
|
+
icon(fieldName: keyof TData | string, config?: IconCellRendererConfig): CoarGridColumnBuilder<TData, string>;
|
|
179
|
+
/**
|
|
180
|
+
* Create a date column with locale-aware rendering via `CoarDatePipe`.
|
|
181
|
+
*
|
|
182
|
+
* Unlike `date()`, this uses a cell renderer component for full locale integration.
|
|
183
|
+
*
|
|
184
|
+
* @param config - Date rendering configuration (showSeconds, customFormat)
|
|
185
|
+
*/
|
|
186
|
+
localDate(fieldName: keyof TData | string, config?: DateCellRendererConfig): CoarGridColumnBuilder<TData, Date | string>;
|
|
117
187
|
}
|
|
118
188
|
|
|
119
189
|
/** Column definition input - either a builder or a factory function */
|
|
120
|
-
type ColumnDefinition<TData> = CoarGridColumnBuilder<TData> | ((factory: CoarGridColumnFactory<TData>) => CoarGridColumnBuilder<TData>);
|
|
190
|
+
type ColumnDefinition<TData> = CoarGridColumnBuilder<TData, any> | ((factory: CoarGridColumnFactory<TData>) => CoarGridColumnBuilder<TData, any>);
|
|
121
191
|
/**
|
|
122
192
|
* Fluent builder for AG Grid configuration.
|
|
123
193
|
*
|
|
@@ -159,6 +229,22 @@ declare class CoarGridBuilder<TData = unknown> {
|
|
|
159
229
|
rowClassRules(rules: Record<string, ((params: RowClassParams<TData>) => boolean) | string>): this;
|
|
160
230
|
/** Set dynamic row class */
|
|
161
231
|
rowClass(fn: (params: RowClassParams<TData>) => string | string[] | undefined): this;
|
|
232
|
+
/** Set initial sort column and direction */
|
|
233
|
+
defaultSort(field: string, direction: 'asc' | 'desc'): this;
|
|
234
|
+
/** Set custom post-sort function to reorder rows after AG Grid sorts */
|
|
235
|
+
sortFunction(fn: (params: PostSortRowsParams<TData>) => void): this;
|
|
236
|
+
/** Re-trigger sort and filter when the given observable emits */
|
|
237
|
+
updateSortAndFilterWhen(trigger: Observable<unknown>): this;
|
|
238
|
+
/** Merge column state to restore column widths, order, visibility */
|
|
239
|
+
columnState(state: ColumnState[] | Observable<ColumnState[] | undefined>): this;
|
|
240
|
+
/** Set which parent rows are expanded (observable of row IDs) */
|
|
241
|
+
openRows(openRows$: Observable<string[]>): this;
|
|
242
|
+
/** Enable full-row editing mode */
|
|
243
|
+
fullRowEdit(value?: boolean): this;
|
|
244
|
+
/** Stop cell editing when cells lose focus */
|
|
245
|
+
stopEditingWhenCellsLoseFocus(value?: boolean): this;
|
|
246
|
+
/** Enable shift-key column resize mode */
|
|
247
|
+
shiftResizeMode(value?: boolean): this;
|
|
162
248
|
/** Handle grid ready event */
|
|
163
249
|
onGridReady(handler: (event: GridReadyEvent<TData>) => void): this;
|
|
164
250
|
/** Handle row click */
|
|
@@ -169,8 +255,24 @@ declare class CoarGridBuilder<TData = unknown> {
|
|
|
169
255
|
onCellClicked(handler: (event: CellClickedEvent<TData>) => void): this;
|
|
170
256
|
/** Handle cell double-click */
|
|
171
257
|
onCellDoubleClicked(handler: (event: CellDoubleClickedEvent<TData>) => void): this;
|
|
258
|
+
/** Handle grid size changed event */
|
|
259
|
+
onGridSizeChanged(handler: (event: GridSizeChangedEvent<TData>) => void): this;
|
|
260
|
+
/** Handle cell context menu (right-click). Ctrl+click is passed through to the browser. */
|
|
261
|
+
onCellContextMenu(handler: (event: CellContextMenuEvent<TData>) => void): this;
|
|
262
|
+
/**
|
|
263
|
+
* Handle click on the grid viewport (empty area outside cells).
|
|
264
|
+
* Wired by the directive via HostListener.
|
|
265
|
+
*/
|
|
266
|
+
onViewportClick(handler: ($event: MouseEvent, api: GridApi<TData>) => void): this;
|
|
267
|
+
/**
|
|
268
|
+
* Handle context menu on the grid viewport (empty area outside cells).
|
|
269
|
+
* Wired by the directive via HostListener.
|
|
270
|
+
*/
|
|
271
|
+
onViewportContextMenu(handler: ($event: MouseEvent, api: GridApi<TData>) => void): this;
|
|
172
272
|
/** Set external filter */
|
|
173
273
|
externalFilter(doesFilterPass: (node: IRowNode<TData>) => boolean, isFilterPresent?: (params: IsExternalFilterPresentParams<TData>) => boolean): this;
|
|
274
|
+
/** Re-trigger external filter when the given observable emits */
|
|
275
|
+
updateExternalFilterWhen(trigger: Observable<unknown>): this;
|
|
174
276
|
/** Enable row animation */
|
|
175
277
|
animateRows(value?: boolean): this;
|
|
176
278
|
/** Set any AG Grid option directly */
|
|
@@ -181,6 +283,12 @@ declare class CoarGridBuilder<TData = unknown> {
|
|
|
181
283
|
_bind(grid: AgGridAngular<TData>): void;
|
|
182
284
|
/** @internal Called by the directive on destroy */
|
|
183
285
|
_destroy(): void;
|
|
286
|
+
/** @internal Get viewport click handler (for directive) */
|
|
287
|
+
_getViewportClickHandler(): (($event: MouseEvent, api: GridApi<TData>) => void) | undefined;
|
|
288
|
+
/** @internal Get viewport context menu handler (for directive) */
|
|
289
|
+
_getViewportContextMenuHandler(): (($event: MouseEvent, api: GridApi<TData>) => void) | undefined;
|
|
290
|
+
/** @internal Check if a cell context menu handler is registered (for directive) */
|
|
291
|
+
_hasCellContextMenuHandler(): boolean;
|
|
184
292
|
/** Get column definitions (for directive) */
|
|
185
293
|
_getColumnDefs(): ColDef<TData>[];
|
|
186
294
|
/** Get grid options (for directive) */
|
|
@@ -219,6 +327,8 @@ declare class CoarDataGridDirective<TData> implements OnInit, OnDestroy {
|
|
|
219
327
|
set coarDataGrid(value: CoarGridBuilder<TData>);
|
|
220
328
|
ngOnInit(): void;
|
|
221
329
|
ngOnDestroy(): void;
|
|
330
|
+
onHostClick($event: MouseEvent): void;
|
|
331
|
+
onHostContextMenu($event: MouseEvent): void;
|
|
222
332
|
static ɵfac: i0.ɵɵFactoryDeclaration<CoarDataGridDirective<any>, never>;
|
|
223
333
|
static ɵdir: i0.ɵɵDirectiveDeclaration<CoarDataGridDirective<any>, "ag-grid-angular[coarDataGrid]", ["coarDataGrid"], { "coarDataGrid": { "alias": "coarDataGrid"; "required": false; }; }, {}, never, never, true, never>;
|
|
224
334
|
}
|
|
@@ -302,4 +412,4 @@ interface CoarColDef<TData = unknown> {
|
|
|
302
412
|
}
|
|
303
413
|
|
|
304
414
|
export { CoarDataGridDirective, CoarGridBuilder, CoarGridColumnBuilder, CoarGridColumnFactory, cocoarTheme, createCocoarTheme };
|
|
305
|
-
export type { CoarColDef, ColumnDefinition };
|
|
415
|
+
export type { CoarColDef, ColumnDefinition, DateCellRendererConfig, IconCellRendererConfig, TagCellRendererConfig };
|