ids-enterprise-wc 1.15.9-patch.12 → 1.15.9-patch.13
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/chunks/{ids-chunk-EGZI5ZV3-full.js → ids-chunk-6YJ4HIUC-full.js} +16 -1
- package/chunks/{ids-chunk-EGZI5ZV3-full.js.map → ids-chunk-6YJ4HIUC-full.js.map} +2 -2
- package/chunks/{ids-chunk-MZTBZCHG-full.js → ids-chunk-CVY6XSRY-full.js} +17 -4
- package/chunks/ids-chunk-CVY6XSRY-full.js.map +7 -0
- package/chunks/{ids-chunk-A5IOTIO6-full.js → ids-chunk-DSWFDICX-full.js} +62 -14
- package/chunks/{ids-chunk-A5IOTIO6-full.js.map → ids-chunk-DSWFDICX-full.js.map} +2 -2
- package/chunks/{ids-chunk-FV5W3K6S-full.js → ids-chunk-O32SEXUF-full.js} +2 -2
- package/chunks/{ids-chunk-5GV6Y3WM-full.js → ids-chunk-OP5EXDDT-full.js} +2 -2
- package/components/ids-accordion/ids-accordion.css +93 -9
- package/components/ids-app-menu/ids-app-menu.css +23 -132
- package/components/ids-button/ids-button.css +392 -43
- package/components/ids-calendar/ids-calendar.css +190 -265
- package/components/ids-checkbox/ids-checkbox.css +7 -580
- package/components/ids-data-grid/ids-data-grid-cell.js +1 -1
- package/components/ids-data-grid/ids-data-grid-editors.js +1 -1
- package/components/ids-data-grid/ids-data-grid-filters.js +2 -2
- package/components/ids-data-grid/ids-data-grid-row.js +2 -2
- package/components/ids-data-grid/ids-data-grid.js +5 -5
- package/components/ids-hierarchy/ids-hierarchy.css +117 -14
- package/components/ids-layout-grid/ids-layout-grid.css +10 -21300
- package/components/ids-list-box/ids-list-box.css +66 -98
- package/components/ids-list-view/ids-list-view.css +15 -112
- package/components/ids-menu/ids-menu.css +335 -11
- package/components/ids-modal/ids-modal.css +23 -94
- package/components/ids-pager/ids-pager.css +3 -37
- package/components/ids-swappable/ids-swappable.css +84 -19
- package/components/ids-tabs/ids-tabs.css +264 -470
- package/components/ids-tag/ids-tag.css +152 -8
- package/components/ids-time-picker/ids-time-picker.css +49 -67
- package/components/ids-toolbar/ids-toolbar.css +122 -12
- package/custom-elements.json +2769 -2749
- package/enterprise-wc.all.iife.js +88 -12
- package/enterprise-wc.all.iife.js.map +2 -2
- package/enterprise-wc.js +5 -5
- package/package.json +1 -1
- package/vscode.html-custom-data.json +1 -1
- package/chunks/ids-chunk-MZTBZCHG-full.js.map +0 -7
- /package/chunks/{ids-chunk-FV5W3K6S-full.js.map → ids-chunk-O32SEXUF-full.js.map} +0 -0
- /package/chunks/{ids-chunk-5GV6Y3WM-full.js.map → ids-chunk-OP5EXDDT-full.js.map} +0 -0
|
@@ -488,6 +488,21 @@ var IdsDataGridCell = class extends ids_events_mixin_default(IdsElement) {
|
|
|
488
488
|
* @param {boolean} trigger whether to trigger the beforecelledit event
|
|
489
489
|
*/
|
|
490
490
|
startCellEdit(clickEvent, trigger = true) {
|
|
491
|
+
if (this.dataGrid.virtualScroll && this.rowIndex !== void 0) {
|
|
492
|
+
const container = this.dataGrid.container;
|
|
493
|
+
if (container) {
|
|
494
|
+
const rowHeight = this.dataGrid.virtualScrollSettings?.ROW_HEIGHT || 30;
|
|
495
|
+
const scrollTop = container.scrollTop || 0;
|
|
496
|
+
const containerHeight = container.clientHeight || 0;
|
|
497
|
+
const effectiveRowIndex = this.dataGrid.treeGrid ? this.dataGrid.virtualRows.findIndex((row) => row === this.dataGrid.data[this.rowIndex]) : this.rowIndex;
|
|
498
|
+
if (effectiveRowIndex === -1) return;
|
|
499
|
+
const rowTop = effectiveRowIndex * rowHeight;
|
|
500
|
+
const rowBottom = rowTop + rowHeight;
|
|
501
|
+
if (rowBottom < scrollTop || rowTop > scrollTop + containerHeight) {
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
491
506
|
if (this.dataGrid.activeCellEditor instanceof IdsDataGridCell && this.dataGrid.activeCellEditor !== this) {
|
|
492
507
|
this.dataGrid.activeCellEditor.endCellEdit();
|
|
493
508
|
}
|
|
@@ -872,4 +887,4 @@ IdsDataGridCell = __decorateClass([
|
|
|
872
887
|
export {
|
|
873
888
|
IdsDataGridCell
|
|
874
889
|
};
|
|
875
|
-
//# sourceMappingURL=ids-chunk-
|
|
890
|
+
//# sourceMappingURL=ids-chunk-6YJ4HIUC-full.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/ids-data-grid/ids-data-grid-cell.ts"],
|
|
4
|
-
"sourcesContent": ["import { customElement } from '../../core/ids-decorators';\nimport IdsElement from '../../core/ids-element';\nimport IdsEventsMixin from '../../mixins/ids-events-mixin/ids-events-mixin';\nimport { IdsDirection } from '../../core/ids-attributes';\nimport type IdsDataGrid from './ids-data-grid';\nimport type IdsDropdown from '../ids-dropdown/ids-dropdown';\nimport type IdsInput from '../ids-input/ids-input';\nimport type IdsLookup from '../ids-lookup/ids-lookup';\nimport type IdsTriggerField from '../ids-trigger-field/ids-trigger-field';\nimport type { IdsDataGridColumn } from './ids-data-grid-column';\nimport type IdsDataGridRow from './ids-data-grid-row';\nimport { IdsDataGridEditor } from './ids-data-grid-editors';\n\nexport type IdsDataGridActivationReason = 'keyboard' | 'method' | 'internal' | 'redraw' | 'mouse' | 'click';\n\n@customElement('ids-data-grid-cell')\nexport default class IdsDataGridCell extends IdsEventsMixin(IdsElement) {\n rootNode?: any;\n\n isInValid = false;\n\n /** The editor element */\n editor?: IdsDataGridEditor;\n\n constructor() {\n super({ noShadowRoot: true });\n }\n\n connectedCallback(): void {\n // NOTE: bypassing super.connectedCallback() for performance reasons\n this.renderCell();\n this.tabIndex = this.rowIndex === 0 && this.columnIndex === 0 ? 0 : -1;\n this.setAttribute('tabindex', String(this.tabIndex));\n\n this.addEventListener('focus', this.onFocus);\n\n if (this.isDraggable) {\n this.parentRow?.setAttribute('draggable', 'true');\n }\n }\n\n get parentRow(): IdsDataGridRow | null {\n return this.parentElement as IdsDataGridRow;\n }\n\n onFocus() {\n this.dataGrid.lastActiveCell = this.activate(false, 'keyboard');\n this.dataGrid.offEvent('blur.ids-data-grid-cell', this);\n this.dataGrid.onEvent('blur.ids-data-grid-cell', this, this.onBlur);\n }\n\n onBlur() {\n this.dataGrid.offEvent('focus.ids-data-grid-cell', this);\n this.dataGrid.offEvent('blur.ids-data-grid-cell', this);\n }\n\n disconnectedCallback() {\n // NOTE: bypassing super.disconnectedCallback() for performance reasons\n this.offEvent('focusin.ids-cell', this);\n this.offEvent('focusout.ids-cell', this);\n }\n\n get isDraggable(): boolean {\n return this.formatter?.name === 'rowReorder';\n }\n\n get isEditable(): boolean {\n if (this.classList.contains('is-readonly') || this.classList.contains('is-disabled')) return false;\n\n const column = this.column;\n if (column.formatter?.name === 'selectionCheckbox') return true;\n\n if (!column.editor) return false;\n const columnEditor = this.dataGrid.editors.find((editor) => editor.type === column?.editor?.type);\n return !!columnEditor?.editor;\n }\n\n /**\n * Reference to the data grid parent\n * @returns {IdsDataGrid} the data grid parent\n */\n get dataGrid() {\n if (!this.rootNode) this.rootNode = (this.getRootNode() as any).host;\n return (this.rootNode) as IdsDataGrid;\n }\n\n /**\n * Gets data grid row below this cell\n * @returns {IdsDataGridRow} row below\n */\n get rowBelow(): IdsDataGridRow | null {\n if (this.dataGrid.treeGrid) {\n let nextRow = this.parentElement?.nextElementSibling as IdsDataGridRow;\n\n // traverse nextElementSiblings until visible row is found\n while (nextRow?.hasAttribute('hidden')) {\n nextRow = nextRow?.nextElementSibling as IdsDataGridRow;\n }\n\n return nextRow ?? null;\n }\n\n return this.dataGrid.rowByIndex(this.rowIndex + 1) ?? null;\n }\n\n /**\n * Gets data grid row above this cell\n * @returns {IdsDataGridRow} row above\n */\n get rowAbove(): IdsDataGridRow | null {\n if (this.dataGrid.treeGrid) {\n let prevRow = this.parentElement?.previousElementSibling as IdsDataGridRow;\n\n // traverse previousElementSiblings until visible row is found\n while (prevRow?.hasAttribute('hidden')) {\n prevRow = prevRow?.previousElementSibling as IdsDataGridRow;\n }\n\n return prevRow ?? null;\n }\n\n return this.dataGrid.rowByIndex(this.rowIndex - 1) ?? null;\n }\n\n /**\n * Get the cell above this cell\n * @returns {IdsDataGridCell | null} the cell above this cell\n */\n get cellAbove(): IdsDataGridCell | null {\n return this.dataGrid?.findNextNavigableCell(this, IdsDirection.Up) ?? null;\n }\n\n /**\n * Get the cell below this cell\n * @returns {IdsDataGridCell | null} the cell below this cell\n */\n get cellBelow(): IdsDataGridCell | null {\n return this.dataGrid?.findNextNavigableCell(this, IdsDirection.Down) ?? null;\n }\n\n /**\n * Get the cell to the left of this cell\n * @returns {IdsDataGridCell | null} the cell to the left of this cell\n */\n get cellLeft(): IdsDataGridCell | null {\n return this.dataGrid?.findNextNavigableCell(this, IdsDirection.Left) ?? null;\n }\n\n /**\n * Get the cell to the right of this cell\n * @returns {IdsDataGridCell | null} the cell to the right of this cell\n */\n get cellRight(): IdsDataGridCell | null {\n return this.dataGrid?.findNextNavigableCell(this, IdsDirection.Right) ?? null;\n }\n\n /**\n * Get the next editable cell to the left of this cell\n * @returns {IdsDataGridCell | null} the next editabled cell to the left of this cell\n */\n get cellLeftEditable(): IdsDataGridCell | null {\n if (!this.dataGrid?.isEditable) return null;\n if (this?.columnIndex === 0 && this?.rowIndex === 0) return null;\n\n let nextCell = this.cellLeft;\n const maxColumns = this.dataGrid?.visibleColumns?.length || 0;\n let attempts = 0;\n\n while (nextCell && !nextCell.isEditable && attempts < maxColumns) {\n nextCell = nextCell.cellLeft;\n attempts++;\n }\n\n // If we've tried all columns and found no editable cell, return null\n if (attempts >= maxColumns || !nextCell?.isEditable) {\n return null;\n }\n\n return nextCell;\n }\n\n /**\n * Get the next editable cell to the right of this cell\n * @returns {IdsDataGridCell | null} the next editabled cell to the right of this cell\n */\n get cellRightEditable(): IdsDataGridCell | null {\n if (!this.dataGrid?.isEditable) return null;\n\n let nextCell = this.cellRight;\n const maxColumns = this.dataGrid?.visibleColumns?.length || 0;\n let attempts = 0;\n\n while (nextCell && !nextCell.isEditable && attempts < maxColumns) {\n nextCell = nextCell.cellRight;\n attempts++;\n }\n\n // If we've tried all columns and found no editable cell, return null\n if (attempts >= maxColumns || !nextCell?.isEditable) {\n return null;\n }\n\n return nextCell;\n }\n\n /**\n * Update this cell's dataset and refresh\n * @param {string} value the new data for the cell\n * @param {boolean} refresh if true, rerender the cell\n */\n updateData(value: string, refresh = true) {\n const rowIndex = this.rowIndex;\n const record = this.dataGrid?.data[rowIndex];\n const columnIndex = this.columnIndex;\n\n // a cell exists in a row of a visible-columns\n const visibleColumns = this.dataGrid?.visibleColumns;\n\n const column = visibleColumns[columnIndex];\n if (!column?.field) return;\n\n const updatedRecord = {\n ...record,\n [column.field]: value,\n };\n\n this.editor?.change?.(value);\n\n if (refresh) {\n this.dataGrid?.updateDatasetAndRefresh?.(this.rowIndex, updatedRecord, false);\n } else {\n this.dataGrid?.updateDataset?.(this.rowIndex, updatedRecord, false);\n }\n }\n\n // Add memoization for frequently accessed properties\n #memoizedColumn?: IdsDataGridColumn;\n\n // Add memoization for frequently accessed properties\n #memoizedColumnIndex?: number;\n\n /**\n * Get the column definition\n * @returns {IdsDataGridColumn} the current cells column\n */\n get column() {\n if (!this.#memoizedColumn || this.columnIndex !== this.#memoizedColumnIndex) {\n this.#memoizedColumn = this.dataGrid?.visibleColumns[this.columnIndex];\n this.#memoizedColumnIndex = this.columnIndex;\n }\n return this.#memoizedColumn;\n }\n\n /**\n * Get the column header cell element\n * @returns {IdsDataGridColumn} the current cells column\n */\n get columnHeader() {\n return this.dataGrid?.header?.columns[this.columnIndex];\n }\n\n /**\n * Gets the column # in which this cell exists\n * @returns {number} the column-index\n */\n get columnIndex(): number {\n return Number(this.getAttribute?.('aria-colindex') ?? 1) - 1;\n }\n\n /**\n * Gets the row-index # in which this cell exists\n * @returns {number} the row-index\n */\n get rowIndex(): number {\n return Number(this.parentElement?.getAttribute?.('row-index') ?? -1);\n }\n\n get formatter(): IdsDataGridColumn['formatter'] {\n return this.column?.formatter;\n }\n\n /**\n * Get row of table cell\n * @returns {number} table row index\n */\n get row(): number {\n return this.rowIndex;\n }\n\n /**\n * Get data value of this cell\n * @returns {any} the data value of this cell\n */\n get value(): any {\n // NOTE: the editor is a singleton, so we must ensure the input is still in this cell's DOM.\n if (this.editor && this.contains(this.editor?.input ?? null)) {\n return this.editor?.value?.();\n }\n\n const column = this.dataGrid?.visibleColumns?.[this.columnIndex];\n const record = this.dataGrid?.data?.[this.rowIndex];\n\n return record?.[(column?.field ?? -1)] ?? this.textContent ?? '';\n }\n\n /**\n * Get the default/original value of this cell\n * @returns {any} the default value of this cell\n */\n get defaultValue(): any {\n const column = this.dataGrid?.visibleColumns?.[this.columnIndex];\n const record = this.dataGrid?.data?.[this.rowIndex];\n const dirtyCells = record?.dirtyCells ?? [];\n return dirtyCells.find((row: Record<string, any>) => row?.columnId === column?.id)?.originalValue ?? this.value;\n }\n\n /**\n * Rerender a cell - may be used later\n */\n renderCell() {\n const dataGrid = this.dataGrid;\n\n const rowIndex = this.rowIndex;\n const rowData: Record<string, any> | undefined = dataGrid?.data[rowIndex];\n\n if (rowData?.isGroupRow) return;\n\n if (dataGrid.virtualScroll) {\n const tooManyColumns = dataGrid.columns.length > dataGrid.TOO_MANY_COLUMNS;\n\n const columnsStale = dataGrid.hasAttribute('columns-stale');\n const columnsFresh = !columnsStale;\n\n const columnHeaders = this.columnHeader;\n const columnOffScreen = columnHeaders?.hasAttribute('column-offscreen');\n\n if (tooManyColumns && columnsFresh && columnOffScreen) {\n // NOTE: skip renderCell if cell is NOT on-screen\n return;\n }\n\n const columnOnScreen = columnHeaders?.hasAttribute('column-onscreen');\n const columnOffScreenLeft = columnHeaders?.hasAttribute('column-offscreen-left');\n const columnOffScreenRight = columnHeaders?.hasAttribute('column-offscreen-right');\n this.toggleAttribute('column-onscreen', columnOnScreen);\n this.toggleAttribute('column-offscreen', columnOffScreen);\n this.toggleAttribute('column-offscreen-left', columnOffScreenLeft);\n this.toggleAttribute('column-offscreen-right', columnOffScreenRight);\n }\n\n const column = this.column;\n const columnIndex = this.columnIndex;\n\n const template = IdsDataGridCell.template(rowData, column, rowIndex, dataGrid);\n if (this.innerHTML !== template) {\n try {\n this.innerHTML = template;\n } catch (e) {\n requestAnimationFrame(() => {\n this.innerHTML = template;\n });\n }\n }\n const cssClasses = this?.cellCssClasses(column, columnIndex, template) ?? '';\n\n if (cssClasses) {\n this.classList.remove(...this.classList);\n this.classList.add(...cssClasses.split(' '));\n }\n\n const cssPart = this?.cellCssPart(column, columnIndex) ?? '';\n if (cssPart) this.setAttribute('part', cssPart);\n\n if (dataGrid.lastActiveCell?.cell === columnIndex && dataGrid.lastActiveCell?.row === rowIndex) {\n this.onFocus();\n }\n }\n\n /**\n * Return the cells' css part\n * @param {IdsDataGridColumn} column - the column definition\n * @param {number} columnIndex - the column index\n * @returns {string} The css part string for the cell\n */\n cellCssPart(column: IdsDataGridColumn, columnIndex: number): string {\n const dataGrid = this.dataGrid;\n const rowIndex = this.rowIndex;\n const rowData = dataGrid.data[rowIndex];\n\n const cacheKey = IdsDataGridCell.cacheKey(rowIndex, rowData, column, dataGrid);\n const cellCacheKey = `${cacheKey}:${dataGrid.cacheCellPart}`;\n\n if (IdsDataGridCell.cellCache[cellCacheKey]) {\n return IdsDataGridCell.cellCache[cellCacheKey];\n }\n\n let part = column.cssPart || 'cell';\n const rowSelection = dataGrid?.rowSelection;\n const isSelectable = rowSelection === 'mixed' || rowSelection === 'single' || rowSelection === 'multiple';\n if (isSelectable && rowData.rowSelected) {\n if (column.cellSelectedCssPart) part = column.cellSelectedCssPart;\n else part = 'cell-selected';\n }\n\n if (typeof part === 'function') {\n part = part({\n rowIndex,\n columnIndex,\n recordIndex: this.parentRow?.recordIndex ?? null,\n rowData\n });\n }\n\n IdsDataGridCell.cellCache[cellCacheKey] = part;\n\n return part;\n }\n\n /**\n * Return the cells' css classes\n * @param {IdsDataGridColumn} column - the column definition\n * @param {number} columnIndex - the column index\n * @param {string} content - the cells html or text content\n * @returns {string} The classList string for the cell\n */\n cellCssClasses(column: IdsDataGridColumn, columnIndex: number, content: string): string {\n const dataGrid = this.dataGrid;\n const rowIndex = this.rowIndex;\n const rowData = dataGrid.data[rowIndex];\n\n const cacheKey = IdsDataGridCell.cacheKey(rowIndex, rowData, column, dataGrid);\n const cellCacheKey = `${cacheKey}:${dataGrid.cacheCellClass}`;\n\n if (IdsDataGridCell.cellCache[cellCacheKey]) {\n return IdsDataGridCell.cellCache[cellCacheKey];\n }\n\n const isDirtyCell = (currentRow: Record<string, unknown>): boolean => {\n if (!currentRow.dirtyCells) return false;\n return (currentRow.dirtyCells as any).findIndex((item: any) => item.cell === columnIndex) !== -1;\n };\n\n const isInvalidCell = (currentRow: Record<string, unknown>): boolean => {\n if (!currentRow.invalidCells) return false;\n return (currentRow.invalidCells as any).findIndex((item: any) => item.cell === columnIndex) !== -1;\n };\n\n const isReadonly = (): boolean => {\n if (column.readonly && column?.readonly === true) return true;\n if (typeof column?.readonly === 'function') return column?.readonly(rowIndex, content, column, rowData);\n return false;\n };\n\n const isColumnDisabled = (): boolean => {\n if (!column?.disabled) return false;\n if (typeof column?.disabled === 'function') return column?.disabled(rowIndex, content, column, rowData);\n if (typeof column?.disabled === 'boolean') return column?.disabled;\n return false;\n };\n\n const isUppercase = (): boolean => {\n if (typeof column?.uppercase === 'function') return column.uppercase('body-cell', column, rowIndex, content, rowData);\n return (column?.uppercase === 'true' || column?.uppercase === true);\n };\n\n const frozenLast = dataGrid?.leftFrozenColumns.length;\n\n const hasReadonlyClass = isReadonly();\n const hasDisabledClass = this.parentRow?.disabled || isColumnDisabled();\n const hasUppercaseClass = isUppercase();\n const hasInlineClass = column?.editor && column?.editor?.inline;\n const hoverable = ['textmask'].includes(column?.formatter?.name || '');\n const editorType = column.editor?.type;\n const formatterName = column.formatter?.name === 'rowReorder' ? 'row-reorder' : column.formatter?.name;\n\n let cssClasses = 'ids-data-grid-cell';\n cssClasses += editorType ? ` is-${editorType}` : '';\n cssClasses += column.excludeReadonlyStyling ? ' exclude-readonly-style' : '';\n cssClasses += hasReadonlyClass ? ' is-readonly' : '';\n cssClasses += hasDisabledClass ? ' is-disabled' : '';\n cssClasses += hasUppercaseClass ? ' is-uppercase' : '';\n cssClasses += isDirtyCell(rowData) ? ' is-dirty' : '';\n cssClasses += isInvalidCell(rowData) ? ' is-invalid' : '';\n cssClasses += column?.align ? ` align-${column?.align}` : '';\n cssClasses += column?.formatter?.name ? ` formatter-${formatterName}` : '';\n cssClasses += column?.frozen ? ` frozen frozen-${column?.frozen}${columnIndex + 1 === frozenLast ? ' frozen-last' : ''}` : '';\n cssClasses += column?.editor ? ` is-editable` : '';\n cssClasses += hoverable ? ` is-hoverable` : '';\n cssClasses += hasInlineClass && (!hasReadonlyClass || (hasReadonlyClass && !column.excludeReadonlyStyling)) ? ` is-inline` : '';\n cssClasses += formatterName === 'selectionCheckbox' ? ' is-editable' : '';\n cssClasses += column?.expandOnActivate ? ' is-expandable' : '';\n\n IdsDataGridCell.cellCache[cellCacheKey] = cssClasses;\n\n return cssClasses;\n }\n\n /**\n * Set the active cell for focus\n * @param {boolean} nofocus If true, do not focus the cell\n * @param {string} reason Reason the method was called (e.g. 'keyboard', 'mouse', 'redraw', 'internal', 'click')\n * @returns {object} the current active cell\n */\n activate(nofocus: boolean = false, reason?: IdsDataGridActivationReason): IdsDataGridCell {\n const previousActiveCell = this.dataGrid.activeCell.node;\n if (previousActiveCell === this && this.dataGrid.virtualScroll && this.isEditing) return this;\n\n if (previousActiveCell && previousActiveCell !== this) {\n this.dataGrid.collapseCell();\n }\n\n this.dataGrid.activeCell.node = this;\n\n if (this.column?.expandOnActivate) {\n this.dataGrid.expandCell(this.rowIndex, this.columnIndex);\n }\n\n if (!nofocus) {\n this.dataGrid.shadowRoot?.querySelector('ids-data-grid-cell[tabindex=\"0\"]')?.setAttribute('tabindex', '-1');\n this.tabIndex = 0;\n this.focus();\n }\n\n if (previousActiveCell === undefined || (previousActiveCell !== this && document.hasFocus())) {\n this.dataGrid.triggerEvent('activecellchanged', this.dataGrid, {\n detail: {\n elem: this, activeCell: this.dataGrid.activeCell, previousActiveCell, reason\n }\n });\n }\n return this;\n }\n\n /** Previous Value before Editing */\n originalValue: unknown;\n\n /** Previous Invalid state before reseting */\n previousInvalidState = '';\n\n /** If currently in edit mode */\n isEditing?:boolean;\n\n /**\n * Validate cell\n */\n validateCell() {\n const column = this.column;\n if (!column.editor) return;\n\n const columnEditor = this.dataGrid.editors.find((obj) => obj.type === column?.editor?.type);\n if (!columnEditor || !columnEditor.editor) return;\n\n this.originalValue = this.value;\n\n this.editor = columnEditor.editor;\n this.editor.init(this);\n\n const input = this.editor?.input as any;\n\n if (!input) return;\n\n const editorType = (this.editor?.type as string);\n input?.offEvent('focusout', input);\n input?.offEvent('close', input);\n\n if (['input', 'tree'].includes(editorType) && input?.setDirtyTracker) {\n input?.setDirtyTracker(input?.value as any);\n }\n\n if (['input', 'tree'].includes(editorType) && input?.checkValidation) {\n (<IdsInput>input)?.checkValidation();\n }\n\n if (editorType === 'dropdown') {\n (<IdsDropdown>input)?.input?.checkValidation();\n }\n\n if (editorType === 'timepicker' || editorType === 'datepicker') {\n (<IdsTriggerField>input)?.checkValidation();\n }\n\n const isValid = input?.isValid;\n const newValue = this.editor?.save(this);\n this.#saveCellValue(newValue?.value);\n\n if (!isValid) this.#saveValidState(input?.validationMessages);\n if (this.isInValid && isValid) this.#resetValidState();\n this.isInValid = !isValid;\n\n this.editor?.destroy(this);\n this.renderCell();\n }\n\n /**\n * Start Edit Mode\n * @param {MouseEvent} clickEvent event passed if activated by click (vs keyboard)\n * @param {boolean} trigger whether to trigger the beforecelledit event\n */\n startCellEdit(clickEvent?: MouseEvent, trigger: boolean = true) {\n // end previous cell edit\n if (this.dataGrid.activeCellEditor instanceof IdsDataGridCell && this.dataGrid.activeCellEditor !== this) {\n this.dataGrid.activeCellEditor.endCellEdit();\n }\n\n const column = this.column;\n if (!column.editor) return;\n const columnEditor = this.dataGrid.editors.find((obj) => obj.type === column?.editor?.type);\n if (!columnEditor || !columnEditor.editor || this.isEditing) return;\n\n // Init Editor\n let canEdit: any = !(this.classList.contains('is-readonly') || this.classList.contains('is-disabled'));\n if (!canEdit) {\n return;\n }\n\n if (trigger) {\n this.dataGrid.triggerEvent('beforecelledit', this.dataGrid, {\n detail: {\n elem: this,\n editor: this.editor,\n column,\n data: this.dataGrid.data[this.dataGrid.activeCell.row],\n response: (veto: boolean | Promise<void | boolean>) => {\n canEdit = veto;\n }\n }\n });\n }\n\n if (trigger && (canEdit instanceof Promise || canEdit?.constructor?.name === 'AsyncFunction')) {\n (canEdit instanceof Promise ? canEdit : canEdit())\n .then((veto?: boolean) => { if (veto !== false) this.#startCellEdit(column, columnEditor, clickEvent, trigger); })\n .catch(() => { /** ignore if promise rejected */ });\n } else if (!trigger || canEdit !== false) {\n this.#startCellEdit(column, columnEditor, clickEvent, trigger);\n }\n }\n\n /* Start Cell Edit */\n #startCellEdit(\n column: IdsDataGridColumn,\n columnEditor: { type: string, editor?: IdsDataGridEditor },\n clickEvent?: MouseEvent,\n trigger: boolean = true\n ) {\n if (!columnEditor || !columnEditor.editor || this.isEditing) return;\n\n this.detachTooltipEvents();\n this.originalValue = this.value;\n this.editor = columnEditor.editor;\n this.editor.clickEvent = clickEvent;\n\n const editorType = this.editor.type;\n // Override original value if dropdown\n if (editorType === 'dropdown') {\n this.originalValue = this.querySelector('[data-value]')?.getAttribute('data-value');\n }\n\n this.classList.add('is-editing');\n this.editor.init(this);\n\n const expandButton = this.querySelector('.expand-button');\n if (expandButton) {\n expandButton.removeAttribute('disabled');\n this.offEvent('mousedown', expandButton);\n this.onEvent('mousedown', expandButton, (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n this.endCellEdit();\n const row = this.parentElement as IdsDataGridRow;\n row?.toggleExpandCollapse();\n });\n }\n\n // Set states\n if (this.classList.contains('is-invalid')) {\n this.classList.remove('is-invalid');\n this.isInValid = true;\n }\n if (column.editor?.inline) this.classList.add('is-inline');\n this.isEditing = true;\n\n // Pass column text alignment rules into the cell editor\n if (column.align) {\n let columnAlign = column.align;\n if (columnAlign === 'left') columnAlign = 'start';\n if (columnAlign === 'right') columnAlign = 'end';\n this.editor?.input?.setAttribute('text-align', `${columnAlign}`);\n }\n\n // Save on Click Out Event\n if (['datepicker', 'timepicker', 'lookup'].includes(editorType)) {\n // When the popup is closed, end the edit\n this.editor.input?.onEvent('focusout', this.editor.input, () => {\n requestAnimationFrame(() => {\n if (this.editor?.popup?.visible || this.contains(this.dataGrid!.shadowRoot!.activeElement)) return;\n this.tabIndex = -1;\n });\n });\n\n // When the popup is closed, end the edit\n this.onEvent('hide.popup', this.editor?.popup, () => {\n this.offEvent('hide.popup');\n this.endCellEdit();\n this.focus();\n });\n } else if (editorType === 'dropdown') {\n this.editor.input?.onEvent('close', this.editor.input, () => {\n this.endCellEdit();\n this.focus();\n });\n } else if (editorType === 'password') {\n const maskIcon = this.querySelector('ids-icon');\n\n // stop events when clicking the maskIcon to prevent deselecting the input when editing\n this.offEvent('mousedown', maskIcon);\n this.onEvent('mousedown', maskIcon, (e) => {\n e.stopPropagation();\n e.preventDefault();\n });\n\n this.editor.input?.onEvent('focusout', this.editor.input, () => {\n this.dataGrid.clearActiveCellCache(true);\n this.endCellEdit();\n });\n } else {\n this.editor.input?.onEvent('focusout', this.editor.input, () => {\n this.dataGrid.clearActiveCellCache(true);\n this.endCellEdit();\n });\n }\n\n this.onEvent('keyup', this.editor?.input, () => {\n this.dataGrid.updateActiveCellCache(this.row, this.columnIndex, this.editor?.input?.value || '', true);\n });\n\n this.onEvent('keydown', this.editor?.input, (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n this.dataGrid.clearActiveCellCache();\n }\n });\n\n this.onEvent('focusout.endcelledit', this.dataGrid, () => {\n if (!this.dataGrid.contains(document.activeElement)) {\n this.endCellEdit();\n }\n });\n\n if (trigger) {\n this.dataGrid?.triggerEvent('celledit', this.dataGrid, {\n detail: {\n elem: this, editor: this.editor, column, data: this.dataGrid.data[this.row]\n }\n });\n }\n\n // Add a small delay before starting new edit to ensure cleanup\n this.dataGrid.activeCellEditor = this;\n }\n\n /* End Cell Edit */\n endCellEdit() {\n const column = this.column;\n const input = this.editor?.input as any;\n\n if (!input) return;\n\n this.offEvent('focusout.endcelledit', this.dataGrid);\n this.offEvent('keydown', this.editor?.input);\n this.offEvent('keyup', this.editor?.input);\n\n const editorType = (this.editor?.type as string);\n input?.offEvent('focusout', input);\n input?.offEvent('close', input);\n\n if (['input', 'tree'].includes(editorType) && input?.setDirtyTracker) {\n input?.setDirtyTracker(input?.value as any);\n }\n\n if (['input', 'tree'].includes(editorType) && input?.checkValidation) {\n (<IdsInput>input)?.checkValidation();\n }\n\n if (editorType === 'dropdown') {\n (<IdsDropdown>input)?.input?.checkValidation();\n }\n\n if (editorType === 'lookup') {\n (<IdsLookup>input)?.input?.checkValidation();\n }\n\n if (editorType === 'timepicker' || editorType === 'datepicker') {\n (<IdsTriggerField>input)?.checkValidation();\n }\n\n const isDirty = column.editor?.editorSettings?.dirtyTracker && (input?.isDirty || input?.input.isDirty);\n const isDirtyCheckbox = column.editor?.editorSettings?.dirtyTracker && editorType === 'checkbox' && input?.isDirty;\n\n // combobox accepts anything\n const isComboBox = column.editor?.editorSettings?.comboBox ?? false;\n\n const isValid = input?.isValid;\n const newValue = this.editor?.save(this);\n this.#saveCellValue(newValue?.value);\n\n // Save dirty and valid state on the row\n if ((isDirty || isDirtyCheckbox) && !isComboBox) this.#saveDirtyState(newValue?.dirtyCheckValue ?? newValue?.value);\n if (!isValid && !isComboBox) this.#saveValidState(input?.validationMessages);\n if (this.isInValid && isValid && !isComboBox) this.#resetValidState();\n this.isInValid = !isComboBox ? !isValid : false;\n this.editor?.destroy(this);\n this.renderCell();\n this.isEditing = false;\n this.classList.remove('is-editing');\n\n // Reset focus and tabindex\n this.tabIndex = -1;\n this.blur();\n\n this.dataGrid?.triggerEvent('endcelledit', this.dataGrid, {\n detail: {\n elem: this, editor: this.editor, column, data: this.dataGrid.data[this.row]\n }\n });\n this.detachTooltipEvents();\n this.dataGrid.activeCellEditor = undefined;\n this.dataGrid.openMenu = null;\n }\n\n /* Cancel Cell Edit */\n cancelCellEdit() {\n const column = this.column;\n const input = this.editor?.input as any;\n input?.offEvent('focusout', input);\n input?.setDirtyTracker(input?.value as any);\n\n this.dataGrid?.updateDataset(this.row, { [String(column?.field)]: this.originalValue });\n this.editor?.destroy(this);\n this.renderCell();\n this.isEditing = false;\n this.classList.remove('is-editing');\n\n this.dataGrid?.triggerEvent('cancelcelledit', this.dataGrid, {\n detail: {\n elem: this,\n editor: this.editor,\n column,\n data: this.dataGrid.data[this.row],\n oldValue: this.originalValue\n }\n });\n this.dataGrid.activeCellEditor = undefined;\n this.dataGrid.openMenu = null;\n }\n\n /**\n * Save cell Edit Back into data set\n * @param {any} newValue the value to coerce and save\n */\n #saveCellValue(newValue: any) {\n const column = this.column;\n this.dataGrid.resetCache(this.dataGrid?.activeCell.row);\n if (column.editor?.editorSettings?.mask === 'date') {\n newValue = this.dataGrid.localeAPI.parseDate(newValue, column.formatOptions);\n }\n this.dataGrid?.updateDataset(this.row, {\n [String(column?.field)]: newValue,\n });\n }\n\n /**\n * Save the dirty state info on the row\n * @param {boolean} newValue the current value\n * @param {boolean} programmaticUpdate if true, the value was changed by a progammaticUpdate update\n */\n #saveDirtyState(newValue: any, programmaticUpdate = false) {\n let rowDirtyCells = this.dataGrid.data[this.row].dirtyCells;\n if (rowDirtyCells === undefined) rowDirtyCells = [];\n const cell = Number(this.getAttribute('aria-colindex')) - 1;\n const previousCellInfo = rowDirtyCells.filter((item: any) => item.cell === cell);\n\n if (previousCellInfo[0] && newValue === previousCellInfo[0].originalValue) {\n const oldIndex = rowDirtyCells.findIndex((item: any) => item.cell === cell);\n rowDirtyCells.splice(oldIndex, 1);\n // Value was reset\n this?.classList.remove('is-dirty');\n this.dataGrid?.updateDataset(this.row, {\n dirtyCells: rowDirtyCells\n });\n return;\n }\n\n this?.classList.add('is-dirty');\n\n if (previousCellInfo.length === 0) {\n const originalValue = this?.editor?.type === 'checkbox' || programmaticUpdate ? this.originalValue : (this?.editor?.input as any)?.dirty?.original;\n\n rowDirtyCells.push({\n cell: Number(this?.getAttribute('aria-colindex')) - 1,\n columnId: this.column.id,\n originalValue,\n });\n this.dataGrid?.updateDataset(this.row, {\n dirtyCells: rowDirtyCells\n });\n }\n }\n\n /**\n * Track value changes for dirty tracking\n * @param {any} newValue the new value\n * @param {boolean} programmaticUpdate if true, the value was changed by a programmatic update\n */\n trackValueChange(newValue: any, programmaticUpdate = false) {\n this.#saveDirtyState(newValue, programmaticUpdate);\n }\n\n /**\n * Save the validation state info on the row\n * @param {any} validationMessages the current value\n */\n #saveValidState(validationMessages: any) {\n let rowInvalidCells = this.dataGrid.data[this.row].invalidCells;\n if (!rowInvalidCells) rowInvalidCells = [];\n const cell = Number(this.getAttribute('aria-colindex')) - 1;\n const previousCellInfo = rowInvalidCells.filter((item: any) => item.cell === cell);\n\n this?.classList.add('is-invalid');\n\n if (previousCellInfo.length === 0) {\n this.previousInvalidState = validationMessages.id;\n rowInvalidCells.push({\n cell: Number(this?.getAttribute('aria-colindex')) - 1,\n columnId: this.column.id,\n validationMessages\n });\n this.dataGrid?.updateDataset(this.row, {\n invalidCells: rowInvalidCells\n });\n }\n }\n\n /**\n * Set back the valid state\n */\n #resetValidState() {\n this?.classList.remove('is-invalid');\n this.dataGrid?.updateDataset(this.row, {\n invalidCells: undefined\n });\n this.isInValid = false;\n }\n\n // NOTE: check memory footprint of this caching strategy\n static cellCache: { [key: string]: string } = {};\n\n /**\n * Return the Template for the cell contents\n * @param {object} rowData The data item for the row\n * @param {object} column The column data for the row\n * @param {object} rowIndex The running row-index\n * @param {IdsDataGrid} dataGrid The dataGrid instance\n * @returns {string} The template to display\n */\n static template(\n rowData: Record<string, unknown>,\n column: IdsDataGridColumn,\n rowIndex: number,\n dataGrid: IdsDataGrid\n ): string {\n const cacheKey = IdsDataGridCell.cacheKey(rowIndex, rowData, column, dataGrid);\n // combobox accepts anything\n const isComboBox = column.editor?.editorSettings?.comboBox ?? false;\n\n // NOTE: This is how we could disable cache until a proper cache-busting strategy is in place\n // delete IdsDataGridCell.cellCache[cacheKey];\n\n // NOTE: this type of param-based caching is good for upscroll when revisiting rows that have been seen already.\n // NOTE: we also need a content-cache that caches based on the actual data that's being rendered\n // NOTE: content-cache should probably be done in the IdsDataGridFormatters class\n if (!IdsDataGridCell.cellCache[cacheKey]) {\n const dataGridFormatters = (dataGrid.formatters as any);\n let template = '';\n\n if (!dataGridFormatters[column?.formatter?.name || 'text'] && column?.formatter) template = column?.formatter(rowData, column, rowIndex, dataGrid);\n else template = dataGridFormatters[column?.formatter?.name || 'text'](rowData, column, rowIndex, dataGrid);\n\n if (rowData.invalidCells && !isComboBox) {\n const message = (rowData.invalidCells as any).find((info: any) => info.cell === dataGrid.columnIdxById(column.id));\n if (message) template += `<ids-alert icon=\"error\" tooltip=\"${message?.validationMessages[0]?.message}\"></ids-alert>`;\n }\n IdsDataGridCell.cellCache[cacheKey] = template;\n }\n\n return IdsDataGridCell.cellCache[cacheKey];\n }\n\n /**\n * Return cache key of current cell\n * @param {number} rowIndex number\n * @param {object} rowData The data item for the row\n * @param {object} column The column data for the row\n * @param {IdsDataGrid} dataGrid The dataGrid instance\n * @returns {string} Cache key\n */\n static cacheKey(\n rowIndex: number,\n rowData: Record<string, unknown>,\n column: IdsDataGridColumn,\n dataGrid: IdsDataGrid\n ): string {\n const cacheHash = dataGrid.cacheHash;\n const selected = rowData.rowSelected ? dataGrid.cacheSelected : dataGrid.cacheDeselected;\n const expanded = rowData.rowExpanded ? dataGrid.cacheExpanded : dataGrid.cacheCollapsed;\n return `${cacheHash}:${column.id}:${rowIndex}:${selected}:${expanded}`;\n }\n\n /**\n * Clears cell cache\n */\n clearCache() {\n const dataGrid = this.dataGrid;\n const rowIndex = Number(this.parentElement?.getAttribute('row-index'));\n const row = dataGrid.data[rowIndex] as any;\n const cacheKey = IdsDataGridCell.cacheKey(rowIndex, row, this.column, dataGrid);\n\n delete IdsDataGridCell.cellCache[cacheKey];\n }\n\n /**\n * Refreshes the cell\n */\n refreshCell() {\n this.clearCache();\n this.renderCell();\n }\n\n /**\n * Checks on the cell editor to see if its current state allows it to be closed.\n * @returns {boolean} true if the cell editor is able to \"close\"\n */\n canClose(): boolean {\n if (this.isEditing) return false;\n if (this.editor?.popup?.visible) return false;\n if (this.column?.editor?.inline) return false;\n\n return true;\n }\n\n /**\n * Removes all tooltip-related event listeners from the data grid cell\n * @private\n * @description Detaches hover, click, popup, longpress, and focus events\n * associated with the tooltip functionality\n */\n detachTooltipEvents() {\n this.dataGrid.tooltip?.offEvent('hoverend.tooltip', this);\n this.dataGrid.tooltip?.offEvent('click.tooltip', this);\n this.dataGrid.tooltip?.offEvent('click.popup', this.dataGrid.tooltip?.popup);\n this.dataGrid.tooltip?.offEvent('longpress.tooltip', this);\n this.dataGrid.tooltip?.offEvent('focusin.tooltip', this);\n this.dataGrid.tooltip?.offEvent('focus.keyboardfocus', this);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { customElement } from '../../core/ids-decorators';\nimport IdsElement from '../../core/ids-element';\nimport IdsEventsMixin from '../../mixins/ids-events-mixin/ids-events-mixin';\nimport { IdsDirection } from '../../core/ids-attributes';\nimport type IdsDataGrid from './ids-data-grid';\nimport type IdsDropdown from '../ids-dropdown/ids-dropdown';\nimport type IdsInput from '../ids-input/ids-input';\nimport type IdsLookup from '../ids-lookup/ids-lookup';\nimport type IdsTriggerField from '../ids-trigger-field/ids-trigger-field';\nimport type { IdsDataGridColumn } from './ids-data-grid-column';\nimport type IdsDataGridRow from './ids-data-grid-row';\nimport { IdsDataGridEditor } from './ids-data-grid-editors';\n\nexport type IdsDataGridActivationReason = 'keyboard' | 'method' | 'internal' | 'redraw' | 'mouse' | 'click';\n\n@customElement('ids-data-grid-cell')\nexport default class IdsDataGridCell extends IdsEventsMixin(IdsElement) {\n rootNode?: any;\n\n isInValid = false;\n\n /** The editor element */\n editor?: IdsDataGridEditor;\n\n constructor() {\n super({ noShadowRoot: true });\n }\n\n connectedCallback(): void {\n // NOTE: bypassing super.connectedCallback() for performance reasons\n this.renderCell();\n this.tabIndex = this.rowIndex === 0 && this.columnIndex === 0 ? 0 : -1;\n this.setAttribute('tabindex', String(this.tabIndex));\n\n this.addEventListener('focus', this.onFocus);\n\n if (this.isDraggable) {\n this.parentRow?.setAttribute('draggable', 'true');\n }\n }\n\n get parentRow(): IdsDataGridRow | null {\n return this.parentElement as IdsDataGridRow;\n }\n\n onFocus() {\n this.dataGrid.lastActiveCell = this.activate(false, 'keyboard');\n this.dataGrid.offEvent('blur.ids-data-grid-cell', this);\n this.dataGrid.onEvent('blur.ids-data-grid-cell', this, this.onBlur);\n }\n\n onBlur() {\n this.dataGrid.offEvent('focus.ids-data-grid-cell', this);\n this.dataGrid.offEvent('blur.ids-data-grid-cell', this);\n }\n\n disconnectedCallback() {\n // NOTE: bypassing super.disconnectedCallback() for performance reasons\n this.offEvent('focusin.ids-cell', this);\n this.offEvent('focusout.ids-cell', this);\n }\n\n get isDraggable(): boolean {\n return this.formatter?.name === 'rowReorder';\n }\n\n get isEditable(): boolean {\n if (this.classList.contains('is-readonly') || this.classList.contains('is-disabled')) return false;\n\n const column = this.column;\n if (column.formatter?.name === 'selectionCheckbox') return true;\n\n if (!column.editor) return false;\n const columnEditor = this.dataGrid.editors.find((editor) => editor.type === column?.editor?.type);\n return !!columnEditor?.editor;\n }\n\n /**\n * Reference to the data grid parent\n * @returns {IdsDataGrid} the data grid parent\n */\n get dataGrid() {\n if (!this.rootNode) this.rootNode = (this.getRootNode() as any).host;\n return (this.rootNode) as IdsDataGrid;\n }\n\n /**\n * Gets data grid row below this cell\n * @returns {IdsDataGridRow} row below\n */\n get rowBelow(): IdsDataGridRow | null {\n if (this.dataGrid.treeGrid) {\n let nextRow = this.parentElement?.nextElementSibling as IdsDataGridRow;\n\n // traverse nextElementSiblings until visible row is found\n while (nextRow?.hasAttribute('hidden')) {\n nextRow = nextRow?.nextElementSibling as IdsDataGridRow;\n }\n\n return nextRow ?? null;\n }\n\n return this.dataGrid.rowByIndex(this.rowIndex + 1) ?? null;\n }\n\n /**\n * Gets data grid row above this cell\n * @returns {IdsDataGridRow} row above\n */\n get rowAbove(): IdsDataGridRow | null {\n if (this.dataGrid.treeGrid) {\n let prevRow = this.parentElement?.previousElementSibling as IdsDataGridRow;\n\n // traverse previousElementSiblings until visible row is found\n while (prevRow?.hasAttribute('hidden')) {\n prevRow = prevRow?.previousElementSibling as IdsDataGridRow;\n }\n\n return prevRow ?? null;\n }\n\n return this.dataGrid.rowByIndex(this.rowIndex - 1) ?? null;\n }\n\n /**\n * Get the cell above this cell\n * @returns {IdsDataGridCell | null} the cell above this cell\n */\n get cellAbove(): IdsDataGridCell | null {\n return this.dataGrid?.findNextNavigableCell(this, IdsDirection.Up) ?? null;\n }\n\n /**\n * Get the cell below this cell\n * @returns {IdsDataGridCell | null} the cell below this cell\n */\n get cellBelow(): IdsDataGridCell | null {\n return this.dataGrid?.findNextNavigableCell(this, IdsDirection.Down) ?? null;\n }\n\n /**\n * Get the cell to the left of this cell\n * @returns {IdsDataGridCell | null} the cell to the left of this cell\n */\n get cellLeft(): IdsDataGridCell | null {\n return this.dataGrid?.findNextNavigableCell(this, IdsDirection.Left) ?? null;\n }\n\n /**\n * Get the cell to the right of this cell\n * @returns {IdsDataGridCell | null} the cell to the right of this cell\n */\n get cellRight(): IdsDataGridCell | null {\n return this.dataGrid?.findNextNavigableCell(this, IdsDirection.Right) ?? null;\n }\n\n /**\n * Get the next editable cell to the left of this cell\n * @returns {IdsDataGridCell | null} the next editabled cell to the left of this cell\n */\n get cellLeftEditable(): IdsDataGridCell | null {\n if (!this.dataGrid?.isEditable) return null;\n if (this?.columnIndex === 0 && this?.rowIndex === 0) return null;\n\n let nextCell = this.cellLeft;\n const maxColumns = this.dataGrid?.visibleColumns?.length || 0;\n let attempts = 0;\n\n while (nextCell && !nextCell.isEditable && attempts < maxColumns) {\n nextCell = nextCell.cellLeft;\n attempts++;\n }\n\n // If we've tried all columns and found no editable cell, return null\n if (attempts >= maxColumns || !nextCell?.isEditable) {\n return null;\n }\n\n return nextCell;\n }\n\n /**\n * Get the next editable cell to the right of this cell\n * @returns {IdsDataGridCell | null} the next editabled cell to the right of this cell\n */\n get cellRightEditable(): IdsDataGridCell | null {\n if (!this.dataGrid?.isEditable) return null;\n\n let nextCell = this.cellRight;\n const maxColumns = this.dataGrid?.visibleColumns?.length || 0;\n let attempts = 0;\n\n while (nextCell && !nextCell.isEditable && attempts < maxColumns) {\n nextCell = nextCell.cellRight;\n attempts++;\n }\n\n // If we've tried all columns and found no editable cell, return null\n if (attempts >= maxColumns || !nextCell?.isEditable) {\n return null;\n }\n\n return nextCell;\n }\n\n /**\n * Update this cell's dataset and refresh\n * @param {string} value the new data for the cell\n * @param {boolean} refresh if true, rerender the cell\n */\n updateData(value: string, refresh = true) {\n const rowIndex = this.rowIndex;\n const record = this.dataGrid?.data[rowIndex];\n const columnIndex = this.columnIndex;\n\n // a cell exists in a row of a visible-columns\n const visibleColumns = this.dataGrid?.visibleColumns;\n\n const column = visibleColumns[columnIndex];\n if (!column?.field) return;\n\n const updatedRecord = {\n ...record,\n [column.field]: value,\n };\n\n this.editor?.change?.(value);\n\n if (refresh) {\n this.dataGrid?.updateDatasetAndRefresh?.(this.rowIndex, updatedRecord, false);\n } else {\n this.dataGrid?.updateDataset?.(this.rowIndex, updatedRecord, false);\n }\n }\n\n // Add memoization for frequently accessed properties\n #memoizedColumn?: IdsDataGridColumn;\n\n // Add memoization for frequently accessed properties\n #memoizedColumnIndex?: number;\n\n /**\n * Get the column definition\n * @returns {IdsDataGridColumn} the current cells column\n */\n get column() {\n if (!this.#memoizedColumn || this.columnIndex !== this.#memoizedColumnIndex) {\n this.#memoizedColumn = this.dataGrid?.visibleColumns[this.columnIndex];\n this.#memoizedColumnIndex = this.columnIndex;\n }\n return this.#memoizedColumn;\n }\n\n /**\n * Get the column header cell element\n * @returns {IdsDataGridColumn} the current cells column\n */\n get columnHeader() {\n return this.dataGrid?.header?.columns[this.columnIndex];\n }\n\n /**\n * Gets the column # in which this cell exists\n * @returns {number} the column-index\n */\n get columnIndex(): number {\n return Number(this.getAttribute?.('aria-colindex') ?? 1) - 1;\n }\n\n /**\n * Gets the row-index # in which this cell exists\n * @returns {number} the row-index\n */\n get rowIndex(): number {\n return Number(this.parentElement?.getAttribute?.('row-index') ?? -1);\n }\n\n get formatter(): IdsDataGridColumn['formatter'] {\n return this.column?.formatter;\n }\n\n /**\n * Get row of table cell\n * @returns {number} table row index\n */\n get row(): number {\n return this.rowIndex;\n }\n\n /**\n * Get data value of this cell\n * @returns {any} the data value of this cell\n */\n get value(): any {\n // NOTE: the editor is a singleton, so we must ensure the input is still in this cell's DOM.\n if (this.editor && this.contains(this.editor?.input ?? null)) {\n return this.editor?.value?.();\n }\n\n const column = this.dataGrid?.visibleColumns?.[this.columnIndex];\n const record = this.dataGrid?.data?.[this.rowIndex];\n\n return record?.[(column?.field ?? -1)] ?? this.textContent ?? '';\n }\n\n /**\n * Get the default/original value of this cell\n * @returns {any} the default value of this cell\n */\n get defaultValue(): any {\n const column = this.dataGrid?.visibleColumns?.[this.columnIndex];\n const record = this.dataGrid?.data?.[this.rowIndex];\n const dirtyCells = record?.dirtyCells ?? [];\n return dirtyCells.find((row: Record<string, any>) => row?.columnId === column?.id)?.originalValue ?? this.value;\n }\n\n /**\n * Rerender a cell - may be used later\n */\n renderCell() {\n const dataGrid = this.dataGrid;\n\n const rowIndex = this.rowIndex;\n const rowData: Record<string, any> | undefined = dataGrid?.data[rowIndex];\n\n if (rowData?.isGroupRow) return;\n\n if (dataGrid.virtualScroll) {\n const tooManyColumns = dataGrid.columns.length > dataGrid.TOO_MANY_COLUMNS;\n\n const columnsStale = dataGrid.hasAttribute('columns-stale');\n const columnsFresh = !columnsStale;\n\n const columnHeaders = this.columnHeader;\n const columnOffScreen = columnHeaders?.hasAttribute('column-offscreen');\n\n if (tooManyColumns && columnsFresh && columnOffScreen) {\n // NOTE: skip renderCell if cell is NOT on-screen\n return;\n }\n\n const columnOnScreen = columnHeaders?.hasAttribute('column-onscreen');\n const columnOffScreenLeft = columnHeaders?.hasAttribute('column-offscreen-left');\n const columnOffScreenRight = columnHeaders?.hasAttribute('column-offscreen-right');\n this.toggleAttribute('column-onscreen', columnOnScreen);\n this.toggleAttribute('column-offscreen', columnOffScreen);\n this.toggleAttribute('column-offscreen-left', columnOffScreenLeft);\n this.toggleAttribute('column-offscreen-right', columnOffScreenRight);\n }\n\n const column = this.column;\n const columnIndex = this.columnIndex;\n\n const template = IdsDataGridCell.template(rowData, column, rowIndex, dataGrid);\n if (this.innerHTML !== template) {\n try {\n this.innerHTML = template;\n } catch (e) {\n requestAnimationFrame(() => {\n this.innerHTML = template;\n });\n }\n }\n const cssClasses = this?.cellCssClasses(column, columnIndex, template) ?? '';\n\n if (cssClasses) {\n this.classList.remove(...this.classList);\n this.classList.add(...cssClasses.split(' '));\n }\n\n const cssPart = this?.cellCssPart(column, columnIndex) ?? '';\n if (cssPart) this.setAttribute('part', cssPart);\n\n if (dataGrid.lastActiveCell?.cell === columnIndex && dataGrid.lastActiveCell?.row === rowIndex) {\n this.onFocus();\n }\n }\n\n /**\n * Return the cells' css part\n * @param {IdsDataGridColumn} column - the column definition\n * @param {number} columnIndex - the column index\n * @returns {string} The css part string for the cell\n */\n cellCssPart(column: IdsDataGridColumn, columnIndex: number): string {\n const dataGrid = this.dataGrid;\n const rowIndex = this.rowIndex;\n const rowData = dataGrid.data[rowIndex];\n\n const cacheKey = IdsDataGridCell.cacheKey(rowIndex, rowData, column, dataGrid);\n const cellCacheKey = `${cacheKey}:${dataGrid.cacheCellPart}`;\n\n if (IdsDataGridCell.cellCache[cellCacheKey]) {\n return IdsDataGridCell.cellCache[cellCacheKey];\n }\n\n let part = column.cssPart || 'cell';\n const rowSelection = dataGrid?.rowSelection;\n const isSelectable = rowSelection === 'mixed' || rowSelection === 'single' || rowSelection === 'multiple';\n if (isSelectable && rowData.rowSelected) {\n if (column.cellSelectedCssPart) part = column.cellSelectedCssPart;\n else part = 'cell-selected';\n }\n\n if (typeof part === 'function') {\n part = part({\n rowIndex,\n columnIndex,\n recordIndex: this.parentRow?.recordIndex ?? null,\n rowData\n });\n }\n\n IdsDataGridCell.cellCache[cellCacheKey] = part;\n\n return part;\n }\n\n /**\n * Return the cells' css classes\n * @param {IdsDataGridColumn} column - the column definition\n * @param {number} columnIndex - the column index\n * @param {string} content - the cells html or text content\n * @returns {string} The classList string for the cell\n */\n cellCssClasses(column: IdsDataGridColumn, columnIndex: number, content: string): string {\n const dataGrid = this.dataGrid;\n const rowIndex = this.rowIndex;\n const rowData = dataGrid.data[rowIndex];\n\n const cacheKey = IdsDataGridCell.cacheKey(rowIndex, rowData, column, dataGrid);\n const cellCacheKey = `${cacheKey}:${dataGrid.cacheCellClass}`;\n\n if (IdsDataGridCell.cellCache[cellCacheKey]) {\n return IdsDataGridCell.cellCache[cellCacheKey];\n }\n\n const isDirtyCell = (currentRow: Record<string, unknown>): boolean => {\n if (!currentRow.dirtyCells) return false;\n return (currentRow.dirtyCells as any).findIndex((item: any) => item.cell === columnIndex) !== -1;\n };\n\n const isInvalidCell = (currentRow: Record<string, unknown>): boolean => {\n if (!currentRow.invalidCells) return false;\n return (currentRow.invalidCells as any).findIndex((item: any) => item.cell === columnIndex) !== -1;\n };\n\n const isReadonly = (): boolean => {\n if (column.readonly && column?.readonly === true) return true;\n if (typeof column?.readonly === 'function') return column?.readonly(rowIndex, content, column, rowData);\n return false;\n };\n\n const isColumnDisabled = (): boolean => {\n if (!column?.disabled) return false;\n if (typeof column?.disabled === 'function') return column?.disabled(rowIndex, content, column, rowData);\n if (typeof column?.disabled === 'boolean') return column?.disabled;\n return false;\n };\n\n const isUppercase = (): boolean => {\n if (typeof column?.uppercase === 'function') return column.uppercase('body-cell', column, rowIndex, content, rowData);\n return (column?.uppercase === 'true' || column?.uppercase === true);\n };\n\n const frozenLast = dataGrid?.leftFrozenColumns.length;\n\n const hasReadonlyClass = isReadonly();\n const hasDisabledClass = this.parentRow?.disabled || isColumnDisabled();\n const hasUppercaseClass = isUppercase();\n const hasInlineClass = column?.editor && column?.editor?.inline;\n const hoverable = ['textmask'].includes(column?.formatter?.name || '');\n const editorType = column.editor?.type;\n const formatterName = column.formatter?.name === 'rowReorder' ? 'row-reorder' : column.formatter?.name;\n\n let cssClasses = 'ids-data-grid-cell';\n cssClasses += editorType ? ` is-${editorType}` : '';\n cssClasses += column.excludeReadonlyStyling ? ' exclude-readonly-style' : '';\n cssClasses += hasReadonlyClass ? ' is-readonly' : '';\n cssClasses += hasDisabledClass ? ' is-disabled' : '';\n cssClasses += hasUppercaseClass ? ' is-uppercase' : '';\n cssClasses += isDirtyCell(rowData) ? ' is-dirty' : '';\n cssClasses += isInvalidCell(rowData) ? ' is-invalid' : '';\n cssClasses += column?.align ? ` align-${column?.align}` : '';\n cssClasses += column?.formatter?.name ? ` formatter-${formatterName}` : '';\n cssClasses += column?.frozen ? ` frozen frozen-${column?.frozen}${columnIndex + 1 === frozenLast ? ' frozen-last' : ''}` : '';\n cssClasses += column?.editor ? ` is-editable` : '';\n cssClasses += hoverable ? ` is-hoverable` : '';\n cssClasses += hasInlineClass && (!hasReadonlyClass || (hasReadonlyClass && !column.excludeReadonlyStyling)) ? ` is-inline` : '';\n cssClasses += formatterName === 'selectionCheckbox' ? ' is-editable' : '';\n cssClasses += column?.expandOnActivate ? ' is-expandable' : '';\n\n IdsDataGridCell.cellCache[cellCacheKey] = cssClasses;\n\n return cssClasses;\n }\n\n /**\n * Set the active cell for focus\n * @param {boolean} nofocus If true, do not focus the cell\n * @param {string} reason Reason the method was called (e.g. 'keyboard', 'mouse', 'redraw', 'internal', 'click')\n * @returns {object} the current active cell\n */\n activate(nofocus: boolean = false, reason?: IdsDataGridActivationReason): IdsDataGridCell {\n const previousActiveCell = this.dataGrid.activeCell.node;\n if (previousActiveCell === this && this.dataGrid.virtualScroll && this.isEditing) return this;\n\n if (previousActiveCell && previousActiveCell !== this) {\n this.dataGrid.collapseCell();\n }\n\n this.dataGrid.activeCell.node = this;\n\n if (this.column?.expandOnActivate) {\n this.dataGrid.expandCell(this.rowIndex, this.columnIndex);\n }\n\n if (!nofocus) {\n this.dataGrid.shadowRoot?.querySelector('ids-data-grid-cell[tabindex=\"0\"]')?.setAttribute('tabindex', '-1');\n this.tabIndex = 0;\n this.focus();\n }\n\n if (previousActiveCell === undefined || (previousActiveCell !== this && document.hasFocus())) {\n this.dataGrid.triggerEvent('activecellchanged', this.dataGrid, {\n detail: {\n elem: this, activeCell: this.dataGrid.activeCell, previousActiveCell, reason\n }\n });\n }\n return this;\n }\n\n /** Previous Value before Editing */\n originalValue: unknown;\n\n /** Previous Invalid state before reseting */\n previousInvalidState = '';\n\n /** If currently in edit mode */\n isEditing?:boolean;\n\n /**\n * Validate cell\n */\n validateCell() {\n const column = this.column;\n if (!column.editor) return;\n\n const columnEditor = this.dataGrid.editors.find((obj) => obj.type === column?.editor?.type);\n if (!columnEditor || !columnEditor.editor) return;\n\n this.originalValue = this.value;\n\n this.editor = columnEditor.editor;\n this.editor.init(this);\n\n const input = this.editor?.input as any;\n\n if (!input) return;\n\n const editorType = (this.editor?.type as string);\n input?.offEvent('focusout', input);\n input?.offEvent('close', input);\n\n if (['input', 'tree'].includes(editorType) && input?.setDirtyTracker) {\n input?.setDirtyTracker(input?.value as any);\n }\n\n if (['input', 'tree'].includes(editorType) && input?.checkValidation) {\n (<IdsInput>input)?.checkValidation();\n }\n\n if (editorType === 'dropdown') {\n (<IdsDropdown>input)?.input?.checkValidation();\n }\n\n if (editorType === 'timepicker' || editorType === 'datepicker') {\n (<IdsTriggerField>input)?.checkValidation();\n }\n\n const isValid = input?.isValid;\n const newValue = this.editor?.save(this);\n this.#saveCellValue(newValue?.value);\n\n if (!isValid) this.#saveValidState(input?.validationMessages);\n if (this.isInValid && isValid) this.#resetValidState();\n this.isInValid = !isValid;\n\n this.editor?.destroy(this);\n this.renderCell();\n }\n\n /**\n * Start Edit Mode\n * @param {MouseEvent} clickEvent event passed if activated by click (vs keyboard)\n * @param {boolean} trigger whether to trigger the beforecelledit event\n */\n startCellEdit(clickEvent?: MouseEvent, trigger: boolean = true) {\n // Skip editing if the cell's row is not visible in the viewport (virtual scroll recycled it)\n if (this.dataGrid.virtualScroll && this.rowIndex !== undefined) {\n const container = this.dataGrid.container;\n if (container) {\n const rowHeight = this.dataGrid.virtualScrollSettings?.ROW_HEIGHT || 30;\n const scrollTop = container.scrollTop || 0;\n const containerHeight = container.clientHeight || 0;\n const effectiveRowIndex = this.dataGrid.treeGrid\n ? this.dataGrid.virtualRows.findIndex((row) => row === this.dataGrid.data[this.rowIndex])\n : this.rowIndex;\n if (effectiveRowIndex === -1) return;\n const rowTop = effectiveRowIndex * rowHeight;\n const rowBottom = rowTop + rowHeight;\n if (rowBottom < scrollTop || rowTop > scrollTop + containerHeight) {\n return;\n }\n }\n }\n\n // end previous cell edit\n if (this.dataGrid.activeCellEditor instanceof IdsDataGridCell && this.dataGrid.activeCellEditor !== this) {\n this.dataGrid.activeCellEditor.endCellEdit();\n }\n\n const column = this.column;\n if (!column.editor) return;\n const columnEditor = this.dataGrid.editors.find((obj) => obj.type === column?.editor?.type);\n if (!columnEditor || !columnEditor.editor || this.isEditing) return;\n\n // Init Editor\n let canEdit: any = !(this.classList.contains('is-readonly') || this.classList.contains('is-disabled'));\n if (!canEdit) {\n return;\n }\n\n if (trigger) {\n this.dataGrid.triggerEvent('beforecelledit', this.dataGrid, {\n detail: {\n elem: this,\n editor: this.editor,\n column,\n data: this.dataGrid.data[this.dataGrid.activeCell.row],\n response: (veto: boolean | Promise<void | boolean>) => {\n canEdit = veto;\n }\n }\n });\n }\n\n if (trigger && (canEdit instanceof Promise || canEdit?.constructor?.name === 'AsyncFunction')) {\n (canEdit instanceof Promise ? canEdit : canEdit())\n .then((veto?: boolean) => { if (veto !== false) this.#startCellEdit(column, columnEditor, clickEvent, trigger); })\n .catch(() => { /** ignore if promise rejected */ });\n } else if (!trigger || canEdit !== false) {\n this.#startCellEdit(column, columnEditor, clickEvent, trigger);\n }\n }\n\n /* Start Cell Edit */\n #startCellEdit(\n column: IdsDataGridColumn,\n columnEditor: { type: string, editor?: IdsDataGridEditor },\n clickEvent?: MouseEvent,\n trigger: boolean = true\n ) {\n if (!columnEditor || !columnEditor.editor || this.isEditing) return;\n\n this.detachTooltipEvents();\n this.originalValue = this.value;\n this.editor = columnEditor.editor;\n this.editor.clickEvent = clickEvent;\n\n const editorType = this.editor.type;\n // Override original value if dropdown\n if (editorType === 'dropdown') {\n this.originalValue = this.querySelector('[data-value]')?.getAttribute('data-value');\n }\n\n this.classList.add('is-editing');\n this.editor.init(this);\n\n const expandButton = this.querySelector('.expand-button');\n if (expandButton) {\n expandButton.removeAttribute('disabled');\n this.offEvent('mousedown', expandButton);\n this.onEvent('mousedown', expandButton, (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n this.endCellEdit();\n const row = this.parentElement as IdsDataGridRow;\n row?.toggleExpandCollapse();\n });\n }\n\n // Set states\n if (this.classList.contains('is-invalid')) {\n this.classList.remove('is-invalid');\n this.isInValid = true;\n }\n if (column.editor?.inline) this.classList.add('is-inline');\n this.isEditing = true;\n\n // Pass column text alignment rules into the cell editor\n if (column.align) {\n let columnAlign = column.align;\n if (columnAlign === 'left') columnAlign = 'start';\n if (columnAlign === 'right') columnAlign = 'end';\n this.editor?.input?.setAttribute('text-align', `${columnAlign}`);\n }\n\n // Save on Click Out Event\n if (['datepicker', 'timepicker', 'lookup'].includes(editorType)) {\n // When the popup is closed, end the edit\n this.editor.input?.onEvent('focusout', this.editor.input, () => {\n requestAnimationFrame(() => {\n if (this.editor?.popup?.visible || this.contains(this.dataGrid!.shadowRoot!.activeElement)) return;\n this.tabIndex = -1;\n });\n });\n\n // When the popup is closed, end the edit\n this.onEvent('hide.popup', this.editor?.popup, () => {\n this.offEvent('hide.popup');\n this.endCellEdit();\n this.focus();\n });\n } else if (editorType === 'dropdown') {\n this.editor.input?.onEvent('close', this.editor.input, () => {\n this.endCellEdit();\n this.focus();\n });\n } else if (editorType === 'password') {\n const maskIcon = this.querySelector('ids-icon');\n\n // stop events when clicking the maskIcon to prevent deselecting the input when editing\n this.offEvent('mousedown', maskIcon);\n this.onEvent('mousedown', maskIcon, (e) => {\n e.stopPropagation();\n e.preventDefault();\n });\n\n this.editor.input?.onEvent('focusout', this.editor.input, () => {\n this.dataGrid.clearActiveCellCache(true);\n this.endCellEdit();\n });\n } else {\n this.editor.input?.onEvent('focusout', this.editor.input, () => {\n this.dataGrid.clearActiveCellCache(true);\n this.endCellEdit();\n });\n }\n\n this.onEvent('keyup', this.editor?.input, () => {\n this.dataGrid.updateActiveCellCache(this.row, this.columnIndex, this.editor?.input?.value || '', true);\n });\n\n this.onEvent('keydown', this.editor?.input, (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n this.dataGrid.clearActiveCellCache();\n }\n });\n\n this.onEvent('focusout.endcelledit', this.dataGrid, () => {\n if (!this.dataGrid.contains(document.activeElement)) {\n this.endCellEdit();\n }\n });\n\n if (trigger) {\n this.dataGrid?.triggerEvent('celledit', this.dataGrid, {\n detail: {\n elem: this, editor: this.editor, column, data: this.dataGrid.data[this.row]\n }\n });\n }\n\n // Add a small delay before starting new edit to ensure cleanup\n this.dataGrid.activeCellEditor = this;\n }\n\n /* End Cell Edit */\n endCellEdit() {\n const column = this.column;\n const input = this.editor?.input as any;\n\n if (!input) return;\n\n this.offEvent('focusout.endcelledit', this.dataGrid);\n this.offEvent('keydown', this.editor?.input);\n this.offEvent('keyup', this.editor?.input);\n\n const editorType = (this.editor?.type as string);\n input?.offEvent('focusout', input);\n input?.offEvent('close', input);\n\n if (['input', 'tree'].includes(editorType) && input?.setDirtyTracker) {\n input?.setDirtyTracker(input?.value as any);\n }\n\n if (['input', 'tree'].includes(editorType) && input?.checkValidation) {\n (<IdsInput>input)?.checkValidation();\n }\n\n if (editorType === 'dropdown') {\n (<IdsDropdown>input)?.input?.checkValidation();\n }\n\n if (editorType === 'lookup') {\n (<IdsLookup>input)?.input?.checkValidation();\n }\n\n if (editorType === 'timepicker' || editorType === 'datepicker') {\n (<IdsTriggerField>input)?.checkValidation();\n }\n\n const isDirty = column.editor?.editorSettings?.dirtyTracker && (input?.isDirty || input?.input.isDirty);\n const isDirtyCheckbox = column.editor?.editorSettings?.dirtyTracker && editorType === 'checkbox' && input?.isDirty;\n\n // combobox accepts anything\n const isComboBox = column.editor?.editorSettings?.comboBox ?? false;\n\n const isValid = input?.isValid;\n const newValue = this.editor?.save(this);\n this.#saveCellValue(newValue?.value);\n\n // Save dirty and valid state on the row\n if ((isDirty || isDirtyCheckbox) && !isComboBox) this.#saveDirtyState(newValue?.dirtyCheckValue ?? newValue?.value);\n if (!isValid && !isComboBox) this.#saveValidState(input?.validationMessages);\n if (this.isInValid && isValid && !isComboBox) this.#resetValidState();\n this.isInValid = !isComboBox ? !isValid : false;\n this.editor?.destroy(this);\n this.renderCell();\n this.isEditing = false;\n this.classList.remove('is-editing');\n\n // Reset focus and tabindex\n this.tabIndex = -1;\n this.blur();\n\n this.dataGrid?.triggerEvent('endcelledit', this.dataGrid, {\n detail: {\n elem: this, editor: this.editor, column, data: this.dataGrid.data[this.row]\n }\n });\n this.detachTooltipEvents();\n this.dataGrid.activeCellEditor = undefined;\n this.dataGrid.openMenu = null;\n }\n\n /* Cancel Cell Edit */\n cancelCellEdit() {\n const column = this.column;\n const input = this.editor?.input as any;\n input?.offEvent('focusout', input);\n input?.setDirtyTracker(input?.value as any);\n\n this.dataGrid?.updateDataset(this.row, { [String(column?.field)]: this.originalValue });\n this.editor?.destroy(this);\n this.renderCell();\n this.isEditing = false;\n this.classList.remove('is-editing');\n\n this.dataGrid?.triggerEvent('cancelcelledit', this.dataGrid, {\n detail: {\n elem: this,\n editor: this.editor,\n column,\n data: this.dataGrid.data[this.row],\n oldValue: this.originalValue\n }\n });\n this.dataGrid.activeCellEditor = undefined;\n this.dataGrid.openMenu = null;\n }\n\n /**\n * Save cell Edit Back into data set\n * @param {any} newValue the value to coerce and save\n */\n #saveCellValue(newValue: any) {\n const column = this.column;\n this.dataGrid.resetCache(this.dataGrid?.activeCell.row);\n if (column.editor?.editorSettings?.mask === 'date') {\n newValue = this.dataGrid.localeAPI.parseDate(newValue, column.formatOptions);\n }\n this.dataGrid?.updateDataset(this.row, {\n [String(column?.field)]: newValue,\n });\n }\n\n /**\n * Save the dirty state info on the row\n * @param {boolean} newValue the current value\n * @param {boolean} programmaticUpdate if true, the value was changed by a progammaticUpdate update\n */\n #saveDirtyState(newValue: any, programmaticUpdate = false) {\n let rowDirtyCells = this.dataGrid.data[this.row].dirtyCells;\n if (rowDirtyCells === undefined) rowDirtyCells = [];\n const cell = Number(this.getAttribute('aria-colindex')) - 1;\n const previousCellInfo = rowDirtyCells.filter((item: any) => item.cell === cell);\n\n if (previousCellInfo[0] && newValue === previousCellInfo[0].originalValue) {\n const oldIndex = rowDirtyCells.findIndex((item: any) => item.cell === cell);\n rowDirtyCells.splice(oldIndex, 1);\n // Value was reset\n this?.classList.remove('is-dirty');\n this.dataGrid?.updateDataset(this.row, {\n dirtyCells: rowDirtyCells\n });\n return;\n }\n\n this?.classList.add('is-dirty');\n\n if (previousCellInfo.length === 0) {\n const originalValue = this?.editor?.type === 'checkbox' || programmaticUpdate ? this.originalValue : (this?.editor?.input as any)?.dirty?.original;\n\n rowDirtyCells.push({\n cell: Number(this?.getAttribute('aria-colindex')) - 1,\n columnId: this.column.id,\n originalValue,\n });\n this.dataGrid?.updateDataset(this.row, {\n dirtyCells: rowDirtyCells\n });\n }\n }\n\n /**\n * Track value changes for dirty tracking\n * @param {any} newValue the new value\n * @param {boolean} programmaticUpdate if true, the value was changed by a programmatic update\n */\n trackValueChange(newValue: any, programmaticUpdate = false) {\n this.#saveDirtyState(newValue, programmaticUpdate);\n }\n\n /**\n * Save the validation state info on the row\n * @param {any} validationMessages the current value\n */\n #saveValidState(validationMessages: any) {\n let rowInvalidCells = this.dataGrid.data[this.row].invalidCells;\n if (!rowInvalidCells) rowInvalidCells = [];\n const cell = Number(this.getAttribute('aria-colindex')) - 1;\n const previousCellInfo = rowInvalidCells.filter((item: any) => item.cell === cell);\n\n this?.classList.add('is-invalid');\n\n if (previousCellInfo.length === 0) {\n this.previousInvalidState = validationMessages.id;\n rowInvalidCells.push({\n cell: Number(this?.getAttribute('aria-colindex')) - 1,\n columnId: this.column.id,\n validationMessages\n });\n this.dataGrid?.updateDataset(this.row, {\n invalidCells: rowInvalidCells\n });\n }\n }\n\n /**\n * Set back the valid state\n */\n #resetValidState() {\n this?.classList.remove('is-invalid');\n this.dataGrid?.updateDataset(this.row, {\n invalidCells: undefined\n });\n this.isInValid = false;\n }\n\n // NOTE: check memory footprint of this caching strategy\n static cellCache: { [key: string]: string } = {};\n\n /**\n * Return the Template for the cell contents\n * @param {object} rowData The data item for the row\n * @param {object} column The column data for the row\n * @param {object} rowIndex The running row-index\n * @param {IdsDataGrid} dataGrid The dataGrid instance\n * @returns {string} The template to display\n */\n static template(\n rowData: Record<string, unknown>,\n column: IdsDataGridColumn,\n rowIndex: number,\n dataGrid: IdsDataGrid\n ): string {\n const cacheKey = IdsDataGridCell.cacheKey(rowIndex, rowData, column, dataGrid);\n // combobox accepts anything\n const isComboBox = column.editor?.editorSettings?.comboBox ?? false;\n\n // NOTE: This is how we could disable cache until a proper cache-busting strategy is in place\n // delete IdsDataGridCell.cellCache[cacheKey];\n\n // NOTE: this type of param-based caching is good for upscroll when revisiting rows that have been seen already.\n // NOTE: we also need a content-cache that caches based on the actual data that's being rendered\n // NOTE: content-cache should probably be done in the IdsDataGridFormatters class\n if (!IdsDataGridCell.cellCache[cacheKey]) {\n const dataGridFormatters = (dataGrid.formatters as any);\n let template = '';\n\n if (!dataGridFormatters[column?.formatter?.name || 'text'] && column?.formatter) template = column?.formatter(rowData, column, rowIndex, dataGrid);\n else template = dataGridFormatters[column?.formatter?.name || 'text'](rowData, column, rowIndex, dataGrid);\n\n if (rowData.invalidCells && !isComboBox) {\n const message = (rowData.invalidCells as any).find((info: any) => info.cell === dataGrid.columnIdxById(column.id));\n if (message) template += `<ids-alert icon=\"error\" tooltip=\"${message?.validationMessages[0]?.message}\"></ids-alert>`;\n }\n IdsDataGridCell.cellCache[cacheKey] = template;\n }\n\n return IdsDataGridCell.cellCache[cacheKey];\n }\n\n /**\n * Return cache key of current cell\n * @param {number} rowIndex number\n * @param {object} rowData The data item for the row\n * @param {object} column The column data for the row\n * @param {IdsDataGrid} dataGrid The dataGrid instance\n * @returns {string} Cache key\n */\n static cacheKey(\n rowIndex: number,\n rowData: Record<string, unknown>,\n column: IdsDataGridColumn,\n dataGrid: IdsDataGrid\n ): string {\n const cacheHash = dataGrid.cacheHash;\n const selected = rowData.rowSelected ? dataGrid.cacheSelected : dataGrid.cacheDeselected;\n const expanded = rowData.rowExpanded ? dataGrid.cacheExpanded : dataGrid.cacheCollapsed;\n return `${cacheHash}:${column.id}:${rowIndex}:${selected}:${expanded}`;\n }\n\n /**\n * Clears cell cache\n */\n clearCache() {\n const dataGrid = this.dataGrid;\n const rowIndex = Number(this.parentElement?.getAttribute('row-index'));\n const row = dataGrid.data[rowIndex] as any;\n const cacheKey = IdsDataGridCell.cacheKey(rowIndex, row, this.column, dataGrid);\n\n delete IdsDataGridCell.cellCache[cacheKey];\n }\n\n /**\n * Refreshes the cell\n */\n refreshCell() {\n this.clearCache();\n this.renderCell();\n }\n\n /**\n * Checks on the cell editor to see if its current state allows it to be closed.\n * @returns {boolean} true if the cell editor is able to \"close\"\n */\n canClose(): boolean {\n if (this.isEditing) return false;\n if (this.editor?.popup?.visible) return false;\n if (this.column?.editor?.inline) return false;\n\n return true;\n }\n\n /**\n * Removes all tooltip-related event listeners from the data grid cell\n * @private\n * @description Detaches hover, click, popup, longpress, and focus events\n * associated with the tooltip functionality\n */\n detachTooltipEvents() {\n this.dataGrid.tooltip?.offEvent('hoverend.tooltip', this);\n this.dataGrid.tooltip?.offEvent('click.tooltip', this);\n this.dataGrid.tooltip?.offEvent('click.popup', this.dataGrid.tooltip?.popup);\n this.dataGrid.tooltip?.offEvent('longpress.tooltip', this);\n this.dataGrid.tooltip?.offEvent('focusin.tooltip', this);\n this.dataGrid.tooltip?.offEvent('focus.keyboardfocus', this);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -72,14 +72,27 @@ var InputEditor = class {
|
|
|
72
72
|
this.input.fieldHeight = String(cell?.dataGrid?.rowHeight) === "xxs" ? `xs` : String(cell?.dataGrid?.rowHeight);
|
|
73
73
|
this.input.labelState = "collapsed";
|
|
74
74
|
const value = cell?.innerText;
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
const treeFieldContainer = cell?.querySelector(".ids-data-grid-tree-field-container");
|
|
76
|
+
if (treeFieldContainer) {
|
|
77
|
+
treeFieldContainer.innerHTML = "";
|
|
78
|
+
treeFieldContainer.appendChild(this.input);
|
|
79
|
+
} else {
|
|
80
|
+
cell.innerHTML = "";
|
|
81
|
+
cell?.appendChild(this.input);
|
|
82
|
+
}
|
|
77
83
|
this.input.addEventListener("keydown", (e) => applyEditorEndCellEdit(cell, e));
|
|
78
84
|
this.input.value = value;
|
|
79
85
|
if (this.input instanceof IdsInput && cell) {
|
|
80
86
|
if (!isInline) this.input.shadowRoot?.querySelector("input")?.style.setProperty("width", `${cell.offsetWidth - 5}px`);
|
|
81
|
-
|
|
87
|
+
const settings = { ...cell?.column.editor?.editorSettings };
|
|
88
|
+
const shouldAutoselect = settings?.autoselect;
|
|
89
|
+
delete settings.autoselect;
|
|
90
|
+
applyEditorSettings(this.input, settings);
|
|
82
91
|
applyEditorValidation(this.input, cell?.column.editor?.editorValidation);
|
|
92
|
+
const nativeInput = this.input.shadowRoot?.querySelector("input");
|
|
93
|
+
if (shouldAutoselect) {
|
|
94
|
+
nativeInput?.select();
|
|
95
|
+
}
|
|
83
96
|
}
|
|
84
97
|
this.input.focus();
|
|
85
98
|
}
|
|
@@ -802,4 +815,4 @@ export {
|
|
|
802
815
|
LookupEditor,
|
|
803
816
|
editors
|
|
804
817
|
};
|
|
805
|
-
//# sourceMappingURL=ids-chunk-
|
|
818
|
+
//# sourceMappingURL=ids-chunk-CVY6XSRY-full.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/ids-data-grid/ids-data-grid-editors.ts"],
|
|
4
|
+
"sourcesContent": ["// eslint-disable-next-line max-classes-per-file\nimport { isValidDate } from '../../utils/ids-date-utils/ids-date-utils';\nimport { stringToBool } from '../../utils/ids-string-utils/ids-string-utils';\nimport IdsCheckbox from '../ids-checkbox/ids-checkbox';\nimport IdsDropdown from '../ids-dropdown/ids-dropdown';\nimport IdsDropdownList from '../ids-dropdown/ids-dropdown-list';\nimport IdsInput from '../ids-input/ids-input';\nimport IdsTriggerField from '../ids-trigger-field/ids-trigger-field';\nimport type IdsButton from '../ids-button/ids-button';\nimport type IdsDataGridCell from './ids-data-grid-cell';\nimport type IdsDatePicker from '../ids-date-picker/ids-date-picker';\nimport type IdsDatePickerPopup from '../ids-date-picker/ids-date-picker-popup';\nimport type IdsLookup from '../ids-lookup/ids-lookup';\nimport type IdsModal from '../ids-modal/ids-modal';\nimport type IdsTimePicker from '../ids-time-picker/ids-time-picker';\nimport type IdsTimePickerPopup from '../ids-time-picker/ids-time-picker-popup';\nimport '../ids-time-picker/ids-time-picker';\nimport '../ids-date-picker/ids-date-picker';\nimport '../ids-lookup/ids-lookup';\nimport { IdsValidationRule } from '../../mixins/ids-validation-mixin/ids-validation-mixin';\nimport { attributes } from '../../core/ids-attributes';\nimport IdsIcon from '../ids-icon/ids-icon';\nimport { getClosest } from '../../utils/ids-dom-utils/ids-dom-utils';\n\nexport interface IdsDataGridEditorOptions {\n /** The type of editor (i.e. text, data, time, dropdown, checkbox, number ect) */\n type: string;\n /** The field in the data set to show */\n field: string;\n /** If true the editor will remain visible */\n inline: boolean;\n}\n\nexport interface IdsDataGridSaveValue {\n // value to be saved in data set\n value?: string | number | boolean | null;\n // (optional) value used for dirty checking\n dirtyCheckValue?: string | number | boolean | null;\n}\n\nexport interface IdsDataGridEditor {\n /** The type of editor (i.e. input, dropdown, checkbox ect) */\n type: string;\n /** The main editor element */\n input?: IdsInput | IdsCheckbox | IdsDropdown | IdsDatePicker | IdsTimePicker | IdsLookup;\n /** Optional Popup interface for some cell types */\n popup?: IdsDatePickerPopup | IdsTimePickerPopup | IdsModal;\n /** The function that invokes and sets values on the input */\n init: (cell?: IdsDataGridCell) => void;\n /** The function that transforms and saved the editor */\n save: (cell?: IdsDataGridCell) => IdsDataGridSaveValue | undefined | null;\n /** The function that tears down all aspects of the editor */\n destroy: (cell?: IdsDataGridCell) => void;\n /** MouseEvent if click was used to edit */\n clickEvent?: MouseEvent;\n /** The function that returns the input-element's value */\n value: () => boolean | number | string;\n /** The function that changes the input-element's value */\n change: (newValue: boolean | number | string) => void;\n}\n\nconst applyEditorSettings = (elem: any, settings?: Record<string, any>) => {\n // eslint-disable-next-line guard-for-in\n for (const setting in settings) {\n elem[setting] = settings[setting];\n }\n};\n\nconst applyEditorValidation = (elem: any, validation?: Partial<IdsValidationRule>) => {\n if (elem?.addValidationRule && validation) {\n validation.type = 'error';\n elem?.addValidationRule?.(validation);\n }\n};\n\nconst applyEditorDropdownFocus = async (editor: IdsDataGridEditor) => {\n const autoOpen = (<HTMLElement> editor.clickEvent?.target)?.classList?.contains('editor-cell-icon');\n if (autoOpen) {\n await editor.input?.open();\n }\n editor.input?.dropdownList?.focus();\n};\n\nconst applyEditorPopupFocus = async (editor: IdsDataGridEditor) => {\n const autoOpen = (<HTMLElement> editor.clickEvent?.target)?.classList?.contains('editor-cell-icon');\n if (autoOpen) {\n await editor.popup?.show();\n editor.popup?.focus();\n } else {\n editor.input?.focus();\n }\n};\n\nconst applyEditorEndCellEdit = (cell: IdsDataGridCell, e: KeyboardEvent) => {\n if (e.code === 'Escape') {\n e.stopImmediatePropagation();\n e.stopPropagation();\n e.preventDefault();\n cell?.cancelCellEdit();\n cell?.focus();\n }\n};\n\nexport class InputEditor implements IdsDataGridEditor {\n /** The type of editor (i.e. input, dropdown, checkbox ect) */\n type = 'input';\n\n /** Holds the Editor */\n input?: IdsInput;\n\n /**\n * Create an input and set the value and focus states\n * @param {IdsDataGridCell} cell the cell element\n */\n init(cell?: IdsDataGridCell) {\n const isInline = cell?.column.editor?.inline;\n this.input = <IdsInput> document.createElement('ids-input');\n this.input.colorVariant = isInline ? 'in-cell' : 'borderless';\n this.input.size = 'full';\n this.input.fieldHeight = String(cell?.dataGrid?.rowHeight) === 'xxs' ? `xs` : String(cell?.dataGrid?.rowHeight);\n this.input.labelState = 'collapsed';\n\n // Clear cell and set value\n const value = cell?.innerText;\n const treeFieldContainer = cell?.querySelector('.ids-data-grid-tree-field-container');\n if (treeFieldContainer) {\n // For tree-formatted cells, replace only the text container to preserve the expand/collapse icon\n treeFieldContainer.innerHTML = '';\n treeFieldContainer.appendChild(this.input as any);\n } else {\n cell!.innerHTML = '';\n cell?.appendChild(this.input as any);\n }\n this.input.addEventListener('keydown', (e) => applyEditorEndCellEdit(cell!, e));\n\n this.input.value = value;\n\n if (this.input instanceof IdsInput && cell) {\n if (!isInline) this.input.shadowRoot?.querySelector('input')?.style.setProperty('width', `${cell.offsetWidth - 5}px`);\n const settings = { ...cell?.column.editor?.editorSettings };\n const shouldAutoselect = settings?.autoselect;\n delete settings.autoselect;\n applyEditorSettings(this.input, settings);\n applyEditorValidation(this.input, cell?.column.editor?.editorValidation);\n const nativeInput = this.input.shadowRoot?.querySelector('input');\n if (shouldAutoselect) {\n nativeInput?.select();\n }\n }\n this.input.focus();\n }\n\n /* Transform the value */\n save() {\n return { value: this.input?.value };\n }\n\n /* Destroy the editor */\n destroy() {\n this.input = undefined;\n }\n\n value() {\n return this.input?.value ?? '';\n }\n\n change(newValue: boolean | number | string) {\n if (this.input) this.input.value = String(newValue);\n }\n}\n\n/**\n * Password Input Editor for IDS Data Grid\n * Shows masked input with revealed last characters and toggle button\n */\nexport class PasswordInputEditor extends InputEditor {\n type = 'password';\n\n #toggleButton?: IdsIcon;\n\n /**\n * Create a password input and set the value and focus states\n * @param {IdsDataGridCell} cell the cell element\n */\n init(cell?: IdsDataGridCell) {\n super.init(cell);\n const dataIndex = getClosest(cell, 'ids-data-grid-row').getAttribute('data-index');\n const rowData = getClosest(cell, 'ids-data-grid').data[dataIndex];\n const isInline = cell?.column.editor?.inline;\n\n // Make the input password type\n this.input!.type = 'password';\n\n // Create toggle button\n this.#toggleButton = <IdsIcon> document.createElement('ids-icon');\n this.#toggleButton.icon = 'show-item';\n this.#toggleButton.classList.add('editor-cell-icon');\n this.#toggleButton.classList.add('text-mask');\n\n // Clear cell and set value\n const value = rowData[cell!.column.id];\n cell!.innerHTML = '';\n\n // Add input and button to container\n cell?.appendChild(this.input as any);\n cell?.appendChild(this.#toggleButton as any);\n\n // set value to the input\n this.input!.value = value;\n\n // Handle toggle button click\n this.#toggleButton.offEvent('click');\n this.#toggleButton.onEvent('click', this.#toggleButton, () => {\n if (!this.input || !this.#toggleButton) {\n return;\n }\n\n const masked = this.input.type === 'password';\n\n const inputEl = this.input.shadowRoot?.querySelector('input');\n\n // Store current cursor position\n let cursorPos = 0;\n if (inputEl) {\n cursorPos = inputEl.selectionStart || 0;\n }\n\n if (masked) {\n this.input.type = 'text';\n this.#toggleButton.icon = 'hide-item';\n } else {\n this.#toggleButton.icon = 'show-item';\n this.input.type = 'password';\n }\n\n this.input.focus();\n\n // Restore cursor position\n if (inputEl) {\n setTimeout(() => {\n inputEl.setSelectionRange(cursorPos, cursorPos);\n }, 0);\n }\n });\n\n if (this.input instanceof IdsInput && cell) {\n if (!isInline) this.input.shadowRoot?.querySelector('input')?.style.setProperty('width', `100%`);\n applyEditorSettings(this.input, cell?.column.editor?.editorSettings);\n applyEditorValidation(this.input, cell?.column.editor?.editorValidation);\n }\n this.input!.focus();\n }\n\n /**\n * Transform the value for saving\n * @returns {IdsDataGridSaveValue} The value to save\n */\n save() {\n return { value: this.input?.value };\n }\n\n /**\n * Destroy the editor\n */\n destroy() {\n this.input?.removeEventListener('input', () => {});\n this.#toggleButton?.removeEventListener('click', () => {});\n this.input = undefined;\n this.#toggleButton = undefined;\n }\n}\n\nexport class CheckboxEditor implements IdsDataGridEditor {\n /** The type of editor (i.e. input, dropdown, checkbox ect) */\n type = 'checkbox';\n\n /** Holds the Editor */\n input?: IdsCheckbox;\n\n /** MouseEvent if click was used to edit */\n clickEvent?: MouseEvent;\n\n /** Cache original value type for proper saving */\n #originalValue?: any;\n\n /** Cache custom functions from editorSettings */\n #customSave?: (value: any) => void;\n\n #customValidate?: (value: any) => void;\n\n /**\n * Create an input and set the value and focus states\n * @param {IdsDataGridCell} cell the cell element\n */\n init(cell?: IdsDataGridCell) {\n this.input = <IdsCheckbox> document.createElement('ids-checkbox');\n\n const row = getClosest(cell, 'ids-data-grid-row');\n const dataIndex = row?.getAttribute('data-index');\n const grid = getClosest(cell, 'ids-data-grid');\n const rowData = dataIndex !== null && grid?.data ? grid.data[dataIndex] : undefined;\n this.#originalValue = rowData && cell ? rowData[cell.column.id] : undefined;\n\n const settings = cell?.column.editor?.editorSettings;\n this.#customSave = typeof settings?.customSave === 'function' ? settings.customSave as (value: any) => void : undefined;\n this.#customValidate = typeof settings?.customValidate === 'function' ? settings.customValidate as (value: any) => void : undefined;\n\n // Clear cell and set value\n const value = stringToBool(cell?.querySelector('[aria-checked]')?.getAttribute('aria-checked'));\n cell!.innerHTML = '';\n if (!this.clickEvent) this.input.noAnimation = true;\n this.input.checked = this.clickEvent ? !value : value;\n (this.input as any).isDirty = !!this.clickEvent;\n\n applyEditorSettings(this.input, settings);\n\n cell?.appendChild(this.input as any);\n\n requestAnimationFrame(() => {\n cell?.endCellEdit();\n cell?.focus();\n });\n }\n\n /* Transform the value */\n save() {\n const checked = this.input?.checked;\n let value: any = checked;\n\n if (typeof this.#originalValue === 'number') {\n value = checked ? 1 : 0;\n } else if (typeof this.#originalValue === 'string') {\n value = checked ? 'true' : 'false';\n }\n if (this.#customValidate) this.#customValidate(value);\n if (this.#customSave) this.#customSave(value);\n\n return { value };\n }\n\n /* Destroy the editor */\n destroy() {\n this.input?.offEvent('keydown');\n this.input = undefined;\n this.#originalValue = undefined;\n this.#customSave = undefined;\n this.#customValidate = undefined;\n }\n\n value() {\n return !!this.input?.checked;\n }\n\n change(newValue: boolean | number | string) {\n if (this.input) this.input.checked = Boolean(newValue);\n }\n}\n\nexport class DropdownEditor implements IdsDataGridEditor {\n /** The type of editor (i.e. input, dropdown, checkbox ect) */\n type = 'dropdown';\n\n /** Holds the Editor */\n input?: IdsDropdown;\n\n /** Holds the separate Dropdown List */\n list?: IdsDropdownList;\n\n /** Cache cell reference */\n #cell?: IdsDataGridCell;\n\n /** Cache dropdown value */\n #value?: string | null;\n\n /** Callback reference to handle blur event propagation */\n #stopPropagationCb = this.stopPropagation.bind(this);\n\n /** MouseEvent if click was used to edit */\n clickEvent?: MouseEvent;\n\n async init(cell?: IdsDataGridCell): Promise<void> {\n this.#value = cell?.querySelector('[data-value]')?.getAttribute('data-value') ?? cell?.value ?? null;\n const isInline = cell?.column.editor?.inline;\n const settings = { ...cell?.column?.editor?.editorSettings };\n const validation = { ...cell?.column?.editor?.editorValidation };\n let settingsOptions = <any[]>settings?.options ?? [];\n\n this.input = <IdsDropdown>document.createElement('ids-dropdown');\n this.list = <IdsDropdownList>document.createElement('ids-dropdown-list');\n\n // Set combobox if specified in settings\n if (cell?.column?.editor?.editorSettings?.comboBox) {\n this.input.combobox = true;\n }\n\n if (cell?.column?.editor?.editorSettings?.source !== undefined\n && cell?.column?.editor?.editorSettings?.source instanceof Function) {\n cell?.column?.editor?.editorSettings?.source().then(async (result: any) => {\n const newOptions = await result;\n settings.options = newOptions;\n settingsOptions = newOptions;\n this.input?.loadDataSet(settingsOptions);\n });\n }\n\n // apply user settings\n delete settings.options;\n applyEditorSettings(this.input, settings);\n if ([null, false, undefined].includes(this.input.typeahead)) {\n this.input.typeahead = false;\n }\n\n cell!.innerHTML = '';\n cell!.appendChild(this.input);\n this.input.addEventListener('keydown', (e) => applyEditorEndCellEdit(cell!, e));\n\n cell!.appendChild(this.list);\n cell!.classList.add('is-focused');\n this.#cell = cell!;\n\n this.list.insertAdjacentHTML('beforeend', '<ids-list-box></ids-list-box>');\n this.list.setAttribute('trigger-type', 'custom');\n this.input.setAttribute('id', 'ids-dropdown-active-cell');\n this.list.setAttribute('id', 'ids-dropdown-list-active-cell');\n this.input.setAttribute('list', '#ids-dropdown-list-active-cell');\n\n const optionValues = settingsOptions.map((row) => String(row.value).toLowerCase());\n const defaultValue = cell?.defaultValue || this.#value;\n\n if (defaultValue && !optionValues.includes(defaultValue.toLowerCase())) {\n const [firstOption, ...remainingOptions] = settingsOptions;\n const defaultValueOption = { id: defaultValue, label: defaultValue, value: defaultValue };\n if (this.input.comboBox) {\n settingsOptions = [firstOption, ...remainingOptions];\n } else {\n settingsOptions = [firstOption, defaultValueOption, ...remainingOptions];\n }\n }\n\n this.input.loadDataSet(settingsOptions);\n\n this.list.configurePopup();\n this.list.setAttribute('slot', 'menu-container');\n this.list.setAttribute('size', 'full');\n this.list.setAttribute('attachment', '.ids-data-grid-wrapper');\n this.list.appendToTargetParent();\n\n if (this.list?.popup) {\n this.list.popup.alignTarget = this.input;\n this.list.popup.onPlaceEnd = (popupRect: DOMRect, domElement) => {\n if (cell?.dataGrid?.rowHeight === 'xxs') {\n domElement.style.top = `${parseInt(domElement.style.top) - 1}px`;\n }\n\n // Get the current x position of cell\n const cellLeft = cell?.getBoundingClientRect().left || 0;\n // Get the current x position of container\n const containerLeft = domElement.offsetParent?.getBoundingClientRect().left || 0;\n domElement.style.left = `${cellLeft - containerLeft}px`;\n return popupRect;\n };\n }\n\n this.input.value = this.#value ?? '';\n this.input.size = 'full';\n this.input.labelState = 'collapsed';\n this.input.colorVariant = isInline ? 'in-cell' : 'borderless';\n this.input.fieldHeight = String(cell?.dataGrid?.rowHeight);\n const triggerField = this.input.container?.querySelector<IdsTriggerField>('ids-trigger-field');\n if (triggerField) {\n triggerField.focus();\n triggerField.colorVariant = isInline ? 'in-cell' : 'borderless';\n }\n\n if (this.input.comboBox) {\n this.input.dropdownList?.classList.add('is-combobox');\n triggerField?.setAttribute('combobox', 'true');\n triggerField?.setAttribute('autoselect', 'true');\n triggerField?.classList.add('combo-filter');\n if (triggerField?.input) triggerField.input.value = this.input.value;\n }\n\n // apply user validation\n if (validation) {\n applyEditorValidation(this.input.input, validation);\n }\n\n this.#attachEventListeners();\n // Only open if initiated by a click\n if (this.clickEvent && !this.input.comboBox) {\n await this.input?.open(this.input.typeahead);\n }\n if (this.input.comboBox) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n applyEditorDropdownFocus(this);\n }\n }\n\n /**\n * Overrides data grid cell's focusout event handling\n * @param {FocusEvent} evt focus event\n */\n stopPropagation(evt: FocusEvent) {\n const tagName = evt.relatedTarget instanceof HTMLElement ? evt.relatedTarget.tagName : evt.relatedTarget;\n\n if (tagName === 'IDS-DROPDOWN' || tagName === 'IDS-LIST-BOX-OPTION') {\n evt.stopPropagation();\n evt.stopImmediatePropagation();\n }\n }\n\n /**\n * Attach dropdown event handlers\n */\n #attachEventListeners() {\n this.input?.onEvent('change', this.input, (evt) => { this.#value = evt.detail.value; });\n this.input?.onEvent('focusout', this.input, this.#stopPropagationCb);\n if (this.list) {\n this.list.onOutsideClick = (e: MouseEvent) => {\n if (!e.composedPath().includes(this.list!)) {\n this.input?.close();\n }\n };\n this.list.refreshTriggerEvents();\n // Close code is in #startCellEdit\n }\n\n this.input?.onEvent('keydown', this.list, (e) => {\n const key = e.key;\n if (key === 'Enter') {\n e.stopPropagation();\n }\n });\n }\n\n /* Save selected dropdown value */\n save() {\n return {\n value: this.input?.value,\n dirtyCheckValue: this.input?.input?.value\n };\n }\n\n /**\n * Destroy dropdown editor\n */\n destroy(): void {\n this.input?.offEvent('click');\n this.input?.offEvent('change');\n this.input?.offEvent('focusout', this.input, this.#stopPropagationCb);\n this.list?.offEvent('keydown');\n this.list?.remove();\n this.#value = undefined;\n\n this.#cell?.classList?.remove('is-focused');\n this.#cell = undefined;\n }\n\n value() {\n return this.input?.value ?? '';\n }\n\n change(newValue: boolean | number | string) {\n if (this.input) this.input.value = String(newValue);\n }\n}\n\nexport class DatePickerEditor implements IdsDataGridEditor {\n public type = 'datepicker';\n\n public input?: IdsTriggerField;\n\n public popup?: IdsDatePickerPopup;\n\n clickEvent?: MouseEvent;\n\n #value?: Date;\n\n #displayValue = '';\n\n init(cell?: IdsDataGridCell) {\n this.input = this.#buildDatePickerTriggerField(cell!);\n this.popup = this.#buildDatePickerPopup(cell!);\n\n // parse date string\n this.#update(cell!, cell!.originalValue as string);\n\n // insert datepicker component and focus\n cell!.innerHTML = '';\n cell!.appendChild(this.popup);\n cell!.appendChild(this.input);\n this.input.addEventListener('keydown', (e) => applyEditorEndCellEdit(cell!, e));\n\n this.input.value = this.#displayValue;\n this.popup?.syncDateAttributes(this.#value ?? new Date());\n if (this.input) this.input.autoselect = (cell?.column?.editor?.editorSettings?.autoselect as boolean) || true;\n\n const validation = cell?.column.editor?.editorValidation;\n if (validation) {\n applyEditorValidation(this.input, validation);\n }\n\n if (this.popup) {\n const popup = this.popup;\n this.popup.value = this.#displayValue;\n this.popup.attachment = '.ids-data-grid-wrapper';\n this.popup.slot = 'menu-container';\n\n this.popup.appendToTargetParent();\n if (this.popup.popup) {\n this.popup.popup.positionStyle = 'fixed';\n this.popup.popup.popupOpenEventsTarget = document.body;\n this.popup.popup.onOutsideClick = (e: MouseEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n if (!e.composedPath().includes(popup)) { popup.hide(); }\n };\n }\n\n // apply popup required settings\n this.popup.id = `${cell!.column.field}-date-picker-popup`;\n this.popup.triggerType = 'click';\n this.popup.triggerElem = `#${cell!.column.field}-date-picker-btn`;\n this.popup.target = `#${cell!.column.field}-date-picker`;\n this.popup.popup!.align = 'bottom, right';\n this.popup.popup!.arrowTarget = `#${cell!.column.field}-date-picker-btn`;\n this.popup.popup!.y = 16;\n this.popup.refreshTriggerEvents();\n\n // Show button group\n if (this.popup.hasTime()) {\n this.popup.showApply = true;\n const buttonGroup = this.popup.container?.querySelector('.popup-footer');\n buttonGroup?.classList.remove('hidden');\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n applyEditorPopupFocus(this);\n }\n\n this.#attachEventListeners(cell);\n }\n\n #buildDatePickerTriggerField(cell: IdsDataGridCell): IdsTriggerField {\n const component = <IdsTriggerField>document.createElement('ids-trigger-field');\n\n // apply user settings\n applyEditorSettings(component, cell?.column.editor?.editorSettings);\n\n component.id = `${cell.column.field}-date-picker`;\n component.fieldHeight = String(cell?.dataGrid?.rowHeight) === 'xxs' ? `xs` : String(cell?.dataGrid?.rowHeight);\n component.labelState = 'collapsed';\n component.colorVariant = 'borderless';\n component.size = 'full';\n component.mask = true;\n\n component.insertAdjacentHTML(\n 'beforeend',\n `<ids-trigger-button\n class=\"ids-trigger-field-slot-trigger-end\"\n id=\"${cell.column.field}-date-picker-btn\"\n slot=\"trigger-end\"\n icon=\"calendar\"></ids-trigger-button>`\n );\n\n return component;\n }\n\n #buildDatePickerPopup(cell: IdsDataGridCell): IdsDatePickerPopup {\n const component = <IdsDatePickerPopup>document.createElement('ids-date-picker-popup');\n // apply user settings\n applyEditorSettings(component, cell?.column.editor?.editorSettings);\n return component;\n }\n\n #update(cell: IdsDataGridCell, dateString: string) {\n const inputDate = cell?.dataGrid.localeAPI.parseDate(\n dateString,\n { dateFormat: cell?.column?.editor?.editorSettings?.format || undefined }\n ) as Date;\n\n if (!dateString || !isValidDate(inputDate)) {\n this.#displayValue = dateString;\n this.#value = undefined;\n return;\n }\n\n // update original date value, preserving time from input if available\n if (this.#value instanceof Date) {\n this.#value.setFullYear(inputDate.getFullYear());\n this.#value.setMonth(inputDate.getMonth());\n this.#value.setDate(inputDate.getDate());\n // Update time components if they differ from default (00:00:00)\n if (inputDate.getHours() !== 0 || inputDate.getMinutes() !== 0\n || inputDate.getSeconds() !== 0 || inputDate.getMilliseconds() !== 0) {\n this.#value.setHours(inputDate.getHours());\n this.#value.setMinutes(inputDate.getMinutes());\n this.#value.setSeconds(inputDate.getSeconds());\n this.#value.setMilliseconds(inputDate.getMilliseconds());\n }\n } else {\n this.#value = inputDate;\n }\n\n this.#displayValue = cell!.dataGrid.localeAPI.formatDate(this.#value, cell.column?.editor?.editorSettings);\n }\n\n #stopPropagation(evt: FocusEvent): void {\n const isOpen = this.input?.popup?.hidden === false;\n if (isOpen) evt.stopImmediatePropagation();\n }\n\n #attachEventListeners(cell?: IdsDataGridCell | undefined) {\n const focusOutHandler = (evt: FocusEvent) => this.#stopPropagation(evt);\n this.input?.onEvent('focusout', this.input, focusOutHandler, { capture: true });\n this.popup?.onEvent('hide', this.popup, () => {\n if (cell!.contains(cell!.dataGrid!.shadowRoot!.activeElement)) return;\n if (!cell!.dataGrid!.contains(document.activeElement)) return;\n if (!cell!.dataGrid!.shadowRoot!.contains(document.activeElement)) return;\n\n cell?.focus();\n });\n }\n\n save(cell?: IdsDataGridCell) {\n this.#update(cell!, cell?.value);\n\n return {\n value: this.#value?.toISOString() ?? '',\n dirtyCheckValue: this.#displayValue\n };\n }\n\n destroy() {\n this.input?.offEvent('focusout');\n this.input?.offEvent('outsideclick.datepicker');\n this.popup?.offEvent('hide');\n this.popup?.remove();\n\n this.#value = undefined;\n this.#displayValue = '';\n }\n\n value() {\n return this.input?.input?.value ?? '';\n }\n\n change(newValue: boolean | number | string) {\n if (this.input?.input) this.input.input.value = String(newValue);\n }\n}\n\nexport class TimePickerEditor implements IdsDataGridEditor {\n type = 'timepicker';\n\n input?: IdsTriggerField;\n\n popup?: IdsTimePickerPopup;\n\n clickEvent?: MouseEvent;\n\n #originalDate?: Date;\n\n init(cell?: IdsDataGridCell | undefined) {\n this.input = this.#buildTimePickerTriggerField(cell!);\n this.popup = this.#buildTimePickerPopup(cell!);\n\n // parse date string\n const dateString = cell!.originalValue as string ?? '';\n const date = cell!.dataGrid!.localeAPI!.parseDate(dateString, undefined, true) as Date;\n const isValid = isValidDate(date);\n this.#originalDate = isValid ? date : undefined;\n this.input.value = isValid ? cell!.dataGrid!.localeAPI!.formatDate(this.#originalDate, { pattern: this.input.format }) : '';\n\n // insert time picker and focus\n cell!.innerHTML = '';\n cell!.appendChild(this.popup);\n cell!.appendChild(this.input);\n this.input.addEventListener('keydown', (e) => applyEditorEndCellEdit(cell!, e));\n\n this.input.autoselect = (cell?.column?.editor?.editorSettings?.autoselect as boolean) || true;\n\n if (this.popup) {\n const popup = this.popup;\n this.popup.attachment = '.ids-data-grid-wrapper';\n this.popup.slot = 'menu-container';\n\n this.popup.appendToTargetParent();\n if (this.popup.popup) {\n this.popup.popup.positionStyle = 'fixed';\n this.popup.popup.popupOpenEventsTarget = document.body;\n this.popup.popup.onOutsideClick = async (e: MouseEvent) => {\n if (!e.composedPath().includes(popup)) { await popup.hide(); }\n };\n }\n\n // apply popup required settings\n this.popup.id = `${cell!.column.field}-time-picker-popup`;\n this.popup.triggerType = 'click';\n this.popup.triggerElem = `#${cell!.column.field}-time-picker-btn`;\n this.popup.target = `#${cell!.column.field}-time-picker`;\n this.popup.popup!.align = 'bottom, right';\n this.popup.popup!.arrowTarget = `#${cell!.column.field}-time-picker-btn`;\n this.popup.popup!.y = 16;\n this.popup.refreshTriggerEvents();\n\n if (this.#originalDate) {\n const hours = this.#originalDate.getHours();\n this.popup.hours = hours > 11 ? hours - 12 : hours;\n this.popup.minutes = this.#originalDate.getMinutes();\n this.popup.seconds = this.#originalDate.getSeconds();\n this.popup.period = hours > 11 ? 'PM' : 'AM';\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n applyEditorPopupFocus(this);\n }\n\n this.#attachEventListeners(cell);\n }\n\n #buildTimePickerTriggerField(cell: IdsDataGridCell): IdsTriggerField {\n const component = <IdsTriggerField>document.createElement('ids-trigger-field');\n\n // apply user settings\n applyEditorSettings(component, cell?.column.editor?.editorSettings);\n\n // apply required settings\n component.id = `${cell.column.field}-time-picker`;\n component.fieldHeight = String(cell?.dataGrid?.rowHeight) === 'xxs' ? `xs` : String(cell?.dataGrid?.rowHeight);\n component.labelState = 'collapsed';\n component.colorVariant = 'borderless';\n component.size = 'full';\n component.mask = true;\n\n component.insertAdjacentHTML(\n 'beforeend',\n `<ids-trigger-button\n class=\"ids-trigger-field-slot-trigger-end\"\n id=\"${cell.column.field}-time-picker-btn\"\n slot=\"trigger-end\"\n icon=\"clock\"></ids-trigger-button>`\n );\n\n return component;\n }\n\n #buildTimePickerPopup(cell: IdsDataGridCell): IdsTimePickerPopup {\n const popup = <IdsTimePickerPopup>document.createElement('ids-time-picker-popup');\n\n // apply user settings\n applyEditorSettings(popup, cell?.column.editor?.editorSettings);\n\n return popup;\n }\n\n #attachEventListeners(cell?: IdsDataGridCell | undefined) {\n this.popup?.onEvent('hide', this.popup, () => {\n if (cell!.contains(cell!.dataGrid!.shadowRoot!.activeElement)) return;\n cell?.focus();\n });\n }\n\n save(cell?: IdsDataGridCell) {\n let date;\n const inputValue = this.input!.value;\n if (inputValue) {\n date = cell!.dataGrid.localeAPI!.parseDate(inputValue, { pattern: this.input!.format }, true) as Date;\n\n // Timepicker formats don't include the \"date\" portion,\n // So this fills in the missing parts from the `#originalDate` if possible to save a valid date value.\n if (this.#originalDate && (\n this.#originalDate.getMonth() !== date?.getMonth()\n || this.#originalDate.getFullYear() !== date?.getFullYear()\n || this.#originalDate.getDate() !== date?.getDate()\n )) {\n date?.setMonth(this.#originalDate.getMonth());\n date?.setFullYear(this.#originalDate.getFullYear());\n date?.setDate(this.#originalDate.getDate());\n }\n }\n\n return {\n value: date && isValidDate(date) ? date?.toISOString() : undefined,\n dirtyCheckValue: inputValue\n };\n }\n\n destroy() {\n this.input?.offEvent('focusout');\n this.input?.detachAllListeners();\n this.input?.remove();\n this.popup?.offEvent('hide');\n this.popup?.detachAllListeners();\n this.popup?.remove();\n this.#originalDate = undefined;\n }\n\n value() {\n return this.input?.value ?? '';\n }\n\n change(newValue: boolean | number | string) {\n if (this.input) this.input.value = String(newValue);\n }\n}\n\nexport class TreeEditor extends InputEditor {\n expandButton?: IdsButton;\n\n fieldContainer?: HTMLElement;\n\n /**\n * Adds extra button element for mimicking the tree formatter's display\n * @param {IdsDataGridCell} cell the cell element\n */\n init(cell?: IdsDataGridCell) {\n super.init(cell);\n\n const buttonHTML = this.#isExpandable(cell!) ? `<ids-button class=\"expand-button\" disabled=\"true\">\n <ids-icon icon=\"plusminus-folder-${this.#isExpanded(cell!) ? 'open' : 'closed'}\"></ids-icon>\n </ids-button>` : '';\n\n cell!.insertAdjacentHTML('afterbegin', `<span class=\"ids-data-grid-tree-container\">\n ${buttonHTML}\n <span class=\"ids-data-grid-tree-field-container\"></span>\n </span>`);\n\n this.expandButton = cell!.querySelector<IdsButton>('.expand-button')!;\n this.fieldContainer = cell!.querySelector<HTMLElement>('.ids-data-grid-tree-field-container')!;\n this.fieldContainer.appendChild(this.input!);\n }\n\n #isExpanded(cell: IdsDataGridCell) {\n const rowData = cell.dataGrid.data[cell.rowIndex];\n if (rowData) return rowData.rowExpanded !== false;\n return false;\n }\n\n #isExpandable(cell: IdsDataGridCell) {\n const rowData = cell.dataGrid.data[cell.rowIndex];\n if (rowData && Array.isArray(rowData.children)) {\n return rowData.children.length > 0;\n }\n return false;\n }\n\n destroy() {\n super.destroy();\n this.expandButton?.remove();\n this.fieldContainer?.remove();\n this.expandButton = undefined;\n this.fieldContainer = undefined;\n }\n}\n\nexport class LookupEditor implements IdsDataGridEditor {\n type = 'lookup';\n\n input?: IdsLookup;\n\n popup?: IdsModal;\n\n clickEvent?: MouseEvent;\n\n /**\n * Create an input and set the value and focus states\n * @param {IdsDataGridCell} cell the cell element\n */\n init(cell?: IdsDataGridCell) {\n const isInline = cell?.column.editor?.inline;\n this.input = <IdsLookup>document.createElement('ids-lookup');\n this.input.size = isInline ? 'full' : '';\n\n this.input.clearable = true;\n this.input.labelState = 'collapsed';\n\n // Clear cell and set value\n const value = cell?.innerText ?? '';\n cell!.innerHTML = '';\n cell?.appendChild(this.input as any);\n this.input.addEventListener('keydown', (e) => applyEditorEndCellEdit(cell!, e));\n\n this.input.value = value;\n\n this.popup = this.input.modal ?? undefined;\n\n applyEditorSettings(this.input, { ...cell?.column.editor?.editorSettings });\n applyEditorValidation(this.input?.input, cell?.column.editor?.editorValidation);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n applyEditorPopupFocus(this);\n\n if (this.input?.triggerField) {\n this.input.triggerField.labelState = 'collapsed';\n this.input.triggerField.colorVariant = isInline ? 'in-cell' : 'borderless';\n this.input.triggerField.focus();\n this.input.triggerField.offEvent('paste', this.input.triggerField.input);\n this.input.triggerField.onEvent('paste', this.input.triggerField.input, (e) => {\n e.stopPropagation();\n });\n }\n\n const rowHeight = String(cell?.dataGrid?.rowHeight);\n\n // TODO: these are hacks... we should fix styles for xxs and not cheat by giving them styles for xs\n this.input.fieldHeight = rowHeight === 'xxs' ? `xs` : rowHeight;\n this.input.triggerField?.toggleAttribute(attributes.NO_MARGINS, rowHeight !== 'xxs');\n this.input.triggerField?.clearableButton?.toggleAttribute(attributes.NO_MARGINS, rowHeight !== 'xxs');\n this.input.triggerButton?.toggleAttribute(attributes.NO_MARGINS, rowHeight !== 'xxs');\n }\n\n value() {\n return this.input?.value ?? '';\n }\n\n change(newValue: boolean | number | string) {\n if (this.input) this.input.value = String(newValue);\n }\n\n /* Save selected dropdown value */\n save(): IdsDataGridSaveValue | undefined | null {\n return {\n value: this.input?.value,\n dirtyCheckValue: this.input?.input?.value\n };\n }\n\n /* Destroy the editor */\n destroy() {\n this.input?.offEvent('keydown');\n this.input?.offEvent('change');\n this.input = undefined;\n }\n}\n\nexport const editors: Array<{ type: string, editor?: IdsDataGridEditor }> = [];\n\neditors.push({\n type: 'input',\n editor: new InputEditor()\n});\n\neditors.push({\n type: 'password',\n editor: new PasswordInputEditor()\n});\n\neditors.push({\n type: 'checkbox',\n editor: new CheckboxEditor()\n});\n\neditors.push({\n type: 'dropdown',\n editor: new DropdownEditor()\n});\n\neditors.push({\n type: 'datepicker',\n editor: new DatePickerEditor()\n});\n\neditors.push({\n type: 'timepicker',\n editor: new TimePickerEditor()\n});\n\neditors.push({\n type: 'tree',\n editor: new TreeEditor()\n});\n\neditors.push({\n type: 'lookup',\n editor: new LookupEditor()\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|