ids-enterprise-wc 1.15.9-patch.18 → 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 (28) hide show
  1. package/chunks/{ids-chunk-J6OWJIUI-full.js → ids-chunk-EDQ2YH35-full.js} +3 -3
  2. package/chunks/{ids-chunk-GL7SUNG4-full.js → ids-chunk-OITRWBV5-full.js} +46 -8
  3. package/chunks/ids-chunk-OITRWBV5-full.js.map +7 -0
  4. package/chunks/{ids-chunk-6QLFPR6M-full.js → ids-chunk-YGNZM5DD-full.js} +1 -1
  5. package/chunks/{ids-chunk-6QLFPR6M-full.js.map → ids-chunk-YGNZM5DD-full.js.map} +2 -2
  6. package/components/ids-accordion/ids-accordion.css +141 -77
  7. package/components/ids-button/ids-button.css +392 -43
  8. package/components/ids-card/ids-card.css +344 -4
  9. package/components/ids-data-grid/ids-data-grid-column.d.ts +8 -0
  10. package/components/ids-data-grid/ids-data-grid-column.js +1 -1
  11. package/components/ids-data-grid/ids-data-grid-filters.js +1 -1
  12. package/components/ids-data-grid/ids-data-grid.js +3 -3
  13. package/components/ids-hierarchy/ids-hierarchy.css +117 -14
  14. package/components/ids-hyperlink/ids-hyperlink.css +188 -15
  15. package/components/ids-layout-flex/ids-layout-flex.css +69 -6
  16. package/components/ids-layout-grid/ids-layout-grid.css +10 -21300
  17. package/components/ids-menu/ids-menu.css +11 -7
  18. package/components/ids-modal/ids-modal.css +23 -94
  19. package/components/ids-pager/ids-pager.css +37 -3
  20. package/components/ids-upload-advanced/ids-upload-advanced.css +133 -103
  21. package/custom-elements.json +154 -154
  22. package/enterprise-wc.all.iife.js +45 -7
  23. package/enterprise-wc.all.iife.js.map +2 -2
  24. package/enterprise-wc.js +3 -3
  25. package/package.json +1 -1
  26. package/vscode.html-custom-data.json +1 -1
  27. package/chunks/ids-chunk-GL7SUNG4-full.js.map +0 -7
  28. /package/chunks/{ids-chunk-J6OWJIUI-full.js.map → ids-chunk-EDQ2YH35-full.js.map} +0 -0
@@ -34,7 +34,7 @@ import {
34
34
  } from "./ids-chunk-3BYETIBG-full.js";
35
35
  import {
36
36
  IdsDataGridFilters
37
- } from "./ids-chunk-GL7SUNG4-full.js";
37
+ } from "./ids-chunk-OITRWBV5-full.js";
38
38
  import {
39
39
  IdsDataGridFormatters
40
40
  } from "./ids-chunk-AKBAXNZI-full.js";
@@ -49,7 +49,7 @@ import {
49
49
  } from "./ids-chunk-GHWD4TOS-full.js";
50
50
  import {
51
51
  DEFAULT_COLUMN_MIN_WIDTH
52
- } from "./ids-chunk-6QLFPR6M-full.js";
52
+ } from "./ids-chunk-YGNZM5DD-full.js";
53
53
  import {
54
54
  containerArguments,
55
55
  containerTypes
@@ -7678,4 +7678,4 @@ IdsDataGrid = __decorateClass([
7678
7678
  export {
7679
7679
  IdsDataGrid
7680
7680
  };
7681
- //# sourceMappingURL=ids-chunk-J6OWJIUI-full.js.map
7681
+ //# sourceMappingURL=ids-chunk-EDQ2YH35-full.js.map
@@ -496,8 +496,23 @@ var IdsDataGridFilters = class {
496
496
  }
497
497
  if (filterType === "decimal") {
498
498
  value = formatterVal();
499
- value = this.root.localeAPI?.parseNumber(value);
500
- conditionValue = this.root.localeAPI?.parseNumber(conditionValue);
499
+ const localeNumbers = this.root.localeAPI?.locale?.options?.numbers;
500
+ const decimalChar = column.filterOptions?.decimal ?? localeNumbers?.decimal ?? ".";
501
+ const localeGroup = localeNumbers?.group ?? ",";
502
+ let resolvedGroup = localeGroup;
503
+ if (localeGroup === decimalChar) {
504
+ resolvedGroup = decimalChar === "," ? "." : ",";
505
+ }
506
+ const groupChar = column.filterOptions?.group ?? resolvedGroup;
507
+ const parseDecimal = (v) => {
508
+ if (!v) return NaN;
509
+ const groupExp = groupChar === " " ? /\s/g : new RegExp(`\\${groupChar}`, "g");
510
+ let num = v.replace(groupExp, "");
511
+ num = num.replace(decimalChar, ".");
512
+ return parseFloat(num);
513
+ };
514
+ value = parseDecimal(value);
515
+ conditionValue = parseDecimal(conditionValue);
501
516
  }
502
517
  if (filterType === "date" || filterType === "time") {
503
518
  if (/string|undefined/g.test(typeof value)) value = formatterVal();
@@ -880,20 +895,43 @@ var IdsDataGridFilters = class {
880
895
  dropdownList.refreshTriggerEvents();
881
896
  }
882
897
  if (type === "integer") {
883
- input.mask = "number";
884
- input.maskOptions = {
898
+ const opt = column?.filterOptions || {};
899
+ const localeNumbers = this.root.localeAPI?.locale?.options?.numbers;
900
+ const merged = {
885
901
  allowDecimal: false,
886
902
  allowNegative: true,
887
903
  allowLeadingZeros: true,
888
- allowThousandsSeparator: false
904
+ allowThousandsSeparator: false,
905
+ ...opt.maskOptions
889
906
  };
907
+ if (merged.allowThousandsSeparator && !opt.maskOptions?.symbols) {
908
+ merged.symbols = { thousands: localeNumbers?.group ?? ",", negative: localeNumbers?.minusSign ?? "-" };
909
+ }
910
+ input.mask = opt.mask || "number";
911
+ input.maskOptions = merged;
890
912
  }
891
913
  if (type === "decimal") {
892
- input.mask = "number";
914
+ const opt = column?.filterOptions || {};
915
+ const localeNumbers = this.root.localeAPI?.locale?.options?.numbers;
916
+ const decimalSym = opt.decimal ?? localeNumbers?.decimal ?? ".";
917
+ const localeGroup = localeNumbers?.group ?? ",";
918
+ let resolvedGroup = localeGroup;
919
+ if (localeGroup === decimalSym) {
920
+ resolvedGroup = decimalSym === "," ? "." : ",";
921
+ }
922
+ const groupSym = opt.group ?? resolvedGroup;
923
+ const symbols = {
924
+ decimal: decimalSym,
925
+ negative: localeNumbers?.minusSign ?? "-",
926
+ thousands: groupSym
927
+ };
928
+ input.mask = opt.mask || "number";
893
929
  input.maskOptions = {
894
930
  allowDecimal: true,
895
931
  allowLeadingZeros: true,
896
- allowNegative: true
932
+ allowNegative: true,
933
+ symbols,
934
+ ...opt.maskOptions
897
935
  };
898
936
  }
899
937
  });
@@ -1503,4 +1541,4 @@ var IdsDataGridFilters = class {
1503
1541
  export {
1504
1542
  IdsDataGridFilters
1505
1543
  };
1506
- //# sourceMappingURL=ids-chunk-GL7SUNG4-full.js.map
1544
+ //# sourceMappingURL=ids-chunk-OITRWBV5-full.js.map
@@ -0,0 +1,7 @@
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 const localeNumbers = this.root.localeAPI?.locale?.options?.numbers;\n const decimalChar = column.filterOptions?.decimal ?? localeNumbers?.decimal ?? '.';\n const localeGroup = localeNumbers?.group ?? ',';\n let resolvedGroup = localeGroup;\n if (localeGroup === decimalChar) {\n resolvedGroup = decimalChar === ',' ? '.' : ',';\n }\n const groupChar = column.filterOptions?.group ?? resolvedGroup;\n\n const parseDecimal = (v: string): number => {\n if (!v) return NaN;\n const groupExp = (groupChar === ' ') ? /\\s/g : new RegExp(`\\\\${groupChar}`, 'g');\n let num = v.replace(groupExp, '');\n num = num.replace(decimalChar, '.');\n return parseFloat(num);\n };\n\n value = parseDecimal(value);\n conditionValue = parseDecimal(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 const opt = column?.filterOptions || {};\n const localeNumbers = this.root.localeAPI?.locale?.options?.numbers;\n const merged: Record<string, unknown> = {\n allowDecimal: false,\n allowNegative: true,\n allowLeadingZeros: true,\n allowThousandsSeparator: false,\n ...opt.maskOptions\n };\n\n if (merged.allowThousandsSeparator && !opt.maskOptions?.symbols) {\n merged.symbols = { thousands: localeNumbers?.group ?? ',', negative: localeNumbers?.minusSign ?? '-' };\n }\n\n input.mask = opt.mask || 'number';\n input.maskOptions = merged;\n }\n\n // Decimal type mask\n if (type === 'decimal') {\n const opt = column?.filterOptions || {};\n const localeNumbers = this.root.localeAPI?.locale?.options?.numbers;\n const decimalSym = opt.decimal ?? localeNumbers?.decimal ?? '.';\n const localeGroup = localeNumbers?.group ?? ',';\n let resolvedGroup = localeGroup;\n if (localeGroup === decimalSym) {\n resolvedGroup = decimalSym === ',' ? '.' : ',';\n }\n const groupSym = opt.group ?? resolvedGroup;\n const symbols: Record<string, string> = {\n decimal: decimalSym,\n negative: localeNumbers?.minusSign ?? '-',\n thousands: groupSym\n };\n\n input.mask = opt.mask || 'number';\n input.maskOptions = {\n allowDecimal: true,\n allowLeadingZeros: true,\n allowNegative: true,\n symbols,\n ...opt.maskOptions\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
+ }
@@ -9,4 +9,4 @@ var DEFAULT_COLUMN_MIN_WIDTH = 12;
9
9
  export {
10
10
  DEFAULT_COLUMN_MIN_WIDTH
11
11
  };
12
- //# sourceMappingURL=ids-chunk-6QLFPR6M-full.js.map
12
+ //# sourceMappingURL=ids-chunk-YGNZM5DD-full.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/ids-data-grid/ids-data-grid-column.ts"],
4
- "sourcesContent": ["import { type IdsColorValue } from '../../utils/ids-color-utils/ids-color-utils';\nimport type IdsDataGrid from './ids-data-grid';\nimport { IdsDataGridEditor } from './ids-data-grid-editors';\n\ntype IdsDateNumberOptions = Omit<Intl.DateTimeFormatOptions, 'localeMatcher'> & Omit<Intl.NumberFormatOptions, 'localeMatcher'> & {\n localeMatcher?: 'best fit' | 'lookup';\n};\n\nexport interface IdsDataGridColumnFormatOptions extends IdsDateNumberOptions {\n /* Set the style of the number */\n style?: 'decimal' | 'currency' | 'percent' | 'unit' | any;\n /* Sets the incoming locale */\n locale?: string;\n /** Sets the group (thousands) seperator (to something outside the current locale) */\n group?: string;\n /** Sets Intl.NumberFormat option to use grouping */\n useGrouping?: boolean;\n /** Sets the decimal seperator (to something outside the current locale) */\n decimal?: string;\n /** Date format to use for parsing ect */\n dateFormat?: string;\n /** Date format to use for parsing ect (more generic) */\n format?: string;\n /** legacy pattern for date formats */\n pattern?: string;\n /** Tag for the picker that it shows time */\n showTime?: boolean;\n}\n\nexport interface IdsDataGridColumnGroup {\n /* Set the id for the column group object */\n id?: string;\n /* Set the title/name for the column group */\n name?: string;\n /* Set the number of columns to span */\n colspan: number,\n /** Align the column text to either `left`, `center` or `right` */\n align?: string;\n /** Name of the header icon to use for formatters that support it */\n headerIcon?: string;\n /** Sets the header icon tooltip content */\n headerIconTooltip?: string;\n}\n\nexport interface IdsDataGridTooltipCallback {\n /* Column id */\n columnId?: string;\n /* Column data */\n columnData?: any;\n /* Column index */\n columnIndex?: number;\n /* Column group id */\n columnGroupId?: string;\n /* Column group data */\n columnGroupData?: any;\n /* Column group index */\n columnGroupIndex?: number;\n /* Field data */\n fieldData?: any;\n /* The grid api object */\n grid?: any;\n /* Is header group */\n isHeaderGroup?: boolean;\n /* Row data */\n rowData?: any;\n /* Row index */\n rowIndex?: number,\n /* The current text content */\n text?: string;\n /* Type of tooltip as unique identifier */\n type?: string;\n}\n\nexport interface IdsDataGridDatePickerOptions {\n /** Option to show today or not (for date type filters) */\n showToday?: boolean;\n /** Option to show apply button or not (for date type filters) */\n showApply?: boolean;\n /** Option to show cancel button or not (for date type filters) */\n showCancel?: boolean;\n /** Option to show clear button or not (for date type filters) */\n showClear?: boolean;\n /** First day of the week (for date type filters) */\n firstDayOfWeek?: number;\n /** Whether or not to show week numbers in the picklist (for date type filters) */\n showPicklistWeek?: boolean;\n /** Whether or not to show a list of months in the picklist (for date type filters) */\n showPicklistMonth?: boolean;\n /** Whether or not to show a list of years in the picklist (for date type filters) */\n showPicklistYear?: boolean;\n /** Show week numbers in front of each week of date picker (for date type filters) */\n showWeekNumbers?: boolean;\n /** Set whether or not to show current time in the time picker dropdowns */\n useCurrentTime?: boolean;\n /** Whether or not the component should be a range picker */\n useRange?: boolean;\n}\n\nexport interface IdsDataGridTooltipOptions {\n /* The tooltip placement */\n placement?: 'top' | 'right' | 'bottom' | 'left'\n /* Sets tooltip edge horizontal space */\n x?: number;\n /* Sets tooltip edge vertical space */\n y?: number;\n /* The header tooltip placement */\n headerPlacement?: 'top' | 'right' | 'bottom' | 'left';\n /* Sets tooltip edge horizontal space */\n headerX?: number;\n /* Sets tooltip edge vertical space */\n headerY?: number;\n /* The header icon tooltip placement */\n headerIconPlacement?: 'top' | 'right' | 'bottom' | 'left';\n /* Sets tooltip edge horizontal space */\n headerIconX?: number;\n /* Sets tooltip edge vertical space */\n headerIconY?: number;\n /* The filter button tooltip placement */\n filterButtonPlacement?: 'top' | 'right' | 'bottom' | 'left';\n /* Sets tooltip edge horizontal space */\n filterButtonX?: number;\n /* Sets tooltip edge vertical space */\n filterButtonY?: number;\n}\n\nexport interface IdsDataGridEditorValidation {\n /* Custom validation function */\n check: (input: any) => boolean;\n /* Validation error message */\n message: string;\n /** Validation Message Translation key */\n messageId?: string;\n /* Validation rul id */\n id: string;\n}\n\nexport interface IdsDataGridHeaderTextName {\n /** The header text for one line */\n text: string;\n /** The font style to use */\n emphasis?: 'normal' | 'subtle';\n}\n\nexport interface IdsDataGridColumn {\n /** The columns unique id */\n id: string;\n /** The columns name */\n name?: string | Array<IdsDataGridHeaderTextName>;\n /** The columns field in the array to use */\n field?: string;\n /** The subsitute text to use (for hyperlink and some formatters) */\n text?: string | ((row: number, value: any, column: IdsDataGridColumn, index: Record<string, any>) => string | undefined);\n /** Max value of a range */\n max?: number;\n /** Mininum value of a range */\n min?: number;\n /** Adds expand/collapse icon to a column */\n showHeaderExpander?: boolean;\n /** Allow column sorting */\n sortable?: boolean;\n /** Allow column hide/show */\n hideable?: boolean;\n /** Allow column resizing */\n resizable?: boolean;\n /** Adds a drag indicator and allows the columns to be moved by dragging */\n reorderable?: boolean;\n /** Set a column width in pixel or percent */\n width?: number | string;\n /** When width is 'max-content', controls text measurement: true uses raw values, false (default) uses formatted values */\n useValueForSizing?: boolean;\n /** Set a min column width for resizing */\n minWidth?: number | string;\n /** Set a max column width for resizing */\n maxWidth?: number | string;\n /** Hide a column to be shown later */\n hidden?: boolean;\n /** Column Formatter Function */\n formatter?: (\n rowData: Record<string, unknown>, columnData: IdsDataGridColumn, index: number, parentDataGrid: IdsDataGrid\n ) => string;\n /** Set the column to checked or unchecked (filtering) */\n isChecked?: (value: boolean) => boolean;\n /** If column is selected */\n isSelected?: boolean;\n /** Enable Href / Link Columns */\n href?: string | ((rowData: Record<string, unknown>, columnData: IdsDataGridColumn) => string);\n /** Fires for clickable formatters (like button) */\n click?: (rowData: Record<string, unknown>, columnData: IdsDataGridColumn, event: MouseEvent) => void;\n /** Fires for menuId formatters (like button) */\n selected?: (rowData: Record<string, unknown>, columnData: IdsDataGridColumn, event: CustomEvent) => void;\n /** Selector for menu id */\n menuId?: string;\n /** Get the color dynamically from a function or as text */\n // eslint-disable-next-line max-len\n color?: IdsColorValue | ((row: number, value: any, column: IdsDataGridColumn, index: Record<string, any>) => string | undefined);\n /** Suppress the ids-color tooltip */\n suppressColorTooltip?: boolean;\n /** Get the size dynamically from a function or as text */\n size?: string | ((row: number, value: any, column: IdsDataGridColumn, index: Record<string, any>) => string | undefined);\n /** Options to pass to the formatter */\n formatOptions?: IdsDataGridColumnFormatOptions;\n /** Column Filter to use */\n filterType?: string | any;\n /** Column Filter options to show */\n filterConditions?: any[];\n /** Options to pass to the filter */\n filterOptions?: {\n /** The columns unique id */\n columnId?: string;\n /** Define a custom id for the inputs */\n customId?: string | ((columnData: IdsDataGridColumn) => string);\n /** The label in the filter */\n label?: string;\n /** The size of the input field */\n size?: string;\n /** The filter type */\n type?: string;\n /** Disable the filter */\n disabled?: boolean;\n /** Make the filter readonly */\n readonly?: boolean;\n /** Date formation to show (for date type filters) */\n format?: string;\n /** Placeholder to show for empty inputs */\n placeholder?: string;\n /** The interval between minutes (for time type filters) */\n minuteInterval?: number;\n /** The interval between seconds (for time type filters) */\n secondInterval?: number;\n /** Sets the auto select attribute (for time type filters) */\n autoselect?: boolean;\n /** Sets the auto update attribute (for time type filters) */\n autoupdate?: boolean;\n /** If the filter type is \"contents\" lets you set a blank string to a text value (matched by ID) */\n notFilteredItem?: { value: string, label: string }\n /** For filter type input, sets the text to all upper case when typed */\n uppercase?: boolean;\n /** For filter type input, sets the text max lenght when typed */\n maxlength?: number;\n /** Adds the autocomplete attribute to the input element allowing for browser autocomplete */\n browserAutocomplete?: string\n } & IdsDataGridDatePickerOptions;\n /** Lets you make a dynamic filter function */\n filterFunction?: any;\n /** True if the row is selected */\n rowSelected?: boolean;\n /** True if the row is activated */\n rowActivated?: boolean;\n /** Sets a custom css-part for styling the cell */\n cssPart?: string | ((args: object) => string);\n /** Sets a custom css-part for styling cell when it's selected */\n cellSelectedCssPart?: string | ((args: object) => string);\n /** Pass the type option to formatters that support it */\n type?: string;\n /** Disable the column with a boolean or a dynamic function */\n disabled?: boolean | ((row: number, value: any, col: IdsDataGridColumn, item: Record<string, any>) => boolean);\n /** Make the column readonly with a boolean or a dynamic function */\n readonly?: boolean | ((row: number, value: any, col: IdsDataGridColumn, item: Record<string, any>) => boolean);\n /** Column will not be styled as readonly when the readonly property is true */\n excludeReadonlyStyling?: boolean;\n /** Name of the icon too use for formatters that support it */\n icon?: string | ((row: number, value: any, column: IdsDataGridColumn, index: Record<string, any>) => string | undefined);\n /** Name of the header icon */\n headerIcon?: string;\n /** Align the column to either `left`, `center` or `right` */\n align?: string;\n /** Separately align the filter row contents to either `left`, `center`, or `right` */\n filterAlign?: string;\n /** Seperately align the header to either `left`, `center` or `right` */\n headerAlign?: string;\n /** Freeze the columns to either the `left` or `right` sides */\n frozen?: string;\n /** If a tree or expandable row will set the state of the row */\n rowExpanded?: boolean;\n /** Sets the tooltip options */\n tooltipOptions?: IdsDataGridTooltipOptions | ((options: IdsDataGridTooltipCallback) => IdsDataGridTooltipOptions);\n /** Sets the tooltip content */\n tooltip?: string | ((options: IdsDataGridTooltipCallback) => string | Promise<string>);\n /** Sets the header tooltip content */\n headerTooltip?: string;\n /** Sets the header icon tooltip content */\n headerIconTooltip?: string;\n /** Sets the header filter button tooltip content */\n filterButtonTooltip?: string;\n /** Sets the tooltip css part */\n tooltipCssPart?: string | ((options: IdsDataGridTooltipCallback) => string);\n /** Sets the header tooltip css part */\n headerTooltipCssPart?: string;\n /** Sets the header icon tooltip css part */\n headerIconTooltipCssPart?: string;\n /** Sets the header filter button tooltip css part */\n filterButtonTooltipCssPart?: string;\n /** Sets the hyperlink behavior. options: 'default' | 'no-select' | 'de-select' | 'none' */\n hyperlinkBehavior?: string;\n /** Sets the character count to reveal when cell value is masked */\n textMaskCharacter?: number;\n /** Setup an editor */\n editor?: {\n type: 'input' | 'date' | 'time' | 'checkbox' | 'dropdown' | 'datepicker' | 'timepicker' | 'tree' | 'lookup' | 'password',\n inline?: boolean,\n /** If true, the editor icon will always be visible */\n showEditorIcons?: boolean;\n editor?: IdsDataGridEditor,\n editorSettings?: Record<string, unknown>,\n editorValidation?: IdsDataGridEditorValidation,\n },\n /** If a true will set the text to uppercase */\n uppercase?: boolean | 'true' | ((type: 'body-cell' | 'header-cell', col: IdsDataGridColumn, index?: number, value?: any, item?: Record<string, any>) => boolean);\n /** If true, the cell will expand to show full multi-line content when activated (clicked/focused) */\n expandOnActivate?: boolean;\n /** If set to false the column will not be exported in exportToExcel functionality */\n exportable?: boolean\n /** Function to transform values during export */\n exportFormatter?: (value: unknown, rowData?: Record<any, unknown>) => unknown;\n /** If true, shows a red asterisk (*) next to the column header text to indicate a required field */\n required?: boolean;\n /** Declare a column editable that works with the editor property */\n editable?: boolean;\n}\n\nexport const DEFAULT_COLUMN_MIN_WIDTH = 12;\n"],
5
- "mappings": ";;;;;;AAgUO,IAAM,2BAA2B;",
4
+ "sourcesContent": ["import { type IdsColorValue } from '../../utils/ids-color-utils/ids-color-utils';\nimport type IdsDataGrid from './ids-data-grid';\nimport { IdsDataGridEditor } from './ids-data-grid-editors';\n\ntype IdsDateNumberOptions = Omit<Intl.DateTimeFormatOptions, 'localeMatcher'> & Omit<Intl.NumberFormatOptions, 'localeMatcher'> & {\n localeMatcher?: 'best fit' | 'lookup';\n};\n\nexport interface IdsDataGridColumnFormatOptions extends IdsDateNumberOptions {\n /* Set the style of the number */\n style?: 'decimal' | 'currency' | 'percent' | 'unit' | any;\n /* Sets the incoming locale */\n locale?: string;\n /** Sets the group (thousands) seperator (to something outside the current locale) */\n group?: string;\n /** Sets Intl.NumberFormat option to use grouping */\n useGrouping?: boolean;\n /** Sets the decimal seperator (to something outside the current locale) */\n decimal?: string;\n /** Date format to use for parsing ect */\n dateFormat?: string;\n /** Date format to use for parsing ect (more generic) */\n format?: string;\n /** legacy pattern for date formats */\n pattern?: string;\n /** Tag for the picker that it shows time */\n showTime?: boolean;\n}\n\nexport interface IdsDataGridColumnGroup {\n /* Set the id for the column group object */\n id?: string;\n /* Set the title/name for the column group */\n name?: string;\n /* Set the number of columns to span */\n colspan: number,\n /** Align the column text to either `left`, `center` or `right` */\n align?: string;\n /** Name of the header icon to use for formatters that support it */\n headerIcon?: string;\n /** Sets the header icon tooltip content */\n headerIconTooltip?: string;\n}\n\nexport interface IdsDataGridTooltipCallback {\n /* Column id */\n columnId?: string;\n /* Column data */\n columnData?: any;\n /* Column index */\n columnIndex?: number;\n /* Column group id */\n columnGroupId?: string;\n /* Column group data */\n columnGroupData?: any;\n /* Column group index */\n columnGroupIndex?: number;\n /* Field data */\n fieldData?: any;\n /* The grid api object */\n grid?: any;\n /* Is header group */\n isHeaderGroup?: boolean;\n /* Row data */\n rowData?: any;\n /* Row index */\n rowIndex?: number,\n /* The current text content */\n text?: string;\n /* Type of tooltip as unique identifier */\n type?: string;\n}\n\nexport interface IdsDataGridDatePickerOptions {\n /** Option to show today or not (for date type filters) */\n showToday?: boolean;\n /** Option to show apply button or not (for date type filters) */\n showApply?: boolean;\n /** Option to show cancel button or not (for date type filters) */\n showCancel?: boolean;\n /** Option to show clear button or not (for date type filters) */\n showClear?: boolean;\n /** First day of the week (for date type filters) */\n firstDayOfWeek?: number;\n /** Whether or not to show week numbers in the picklist (for date type filters) */\n showPicklistWeek?: boolean;\n /** Whether or not to show a list of months in the picklist (for date type filters) */\n showPicklistMonth?: boolean;\n /** Whether or not to show a list of years in the picklist (for date type filters) */\n showPicklistYear?: boolean;\n /** Show week numbers in front of each week of date picker (for date type filters) */\n showWeekNumbers?: boolean;\n /** Set whether or not to show current time in the time picker dropdowns */\n useCurrentTime?: boolean;\n /** Whether or not the component should be a range picker */\n useRange?: boolean;\n}\n\nexport interface IdsDataGridTooltipOptions {\n /* The tooltip placement */\n placement?: 'top' | 'right' | 'bottom' | 'left'\n /* Sets tooltip edge horizontal space */\n x?: number;\n /* Sets tooltip edge vertical space */\n y?: number;\n /* The header tooltip placement */\n headerPlacement?: 'top' | 'right' | 'bottom' | 'left';\n /* Sets tooltip edge horizontal space */\n headerX?: number;\n /* Sets tooltip edge vertical space */\n headerY?: number;\n /* The header icon tooltip placement */\n headerIconPlacement?: 'top' | 'right' | 'bottom' | 'left';\n /* Sets tooltip edge horizontal space */\n headerIconX?: number;\n /* Sets tooltip edge vertical space */\n headerIconY?: number;\n /* The filter button tooltip placement */\n filterButtonPlacement?: 'top' | 'right' | 'bottom' | 'left';\n /* Sets tooltip edge horizontal space */\n filterButtonX?: number;\n /* Sets tooltip edge vertical space */\n filterButtonY?: number;\n}\n\nexport interface IdsDataGridEditorValidation {\n /* Custom validation function */\n check: (input: any) => boolean;\n /* Validation error message */\n message: string;\n /** Validation Message Translation key */\n messageId?: string;\n /* Validation rul id */\n id: string;\n}\n\nexport interface IdsDataGridHeaderTextName {\n /** The header text for one line */\n text: string;\n /** The font style to use */\n emphasis?: 'normal' | 'subtle';\n}\n\nexport interface IdsDataGridColumn {\n /** The columns unique id */\n id: string;\n /** The columns name */\n name?: string | Array<IdsDataGridHeaderTextName>;\n /** The columns field in the array to use */\n field?: string;\n /** The subsitute text to use (for hyperlink and some formatters) */\n text?: string | ((row: number, value: any, column: IdsDataGridColumn, index: Record<string, any>) => string | undefined);\n /** Max value of a range */\n max?: number;\n /** Mininum value of a range */\n min?: number;\n /** Adds expand/collapse icon to a column */\n showHeaderExpander?: boolean;\n /** Allow column sorting */\n sortable?: boolean;\n /** Allow column hide/show */\n hideable?: boolean;\n /** Allow column resizing */\n resizable?: boolean;\n /** Adds a drag indicator and allows the columns to be moved by dragging */\n reorderable?: boolean;\n /** Set a column width in pixel or percent */\n width?: number | string;\n /** When width is 'max-content', controls text measurement: true uses raw values, false (default) uses formatted values */\n useValueForSizing?: boolean;\n /** Set a min column width for resizing */\n minWidth?: number | string;\n /** Set a max column width for resizing */\n maxWidth?: number | string;\n /** Hide a column to be shown later */\n hidden?: boolean;\n /** Column Formatter Function */\n formatter?: (\n rowData: Record<string, unknown>, columnData: IdsDataGridColumn, index: number, parentDataGrid: IdsDataGrid\n ) => string;\n /** Set the column to checked or unchecked (filtering) */\n isChecked?: (value: boolean) => boolean;\n /** If column is selected */\n isSelected?: boolean;\n /** Enable Href / Link Columns */\n href?: string | ((rowData: Record<string, unknown>, columnData: IdsDataGridColumn) => string);\n /** Fires for clickable formatters (like button) */\n click?: (rowData: Record<string, unknown>, columnData: IdsDataGridColumn, event: MouseEvent) => void;\n /** Fires for menuId formatters (like button) */\n selected?: (rowData: Record<string, unknown>, columnData: IdsDataGridColumn, event: CustomEvent) => void;\n /** Selector for menu id */\n menuId?: string;\n /** Get the color dynamically from a function or as text */\n // eslint-disable-next-line max-len\n color?: IdsColorValue | ((row: number, value: any, column: IdsDataGridColumn, index: Record<string, any>) => string | undefined);\n /** Suppress the ids-color tooltip */\n suppressColorTooltip?: boolean;\n /** Get the size dynamically from a function or as text */\n size?: string | ((row: number, value: any, column: IdsDataGridColumn, index: Record<string, any>) => string | undefined);\n /** Options to pass to the formatter */\n formatOptions?: IdsDataGridColumnFormatOptions;\n /** Column Filter to use */\n filterType?: string | any;\n /** Column Filter options to show */\n filterConditions?: any[];\n /** Options to pass to the filter */\n filterOptions?: {\n /** The columns unique id */\n columnId?: string;\n /** Define a custom id for the inputs */\n customId?: string | ((columnData: IdsDataGridColumn) => string);\n /** The label in the filter */\n label?: string;\n /** The size of the input field */\n size?: string;\n /** The filter type */\n type?: string;\n /** Disable the filter */\n disabled?: boolean;\n /** Make the filter readonly */\n readonly?: boolean;\n /** Date formation to show (for date type filters) */\n format?: string;\n /** Placeholder to show for empty inputs */\n placeholder?: string;\n /** The interval between minutes (for time type filters) */\n minuteInterval?: number;\n /** The interval between seconds (for time type filters) */\n secondInterval?: number;\n /** Sets the auto select attribute (for time type filters) */\n autoselect?: boolean;\n /** Sets the auto update attribute (for time type filters) */\n autoupdate?: boolean;\n /** If the filter type is \"contents\" lets you set a blank string to a text value (matched by ID) */\n notFilteredItem?: { value: string, label: string }\n /** For filter type input, sets the text to all upper case when typed */\n uppercase?: boolean;\n /** For filter type input, sets the text max lenght when typed */\n maxlength?: number;\n /** Adds the autocomplete attribute to the input element allowing for browser autocomplete */\n browserAutocomplete?: string\n /** Override the decimal separator character for decimal filter (e.g., '.' or ','). Defaults to locale setting. */\n decimal?: string;\n /** Override the group (thousands) separator for decimal filter (e.g., ',' or '.'). Defaults to locale. */\n group?: string;\n /** Mask type to use for filter input (e.g., 'number', 'date') */\n mask?: string;\n /** Mask options to pass to the filter input for full customization */\n maskOptions?: Record<string, unknown>;\n } & IdsDataGridDatePickerOptions;\n /** Lets you make a dynamic filter function */\n filterFunction?: any;\n /** True if the row is selected */\n rowSelected?: boolean;\n /** True if the row is activated */\n rowActivated?: boolean;\n /** Sets a custom css-part for styling the cell */\n cssPart?: string | ((args: object) => string);\n /** Sets a custom css-part for styling cell when it's selected */\n cellSelectedCssPart?: string | ((args: object) => string);\n /** Pass the type option to formatters that support it */\n type?: string;\n /** Disable the column with a boolean or a dynamic function */\n disabled?: boolean | ((row: number, value: any, col: IdsDataGridColumn, item: Record<string, any>) => boolean);\n /** Make the column readonly with a boolean or a dynamic function */\n readonly?: boolean | ((row: number, value: any, col: IdsDataGridColumn, item: Record<string, any>) => boolean);\n /** Column will not be styled as readonly when the readonly property is true */\n excludeReadonlyStyling?: boolean;\n /** Name of the icon too use for formatters that support it */\n icon?: string | ((row: number, value: any, column: IdsDataGridColumn, index: Record<string, any>) => string | undefined);\n /** Name of the header icon */\n headerIcon?: string;\n /** Align the column to either `left`, `center` or `right` */\n align?: string;\n /** Separately align the filter row contents to either `left`, `center`, or `right` */\n filterAlign?: string;\n /** Seperately align the header to either `left`, `center` or `right` */\n headerAlign?: string;\n /** Freeze the columns to either the `left` or `right` sides */\n frozen?: string;\n /** If a tree or expandable row will set the state of the row */\n rowExpanded?: boolean;\n /** Sets the tooltip options */\n tooltipOptions?: IdsDataGridTooltipOptions | ((options: IdsDataGridTooltipCallback) => IdsDataGridTooltipOptions);\n /** Sets the tooltip content */\n tooltip?: string | ((options: IdsDataGridTooltipCallback) => string | Promise<string>);\n /** Sets the header tooltip content */\n headerTooltip?: string;\n /** Sets the header icon tooltip content */\n headerIconTooltip?: string;\n /** Sets the header filter button tooltip content */\n filterButtonTooltip?: string;\n /** Sets the tooltip css part */\n tooltipCssPart?: string | ((options: IdsDataGridTooltipCallback) => string);\n /** Sets the header tooltip css part */\n headerTooltipCssPart?: string;\n /** Sets the header icon tooltip css part */\n headerIconTooltipCssPart?: string;\n /** Sets the header filter button tooltip css part */\n filterButtonTooltipCssPart?: string;\n /** Sets the hyperlink behavior. options: 'default' | 'no-select' | 'de-select' | 'none' */\n hyperlinkBehavior?: string;\n /** Sets the character count to reveal when cell value is masked */\n textMaskCharacter?: number;\n /** Setup an editor */\n editor?: {\n type: 'input' | 'date' | 'time' | 'checkbox' | 'dropdown' | 'datepicker' | 'timepicker' | 'tree' | 'lookup' | 'password',\n inline?: boolean,\n /** If true, the editor icon will always be visible */\n showEditorIcons?: boolean;\n editor?: IdsDataGridEditor,\n editorSettings?: Record<string, unknown>,\n editorValidation?: IdsDataGridEditorValidation,\n },\n /** If a true will set the text to uppercase */\n uppercase?: boolean | 'true' | ((type: 'body-cell' | 'header-cell', col: IdsDataGridColumn, index?: number, value?: any, item?: Record<string, any>) => boolean);\n /** If true, the cell will expand to show full multi-line content when activated (clicked/focused) */\n expandOnActivate?: boolean;\n /** If set to false the column will not be exported in exportToExcel functionality */\n exportable?: boolean\n /** Function to transform values during export */\n exportFormatter?: (value: unknown, rowData?: Record<any, unknown>) => unknown;\n /** If true, shows a red asterisk (*) next to the column header text to indicate a required field */\n required?: boolean;\n /** Declare a column editable that works with the editor property */\n editable?: boolean;\n}\n\nexport const DEFAULT_COLUMN_MIN_WIDTH = 12;\n"],
5
+ "mappings": ";;;;;;AAwUO,IAAM,2BAA2B;",
6
6
  "names": []
7
7
  }