igniteui-grid-lite 0.10.0 → 0.11.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/components/cell.d.ts +5 -17
- package/components/cell.js +2 -2
- package/components/cell.js.map +1 -1
- package/components/filter-row.d.ts +2 -5
- package/components/filter-row.js +22 -27
- package/components/filter-row.js.map +1 -1
- package/components/grid.d.ts +10 -15
- package/components/grid.js +33 -36
- package/components/grid.js.map +1 -1
- package/components/header-row.js +2 -1
- package/components/header-row.js.map +1 -1
- package/components/header.js +2 -6
- package/components/header.js.map +1 -1
- package/components/row.d.ts +0 -3
- package/components/row.js +3 -3
- package/components/row.js.map +1 -1
- package/controllers/data-operation.d.ts +1 -3
- package/controllers/data-operation.js +0 -2
- package/controllers/data-operation.js.map +1 -1
- package/controllers/dom.d.ts +4 -16
- package/controllers/dom.js +14 -13
- package/controllers/dom.js.map +1 -1
- package/controllers/filter.d.ts +10 -22
- package/controllers/filter.js +14 -8
- package/controllers/filter.js.map +1 -1
- package/controllers/navigation.d.ts +4 -9
- package/controllers/navigation.js +23 -43
- package/controllers/navigation.js.map +1 -1
- package/controllers/resize.d.ts +3 -9
- package/controllers/resize.js +2 -7
- package/controllers/resize.js.map +1 -1
- package/controllers/sort.d.ts +3 -5
- package/controllers/sort.js +19 -14
- package/controllers/sort.js.map +1 -1
- package/controllers/state.d.ts +2 -13
- package/controllers/state.js +12 -10
- package/controllers/state.js.map +1 -1
- package/custom-elements.json +201 -350
- package/docs/igniteui-grid-lite.json +849 -859
- package/internal/a11y.d.ts +2 -5
- package/internal/a11y.js.map +1 -1
- package/internal/body-focus.d.ts +6 -0
- package/internal/body-focus.js +46 -0
- package/internal/body-focus.js.map +1 -0
- package/internal/constants.d.ts +4 -1
- package/internal/constants.js +2 -0
- package/internal/constants.js.map +1 -1
- package/internal/element-from-event-path.d.ts +1 -1
- package/internal/element-from-event-path.js +2 -9
- package/internal/element-from-event-path.js.map +1 -1
- package/internal/tags.d.ts +0 -1
- package/internal/tags.js +0 -1
- package/internal/tags.js.map +1 -1
- package/internal/types.d.ts +6 -7
- package/internal/types.js.map +1 -1
- package/internal/utils.d.ts +4 -8
- package/internal/utils.js +7 -3
- package/internal/utils.js.map +1 -1
- package/operations/base.js +2 -2
- package/operations/base.js.map +1 -1
- package/operations/filter/state.d.ts +0 -1
- package/operations/filter/state.js +0 -3
- package/operations/filter/state.js.map +1 -1
- package/operations/filter/types.d.ts +1 -1
- package/operations/filter/types.js.map +1 -1
- package/operations/filter.js +3 -2
- package/operations/filter.js.map +1 -1
- package/operations/sort/types.d.ts +1 -1
- package/operations/sort/types.js.map +1 -1
- package/operations/sort.js +5 -1
- package/operations/sort.js.map +1 -1
- package/package.json +2 -3
- package/styles/header-cell/header-cell.css.js +1 -1
- package/styles/header-cell/header-cell.css.js.map +1 -1
- package/styles/themes/filtering-row-themes.js +2 -30
- package/styles/themes/filtering-row-themes.js.map +1 -1
- package/styles/themes/grid-header-themes.js +2 -20
- package/styles/themes/grid-header-themes.js.map +1 -1
- package/styles/themes/grid-themes.js +10 -31
- package/styles/themes/grid-themes.js.map +1 -1
- package/styles/themes/grid.base.css.js +1 -1
- package/styles/themes/grid.base.css.js.map +1 -1
- package/styles/themes/shared/grid.common.css.js +1 -1
- package/styles/themes/shared/grid.common.css.js.map +1 -1
- package/components/virtualizer.d.ts +0 -14
- package/components/virtualizer.js +0 -49
- package/components/virtualizer.js.map +0 -1
- package/internal/virt-flow-layout.d.ts +0 -4
- package/internal/virt-flow-layout.js +0 -15
- package/internal/virt-flow-layout.js.map +0 -1
package/components/grid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.js","sourceRoot":"","sources":["../../src/components/grid.ts"],"names":[],"mappings":"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","sourcesContent":["import { ContextProvider } from '@lit/context';\nimport type { RenderItemFunction } from '@lit-labs/virtualizer/virtualize.js';\nimport { θaddThemingController as addThemingController } from 'igniteui-webcomponents';\nimport { html, nothing, type PropertyValues } from 'lit';\nimport { eventOptions, property, state } from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { createDataOperationsController } from '../controllers/data-operation.js';\nimport { createDomController } from '../controllers/dom.js';\nimport { createStateController } from '../controllers/state.js';\nimport { addA11y, headerRowsFor } from '../internal/a11y.js';\nimport { FOCUS_WITHIN, PIPELINE } from '../internal/constants.js';\nimport { COLUMN_UPDATE_CONTEXT, GRID_STATE_CONTEXT } from '../internal/context.js';\nimport { getElementFromEventPath } from '../internal/element-from-event-path.js';\nimport { EventEmitterBase } from '../internal/mixins/event-emitter.js';\nimport { registerComponent } from '../internal/register.js';\nimport { GRID_TAG } from '../internal/tags.js';\nimport type {\n ColumnConfiguration,\n DataPipelineConfiguration,\n GridLiteSortingOptions,\n Keys,\n NavigateToOptions,\n} from '../internal/types.js';\nimport { asArray, isNumber, isString, resolveCondition } from '../internal/utils.js';\nimport { watch } from '../internal/watch.js';\nimport type { FilterExpression } from '../operations/filter/types.js';\nimport type { SortingExpression } from '../operations/sort/types.js';\nimport { styles as base } from '../styles/themes/grid.base.css.js';\nimport { all } from '../styles/themes/grid-themes.js';\nimport { styles as shared } from '../styles/themes/shared/grid.common.css.js';\nimport IgcGridLiteCell from './cell.js';\nimport { IgcGridLiteColumn } from './column.js';\nimport IgcFilterRow from './filter-row.js';\nimport IgcGridLiteHeaderRow from './header-row.js';\nimport IgcGridLiteRow from './row.js';\nimport IgcVirtualizer from './virtualizer.js';\n\n/**\n * Event object for the filtering event of the grid.\n */\nexport interface IgcFilteringEvent<T extends object = any> {\n /**\n * The target column for the filter operation.\n */\n key: Keys<T>;\n\n /**\n * The filter expression(s) to apply.\n */\n expressions: FilterExpression<T>[];\n\n /**\n * The type of modification which will be applied to the filter\n * state of the column.\n *\n * @remarks\n * `add` - a new filter expression will be added to the state of the column.\n * `modify` - an existing filter expression will be modified.\n * `remove` - the expression(s) will be removed from the state of the column.\n */\n type: 'add' | 'modify' | 'remove';\n}\n\n/**\n * Event object for the filtered event of the grid.\n */\nexport interface IgcFilteredEvent<T extends object = any> {\n /**\n * The target column for the filter operation.\n */\n key: Keys<T>;\n\n /**\n * The filter state of the column after the operation.\n */\n state: FilterExpression<T>[];\n}\n\n/**\n * Events for the igc-grid-lite.\n */\nexport interface IgcGridLiteEventMap<T extends object = any> {\n /**\n * Emitted when sorting is initiated through the UI.\n * Returns the sort expression which will be used for the operation.\n *\n * @remarks\n * The event is cancellable which prevents the operation from being applied.\n * The expression can be modified prior to the operation running.\n *\n * @event\n */\n sorting: CustomEvent<SortingExpression<T, any>>;\n /**\n * Emitted when a sort operation initiated through the UI has completed.\n * Returns the sort expression used for the operation.\n *\n * @event\n */\n sorted: CustomEvent<SortingExpression<T, any>>;\n /**\n * Emitted when filtering is initiated through the UI.\n *\n * @remarks\n * The event is cancellable which prevents the operation from being applied.\n * The expression can be modified prior to the operation running.\n *\n * @event\n */\n filtering: CustomEvent<IgcFilteringEvent<T>>;\n /**\n * Emitted when a filter operation initiated through the UI has completed.\n * Returns the filter state for the affected column.\n *\n * @event\n */\n filtered: CustomEvent<IgcFilteredEvent<T>>;\n}\n\n/**\n * IgcGridLite is a web component for displaying data in a tabular format quick and easy.\n *\n * Out of the box it provides row virtualization, sort and filter operations (client and server side),\n * the ability to template cells and headers and column hiding.\n *\n * @element igc-grid-lite\n *\n * @fires sorting - Emitted when sorting is initiated through the UI.\n * @fires sorted - Emitted when a sort operation initiated through the UI has completed.\n * @fires filtering - Emitted when filtering is initiated through the UI.\n * @fires filtered - Emitted when a filter operation initiated through the UI has completed.\n *\n */\nexport class IgcGridLite<T extends object = any> extends EventEmitterBase<IgcGridLiteEventMap<T>> {\n public static get tagName() {\n return GRID_TAG;\n }\n\n public static override styles = [base, shared];\n\n public static register(): void {\n registerComponent(\n IgcGridLite,\n IgcGridLiteColumn,\n IgcVirtualizer,\n IgcGridLiteRow,\n IgcGridLiteHeaderRow\n );\n }\n\n private readonly _a11y = addA11y(this, 'grid');\n\n protected readonly _domController = createDomController<T>(this);\n protected readonly _stateController = createStateController(\n this,\n this._domController,\n this._updateObservers\n );\n protected readonly _dataController = createDataOperationsController(this);\n\n protected readonly _stateProvider = new ContextProvider(this, {\n context: GRID_STATE_CONTEXT,\n initialValue: this._stateController,\n });\n\n protected readonly _columnUpdateProvider = new ContextProvider(this, {\n context: COLUMN_UPDATE_CONTEXT,\n initialValue: ((config: ColumnConfiguration<T>) => {\n this._updateConfiguration(config);\n }) as any,\n });\n\n private _updateObservers(): void {\n this._stateProvider.updateObservers();\n }\n\n private _updateConfiguration(config: ColumnConfiguration<T>): void {\n this._stateController.updateColumnsConfiguration(asArray(config));\n }\n\n @state()\n protected _dataState: T[] = [];\n\n /** Monotonic token identifying the most recently started pipeline run. */\n private _pipelineEpoch = 0;\n\n private _pipelineTask: Promise<void> = Promise.resolve();\n\n /**\n * Resolves when the latest pipeline run completes and its result is rendered.\n * The sort and filter controllers await this so that `sorted` and `filtered`\n * report an up-to-date {@link IgcGridLite.dataView}.\n *\n * @internal\n */\n public get _pipelineComplete(): Promise<void> {\n // The `updateComplete` hop lets a pending PIPELINE update install its task first.\n return this.updateComplete.then(() => this._pipelineTask);\n }\n\n @property({ type: Boolean, reflect: true, attribute: 'adopt-root-styles' })\n public adoptRootStyles = false;\n\n /** The data source for the grid. */\n @property({ attribute: false })\n public data: T[] = [];\n\n /**\n * Whether the grid will try to \"resolve\" its column configuration based on the passed\n * data source.\n *\n * @remarks\n * This is usually executed on initial rendering in the DOM. It depends on having an existing data source\n * to infer the column configuration for the grid.\n * Passing an empty data source or having a late bound data source (such as a HTTP request) will usually\n * result in empty column configuration for the grid.\n *\n * This property is ignored if any existing column configuration already exists in the grid.\n *\n * In a scenario where you want to bind a new data source and still keep the auto-generation behavior,\n * make sure to reset the column collection of the grid before passing in the new data source.\n *\n * @example\n * ```typescript\n * // assuming autoGenerate is set to true\n * grid.columns = [];\n * grid.data = [...];\n * ```\n *\n * @attr auto-generate\n */\n @property({ type: Boolean, attribute: 'auto-generate' })\n public autoGenerate = false;\n\n /** Sort configuration property for the grid. */\n @property({ attribute: false })\n public sortingOptions: GridLiteSortingOptions = {\n mode: 'multiple',\n };\n\n /**\n * Configuration object which controls remote data operations for the grid.\n */\n @property({ attribute: false })\n public dataPipelineConfiguration!: DataPipelineConfiguration<T>;\n\n /**\n * Set the sort state for the grid.\n */\n public set sortingExpressions(expressions: SortingExpression<T>[]) {\n this._stateController.sorting.reset();\n if (this.hasUpdated) {\n this.sort(expressions);\n } else {\n for (const expr of expressions) {\n this._stateController.sorting.state.set(expr.key, { ...expr });\n }\n }\n }\n\n /**\n * Get the sort state for the grid.\n */\n @property({ attribute: false })\n public get sortingExpressions(): SortingExpression<T>[] {\n return Array.from(this._stateController.sorting.state.values(), (expr) => ({ ...expr }));\n }\n\n /**\n * Set the filter state for the grid.\n */\n public set filterExpressions(expressions: FilterExpression<T>[]) {\n this._stateController.filtering.reset();\n if (this.hasUpdated) {\n this.filter(expressions);\n } else {\n this._stateController.filtering.setRaw(expressions);\n }\n }\n\n /**\n * Get the filter state for the grid.\n */\n @property({ attribute: false })\n public get filterExpressions(): FilterExpression<T>[] {\n return this._stateController.filtering.state.values.flatMap((each) =>\n each.all.map((expr) => ({ ...expr }))\n );\n }\n\n /**\n * Sets the column configuration for the grid.\n *\n * @remarks\n * Passing an empty collection resets the columns, which - with `autoGenerate` -\n * lets the next data source binding re-generate them.\n */\n public set columns(configuration: ColumnConfiguration<T>[]) {\n this._stateController.setColumnConfiguration(asArray(configuration));\n }\n\n /**\n * Returns the column configuration of the grid.\n */\n public get columns(): ColumnConfiguration<T>[] {\n return this._stateController.columns.map((col) => ({ ...col }));\n }\n\n /**\n * Returns the collection of rendered row elements in the grid.\n *\n * @remarks\n * Since the grid has virtualization, this property returns only the currently rendered\n * chunk of elements in the DOM.\n */\n public get rows() {\n return this._domController.rows;\n }\n\n /**\n * Returns the state of the data source after sort/filter operations\n * have been applied.\n */\n public get dataView(): ReadonlyArray<T> {\n return this._dataState;\n }\n\n /**\n * The total number of items in the {@link IgcGridLite.dataView} collection.\n */\n public get totalItems(): number {\n return this._dataState.length;\n }\n\n @watch('sortingOptions', { waitUntilFirstUpdate: true })\n protected sortingOptionsChanged() {\n // Headers render the multi-sort position out of this option.\n this._updateObservers();\n }\n\n @watch('data')\n protected dataChanged() {\n this._dataState = [...this.data];\n\n if (this.hasUpdated) {\n if (!this._hasAssignedColumns()) {\n this._stateController.setAutoColumnConfiguration();\n }\n this.pipeline();\n }\n }\n\n /**\n * NOTE: The `PIPELINE` sentinel equals this method's name. That equality makes\n * the `@watch` comparison (`undefined !== <method>`) fire on each requested\n * update. A rename of this method silently disables the pipeline.\n */\n @watch(PIPELINE)\n protected pipeline(): void {\n this._pipelineTask = this._runPipeline();\n }\n\n /** Runs the data operations. Discards a result that a newer run supersedes. */\n private async _runPipeline(): Promise<void> {\n const epoch = ++this._pipelineEpoch;\n\n try {\n const state = await this._dataController.apply([...this.data], this._stateController);\n\n if (epoch !== this._pipelineEpoch) {\n return;\n }\n\n this._dataState = state;\n } catch (e) {\n // A failed hook must not blank the grid. Keep the previous data state and\n // report the error.\n // biome-ignore lint/suspicious/noConsole: the pipeline hooks are user code; swallowing their errors hides bugs\n console.error(e);\n }\n\n await this.updateComplete;\n }\n\n constructor() {\n super();\n\n addThemingController(this, all);\n }\n\n /** The column set the current row renderer was built from. */\n private _rowColumns?: ColumnConfiguration<T>[];\n\n protected override willUpdate(props: PropertyValues<this>): void {\n const { columns } = this._stateController;\n\n this._domController.setColumns(columns);\n\n // The ARIA grid pattern counts the header rows in the row count. Only visible\n // columns take part in the column index space.\n this._a11y.set({\n ariaRowCount: `${headerRowsFor(columns) + this._dataState.length}`,\n ariaColCount: `${columns.filter((column) => !column.hidden).length}`,\n });\n\n // The virtualizer re-renders its rows only when `renderItem` changes identity.\n // Build a new renderer only when a row input changes.\n if (columns !== this._rowColumns || props.has('adoptRootStyles')) {\n this._rowColumns = columns;\n this._renderRow = this._createRowRenderer(columns);\n }\n }\n\n protected override createRenderRoot(): HTMLElement | DocumentFragment {\n const root = super.createRenderRoot();\n root.addEventListener('slotchange', this._handleSlotChange.bind(this));\n return root;\n }\n\n protected override firstUpdated(): void {\n this.updateComplete.then(() => {\n if (this.autoGenerate && !this._hasAssignedColumns()) {\n this._stateController.setAutoColumnConfiguration();\n }\n });\n }\n\n /** The column elements assigned to the slot, either direct or nested in a container. */\n private _assignedColumns(): Element[] {\n const slot = this.renderRoot.querySelector('slot') as HTMLSlotElement;\n const tag = IgcGridLiteColumn.tagName;\n\n return slot\n .assignedElements({ flatten: true })\n .flatMap((el) => (el.matches(tag) ? el : Array.from(el.querySelectorAll(tag))));\n }\n\n private _hasAssignedColumns(): boolean {\n return this._assignedColumns().length > 0;\n }\n\n private _handleSlotChange(): void {\n this._stateController.setColumnConfiguration(\n this._assignedColumns() as unknown as ColumnConfiguration<T>[]\n );\n }\n\n /**\n * Performs a filter operation in the grid based on the passed expression(s).\n */\n public filter(config: FilterExpression<T> | FilterExpression<T>[]): void {\n // Store copies. The caller's expression objects must not change.\n const expressions = asArray(config)\n .filter((expr) => this.getColumn(expr.key) !== undefined)\n .map((expr) => ({ ...expr }));\n\n for (const expr of expressions) {\n if (isString(expr.condition)) {\n expr.condition = resolveCondition(this.getColumn(expr.key)!, expr.condition);\n }\n }\n\n this._stateController.filtering.filter(expressions);\n }\n\n /**\n * Performs a sort operation in the grid based on the passed expression(s).\n */\n public sort(expressions: SortingExpression<T> | SortingExpression<T>[]) {\n this._stateController.sorting.sort(expressions);\n }\n\n /**\n * Resets the current sort state of the control.\n */\n public clearSort(key?: Keys<T>): void {\n this._stateController.sorting.reset(key);\n this.requestUpdate(PIPELINE);\n }\n\n /**\n * Resets the current filter state of the control.\n */\n public clearFilter(key?: Keys<T>): void {\n this._stateController.filtering.reset(key);\n this.requestUpdate(PIPELINE);\n }\n\n /**\n * Navigates to a position in the grid based on provided row index and column field.\n * @param row The row index to navigate to\n * @param options The column field to navigate to and whether to activate the cell\n */\n public async navigateTo(row: number, options?: NavigateToOptions<T>): Promise<void>;\n /**\n * Navigates to a position in the grid based on provided row index and column field.\n * @param row The row index to navigate to\n * @param column The column field to navigate to, if any\n * @param activate Optionally also activate the navigated cell\n * @deprecated Use `navigateTo(row, options)` instead.\n */\n public async navigateTo(row: number, column?: Keys<T>, activate?: boolean): Promise<void>;\n public async navigateTo(\n row: number,\n columnOrOptions?: Keys<T> | NavigateToOptions<T>,\n activate?: boolean\n ): Promise<void> {\n // Normalize the deprecated positional form into options.\n const options =\n typeof columnOrOptions === 'object' ? columnOrOptions : { column: columnOrOptions, activate };\n\n await this._stateController.navigation.navigateTo(row, options);\n }\n\n /**\n * Returns a {@link ColumnConfiguration} for a given column.\n */\n public getColumn(id: Keys<T> | number): ColumnConfiguration<T> | undefined {\n const columns = this._stateController.columns;\n return isNumber(id) ? columns[id] : columns.find((column) => column.field === id);\n }\n\n @eventOptions({ capture: true })\n protected _bodyClickHandler(event: PointerEvent): void {\n const target = getElementFromEventPath<IgcGridLiteCell<T>>(IgcGridLiteCell.tagName, event);\n\n if (target) {\n this._stateController.active = { column: target.column.field, row: target.row.index };\n\n // Move focus so that assistive technology announces the cell. Keep focus\n // where it is when the click landed on focusable templated content.\n if (!target.matches(FOCUS_WITHIN)) {\n target.focus({ preventScroll: true });\n }\n }\n }\n\n protected _bodyKeydownHandler(event: KeyboardEvent): void {\n const [origin] = event.composedPath();\n\n // Keys from the grid focus targets (the scroller and the focused cell) drive\n // navigation. Keys from templated content in a cell pass through.\n if (origin === this._domController.virtualizer || origin instanceof IgcGridLiteCell) {\n this._stateController.navigation.navigate(event);\n }\n }\n\n /** Rebuilt by {@link IgcGridLite.willUpdate} when a row input changes. */\n protected _renderRow: RenderItemFunction<T> = () => html``;\n\n private _createRowRenderer(columns: ColumnConfiguration<T>[]): RenderItemFunction<T> {\n // The active node is read live. Activation updates only the affected rows (see\n // NavigationController) and must not rebuild the renderer: a new renderer\n // identity makes the virtualizer re-render every visible row.\n return (item: T, index: number) => html`\n <igc-grid-lite-row\n part=\"row\"\n exportparts=\"cell\"\n style=${styleMap(this._domController.columnSizes)}\n .adoptRootStyles=${this.adoptRootStyles}\n .index=${index}\n .activeNode=${this._stateController.active}\n .data=${item}\n .columns=${columns}\n ></igc-grid-lite-row>\n `;\n }\n\n protected _renderHeaderRow() {\n return html`\n <igc-grid-lite-header-row\n tabindex=\"0\"\n style=${styleMap(this._domController.columnSizes)}\n .adoptRootStyles=${this.adoptRootStyles}\n .columns=${this._stateController.columns}\n ></igc-grid-lite-header-row>\n `;\n }\n\n protected _renderBody() {\n return html`\n <igc-grid-lite-virtualizer\n tabindex=\"0\"\n .items=${this._dataState}\n .renderItem=${this._renderRow}\n @click=${this._bodyClickHandler}\n @keydown=${this._bodyKeydownHandler}\n ></igc-grid-lite-virtualizer>\n `;\n }\n\n protected _renderFilterRow() {\n const filterable = this._stateController.columns.some((column) => column.filterable);\n\n // The filter row and its editors are registered on first use. A grid without\n // filterable columns does not load their custom element definitions.\n if (filterable) {\n IgcFilterRow.register();\n }\n\n return html`${cache(\n filterable\n ? html`<igc-grid-lite-filter-row\n style=${styleMap(this._domController.columnSizes)}\n ></igc-grid-lite-filter-row>`\n : nothing\n )}`;\n }\n\n protected override render() {\n return html`\n <slot part=\"column-sink\"></slot>\n ${this._stateController.resizing.renderIndicator()} ${this._renderHeaderRow()}\n ${this._renderFilterRow()} ${this._renderBody()}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [IgcGridLite.tagName]: IgcGridLite;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"grid.js","sourceRoot":"","sources":["../../src/components/grid.ts"],"names":[],"mappings":"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","sourcesContent":["import { ContextProvider } from '@lit/context';\nimport {\n θaddThemingController as addThemingController,\n IgcVirtualScrollComponent,\n type VirtualScrollItemTemplate,\n} from 'igniteui-webcomponents';\nimport { html, nothing, type PropertyValues } from 'lit';\nimport { eventOptions, property, state } from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { createDataOperationsController } from '../controllers/data-operation.js';\nimport { createDomController } from '../controllers/dom.js';\nimport { activeNodeFor } from '../controllers/navigation.js';\nimport { createStateController } from '../controllers/state.js';\nimport { addA11y, headerRowsFor } from '../internal/a11y.js';\nimport { FOCUS_WITHIN, NO_SCROLL, PIPELINE } from '../internal/constants.js';\nimport { COLUMN_UPDATE_CONTEXT, GRID_STATE_CONTEXT } from '../internal/context.js';\nimport { getElementFromEventPath } from '../internal/element-from-event-path.js';\nimport { EventEmitterBase } from '../internal/mixins/event-emitter.js';\nimport { registerComponent } from '../internal/register.js';\nimport { GRID_TAG } from '../internal/tags.js';\nimport type {\n ColumnConfiguration,\n DataPipelineConfiguration,\n GridLiteSortingOptions,\n Keys,\n NavigateToOptions,\n} from '../internal/types.js';\nimport {\n asArray,\n isNumber,\n isString,\n resolveCondition,\n visibleColumns,\n} from '../internal/utils.js';\nimport { watch } from '../internal/watch.js';\nimport type { FilterExpression } from '../operations/filter/types.js';\nimport type { SortingExpression } from '../operations/sort/types.js';\nimport { styles as base } from '../styles/themes/grid.base.css.js';\nimport { all } from '../styles/themes/grid-themes.js';\nimport { styles as shared } from '../styles/themes/shared/grid.common.css.js';\nimport IgcGridLiteCell from './cell.js';\nimport { IgcGridLiteColumn } from './column.js';\nimport IgcFilterRow from './filter-row.js';\nimport IgcGridLiteHeaderRow from './header-row.js';\nimport IgcGridLiteRow from './row.js';\n\n/**\n * Event object for the filtering event of the grid.\n */\nexport interface IgcFilteringEvent<T extends object = any> {\n /**\n * The target column for the filter operation.\n */\n key: Keys<T>;\n\n /**\n * The filter expression(s) to apply.\n */\n expressions: FilterExpression<T>[];\n\n /**\n * The type of modification which will be applied to the filter\n * state of the column.\n *\n * @remarks\n * `add` - a new filter expression will be added to the state of the column.\n * `modify` - an existing filter expression will be modified.\n * `remove` - the expression(s) will be removed from the state of the column.\n */\n type: 'add' | 'modify' | 'remove';\n}\n\n/**\n * Event object for the filtered event of the grid.\n */\nexport interface IgcFilteredEvent<T extends object = any> {\n /**\n * The target column for the filter operation.\n */\n key: Keys<T>;\n\n /**\n * The filter state of the column after the operation.\n */\n state: FilterExpression<T>[];\n}\n\n/**\n * Events for the igc-grid-lite.\n */\nexport interface IgcGridLiteEventMap<T extends object = any> {\n /**\n * Emitted when sorting is initiated through the UI.\n * Returns the sort expression which will be used for the operation.\n *\n * @remarks\n * The event is cancellable which prevents the operation from being applied.\n * The expression can be modified prior to the operation running.\n *\n * @event\n */\n sorting: CustomEvent<SortingExpression<T, any>>;\n /**\n * Emitted when a sort operation initiated through the UI has completed.\n * Returns the sort expression used for the operation.\n *\n * @event\n */\n sorted: CustomEvent<SortingExpression<T, any>>;\n /**\n * Emitted when filtering is initiated through the UI.\n *\n * @remarks\n * The event is cancellable which prevents the operation from being applied.\n * The expression can be modified prior to the operation running.\n *\n * @event\n */\n filtering: CustomEvent<IgcFilteringEvent<T>>;\n /**\n * Emitted when a filter operation initiated through the UI has completed.\n * Returns the filter state for the affected column.\n *\n * @event\n */\n filtered: CustomEvent<IgcFilteredEvent<T>>;\n}\n\n/**\n * IgcGridLite is a web component for displaying data in a tabular format quick and easy.\n *\n * Out of the box it provides row virtualization, sort and filter operations (client and server side),\n * the ability to template cells and headers and column hiding.\n *\n * @element igc-grid-lite\n *\n * @fires sorting - Emitted when sorting is initiated through the UI.\n * @fires sorted - Emitted when a sort operation initiated through the UI has completed.\n * @fires filtering - Emitted when filtering is initiated through the UI.\n * @fires filtered - Emitted when a filter operation initiated through the UI has completed.\n *\n */\nexport class IgcGridLite<T extends object = any> extends EventEmitterBase<IgcGridLiteEventMap<T>> {\n public static get tagName() {\n return GRID_TAG;\n }\n\n public static override styles = [base, shared];\n\n public static register(): void {\n registerComponent(\n IgcGridLite,\n IgcGridLiteColumn,\n IgcVirtualScrollComponent,\n IgcGridLiteRow,\n IgcGridLiteHeaderRow\n );\n }\n\n private readonly _a11y = addA11y(this, 'grid');\n\n protected readonly _domController = createDomController<T>(this);\n protected readonly _stateController = createStateController(this, this._domController, () =>\n this._stateProvider.updateObservers()\n );\n protected readonly _dataController = createDataOperationsController(this);\n\n protected readonly _stateProvider = new ContextProvider(this, {\n context: GRID_STATE_CONTEXT,\n initialValue: this._stateController,\n });\n\n protected readonly _columnUpdateProvider = new ContextProvider(this, {\n context: COLUMN_UPDATE_CONTEXT,\n initialValue: ((config: ColumnConfiguration<T>) => {\n this._stateController.updateColumnsConfiguration(asArray(config));\n }) as any,\n });\n\n @state()\n protected _dataState: T[] = [];\n\n /** Id of the latest pipeline run. */\n private _pipelineEpoch = 0;\n\n private _pipelineTask: Promise<void> = Promise.resolve();\n\n /**\n * Resolves once the latest pipeline run renders. `sorted` and `filtered` await it.\n *\n * @internal\n */\n public get _pipelineComplete(): Promise<void> {\n // Let a pending PIPELINE update install its task first.\n return this.updateComplete.then(() => this._pipelineTask);\n }\n\n @property({ type: Boolean, reflect: true, attribute: 'adopt-root-styles' })\n public adoptRootStyles = false;\n\n /** The data source for the grid. */\n @property({ attribute: false })\n public data: T[] = [];\n\n /**\n * Whether the grid will try to \"resolve\" its column configuration based on the passed\n * data source.\n *\n * @remarks\n * This is usually executed on initial rendering in the DOM. It depends on having an existing data source\n * to infer the column configuration for the grid.\n * Passing an empty data source or having a late bound data source (such as a HTTP request) will usually\n * result in empty column configuration for the grid.\n *\n * This property is ignored if any existing column configuration already exists in the grid.\n *\n * In a scenario where you want to bind a new data source and still keep the auto-generation behavior,\n * make sure to reset the column collection of the grid before passing in the new data source.\n *\n * @example\n * ```typescript\n * // assuming autoGenerate is set to true\n * grid.columns = [];\n * grid.data = [...];\n * ```\n *\n * @attr auto-generate\n */\n @property({ type: Boolean, attribute: 'auto-generate' })\n public autoGenerate = false;\n\n /** Sort configuration property for the grid. */\n @property({ attribute: false })\n public sortingOptions: GridLiteSortingOptions = {\n mode: 'multiple',\n };\n\n /**\n * Configuration object which controls remote data operations for the grid.\n */\n @property({ attribute: false })\n public dataPipelineConfiguration!: DataPipelineConfiguration<T>;\n\n /**\n * Set the sort state for the grid.\n */\n public set sortingExpressions(expressions: SortingExpression<T>[]) {\n this._stateController.sorting.reset();\n if (this.hasUpdated) {\n this.sort(expressions);\n } else {\n for (const expr of expressions) {\n this._stateController.sorting.state.set(expr.key, { ...expr });\n }\n }\n }\n\n /**\n * Get the sort state for the grid.\n */\n @property({ attribute: false })\n public get sortingExpressions(): SortingExpression<T>[] {\n return Array.from(this._stateController.sorting.state.values(), (expr) => ({ ...expr }));\n }\n\n /**\n * Set the filter state for the grid.\n */\n public set filterExpressions(expressions: FilterExpression<T>[]) {\n this._stateController.filtering.reset();\n if (this.hasUpdated) {\n this.filter(expressions);\n } else {\n this._stateController.filtering.setRaw(expressions);\n }\n }\n\n /**\n * Get the filter state for the grid.\n */\n @property({ attribute: false })\n public get filterExpressions(): FilterExpression<T>[] {\n return this._stateController.filtering.state.values.flatMap((each) =>\n each.all.map((expr) => ({ ...expr }))\n );\n }\n\n /**\n * Sets the column configuration for the grid.\n *\n * @remarks\n * Passing an empty collection resets the columns, which - with `autoGenerate` -\n * lets the next data source binding re-generate them.\n */\n public set columns(configuration: ColumnConfiguration<T>[]) {\n this._stateController.setColumnConfiguration(asArray(configuration));\n }\n\n /**\n * Returns the column configuration of the grid.\n */\n public get columns(): ColumnConfiguration<T>[] {\n return this._stateController.columns.map((col) => ({ ...col }));\n }\n\n /**\n * Returns the collection of rendered row elements in the grid.\n *\n * @remarks\n * Since the grid has virtualization, this property returns only the currently rendered\n * chunk of elements in the DOM.\n */\n public get rows() {\n return this._domController.rows;\n }\n\n /**\n * Returns the state of the data source after sort/filter operations\n * have been applied.\n */\n public get dataView(): ReadonlyArray<T> {\n return this._dataState;\n }\n\n /**\n * The total number of items in the {@link IgcGridLite.dataView} collection.\n */\n public get totalItems(): number {\n return this._dataState.length;\n }\n\n @watch('sortingOptions', { waitUntilFirstUpdate: true })\n protected sortingOptionsChanged() {\n // Headers render the multi-sort position out of this option.\n this._stateController.updateObservers();\n }\n\n @watch('data')\n protected dataChanged() {\n this._dataState = [...this.data];\n\n if (!this.hasUpdated) {\n return;\n }\n\n if (!this._hasAssignedColumns()) {\n this._stateController.setAutoColumnConfiguration();\n }\n\n this.pipeline();\n }\n\n /**\n * NOTE: `PIPELINE` equals this method's name, so `@watch` fires on each request.\n * Renaming the method silently disables the pipeline.\n */\n @watch(PIPELINE)\n protected pipeline(): void {\n this._pipelineTask = this._runPipeline();\n }\n\n /** Runs the data operations. Discards results superseded by a newer run. */\n private async _runPipeline(): Promise<void> {\n const epoch = ++this._pipelineEpoch;\n\n try {\n const state = await this._dataController.apply([...this.data], this._stateController);\n\n if (epoch !== this._pipelineEpoch) {\n return;\n }\n\n this._dataState = state;\n } catch (e) {\n // A failed hook keeps the previous data. Log it.\n // biome-ignore lint/suspicious/noConsole: the pipeline hooks are user code; swallowing their errors hides bugs\n console.error(e);\n }\n\n await this.updateComplete;\n }\n\n constructor() {\n super();\n\n addThemingController(this, all);\n }\n\n /** Columns the row renderer was built from. */\n private _rowColumns?: ColumnConfiguration<T>[];\n\n protected override willUpdate(props: PropertyValues<this>): void {\n const { columns } = this._stateController;\n\n this._domController.setColumns(columns);\n\n // Row count includes the header rows. Only visible columns are indexed.\n this._a11y.set({\n ariaRowCount: `${headerRowsFor(columns) + this._dataState.length}`,\n ariaColCount: `${visibleColumns(columns).length}`,\n });\n\n // A new `itemTemplate` re-renders every visible row: rebuild only on row input change.\n if (columns !== this._rowColumns || props.has('adoptRootStyles')) {\n this._rowColumns = columns;\n this._renderRow = this._createRowRenderer(columns);\n }\n }\n\n protected override createRenderRoot(): HTMLElement | DocumentFragment {\n const root = super.createRenderRoot();\n root.addEventListener('slotchange', this._handleSlotChange.bind(this));\n return root;\n }\n\n protected override firstUpdated(): void {\n this.updateComplete.then(() => {\n if (this.autoGenerate && !this._hasAssignedColumns()) {\n this._stateController.setAutoColumnConfiguration();\n }\n });\n }\n\n /** The column elements assigned to the slot, either direct or nested in a container. */\n private _assignedColumns(): Element[] {\n const slot = this.renderRoot.querySelector('slot') as HTMLSlotElement;\n const tag = IgcGridLiteColumn.tagName;\n\n return slot\n .assignedElements({ flatten: true })\n .flatMap((el) => (el.matches(tag) ? el : Array.from(el.querySelectorAll(tag))));\n }\n\n private _hasAssignedColumns(): boolean {\n return this._assignedColumns().length > 0;\n }\n\n private _handleSlotChange(): void {\n this._stateController.setColumnConfiguration(\n this._assignedColumns() as unknown as ColumnConfiguration<T>[]\n );\n }\n\n /**\n * Performs a filter operation in the grid based on the passed expression(s).\n */\n public filter(config: FilterExpression<T> | FilterExpression<T>[]): void {\n // Store copies. The caller's expression objects must not change.\n const expressions = asArray(config)\n .filter((expr) => this.getColumn(expr.key) !== undefined)\n .map((expr) => ({ ...expr }));\n\n for (const expr of expressions) {\n if (isString(expr.condition)) {\n expr.condition = resolveCondition(this.getColumn(expr.key)!, expr.condition);\n }\n }\n\n this._stateController.filtering.filter(expressions);\n }\n\n /**\n * Performs a sort operation in the grid based on the passed expression(s).\n */\n public sort(expressions: SortingExpression<T> | SortingExpression<T>[]) {\n this._stateController.sorting.sort(expressions);\n }\n\n /**\n * Resets the current sort state of the control.\n */\n public clearSort(key?: Keys<T>): void {\n this._stateController.sorting.reset(key);\n this.requestUpdate(PIPELINE);\n }\n\n /**\n * Resets the current filter state of the control.\n */\n public clearFilter(key?: Keys<T>): void {\n this._stateController.filtering.reset(key);\n this.requestUpdate(PIPELINE);\n }\n\n /**\n * Navigates to a position in the grid based on provided row index and column field.\n * @param row The row index to navigate to\n * @param options The column field to navigate to and whether to activate the cell\n */\n public async navigateTo(row: number, options?: NavigateToOptions<T>): Promise<void>;\n /**\n * Navigates to a position in the grid based on provided row index and column field.\n * @param row The row index to navigate to\n * @param column The column field to navigate to, if any\n * @param activate Optionally also activate the navigated cell\n * @deprecated Use `navigateTo(row, options)` instead.\n */\n public async navigateTo(row: number, column?: Keys<T>, activate?: boolean): Promise<void>;\n public async navigateTo(\n row: number,\n columnOrOptions?: Keys<T> | NavigateToOptions<T>,\n activate?: boolean\n ): Promise<void> {\n // Normalize the deprecated positional form into options.\n const options =\n typeof columnOrOptions === 'object' ? columnOrOptions : { column: columnOrOptions, activate };\n\n await this._stateController.navigation.navigateTo(row, options);\n }\n\n /**\n * Returns a {@link ColumnConfiguration} for a given column.\n */\n public getColumn(id: Keys<T> | number): ColumnConfiguration<T> | undefined {\n const columns = this._stateController.columns;\n return isNumber(id) ? columns[id] : columns.find((column) => column.field === id);\n }\n\n @eventOptions({ capture: true })\n protected _bodyClickHandler(event: PointerEvent): void {\n const target = getElementFromEventPath<IgcGridLiteCell<T>>(IgcGridLiteCell.tagName, event);\n\n if (!target) {\n return;\n }\n\n this._stateController.active = { column: target.column.field, row: target.row.index };\n\n // Focus announces the cell. Focusable templated content keeps the focus.\n if (!target.matches(FOCUS_WITHIN)) {\n target.focus(NO_SCROLL);\n }\n }\n\n protected _bodyKeydownHandler(event: KeyboardEvent): void {\n const [origin] = event.composedPath();\n\n // Only keys from the body or a cell navigate. Templated content keeps its keys.\n if (origin === event.currentTarget || origin instanceof IgcGridLiteCell) {\n this._stateController.navigation.navigate(event);\n }\n }\n\n /** Rebuilt in {@link IgcGridLite.willUpdate}. */\n protected _renderRow!: VirtualScrollItemTemplate<T>;\n\n private _createRowRenderer(columns: ColumnConfiguration<T>[]): VirtualScrollItemTemplate<T> {\n // Reads the active node live: activation must not rebuild the renderer.\n return ({ value, index }) => html`\n <igc-grid-lite-row\n part=\"row\"\n exportparts=\"cell\"\n style=${styleMap(this._domController.columnSizes)}\n .adoptRootStyles=${this.adoptRootStyles}\n .index=${index}\n .activeNode=${activeNodeFor(this._stateController.active, index)}\n .data=${value}\n .columns=${columns}\n ></igc-grid-lite-row>\n `;\n }\n\n protected _renderHeaderRow() {\n return html`\n <igc-grid-lite-header-row\n tabindex=\"0\"\n style=${styleMap(this._domController.columnSizes)}\n .adoptRootStyles=${this.adoptRootStyles}\n .columns=${this._stateController.columns}\n ></igc-grid-lite-header-row>\n `;\n }\n\n protected _renderBody() {\n // The body is the tab stop. Focus roves to the active cell:\n // `aria-activedescendant` cannot cross the row shadow roots.\n return html`\n <igc-virtual-scroll\n role=\"rowgroup\"\n .overScan=${10}\n tabindex=\"0\"\n .data=${this._dataState}\n .itemTemplate=${this._renderRow}\n @click=${this._bodyClickHandler}\n @keydown=${this._bodyKeydownHandler}\n ></igc-virtual-scroll>\n `;\n }\n\n protected _renderFilterRow() {\n const filterable = this._stateController.columns.some((column) => column.filterable);\n\n // Registered on first use: see IgcFilterRow.\n if (filterable) {\n IgcFilterRow.register();\n }\n\n return cache(\n filterable\n ? html`<igc-grid-lite-filter-row\n style=${styleMap(this._domController.columnSizes)}\n ></igc-grid-lite-filter-row>`\n : nothing\n );\n }\n\n protected override render() {\n return html`\n <slot part=\"column-sink\"></slot>\n ${this._stateController.resizing.renderIndicator()} ${this._renderHeaderRow()}\n ${this._renderFilterRow()} ${this._renderBody()}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [IgcGridLite.tagName]: IgcGridLite;\n }\n}\n"]}
|
package/components/header-row.js
CHANGED
|
@@ -14,6 +14,7 @@ import { getElementFromEventPath } from '../internal/element-from-event-path.js'
|
|
|
14
14
|
import { partMap } from '../internal/part-map.js';
|
|
15
15
|
import { registerComponent } from '../internal/register.js';
|
|
16
16
|
import { GRID_HEADER_ROW_TAG } from '../internal/tags.js';
|
|
17
|
+
import { visibleColumns } from '../internal/utils.js';
|
|
17
18
|
import { styles } from '../styles/header-row/header-row.base.css.js';
|
|
18
19
|
import IgcGridLiteHeader from './header.js';
|
|
19
20
|
export default class IgcGridLiteHeaderRow extends LitElement {
|
|
@@ -40,7 +41,7 @@ export default class IgcGridLiteHeaderRow extends LitElement {
|
|
|
40
41
|
}
|
|
41
42
|
render() {
|
|
42
43
|
const filterRow = this._state?.filtering.filterRow;
|
|
43
|
-
const columns = this.columns
|
|
44
|
+
const columns = visibleColumns(this.columns);
|
|
44
45
|
return html `
|
|
45
46
|
${repeat(columns, (column) => column.field, (column, index) => html `
|
|
46
47
|
<igc-grid-lite-header
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header-row.js","sourceRoot":"","sources":["../../src/components/header-row.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAC;AACrE,OAAO,iBAAiB,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,oBAAuC,SAAQ,UAAU;IACrE,MAAM,KAAK,OAAO;QACvB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;aACsB,WAAM,GAAG,MAAM,AAAT,CAAU;IAEhC,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IAWD,IAAW,OAAO;QAChB,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAuB,iBAAiB,CAAC,OAAO,CAAC,CAClF,CAAC;IACJ,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QAZH,oBAAe,GAAG,KAAK,CAAC;QAGxB,YAAO,GAA6B,EAAE,CAAC;QAW5C,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9D,CAAC;IAEO,sBAAsB,CAAC,KAAmB;QAChD,MAAM,MAAM,GAAG,uBAAuB,CAAuB,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAEkB,MAAM;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;QACnD,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"header-row.js","sourceRoot":"","sources":["../../src/components/header-row.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAC;AACrE,OAAO,iBAAiB,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,oBAAuC,SAAQ,UAAU;IACrE,MAAM,KAAK,OAAO;QACvB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;aACsB,WAAM,GAAG,MAAM,AAAT,CAAU;IAEhC,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IAWD,IAAW,OAAO;QAChB,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAuB,iBAAiB,CAAC,OAAO,CAAC,CAClF,CAAC;IACJ,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QAZH,oBAAe,GAAG,KAAK,CAAC;QAGxB,YAAO,GAA6B,EAAE,CAAC;QAW5C,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9D,CAAC;IAEO,sBAAsB,CAAC,KAAmB;QAChD,MAAM,MAAM,GAAG,uBAAuB,CAAuB,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAEkB,MAAM;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;QACnD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE7C,OAAO,IAAI,CAAA;QACP,MAAM,CACN,OAAO,EACP,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EACxB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAA;;mBAEZ,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;+BACpD,IAAI,CAAC,eAAe;sBAC7B,MAAM;yBACH,KAAK,GAAG,CAAC;;SAEzB,CACF;KACF,CAAC;IACJ,CAAC;;AA5CgB;IADhB,OAAO,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;oDACb;AAGtC;IADN,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;6DACA;AAGxB;IADN,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;qDACe","sourcesContent":["import { consume } from '@lit/context';\nimport { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { StateController } from '../controllers/state.js';\nimport { addA11y, HEADER_ROW_INDEX } from '../internal/a11y.js';\nimport { GRID_STATE_CONTEXT } from '../internal/context.js';\nimport { getElementFromEventPath } from '../internal/element-from-event-path.js';\nimport { partMap } from '../internal/part-map.js';\nimport { registerComponent } from '../internal/register.js';\nimport { GRID_HEADER_ROW_TAG } from '../internal/tags.js';\nimport type { ColumnConfiguration } from '../internal/types.js';\nimport { visibleColumns } from '../internal/utils.js';\nimport { styles } from '../styles/header-row/header-row.base.css.js';\nimport IgcGridLiteHeader from './header.js';\n\nexport default class IgcGridLiteHeaderRow<T extends object> extends LitElement {\n public static get tagName() {\n return GRID_HEADER_ROW_TAG;\n }\n public static override styles = styles;\n\n public static register(): void {\n registerComponent(IgcGridLiteHeaderRow, IgcGridLiteHeader);\n }\n\n @consume({ context: GRID_STATE_CONTEXT, subscribe: true })\n private readonly _state?: StateController<T>;\n\n @property({ attribute: false })\n public adoptRootStyles = false;\n\n @property({ attribute: false })\n public columns: ColumnConfiguration<T>[] = [];\n\n public get headers(): IgcGridLiteHeader<T>[] {\n return Array.from(\n this.renderRoot.querySelectorAll<IgcGridLiteHeader<T>>(IgcGridLiteHeader.tagName)\n );\n }\n\n constructor() {\n super();\n\n addA11y(this, 'row').set({ ariaRowIndex: `${HEADER_ROW_INDEX}` });\n this.addEventListener('click', this._setActiveFilterColumn);\n }\n\n private _setActiveFilterColumn(event: PointerEvent): void {\n const header = getElementFromEventPath<IgcGridLiteHeader<T>>(IgcGridLiteHeader.tagName, event);\n this._state?.filtering.setActiveColumn(header?.column);\n }\n\n protected override render() {\n const filterRow = this._state?.filtering.filterRow;\n const columns = visibleColumns(this.columns);\n\n return html`\n ${repeat(\n columns,\n (column) => column.field,\n (column, index) => html`\n <igc-grid-lite-header\n part=${partMap({ filtered: column.field === filterRow?.column?.field })}\n .adoptRootStyles=${this.adoptRootStyles}\n .column=${column}\n ._colIndex=${index + 1}\n ></igc-grid-lite-header>\n `\n )}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [IgcGridLiteHeaderRow.tagName]: IgcGridLiteHeaderRow<object>;\n }\n}\n"]}
|
package/components/header.js
CHANGED
|
@@ -49,7 +49,6 @@ export default class IgcGridLiteHeader extends LitElement {
|
|
|
49
49
|
this.resizeController.resize(this.column, width, x);
|
|
50
50
|
};
|
|
51
51
|
this.#handlePointerLost = () => {
|
|
52
|
-
this.resizeController.indicatorActive = false;
|
|
53
52
|
this.removeEventListener('pointermove', this.#handleResize);
|
|
54
53
|
this.resizeController.stop();
|
|
55
54
|
};
|
|
@@ -80,9 +79,6 @@ export default class IgcGridLiteHeader extends LitElement {
|
|
|
80
79
|
}
|
|
81
80
|
#addResizeEventHandlers() {
|
|
82
81
|
const config = { once: true };
|
|
83
|
-
this.addEventListener('gotpointercapture', () => {
|
|
84
|
-
this.resizeController.indicatorActive = true;
|
|
85
|
-
}, config);
|
|
86
82
|
this.addEventListener('lostpointercapture', this.#handlePointerLost, config);
|
|
87
83
|
this.addEventListener('pointerup', (e) => this.releasePointerCapture(e.pointerId), config);
|
|
88
84
|
this.addEventListener('pointermove', this.#handleResize);
|
|
@@ -103,7 +99,7 @@ export default class IgcGridLiteHeader extends LitElement {
|
|
|
103
99
|
#handleAutosize;
|
|
104
100
|
renderSortPart() {
|
|
105
101
|
const state = this.state.sorting.state.get(this.column.field);
|
|
106
|
-
if (!
|
|
102
|
+
if (!state && !this.isSortable) {
|
|
107
103
|
return nothing;
|
|
108
104
|
}
|
|
109
105
|
const position = Array.from(this.state.sorting.state.keys()).indexOf(this.column.field);
|
|
@@ -126,7 +122,7 @@ export default class IgcGridLiteHeader extends LitElement {
|
|
|
126
122
|
const template = this.column.headerTemplate;
|
|
127
123
|
return html `
|
|
128
124
|
<span part="title">
|
|
129
|
-
<span>${template ? template(this.context) :
|
|
125
|
+
<span>${template ? template(this.context) : defaultContent}</span>
|
|
130
126
|
</span>
|
|
131
127
|
`;
|
|
132
128
|
}
|
package/components/header.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/components/header.ts"],"names":[],"mappings":"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","sourcesContent":["import { consume } from '@lit/context';\nimport {\n θaddAdoptedStylesController as addAdoptedStylesController,\n θaddThemingController as addThemingController,\n IgcIconComponent,\n} from 'igniteui-webcomponents';\nimport { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport type { StateController } from '../controllers/state.js';\nimport { addA11y } from '../internal/a11y.js';\nimport {\n MIN_COL_RESIZE_WIDTH,\n SORT_ICON_ASCENDING,\n SORT_ICON_DESCENDING,\n} from '../internal/constants.js';\nimport { GRID_STATE_CONTEXT } from '../internal/context.js';\nimport { partMap } from '../internal/part-map.js';\nimport { registerComponent } from '../internal/register.js';\nimport { GRID_HEADER_TAG } from '../internal/tags.js';\nimport type { ColumnConfiguration, IgcHeaderContext } from '../internal/types.js';\nimport { styles } from '../styles/header-cell/header-cell.css.js';\nimport { all } from '../styles/themes/grid-header-themes.js';\n\nexport default class IgcGridLiteHeader<T extends object> extends LitElement {\n public static get tagName() {\n return GRID_HEADER_TAG;\n }\n\n public static override styles = styles;\n\n public static register(): void {\n registerComponent(IgcGridLiteHeader, IgcIconComponent);\n }\n\n private readonly _adoptedStylesController = addAdoptedStylesController(this);\n private readonly _a11y = addA11y(this, 'columnheader');\n\n protected get context(): IgcHeaderContext<T> {\n return {\n parent: this,\n column: this.column,\n };\n }\n\n protected get isSortable() {\n return Boolean(this.column.sortable);\n }\n\n protected get resizeController() {\n return this.state.resizing;\n }\n\n @consume({ context: GRID_STATE_CONTEXT, subscribe: true })\n @property({ attribute: false })\n public state!: StateController<T>;\n\n @property({ attribute: false })\n public column!: ColumnConfiguration<T>;\n\n @property({ attribute: false })\n public adoptRootStyles = false;\n\n /**\n * Position of the header among the visible columns. Written as its 1-based\n * `aria-colindex`.\n *\n * @internal\n */\n @property({ attribute: false })\n public _colIndex = -1;\n\n constructor() {\n super();\n\n addThemingController(this, all, {\n themeChange: this._handleThemeChange,\n });\n }\n\n private get _shouldAdoptStyles(): boolean {\n return this.adoptRootStyles && this.column.headerTemplate != null;\n }\n\n protected override update(props: PropertyValues<this>): void {\n if (props.has('adoptRootStyles') || props.has('column')) {\n this._adoptedStylesController.shouldAdoptStyles(this._shouldAdoptStyles);\n }\n\n // Sort state reaches the header as a context ping, not a property change, so\n // the ARIA state is resolved on each update instead of dirty-checked.\n this._a11y.set({ ariaColIndex: `${this._colIndex}`, ariaSort: this.#ariaSort() });\n\n super.update(props);\n }\n\n /** `aria-sort` applies only to a sortable header. */\n #ariaSort(): string | null {\n if (!this.isSortable) {\n return null;\n }\n\n return this.state.sorting.state.get(this.column.field)?.direction ?? 'none';\n }\n\n private _handleThemeChange() {\n this._adoptedStylesController.invalidateCache(this.ownerDocument);\n this._adoptedStylesController.shouldAdoptStyles(this._shouldAdoptStyles);\n }\n\n #addResizeEventHandlers() {\n const config: AddEventListenerOptions = { once: true };\n\n this.addEventListener(\n 'gotpointercapture',\n () => {\n this.resizeController.indicatorActive = true;\n },\n config\n );\n this.addEventListener('lostpointercapture', this.#handlePointerLost, config);\n this.addEventListener('pointerup', (e) => this.releasePointerCapture(e.pointerId), config);\n this.addEventListener('pointermove', this.#handleResize);\n }\n\n #handleClick(e: Event) {\n e.stopPropagation();\n this.state.sorting.sortFromHeaderClick(this.column);\n }\n\n #handleResize = ({ clientX }: PointerEvent) => {\n const { left } = this.getBoundingClientRect();\n const width = Math.max(clientX - left, MIN_COL_RESIZE_WIDTH);\n const x = this.offsetLeft + width;\n\n this.resizeController.resize(this.column, width, x);\n };\n\n #handleResizeStart(ev: PointerEvent) {\n const { target, pointerId } = ev;\n\n ev.preventDefault();\n\n this.#addResizeEventHandlers();\n this.resizeController.start(this);\n\n (target as HTMLElement).setPointerCapture(pointerId);\n }\n\n #handlePointerLost = () => {\n this.resizeController.indicatorActive = false;\n this.removeEventListener('pointermove', this.#handleResize);\n this.resizeController.stop();\n };\n\n #handleAutosize = () => this.resizeController.autosize(this.column, this);\n\n protected renderSortPart() {\n const state = this.state.sorting.state.get(this.column.field);\n\n if (!(state || this.isSortable)) {\n return nothing;\n }\n\n // The 1-based position of the column in the multi-sort order.\n const position = Array.from(this.state.sorting.state.keys()).indexOf(this.column.field);\n const multiple = this.state.host.sortingOptions.mode === 'multiple';\n const icon = state?.direction === 'descending' ? SORT_ICON_DESCENDING : SORT_ICON_ASCENDING;\n\n return html`<span\n part=${partMap({ action: true, sorted: !!state?.direction })}\n @click=${this.isSortable ? this.#handleClick : nothing}\n >\n <igc-icon\n part=${partMap({ 'sorting-action': !!state })}\n data-sortIndex=${multiple && position > -1 ? position + 1 : nothing}\n name=${icon}\n collection=\"internal\"\n ></igc-icon>\n </span>`;\n }\n\n protected renderContentPart() {\n const defaultContent = this.column.header ?? this.column.field;\n const template = this.column.headerTemplate;\n\n return html`\n <span part=\"title\">\n <span>${template ? template(this.context) : html`${defaultContent}`}</span>\n </span>\n `;\n }\n\n protected renderResizePart() {\n return this.column.resizable\n ? html`<span\n part=\"resizable\"\n @dblclick=${this.#handleAutosize}\n @pointerdown=${this.#handleResizeStart}\n ></span>`\n : nothing;\n }\n\n protected override render() {\n return html`\n <div\n part=${partMap({\n content: true,\n sortable: this.isSortable,\n resizing: this.resizeController.indicatorActive,\n })}\n >\n ${this.renderContentPart()}\n <div part=\"actions\">${this.renderSortPart()}</div>\n </div>\n ${this.renderResizePart()}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [IgcGridLiteHeader.tagName]: IgcGridLiteHeader<object>;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/components/header.ts"],"names":[],"mappings":"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","sourcesContent":["import { consume } from '@lit/context';\nimport {\n θaddAdoptedStylesController as addAdoptedStylesController,\n θaddThemingController as addThemingController,\n IgcIconComponent,\n} from 'igniteui-webcomponents';\nimport { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport type { StateController } from '../controllers/state.js';\nimport { addA11y } from '../internal/a11y.js';\nimport {\n MIN_COL_RESIZE_WIDTH,\n SORT_ICON_ASCENDING,\n SORT_ICON_DESCENDING,\n} from '../internal/constants.js';\nimport { GRID_STATE_CONTEXT } from '../internal/context.js';\nimport { partMap } from '../internal/part-map.js';\nimport { registerComponent } from '../internal/register.js';\nimport { GRID_HEADER_TAG } from '../internal/tags.js';\nimport type { ColumnConfiguration, IgcHeaderContext } from '../internal/types.js';\nimport { styles } from '../styles/header-cell/header-cell.css.js';\nimport { all } from '../styles/themes/grid-header-themes.js';\n\nexport default class IgcGridLiteHeader<T extends object> extends LitElement {\n public static get tagName() {\n return GRID_HEADER_TAG;\n }\n\n public static override styles = styles;\n\n public static register(): void {\n registerComponent(IgcGridLiteHeader, IgcIconComponent);\n }\n\n private readonly _adoptedStylesController = addAdoptedStylesController(this);\n private readonly _a11y = addA11y(this, 'columnheader');\n\n protected get context(): IgcHeaderContext<T> {\n return {\n parent: this,\n column: this.column,\n };\n }\n\n protected get isSortable() {\n return Boolean(this.column.sortable);\n }\n\n protected get resizeController() {\n return this.state.resizing;\n }\n\n @consume({ context: GRID_STATE_CONTEXT, subscribe: true })\n @property({ attribute: false })\n public state!: StateController<T>;\n\n @property({ attribute: false })\n public column!: ColumnConfiguration<T>;\n\n @property({ attribute: false })\n public adoptRootStyles = false;\n\n /**\n * Position of the header among the visible columns. Written as its 1-based\n * `aria-colindex`.\n *\n * @internal\n */\n @property({ attribute: false })\n public _colIndex = -1;\n\n constructor() {\n super();\n\n addThemingController(this, all, {\n themeChange: this._handleThemeChange,\n });\n }\n\n private get _shouldAdoptStyles(): boolean {\n return this.adoptRootStyles && this.column.headerTemplate != null;\n }\n\n protected override update(props: PropertyValues<this>): void {\n if (props.has('adoptRootStyles') || props.has('column')) {\n this._adoptedStylesController.shouldAdoptStyles(this._shouldAdoptStyles);\n }\n\n // Sort state reaches the header as a context ping, not a property change, so\n // the ARIA state is resolved on each update instead of dirty-checked.\n this._a11y.set({ ariaColIndex: `${this._colIndex}`, ariaSort: this.#ariaSort() });\n\n super.update(props);\n }\n\n /** `aria-sort` applies only to a sortable header. */\n #ariaSort(): string | null {\n if (!this.isSortable) {\n return null;\n }\n\n return this.state.sorting.state.get(this.column.field)?.direction ?? 'none';\n }\n\n private _handleThemeChange() {\n this._adoptedStylesController.invalidateCache(this.ownerDocument);\n this._adoptedStylesController.shouldAdoptStyles(this._shouldAdoptStyles);\n }\n\n #addResizeEventHandlers() {\n const config: AddEventListenerOptions = { once: true };\n\n this.addEventListener('lostpointercapture', this.#handlePointerLost, config);\n this.addEventListener('pointerup', (e) => this.releasePointerCapture(e.pointerId), config);\n this.addEventListener('pointermove', this.#handleResize);\n }\n\n #handleClick(e: Event) {\n e.stopPropagation();\n this.state.sorting.sortFromHeaderClick(this.column);\n }\n\n #handleResize = ({ clientX }: PointerEvent) => {\n const { left } = this.getBoundingClientRect();\n const width = Math.max(clientX - left, MIN_COL_RESIZE_WIDTH);\n const x = this.offsetLeft + width;\n\n this.resizeController.resize(this.column, width, x);\n };\n\n #handleResizeStart(ev: PointerEvent) {\n const { target, pointerId } = ev;\n\n ev.preventDefault();\n\n this.#addResizeEventHandlers();\n this.resizeController.start(this);\n\n (target as HTMLElement).setPointerCapture(pointerId);\n }\n\n #handlePointerLost = () => {\n this.removeEventListener('pointermove', this.#handleResize);\n this.resizeController.stop();\n };\n\n #handleAutosize = () => this.resizeController.autosize(this.column, this);\n\n protected renderSortPart() {\n const state = this.state.sorting.state.get(this.column.field);\n\n if (!state && !this.isSortable) {\n return nothing;\n }\n\n // Column position in the multi-sort order.\n const position = Array.from(this.state.sorting.state.keys()).indexOf(this.column.field);\n const multiple = this.state.host.sortingOptions.mode === 'multiple';\n const icon = state?.direction === 'descending' ? SORT_ICON_DESCENDING : SORT_ICON_ASCENDING;\n\n return html`<span\n part=${partMap({ action: true, sorted: !!state?.direction })}\n @click=${this.isSortable ? this.#handleClick : nothing}\n >\n <igc-icon\n part=${partMap({ 'sorting-action': !!state })}\n data-sortIndex=${multiple && position > -1 ? position + 1 : nothing}\n name=${icon}\n collection=\"internal\"\n ></igc-icon>\n </span>`;\n }\n\n protected renderContentPart() {\n const defaultContent = this.column.header ?? this.column.field;\n const template = this.column.headerTemplate;\n\n return html`\n <span part=\"title\">\n <span>${template ? template(this.context) : defaultContent}</span>\n </span>\n `;\n }\n\n protected renderResizePart() {\n return this.column.resizable\n ? html`<span\n part=\"resizable\"\n @dblclick=${this.#handleAutosize}\n @pointerdown=${this.#handleResizeStart}\n ></span>`\n : nothing;\n }\n\n protected override render() {\n return html`\n <div\n part=${partMap({\n content: true,\n sortable: this.isSortable,\n resizing: this.resizeController.indicatorActive,\n })}\n >\n ${this.renderContentPart()}\n <div part=\"actions\">${this.renderSortPart()}</div>\n </div>\n ${this.renderResizePart()}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [IgcGridLiteHeader.tagName]: IgcGridLiteHeader<object>;\n }\n}\n"]}
|
package/components/row.d.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { LitElement, type PropertyValues } from 'lit';
|
|
2
2
|
import type { ActiveNode, ColumnConfiguration } from '../internal/types.js';
|
|
3
3
|
import IgcGridLiteCell from './cell.js';
|
|
4
|
-
/**
|
|
5
|
-
* Component representing the DOM row in the IgcGridLite.
|
|
6
|
-
*/
|
|
7
4
|
export default class IgcGridLiteRow<T extends object> extends LitElement {
|
|
8
5
|
static get tagName(): "igc-grid-lite-row";
|
|
9
6
|
static styles: import("lit").CSSResult;
|
package/components/row.js
CHANGED
|
@@ -10,7 +10,7 @@ import { repeat } from 'lit/directives/repeat.js';
|
|
|
10
10
|
import { addA11y, headerRowsFor } from '../internal/a11y.js';
|
|
11
11
|
import { registerComponent } from '../internal/register.js';
|
|
12
12
|
import { GRID_ROW_TAG } from '../internal/tags.js';
|
|
13
|
-
import { resolveFieldValue } from '../internal/utils.js';
|
|
13
|
+
import { resolveFieldValue, visibleColumns } from '../internal/utils.js';
|
|
14
14
|
import { styles } from '../styles/body-row/body-row.css.js';
|
|
15
15
|
import IgcGridLiteCell from './cell.js';
|
|
16
16
|
const ACTIVE_ROW_Z_INDEX = '3';
|
|
@@ -42,7 +42,7 @@ export default class IgcGridLiteRow extends LitElement {
|
|
|
42
42
|
render() {
|
|
43
43
|
const { column: key, row: index } = this.activeNode ?? {};
|
|
44
44
|
const data = this.data ?? {};
|
|
45
|
-
const columns = this.columns
|
|
45
|
+
const columns = visibleColumns(this.columns);
|
|
46
46
|
return html `
|
|
47
47
|
${repeat(columns, (column) => column.field, (column, colIndex) => html `
|
|
48
48
|
<igc-grid-lite-cell
|
|
@@ -73,6 +73,6 @@ __decorate([
|
|
|
73
73
|
property({ attribute: false })
|
|
74
74
|
], IgcGridLiteRow.prototype, "activeNode", void 0);
|
|
75
75
|
__decorate([
|
|
76
|
-
property({
|
|
76
|
+
property({ attribute: false })
|
|
77
77
|
], IgcGridLiteRow.prototype, "index", void 0);
|
|
78
78
|
//# sourceMappingURL=row.js.map
|
package/components/row.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"row.js","sourceRoot":"","sources":["../../src/components/row.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAuB,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"row.js","sourceRoot":"","sources":["../../src/components/row.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, type PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { addA11y, headerRowsFor } from '../internal/a11y.js';\nimport { registerComponent } from '../internal/register.js';\nimport { GRID_ROW_TAG } from '../internal/tags.js';\nimport type { ActiveNode, ColumnConfiguration } from '../internal/types.js';\nimport { resolveFieldValue, visibleColumns } from '../internal/utils.js';\nimport { styles } from '../styles/body-row/body-row.css.js';\nimport IgcGridLiteCell from './cell.js';\n\nconst ACTIVE_ROW_Z_INDEX = '3';\n\nexport default class IgcGridLiteRow<T extends object> extends LitElement {\n public static get tagName() {\n return GRID_ROW_TAG;\n }\n public static override styles = styles;\n\n public static register(): void {\n registerComponent(IgcGridLiteRow, IgcGridLiteCell);\n }\n\n private readonly _a11y = addA11y(this, 'row');\n\n @property({ attribute: false })\n public adoptRootStyles = false;\n\n @property({ attribute: false })\n public data?: T;\n\n @property({ attribute: false })\n public columns: Array<ColumnConfiguration<T>> = [];\n\n @property({ attribute: false })\n public activeNode?: ActiveNode<T>;\n\n @property({ attribute: false })\n public index = -1;\n\n public get cells(): IgcGridLiteCell<T>[] {\n return Array.from(\n this.renderRoot.querySelectorAll<IgcGridLiteCell<T>>(IgcGridLiteCell.tagName)\n );\n }\n\n protected override update(props: PropertyValues<this>): void {\n // Data rows come after the header rows in the 1-based row index space.\n this._a11y.set({ ariaRowIndex: `${this.index + headerRowsFor(this.columns) + 1}` });\n\n super.update(props);\n }\n\n protected override updated(): void {\n // The active row paints above its neighbors so that the focus outline is not\n // clipped. Set after commit: the first render writes the full style attribute.\n this.style.zIndex = this.activeNode?.row === this.index ? ACTIVE_ROW_Z_INDEX : '';\n }\n\n protected override render() {\n const { column: key, row: index } = this.activeNode ?? {};\n const data = this.data ?? ({} as T);\n\n const columns = visibleColumns(this.columns);\n\n return html`\n ${repeat(\n columns,\n (column) => column.field,\n (column, colIndex) => html`\n <igc-grid-lite-cell\n part=\"cell\"\n ._colIndex=${colIndex + 1}\n .adoptRootStyles=${this.adoptRootStyles}\n .active=${key === column.field && index === this.index}\n .column=${column}\n .cellTemplate=${column.cellTemplate}\n .row=${this}\n .rowIndex=${this.index}\n .value=${resolveFieldValue(data, column.field)}\n ></igc-grid-lite-cell>\n `\n )}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [IgcGridLiteRow.tagName]: IgcGridLiteRow<object>;\n }\n}\n"]}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import type { ReactiveController } from 'lit';
|
|
2
1
|
import type { GridHost } from '../internal/types.js';
|
|
3
2
|
import FilterDataOperation from '../operations/filter.js';
|
|
4
3
|
import SortDataOperation from '../operations/sort.js';
|
|
5
4
|
import type { StateController } from './state.js';
|
|
6
|
-
declare class DataOperationsController<T extends object>
|
|
5
|
+
declare class DataOperationsController<T extends object> {
|
|
7
6
|
protected host: GridHost<T>;
|
|
8
7
|
protected sorting: SortDataOperation<T>;
|
|
9
8
|
protected filtering: FilterDataOperation<T>;
|
|
10
9
|
constructor(host: GridHost<T>);
|
|
11
|
-
hostConnected(): void;
|
|
12
10
|
apply(data: T[], state: StateController<T>): Promise<T[]>;
|
|
13
11
|
}
|
|
14
12
|
declare function createDataOperationsController<T extends object>(host: GridHost<T>): DataOperationsController<T>;
|
|
@@ -5,9 +5,7 @@ class DataOperationsController {
|
|
|
5
5
|
this.host = host;
|
|
6
6
|
this.sorting = new SortDataOperation();
|
|
7
7
|
this.filtering = new FilterDataOperation();
|
|
8
|
-
this.host.addController(this);
|
|
9
8
|
}
|
|
10
|
-
hostConnected() { }
|
|
11
9
|
async apply(data, state) {
|
|
12
10
|
const { filter, sort } = this.host.dataPipelineConfiguration ?? {};
|
|
13
11
|
const filtered = filter
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-operation.js","sourceRoot":"","sources":["../../src/controllers/data-operation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data-operation.js","sourceRoot":"","sources":["../../src/controllers/data-operation.ts"],"names":[],"mappings":"AACA,OAAO,mBAAmB,MAAM,yBAAyB,CAAC;AAC1D,OAAO,iBAAiB,MAAM,uBAAuB,CAAC;AAGtD,MAAM,wBAAwB;IAI5B,YAAsB,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QAH7B,YAAO,GAAG,IAAI,iBAAiB,EAAK,CAAC;QACrC,cAAS,GAAG,IAAI,mBAAmB,EAAK,CAAC;IAET,CAAC;IAEpC,KAAK,CAAC,KAAK,CAAC,IAAS,EAAE,KAAyB;QAErD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,yBAAyB,IAAI,EAAE,CAAC;QAEnE,MAAM,QAAQ,GAAG,MAAM;YACrB,CAAC,CAAC,MAAM,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACzD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAEtD,OAAO,IAAI;YACT,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC/D,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;CACF;AAED,SAAS,8BAA8B,CACrC,IAAiB;IAEjB,OAAO,IAAI,wBAAwB,CAAI,IAAI,CAAC,CAAC;AAC/C,CAAC;AAGD,OAAO,EAAE,8BAA8B,EAAE,CAAC","sourcesContent":["import type { GridHost } from '../internal/types.js';\nimport FilterDataOperation from '../operations/filter.js';\nimport SortDataOperation from '../operations/sort.js';\nimport type { StateController } from './state.js';\n\nclass DataOperationsController<T extends object> {\n protected sorting = new SortDataOperation<T>();\n protected filtering = new FilterDataOperation<T>();\n\n constructor(protected host: GridHost<T>) {}\n\n public async apply(data: T[], state: StateController<T>) {\n // A hook, when configured, replaces the built-in operation.\n const { filter, sort } = this.host.dataPipelineConfiguration ?? {};\n\n const filtered = filter\n ? await filter({ data, grid: this.host, type: 'filter' })\n : this.filtering.apply(data, state.filtering.state);\n\n return sort\n ? await sort({ data: filtered, grid: this.host, type: 'sort' })\n : this.sorting.apply(filtered, state.sorting.state);\n }\n}\n\nfunction createDataOperationsController<T extends object>(\n host: GridHost<T>\n): DataOperationsController<T> {\n return new DataOperationsController<T>(host);\n}\n\nexport type { DataOperationsController };\nexport { createDataOperationsController };\n"]}
|
package/controllers/dom.d.ts
CHANGED
|
@@ -1,35 +1,23 @@
|
|
|
1
|
+
import { IgcVirtualScrollComponent } from 'igniteui-webcomponents';
|
|
1
2
|
import type { ReactiveController } from 'lit';
|
|
2
3
|
import type { StyleInfo } from 'lit/directives/style-map.js';
|
|
3
4
|
import type IgcFilterRow from '../components/filter-row.js';
|
|
4
|
-
import type IgcGridLiteHeaderRow from '../components/header-row.js';
|
|
5
5
|
import type IgcGridLiteRow from '../components/row.js';
|
|
6
|
-
import type IgcVirtualizer from '../components/virtualizer.js';
|
|
7
6
|
import type { ColumnConfiguration, GridHost } from '../internal/types.js';
|
|
8
|
-
/**
|
|
9
|
-
* Owns the DOM concerns of the grid: element queries into the render root, the
|
|
10
|
-
* derived column track sizes, and the scrollbar offset measurement.
|
|
11
|
-
*/
|
|
7
|
+
/** Grid DOM access: render root queries, column track sizes, scrollbar offset, body focus. */
|
|
12
8
|
declare class GridDOMController<T extends object> implements ReactiveController {
|
|
13
9
|
#private;
|
|
14
10
|
protected readonly _host: GridHost<T>;
|
|
15
11
|
constructor(host: GridHost<T>);
|
|
16
12
|
columnSizes: StyleInfo;
|
|
17
|
-
/** Returns the header row element of the grid. */
|
|
18
|
-
get headerRow(): IgcGridLiteHeaderRow<T> | null;
|
|
19
|
-
/** Returns the filter row element of the grid. */
|
|
20
13
|
get filterRow(): IgcFilterRow<T> | null;
|
|
21
|
-
/** Returns the data row elements of the grid. */
|
|
22
14
|
get rows(): IgcGridLiteRow<T>[];
|
|
23
|
-
|
|
24
|
-
get virtualizer(): IgcVirtualizer | null;
|
|
15
|
+
get virtualizer(): IgcVirtualScrollComponent | null;
|
|
25
16
|
hostConnected(): void;
|
|
26
17
|
hostDisconnected(): void;
|
|
27
18
|
/** Scrolls the data area back to the top. */
|
|
28
19
|
resetScrollPosition(): void;
|
|
29
|
-
/**
|
|
30
|
-
* Re-derives the column track sizes. Column configurations are immutable: an
|
|
31
|
-
* unchanged array identity means the current sizes are still correct.
|
|
32
|
-
*/
|
|
20
|
+
/** Re-derives the column track sizes. Column configs are immutable: same array, same sizes. */
|
|
33
21
|
setColumns(columns: ColumnConfiguration<T>[]): void;
|
|
34
22
|
}
|
|
35
23
|
declare function createDomController<T extends object>(host: GridHost<T>): GridDOMController<T>;
|
package/controllers/dom.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { IgcVirtualScrollComponent } from 'igniteui-webcomponents';
|
|
2
|
+
import { addBodyFocus } from '../internal/body-focus.js';
|
|
3
|
+
import { SCROLL_STATE_CHANGE } from '../internal/constants.js';
|
|
1
4
|
import { registerGridIcons } from '../internal/icon-registry.js';
|
|
2
|
-
import { GRID_FILTER_ROW_TAG,
|
|
5
|
+
import { GRID_FILTER_ROW_TAG, GRID_ROW_TAG } from '../internal/tags.js';
|
|
3
6
|
import { applyColumnWidths } from '../internal/utils.js';
|
|
4
7
|
const SCROLLBAR_OFFSET_VAR = '--scrollbar-offset';
|
|
5
|
-
const VISIBILITY_CHANGED = 'visibilityChanged';
|
|
6
8
|
class GridDOMController {
|
|
7
9
|
#observed;
|
|
8
|
-
#
|
|
10
|
+
#listeners;
|
|
9
11
|
#scrollOffset;
|
|
10
12
|
#pendingFrame;
|
|
11
13
|
#columns;
|
|
@@ -25,9 +27,6 @@ class GridDOMController {
|
|
|
25
27
|
this._host = host;
|
|
26
28
|
this._host.addController(this);
|
|
27
29
|
}
|
|
28
|
-
get headerRow() {
|
|
29
|
-
return this._host.renderRoot.querySelector(GRID_HEADER_ROW_TAG);
|
|
30
|
-
}
|
|
31
30
|
get filterRow() {
|
|
32
31
|
return this._host.renderRoot.querySelector(GRID_FILTER_ROW_TAG);
|
|
33
32
|
}
|
|
@@ -35,7 +34,7 @@ class GridDOMController {
|
|
|
35
34
|
return Array.from(this._host.renderRoot.querySelectorAll(GRID_ROW_TAG));
|
|
36
35
|
}
|
|
37
36
|
get virtualizer() {
|
|
38
|
-
return this._host.renderRoot.querySelector(
|
|
37
|
+
return this._host.renderRoot.querySelector(IgcVirtualScrollComponent.tagName);
|
|
39
38
|
}
|
|
40
39
|
hostConnected() {
|
|
41
40
|
registerGridIcons();
|
|
@@ -48,9 +47,7 @@ class GridDOMController {
|
|
|
48
47
|
cancelAnimationFrame(this.#pendingFrame);
|
|
49
48
|
this.#pendingFrame = undefined;
|
|
50
49
|
}
|
|
51
|
-
this.#
|
|
52
|
-
this.#resizeObserver = undefined;
|
|
53
|
-
this.#observed?.removeEventListener(VISIBILITY_CHANGED, this.#onScrollbarChange);
|
|
50
|
+
this.#listeners?.abort();
|
|
54
51
|
this.#observed = undefined;
|
|
55
52
|
}
|
|
56
53
|
#observeVirtualizer() {
|
|
@@ -59,9 +56,13 @@ class GridDOMController {
|
|
|
59
56
|
return;
|
|
60
57
|
}
|
|
61
58
|
this.#observed = virtualizer;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
59
|
+
this.#listeners = new AbortController();
|
|
60
|
+
const { signal } = this.#listeners;
|
|
61
|
+
addBodyFocus(virtualizer, signal);
|
|
62
|
+
virtualizer.addEventListener(SCROLL_STATE_CHANGE, this.#onScrollbarChange, { signal });
|
|
63
|
+
const resizeObserver = new ResizeObserver(this.#onScrollbarChange);
|
|
64
|
+
resizeObserver.observe(virtualizer);
|
|
65
|
+
signal.addEventListener('abort', () => resizeObserver.disconnect());
|
|
65
66
|
}
|
|
66
67
|
#applyScrollOffset() {
|
|
67
68
|
const virtualizer = this.#observed;
|
package/controllers/dom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/controllers/dom.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/controllers/dom.ts"],"names":[],"mappings":"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","sourcesContent":["import { IgcVirtualScrollComponent } from 'igniteui-webcomponents';\nimport type { ReactiveController } from 'lit';\nimport type { StyleInfo } from 'lit/directives/style-map.js';\nimport type IgcFilterRow from '../components/filter-row.js';\nimport type IgcGridLiteRow from '../components/row.js';\nimport { addBodyFocus } from '../internal/body-focus.js';\nimport { SCROLL_STATE_CHANGE } from '../internal/constants.js';\nimport { registerGridIcons } from '../internal/icon-registry.js';\nimport { GRID_FILTER_ROW_TAG, GRID_ROW_TAG } from '../internal/tags.js';\nimport type { ColumnConfiguration, GridHost } from '../internal/types.js';\nimport { applyColumnWidths } from '../internal/utils.js';\n\nconst SCROLLBAR_OFFSET_VAR = '--scrollbar-offset';\n\n/** Grid DOM access: render root queries, column track sizes, scrollbar offset, body focus. */\nclass GridDOMController<T extends object> implements ReactiveController {\n protected readonly _host: GridHost<T>;\n\n #observed?: IgcVirtualScrollComponent;\n #listeners?: AbortController;\n\n /** Last written offset in pixels. -1 means not measured yet. */\n #scrollOffset = -1;\n #pendingFrame?: number;\n\n /** The column configuration `columnSizes` was derived from. */\n #columns?: ColumnConfiguration<T>[];\n\n #onScrollbarChange = (): void => {\n if (this.#pendingFrame !== undefined) {\n return;\n }\n\n this.#pendingFrame = requestAnimationFrame(() => {\n this.#pendingFrame = undefined;\n this.#applyScrollOffset();\n });\n };\n\n constructor(host: GridHost<T>) {\n this._host = host;\n this._host.addController(this);\n }\n\n public columnSizes: StyleInfo = {};\n\n public get filterRow(): IgcFilterRow<T> | null {\n return this._host.renderRoot.querySelector<IgcFilterRow<T>>(GRID_FILTER_ROW_TAG);\n }\n\n public get rows(): IgcGridLiteRow<T>[] {\n return Array.from(this._host.renderRoot.querySelectorAll<IgcGridLiteRow<T>>(GRID_ROW_TAG));\n }\n\n public get virtualizer(): IgcVirtualScrollComponent | null {\n return this._host.renderRoot.querySelector(IgcVirtualScrollComponent.tagName);\n }\n\n public hostConnected(): void {\n registerGridIcons();\n\n // The virtualizer is part of the host template. Observe it after the first render.\n this._host.updateComplete.then(() => {\n this.#observeVirtualizer();\n });\n }\n\n public hostDisconnected(): void {\n if (this.#pendingFrame !== undefined) {\n cancelAnimationFrame(this.#pendingFrame);\n this.#pendingFrame = undefined;\n }\n\n this.#listeners?.abort();\n this.#observed = undefined;\n }\n\n /**\n * Tracks scrollbar toggles (range change, content box resize) without a forced\n * layout per host update. Also keeps body focus across row recycling.\n */\n #observeVirtualizer(): void {\n const virtualizer = this.virtualizer;\n\n if (!virtualizer || virtualizer === this.#observed) {\n return;\n }\n\n this.#observed = virtualizer;\n this.#listeners = new AbortController();\n\n const { signal } = this.#listeners;\n addBodyFocus(virtualizer, signal);\n virtualizer.addEventListener(SCROLL_STATE_CHANGE, this.#onScrollbarChange, { signal });\n\n const resizeObserver = new ResizeObserver(this.#onScrollbarChange);\n resizeObserver.observe(virtualizer);\n signal.addEventListener('abort', () => resizeObserver.disconnect());\n }\n\n /** Writes the scrollbar offset CSS variable only when the measurement changed. */\n #applyScrollOffset(): void {\n const virtualizer = this.#observed;\n const offset = virtualizer ? virtualizer.offsetWidth - virtualizer.clientWidth : 0;\n\n if (offset === this.#scrollOffset) {\n return;\n }\n\n this.#scrollOffset = offset;\n this._host.style.setProperty(SCROLLBAR_OFFSET_VAR, `${offset}px`);\n }\n\n /** Scrolls the data area back to the top. */\n public resetScrollPosition(): void {\n this.virtualizer?.scrollTo({ top: 0 });\n }\n\n /** Re-derives the column track sizes. Column configs are immutable: same array, same sizes. */\n public setColumns(columns: ColumnConfiguration<T>[]): void {\n if (columns === this.#columns) {\n return;\n }\n\n this.#columns = columns;\n this.columnSizes = applyColumnWidths(columns);\n }\n}\n\nfunction createDomController<T extends object>(host: GridHost<T>): GridDOMController<T> {\n return new GridDOMController<T>(host);\n}\n\nexport type { GridDOMController };\nexport { createDomController };\n"]}
|