ids-enterprise-wc 1.15.9-patch.17 → 1.15.9-patch.19

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.
Files changed (27) hide show
  1. package/chunks/{ids-chunk-A3SIMVC4-full.js → ids-chunk-EDQ2YH35-full.js} +55 -7
  2. package/chunks/ids-chunk-EDQ2YH35-full.js.map +7 -0
  3. package/chunks/{ids-chunk-GL7SUNG4-full.js → ids-chunk-OITRWBV5-full.js} +46 -8
  4. package/chunks/ids-chunk-OITRWBV5-full.js.map +7 -0
  5. package/chunks/{ids-chunk-5XYPHVID-full.js → ids-chunk-YGNZM5DD-full.js} +1 -1
  6. package/chunks/{ids-chunk-5XYPHVID-full.js.map → ids-chunk-YGNZM5DD-full.js.map} +2 -2
  7. package/components/ids-accordion/ids-accordion.css +141 -77
  8. package/components/ids-button/ids-button.css +392 -43
  9. package/components/ids-checkbox/ids-checkbox.css +580 -7
  10. package/components/ids-data-grid/ids-data-grid-column.d.ts +10 -0
  11. package/components/ids-data-grid/ids-data-grid-column.js +1 -1
  12. package/components/ids-data-grid/ids-data-grid-filters.js +1 -1
  13. package/components/ids-data-grid/ids-data-grid.css +38 -1
  14. package/components/ids-data-grid/ids-data-grid.js +3 -3
  15. package/components/ids-hyperlink/ids-hyperlink.css +188 -15
  16. package/components/ids-menu/ids-menu.css +11 -7
  17. package/components/ids-pager/ids-pager.css +37 -3
  18. package/components/ids-tabs/ids-tabs.css +336 -11
  19. package/components/ids-tag/ids-tag.css +152 -8
  20. package/custom-elements.json +1719 -1719
  21. package/enterprise-wc.all.iife.js +97 -11
  22. package/enterprise-wc.all.iife.js.map +2 -2
  23. package/enterprise-wc.js +3 -3
  24. package/package.json +1 -1
  25. package/vscode.html-custom-data.json +1 -1
  26. package/chunks/ids-chunk-A3SIMVC4-full.js.map +0 -7
  27. package/chunks/ids-chunk-GL7SUNG4-full.js.map +0 -7
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/components/ids-data-grid/ids-data-grid-filters.ts"],
4
- "sourcesContent": ["import { attributes } from '../../core/ids-attributes';\nimport { hasClass, getClosestContainerNode, getClosest } from '../../utils/ids-dom-utils/ids-dom-utils';\nimport { escapeHTML } from '../../utils/ids-xss-utils/ids-xss-utils';\nimport type { IdsDataGridColumn } from './ids-data-grid-column';\nimport IdsDataGridCell from './ids-data-grid-cell';\nimport '../ids-menu-button/ids-menu-button';\nimport '../ids-popup-menu/ids-popup-menu';\nimport '../ids-popup/ids-popup';\nimport '../ids-menu/ids-menu';\nimport '../ids-menu/ids-menu-item';\nimport '../ids-input/ids-input';\nimport '../ids-dropdown/ids-dropdown';\nimport '../ids-dropdown/ids-dropdown-list';\nimport '../ids-icon/ids-icon';\nimport '../ids-trigger-field/ids-trigger-button';\nimport '../ids-trigger-field/ids-trigger-field';\nimport '../ids-date-picker/ids-date-picker-popup';\nimport '../ids-time-picker/ids-time-picker-popup';\n\nimport type IdsDatePickerPopup from '../ids-date-picker/ids-date-picker-popup';\nimport type IdsMenuItem from '../ids-menu/ids-menu-item';\nimport type IdsTriggerField from '../ids-trigger-field/ids-trigger-field';\nimport type IdsMenuButton from '../ids-menu-button/ids-menu-button';\nimport type IdsPopupMenu from '../ids-popup-menu/ids-popup-menu';\nimport type IdsDropdown from '../ids-dropdown/ids-dropdown';\nimport IdsGlobal from '../ids-global/ids-global';\n\ntype FilterPopupCache = { element: any, isSlot: boolean };\n\n/** Arabic numeral characters (0-9 \u2192 \u0660-\u0669) */\nconst ARABIC_NUMERALS = ['\\u0660', '\\u0661', '\\u0662', '\\u0663', '\\u0664', '\\u0665', '\\u0666', '\\u0667', '\\u0668', '\\u0669'];\n\nexport interface IdsDataGridFilterConditions {\n /** The filter element */\n filterElem?: any;\n /** The id of the column */\n columnId?: string;\n /** The value filter */\n value?: string;\n /** The filter operator */\n operator?: 'equals' | 'does-not-equal' | 'contains' | 'does-not-contain' | 'end-with' | 'start-with' | 'does-not-end-with' | 'does-not-start-with' | 'is-empty' | 'is-not-empty' | 'in-range' | 'less-than' | 'less-equals' | 'greater-than' | 'greater-equals' | 'selected' | 'not-selected' | 'selected-notselected' | 'earlier-than' | 'earlier-equals' | 'later-than' | 'later-equals';\n}\ninterface IdsDataGridFilterOperator {\n value: string;\n label: string;\n icon: string;\n selected?: boolean;\n}\n\n/**\n * IDS Data Grid Filters\n * @type {object}\n */\nexport default class IdsDataGridFilters {\n constructor(root: any) {\n this.root = root;\n }\n\n root: any;\n\n /**\n * Filter defaults.\n * @type {object}\n */\n DEFAULTS = {\n disableClientFilter: false,\n filterable: true,\n filterWhenTyping: true,\n filterRowDisabled: false\n };\n\n /**\n * Saved list of conditions to use with filter rerender.\n * @private\n * @type {Array<IdsDataGridFilterConditions>}\n */\n #conditions: any = [];\n\n /**\n * Initial values to use reset filter.\n * @private\n * @type {object}\n */\n #initial: any = {};\n\n /**\n * Hold filter in-process state.\n * @private\n * @type {boolean}\n */\n filterIsProcessing = false;\n\n /**\n * Focused element use with rerender filter.\n * @private\n * @type {HTMLElement|null}\n */\n focused: any;\n\n /**\n * Suppress filtered event\n * @private\n * @type {boolean}\n */\n #suppressFilteredEvent = false;\n\n /**\n * Track filter popups that get moved outside the data grid\n * @private\n */\n #filterPopups: FilterPopupCache[] = [];\n\n /**\n * Track filter condition popups that get moved outside the data grid\n * @private\n */\n #filterConditionPopups: Set<IdsMenuButton> = new Set<IdsMenuButton>();\n\n /**\n * Text filter markup.\n * @param {IdsDataGridColumn} column The column info\n * @returns {string} The resulting template\n */\n text(column: IdsDataGridColumn) {\n return this.#btnAndInputTemplate('text', column);\n }\n\n /**\n * Integer filter markup.\n * @param {IdsDataGridColumn} column The column info\n * @returns {string} The resulting template\n */\n integer(column: IdsDataGridColumn) {\n return this.#btnAndInputTemplate('integer', column);\n }\n\n /**\n * Decimal filter markup.\n * @param {IdsDataGridColumn} column The column info\n * @returns {string} The resulting template\n */\n decimal(column: IdsDataGridColumn) {\n return this.#btnAndInputTemplate('decimal', column);\n }\n\n /**\n * Contents filter markup.\n * @param {IdsDataGridColumn} column The column info\n * @returns {string} The resulting template\n */\n contents(column: IdsDataGridColumn) {\n return this.#dropdownTemplate('contents', column);\n }\n\n /**\n * Dropdown filter markup.\n * @param {IdsDataGridColumn} column The column info\n * @returns {string} The resulting template\n */\n dropdown(column: IdsDataGridColumn) {\n return this.#dropdownTemplate('dropdown', column);\n }\n\n /**\n * Checkbox filter markup.\n * @param {IdsDataGridColumn} column The column info\n * @returns {string} The resulting template\n */\n checkbox(column: IdsDataGridColumn) {\n return this.#filterButtonTemplate('checkbox', column);\n }\n\n /**\n * Date filter markup.\n * @param {IdsDataGridColumn} column The column info\n * @returns {string} The resulting template\n */\n date(column: IdsDataGridColumn) {\n const TYPE = 'date';\n const id = `${this.#id(column)}-${TYPE}`;\n const opt = column.filterOptions || {};\n const disabled = opt.disabled ? ' disabled' : '';\n const format = opt.format ? ` format=\"${opt.format}\"` : '';\n const firstDayOfWeek = opt.firstDayOfWeek ? ` first-day-of-week=\"${opt.firstDayOfWeek}\"` : '';\n const showCancel = opt.showCancel ? ` show-cancel=\"${!!opt.showCancel}\"` : '';\n const showClear = opt.showClear ? ` show-clear=\"${!!opt.showClear}\"` : '';\n const showToday = opt.showToday ? ` show-today=\"${!!opt.showToday}\"` : '';\n const showPicklistWeek = opt.showPicklistWeek ? ` show-picklist-week=\"${!!opt.showPicklistWeek}\"` : '';\n const showPicklistMonth = opt.showPicklistMonth ? ` show-picklist-month=\"${!!opt.showPicklistMonth}\"` : '';\n const showPicklistYear = opt.showPicklistYear ? ` show-picklist-year=\"${!!opt.showPicklistYear}\"` : '';\n const showWeekNumbers = opt.showWeekNumbers ? ` show-week-numbers=\"${!!opt.showWeekNumbers}\"` : '';\n const useCurrentTime = opt.useCurrentTime ? ` use-current-time=\"${!!opt.useCurrentTime}\"` : '';\n const useRange = opt.useRange ? ` use-range=\"${!!opt.useRange}\"` : '';\n const minuteInterval = opt.minuteInterval ? ` minute-interval=\"${opt.minuteInterval}\"` : '';\n const secondInterval = opt.secondInterval ? ` second-interval=\"${opt.secondInterval}\"` : '';\n\n const hasTime = /[Hhmst]/.test(opt.format || '');\n const showApply = opt.showApply || hasTime ? ` show-apply=\"${!!opt.showApply || hasTime}\"` : '';\n\n const filtered = this.#conditions.filter((c: IdsDataGridFilterConditions) => c.columnId === column.id);\n let value = (filtered[0] as any)?.value ?? null;\n this.#initial[column.id] = this.#initial[column.id] || {};\n if (!this.#initial[column.id].datePicker) this.#initial[column.id].datePicker = { value };\n value = value ? ` value=\"${value}\"` : '';\n\n const filterButton = `${this.#filterButtonTemplate(TYPE, column)}`;\n const trigger = `${this.#triggerFieldTemplate(TYPE, column, 'calendar', 'DatePickerTriggerButton')}`;\n\n const popup = `<ids-date-picker-popup\n attachment=\".ids-data-grid-wrapper\"\n data-filter-type=\"${TYPE}\"\n trigger-type=\"click\"\n id=\"popup-${id}\"\n no-margins\n compact=\"true\"\n ${format}\n ${firstDayOfWeek}\n ${showToday}${showWeekNumbers}${showClear}${showCancel}${showApply}\n ${showPicklistWeek}${showPicklistMonth}${showPicklistYear}\n ${useCurrentTime}${useRange}${minuteInterval}${secondInterval}\n ${value}${disabled}></ids-date-picker-popup>`;\n\n const columnAlign = column.filterAlign ?? column.align;\n if (columnAlign === 'right') return `${trigger}${filterButton}${popup}`;\n return `${filterButton}${trigger}${popup}`;\n }\n\n /**\n * Time filter markup.\n * @param {IdsDataGridColumn} column The column info\n * @returns {string} The resulting template\n */\n time(column: IdsDataGridColumn) {\n const TYPE = 'time';\n const id = `${this.#id(column)}-${TYPE}`;\n const opt = column.filterOptions || {};\n const label = opt.label || 'Filter time picker';\n const format = opt.format ? ` format=\"${opt.format}\"` : '';\n const placeholder = opt.placeholder ? ` placeholder=\"${opt.placeholder}\"` : '';\n const minuteInterval = opt.minuteInterval ? ` minute-interval=\"${opt.minuteInterval}\"` : '';\n const secondInterval = opt.secondInterval ? ` second-interval=\"${opt.secondInterval}\"` : '';\n const autoselect = opt.autoselect ? ' autoselect' : '';\n const autoupdate = opt.autoupdate ? ' autoupdate' : '';\n const disabled = opt.disabled ? ' disabled' : '';\n const readonly = opt.readonly ? ' readonly' : '';\n\n const filtered = this.#conditions.filter((c: IdsDataGridFilterConditions) => c.columnId === column.id);\n let value = (filtered[0] as any)?.value ?? null;\n this.#initial[column.id] = this.#initial[column.id] || {};\n if (!this.#initial[column.id].timePicker) this.#initial[column.id].timePicker = { value };\n value = value ? ` value=\"${value}\"` : '';\n\n const filterButton = `${this.#filterButtonTemplate(TYPE, column)}`;\n const trigger = `${this.#triggerFieldTemplate(TYPE, column, 'clock', 'TimePickerTriggerButton')}`;\n const popup = `<ids-time-picker-popup\n attachment=\".ids-data-grid-wrapper\"\n trigger-type=\"click\"\n color-variant=\"${!this.root.listStyle ? 'alternate-formatter' : 'alternate-list-formatter'}\"\n data-filter-type=\"${TYPE}\"\n size=\"${opt.size || 'full'}\"\n label=\"${label}\"\n label-state=\"collapsed\"\n id=\"${id}\"\n no-margins\n compact\n ${format}${placeholder}${minuteInterval}${secondInterval}\n ${autoselect}${autoupdate}${disabled}${readonly}${value}\n ></ids-time-picker-popup>`;\n\n if (column?.align === 'right') return `${trigger}${filterButton}${popup}`;\n return `${filterButton}${trigger}${popup}`;\n }\n\n /**\n * Get filter wrapper element by given column id\n * @param {string} columnId The column id\n * @returns {HTMLElement|undefined} The filter wrapper element\n */\n filterWrapperById(columnId: string | undefined) {\n return this.root.shadowRoot.querySelector(`.ids-data-grid-header-cell[column-id=\"${columnId}\"]\n .ids-data-grid-header-cell-filter-wrapper`);\n }\n\n /**\n * Returns markup for a header cell filter in data grid.\n * @param {IdsDataGridColumn} column The column info\n * @returns {string} The resulting template\n */\n filterTemplate(column: IdsDataGridColumn) {\n const slottedEl = this.root.querySelector(`[slot=\"filter-${column.id}\"]`);\n let html: any = '';\n if (slottedEl) {\n html = `<slot name=\"filter-${column.id}\"></slot>`;\n } else if (typeof column.filterType === 'function') {\n html = column.filterType.apply(this, [column]);\n }\n if (html !== '') {\n let cssClass = 'ids-data-grid-header-cell-filter-wrapper';\n cssClass += !this.root.filterable ? ' hidden' : '';\n cssClass += column.filterOptions?.disabled ? ' disabled' : '';\n html = `<span class=\"${cssClass}\">${html}</span>`;\n }\n return html;\n }\n\n /**\n * Set datepicker type to range or single date.\n * @private\n * @param {object} datePicker datepicker element.\n * @param {string} operator filter type.\n * @returns {void}\n */\n #setDatePickerValue(datePicker: IdsTriggerField, operator?: string): void {\n if (datePicker) {\n const popupId = datePicker.getAttribute('id')?.replace('field-', 'popup-');\n const popupEl: IdsDatePickerPopup = this.root.wrapper.querySelector(`#${popupId}`)!;\n if (popupEl) {\n if (operator === 'in-range') {\n popupEl.useRange = true;\n } else {\n let startDateValue = datePicker.value;\n // Only reset range settings if switching FROM range mode TO single mode\n if (popupEl.useRange && popupEl.rangeSettings && datePicker.value) {\n startDateValue = datePicker.value.split(popupEl.rangeSettings.separator)[0];\n popupEl.resetRangeSettings();\n }\n popupEl.useRange = false;\n popupEl.value = startDateValue;\n }\n }\n }\n }\n\n /**\n * Reset all filters as initial state.\n * @returns {void}\n */\n resetFilters() {\n this.filterNodes?.forEach((n: any) => {\n const slot = n.querySelector('slot[name^=\"filter-\"]');\n const node = slot ? slot.assignedElements()[0] : n;\n if (node) {\n const headerElem = n.closest('.ids-data-grid-header-cell');\n const columnData = this.root.columnDataByHeaderElem(headerElem);\n const initial = this.#initial[columnData.id];\n\n const input = node.querySelector('ids-input');\n const dropdown = node.querySelector('ids-dropdown');\n const triggerField = node.querySelector('ids-trigger-field');\n const timePicker = node.querySelector('ids-time-picker');\n const btn = node.querySelector('ids-menu-button') as IdsMenuButton | null;\n\n if (input) input.value = initial?.input?.value || '';\n if (dropdown) dropdown.value = initial?.dropdown?.value || '';\n if (triggerField) triggerField.value = initial?.triggerField?.value || '';\n if (timePicker) timePicker.value = initial?.timePicker?.value || '';\n if (btn) {\n const menuEl: IdsPopupMenu | null = btn.menuEl;\n const initialBtnValue = initial?.btn?.value;\n let item;\n\n if (menuEl) {\n // Reset filter from popup menu selected states\n item = menuEl.items.filter((itm: any) => itm.value === initialBtnValue)[0] ?? menuEl.items[0];\n menuEl.selectItem(item);\n } else if (columnData.filterType?.name) {\n // If popup menu hasn't been rendered yet, reset filter from column configuration\n const operators = this.#operators(columnData.filterType.name, columnData);\n item = operators.filter((itm: any) => itm.value === initialBtnValue)[0] ?? operators[0];\n if (item) {\n btn.setAttribute(attributes.ICON, item.icon);\n btn.setAttribute(attributes.VALUE, item.value);\n btn.updateBtnText(item.label);\n }\n }\n\n if (triggerField && item) this.#setDatePickerValue(triggerField, item.value);\n }\n }\n });\n }\n\n /**\n * Set filter conditions on the UI Only.\n * @param {Array<IdsDataGridFilterConditions>} conditions An array of objects with the filter conditions.\n * @returns {Array<object>} An array of currently showing filter conditions.\n */\n setFilterConditions(conditions: Array<IdsDataGridFilterConditions>) {\n this.#suppressFilteredEvent = true;\n this.resetFilters();\n const toBeRemoved: any = [];\n conditions.forEach((condition, i) => {\n const headerFilterWrapper = this.filterWrapperById(condition.columnId);\n if (!headerFilterWrapper || hasClass(headerFilterWrapper, 'disabled') || hasClass(headerFilterWrapper, 'readonly')) return;\n\n const headerSlot = headerFilterWrapper.querySelector('slot[name^=\"filter-\"]');\n const headerRoot = headerSlot ? headerSlot.assignedElements()[0] : headerFilterWrapper;\n if (headerRoot) {\n const input = headerRoot.querySelector('ids-input');\n const button = headerRoot.querySelector('ids-menu-button') as IdsMenuButton | null;\n const dropdown = headerRoot.querySelector('ids-dropdown');\n const triggerField = headerRoot.querySelector('ids-trigger-field');\n const timePicker = headerRoot.querySelector('ids-time-picker');\n const headerCell = headerRoot.closest('.ids-data-grid-header-cell');\n const columnData = this.root.columnDataByHeaderElem(headerCell);\n\n const conditionValue = condition.value || '';\n if (input) input.value = conditionValue;\n if (triggerField) triggerField.value = conditionValue;\n if (timePicker) timePicker.value = conditionValue;\n if (dropdown) {\n dropdown.value = conditionValue;\n if (dropdown.value === this.#dropdownNotFilterItem(columnData).value) toBeRemoved.push(i);\n }\n if (timePicker && !columnData.formatOptions?.dateFormat && !columnData.formatOptions?.timeStyle) {\n if (!columnData.formatOptions) columnData.formatOptions = {};\n columnData.formatOptions.dateFormat = timePicker.format;\n columnData.formatOptions.timeStyle = 'short';\n }\n if (button) {\n const menuEl = button.menuEl;\n const conditionOperator = condition.operator;\n\n if (menuEl) {\n // If Popup Menu rendered, get selected values from it\n const item = menuEl.items.filter((itm: any) => itm.value === conditionOperator)[0] ?? menuEl.items[0];\n if (item) button.menuEl.selectItem(item);\n } else if (columnData.filterType?.name) {\n // If Popup Menu not rendered, get operator from column data and update menu button\n const operators = this.#operators(columnData.filterType.name, columnData);\n const item = operators.filter((itm: any) => itm.value === conditionOperator)[0] ?? operators[0];\n if (item) {\n button.setAttribute(attributes.ICON, item.icon);\n button.setAttribute(attributes.VALUE, item.value);\n button.updateBtnText(item.label);\n }\n }\n }\n if (!condition.filterElem) condition.filterElem = timePicker || triggerField || dropdown || input;\n this.#setDatePickerValue(triggerField, condition.operator);\n }\n });\n if (toBeRemoved.length) conditions = conditions.filter((condition, idx) => !toBeRemoved.includes(idx));\n this.#suppressFilteredEvent = false;\n return conditions;\n }\n\n /**\n * Get filter conditions in array from whats set in the UI.\n * @returns {Array<object>} An array of currently showing filter conditions.\n */\n filterConditions(): Array<IdsDataGridFilterConditions> {\n const filterExpr: any = [];\n this.filterNodes?.forEach((n: any) => {\n const slot = n.querySelector('slot[name^=\"filter-\"]');\n const node = slot ? slot.assignedElements()[0] : n;\n if (node) {\n const input = node.querySelector('ids-input');\n const triggerField = node.querySelector('ids-trigger-field');\n const btn = node.querySelector('ids-menu-button');\n const dropdown = node.querySelector('ids-dropdown');\n const timePicker = node.querySelector('ids-time-picker');\n if (!btn && !input && !triggerField && !dropdown) return;\n\n const headerElem = n.closest('.ids-data-grid-header-cell');\n const columnData = this.root.columnDataByHeaderElem(headerElem);\n let operator = btn?.value?.[0]\n || btn?.menuEl?.items?.[0]?.value\n || this.#operators(columnData.filterType?.name, columnData)?.[0]?.value;\n if (!operator && !btn && input) operator = 'contains';\n const value = input?.value ?? triggerField?.value ?? dropdown?.value ?? timePicker?.value ?? '';\n if (dropdown) {\n operator = 'equals';\n if (value === this.#dropdownNotFilterItem(columnData).value) return;\n }\n if (timePicker && !columnData.formatOptions?.dateFormat && !columnData.formatOptions?.timeStyle) {\n if (!columnData.formatOptions) columnData.formatOptions = {};\n columnData.formatOptions.dateFormat = timePicker.format;\n columnData.formatOptions.timeStyle = 'short';\n }\n this.#setDatePickerValue(triggerField, operator);\n\n if (operator === 'selected-notselected') return;\n if (value === '' && !dropdown && !(/\\b(is-not-empty|is-empty|selected|not-selected)\\b/g.test(operator))) return;\n\n const filterElem = timePicker || dropdown || triggerField || input;\n\n const condition = {\n columnId: columnData.id,\n columnData,\n filterElem,\n operator,\n value\n };\n\n filterExpr.push(condition);\n }\n });\n\n return filterExpr;\n }\n\n /**\n * Apply the Filter with the currently selected conditions, or the ones passed in.\n * @param {Array} conditions An array of objects with the filter conditions\n * @returns {void}\n */\n applyFilter(conditions?: any) {\n this.root?.resetCache();\n\n if (this.filterIsProcessing || !this.root.filterable || this.root.filterRowDisabled) return;\n this.filterIsProcessing = true;\n\n if (conditions) {\n conditions = this.setFilterConditions(conditions);\n } else {\n conditions = this.filterConditions();\n }\n this.#conditions = conditions;\n\n // Client filter\n if (this.root.disableClientFilter) {\n this.root.triggerEvent('filtered', this.root, { bubbles: true, detail: { elem: this.root, conditions } });\n this.filterIsProcessing = false;\n this.root.saveSettings?.();\n return;\n }\n\n // No need to go further, if no condition/s to filter\n if ((!conditions?.length && !this.root.datasource.filtered) || !conditions) {\n this.filterIsProcessing = false;\n return;\n }\n\n // Should fire clear event\n const isCleared = !conditions.length && this.root.datasource.filtered;\n let isFilterApply = false;\n\n const checkColumn = (c: any, row: any, index: any, isKeyword: boolean = false) => {\n let isMatch = true;\n if (!c.columnData) {\n c.columnData = this.root.columnDataById(c.columnId);\n if (!c.columnData) return;\n }\n\n if (!isKeyword) {\n // Must be filter type\n if (typeof c.columnData.filterType !== 'function'\n && typeof c.columnData.filterFunction !== 'function') return;\n\n // Use custom filter\n if (typeof c.columnData.filterFunction === 'function') {\n isMatch = c.columnData.filterFunction({ data: row, index, condition: c });\n isFilterApply = true; // Add this line to indicate filter was applied\n if (!isMatch) {\n this.filterIsProcessing = false;\n }\n return isMatch; // Return the match result directly\n }\n }\n\n // All other use in-built filters\n const filterType = c.columnData.filterType?.name || 'text';\n\n // Single filter\n const filterWrapper = this.filterWrapperById(c.columnId);\n if (hasClass(filterWrapper, 'disabled') || hasClass(filterWrapper, 'readonly')) return;\n\n const column = c.columnData;\n\n const stringVal = (v: any) => ((v === null || v === undefined) ? '' : v.toString().toLowerCase());\n const formatterVal = () => {\n const val = IdsDataGridCell.template(row, column, index, this.root);\n const rex = /(<([^>]+)>)|(amp;)|(&lt;([^>]+)&gt;)/ig;\n return val.replace(rex, '').trim().toLowerCase();\n };\n let conditionValue = stringVal(c.value);\n let value = row[column.field];\n let valueStr = stringVal(value);\n\n // Dropdown, multiselect and contents types\n if (/dropdown|multiselect|contents/g.test(filterType)) {\n if ((value === null || typeof value === 'undefined') && c.value === '') {\n const temp = 'filter-blank-value-temp';\n value = temp;\n conditionValue = temp;\n } else {\n conditionValue = c.value;\n }\n }\n\n // Run Data over the formatter\n if (filterType === 'text') {\n value = formatterVal();\n valueStr = stringVal(value);\n }\n\n // Integer\n if (filterType === 'integer') {\n value = formatterVal();\n value = this.root.localeAPI?.parseNumber(value);\n conditionValue = this.root.localeAPI?.parseNumber(conditionValue);\n }\n\n // Decimal\n if (filterType === 'decimal') {\n value = formatterVal();\n value = this.root.localeAPI?.parseNumber(value);\n conditionValue = this.root.localeAPI?.parseNumber(conditionValue);\n }\n\n // Date Time\n if (filterType === 'date' || filterType === 'time') {\n if (/string|undefined/g.test(typeof value)) value = formatterVal();\n const getValues = (rValue: any, cValue: any) => {\n // NOTE: HERE IS THE DATE PROBLEM, format is always equal to a time format, not a date format\n const defaultFilterFormat = filterType === 'date'\n ? this.root.localeAPI?.calendar().dateFormat\n : this.root.localeAPI?.calendar().timeFormat;\n const format = c.format || column.formatOptions || defaultFilterFormat;\n\n cValue = this.root.localeAPI?.parseDate(cValue, format);\n if (cValue && cValue instanceof Date && !Number.isNaN(cValue.getTime())) {\n if (filterType === 'time') {\n // drop the day, month and year\n cValue.setDate(1);\n cValue.setMonth(0);\n cValue.setFullYear(0);\n }\n\n cValue = cValue.getTime();\n } else {\n cValue = null;\n }\n\n if (typeof rValue === 'string' && rValue) {\n rValue = this.root.localeAPI?.parseDate(rValue, format);\n\n if (rValue && rValue instanceof Date && !Number.isNaN(rValue.getTime())) {\n if (filterType === 'time') {\n // drop the day, month and year\n rValue.setDate(1);\n rValue.setMonth(0);\n rValue.setFullYear(0);\n } else if (!(column.formatOptions?.showTime)) {\n // Drop any time component of the row data for the filter\n // as it is a date only field\n rValue.setHours(0);\n rValue.setMinutes(0);\n rValue.setSeconds(0);\n rValue.setMilliseconds(0);\n }\n rValue = rValue.getTime();\n } else {\n rValue = null;\n }\n }\n return { rValue, cValue };\n };\n\n let values = null;\n if (c.operator === 'in-range') { // range stuff\n const filterButton = c.filterElem.querySelector('ids-trigger-button');\n const datePickerPopupSelector = c.filterElem.getAttribute('aria-controls') ?? filterButton?.getAttribute('aria-controls');\n const datePickerPopup: IdsDatePickerPopup = this.root.wrapper.querySelector(`#${datePickerPopupSelector}`)!;\n\n if (datePickerPopup) {\n if (c.value.indexOf(datePickerPopup.rangeSettings.separator) > -1) {\n const cValues = c.value.split(datePickerPopup.rangeSettings.separator);\n const range = { start: getValues(value, cValues[0]), end: getValues(value, cValues[1]) };\n values = {\n rValue: range.start.rValue,\n cValue: { start: range.start.cValue, end: range.end.cValue }\n };\n } else values = getValues(value, c.value);\n }\n } else {\n values = getValues(value, c.value);\n }\n value = values ? values.rValue : value;\n conditionValue = values ? values.cValue : conditionValue;\n }\n switch (c.operator) {\n case 'equals':\n isMatch = (value === conditionValue && value !== '');\n break;\n case 'does-not-equal':\n isMatch = (value !== conditionValue);\n break;\n case 'contains':\n isMatch = (valueStr.indexOf(conditionValue) > -1 && value.toString() !== '');\n break;\n case 'does-not-contain':\n isMatch = (valueStr.indexOf(conditionValue) === -1);\n break;\n case 'end-with':\n // amazonq-ignore-next-line\n isMatch = (valueStr.lastIndexOf(conditionValue) === (valueStr.length - conditionValue.toString().length) && valueStr !== '' && (valueStr.length >= conditionValue.toString().length));\n break;\n case 'start-with':\n isMatch = (valueStr.indexOf(conditionValue) === 0 && valueStr !== '');\n break;\n case 'does-not-end-with':\n // amazonq-ignore-next-line\n isMatch = (valueStr.lastIndexOf(conditionValue) === (valueStr.length - conditionValue.toString().length) && valueStr !== '' && (valueStr.length >= conditionValue.toString().length));\n isMatch = !isMatch;\n break;\n case 'does-not-start-with':\n isMatch = !(valueStr.indexOf(conditionValue) === 0 && valueStr !== '');\n break;\n case 'is-empty':\n isMatch = (valueStr === '');\n break;\n case 'is-not-empty':\n if (typeof value === 'string') {\n isMatch = !!value.length;\n break;\n }\n if (typeof value === 'number') {\n isMatch = !Number.isNaN(value);\n break;\n }\n isMatch = value !== null && value !== undefined;\n break;\n case 'in-range':\n if (typeof conditionValue === 'object') {\n isMatch = value >= conditionValue.start && value <= conditionValue.end && value !== '';\n } else isMatch = (value === conditionValue && value !== '');\n break;\n case 'less-than':\n isMatch = (value < conditionValue && (value !== '' && value !== null));\n break;\n case 'earlier-than':\n isMatch = (value < conditionValue && (value !== '' && value !== null));\n break;\n case 'less-equals':\n isMatch = (value <= conditionValue && (value !== '' && value !== null));\n break;\n case 'earlier-equals':\n isMatch = (value <= conditionValue && (value !== '' && value !== null));\n break;\n case 'greater-than':\n isMatch = (value > conditionValue && (value !== '' && value !== null));\n break;\n case 'greater-equals':\n isMatch = (value >= conditionValue && (value !== '' && value !== null));\n break;\n case 'later-than':\n isMatch = (value > conditionValue && (value !== '' && value !== null));\n break;\n case 'later-equals':\n isMatch = (value >= conditionValue && (value !== '' && value !== null));\n break;\n case 'selected':\n if (typeof c.columnData.isChecked === 'function') {\n isMatch = c.columnData.isChecked(value);\n break;\n }\n isMatch = (valueStr === '1' || valueStr === 'true' || value === true || value === 1) && valueStr !== '';\n break;\n case 'not-selected':\n if (typeof c.columnData.isChecked === 'function') {\n isMatch = !c.columnData.isChecked(value);\n break;\n }\n isMatch = (valueStr === '0' || valueStr === 'false' || value === false || value === 0 || valueStr === '');\n break;\n case 'selected-notselected':\n isMatch = true;\n break;\n default:\n break;\n }\n\n isFilterApply = true;\n\n if (!isMatch) {\n this.filterIsProcessing = false;\n }\n\n return isMatch;\n };\n\n const checkRow = (row: any, index: number) => {\n let isMatch = true;\n\n for (let i = 0, l = conditions.length; i < l; i++) {\n const c = conditions[i] || {};\n\n if (c?.column === 'all') {\n const columns = this.root.columns;\n for (let j = 0; j < columns.length; j++) {\n const column = columns[j];\n const columnMatch = checkColumn({ ...c, columnId: column?.id }, row, index, true);\n isMatch = !!columnMatch;\n if (isMatch) {\n break;\n }\n }\n } else {\n const columnMatch = checkColumn(c, row, index);\n if (typeof columnMatch === 'undefined') {\n continue;\n }\n if (!columnMatch) {\n isMatch = false;\n break;\n }\n }\n }\n this.filterIsProcessing = false;\n return !isMatch;\n };\n\n this.root.datasource.filter(checkRow);\n this.root.redrawBody();\n\n // Fires after filter action occurs\n if (isCleared || isFilterApply) {\n this.root.toggleEmptyMessage();\n this.root.triggerEvent('filtered', this.root, {\n bubbles: true,\n detail: { elem: this.root, type: isCleared ? 'clear' : 'apply', conditions }\n });\n this.root.saveSettings?.();\n }\n\n requestAnimationFrame(() => {\n this.root.setActiveCell(0, 0, true, 'filter');\n });\n }\n\n /**\n * Set disabled filter row\n * @returns {void}\n */\n setFilterRowDisabled() {\n this.filterNodes?.forEach((n: any) => {\n const slot = n.querySelector('slot[name^=\"filter-\"]');\n const node = slot ? slot.assignedElements()[0] : n;\n if (node) {\n [\n node.querySelector('ids-input'),\n node.querySelector('ids-menu-button'),\n node.querySelector('ids-dropdown'),\n node.querySelector('ids-date-picker'),\n node.querySelector('ids-trigger-field'),\n node.querySelector('ids-time-picker')\n ].forEach((el) => {\n if (this.root.filterRowDisabled) {\n n.classList.add('disabled');\n el?.setAttribute('disabled', '');\n } else {\n n.classList.remove('disabled');\n el?.removeAttribute('disabled');\n }\n });\n }\n });\n }\n\n /**\n * Attach filters setting after data grid render\n * @returns {void}\n */\n attachFilterSettings() {\n // Set filter row should be disabled or not\n if (this.root.filterRowDisabled) this.setFilterRowDisabled();\n\n // Set compulsory attributes for slotted elements\n const setCompulsoryAttributes = (el: any) => {\n el?.setAttribute('color-variant', (!this.root.listStyle ? 'alternate-formatter' : 'alternate-list-formatter'));\n el?.setAttribute('label-state', 'collapsed');\n el?.setAttribute('no-margins', '');\n el?.setAttribute('compact', '');\n };\n\n this.filterNodes?.forEach((n: any) => {\n const slot = n.querySelector('slot[name^=\"filter-\"]');\n const node = slot ? slot.assignedElements()[0] : n;\n const headerElem = n.closest('.ids-data-grid-header-cell');\n const column = this.root.columnDataByHeaderElem(headerElem);\n const input = node?.querySelector('ids-input');\n const type = input?.getAttribute('data-filter-type');\n const dropdown = node?.querySelector('ids-dropdown');\n const dropdownList = node?.querySelector('ids-dropdown-list');\n const datePicker = node?.querySelector('ids-date-picker');\n const timePicker = node?.querySelector('ids-time-picker');\n const btn = node?.querySelector('ids-menu-button');\n const menu = node?.querySelector('ids-popup-menu');\n let triggerBtn = node?.querySelector('ids-trigger-button');\n let triggerField = node?.querySelector('ids-trigger-field');\n const datePickerPopup = node?.querySelector('ids-date-picker-popup');\n const timePickerPopup = node?.querySelector('ids-time-picker-popup');\n let menuAttachment = '.ids-data-grid-wrapper';\n\n // Slotted filter only\n if (slot && (input || dropdown || datePicker || timePicker || btn)) {\n menuAttachment = 'ids-data-grid';\n\n // Slotted initial\n this.#initial[column.id] = this.#initial[column.id] || {};\n const initial = this.#initial[column.id];\n if (input && !initial.input) initial.input = { value: input.value };\n if (dropdown && !initial.dropdown) initial.dropdown = { value: dropdown.value };\n if (datePicker && !initial.datePicker) initial.datePicker = { value: datePicker.value };\n if (timePicker && !initial.timePicker) initial.timePicker = { value: timePicker.value };\n if (btn && !initial.btn) initial.btn = { value: btn.value?.[0] };\n\n // Slotted attributes\n setCompulsoryAttributes(input);\n setCompulsoryAttributes(dropdown);\n setCompulsoryAttributes(datePicker);\n setCompulsoryAttributes(timePicker);\n if (btn) {\n btn.cssClass = [...new Set([...btn.cssClass, 'compact'])];\n btn.setAttribute('color-variant', (!this.root.listStyle ? 'alternate-formatter' : 'alternate-list-formatter'));\n btn.setAttribute('column-id', column.id);\n btn.setAttribute('square', 'true');\n }\n // Place slotted menus into a special slot placed near internal filter menus\n if (menu) {\n menu.setAttribute('slot', `menu-container`);\n }\n }\n\n // Connect Popup Menus\n if (menu) {\n if (slot) {\n triggerField = slot.assignedElements()[0].querySelector('ids-input');\n triggerBtn = slot.assignedElements()[0].querySelector('ids-menu-button');\n menu.setAttribute(attributes.TARGET, `#${triggerBtn.getAttribute('id')}`);\n menu.setAttribute(attributes.TRIGGER_ELEM, `#${triggerBtn.getAttribute('id')}`);\n } else {\n menu.setAttribute(attributes.ATTACHMENT, menuAttachment);\n }\n menu.setAttribute(attributes.TRIGGER_TYPE, 'click');\n menu.removeTriggerEvents();\n\n // Move/Rebind menu (order of these statements matters)\n menu.appendToTargetParent();\n this.#filterPopups.push({ element: menu, isSlot: !!slot });\n menu.keyboardEventTarget = this.root;\n menu.attachEventHandlers();\n menu.attachKeyboardListeners();\n if (menu.popup) {\n menu.popup.popupOpenEventsTarget = document.body;\n const isInModal = getClosest(menu, 'ids-modal') !== undefined;\n menu.popup.positionStyle = isInModal ? 'fixed' : 'absolute';\n menu.popup.onPlace = (popupRect: DOMRect) => {\n if (isInModal) popupRect.y += 58;\n return popupRect;\n };\n menu.popup.onOutsideClick = () => {\n menu.hide();\n };\n }\n }\n\n if (btn) {\n btn.setAttribute('data-filter-conditions-button', '');\n this.#filterConditionPopups.add(btn);\n }\n\n const dateOrTimePopup = datePickerPopup || timePickerPopup;\n if (dateOrTimePopup) {\n dateOrTimePopup.appendToTargetParent();\n if (dateOrTimePopup.popup) {\n dateOrTimePopup.popup.popupOpenEventsTarget = document.body;\n dateOrTimePopup.popup.onOutsideClick = (e: MouseEvent) => {\n if (!e.composedPath().includes(dateOrTimePopup)) { dateOrTimePopup.hide(); }\n };\n }\n dateOrTimePopup.setAttribute(attributes.TRIGGER_TYPE, 'click');\n dateOrTimePopup.setAttribute(attributes.TARGET, `#${triggerField.getAttribute(attributes.ID)}`);\n const isInModal = getClosest(dateOrTimePopup, 'ids-modal') !== undefined;\n\n dateOrTimePopup.setAttribute(attributes.TRIGGER_ELEM, `#${triggerBtn.getAttribute(attributes.ID)}`);\n dateOrTimePopup.popup?.setAttribute(attributes.ARROW_TARGET, `#${triggerBtn.getAttribute(attributes.ID)}`);\n if (dateOrTimePopup.popup) dateOrTimePopup.popup.y = 16;\n dateOrTimePopup.setAttribute(attributes.ATTACHMENT, menuAttachment);\n\n if (isInModal && datePickerPopup) {\n datePickerPopup.setAttribute(attributes.POSITION_STYLE, 'fixed');\n datePickerPopup.configurePopup();\n if (triggerBtn) {\n triggerBtn.setAttribute(attributes.SHOW_PICKLIST_MONTH, 'true');\n triggerBtn.setAttribute(attributes.SHOW_PICKLIST_YEAR, 'true');\n }\n }\n dateOrTimePopup.refreshTriggerEvents();\n this.#filterPopups.push({ element: dateOrTimePopup, isSlot: false });\n }\n\n // Date Picker - Adjust range settings\n if (datePickerPopup && triggerField) {\n const rangeSettings = column.filterOptions?.rangeSettings;\n if (rangeSettings) datePickerPopup.rangeSettings = rangeSettings;\n datePickerPopup.useRange = (btn?.value?.[0] === 'in-range');\n\n // Apply date masking to prevent alphabets/special characters\n const format = column.filterOptions?.format || this.root.localeAPI?.calendar().dateFormat;\n if (format && typeof format === 'string' && column.filterType?.name === 'date' && !column.filterFunction) {\n triggerField.mask = column.filterOptions?.mask || 'date';\n triggerField.maskOptions = column.filterOptions?.maskOptions || { format, locale: this.root.localeAPI };\n }\n }\n\n // Time Picker - Adjust format\n if (timePickerPopup) {\n const format = this.root.localeAPI?.calendar().timeFormat;\n triggerField.format = format;\n timePickerPopup.format = format;\n }\n\n // Dropdown/List settings\n if (dropdown && dropdownList) {\n dropdownList.configurePopup();\n dropdownList.setAttribute('size', 'full');\n dropdown.input.value = (dropdownList.selected || dropdownList.listBox?.children[0])?.textContent || '';\n dropdownList.setAttribute(attributes.ATTACHMENT, menuAttachment);\n dropdownList.appendToTargetParent();\n this.#filterPopups.push({ element: dropdownList, isSlot: false });\n if (dropdownList.popup) {\n dropdownList.popup.popupOpenEventsTarget = document.body;\n // Ensure dropdown can extend beyond grid boundaries\n dropdownList.popup.positionStyle = 'fixed';\n }\n dropdownList.setAttribute(attributes.TRIGGER_TYPE, 'custom');\n dropdownList.setAttribute(attributes.TARGET, `#${dropdown.getAttribute('id')}`);\n dropdownList.setAttribute(attributes.TRIGGER_ELEM, `#${dropdown.getAttribute('id')}`);\n dropdown.onEvent('click', dropdown, () => {\n const popup = dropdownList.popup;\n if (popup) {\n if (!popup.visible) dropdown.open();\n else dropdown.close();\n }\n });\n dropdownList.onOutsideClick = (e: MouseEvent) => {\n if (!e.composedPath().includes(dropdownList)) {\n dropdown.close();\n }\n };\n dropdownList.refreshTriggerEvents();\n }\n\n // Integer type mask\n if (type === 'integer') {\n input.mask = 'number';\n input.maskOptions = {\n allowDecimal: false,\n allowNegative: true,\n allowLeadingZeros: true,\n allowThousandsSeparator: false\n };\n }\n\n // Decimal type mask\n if (type === 'decimal') {\n input.mask = 'number';\n input.maskOptions = {\n allowDecimal: true,\n allowLeadingZeros: true,\n allowNegative: true\n };\n }\n });\n\n IdsGlobal.filterManager.removeFilter(this);\n IdsGlobal.filterManager.addFilter(this);\n }\n\n /**\n * Handle all triggering and handling of events\n * @returns {void}\n */\n attachFilterEventHandlers() {\n if (!this.root.filterable || !this.root.header) return;\n\n this.root.offEvent(`keydown.${this.#id()}`, this.root.wrapper);\n this.root.onEvent(`keydown.${this.#id()}`, this.root.wrapper, (e: any) => {\n const elem = e.target;\n if (!elem) return;\n\n // Only apply this event to handlers that exist on internal (not slotted) filter menus\n const containerNode = getClosestContainerNode(elem);\n if (containerNode === document) return;\n\n const key = e.key;\n if (key === 'ArrowDown') {\n if (/ids-trigger-field/gi.test(elem.nodeName)) {\n elem.querySelector('ids-trigger-button').click();\n }\n if (/ids-dropdown/gi.test(elem.nodeName)) {\n elem.click();\n }\n }\n\n this.root.lastActiveCell = null;\n });\n\n this.root.offEvent(`hide.${this.#id()}`, this.root.wrapper);\n this.root.onEvent(`hide.${this.#id()}`, this.root.wrapper, (e: any) => {\n const elem = e.target;\n if (!elem) return;\n\n // Only apply this event to handlers that exist on internal (not slotted) filter menus\n const containerNode = getClosestContainerNode(elem);\n if (containerNode === document) return;\n\n if (this.root.openMenu) {\n this.root.offEvent(`keydown.${this.#id()}`, this.root.openMenu);\n this.root.openMenu = null;\n }\n\n // Popup Menus/Dropdown Lists\n if (/ids-popup-menu|ids-dropdown-list/gi.test(elem.nodeName)) {\n this.root.offEvent(`keydown.${this.#id()}`, elem);\n }\n\n // Anything extending IdsPickerPopup\n if (/ids-time-picker-popup|ids-date-picker-popup/gi.test(elem.nodeName)) {\n if (!this.root.contains(document.activeElement)) return;\n if (!this.root.shadowRoot.contains(document.activeElement)) return;\n\n elem.target?.focus();\n }\n });\n\n this.root.offEvent(`show.${this.#id()}`, this.root.wrapper);\n this.root.onEvent(`show.${this.#id()}`, this.root.wrapper, (e: any) => {\n const elem = e.target;\n if (!elem) return;\n\n // Only apply this event to handlers that exist on internal (not slotted) filter menus\n const containerNode = getClosestContainerNode(elem);\n if (containerNode === document) return;\n\n requestAnimationFrame(() => {\n this.root.openMenu = elem;\n });\n\n // Popup Menus\n if (/ids-popup-menu/gi.test(elem.nodeName)) {\n this.root.offEvent(`keydown.${this.#id()}`, elem);\n this.root.onEvent(`keydown.${this.#id()}`, elem, (f: any) => {\n const key = f.key;\n if (['Enter', 'SpaceBar', ' '].includes(key)) {\n elem.selectItem(elem.lastNavigated);\n elem.hideAndFocus(true);\n }\n if (key === 'Escape') {\n elem.hideAndFocus(true);\n }\n });\n }\n\n // Dropdown Lists\n if (/ids-dropdown-list/gi.test(elem.nodeName)) {\n this.root.offEvent(`keydown.${this.#id()}`, elem);\n this.root.onEvent(`keydown.${this.#id()}`, elem, (f: any) => {\n const key = f.key;\n if (key === 'ArrowUp') {\n elem.navigate(-1);\n }\n if (key === 'ArrowDown') {\n elem.navigate(1);\n }\n if (['Enter', 'SpaceBar', ' '].includes(key)) {\n this.root.selectWithFilterDropdown = true;\n elem.select();\n }\n if (key === 'Escape') {\n if (elem.nodeName === 'IDS-DROPDOWN-LIST') {\n elem.popup.visible = false;\n } else if (elem.triggerCloseEvent) elem?.triggerCloseEvent(true);\n }\n });\n }\n });\n\n // Captures selected contents from menu/dropdown list items.\n this.root.offEvent(`selected.${this.#id()}`, this.root.wrapper);\n this.root.onEvent(`selected.${this.#id()}`, this.root.wrapper, (e: any) => {\n const elem = e.detail?.elem;\n if (!elem) return;\n\n if (/ids-menu-item/gi.test(elem.nodeName)) {\n this.#handleMenuButtonSelected(elem);\n }\n\n if (/ids-dropdown-list/gi.test(elem.nodeName)) {\n e.target.value = e.detail.value;\n }\n });\n\n // Change event for input, dropdown and multiselect\n const header = this.root.container?.querySelector('.ids-data-grid-header:not(.column-groups)');\n this.root.offEvent(`input.${this.#id()}`, header);\n this.root.onEvent(`input.${this.#id()}`, header, (e: any) => {\n const nodeName = e.target?.nodeName;\n if (!this.#suppressFilteredEvent && nodeName && /ids-(input|trigger-field|dropdown|multiselect)/gi.test(nodeName)) {\n this.applyFilter();\n }\n });\n\n // Capture 'dayselected' events from IdsDatePickerPopup\n this.root.offEvent(`dayselected.${this.#id()}`, this.root.wrapper);\n this.root.onEvent(`dayselected.${this.#id()}`, this.root.wrapper, (e: any) => {\n let value = e.detail.value;\n const localeName = this.root.localeAPI?.locale?.name;\n const headerCell = e.target.closest?.('.ids-data-grid-header-cell');\n const column = headerCell ? this.root.columnDataByHeaderElem(headerCell) : null;\n const useArabicNumerals = column?.filterOptions?.useArabicNumerals ?? (localeName === 'ar-SA' || localeName === 'ar-EG');\n\n // Convert to Arabic numerals if enabled (default: true for ar-SA and ar-EG)\n if (value && useArabicNumerals) {\n value = value.replace(/\\d/g, (d: string) => ARABIC_NUMERALS[+d]);\n }\n\n // Set value on input element directly to avoid setter processing\n if (e?.target?.input) e.target.input.value = value;\n\n if (!this.#suppressFilteredEvent) this.applyFilter();\n });\n\n // Capture 'timeselected' events from IdsTimePickerPopup\n this.root.offEvent(`timeselected.${this.#id()}`, this.root.wrapper);\n this.root.onEvent(`timeselected.${this.#id()}`, this.root.wrapper, (e: any) => {\n // this will trigger the above change event which also calls applyFilter().\n e.target.value = e.detail.value;\n if (!this.#suppressFilteredEvent) {\n this.applyFilter();\n }\n });\n\n // Change event for ids-date-picker and ids-time-picker\n this.filterNodes?.forEach((n: any) => {\n const slot = n.querySelector('slot[name^=\"filter-\"]');\n const node = slot ? slot.assignedElements()[0] : n;\n const elem = node?.querySelector('ids-date-picker, ids-time-picker');\n if (elem) {\n this.root.offEvent(`change.${this.#id()}`, elem.input);\n this.root.onEvent(`change.${this.#id()}`, elem.input, () => this.applyFilter());\n }\n });\n\n // Set filter event when typing for input\n this.setFilterWhenTyping();\n }\n\n /**\n * Handles `selected` events from filter menus\n * @param {IdsMenuItem} el reference to the menu item that triggered the event\n * @returns {void}\n */\n #handleMenuButtonSelected(el: IdsMenuItem) {\n const target = (el.menu as any)?.target;\n if (!target?.hasAttribute('data-filter-conditions-button')) return;\n\n const { value, icon, text: label } = el;\n if (!icon || !target || target.icon === icon.replace(/^filter-/g, '')) return;\n\n const columnId = target.getAttribute('column-id');\n const initial = this.#initial[columnId].btn;\n const beforeChange = {\n icon: target.icon,\n value: `${target.icon}`.replace(/^filter-/g, ''),\n label: (target.text || '').trim()\n };\n target.icon = icon;\n target.querySelector('span, ids-text').textContent = label;\n this.root.triggerEvent('filteroperatorchanged', this.root, {\n bubbles: true,\n detail: {\n elem: this.root,\n targetElem: target,\n icon,\n value,\n label,\n initial,\n beforeChange\n }\n });\n this.applyFilter();\n }\n\n /**\n * Set filter event when typing for all filter inputs\n * @returns {void}\n */\n setFilterWhenTyping() {\n this.filterNodes?.forEach((n: any) => {\n const slot = n.querySelector('slot[name^=\"filter-\"]');\n const node = slot ? slot.assignedElements()[0] : n;\n const input = node?.querySelector('ids-input');\n if (!input) return;\n const eventName = `keydownend.${input.id}`;\n if (this.root.filterWhenTyping) {\n n.classList.add('filter-when-typing');\n this.root.onEvent(eventName, input, () => {\n const canFilter = input.value?.length > 3 || input.value?.length === 0;\n this.focused = input;\n if (canFilter) this.applyFilter();\n });\n } else {\n n.classList.remove('filter-when-typing');\n this.root.offEvent(eventName, input);\n }\n });\n }\n\n /**\n * Returns the markup for filter menu button and input.\n * @private\n * @param {string} type Must be exactly the same as filter method name\n * @param {IdsDataGridColumn} column The column info.\n * @returns {string} The resulting template\n */\n #btnAndInputTemplate(type: string, column: IdsDataGridColumn) {\n const input = `${this.#inputTemplate(type, column)}`;\n const button = `${this.#filterButtonTemplate(type, column)}`;\n const align = column.filterAlign || column.align;\n if (align === 'right') {\n return `${input}${button}`;\n }\n return `${button}${input}`;\n }\n\n /**\n * Returns the markup for filter menu button in header cell.\n * @private\n * @param {string} type Must be exactly the same as filter method name\n * @param {IdsDataGridColumn} column The column info.\n * @returns {string} The resulting template\n */\n #filterButtonTemplate(type: string, column: IdsDataGridColumn): string {\n const operators = this.#operators(type, column);\n\n if (!operators?.length) return '';\n\n const opt = column.filterOptions || {};\n const disabled = opt.disabled ? ' disabled' : '';\n const readonly = opt.readonly ? ' readonly' : '';\n const id = `${this.#id(column)}-${type}`;\n let sel: IdsDataGridFilterOperator = operators.find((op) => op.selected)\n || operators[0]\n || { value: '', icon: '', label: '' };\n\n if (this.#conditions.length) {\n const condition = this.#conditions.find((c: any) => c.columnId === column.id);\n sel = operators.find((op) => (op.value === condition?.operator)) ?? sel;\n }\n\n this.#initial[column.id] = this.#initial[column.id] || {};\n if (!this.#initial[column.id].btn) this.#initial[column.id].btn = { ...sel };\n\n return `<ids-menu-button\n color-variant=\"${!this.root.listStyle ? 'alternate-formatter' : 'alternate-list-formatter'}\"\n css-class=\"compact\"\n icon=\"${sel.icon}\"\n column-id=\"${column.id}\"\n id=\"btn-${id}\"\n ref-id=\"${id}\"\n menu=\"menu-${id}\"\n value=\"${sel.value}\"\n square=\"true\"\n trigger-type=\"click\"\n ${disabled}${readonly}\n dropdown-icon>\n <span class=\"audible\">${sel?.label}</span>\n </ids-menu-button>`;\n }\n\n /**\n * Returns filter IdsPopupMenu template for header cell\n * @param {string} id ID of btn and popup pairing\n * @param {string} type Must be exactly the same as filter method name\n * @param {IdsDataGridColumn} column The column info.\n * @returns {string} The resulting template\n */\n filterButtonPopupTemplate(id: string, type: string, column: IdsDataGridColumn): string {\n const operators = this.#operators(type, column);\n\n if (!operators?.length) return '';\n\n let sel: IdsDataGridFilterOperator = operators.find((op) => op.selected)\n || operators[0]\n || { value: '', icon: '', label: '' };\n\n if (this.#conditions.length) {\n const condition = this.#conditions.find((c: any) => c.columnId === column.id);\n sel = operators.find((op) => (op.value === condition?.operator)) ?? sel;\n }\n\n this.#initial[column.id] = this.#initial[column.id] || {};\n if (!this.#initial[column.id].btn) this.#initial[column.id].btn = { ...sel };\n\n const items: string = operators.map((op, i) => {\n const selected = op.value === sel?.value ? ' selected=\"true\"' : '';\n return `<ids-menu-item id=\"item-${i}-${id}\" value=\"${op.value}\" icon=\"${op.icon}\"${selected}>${op.label}</ids-menu-item>`;\n }).join('');\n\n return `<ids-popup-menu id=\"menu-${id}\" target=\"#btn-${id}\" trigger-type=\"click\">\n <ids-menu-group select=\"single\">${items}</ids-menu-group>\n </ids-popup-menu>`;\n }\n\n /**\n * Get input template string\n * @private\n * @param {string} type Must be exactly the same as filter method name\n * @param {IdsDataGridColumn} column The column info.\n * @returns {string} The template string\n */\n #inputTemplate(type: any, column: any) {\n const opt = column.filterOptions || {};\n const id = typeof opt?.customId === 'function'\n ? opt?.customId(column)\n : opt?.customId || `${this.#id(column)}-${type}`;\n const label = opt.label || 'Filter Input';\n const placeholder = opt.placeholder ? ` placeholder=\"${opt.placeholder}\"` : '';\n const disabled = opt.disabled ? ' disabled' : '';\n const readonly = opt.readonly ? ' readonly' : '';\n const maxlength = opt.maxlength ? ` maxlength=\"${opt.maxlength}\"` : '';\n const uppercase = opt.uppercase ? ` uppercase` : '';\n\n let value = this.#conditions.filter((c: any) => c.columnId === column.id)[0]?.value ?? null;\n this.#initial[column.id] = this.#initial[column.id] || {};\n if (!this.#initial[column.id].input) this.#initial[column.id].input = { value };\n value = value ? ` value=\"${value}\"` : '';\n\n return `<ids-input\n color-variant=\"${!this.root.listStyle ? 'alternate-formatter' : 'alternate-list-formatter'}\"\n data-filter-type=\"${type}\"\n type=\"${opt.type || 'text'}\"\n size=\"${opt.size || 'full'}\"\n label=\"${label}\"\n label-state=\"collapsed\"\n ${this.root.rowHeight === 'xxs' || this.root.rowHeight === 'xxs' ? `field-height=\"xs\"` : ''}\n id=\"${id}\"\n text-align=\"${column.align === 'right' ? 'end' : 'start'}\"\n no-margins\n compact\n ${opt.browserAutocomplete ? ` browser-autocomplete=\"${opt.browserAutocomplete}\"` : ` autocomplete=\"off\"`}\n ${placeholder}${disabled}${readonly}${maxlength}${uppercase}${value}>\n </ids-input>`;\n }\n\n /**\n * Get trigger field template string\n * @private\n * @param {string} type Must be exactly the same as filter method name\n * @param {IdsDataGridColumn} column The column info.\n * @param {string} [icon] if provided, defines the icon used on this field's trigger button\n * @param {string} [btnText] if provided, defines the text content of this field's trigger button\n * @returns {string} The template string\n */\n #triggerFieldTemplate(type: any, column: any, icon?: string, btnText?: string) {\n const opt = column.filterOptions || {};\n const id = typeof opt?.customId === 'function'\n ? opt?.customId(column)\n : opt?.customId || `field-${this.#id(column)}-${type}`;\n const triggerBtnId = `triggerBtn-${this.#id(column)}-${type}`;\n const triggerBtnIcon = icon ? ` icon=\"${icon}\"` : '';\n const triggerBtnText = btnText ? `<ids-text audible=\"true\" translate-text=\"true\">${btnText}</ids-text>` : '';\n const label = opt.label || 'Filter Input';\n const placeholder = opt.placeholder ? ` placeholder=\"${opt.placeholder}\"` : '';\n const disabled = opt.disabled ? ' disabled' : '';\n const readonly = opt.readonly ? ' readonly' : '';\n\n let value = this.#conditions.filter((c: any) => c.columnId === column.id)[0]?.value ?? null;\n this.#initial[column.id] = this.#initial[column.id] || {};\n if (!this.#initial[column.id].input) this.#initial[column.id].input = { value };\n value = value ? ` value=\"${value}\"` : '';\n\n return `<ids-trigger-field\n color-variant=\"${!this.root.listStyle ? 'alternate-formatter' : 'alternate-list-formatter'}\"\n data-filter-type=\"${type}\"\n type=\"${opt.type || 'text'}\"\n size=\"${opt.size || 'full'}\"\n label=\"${label}\"\n label-state=\"collapsed\"\n id=\"${id}\"\n no-margins\n compact\n ${placeholder}${disabled}${readonly}${value}>\n <ids-trigger-button id=\"${triggerBtnId}\" slot=\"trigger-end\"${triggerBtnIcon}>\n <ids-icon part=\"icon\"></ids-icon>\n ${triggerBtnText}\n </ids-trigger-button>\n </ids-trigger-field>`;\n }\n\n /**\n * Get dropdown template string\n * @private\n * @param {string} type Must be exactly the same as filter method name\n * @param {IdsDataGridColumn} column The column info\n * @returns {string} The template string\n */\n #dropdownTemplate(type: any, column: any) {\n const id = `${this.#id(column)}-${type}`;\n const operators = this.#operators(type, column);\n\n const opt = column.filterOptions || {};\n const label = opt.label || 'Filter Dropdown';\n const disabled = opt.disabled ? ' disabled' : '';\n const readonly = opt.readonly ? ' readonly' : '';\n\n let sel: any = null;\n if (this.#conditions.length) {\n const condition = this.#conditions.filter((c: any) => c.columnId === column.id)[0];\n sel = operators.filter((op: any) => (op.label === condition?.value))[0];\n }\n if (!sel) sel = operators.filter((op: any) => op.selected)[0];\n let items = '';\n const { value: nfValue, label: nfLabel } = this.#dropdownNotFilterItem(column);\n const notFilteredItemTemplate = () => {\n if (!sel) sel = { value: nfValue };\n items = `<ids-list-box-option id=\"${id}-opt-not-filtered\" value=\"${nfValue}\">${nfLabel}</ids-list-box-option>`;\n };\n\n if (!operators.length) {\n notFilteredItemTemplate();\n } else {\n const found = operators.some((op: any) => op.value === nfValue);\n if (!found) notFilteredItemTemplate();\n operators.forEach((op: any, i: any) => {\n items += `<ids-list-box-option id=\"${id}-opt-${i}\" value=\"${op.value}\">${op.label}</ids-list-box-option>`;\n });\n }\n if (!sel) sel = operators[0];\n const value = (sel?.value || sel?.value === '') ? ` value=\"${sel.value}\"` : '';\n const isUppercase = (): boolean => {\n if (typeof column?.uppercase === 'function') return column.uppercase('header-cell', column);\n return (column?.uppercase === 'true' || column?.uppercase === true);\n };\n const uppercaseClass = isUppercase() ? ' uppercase' : '';\n\n this.#initial[column.id] = this.#initial[column.id] || {};\n if (!this.#initial[column.id].dropdown) this.#initial[column.id].dropdown = { ...sel };\n\n return `\n <ids-dropdown\n color-variant=\"${!this.root.listStyle ? 'alternate-formatter' : 'alternate-list-formatter'}\"\n class=\"data-grid-filter\"\n label=\"${label}\"\n label-state=\"collapsed\"\n list=\"#${id}-list\"\n no-margins\n compact\n data-filter-type=\"${type}\"\n size=\"${opt.size || 'full'}\"\n id=\"${id}\"\n ${value}${disabled}${readonly}\n >\n </ids-dropdown>\n <ids-dropdown-list id=\"${id}-list\">\n <ids-list-box${uppercaseClass}>${items}</ids-list-box>\n </ids-dropdown-list>\n `;\n }\n\n /**\n * Get list of filter wrapper elements\n * @returns {Array<HTMLElement>} List of filter wrapper elements\n */\n get filterNodes() {\n return this.root?.shadowRoot?.querySelectorAll('.ids-data-grid-header-cell-filter-wrapper');\n }\n\n /**\n * Get not filter item for dropdown\n * @private\n * @param {IdsDataGridColumn} column The column info\n * @returns {object} The item\n */\n #dropdownNotFilterItem(column: IdsDataGridColumn) {\n const item = (column?.filterOptions as any)?.notFilteredItem || {};\n return { value: item.value || 'not-filtered', label: item.label || '' };\n }\n\n /**\n * Get unique id string\n * @private\n * @param {IdsDataGridColumn} column The column info\n * @returns {string} The id string\n */\n #id(column?: IdsDataGridColumn) {\n const columnId = column?.id ? `${column.id}-` : '';\n return `ids-data-grid-filter-${columnId}${this.root.cacheHash}`;\n }\n\n /**\n * Get button operators by filter type\n * @private\n * @param {string} type The filter type\n * @param {IdsDataGridColumn} column The column info\n * @returns {Array} List of button operators\n */\n #operators(type: string, column: IdsDataGridColumn): IdsDataGridFilterOperator[] {\n /**\n * Transform string to camel case\n * @param {string} val the target text\n * @returns {string} the camel case text\n */\n function toCamelCase(val: string) {\n return val.replace(/^./, val[0].toUpperCase());\n }\n\n /**\n * Transform string to operator key\n * @param {string} val the target text\n * @returns {string} the operator key\n */\n function getOperatorKey(val: string) {\n const keys = val.split('-');\n let operator = '';\n for (let keyIndex = 0; keyIndex < keys.length; keyIndex++) {\n if (keyIndex === 0) operator += `${keys[keyIndex]}`;\n else operator += `${toCamelCase(keys[keyIndex])}`;\n }\n\n return operator;\n }\n\n const ds = this.#operatorsDataset;\n\n // Localization\n for (const key in ds) {\n if (ds.hasOwnProperty(key)) {\n const val = toCamelCase(key);\n (ds as any)[key].label = this.root.localeAPI.translate(val);\n }\n }\n\n if (column?.filterConditions?.constructor === Array) {\n for (let i = 0; i < column.filterConditions.length; i++) {\n const opKey = getOperatorKey(column.filterConditions[i].value);\n if ((ds as any)[opKey]) column.filterConditions[i].label = (ds as any)[opKey].label;\n }\n\n return column.filterConditions;\n }\n\n let operators: any = [];\n\n // Collect and built, all the operators for contents type\n const contentsOperators = () => {\n const val = this.root.datasource.allData.map((row: any) => escapeHTML(row[column.id]));\n return [...new Set(val)].map((v) => ({ value: v || '', label: v || '' }));\n };\n\n switch (type) {\n case 'text':\n operators = [\n ds.contains,\n ds.doesNotContain,\n ds.equals,\n ds.doesNotEqual,\n ds.isEmpty,\n ds.isNotEmpty,\n ds.endsWith,\n ds.doesNotEndWith,\n ds.startsWith,\n ds.doesNotStartWith\n ];\n break;\n case 'decimal':\n case 'integer':\n operators = [\n ds.equals,\n ds.doesNotEqual,\n ds.isEmpty,\n ds.isNotEmpty,\n ds.lessThan,\n ds.lessOrEquals,\n ds.greaterThan,\n ds.greaterOrEquals\n ];\n break;\n case 'time':\n operators = [\n ds.equals,\n ds.doesNotEqual,\n ds.isEmpty,\n ds.isNotEmpty,\n ds.earlierThan,\n ds.earlierOrEquals,\n ds.laterThan,\n ds.laterOrEquals\n ];\n break;\n case 'checkbox':\n operators = [\n ds.all,\n ds.selected,\n ds.notSelected\n ];\n break;\n case 'contents':\n operators = contentsOperators();\n break;\n case 'date':\n operators = [\n ds.equals,\n ds.doesNotEqual,\n ds.isEmpty,\n ds.isNotEmpty,\n ds.inRange,\n ds.earlierThan,\n ds.earlierOrEquals,\n ds.laterThan,\n ds.laterOrEquals\n ];\n break;\n default:\n break;\n }\n\n return operators;\n }\n\n /**\n * Available operators for filter button.\n * @private\n * @type {object}\n */\n #operatorsDataset = {\n contains: { value: 'contains', label: 'Contains', icon: 'filter-contains' },\n doesNotContain: { value: 'does-not-contain', label: 'Does Not Contain', icon: 'filter-does-not-contain' },\n equals: { value: 'equals', label: 'Equals', icon: 'filter-equals' },\n doesNotEqual: { value: 'does-not-equal', label: 'Does Not Equals', icon: 'filter-does-not-equal' },\n isEmpty: { value: 'is-empty', label: 'Is Empty', icon: 'filter-is-empty' },\n isNotEmpty: { value: 'is-not-empty', label: 'Is Not Empty', icon: 'filter-is-not-empty' },\n endsWith: { value: 'end-with', label: 'Ends With', icon: 'filter-end-with' },\n doesNotEndWith: { value: 'does-not-end-with', label: 'Does Not End With', icon: 'filter-does-not-end-with' },\n startsWith: { value: 'start-with', label: 'Starts With', icon: 'filter-start-with' },\n doesNotStartWith: { value: 'does-not-start-with', label: 'Does Not Start With', icon: 'filter-does-not-start-with' },\n lessThan: { value: 'less-than', label: 'Less Than', icon: 'filter-less-than' },\n lessOrEquals: { value: 'less-equals', label: 'Less Or Equals', icon: 'filter-less-equals' },\n greaterThan: { value: 'greater-than', label: 'Greater Than', icon: 'filter-greater-than' },\n greaterOrEquals: { value: 'greater-equals', label: 'Greater Or Equals', icon: 'filter-greater-equals' },\n inRange: { value: 'in-range', label: 'In Range', icon: 'filter-in-range' },\n all: { value: 'selected-notselected', label: 'All', icon: 'filter-selected-notselected' },\n selected: { value: 'selected', label: 'Selected', icon: 'filter-selected' },\n notSelected: { value: 'not-selected', label: 'Not Selected', icon: 'filter-not-selected' },\n earlierThan: { value: 'earlier-than', label: 'Earlier than', icon: 'filter-less-than' },\n earlierOrEquals: { value: 'earlier-equals', label: 'Earlier than Or equals', icon: 'filter-less-equals' },\n laterThan: { value: 'later-than', label: 'Later than', icon: 'filter-greater-than' },\n laterOrEquals: { value: 'later-equals', label: 'Later than or equals', icon: 'filter-greater-equals' }\n };\n\n detachAllFilterPopups() {\n this.#filterPopups = [];\n this.#filterConditionPopups.clear();\n IdsGlobal.filterManager.removeFilter(this);\n }\n\n /**\n * Close all open filter popups\n * @private\n */\n closeAllFilterPopups(): void {\n this.filterNodes?.forEach((filterNode: HTMLElement) => {\n const dropdown = filterNode.querySelector('ids-dropdown') as IdsDropdown | null;\n if (dropdown?.dropdownList?.visible) dropdown.close();\n });\n this.#filterPopups?.forEach((cache: FilterPopupCache) => {\n if (cache.element?.popup?.visible || cache.element?.visible) cache.element.hide?.();\n });\n\n this.#filterConditionPopups?.forEach((filterNode: IdsMenuButton) => {\n if (!filterNode?.menuEl || !filterNode?.menuEl?.hide) {\n return;\n }\n\n filterNode.menuEl.hide();\n });\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }