@nlabtech/nlabs-grid 1.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 @@
1
+ {"version":3,"file":"nlabtech-nlabs-grid.mjs","sources":["../../../projects/nlabs-grid/src/lib/adapters/odata-adapter.ts","../../../projects/nlabs-grid/src/lib/adapters/rest-adapter.ts","../../../projects/nlabs-grid/src/lib/services/grid-data.service.ts","../../../projects/nlabs-grid/src/lib/services/theme.service.ts","../../../projects/nlabs-grid/src/lib/components/theme-selector/theme-selector.component.ts","../../../projects/nlabs-grid/src/lib/directives/grid-column-command-template.directive.ts","../../../projects/nlabs-grid/src/lib/directives/grid-caption-command-template.directive.ts","../../../projects/nlabs-grid/src/lib/directives/grid-footer-template.directive.ts","../../../projects/nlabs-grid/src/lib/components/grid-column/grid-column.component.ts","../../../projects/nlabs-grid/src/lib/components/data-grid/data-grid.component.ts","../../../projects/nlabs-grid/src/lib/components/data-grid/data-grid.component.html","../../../projects/nlabs-grid/src/lib/directives/grid-cell-template.directive.ts","../../../projects/nlabs-grid/src/lib/directives/grid-header-template.directive.ts","../../../projects/nlabs-grid/src/lib/models/grid.models.ts","../../../projects/nlabs-grid/src/lib/services/mock-data.adapter.ts","../../../projects/nlabs-grid/src/public-api.ts","../../../projects/nlabs-grid/src/nlabtech-nlabs-grid.ts"],"sourcesContent":["import { Inject, Injectable, InjectionToken } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Observable, map } from 'rxjs';\r\nimport { IDataAdapter } from './data-adapter.interface';\r\nimport { GridDataResult, GridRequest } from '../models/grid.models';\r\n\r\nexport const ODATA_BASE_URL = new InjectionToken<string>('ODATA_BASE_URL');\r\n\r\n/**\r\n * OData v4 Adapter\r\n * Implements IDataAdapter for OData protocol\r\n */\r\nexport class ODataAdapter<T = any> implements IDataAdapter<T> {\r\n \r\n constructor(\r\n private http: HttpClient,\r\n private baseUrl: string\r\n ) {}\r\n\r\n getData(request: GridRequest): Observable<GridDataResult<T>> {\r\n const url = `${this.baseUrl}?${this.buildQuery(request)}`;\r\n \r\n console.log('OData Request URL:', url);\r\n \r\n return this.http.get<any>(url).pipe(\r\n map(response => {\r\n console.log('OData Response:', response);\r\n return {\r\n data: response.value || response.items || [],\r\n total: response['@odata.count'] || response.count || 0\r\n };\r\n })\r\n );\r\n }\r\n\r\n buildQuery(request: GridRequest): string {\r\n const params: string[] = [];\r\n\r\n // Pagination\r\n if (request.skip !== undefined) {\r\n params.push(`$skip=${request.skip}`);\r\n }\r\n if (request.top !== undefined) {\r\n params.push(`$top=${request.top}`);\r\n }\r\n\r\n // Sorting\r\n if (request.orderBy) {\r\n params.push(`$orderby=${request.orderBy}`);\r\n }\r\n\r\n // Filtering\r\n if (request.filter) {\r\n params.push(`$filter=${encodeURIComponent(request.filter)}`);\r\n }\r\n\r\n // Select specific fields\r\n if (request.select && request.select.length > 0) {\r\n params.push(`$select=${request.select.join(',')}`);\r\n }\r\n\r\n // Expand related entities\r\n if (request.expand && request.expand.length > 0) {\r\n params.push(`$expand=${request.expand.join(',')}`);\r\n }\r\n\r\n // Always include count\r\n params.push('$count=true');\r\n\r\n return params.join('&');\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Observable, map } from 'rxjs';\r\nimport { IDataAdapter } from './data-adapter.interface';\r\nimport { GridDataResult, GridRequest } from '../models/grid.models';\r\n\r\n/**\r\n * REST API Adapter\r\n * Implements IDataAdapter for standard REST endpoints\r\n *\r\n * @example\r\n * ```typescript\r\n * const adapter = new RestAdapter(http, 'https://api.example.com/users', {\r\n * dataKey: 'items',\r\n * totalKey: 'totalCount',\r\n * usePagination: 'page'\r\n * });\r\n * ```\r\n */\r\nexport class RestAdapter<T = any> implements IDataAdapter<T> {\r\n constructor(\r\n private http: HttpClient,\r\n private baseUrl: string,\r\n private config?: RestAdapterConfig\r\n ) {}\r\n\r\n getData(request: GridRequest): Observable<GridDataResult<T>> {\r\n const url = `${this.baseUrl}?${this.buildQuery(request)}`;\r\n \r\n return this.http.get<any>(url).pipe(\r\n map(response => this.mapResponse(response))\r\n );\r\n }\r\n\r\n buildQuery(request: GridRequest): string {\r\n const params: string[] = [];\r\n const cfg = this.config || {};\r\n\r\n // Pagination\r\n const skip = request.skip ?? 0;\r\n const top = request.top ?? 10;\r\n const pageParam = cfg.pageParam || 'page';\r\n const pageSizeParam = cfg.pageSizeParam || 'pageSize';\r\n const skipParam = cfg.skipParam || 'skip';\r\n\r\n if (cfg.usePagination === 'page') {\r\n // Page-based pagination\r\n const page = top > 0 ? Math.floor(skip / top) + 1 : 1;\r\n params.push(`${pageParam}=${page}`);\r\n params.push(`${pageSizeParam}=${top}`);\r\n } else {\r\n // Skip/take pagination (default)\r\n params.push(`${skipParam}=${skip}`);\r\n params.push(`${pageSizeParam}=${top}`);\r\n }\r\n\r\n // Sorting\r\n if (request.orderBy) {\r\n const sortParam = cfg.sortParam || 'sort';\r\n params.push(`${sortParam}=${request.orderBy}`);\r\n }\r\n\r\n // Filtering\r\n if (request.filter) {\r\n const filterParam = cfg.filterParam || 'filter';\r\n params.push(`${filterParam}=${encodeURIComponent(request.filter)}`);\r\n }\r\n\r\n // Select specific fields\r\n if (request.select && request.select.length > 0) {\r\n const selectParam = cfg.selectParam || 'fields';\r\n params.push(`${selectParam}=${request.select.join(',')}`);\r\n }\r\n\r\n // Global search\r\n if (request.globalSearch) {\r\n const searchParam = cfg.searchParam || 'search';\r\n params.push(`${searchParam}=${encodeURIComponent(request.globalSearch)}`);\r\n }\r\n\r\n // Extra custom parameters\r\n if (cfg.extraParams) {\r\n for (const [key, value] of Object.entries(cfg.extraParams)) {\r\n if (value !== undefined && value !== null && value !== '') {\r\n params.push(`${key}=${encodeURIComponent(String(value))}`);\r\n }\r\n }\r\n }\r\n\r\n return params.join('&');\r\n }\r\n\r\n private mapResponse(response: any): GridDataResult<T> {\r\n const cfg = this.config || {};\r\n\r\n // Custom mapper function takes priority\r\n if (cfg.responseMapper) {\r\n return cfg.responseMapper(response);\r\n }\r\n\r\n // If response is an array, use it directly\r\n if (Array.isArray(response)) {\r\n return {\r\n data: response,\r\n total: response.length\r\n };\r\n }\r\n\r\n const dataKey = cfg.dataKey || 'data';\r\n const totalKey = cfg.totalKey || 'total';\r\n\r\n // Extract data - support nested keys like 'result.items'\r\n let data = this.getNestedValue(response, dataKey) ||\r\n response.items ||\r\n response.results ||\r\n response.records ||\r\n [];\r\n\r\n // Extract total\r\n let total = this.getNestedValue(response, totalKey) ??\r\n response.count ??\r\n response.totalCount ??\r\n response.totalRecords ??\r\n (Array.isArray(data) ? data.length : 0);\r\n\r\n return { data, total };\r\n }\r\n\r\n private getNestedValue(obj: any, path: string): any {\r\n return path.split('.').reduce((current, key) => current?.[key], obj);\r\n }\r\n}\r\n\r\nexport interface RestAdapterConfig {\r\n /** Pagination style: 'page' (page/pageSize) or 'skip' (skip/take). Default: 'skip' */\r\n usePagination?: 'page' | 'skip';\r\n /** Query param name for page number. Default: 'page' */\r\n pageParam?: string;\r\n /** Query param name for page size. Default: 'pageSize' */\r\n pageSizeParam?: string;\r\n /** Query param name for skip count. Default: 'skip' */\r\n skipParam?: string;\r\n /** Query param name for sorting. Default: 'sort' */\r\n sortParam?: string;\r\n /** Query param name for filtering. Default: 'filter' */\r\n filterParam?: string;\r\n /** Query param name for field selection. Default: 'fields' */\r\n selectParam?: string;\r\n /** Response property containing data array. Supports nested paths like 'result.items'. Default: 'data' */\r\n dataKey?: string;\r\n /** Response property containing total count. Supports nested paths. Default: 'total' */\r\n totalKey?: string;\r\n /** Custom response mapper function for complex response structures */\r\n responseMapper?: <T>(response: any) => { data: T[]; total: number };\r\n /** Additional custom query parameters to append to every request */\r\n extraParams?: Record<string, string | number | boolean | undefined>;\r\n /** Query param name for global search. Default: 'search' */\r\n searchParam?: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { IDataAdapter } from '../adapters/data-adapter.interface';\r\nimport { FilterMetadata, GridDataResult, GridRequest, SortMetadata } from '../models/grid.models';\r\n\r\n/**\r\n * Grid Data Service\r\n * Central service for managing grid data operations\r\n */\r\n@Injectable()\r\nexport class GridDataService<T = any> {\r\n private adapter?: IDataAdapter<T>;\r\n\r\n setAdapter(adapter: IDataAdapter<T>): void {\r\n this.adapter = adapter;\r\n }\r\n\r\n getData(request: GridRequest): Observable<GridDataResult<T>> {\r\n if (!this.adapter) {\r\n throw new Error('Data adapter not set. Please call setAdapter() first.');\r\n }\r\n return this.adapter.getData(request);\r\n }\r\n\r\n buildFilterString(filters: FilterMetadata[]): string {\r\n if (!this.adapter) {\r\n return '';\r\n }\r\n \r\n // Build OData-style filter string\r\n const filterParts = filters.map(filter => {\r\n const field = filter.field;\r\n const value = typeof filter.value === 'string' ? `'${filter.value}'` : filter.value;\r\n \r\n switch (filter.matchMode) {\r\n case 'contains':\r\n return `contains(${field}, ${value})`;\r\n case 'startsWith':\r\n return `startswith(${field}, ${value})`;\r\n case 'endsWith':\r\n return `endswith(${field}, ${value})`;\r\n case 'equals':\r\n return `${field} eq ${value}`;\r\n case 'notEquals':\r\n return `${field} ne ${value}`;\r\n case 'lt':\r\n return `${field} lt ${value}`;\r\n case 'lte':\r\n return `${field} le ${value}`;\r\n case 'gt':\r\n return `${field} gt ${value}`;\r\n case 'gte':\r\n return `${field} ge ${value}`;\r\n default:\r\n return `${field} eq ${value}`;\r\n }\r\n });\r\n\r\n return filterParts.join(' and ');\r\n }\r\n\r\n buildSortString(sorts: SortMetadata[]): string {\r\n return sorts.map(sort => `${sort.field} ${sort.order}`).join(', ');\r\n }\r\n}\r\n","import { Injectable, signal, effect } from '@angular/core';\r\n\r\nexport type Theme = 'light' | 'dark' | 'auto';\r\n\r\n@Injectable()\r\nexport class ThemeService {\r\n private readonly THEME_KEY = 'nlabs-grid-theme';\r\n \r\n // Current theme signal\r\n theme = signal<Theme>(this.getInitialTheme());\r\n \r\n // Computed effective theme (resolves 'auto' to actual theme)\r\n effectiveTheme = signal<'light' | 'dark'>('light');\r\n\r\n constructor() {\r\n // Apply theme on change\r\n effect(() => {\r\n const theme = this.theme();\r\n const effective = this.resolveTheme(theme);\r\n this.effectiveTheme.set(effective);\r\n this.applyTheme(effective);\r\n this.saveTheme(theme);\r\n });\r\n\r\n // Listen to system theme changes\r\n if (typeof window !== 'undefined') {\r\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {\r\n if (this.theme() === 'auto') {\r\n this.effectiveTheme.set(e.matches ? 'dark' : 'light');\r\n this.applyTheme(e.matches ? 'dark' : 'light');\r\n }\r\n });\r\n }\r\n }\r\n\r\n private getInitialTheme(): Theme {\r\n if (typeof window === 'undefined') {\r\n return 'light';\r\n }\r\n\r\n const saved = localStorage.getItem(this.THEME_KEY) as Theme;\r\n if (saved && ['light', 'dark', 'auto'].includes(saved)) {\r\n return saved;\r\n }\r\n\r\n // Default to light instead of auto\r\n return 'light';\r\n }\r\n\r\n private resolveTheme(theme: Theme): 'light' | 'dark' {\r\n if (theme !== 'auto') {\r\n return theme;\r\n }\r\n\r\n if (typeof window === 'undefined') {\r\n return 'light';\r\n }\r\n\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\r\n }\r\n\r\n private applyTheme(theme: 'light' | 'dark'): void {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n\r\n document.documentElement.setAttribute('data-theme', theme);\r\n document.body.classList.remove('light-theme', 'dark-theme');\r\n document.body.classList.add(`${theme}-theme`);\r\n }\r\n\r\n private saveTheme(theme: Theme): void {\r\n if (typeof localStorage !== 'undefined') {\r\n localStorage.setItem(this.THEME_KEY, theme);\r\n }\r\n }\r\n\r\n setTheme(theme: Theme): void {\r\n this.theme.set(theme);\r\n }\r\n\r\n toggleTheme(): void {\r\n const current = this.effectiveTheme();\r\n this.theme.set(current === 'light' ? 'dark' : 'light');\r\n }\r\n}\r\n","import { Component, inject, input } from '@angular/core';\r\n\r\nimport { Theme, ThemeService } from '../../services/theme.service';\r\n\r\n@Component({\r\n selector: 'theme-selector',\r\n standalone: true,\r\n imports: [],\r\n template: `\r\n @if (showSelector()) {\r\n <div class=\"theme-selector\">\r\n <button\r\n class=\"theme-btn\"\r\n [class.active]=\"themeService.effectiveTheme() === 'light'\"\r\n (click)=\"setTheme('light')\"\r\n title=\"Light Mode\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <circle cx=\"12\" cy=\"12\" r=\"5\"></circle>\r\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"></line>\r\n <line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line>\r\n <line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"></line>\r\n <line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"></line>\r\n <line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"></line>\r\n <line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"></line>\r\n <line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"></line>\r\n <line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"></line>\r\n </svg>\r\n </button>\r\n <button\r\n class=\"theme-btn\"\r\n [class.active]=\"themeService.effectiveTheme() === 'dark'\"\r\n (click)=\"setTheme('dark')\"\r\n title=\"Dark Mode\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"></path>\r\n </svg>\r\n </button>\r\n <button\r\n class=\"theme-btn\"\r\n [class.active]=\"themeService.theme() === 'auto'\"\r\n (click)=\"setTheme('auto')\"\r\n title=\"Auto (System)\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect>\r\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line>\r\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n `,\r\n styles: [`\r\n .theme-selector {\r\n display: inline-flex;\r\n gap: 4px;\r\n padding: 4px;\r\n background: var(--grid-bg-secondary);\r\n border: 1px solid var(--grid-border-color);\r\n border-radius: 8px;\r\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n }\r\n\r\n .theme-btn {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 36px;\r\n height: 36px;\r\n padding: 0;\r\n background: transparent;\r\n border: none;\r\n border-radius: 6px;\r\n color: var(--grid-text-secondary);\r\n cursor: pointer;\r\n transition: all 0.2s ease;\r\n\r\n &:hover {\r\n background: var(--grid-bg-hover);\r\n color: var(--grid-primary-color);\r\n }\r\n\r\n &.active {\r\n background: var(--grid-primary-color);\r\n color: #fff;\r\n box-shadow: 0 2px 4px rgba(64, 150, 255, 0.3);\r\n }\r\n\r\n svg {\r\n width: 20px;\r\n height: 20px;\r\n }\r\n }\r\n `]\r\n})\r\nexport class ThemeSelectorComponent {\r\n showSelector = input<boolean>(true);\r\n themeService = inject(ThemeService);\r\n\r\n setTheme(theme: Theme): void {\r\n this.themeService.setTheme(theme);\r\n }\r\n}\r\n","import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[nlabsGridColumnCommandTemplate]',\r\n standalone: true\r\n})\r\nexport class GridColumnCommandTemplateDirective {\r\n @Input('nlabsGridColumnCommandTemplate') name: string = '';\r\n\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[nlabsGridCaptionCommandTemplate]',\r\n standalone: true\r\n})\r\nexport class GridCaptionCommandTemplateDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[nlabsGridFooterTemplate]',\r\n standalone: true\r\n})\r\nexport class GridFooterTemplateDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}","import { Component, input, signal, linkedSignal, contentChild, TemplateRef } from '@angular/core';\r\n\r\nexport type TextAlignType = 'left' | 'center' | 'right';\r\nexport type FilterType = 'text' | 'date' | 'number' | 'boolean' | 'select';\r\nexport type CurrencyFormatType = 'c' | 'n';\r\n\r\n@Component({\r\n selector: 'nlabs-grid-column',\r\n standalone: true,\r\n template: '',\r\n})\r\nexport class GridColumnComponent {\r\n // Basic Properties\r\n readonly field = input<string>('');\r\n readonly title = input<string>('');\r\n readonly header = input<string>(''); // Alias for title\r\n \r\n // Column Behavior\r\n readonly sortable = input<boolean>(true);\r\n readonly filterable = input<boolean>(true);\r\n readonly visible = input<boolean>(true);\r\n readonly resizable = input<boolean>(true);\r\n readonly frozen = input<boolean>(false);\r\n readonly locked = input<boolean>(false); // Cannot be reordered\r\n \r\n // Styling\r\n readonly width = input<string>('160px');\r\n readonly minWidth = input<string>('50px');\r\n readonly maxWidth = input<string>('');\r\n readonly textAlign = input<TextAlignType>('left');\r\n readonly className = input<string>('');\r\n readonly hideOverflow = input<boolean>(true);\r\n \r\n // Filtering\r\n readonly filterType = input<FilterType>('text');\r\n readonly filterData = input<any[]>([]);\r\n readonly filterValue = input<any>();\r\n readonly filterOperator = signal<string>('contains');\r\n \r\n // Formatting\r\n readonly format = input<string | CurrencyFormatType | null>(null);\r\n readonly symbol = input<string>('$');\r\n readonly fraction = input<number>(2);\r\n readonly showSymbolInFront = input<boolean>(true);\r\n \r\n // Boolean Display\r\n readonly showCheckbox = input<boolean>(false);\r\n readonly booleanData = input<string[]>(['Yes', 'No']);\r\n \r\n // Signals for dynamic values\r\n readonly visibleSignal = linkedSignal(() => this.visible());\r\n readonly widthSignal = linkedSignal(() => this.width());\r\n readonly filterValueSignal = linkedSignal(() => this.filterValue());\r\n \r\n // Template References (will be set by directives)\r\n cellTemplate?: TemplateRef<any>;\r\n headerTemplate?: TemplateRef<any>;\r\n footerTemplate?: TemplateRef<any>;\r\n \r\n // Unique identifier\r\n readonly timestamp = signal<string>(\r\n `${new Date().getTime()}-${Math.random().toString(36).slice(2, 11)}`\r\n );\r\n\r\n getDisplayTitle(): string {\r\n return this.header() || this.title() || this.capitalizeFirstLetter(this.field());\r\n }\r\n\r\n private capitalizeFirstLetter(str: string): string {\r\n if (!str) return '';\r\n return str\r\n .replace(/([A-Z])/g, ' $1')\r\n .replace(/_/g, ' ')\r\n .split(' ')\r\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\r\n .join(' ')\r\n .trim();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnChanges,\r\n SimpleChanges,\r\n TemplateRef,\r\n ContentChildren,\r\n QueryList,\r\n AfterContentInit,\r\n AfterViewInit,\r\n ElementRef,\r\n ViewChild,\r\n contentChild,\r\n input\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport {\r\n GridConfig,\r\n GridColumn,\r\n GridState,\r\n GridDataResult,\r\n GridRequest,\r\n SortMetadata,\r\n FilterMetadata,\r\n PaginationMetadata\r\n} from '../../models/grid.models';\r\nimport { IDataAdapter } from '../../adapters/data-adapter.interface';\r\nimport { GridDataService } from '../../services/grid-data.service';\r\nimport { ThemeService } from '../../services/theme.service';\r\nimport { ThemeSelectorComponent } from '../theme-selector/theme-selector.component';\r\n\r\n\r\nimport { GridCellTemplateDirective } from '../../directives/grid-cell-template.directive';\r\nimport { GridHeaderTemplateDirective } from '../../directives/grid-header-template.directive';\r\nimport { GridColumnCommandTemplateDirective } from '../../directives/grid-column-command-template.directive';\r\nimport { GridCaptionCommandTemplateDirective } from '../../directives/grid-caption-command-template.directive';\r\nimport { GridFooterTemplateDirective } from '../../directives/grid-footer-template.directive';\r\nimport { GridColumnComponent } from '../grid-column/grid-column.component';\r\n\r\n\r\n@Component({\r\n selector: 'nlabs-data-grid',\r\n standalone: true,\r\n imports: [\r\n CommonModule, \r\n FormsModule, \r\n GridColumnComponent, \r\n ThemeSelectorComponent\r\n ],\r\n providers: [GridDataService, ThemeService],\r\n templateUrl: 'data-grid.component.html',\r\n styleUrls: ['./data-grid.component.scss']\r\n})\r\nexport class DataGridComponent<T = any> implements OnInit, OnChanges, AfterContentInit, AfterViewInit {\r\n @Input() config?: GridConfig;\r\n @Input() adapter!: IDataAdapter<T>;\r\n @Input() autoLoad = true;\r\n @Input() lazy = true;\r\n @Input() data?: T[];\r\n @Input() totalRecords?: number;\r\n\r\n @ViewChild('gridHeader', { read: ElementRef }) gridHeader?: ElementRef;\r\n @ViewChild('gridBody', { read: ElementRef }) gridBody?: ElementRef;\r\n\r\n // Theme inputs\r\n readonly theme = input<'light' | 'dark' | 'auto'>('auto');\r\n readonly showThemeSelector = input<boolean>(true);\r\n\r\n // Feature flags\r\n readonly showColumnChooser = input<boolean>(true);\r\n readonly showGlobalSearch = input<boolean>(true);\r\n readonly showAddButton = input<boolean>(false);\r\n readonly addButtonText = input<string>('Add New');\r\n readonly addButtonUrl = input<string | undefined>(undefined);\r\n readonly showExport = input<boolean>(true);\r\n readonly exportFileName = input<string>('export');\r\n readonly showFooter = input<boolean>(true);\r\n\r\n // Events\r\n @Output() addClick = new EventEmitter<void>();\r\n @Output() excelExport = new EventEmitter<T[]>();\r\n @Output() pdfExport = new EventEmitter<T[]>();\r\n @Output() onRefresh = new EventEmitter<void>();\r\n\r\n // Template references from content projection\r\n @ContentChildren(GridColumnComponent) columnComponents!: QueryList<GridColumnComponent>;\r\n @ContentChildren(GridColumnCommandTemplateDirective) columnCommandTemplates!: QueryList<GridColumnCommandTemplateDirective>;\r\n\r\n // Command templates\r\n captionCommandTemplate = contentChild(GridCaptionCommandTemplateDirective, { read: TemplateRef });\r\n footerTemplate = contentChild(GridFooterTemplateDirective, { read: TemplateRef });\r\n\r\n // Actions template\r\n actionsTemplate?: TemplateRef<any>;\r\n checkboxTemplate?: TemplateRef<any>;\r\n\r\n @Output() dataLoad = new EventEmitter<GridDataResult<T>>();\r\n @Output() rowSelect = new EventEmitter<T>();\r\n @Output() rowUnselect = new EventEmitter<T>();\r\n @Output() stateChange = new EventEmitter<GridState>();\r\n\r\n gridData: T[] = [];\r\n loading = false;\r\n Math = Math;\r\n globalSearchTerm = '';\r\n \r\n state: GridState = {\r\n page: 0,\r\n pageSize: 10,\r\n filters: new Map()\r\n };\r\n\r\n pagination: PaginationMetadata = {\r\n page: 0,\r\n pageSize: 10,\r\n totalRecords: 0,\r\n totalPages: 0\r\n };\r\n\r\n selectedRows: Set<T> = new Set();\r\n sortMetadata: SortMetadata[] = [];\r\n filterMetadata: FilterMetadata[] = [];\r\n\r\n // Column management\r\n displayedColumns: GridColumn[] = [];\r\n draggedColumn?: GridColumn;\r\n dropTargetIndex?: number;\r\n resizingColumn?: GridColumn;\r\n resizeStartX = 0;\r\n resizeStartWidth = 0;\r\n showColumnChooserModal = false;\r\n\r\n // Filter Modal\r\n showFilterModal = false;\r\n currentFilterColumn: GridColumn | null = null;\r\n currentFilterOperator: 'contains' | 'notContains' | 'equals' | 'notEquals' | 'startsWith' | 'endsWith' | 'lt' | 'lte' | 'gt' | 'gte' | 'isEmpty' | 'isNotEmpty' = 'contains';\r\n filterValue = '';\r\n\r\n constructor(\r\n private gridDataService: GridDataService<T>,\r\n public themeService: ThemeService\r\n ) {}\r\n\r\n ngAfterContentInit(): void {\r\n // Process column components from content projection\r\n this.processColumnComponents();\r\n\r\n // Process templates\r\n this.processTemplates();\r\n\r\n // Watch for column changes\r\n this.columnComponents.changes.subscribe(() => {\r\n this.processColumnComponents();\r\n });\r\n\r\n // Watch for template changes\r\n this.columnCommandTemplates.changes.subscribe(() => {\r\n this.processTemplates();\r\n });\r\n }\r\n\r\n private processTemplates(): void {\r\n if (this.columnCommandTemplates && this.columnCommandTemplates.length > 0) {\r\n this.columnCommandTemplates.forEach(directive => {\r\n const name = directive.name;\r\n const templateRef = directive.templateRef;\r\n\r\n // Store the template based on name\r\n if (name === 'actions') {\r\n this.actionsTemplate = templateRef;\r\n } else if (name === 'checkbox' || name === 'select') {\r\n this.checkboxTemplate = templateRef;\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeGrid();\r\n \r\n if (this.autoLoad && this.lazy && this.adapter) {\r\n this.loadData();\r\n } else if (!this.lazy && this.data) {\r\n this.gridData = this.data;\r\n this.pagination.totalRecords = this.totalRecords || this.data.length;\r\n this.updatePagination();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['data'] && !changes['data'].firstChange && !this.lazy) {\r\n this.gridData = this.data || [];\r\n this.pagination.totalRecords = this.totalRecords || this.gridData.length;\r\n this.updatePagination();\r\n }\r\n\r\n // Adapter değiştiğinde veriyi yeniden yükle\r\n if (changes['adapter'] && !changes['adapter'].firstChange && this.lazy) {\r\n this.gridDataService.setAdapter(this.adapter);\r\n this.state.page = 0;\r\n this.pagination.page = 0;\r\n this.loadData();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Sync horizontal scroll between header and body\r\n if (this.gridBody?.nativeElement && this.gridHeader?.nativeElement) {\r\n const bodyEl = this.gridBody.nativeElement;\r\n const headerEl = this.gridHeader.nativeElement;\r\n \r\n bodyEl.addEventListener('scroll', () => {\r\n headerEl.scrollLeft = bodyEl.scrollLeft;\r\n });\r\n }\r\n }\r\n\r\n private initializeGrid(): void {\r\n // Initialize pagination from config or use defaults\r\n const configPageSize = this.config?.pageSize || 10;\r\n this.state.pageSize = configPageSize;\r\n this.pagination.pageSize = this.state.pageSize;\r\n\r\n // Initialize displayed columns (will be overridden if using content projection)\r\n if (this.config?.columns && this.config.columns.length > 0) {\r\n this.displayedColumns = this.config.columns.map(col => ({\r\n ...col,\r\n visible: col.visible !== false,\r\n resizable: col.resizable !== false\r\n }));\r\n }\r\n\r\n if (this.adapter) {\r\n this.gridDataService.setAdapter(this.adapter);\r\n }\r\n\r\n // Apply theme from input\r\n if (this.theme()) {\r\n this.themeService.setTheme(this.theme());\r\n }\r\n }\r\n\r\n private processColumnComponents(): void {\r\n if (!this.columnComponents || this.columnComponents.length === 0) {\r\n return;\r\n }\r\n\r\n // Convert column components to GridColumn format\r\n this.displayedColumns = this.columnComponents.map(comp => {\r\n // Get cell template from directive\r\n const cellDirective = comp.cellTemplate;\r\n const headerDirective = comp.headerTemplate;\r\n const footerDirective = comp.footerTemplate;\r\n\r\n const column: GridColumn = {\r\n field: comp.field(),\r\n header: comp.getDisplayTitle(),\r\n sortable: comp.sortable(),\r\n filterable: comp.filterable(),\r\n visible: comp.visible(),\r\n resizable: comp.resizable(),\r\n width: comp.width(),\r\n minWidth: comp.minWidth(),\r\n maxWidth: comp.maxWidth(),\r\n type: comp.filterType() as any,\r\n cellTemplate: cellDirective,\r\n frozen: comp.frozen(),\r\n format: comp.format() as any\r\n };\r\n\r\n return column;\r\n });\r\n }\r\n\r\n loadData(): void {\r\n if (!this.lazy) {\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n\r\n const request: GridRequest = {\r\n skip: this.state.page * this.state.pageSize,\r\n top: this.state.pageSize,\r\n orderBy: this.buildOrderBy(),\r\n filter: this.buildFilter(),\r\n globalSearch: this.globalSearchTerm?.trim() || undefined\r\n };\r\n\r\n this.gridDataService.getData(request).subscribe({\r\n next: (result) => {\r\n this.gridData = result.data;\r\n this.pagination.totalRecords = result.total;\r\n this.updatePagination();\r\n this.loading = false;\r\n this.dataLoad.emit(result);\r\n },\r\n error: (error) => {\r\n console.error('Error loading grid data:', error);\r\n this.loading = false;\r\n }\r\n });\r\n }\r\n\r\n onPageChange(page: number): void {\r\n this.state.page = page;\r\n this.pagination.page = page;\r\n this.emitStateChange();\r\n \r\n if (this.lazy) {\r\n this.loadData();\r\n }\r\n }\r\n\r\n onPageSizeChange(pageSize: number): void {\r\n this.state.pageSize = pageSize;\r\n this.pagination.pageSize = pageSize;\r\n this.state.page = 0;\r\n this.pagination.page = 0;\r\n this.emitStateChange();\r\n \r\n if (this.lazy) {\r\n this.loadData();\r\n }\r\n }\r\n\r\n onSort(column: GridColumn): void {\r\n if (!column.sortable) {\r\n return;\r\n }\r\n\r\n const existingSort = this.sortMetadata.find(s => s.field === column.field);\r\n \r\n if (existingSort) {\r\n existingSort.order = existingSort.order === 'asc' ? 'desc' : 'asc';\r\n } else {\r\n this.sortMetadata = [{ field: column.field as string, order: 'asc' }];\r\n }\r\n\r\n this.state.sortField = column.field as string;\r\n this.state.sortOrder = this.sortMetadata[0].order;\r\n \r\n this.emitStateChange();\r\n \r\n if (this.lazy) {\r\n this.loadData();\r\n } else {\r\n this.sortLocal();\r\n }\r\n }\r\n\r\n onFilter(column: GridColumn, value: any): void {\r\n if (!column.filterable) {\r\n return;\r\n }\r\n\r\n if (value && value.trim()) {\r\n this.filterMetadata = this.filterMetadata.filter(f => f.field !== column.field);\r\n this.filterMetadata.push({\r\n field: column.field as string,\r\n operator: 'and',\r\n value: value,\r\n matchMode: 'contains'\r\n });\r\n this.state.filters?.set(column.field as string, value);\r\n } else {\r\n this.filterMetadata = this.filterMetadata.filter(f => f.field !== column.field);\r\n this.state.filters?.delete(column.field as string);\r\n }\r\n\r\n this.state.page = 0;\r\n this.pagination.page = 0;\r\n \r\n this.emitStateChange();\r\n \r\n if (this.lazy) {\r\n this.loadData();\r\n } else {\r\n this.filterLocal();\r\n }\r\n }\r\n\r\n onRowSelect(row: T, event?: Event): void {\r\n if (!this.config?.selectable) {\r\n return;\r\n }\r\n\r\n // Stop event propagation if event exists\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n\r\n if (this.config?.multiSelect) {\r\n if (this.selectedRows.has(row)) {\r\n this.selectedRows.delete(row);\r\n this.rowUnselect.emit(row);\r\n } else {\r\n this.selectedRows.add(row);\r\n this.rowSelect.emit(row);\r\n }\r\n } else {\r\n this.selectedRows.clear();\r\n this.selectedRows.add(row);\r\n this.rowSelect.emit(row);\r\n }\r\n\r\n this.state.selectedRows = Array.from(this.selectedRows);\r\n }\r\n\r\n toggleSelectAll(event: Event): void {\r\n const checkbox = event.target as HTMLInputElement;\r\n\r\n if (checkbox.checked) {\r\n // Select all rows on current page\r\n this.gridData.forEach(row => this.selectedRows.add(row));\r\n } else {\r\n // Deselect all rows\r\n this.selectedRows.clear();\r\n }\r\n\r\n this.state.selectedRows = Array.from(this.selectedRows);\r\n }\r\n\r\n isAllSelected(): boolean {\r\n if (this.gridData.length === 0) return false;\r\n return this.gridData.every(row => this.selectedRows.has(row));\r\n }\r\n\r\n isSomeSelected(): boolean {\r\n if (this.gridData.length === 0) return false;\r\n const selectedCount = this.gridData.filter(row => this.selectedRows.has(row)).length;\r\n return selectedCount > 0 && selectedCount < this.gridData.length;\r\n }\r\n\r\n isRowSelected(row: T): boolean {\r\n return this.selectedRows.has(row);\r\n }\r\n\r\n private buildOrderBy(): string | undefined {\r\n if (this.sortMetadata.length === 0) {\r\n return undefined;\r\n }\r\n return this.gridDataService.buildSortString(this.sortMetadata);\r\n }\r\n\r\n private buildFilter(): string | undefined {\r\n if (this.filterMetadata.length === 0) {\r\n return undefined;\r\n }\r\n return this.gridDataService.buildFilterString(this.filterMetadata);\r\n }\r\n\r\n private sortLocal(): void {\r\n if (this.sortMetadata.length === 0) {\r\n return;\r\n }\r\n\r\n const sort = this.sortMetadata[0];\r\n this.gridData = [...this.gridData].sort((a: any, b: any) => {\r\n const aVal = a[sort.field];\r\n const bVal = b[sort.field];\r\n \r\n if (aVal === bVal) return 0;\r\n \r\n const result = aVal < bVal ? -1 : 1;\r\n return sort.order === 'asc' ? result : -result;\r\n });\r\n }\r\n\r\n private filterLocal(): void {\r\n if (!this.data) {\r\n return;\r\n }\r\n\r\n let filtered = [...this.data];\r\n\r\n this.filterMetadata.forEach(filter => {\r\n filtered = filtered.filter((item: any) => {\r\n const value = item[filter.field];\r\n const filterValue = filter.value?.toLowerCase() || '';\r\n \r\n // Handle isEmpty and isNotEmpty\r\n if (filter.matchMode === 'isEmpty') {\r\n return value === null || value === undefined || value === '';\r\n }\r\n if (filter.matchMode === 'isNotEmpty') {\r\n return value !== null && value !== undefined && value !== '';\r\n }\r\n \r\n if (value === null || value === undefined) {\r\n return false;\r\n }\r\n\r\n const strValue = String(value).toLowerCase();\r\n const numValue = Number(value);\r\n const numFilterValue = Number(filter.value);\r\n \r\n // Date comparison\r\n const dateValue = value instanceof Date ? value : new Date(value);\r\n const dateFilterValue = new Date(filter.value);\r\n const isValidDate = dateValue instanceof Date && !isNaN(dateValue.getTime());\r\n const isValidFilterDate = dateFilterValue instanceof Date && !isNaN(dateFilterValue.getTime());\r\n \r\n switch (filter.matchMode) {\r\n case 'contains':\r\n return strValue.includes(filterValue);\r\n case 'notContains':\r\n return !strValue.includes(filterValue);\r\n case 'startsWith':\r\n return strValue.startsWith(filterValue);\r\n case 'endsWith':\r\n return strValue.endsWith(filterValue);\r\n case 'equals':\r\n // For dates, compare date parts only\r\n if (isValidDate && isValidFilterDate) {\r\n return dateValue.toDateString() === dateFilterValue.toDateString();\r\n }\r\n return strValue === filterValue || value === filter.value;\r\n case 'notEquals':\r\n // For dates, compare date parts only\r\n if (isValidDate && isValidFilterDate) {\r\n return dateValue.toDateString() !== dateFilterValue.toDateString();\r\n }\r\n return strValue !== filterValue && value !== filter.value;\r\n case 'lt':\r\n if (isValidDate && isValidFilterDate) {\r\n return dateValue.getTime() < dateFilterValue.getTime();\r\n }\r\n return !isNaN(numValue) && !isNaN(numFilterValue) && numValue < numFilterValue;\r\n case 'lte':\r\n if (isValidDate && isValidFilterDate) {\r\n return dateValue.getTime() <= dateFilterValue.getTime();\r\n }\r\n return !isNaN(numValue) && !isNaN(numFilterValue) && numValue <= numFilterValue;\r\n case 'gt':\r\n if (isValidDate && isValidFilterDate) {\r\n return dateValue.getTime() > dateFilterValue.getTime();\r\n }\r\n return !isNaN(numValue) && !isNaN(numFilterValue) && numValue > numFilterValue;\r\n case 'gte':\r\n if (isValidDate && isValidFilterDate) {\r\n return dateValue.getTime() >= dateFilterValue.getTime();\r\n }\r\n return !isNaN(numValue) && !isNaN(numFilterValue) && numValue >= numFilterValue;\r\n default:\r\n return strValue.includes(filterValue);\r\n }\r\n });\r\n });\r\n\r\n this.gridData = filtered;\r\n this.pagination.totalRecords = filtered.length;\r\n this.updatePagination();\r\n }\r\n\r\n private updatePagination(): void {\r\n this.pagination.totalPages = Math.ceil(\r\n this.pagination.totalRecords / this.pagination.pageSize\r\n );\r\n }\r\n\r\n private emitStateChange(): void {\r\n this.stateChange.emit({ ...this.state });\r\n }\r\n\r\n trackByRow(index: number, row: any): any {\r\n // Try to use id, _id, or unique identifier, fallback to index + stringified row\r\n return row?.id ?? row?._id ?? row?.Id ?? `${index}-${JSON.stringify(row)}`;\r\n }\r\n\r\n getCellValue(row: any, column: GridColumn): any {\r\n const value = row[column.field];\r\n // Format is now just a hint string (like 'c', 'd', 'p'), not a function\r\n // Actual formatting should be done via pipes in template\r\n return value;\r\n }\r\n\r\n getSortIcon(column: GridColumn): string {\r\n if (!column.sortable) {\r\n return '';\r\n }\r\n\r\n const sort = this.sortMetadata.find(s => s.field === column.field);\r\n \r\n if (!sort) {\r\n return '⇅';\r\n }\r\n \r\n return sort.order === 'asc' ? '↑' : '↓';\r\n }\r\n\r\n getFilterValue(column: GridColumn): string {\r\n const filter = this.filterMetadata.find(f => f.field === column.field);\r\n return filter ? filter.value : '';\r\n }\r\n\r\n // Filter Modal Methods\r\n openFilterModal(column: GridColumn, event: Event): void {\r\n event.stopPropagation();\r\n \r\n if (column.filterable === false) {\r\n return;\r\n }\r\n\r\n this.currentFilterColumn = column;\r\n \r\n // Load existing filter\r\n const existingFilter = this.filterMetadata.find(f => f.field === column.field);\r\n if (existingFilter) {\r\n this.filterValue = existingFilter.value;\r\n this.currentFilterOperator = existingFilter.matchMode as any;\r\n } else {\r\n this.filterValue = '';\r\n // Set default operator based on filterType\r\n const filterType = column.filterType || 'text';\r\n if (filterType === 'number' || filterType === 'date') {\r\n this.currentFilterOperator = 'equals';\r\n } else {\r\n this.currentFilterOperator = 'contains';\r\n }\r\n }\r\n\r\n this.showFilterModal = true;\r\n }\r\n\r\n closeFilterModal(): void {\r\n this.showFilterModal = false;\r\n this.currentFilterColumn = null;\r\n this.filterValue = '';\r\n }\r\n\r\n applyFilterModal(): void {\r\n if (!this.currentFilterColumn) return;\r\n\r\n const field = this.currentFilterColumn.field as string;\r\n\r\n // Remove existing filter for this field\r\n this.filterMetadata = this.filterMetadata.filter(f => f.field !== field);\r\n\r\n // For isEmpty and isNotEmpty, no value is needed\r\n const needsValue = this.currentFilterOperator !== 'isEmpty' && this.currentFilterOperator !== 'isNotEmpty';\r\n\r\n // Add new filter if value is not empty OR if operator doesn't need value\r\n if (!needsValue || (this.filterValue && this.filterValue.trim())) {\r\n this.filterMetadata.push({\r\n field: field,\r\n operator: 'and',\r\n value: needsValue ? this.filterValue.trim() : '',\r\n matchMode: this.currentFilterOperator\r\n });\r\n this.state.filters?.set(field, needsValue ? this.filterValue.trim() : this.currentFilterOperator);\r\n } else {\r\n this.state.filters?.delete(field);\r\n }\r\n\r\n this.state.page = 0;\r\n this.pagination.page = 0;\r\n \r\n this.emitStateChange();\r\n \r\n if (this.lazy) {\r\n this.loadData();\r\n } else {\r\n this.filterLocal();\r\n }\r\n\r\n this.closeFilterModal();\r\n }\r\n\r\n clearFilterModal(): void {\r\n if (!this.currentFilterColumn) return;\r\n\r\n const field = this.currentFilterColumn.field as string;\r\n this.filterMetadata = this.filterMetadata.filter(f => f.field !== field);\r\n this.state.filters?.delete(field);\r\n\r\n this.state.page = 0;\r\n this.pagination.page = 0;\r\n \r\n this.emitStateChange();\r\n \r\n if (this.lazy) {\r\n this.loadData();\r\n } else {\r\n this.filterLocal();\r\n }\r\n\r\n this.closeFilterModal();\r\n }\r\n\r\n isFilterActive(column: GridColumn): boolean {\r\n return this.filterMetadata.some(f => f.field === column.field);\r\n }\r\n\r\n getPageNumbers(): number[] {\r\n const pages: number[] = [];\r\n const total = this.pagination.totalPages;\r\n const current = this.pagination.page;\r\n \r\n if (total <= 7) {\r\n for (let i = 0; i < total; i++) {\r\n pages.push(i);\r\n }\r\n } else {\r\n if (current <= 3) {\r\n for (let i = 0; i < 5; i++) pages.push(i);\r\n pages.push(-1);\r\n pages.push(total - 1);\r\n } else if (current >= total - 4) {\r\n pages.push(0);\r\n pages.push(-1);\r\n for (let i = total - 5; i < total; i++) pages.push(i);\r\n } else {\r\n pages.push(0);\r\n pages.push(-1);\r\n for (let i = current - 1; i <= current + 1; i++) pages.push(i);\r\n pages.push(-1);\r\n pages.push(total - 1);\r\n }\r\n }\r\n \r\n return pages;\r\n }\r\n\r\n // Column Management Methods\r\n toggleColumnVisibility(column: GridColumn): void {\r\n column.visible = !column.visible;\r\n this.displayedColumns = [...this.displayedColumns];\r\n }\r\n\r\n getVisibleColumns(): GridColumn[] {\r\n return this.displayedColumns.filter(col => col.visible !== false);\r\n }\r\n\r\n // Drag & Drop Methods\r\n onDragStart(event: DragEvent, column: GridColumn, index: number): void {\r\n if (!this.config?.reorderable) return;\r\n \r\n this.draggedColumn = column;\r\n event.dataTransfer!.effectAllowed = 'move';\r\n event.dataTransfer!.setData('text/html', (event.target as HTMLElement).innerHTML);\r\n }\r\n\r\n onColumnDragOver(event: DragEvent, index: number): void {\r\n if (!this.config?.reorderable || !this.draggedColumn) return;\r\n \r\n event.preventDefault();\r\n event.dataTransfer!.dropEffect = 'move';\r\n this.dropTargetIndex = index;\r\n }\r\n\r\n onColumnDrop(event: DragEvent, targetIndex: number): void {\r\n if (!this.config?.reorderable || !this.draggedColumn) return;\r\n \r\n event.preventDefault();\r\n \r\n const visibleColumns = this.getVisibleColumns();\r\n const draggedIndex = visibleColumns.indexOf(this.draggedColumn);\r\n \r\n if (draggedIndex !== targetIndex) {\r\n const allColumns = [...this.displayedColumns];\r\n const draggedCol = allColumns.splice(draggedIndex, 1)[0];\r\n allColumns.splice(targetIndex, 0, draggedCol);\r\n this.displayedColumns = allColumns;\r\n }\r\n \r\n this.draggedColumn = undefined;\r\n this.dropTargetIndex = undefined;\r\n }\r\n\r\n onColumnDragEnd(): void {\r\n this.draggedColumn = undefined;\r\n this.dropTargetIndex = undefined;\r\n }\r\n\r\n // Resize Methods\r\n onResizeStart(event: MouseEvent, column: GridColumn): void {\r\n if (!column.resizable) return;\r\n \r\n event.preventDefault();\r\n event.stopPropagation();\r\n \r\n this.resizingColumn = column;\r\n this.resizeStartX = event.pageX;\r\n \r\n // Get the header cell element\r\n const resizeHandle = event.target as HTMLElement;\r\n const headerCell = resizeHandle.closest('.header-cell') as HTMLElement;\r\n \r\n if (headerCell) {\r\n headerCell.classList.add('resizing');\r\n this.resizeStartWidth = headerCell.offsetWidth;\r\n } else {\r\n this.resizeStartWidth = 100;\r\n }\r\n \r\n document.addEventListener('mousemove', this.onResize);\r\n document.addEventListener('mouseup', this.onResizeEnd);\r\n }\r\n\r\n private onResize = (event: MouseEvent): void => {\r\n if (!this.resizingColumn) return;\r\n \r\n event.preventDefault();\r\n \r\n const diff = event.pageX - this.resizeStartX;\r\n const minWidth = parseInt(this.resizingColumn.minWidth || '50', 10);\r\n const maxWidth = this.resizingColumn.maxWidth ? parseInt(this.resizingColumn.maxWidth, 10) : Infinity;\r\n let newWidth = Math.max(minWidth, this.resizeStartWidth + diff);\r\n \r\n if (maxWidth !== Infinity) {\r\n newWidth = Math.min(newWidth, maxWidth);\r\n }\r\n \r\n // Update column width directly\r\n this.resizingColumn.width = `${newWidth}px`;\r\n }\r\n\r\n private onResizeEnd = (): void => {\r\n // Remove resizing class\r\n const resizingElement = document.querySelector('.header-cell.resizing');\r\n if (resizingElement) {\r\n resizingElement.classList.remove('resizing');\r\n }\r\n \r\n this.resizingColumn = undefined;\r\n document.removeEventListener('mousemove', this.onResize);\r\n document.removeEventListener('mouseup', this.onResizeEnd);\r\n }\r\n\r\n // Global Search\r\n onGlobalSearch(term: string): void {\r\n this.globalSearchTerm = term;\r\n \r\n if (!term.trim()) {\r\n this.loadData();\r\n return;\r\n }\r\n\r\n // Filter data locally or trigger server-side search\r\n if (this.lazy && this.adapter) {\r\n // Server-side search - reload data with global search term\r\n this.state.page = 0;\r\n this.loadData();\r\n } else {\r\n // Client-side search\r\n const filteredData = this.gridData.filter((row: any) => {\r\n return this.getVisibleColumns().some(col => {\r\n const value = row[col.field];\r\n return value?.toString().toLowerCase().includes(term.toLowerCase());\r\n });\r\n });\r\n this.gridData = filteredData;\r\n }\r\n }\r\n\r\n // Add Button Handler\r\n onAddButtonClick(): void {\r\n if (this.addButtonUrl()) {\r\n window.location.href = this.addButtonUrl()!;\r\n } else {\r\n this.addClick.emit();\r\n }\r\n }\r\n\r\n onRefreshClick(): void {\r\n this.onRefresh.emit();\r\n }\r\n\r\n // Export to Excel\r\n exportToExcel(): void {\r\n const dataToExport = this.gridData;\r\n this.excelExport.emit(dataToExport);\r\n \r\n // Generate professional Excel file\r\n this.generateExcelFile(dataToExport);\r\n }\r\n\r\n private generateExcelFile(data: T[]): void {\r\n if (data.length === 0) {\r\n console.warn('No data to export');\r\n return;\r\n }\r\n\r\n const columns = this.getVisibleColumns();\r\n const today = new Date();\r\n const dateStr = today.toLocaleDateString('en-GB', { \r\n day: '2-digit', \r\n month: '2-digit', \r\n year: 'numeric' \r\n });\r\n const timeStr = today.toLocaleTimeString('en-GB', { \r\n hour: '2-digit', \r\n minute: '2-digit' \r\n });\r\n\r\n // Create Excel XML with enhanced styling\r\n let excelContent = `<?xml version=\"1.0\"?>\r\n<?mso-application progid=\"Excel.Sheet\"?>\r\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n xmlns:x=\"urn:schemas-microsoft-com:office:excel\"\r\n xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n xmlns:html=\"http://www.w3.org/TR/REC-html40\">\r\n <DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">\r\n <Title>${this.exportFileName()}</Title>\r\n <Author>Nlabs Data Grid</Author>\r\n <Created>${today.toISOString()}</Created>\r\n <Company>Your Company</Company>\r\n </DocumentProperties>\r\n <Styles>\r\n <Style ss:ID=\"Title\">\r\n <Font ss:Bold=\"1\" ss:Size=\"16\" ss:Color=\"#1F2937\"/>\r\n <Alignment ss:Horizontal=\"Left\" ss:Vertical=\"Center\"/>\r\n </Style>\r\n <Style ss:ID=\"Subtitle\">\r\n <Font ss:Size=\"11\" ss:Color=\"#6B7280\"/>\r\n <Alignment ss:Horizontal=\"Left\" ss:Vertical=\"Center\"/>\r\n </Style>\r\n <Style ss:ID=\"Header\">\r\n <Font ss:Bold=\"1\" ss:Size=\"11\" ss:Color=\"#FFFFFF\"/>\r\n <Interior ss:Color=\"#4F46E5\" ss:Pattern=\"Solid\"/>\r\n <Alignment ss:Horizontal=\"Center\" ss:Vertical=\"Center\"/>\r\n <Borders>\r\n <Border ss:Position=\"Bottom\" ss:LineStyle=\"Continuous\" ss:Weight=\"2\" ss:Color=\"#4338CA\"/>\r\n <Border ss:Position=\"Left\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#4338CA\"/>\r\n <Border ss:Position=\"Right\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#4338CA\"/>\r\n <Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#4338CA\"/>\r\n </Borders>\r\n </Style>\r\n <Style ss:ID=\"DataEven\">\r\n <Interior ss:Color=\"#F9FAFB\" ss:Pattern=\"Solid\"/>\r\n <Borders>\r\n <Border ss:Position=\"Bottom\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#E5E7EB\"/>\r\n <Border ss:Position=\"Left\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#E5E7EB\"/>\r\n <Border ss:Position=\"Right\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#E5E7EB\"/>\r\n <Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#E5E7EB\"/>\r\n </Borders>\r\n <Alignment ss:Vertical=\"Center\"/>\r\n </Style>\r\n <Style ss:ID=\"DataOdd\">\r\n <Interior ss:Color=\"#FFFFFF\" ss:Pattern=\"Solid\"/>\r\n <Borders>\r\n <Border ss:Position=\"Bottom\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#E5E7EB\"/>\r\n <Border ss:Position=\"Left\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#E5E7EB\"/>\r\n <Border ss:Position=\"Right\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#E5E7EB\"/>\r\n <Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\" ss:Color=\"#E5E7EB\"/>\r\n </Borders>\r\n <Alignment ss:Vertical=\"Center\"/>\r\n </Style>\r\n <Style ss:ID=\"Footer\">\r\n <Font ss:Bold=\"1\" ss:Size=\"10\" ss:Color=\"#6B7280\"/>\r\n <Interior ss:Color=\"#F3F4F6\" ss:Pattern=\"Solid\"/>\r\n <Alignment ss:Horizontal=\"Right\" ss:Vertical=\"Center\"/>\r\n <Borders>\r\n <Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Weight=\"2\" ss:Color=\"#D1D5DB\"/>\r\n </Borders>\r\n </Style>\r\n </Styles>\r\n <Worksheet ss:Name=\"Data Export\">\r\n <Table>\r\n <!-- Title Row -->\r\n <Row ss:Height=\"24\">\r\n <Cell ss:StyleID=\"Title\" ss:MergeAcross=\"${columns.length - 1}\">\r\n <Data ss:Type=\"String\">📊 ${this.exportFileName()}</Data>\r\n </Cell>\r\n </Row>\r\n <!-- Date/Time Row -->\r\n <Row ss:Height=\"18\">\r\n <Cell ss:StyleID=\"Subtitle\" ss:MergeAcross=\"${columns.length - 1}\">\r\n <Data ss:Type=\"String\">Generated: ${dateStr} at ${timeStr} | Records: ${data.length}</Data>\r\n </Cell>\r\n </Row>\r\n <!-- Empty Row -->\r\n <Row ss:Height=\"10\"/>\r\n <!-- Header Row -->\r\n <Row ss:Height=\"20\">\r\n${columns.map(col => ` <Cell ss:StyleID=\"Header\"><Data ss:Type=\"String\">${this.escapeXml(col.header)}</Data></Cell>`).join('\\n')}\r\n </Row>\r\n <!-- Data Rows -->\r\n${data.map((row, idx) => {\r\n const styleId = idx % 2 === 0 ? 'DataEven' : 'DataOdd';\r\n return ` <Row ss:Height=\"18\" ss:StyleID=\"${styleId}\">\r\n${columns.map(col => {\r\n const value = (row as any)[col.field];\r\n const type = typeof value === 'number' ? 'Number' : 'String';\r\n const displayValue = this.formatCellValue(value, col);\r\n return ` <Cell><Data ss:Type=\"${type}\">${this.escapeXml(displayValue)}</Data></Cell>`;\r\n}).join('\\n')}\r\n </Row>`;\r\n}).join('\\n')}\r\n <!-- Empty Row -->\r\n <Row ss:Height=\"10\"/>\r\n <!-- Footer Row -->\r\n <Row ss:Height=\"18\">\r\n <Cell ss:StyleID=\"Footer\" ss:MergeAcross=\"${columns.length - 1}\">\r\n <Data ss:Type=\"String\">Total Records: ${data.length} | Exported from NLabs Data Grid</Data>\r\n </Cell>\r\n </Row>\r\n </Table>\r\n </Worksheet>\r\n</Workbook>`;\r\n\r\n const blob = new Blob([excelContent], { \r\n type: 'application/vnd.ms-excel;charset=utf-8;' \r\n });\r\n const link = document.createElement('a');\r\n link.href = URL.createObjectURL(blob);\r\n link.download = `${this.exportFileName()}_${dateStr.replace(/\\//g, '-')}.xls`;\r\n link.click();\r\n URL.revokeObjectURL(link.href);\r\n }\r\n\r\n private formatCellValue(value: any, column: GridColumn): string {\r\n if (value == null || value === '') return '';\r\n \r\n // Use the column's format function if available\r\n if (column.format && typeof column.format === 'function') {\r\n try {\r\n return column.format(value);\r\n } catch (e) {\r\n console.warn('Error formatting value:', e);\r\n }\r\n }\r\n \r\n // Date formatting\r\n if (column.type === 'date') {\r\n if (value instanceof Date) {\r\n return value.toLocaleDateString('en-GB');\r\n }\r\n // Try to parse string date\r\n const date = new Date(value);\r\n if (!isNaN(date.getTime())) {\r\n return date.toLocaleDateString('en-GB');\r\n }\r\n }\r\n \r\n // Number formatting\r\n if (column.type === 'number' && typeof value === 'number') {\r\n return value.toLocaleString('en-US', { \r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 2 \r\n });\r\n }\r\n \r\n // Boolean formatting\r\n if (column.type === 'boolean') {\r\n return value ? 'Yes' : 'No';\r\n }\r\n \r\n return String(value);\r\n }\r\n\r\n private escapeXml(text: string): string {\r\n return text\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&apos;');\r\n }\r\n\r\n // Export to PDF / Print\r\n exportToPDF(): void {\r\n this.pdfExport.emit(this.gridData);\r\n \r\n // Generate professional print layout\r\n this.generatePrintablePDF();\r\n }\r\n\r\n private generatePrintablePDF(): void {\r\n if (this.gridData.length === 0) {\r\n console.warn('No data to export');\r\n return;\r\n }\r\n\r\n const columns = this.getVisibleColumns();\r\n const today = new Date();\r\n const dateStr = today.toLocaleDateString('en-GB', { \r\n day: '2-digit', \r\n month: '2-digit', \r\n year: 'numeric' \r\n });\r\n const timeStr = today.toLocaleTimeString('en-GB', { \r\n hour: '2-digit', \r\n minute: '2-digit' \r\n });\r\n\r\n const printWindow = window.open('', '_blank');\r\n if (!printWindow) {\r\n console.error('Failed to open print window');\r\n return;\r\n }\r\n\r\n const htmlContent = `\r\n <!DOCTYPE html>\r\n <html lang=\"en\">\r\n <head>\r\n <meta charset=\"UTF-8\">\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n <title>${this.exportFileName()} - PDF Export</title>\r\n <style>\r\n * { \r\n margin: 0; \r\n padding: 0; \r\n box-sizing: border-box; \r\n }\r\n \r\n body { \r\n font-family: 'Segoe UI', Arial, sans-serif;\r\n padding: 30px;\r\n background: white;\r\n color: #1f2937;\r\n }\r\n \r\n .header {\r\n margin-bottom: 30px;\r\n border-bottom: 3px solid #4f46e5;\r\n padding-bottom: 20px;\r\n }\r\n \r\n .header h1 { \r\n color: #4f46e5; \r\n font-size: 28px; \r\n margin-bottom: 8px;\r\n font-weight: 600;\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n }\r\n \r\n .export-info {\r\n display: flex;\r\n justify-content: space-between;\r\n color: #6b7280;\r\n font-size: 13px;\r\n margin-top: 8px;\r\n }\r\n \r\n .export-date {\r\n font-weight: 500;\r\n }\r\n \r\n .export-stats {\r\n font-weight: 500;\r\n }\r\n \r\n table { \r\n border-collapse: collapse; \r\n width: 100%; \r\n margin-top: 20px;\r\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\r\n }\r\n \r\n thead {\r\n background: linear-gradient(135deg, #4f46e5 0%, #6366f1 100%);\r\n }\r\n \r\n th { \r\n color: white; \r\n padding: 14px 12px; \r\n text-align: left; \r\n font-weight: 600;\r\n font-size: 12px;\r\n text-transform: uppercase;\r\n letter-spacing: 0.5px;\r\n border-right: 1px solid rgba(255,255,255,0.1);\r\n }\r\n \r\n th:last-child {\r\n border-right: none;\r\n }\r\n \r\n td { \r\n border: 1px solid #e5e7eb; \r\n padding: 12px;\r\n font-size: 13px;\r\n }\r\n \r\n tbody tr:nth-child(even) { \r\n background: #f9fafb; \r\n }\r\n \r\n tbody tr:hover { \r\n background: #f3f4f6; \r\n }\r\n \r\n .footer {\r\n margin-top: 30px;\r\n padding-top: 20px;\r\n border-top: 2px solid #e5e7eb;\r\n text-align: center;\r\n color: #9ca3af;\r\n font-size: 12px;\r\n }\r\n \r\n .footer-stats {\r\n display: flex;\r\n justify-content: center;\r\n gap: 30px;\r\n margin-top: 10px;\r\n }\r\n \r\n .footer-stat {\r\n display: flex;\r\n align-items: center;\r\n gap: 5px;\r\n }\r\n \r\n .footer-stat strong {\r\n color: #4f46e5;\r\n }\r\n \r\n @media print {\r\n body { \r\n padding: 20px; \r\n }\r\n \r\n .header { \r\n page-break-after: avoid; \r\n }\r\n \r\n table { \r\n page-break-inside: auto; \r\n }\r\n \r\n tr { \r\n page-break-inside: avoid; \r\n page-break-after: auto; \r\n }\r\n \r\n thead { \r\n display: table-header-group; \r\n }\r\n \r\n tfoot { \r\n display: table-footer-group; \r\n }\r\n \r\n tbody tr:hover {\r\n background: inherit;\r\n }\r\n }\r\n \r\n @page {\r\n margin: 20mm;\r\n size: A4 landscape;\r\n }\r\n </style>\r\n </head>\r\n <body>\r\n <div class=\"header\">\r\n <h1>\r\n <span>📊</span>\r\n <span>${this.exportFileName()}</span>\r\n </h1>\r\n <div class=\"export-info\">\r\n <div class=\"export-date\">\r\n Generated: ${dateStr} at ${timeStr}\r\n </div>\r\n <div class=\"export-stats\">\r\n Total Records: ${this.gridData.length} | Columns: ${columns.length}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <table>\r\n <thead>\r\n <tr>\r\n ${columns.map(col => `<th>${this.escapeHtml(col.header)}</th>`).join('')}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n ${this.gridData.map((row, idx) => `\r\n <tr>\r\n ${columns.map(col => {\r\n const value = (row as any)[col.field];\r\n const formattedValue = this.formatCellValue(value, col);\r\n return `<td>${this.escapeHtml(formattedValue)}</td>`;\r\n }).join('')}\r\n </tr>\r\n `).join('')}\r\n </tbody>\r\n </table>\r\n \r\n <div class=\"footer\">\r\n <div>Exported from NLabs Data Grid | © ${today.getFullYear()}</div>\r\n <div class=\"footer-stats\">\r\n <div class=\"footer-stat\">\r\n <span>📄 Pages:</span>\r\n <strong>Auto</strong>\r\n </div>\r\n <div class=\"footer-stat\">\r\n <span>📊 Records:</span>\r\n <strong>${this.gridData.length}</strong>\r\n </div>\r\n <div class=\"footer-stat\">\r\n <span>📅 Date:</span>\r\n <strong>${dateStr}</strong>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <script>\r\n window.onload = function() {\r\n // Auto-print after a short delay\r\n setTimeout(function() {\r\n window.print();\r\n }, 500);\r\n };\r\n </script>\r\n </body>\r\n </html>\r\n `;\r\n\r\n printWindow.document.write(htmlContent);\r\n printWindow.document.close();\r\n }\r\n\r\n private escapeHtml(text: string): string {\r\n const div = document.createElement('div');\r\n div.textContent = text;\r\n return div.innerHTML;\r\n }\r\n}\r\n","<div class=\"nlabs-data-grid\" [class.loading]=\"loading\">\n <!-- Loading Overlay -->\n @if (loading) {\n <div class=\"grid-loading-overlay\">\n <div class=\"spinner\"></div>\n </div>\n }\n\n\n <!-- Grid Container -->\n <div class=\"grid-container\">\n <!-- Toolbar with Global Search, Export, Theme Selector -->\n @if (config?.showHeader !== false) {\n <div class=\"grid-toolbar\">\n <div class=\"toolbar-left\">\n <!-- Global Search -->\n @if(showGlobalSearch()){\n <div class=\"global-search\">\n <input type=\"text\" class=\"global-search-input\" placeholder=\"🔍 Search in all columns...\"\n [(ngModel)]=\"globalSearchTerm\" (input)=\"onGlobalSearch($any($event.target).value)\" />\n </div>\n }\n </div>\n <div class=\"toolbar-center\">\n <!-- Add Button -->\n @if (showAddButton()) {\n <button class=\"toolbar-btn btn-add\" (click)=\"onAddButtonClick()\" title=\"Add new record\">\n ➕ {{ addButtonText() }}\n </button>\n }\n <!-- Export Buttons -->\n @if (showExport()) {\n <div class=\"export-buttons\">\n <button class=\"toolbar-btn btn-export\" (click)=\"exportToExcel()\" title=\"Export to Excel/CSV\">\n 📊 Excel\n </button>\n <button class=\"toolbar-btn btn-export\" (click)=\"exportToPDF()\" title=\"Export to PDF / Print\">\n 📄 PDF\n </button>\n </div>\n }\n <!-- Caption Command Template -->\n @if (captionCommandTemplate()) {\n <ng-container>\n <ng-container *ngTemplateOutlet=\"captionCommandTemplate()!\"></ng-container>\n </ng-container>\n }\n </div>\n <div class=\"toolbar-right\">\n <!-- Column Chooser -->\n @if (showColumnChooser() && (config?.reorderable || config?.resizable)) {\n <div class=\"column-chooser\">\n <button class=\"column-chooser-btn btn-icon-only\" (click)=\"showColumnChooserModal = !showColumnChooserModal\"\n title=\"Show/Hide Columns\">\n ☰\n </button>\n <!-- Backdrop -->\n @if (showColumnChooserModal) {\n <div class=\"column-chooser-backdrop\" (click)=\"showColumnChooserModal = false\">\n </div>\n }\n @if (showColumnChooserModal) {\n <div class=\"column-chooser-panel\">\n <div class=\"column-chooser-header\">\n <span>Show/Hide Columns</span>\n <button (click)=\"showColumnChooserModal = false\">✕</button>\n </div>\n <div class=\"column-list\">\n @for (column of displayedColumns; track column) {\n <div class=\"column-item\">\n <label>\n <input type=\"checkbox\" [checked]=\"column.visible !== false\"\n (change)=\"toggleColumnVisibility(column)\" />\n <span>{{ column.header }}</span>\n </label>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <theme-selector [showSelector]=\"showThemeSelector()\" />\n <!-- Refresh Button -->\n <button class=\"toolbar-btn btn-refresh btn-icon-only\" (click)=\"onRefreshClick()\" title=\"Refresh data\">\n 🔄\n </button>\n </div>\n </div>\n }\n\n <!-- Header -->\n @if (config?.showHeader !== false) {\n <div class=\"grid-header\" #gridHeader>\n <div class=\"grid-row header-row\">\n <!-- Checkbox Column Header -->\n @if (config?.selectable && (config?.showCheckboxColumn !== false)) {\n <div class=\"grid-cell header-cell checkbox-cell\"\n [style.width]=\"config?.checkboxColumnWidth || '60px'\"\n [style.min-width]=\"config?.checkboxColumnWidth || '60px'\"\n [style.max-width]=\"config?.checkboxColumnWidth || '60px'\">\n <div class=\"header-content\">\n @if (config?.multiSelect) {\n <input\n type=\"checkbox\"\n class=\"grid-checkbox header-checkbox\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (change)=\"toggleSelectAll($event)\"\n title=\"Select All\"\n />\n }\n </div>\n </div>\n }\n\n <!-- Regular Columns -->\n @for (column of getVisibleColumns(); track column; let i = $index) {\n <div class=\"grid-cell header-cell\"\n [style.width]=\"column.width || 'auto'\" [style.min-width]=\"column.minWidth || '50px'\"\n [style.max-width]=\"column.maxWidth || 'none'\" [class.sortable]=\"column.sortable\"\n [class.dragging]=\"draggedColumn === column\" [class.drop-target]=\"dropTargetIndex === i\"\n [attr.draggable]=\"config?.reorderable\" (dragstart)=\"onDragStart($event, column, i)\"\n (dragover)=\"onColumnDragOver($event, i)\" (drop)=\"onColumnDrop($event, i)\" (dragend)=\"onColumnDragEnd()\"\n (click)=\"column.sortable && onSort(column)\">\n <div class=\"header-content\">\n <span class=\"header-title\">{{ column.header }}</span>\n <div class=\"header-actions\">\n @if (column.sortable) {\n <span class=\"sort-icon\">\n {{ getSortIcon(column) }}\n </span>\n }\n @if (column.filterable !== false && config?.filterable) {\n <button class=\"filter-btn\" [class.active]=\"isFilterActive(column)\"\n (click)=\"openFilterModal(column, $event)\" title=\"Filter\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\"></polygon>\n </svg>\n </button>\n }\n </div>\n </div>\n @if (column.resizable !== false && config?.resizable) {\n <span class=\"resize-handle\" (mousedown)=\"onResizeStart($event, column)\"></span>\n }\n </div>\n }\n\n <!-- Actions Column Header -->\n @if (config?.showActions) {\n <div class=\"grid-cell header-cell actions-cell\"\n [style.width]=\"config?.actionsWidth || '150px'\"\n [style.min-width]=\"config?.actionsWidth || '150px'\"\n [style.max-width]=\"config?.actionsWidth || '150px'\">\n <div class=\"header-content\">\n <span class=\"header-title\">{{ config?.actionsHeader || 'Actions' }}</span>\n </div>\n </div>\n }\n </div>\n\n <!-- Filter Row -->\n @if (config?.filterable) {\n <div class=\"grid-row filter-row\">\n <!-- Checkbox Column Filter (Empty) -->\n @if (config?.selectable && (config?.showCheckboxColumn !== false)) {\n <div class=\"grid-cell filter-cell checkbox-cell\"\n [style.width]=\"config?.checkboxColumnWidth || '60px'\"\n [style.min-width]=\"config?.checkboxColumnWidth || '60px'\"\n [style.max-width]=\"config?.checkboxColumnWidth || '60px'\">\n </div>\n }\n <!-- Regular Column Filters -->\n @for (column of getVisibleColumns(); track column.field) {\n <div class=\"grid-cell filter-cell\" [style.width]=\"column.width || 'auto'\"\n [style.min-width]=\"column.minWidth || '50px'\" [style.max-width]=\"column.maxWidth || 'none'\">\n @if (column.filterable !== false) {\n <input type=\"text\" class=\"filter-input\" [placeholder]=\"'Search ' + column.header\"\n [value]=\"getFilterValue(column)\" (input)=\"onFilter(column, $any($event.target).value)\"\n (click)=\"$event.stopPropagation()\" />\n }\n </div>\n }\n <!-- Actions Column Filter (Empty) -->\n @if (config?.showActions) {\n <div class=\"grid-cell filter-cell actions-cell\"\n [style.width]=\"config?.actionsWidth || '150px'\"\n [style.min-width]=\"config?.actionsWidth || '150px'\"\n [style.max-width]=\"config?.actionsWidth || '150px'\">\n </div>\n }\n </div>\n }\n </div>\n }\n\n\n <!-- Body -->\n <div class=\"grid-body\" #gridBody>\n @for (row of gridData; track trackByRow($index, row)) {\n <div class=\"grid-row data-row\" [class.selected]=\"isRowSelected(row)\" [class.selectable]=\"config?.selectable\"\n [style.height]=\"config?.rowHeight\">\n\n <!-- Checkbox Column Cell -->\n @if (config?.selectable && (config?.showCheckboxColumn !== false)) {\n <div class=\"grid-cell data-cell checkbox-cell\"\n [style.width]=\"config?.checkboxColumnWidth || '60px'\"\n [style.min-width]=\"config?.checkboxColumnWidth || '60px'\"\n [style.max-width]=\"config?.checkboxColumnWidth || '60px'\">\n @if (checkboxTemplate) {\n <ng-container *ngTemplateOutlet=\"checkboxTemplate; context: { $implicit: row, selected: isRowSelected(row) }\"></ng-container>\n } @else {\n <input\n type=\"checkbox\"\n class=\"grid-checkbox row-checkbox\"\n [checked]=\"isRowSelected(row)\"\n (change)=\"onRowSelect(row, $event)\"\n (click)=\"$event.stopPropagation()\"\n />\n }\n </div>\n }\n\n <!-- Regular Data Columns -->\n @for (column of getVisibleColumns(); track column.field) {\n <div class=\"grid-cell data-cell\" [style.width]=\"column.width || 'auto'\"\n [style.min-width]=\"column.minWidth || '50px'\" [style.max-width]=\"column.maxWidth || 'none'\"\n [attr.data-type]=\"column.type\">\n @if (!column.cellTemplate) {\n {{ getCellValue(row, column) }}\n }\n @if (column.cellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.cellTemplate; context: { $implicit: row, column: column }\"></ng-container>\n }\n </div>\n }\n\n <!-- Actions Column Cell -->\n @if (config?.showActions) {\n <div class=\"grid-cell data-cell actions-cell\"\n [style.width]=\"config?.actionsWidth || '150px'\"\n [style.min-width]=\"config?.actionsWidth || '150px'\"\n [style.max-width]=\"config?.actionsWidth || '150px'\">\n @if (actionsTemplate) {\n <ng-container *ngTemplateOutlet=\"actionsTemplate; context: { $implicit: row }\"></ng-container>\n }\n </div>\n }\n </div>\n }\n\n\n <!-- Empty State -->\n @if (gridData.length === 0 && !loading) {\n <div class=\"grid-empty\">\n <p>{{ config?.emptyMessage || 'No records found' }}</p>\n </div>\n }\n\n </div>\n\n <!-- Footer / Pagination -->\n @if (config?.showFooter !== false) {\n <div class=\"grid-footer\">\n <div class=\"pagination-info\">\n <span>\n Showing {{ pagination.page * pagination.pageSize + 1 }} to\n {{ Math.min((pagination.page + 1) * pagination.pageSize, pagination.totalRecords) }}\n of {{ pagination.totalRecords }} entries\n </span>\n </div>\n\n <div class=\"pagination-controls\">\n <!-- Page Size Selector -->\n @if (config?.pageSizeOptions; as pageSizeOptions) {\n <div class=\"page-size-selector\">\n <label>Rows per page:</label>\n <select [value]=\"pagination.pageSize\" (change)=\"onPageSizeChange(+$any($event.target).value)\"\n class=\"page-size-select\">\n @for (size of pageSizeOptions; track $index) {\n <option [value]=\"size\">\n {{ size }}\n </option>\n }\n </select>\n </div>\n }\n\n <!-- Page Navigation -->\n <div class=\"page-navigation\">\n <button class=\"page-btn\" [disabled]=\"pagination.page === 0\" (click)=\"onPageChange(0)\" title=\"First page\">\n ⟪\n </button>\n <button class=\"page-btn\" [disabled]=\"pagination.page === 0\" (click)=\"onPageChange(pagination.page - 1)\"\n title=\"Previous page\">\n ‹\n </button>\n\n @for (pageNum of getPageNumbers(); track pageNum) {\n @if (pageNum !== -1) {\n <button class=\"page-btn\" [class.active]=\"pageNum === pagination.page\" (click)=\"onPageChange(pageNum)\">\n {{ pageNum + 1 }}\n </button>\n }\n @if (pageNum === -1) {\n <span class=\"page-ellipsis\">...</span>\n }\n }\n\n <button class=\"page-btn\" [disabled]=\"pagination.page >= pagination.totalPages - 1\"\n (click)=\"onPageChange(pagination.page + 1)\" title=\"Next page\">\n ›\n </button>\n <button class=\"page-btn\" [disabled]=\"pagination.page >= pagination.totalPages - 1\"\n (click)=\"onPageChange(pagination.totalPages - 1)\" title=\"Last page\">\n ⟫\n </button>\n </div>\n </div>\n\n <!-- Custom Footer Template -->\n @if (footerTemplate()) {\n <div class=\"grid-custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate()!; context: { $implicit: gridData, total: pagination.totalRecords }\"></ng-container>\n </div>\n }\n </div>\n }\n\n </div>\n </div>\n\n <!-- Filter Modal -->\n @if (showFilterModal) {\n <div class=\"filter-modal-overlay\" (click)=\"closeFilterModal()\">\n <div class=\"filter-modal-content\" (click)=\"$event.stopPropagation()\">\n <div class=\"filter-modal-header\">\n <h3>Filter: {{ currentFilterColumn?.header }}</h3>\n <button class=\"close-btn\" (click)=\"closeFilterModal()\">×</button>\n </div>\n\n <div class=\"filter-modal-body\">\n <div class=\"filter-form\">\n <!-- Operator Selection - STRING -->\n @if (!currentFilterColumn?.filterType || currentFilterColumn?.filterType === 'text') {\n <div class=\"form-group\">\n <label>Operator:</label>\n <select [(ngModel)]=\"currentFilterOperator\" class=\"form-control\">\n <option value=\"contains\">Contains (İçerir)</option>\n <option value=\"notContains\">Not Contains (İçermez)</option>\n <option value=\"equals\">Equals (Eşittir)</option>\n <option value=\"notEquals\">Not Equals (Eşit Değil)</option>\n <option value=\"startsWith\">Starts With (İle Başlar)</option>\n <option value=\"endsWith\">Ends With (İle Biter)</option>\n <option value=\"isEmpty\">Is Empty (Boş)</option>\n <option value=\"isNotEmpty\">Is Not Empty (Boş Değil)</option>\n </select>\n </div>\n }\n\n <!-- Operator Selection - NUMBER -->\n @if (currentFilterColumn?.filterType === 'number') {\n <div class=\"form-group\">\n <label>Operator:</label>\n <select [(ngModel)]=\"currentFilterOperator\" class=\"form-control\">\n <option value=\"equals\">Equals (Eşittir)</option>\n <option value=\"notEquals\">Not Equals (Eşit Değil)</option>\n <option value=\"lt\">Less Than (Küçüktür)</option>\n <option value=\"lte\">Less Than or Equal (Küçük Eşit)</option>\n <option value=\"gt\">Greater Than (Büyüktür)</option>\n <option value=\"gte\">Greater Than or Equal (Büyük Eşit)</option>\n <option value=\"isEmpty\">Is Empty (Boş)</option>\n <option value=\"isNotEmpty\">Is Not Empty (Boş Değil)</option>\n </select>\n </div>\n }\n\n <!-- Operator Selection - DATE -->\n @if (currentFilterColumn?.filterType === 'date') {\n <div class=\"form-group\">\n <label>Operator:</label>\n <select [(ngModel)]=\"currentFilterOperator\" class=\"form-control\">\n <option value=\"equals\">On Date (Tarihte)</option>\n <option value=\"notEquals\">Not On Date (Tarihte Değil)</option>\n <option value=\"lt\">Before (Önce)</option>\n <option value=\"lte\">On or Before (Veya Önce)</option>\n <option value=\"gt\">After (Sonra)</option>\n <option value=\"gte\">On or After (Veya Sonra)</option>\n <option value=\"isEmpty\">Is Empty (Boş)</option>\n <option value=\"isNotEmpty\">Is Not Empty (Boş Değil)</option>\n </select>\n </div>\n }\n\n <!-- Value Input - TEXT -->\n @if ((!currentFilterColumn?.filterType || currentFilterColumn?.filterType === 'text') && currentFilterOperator\n !== 'isEmpty' && currentFilterOperator !== 'isNotEmpty') {\n <div class=\"form-group\">\n <label>Value:</label>\n <input type=\"text\" [(ngModel)]=\"filterValue\" class=\"form-control\" placeholder=\"Enter text...\"\n (keyup.enter)=\"applyFilterModal()\" />\n </div>\n }\n\n <!-- Value Input - NUMBER -->\n @if (currentFilterColumn?.filterType === 'number' && currentFilterOperator !== 'isEmpty' &&\n currentFilterOperator !== 'isNotEmpty') {\n <div class=\"form-group\">\n <label>Value:</label>\n <input type=\"number\" [(ngModel)]=\"filterValue\" class=\"form-control\" placeholder=\"Enter number...\"\n (keyup.enter)=\"applyFilterModal()\" />\n </div>\n }\n\n <!-- Value Input - DATE -->\n @if (currentFilterColumn?.filterType === 'date' && currentFilterOperator !== 'isEmpty' && currentFilterOperator\n !== 'isNotEmpty') {\n <div class=\"form-group\">\n <label>Value:</label>\n <input type=\"date\" [(ngModel)]=\"filterValue\" class=\"form-control\" (keyup.enter)=\"applyFilterModal()\" />\n </div>\n }\n\n\n @if (currentFilterOperator === 'isEmpty' || currentFilterOperator === 'isNotEmpty') {\n <div class=\"form-group\">\n <p\n style=\"padding: 12px; background: var(--grid-bg-secondary); border-radius: var(--grid-radius-sm); color: var(--grid-text-secondary); font-size: 0.875rem;\">\n ℹ️ Bu operatör için değer girmeye gerek yok.\n </p>\n </div>\n }\n\n </div>\n </div>\n\n <div class=\"filter-modal-footer\">\n <button class=\"btn-cancel\" (click)=\"closeFilterModal()\">Cancel</button>\n <button class=\"btn-clear\" (click)=\"clearFilterModal()\">Clear Filter</button>\n <button class=\"btn-apply\" (click)=\"applyFilterModal()\">Apply</button>\n </div>\n </div>\n </div>\n }","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[nlabsGridCellTemplate]',\r\n standalone: true\r\n})\r\nexport class GridCellTemplateDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[nlabsGridHeaderTemplate]',\r\n standalone: true\r\n})\r\nexport class GridHeaderTemplateDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}","/**\r\n * Grid Configuration Models\r\n */\r\n\r\nexport interface GridColumn<T = any> {\r\n field: keyof T | string;\r\n header: string;\r\n sortable?: boolean;\r\n filterable?: boolean;\r\n filterType?: 'text' | 'number' | 'date' | 'boolean';\r\n width?: string;\r\n minWidth?: string;\r\n maxWidth?: string;\r\n type?: 'text' | 'number' | 'date' | 'boolean' | 'custom';\r\n format?: (value: any) => string;\r\n cellTemplate?: any; // TemplateRef for custom cell rendering\r\n visible?: boolean;\r\n frozen?: boolean;\r\n resizable?: boolean;\r\n}\r\n\r\nexport interface GridConfig {\r\n columns: GridColumn[];\r\n pageSize?: number;\r\n pageSizeOptions?: number[];\r\n sortable?: boolean;\r\n filterable?: boolean;\r\n selectable?: boolean;\r\n multiSelect?: boolean;\r\n resizable?: boolean;\r\n reorderable?: boolean;\r\n showHeader?: boolean;\r\n showFooter?: boolean;\r\n loading?: boolean;\r\n emptyMessage?: string;\r\n rowHeight?: string;\r\n showActions?: boolean;\r\n actionsHeader?: string;\r\n actionsWidth?: string;\r\n showCheckboxColumn?: boolean;\r\n checkboxColumnWidth?: string;\r\n}\r\n\r\nexport interface GridState {\r\n page: number;\r\n pageSize: number;\r\n sortField?: string;\r\n sortOrder?: 'asc' | 'desc';\r\n filters?: Map<string, any>;\r\n selectedRows?: any[];\r\n}\r\n\r\nexport interface GridDataResult<T = any> {\r\n data: T[];\r\n total: number;\r\n}\r\n\r\nexport interface GridRequest {\r\n skip: number;\r\n top: number;\r\n orderBy?: string;\r\n filter?: string;\r\n select?: string[];\r\n expand?: string[];\r\n globalSearch?: string;\r\n}\r\n\r\nexport interface FilterMetadata {\r\n field: string;\r\n operator: FilterOperator;\r\n value: any;\r\n matchMode?: 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'equals' | 'notEquals' | 'lt' | 'lte' | 'gt' | 'gte' | 'isEmpty' | 'isNotEmpty';\r\n}\r\n\r\nexport type FilterOperator = 'and' | 'or';\r\n\r\nexport interface SortMetadata {\r\n field: string;\r\n order: 'asc' | 'desc';\r\n}\r\n\r\nexport interface PaginationMetadata {\r\n page: number;\r\n pageSize: number;\r\n totalRecords: number;\r\n totalPages: number;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, of, delay } from 'rxjs';\r\nimport { IDataAdapter } from '../adapters/data-adapter.interface';\r\nimport { GridDataResult, GridRequest } from '../models/grid.models';\r\nimport { User } from '../models/demo.models';\r\n\r\n/**\r\n * Mock data adapter for demo purposes\r\n * Simulates backend API with mock data\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MockDataAdapter implements IDataAdapter<User> {\r\n private mockUsers: User[] = this.generateMockUsers(500);\r\n\r\n getData(request: GridRequest): Observable<GridDataResult<User>> {\r\n // Simulate network delay\r\n return of(this.processRequest(request)).pipe(delay(300));\r\n }\r\n\r\n buildQuery(request: GridRequest): string {\r\n // Not used in mock adapter\r\n return '';\r\n }\r\n\r\n private processRequest(request: GridRequest): GridDataResult<User> {\r\n let data = [...this.mockUsers];\r\n\r\n // Apply filtering\r\n if (request.filter) {\r\n data = this.applyFilter(data, request.filter);\r\n }\r\n\r\n // Apply sorting\r\n if (request.orderBy) {\r\n data = this.applySort(data, request.orderBy);\r\n }\r\n\r\n const total = data.length;\r\n\r\n // Apply pagination\r\n const start = request.skip;\r\n const end = start + request.top;\r\n data = data.slice(start, end);\r\n\r\n return { data, total };\r\n }\r\n\r\n private applyFilter(data: User[], filter: string): User[] {\r\n // Simple contains filter for demo\r\n const lowerFilter = filter.toLowerCase();\r\n return data.filter(user =>\r\n user.name.toLowerCase().includes(lowerFilter) ||\r\n user.email.toLowerCase().includes(lowerFilter) ||\r\n user.city.toLowerCase().includes(lowerFilter)\r\n );\r\n }\r\n\r\n private applySort(data: User[], orderBy: string): User[] {\r\n const [field, order] = orderBy.split(' ');\r\n const multiplier = order === 'desc' ? -1 : 1;\r\n\r\n return data.sort((a: any, b: any) => {\r\n if (a[field] < b[field]) return -1 * multiplier;\r\n if (a[field] > b[field]) return 1 * multiplier;\r\n return 0;\r\n });\r\n }\r\n\r\n private generateMockUsers(count: number): User[] {\r\n const firstNames = ['John', 'Jane', 'Michael', 'Emily', 'David', 'Sarah', 'Chris', 'Anna', 'Tom', 'Lisa', 'Robert', 'Jennifer', 'William', 'Amanda', 'James', 'Jessica', 'Daniel', 'Ashley', 'Matthew', 'Brittany'];\r\n const lastNames = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Rodriguez', 'Martinez', 'Hernandez', 'Lopez', 'Gonzalez', 'Wilson', 'Anderson', 'Thomas', 'Taylor', 'Moore', 'Jackson', 'Martin'];\r\n const cities = ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix', 'Philadelphia', 'San Antonio', 'San Diego', 'Dallas', 'San Jose', 'Austin', 'Jacksonville', 'Fort Worth', 'Columbus', 'San Francisco', 'Charlotte', 'Indianapolis', 'Seattle', 'Denver', 'Washington DC'];\r\n const countries = ['USA', 'Canada', 'UK', 'Germany', 'France', 'Spain', 'Italy', 'Australia', 'Japan', 'Brazil'];\r\n const departments = ['Engineering', 'Sales', 'Marketing', 'HR', 'Finance', 'Operations', 'IT', 'Legal', 'Customer Service', 'R&D'];\r\n const jobTitles = ['Senior Manager', 'Team Lead', 'Developer', 'Designer', 'Analyst', 'Consultant', 'Specialist', 'Coordinator', 'Director', 'VP'];\r\n const streets = ['Main St', 'Oak Ave', 'Pine Rd', 'Maple Dr', 'Cedar Ln', 'Elm St', 'Park Blvd', 'Lake View', 'Hill Crest', 'River Side'];\r\n\r\n const users: User[] = [];\r\n\r\n for (let i = 1; i <= count; i++) {\r\n const firstName = firstNames[Math.floor(Math.random() * firstNames.length)];\r\n const lastName = lastNames[Math.floor(Math.random() * lastNames.length)];\r\n const name = `${firstName} ${lastName}`;\r\n const email = `${firstName.toLowerCase()}.${lastName.toLowerCase()}${i}@example.com`;\r\n const age = Math.floor(Math.random() * 50) + 18;\r\n const salary = Math.floor(Math.random() * 150000) + 30000;\r\n const department = departments[Math.floor(Math.random() * departments.length)];\r\n const city = cities[Math.floor(Math.random() * cities.length)];\r\n const country = countries[Math.floor(Math.random() * countries.length)];\r\n const phone = `+1-${Math.floor(Math.random() * 900) + 100}-${Math.floor(Math.random() * 900) + 100}-${Math.floor(Math.random() * 9000) + 1000}`;\r\n const street = streets[Math.floor(Math.random() * streets.length)];\r\n const address = `${Math.floor(Math.random() * 9999) + 1} ${street}`;\r\n const zipCode = String(Math.floor(Math.random() * 90000) + 10000);\r\n const jobTitle = jobTitles[Math.floor(Math.random() * jobTitles.length)];\r\n const managerFirstName = firstNames[Math.floor(Math.random() * firstNames.length)];\r\n const managerLastName = lastNames[Math.floor(Math.random() * lastNames.length)];\r\n const manager = `${managerFirstName} ${managerLastName}`;\r\n const active = Math.random() > 0.3;\r\n const startDate = new Date(2015 + Math.floor(Math.random() * 10), Math.floor(Math.random() * 12), Math.floor(Math.random() * 28) + 1);\r\n const registeredDate = new Date(2020 + Math.floor(Math.random() * 5), Math.floor(Math.random() * 12), Math.floor(Math.random() * 28) + 1);\r\n const lastLogin = new Date(2024, Math.floor(Math.random() * 12), Math.floor(Math.random() * 28) + 1);\r\n const notes = `Employee note #${i} - Performance review pending`;\r\n\r\n users.push({ \r\n id: i, \r\n name, \r\n email, \r\n age, \r\n salary, \r\n department, \r\n city, \r\n country,\r\n phone,\r\n address,\r\n zipCode,\r\n jobTitle,\r\n manager,\r\n active, \r\n startDate, \r\n registeredDate,\r\n lastLogin,\r\n notes\r\n });\r\n }\r\n\r\n return users;\r\n }\r\n}\r\n","//Adapters\r\nexport * from './lib/adapters/data-adapter.interface';\r\nexport * from './lib/adapters/odata-adapter';\r\nexport * from './lib/adapters/rest-adapter';\r\n\r\n//Components\r\nexport * from './lib/components/data-grid/data-grid.component';\r\nexport * from './lib/components/grid-column/grid-column.component';\r\nexport * from './lib/components/theme-selector/theme-selector.component';\r\n\r\n//Directives\r\nexport * from './lib/directives/grid-caption-command-template.directive';\r\nexport * from './lib/directives/grid-cell-template.directive';\r\nexport * from './lib/directives/grid-column-command-template.directive';\r\nexport * from './lib/directives/grid-footer-template.directive';\r\nexport * from './lib/directives/grid-header-template.directive';\r\n\r\n//Models\r\nexport * from './lib/models/grid.models';\r\nexport * from './lib/models/demo.models';\r\n\r\n//Services\r\nexport * from './lib/services/grid-data.service';\r\nexport * from './lib/services/theme.service';\r\nexport * from './lib/services/mock-data.adapter';\r\n\r\n//Styles\r\n// SCSS files cannot be exported from TypeScript entry points","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GridDataService","i2.ThemeService"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@nlabtech/nlabs-grid",
3
+ "version": "1.1.0",
4
+ "peerDependencies": {
5
+ "@angular/common": "^21.0.0",
6
+ "@angular/core": "^21.0.0"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.3.0"
10
+ },
11
+ "sideEffects": false,
12
+ "module": "fesm2022/nlabtech-nlabs-grid.mjs",
13
+ "typings": "types/nlabtech-nlabs-grid.d.ts",
14
+ "exports": {
15
+ "./package.json": {
16
+ "default": "./package.json"
17
+ },
18
+ ".": {
19
+ "types": "./types/nlabtech-nlabs-grid.d.ts",
20
+ "default": "./fesm2022/nlabtech-nlabs-grid.mjs"
21
+ }
22
+ }
23
+ }