{ "version": 3, "sources": ["../../src/slick.editors.ts"], "sourcesContent": ["import type { Editor, EditorArguments, EditorValidationResult, ElementPosition } from './models/index';\nimport { keyCode as keyCode_, Utils as Utils_ } from './slick.core';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/***\n * Contains basic SlickGrid editors.\n * @module Editors\n * @namespace Slick\n */\n\nexport class TextEditor implements Editor {\n protected input!: HTMLInputElement;\n protected defaultValue?: number | string;\n protected navOnLR?: boolean;\n\n constructor(protected readonly args: EditorArguments) {\n this.init();\n }\n\n init() {\n this.navOnLR = this.args.grid.getOptions().editorCellNavOnLRKeys;\n this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\n this.input.addEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\n this.input.focus();\n this.input.select();\n\n // don't show Save/Cancel when it's a Composite Editor and also trigger a onCompositeEditorChange event when input changes\n if (this.args.compositeEditorOptions) {\n this.input.addEventListener('change', this.onChange.bind(this));\n }\n }\n\n onChange() {\n const activeCell = this.args.grid.getActiveCell();\n\n // when valid, we'll also apply the new value to the dataContext item object\n if (this.validate().valid) {\n this.applyValue(this.args.item, this.serializeValue());\n }\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n this.args.grid.onCompositeEditorChange.notify({\n row: activeCell?.row ?? 0,\n cell: activeCell?.cell ?? 0,\n item: this.args.item,\n column: this.args.column,\n formValues: this.args.compositeEditorOptions.formValues,\n grid: this.args.grid,\n editors: this.args.compositeEditorOptions.editors\n });\n }\n\n destroy() {\n this.input.removeEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\n this.input.removeEventListener('change', this.onChange.bind(this));\n this.input.remove();\n }\n\n focus() {\n this.input.focus();\n }\n\n getValue() {\n return this.input.value;\n }\n\n setValue(val: string) {\n this.input.value = val;\n }\n\n loadValue(item: any) {\n this.defaultValue = item[this.args.column.field] || '';\n this.input.value = String(this.defaultValue ?? '');\n this.input.defaultValue = String(this.defaultValue ?? '');\n this.input.select();\n }\n\n serializeValue() {\n return this.input.value;\n }\n\n applyValue(item: any, state: any) {\n item[this.args.column.field] = state;\n }\n\n isValueChanged() {\n return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\n }\n\n validate() {\n if (this.args.column.validator) {\n const validationResults = this.args.column.validator(this.input.value, this.args);\n if (!validationResults.valid) {\n return validationResults;\n }\n }\n\n return {\n valid: true,\n msg: null\n };\n }\n}\n\nexport class IntegerEditor implements Editor {\n protected input!: HTMLInputElement;\n protected defaultValue?: string | number;\n protected navOnLR?: boolean;\n\n constructor(protected readonly args: EditorArguments) {\n this.init();\n }\n\n init() {\n this.navOnLR = this.args.grid.getOptions().editorCellNavOnLRKeys;\n this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\n this.input.addEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\n this.input.focus();\n this.input.select();\n\n // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\n if (this.args.compositeEditorOptions) {\n this.input.addEventListener('change', this.onChange.bind(this));\n }\n }\n\n onChange() {\n const activeCell = this.args.grid.getActiveCell();\n\n // when valid, we'll also apply the new value to the dataContext item object\n if (this.validate().valid) {\n this.applyValue(this.args.item, this.serializeValue());\n }\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n this.args.grid.onCompositeEditorChange.notify({\n row: activeCell?.row ?? 0,\n cell: activeCell?.cell ?? 0,\n item: this.args.item,\n column: this.args.column,\n formValues: this.args.compositeEditorOptions.formValues,\n grid: this.args.grid,\n editors: this.args.compositeEditorOptions.editors\n });\n }\n\n destroy() {\n this.input.removeEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\n this.input.removeEventListener('change', this.onChange.bind(this));\n this.input.remove();\n }\n\n focus() {\n this.input.focus();\n }\n\n loadValue(item: any) {\n this.defaultValue = item[this.args.column.field];\n this.input.value = String(this.defaultValue ?? '');\n this.input.defaultValue = String(this.defaultValue ?? '');\n this.input.select();\n }\n\n serializeValue() {\n return parseInt(this.input.value, 10) || 0;\n }\n\n applyValue(item: any, state: any) {\n item[this.args.column.field] = state;\n }\n\n isValueChanged() {\n return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\n }\n\n validate() {\n if (isNaN(this.input.value as unknown as number)) {\n return {\n valid: false,\n msg: 'Please enter a valid integer'\n };\n }\n\n if (this.args.column.validator) {\n const validationResults = this.args.column.validator(this.input.value, this.args);\n if (!validationResults.valid) {\n return validationResults;\n }\n }\n\n return {\n valid: true,\n msg: null\n };\n }\n}\n\nexport class FloatEditor implements Editor {\n protected input!: HTMLInputElement;\n protected defaultValue?: string | number;\n protected navOnLR?: boolean;\n\n /** Default number of decimal places to use with FloatEditor */\n static DefaultDecimalPlaces?: number = undefined;\n\n /** Should we allow empty value when using FloatEditor */\n static AllowEmptyValue = false;\n\n constructor(protected readonly args: EditorArguments) {\n this.init();\n }\n\n init() {\n this.navOnLR = this.args.grid.getOptions().editorCellNavOnLRKeys;\n this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\n this.input.addEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\n this.input.focus();\n this.input.select();\n\n // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\n if (this.args.compositeEditorOptions) {\n this.input.addEventListener('change', this.onChange.bind(this));\n }\n };\n\n onChange() {\n const activeCell = this.args.grid.getActiveCell();\n\n // when valid, we'll also apply the new value to the dataContext item object\n if (this.validate().valid) {\n this.applyValue(this.args.item, this.serializeValue());\n }\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n this.args.grid.onCompositeEditorChange.notify({\n row: activeCell?.row ?? 0,\n cell: activeCell?.cell ?? 0,\n item: this.args.item,\n column: this.args.column,\n formValues: this.args.compositeEditorOptions.formValues,\n grid: this.args.grid,\n editors: this.args.compositeEditorOptions.editors\n });\n };\n\n destroy() {\n this.input.removeEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\n this.input.removeEventListener('change', this.onChange.bind(this));\n this.input.remove();\n };\n\n focus() {\n this.input.focus();\n }\n\n getDecimalPlaces() {\n // returns the number of fixed decimal places or null\n let rtn: number | undefined = this.args.column.editorFixedDecimalPlaces;\n if (!Utils.isDefined(rtn)) {\n rtn = FloatEditor.DefaultDecimalPlaces;\n }\n return (!rtn && rtn !== 0 ? null : rtn);\n }\n\n loadValue(item: any) {\n this.defaultValue = item[this.args.column.field];\n\n const decPlaces = this.getDecimalPlaces();\n if (decPlaces !== null\n && (this.defaultValue || this.defaultValue === 0)\n && (this.defaultValue as number)?.toFixed) {\n this.defaultValue = (this.defaultValue as number).toFixed(decPlaces);\n }\n\n this.input.value = String(this.defaultValue ?? '');\n this.input.defaultValue = String(this.defaultValue ?? '');\n this.input.select();\n }\n\n serializeValue() {\n let rtn: number | undefined = parseFloat(this.input.value);\n if (FloatEditor.AllowEmptyValue) {\n if (!rtn && rtn !== 0) {\n rtn = undefined;\n }\n } else {\n rtn = rtn || 0;\n }\n\n const decPlaces = this.getDecimalPlaces();\n if (decPlaces !== null\n && (rtn || rtn === 0)\n && rtn.toFixed) {\n rtn = parseFloat(rtn.toFixed(decPlaces));\n }\n\n return rtn as number;\n }\n\n applyValue(item: any, state: number | string) {\n item[this.args.column.field] = state;\n }\n\n isValueChanged() {\n return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\n }\n\n validate() {\n if (isNaN(this.input.value as unknown as number)) {\n return {\n valid: false,\n msg: 'Please enter a valid number'\n };\n }\n\n if (this.args.column.validator) {\n const validationResults = this.args.column.validator(this.input.value, this.args);\n if (!validationResults.valid) {\n return validationResults;\n }\n }\n\n return {\n valid: true,\n msg: null\n };\n }\n}\n\nexport class FlatpickrEditor implements Editor {\n protected input!: HTMLInputElement;\n protected defaultValue?: string | number;\n protected flatpickrInstance: any;\n\n constructor(protected readonly args: EditorArguments) {\n this.init();\n if (typeof flatpickr === 'undefined') {\n throw new Error('Flatpickr not loaded but required in SlickGrid.Editors, refer to Flatpickr documentation: https://flatpickr.js.org/getting-started/');\n }\n }\n\n init() {\n this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\n this.input.focus();\n this.input.select();\n this.flatpickrInstance = flatpickr(this.input, {\n closeOnSelect: true,\n allowInput: true,\n altInput: true,\n altFormat: 'm/d/Y',\n dateFormat: 'm/d/Y',\n onChange: () => {\n // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\n if (this.args.compositeEditorOptions) {\n const activeCell = this.args.grid.getActiveCell();\n\n // when valid, we'll also apply the new value to the dataContext item object\n if (this.validate().valid) {\n this.applyValue(this.args.item, this.serializeValue());\n }\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n this.args.grid.onCompositeEditorChange.notify({\n row: activeCell?.row ?? 0,\n cell: activeCell?.cell ?? 0,\n item: this.args.item,\n column: this.args.column,\n formValues: this.args.compositeEditorOptions.formValues,\n grid: this.args.grid,\n editors: this.args.compositeEditorOptions.editors\n });\n }\n },\n });\n\n if (!this.args.compositeEditorOptions) {\n setTimeout(() => {\n this.show();\n this.focus();\n }, 50);\n }\n\n Utils.width(this.input, (Utils.width(this.input) as number) - (!this.args.compositeEditorOptions ? 18 : 28));\n }\n\n destroy() {\n this.hide();\n if (this.flatpickrInstance) {\n this.flatpickrInstance.destroy();\n }\n this.input.remove();\n }\n\n show() {\n if (!this.args.compositeEditorOptions && this.flatpickrInstance) {\n this.flatpickrInstance.open();\n }\n }\n\n hide() {\n if (!this.args.compositeEditorOptions && this.flatpickrInstance) {\n this.flatpickrInstance.close();\n }\n }\n\n focus() {\n this.input.focus();\n }\n\n loadValue(item: any) {\n this.defaultValue = item[this.args.column.field];\n this.input.value = String(this.defaultValue ?? '');\n this.input.defaultValue = String(this.defaultValue ?? '');\n this.input.select();\n if (this.flatpickrInstance) {\n this.flatpickrInstance.setDate(this.defaultValue);\n }\n }\n\n serializeValue() {\n return this.input.value;\n }\n\n applyValue(item: any, state: any) {\n item[this.args.column.field] = state;\n }\n\n isValueChanged() {\n return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\n }\n\n validate() {\n if (this.args.column.validator) {\n const validationResults = this.args.column.validator(this.input.value, this.args);\n if (!validationResults.valid) {\n return validationResults;\n }\n }\n\n return {\n valid: true,\n msg: null\n };\n }\n}\n\nexport class YesNoSelectEditor implements Editor {\n protected select!: HTMLSelectElement;\n protected defaultValue?: string | number;\n\n constructor(protected readonly args: EditorArguments) {\n this.init();\n }\n\n init() {\n this.select = Utils.createDomElement('select', { tabIndex: 0, className: 'editor-yesno' }, this.args.container);\n Utils.createDomElement('option', { value: 'yes', textContent: 'Yes' }, this.select);\n Utils.createDomElement('option', { value: 'no', textContent: 'No' }, this.select);\n\n this.select.focus();\n\n // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\n if (this.args.compositeEditorOptions) {\n this.select.addEventListener('change', this.onChange.bind(this));\n }\n }\n\n onChange() {\n const activeCell = this.args.grid.getActiveCell();\n\n // when valid, we'll also apply the new value to the dataContext item object\n if (this.validate().valid) {\n this.applyValue(this.args.item, this.serializeValue());\n }\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n this.args.grid.onCompositeEditorChange.notify({\n row: activeCell?.row ?? 0,\n cell: activeCell?.cell ?? 0,\n item: this.args.item,\n column: this.args.column,\n formValues: this.args.compositeEditorOptions.formValues,\n grid: this.args.grid,\n editors: this.args.compositeEditorOptions.editors\n });\n }\n\n destroy() {\n this.select.removeEventListener('change', this.onChange.bind(this));\n this.select.remove();\n }\n\n focus() {\n this.select.focus();\n }\n\n loadValue(item: any) {\n this.select.value = ((this.defaultValue = item[this.args.column.field]) ? 'yes' : 'no');\n }\n\n serializeValue() {\n return this.select.value === 'yes';\n }\n\n applyValue(item: any, state: any) {\n item[this.args.column.field] = state;\n }\n\n isValueChanged() {\n return this.select.value !== this.defaultValue;\n }\n\n validate() {\n return {\n valid: true,\n msg: null\n };\n }\n}\n\nexport class CheckboxEditor implements Editor {\n protected input!: HTMLInputElement;\n protected defaultValue?: boolean;\n\n constructor(protected readonly args: EditorArguments) {\n this.init();\n }\n\n init() {\n this.input = Utils.createDomElement('input', { className: 'editor-checkbox', type: 'checkbox', value: 'true' }, this.args.container);\n this.input.focus();\n\n // trigger onCompositeEditorChange event when input checkbox changes and it's a Composite Editor\n if (this.args.compositeEditorOptions) {\n this.input.addEventListener('change', this.onChange.bind(this));\n }\n };\n\n onChange() {\n const activeCell = this.args.grid.getActiveCell();\n\n // when valid, we'll also apply the new value to the dataContext item object\n if (this.validate().valid) {\n this.applyValue(this.args.item, this.serializeValue());\n }\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n this.args.grid.onCompositeEditorChange.notify({\n row: activeCell?.row ?? 0,\n cell: activeCell?.cell ?? 0,\n item: this.args.item,\n column: this.args.column,\n formValues: this.args.compositeEditorOptions.formValues,\n grid: this.args.grid,\n editors: this.args.compositeEditorOptions.editors\n });\n };\n\n destroy() {\n this.input.removeEventListener('change', this.onChange.bind(this));\n this.input.remove();\n };\n\n focus() {\n this.input.focus();\n };\n\n loadValue(item: any) {\n this.defaultValue = !!(item[this.args.column.field]);\n if (this.defaultValue) {\n this.input.checked = true;\n } else {\n this.input.checked = false;\n }\n };\n\n serializeValue() {\n return this.input.checked;\n };\n\n applyValue(item: any, state: any) {\n item[this.args.column.field] = state;\n }\n\n isValueChanged() {\n return (this.serializeValue() !== this.defaultValue);\n }\n\n validate(): EditorValidationResult {\n return {\n valid: true,\n msg: null\n };\n }\n}\n\nexport class PercentCompleteEditor implements Editor {\n protected input!: HTMLInputElement;\n protected defaultValue?: number;\n protected picker!: HTMLDivElement;\n protected slider!: HTMLInputElement | null;\n\n constructor(protected readonly args: EditorArguments) {\n this.init();\n }\n\n sliderInputHandler(e: MouseEvent & { target: HTMLButtonElement }) {\n this.input.value = e.target.value;\n }\n\n sliderChangeHandler() {\n // trigger onCompositeEditorChange event when slider stops and it's a Composite Editor\n if (this.args.compositeEditorOptions) {\n const activeCell = this.args.grid.getActiveCell();\n\n // when valid, we'll also apply the new value to the dataContext item object\n if (this.validate().valid) {\n this.applyValue(this.args.item, this.serializeValue());\n }\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n this.args.grid.onCompositeEditorChange.notify({\n row: activeCell?.row ?? 0,\n cell: activeCell?.cell ?? 0,\n item: this.args.item,\n column: this.args.column,\n formValues: this.args.compositeEditorOptions.formValues,\n grid: this.args.grid,\n editors: this.args.compositeEditorOptions.editors\n });\n }\n }\n\n init() {\n this.input = Utils.createDomElement('input', { className: 'editor-percentcomplete', type: 'text' }, this.args.container);\n Utils.width(this.input, this.args.container.clientWidth - 25);\n\n this.picker = Utils.createDomElement('div', { className: 'editor-percentcomplete-picker' }, this.args.container);\n Utils.createDomElement('span', { className: 'editor-percentcomplete-picker-icon' }, this.picker);\n const containerHelper = Utils.createDomElement('div', { className: 'editor-percentcomplete-helper' }, this.picker);\n const containerWrapper = Utils.createDomElement('div', { className: 'editor-percentcomplete-wrapper' }, containerHelper);\n Utils.createDomElement('div', { className: 'editor-percentcomplete-slider' }, containerWrapper);\n this.slider = Utils.createDomElement('input', { className: 'editor-percentcomplete-slider', type: 'range', value: String(this.defaultValue ?? '') }, containerWrapper);\n const containerButtons = Utils.createDomElement('div', { className: 'editor-percentcomplete-buttons' }, containerWrapper);\n Utils.createDomElement('button', { value: '0', className: 'slick-btn slick-btn-default', textContent: 'Not started' }, containerButtons);\n containerButtons.appendChild(document.createElement('br'));\n Utils.createDomElement('button', { value: '50', className: 'slick-btn slick-btn-default', textContent: 'In Progress' }, containerButtons);\n containerButtons.appendChild(document.createElement('br'));\n Utils.createDomElement('button', { value: '100', className: 'slick-btn slick-btn-default', textContent: 'Complete' }, containerButtons);\n\n this.input.focus();\n this.input.select();\n\n this.slider.addEventListener('input', this.sliderInputHandler.bind(this) as EventListener);\n this.slider.addEventListener('change', this.sliderChangeHandler.bind(this));\n\n const buttons = this.picker.querySelectorAll('.editor-percentcomplete-buttons button');\n [].forEach.call(buttons, (button: HTMLButtonElement) => {\n button.addEventListener('click', this.onClick.bind(this) as EventListener);\n });\n };\n\n onClick(e: MouseEvent & { target: HTMLButtonElement }) {\n this.input.value = String(e.target.value ?? '');\n this.slider!.value = String(e.target.value ?? '');\n };\n\n destroy() {\n this.slider?.removeEventListener('input', this.sliderInputHandler.bind(this) as EventListener);\n this.slider?.removeEventListener('change', this.sliderChangeHandler.bind(this));\n this.picker.querySelectorAll('.editor-percentcomplete-buttons button')\n .forEach(button => button.removeEventListener('click', this.onClick.bind(this) as EventListener));\n this.input.remove();\n this.picker.remove();\n };\n\n focus() {\n this.input.focus();\n };\n\n loadValue(item: any) {\n this.defaultValue = item[this.args.column.field];\n this.slider!.value = String(this.defaultValue ?? '');\n this.input.value = String(this.defaultValue);\n this.input.select();\n };\n\n serializeValue() {\n return parseInt(this.input.value, 10) || 0;\n };\n\n applyValue(item: any, state: any) {\n item[this.args.column.field] = state;\n };\n\n isValueChanged() {\n return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && ((parseInt(this.input.value as any, 10) || 0) !== this.defaultValue);\n };\n\n validate(): EditorValidationResult {\n if (isNaN(parseInt(this.input.value, 10))) {\n return {\n valid: false,\n msg: 'Please enter a valid positive number'\n };\n }\n\n return {\n valid: true,\n msg: null\n };\n };\n}\n\n/*\n * An example of a 'detached' editor.\n * The UI is added onto document BODY and .position(), .show() and .hide() are implemented.\n * KeyDown events are also handled to provide handling for Tab, Shift-Tab, Esc and Ctrl-Enter.\n */\nexport class LongTextEditor implements Editor {\n protected input!: HTMLTextAreaElement;\n protected wrapper!: HTMLDivElement;\n protected defaultValue?: string;\n protected selectionStart = 0;\n\n constructor(protected readonly args: EditorArguments) {\n this.init();\n }\n\n init() {\n const compositeEditorOptions = this.args.compositeEditorOptions;\n this.args.grid.getOptions().editorCellNavOnLRKeys;\n const container = compositeEditorOptions ? this.args.container : document.body;\n\n this.wrapper = Utils.createDomElement('div', { className: 'slick-large-editor-text' }, container);\n if (compositeEditorOptions) {\n this.wrapper.style.position = 'relative';\n Utils.setStyleSize(this.wrapper, 'padding', 0);\n Utils.setStyleSize(this.wrapper, 'border', 0);\n } else {\n this.wrapper.style.position = 'absolute';\n }\n\n this.input = Utils.createDomElement('textarea', { rows: 5, style: { background: 'white', width: '250px', height: '80px', border: '0', outline: '0' } }, this.wrapper);\n\n // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\n if (compositeEditorOptions) {\n this.input.addEventListener('change', this.onChange.bind(this));\n } else {\n const btnContainer = Utils.createDomElement('div', { style: 'text-align:right' }, this.wrapper);\n Utils.createDomElement('button', { id: 'save', className: 'slick-btn slick-btn-primary', textContent: 'Save' }, btnContainer);\n Utils.createDomElement('button', { id: 'cancel', className: 'slick-btn slick-btn-default', textContent: 'Cancel' }, btnContainer);\n\n this.wrapper.querySelector('#save')!.addEventListener('click', this.save.bind(this));\n this.wrapper.querySelector('#cancel')!.addEventListener('click', this.cancel.bind(this));\n this.input.addEventListener('keydown', this.handleKeyDown.bind(this) as EventListener);\n this.position(this.args.position as ElementPosition);\n }\n\n this.input.focus();\n this.input.select();\n };\n\n onChange() {\n const activeCell = this.args.grid.getActiveCell();\n\n // when valid, we'll also apply the new value to the dataContext item object\n if (this.validate().valid) {\n this.applyValue(this.args.item, this.serializeValue());\n }\n this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n this.args.grid.onCompositeEditorChange.notify({\n row: activeCell?.row ?? 0,\n cell: activeCell?.cell ?? 0,\n item: this.args.item,\n column: this.args.column,\n formValues: this.args.compositeEditorOptions.formValues,\n grid: this.args.grid,\n editors: this.args.compositeEditorOptions.editors\n });\n };\n\n handleKeyDown(e: KeyboardEvent & { target: HTMLInputElement }) {\n if (e.which === keyCode.ENTER && e.ctrlKey) {\n this.save();\n } else if (e.which === keyCode.ESCAPE) {\n e.preventDefault();\n this.cancel();\n } else if (e.which === keyCode.TAB && e.shiftKey) {\n e.preventDefault();\n this.args.grid.navigatePrev();\n } else if (e.which === keyCode.TAB) {\n e.preventDefault();\n this.args.grid.navigateNext();\n } else if (e.which === keyCode.LEFT || e.which === keyCode.RIGHT) {\n if (this.args.grid.getOptions().editorCellNavOnLRKeys) {\n const cursorPosition = this.selectionStart;\n const textLength = e.target.value.length;\n if (e.keyCode === keyCode.LEFT && cursorPosition === 0) {\n this.args.grid.navigatePrev();\n }\n if (e.keyCode === keyCode.RIGHT && cursorPosition >= textLength - 1) {\n this.args.grid.navigateNext();\n }\n }\n }\n };\n\n save() {\n const gridOptions = this.args.grid.getOptions() || {};\n if (gridOptions.autoCommitEdit) {\n this.args.grid.getEditorLock().commitCurrentEdit();\n } else {\n this.args.commitChanges();\n }\n };\n\n cancel() {\n this.input.value = String(this.defaultValue ?? '');\n this.args.cancelChanges();\n };\n\n hide() {\n Utils.hide(this.wrapper);\n };\n\n show() {\n Utils.show(this.wrapper);\n };\n\n position(position: ElementPosition) {\n Utils.setStyleSize(this.wrapper, 'top', (position.top || 0) - 5);\n Utils.setStyleSize(this.wrapper, 'left', (position.left || 0) - 2);\n };\n\n destroy() {\n if (this.args.compositeEditorOptions) {\n this.input.removeEventListener('change', this.onChange.bind(this));\n } else {\n this.wrapper.querySelector('#save')!.removeEventListener('click', this.save.bind(this));\n this.wrapper.querySelector('#cancel')!.removeEventListener('click', this.cancel.bind(this));\n this.input.removeEventListener('keydown', this.handleKeyDown.bind(this) as EventListener);\n }\n this.wrapper.remove();\n };\n\n focus() {\n this.input.focus();\n };\n\n loadValue(item: any) {\n this.input.value = this.defaultValue = item[this.args.column.field];\n this.input.select();\n };\n\n serializeValue() {\n return this.input.value;\n };\n\n applyValue(item: any, state: any) {\n item[this.args.column.field] = state;\n };\n\n isValueChanged() {\n return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\n };\n\n validate() {\n if (this.args.column.validator) {\n const validationResults = this.args.column.validator(this.input.value, this.args);\n if (!validationResults.valid) {\n return validationResults;\n }\n }\n\n return {\n valid: true,\n msg: null\n };\n };\n}\n\n/*\n * Depending on the value of Grid option 'editorCellNavOnLRKeys', us\n * Navigate to the cell on the left if the cursor is at the beginning of the input string\n * and to the right cell if it's at the end. Otherwise, move the cursor within the text\n */\nfunction handleKeydownLRNav(e: KeyboardEvent & { target: HTMLInputElement; selectionStart: number; }) {\n const cursorPosition = e.selectionStart;\n const textLength = e.target.value.length;\n if ((e.keyCode === keyCode.LEFT && cursorPosition > 0) ||\n e.keyCode === keyCode.RIGHT && cursorPosition < textLength - 1) {\n e.stopImmediatePropagation();\n }\n}\n\nfunction handleKeydownLRNoNav(e: KeyboardEvent) {\n if (e.keyCode === keyCode.LEFT || e.keyCode === keyCode.RIGHT) {\n e.stopImmediatePropagation();\n }\n}\n\nexport const Editors = {\n Text: TextEditor,\n Integer: IntegerEditor,\n Float: FloatEditor,\n Flatpickr: FlatpickrEditor,\n YesNoSelect: YesNoSelectEditor,\n Checkbox: CheckboxEditor,\n PercentComplete: PercentCompleteEditor,\n LongText: LongTextEditor\n};\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n Utils.extend(Slick, {\n Editors\n });\n}\n\n"], "mappings": "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", "names": [] }