{"version":3,"sources":["components/date-picker/fix-events-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAEtD,OAAO,MAAM,MAAM,+BAA+B,CAAC;AACnD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,SAAS,EAAE,iBAAiB,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,wCAAyC,SAAQ,iBAAiB;IACjF;;OAEG;IACH,0CAA0C,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3D;;OAEG;IACH,wCAAwC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1D;iCAMuB,+BAA+B,KAAG,MAAM;AAJhE;;;GAGG;AACH,wBAkEI","file":"fix-events-plugin.d.ts","sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2019, 2021\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Instance as FlatpickrInstance } from 'flatpickr/dist/types/instance';\nimport { Plugin } from 'flatpickr/dist/types/options';\nimport on from 'carbon-components/es/globals/js/misc/on';\nimport Handle from '../../globals/internal/handle';\nimport BXDatePickerInput from './date-picker-input';\n\n/**\n * The configuration for the Flatpickr plugin to fix Flatpickr's behavior of certain events.\n */\nexport interface DatePickerFixEventsPluginConfig {\n  /**\n   * The input box to enter starting date.\n   */\n  inputFrom: BXDatePickerInput;\n\n  /**\n   * The input box to enter end date.\n   */\n  inputTo?: BXDatePickerInput;\n}\n\n/**\n * `FlatpickrInstance` with additional properties used for `carbonFlatpickrFixEventsPlugin`.\n */\nexport interface ExtendedFlatpickrInstanceFixEventsPlugin extends FlatpickrInstance {\n  /**\n   * The handle for `keydown` event handler in the `<input>` for the starting date.\n   */\n  _hBXCEDatePickerFixEventsPluginKeydownFrom?: Handle | null;\n\n  /**\n   * The handle for `keydown` event handler in the `<input>` for the end date.\n   */\n  _hBXCEDatePickerFixEventsPluginKeydownTo?: Handle | null;\n}\n\n/**\n * @param config Plugin configuration.\n * @returns A Flatpickr plugin to fix Flatpickr's behavior of certain events.\n */\nexport default (config: DatePickerFixEventsPluginConfig): Plugin =>\n  (fp: ExtendedFlatpickrInstanceFixEventsPlugin) => {\n    /**\n     * Handles `keydown` event.\n     */\n    const handleKeydown = (event: KeyboardEvent) => {\n      const { inputFrom, inputTo } = config;\n      const { key, target } = event;\n      if (inputFrom === target || inputTo === target) {\n        switch (key) {\n          case 'Enter':\n            // Makes sure the hitting enter key picks up pending values of both `<input>`\n            // Workaround for: https://github.com/flatpickr/flatpickr/issues/1942\n            fp.setDate([inputFrom.value!, (inputTo && inputTo.value)!], true, fp.config.dateFormat);\n            event.stopPropagation();\n            break;\n          case 'ArrowLeft':\n          case 'Left':\n          case 'ArrowRight':\n          case 'Right':\n            // Prevents Flatpickr code from canceling the event if left/right arrow keys are hit on `<input>`,\n            // so user can move the keyboard cursor for editing dates\n            // Workaround for: https://github.com/flatpickr/flatpickr/issues/1943\n            event.stopPropagation();\n            break;\n          default:\n            break;\n        }\n      }\n    };\n\n    /**\n     * Releases event listeners used in this Flatpickr plugin.\n     */\n    const release = () => {\n      if (fp._hBXCEDatePickerFixEventsPluginKeydownTo) {\n        fp._hBXCEDatePickerFixEventsPluginKeydownTo = fp._hBXCEDatePickerFixEventsPluginKeydownTo.release();\n      }\n      if (fp._hBXCEDatePickerFixEventsPluginKeydownFrom) {\n        fp._hBXCEDatePickerFixEventsPluginKeydownFrom = fp._hBXCEDatePickerFixEventsPluginKeydownFrom.release();\n      }\n    };\n\n    /**\n     * Sets up event listeners used for this Flatpickr plugin.\n     */\n    const init = () => {\n      release();\n      const { inputFrom, inputTo } = config;\n      fp._hBXCEDatePickerFixEventsPluginKeydownFrom = on(inputFrom, 'keydown', handleKeydown, true);\n      if (inputTo) {\n        fp._hBXCEDatePickerFixEventsPluginKeydownTo = on(inputTo, 'keydown', handleKeydown, true);\n      }\n    };\n\n    /**\n     * Registers this Flatpickr plugin.\n     */\n    const register = () => {\n      fp.loadedPlugins.push('carbonFlatpickrFixEventsPlugin');\n    };\n\n    return {\n      onReady: [register, init],\n      onDestroy: [release],\n    };\n  };\n"]}