框架源码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4031 lines
111 KiB

4 years ago
  1. module.exports =
  2. /******/ (function(modules) { // webpackBootstrap
  3. /******/ // The module cache
  4. /******/ var installedModules = {};
  5. /******/
  6. /******/ // The require function
  7. /******/ function __webpack_require__(moduleId) {
  8. /******/
  9. /******/ // Check if module is in cache
  10. /******/ if(installedModules[moduleId]) {
  11. /******/ return installedModules[moduleId].exports;
  12. /******/ }
  13. /******/ // Create a new module (and put it into the cache)
  14. /******/ var module = installedModules[moduleId] = {
  15. /******/ i: moduleId,
  16. /******/ l: false,
  17. /******/ exports: {}
  18. /******/ };
  19. /******/
  20. /******/ // Execute the module function
  21. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  22. /******/
  23. /******/ // Flag the module as loaded
  24. /******/ module.l = true;
  25. /******/
  26. /******/ // Return the exports of the module
  27. /******/ return module.exports;
  28. /******/ }
  29. /******/
  30. /******/
  31. /******/ // expose the modules object (__webpack_modules__)
  32. /******/ __webpack_require__.m = modules;
  33. /******/
  34. /******/ // expose the module cache
  35. /******/ __webpack_require__.c = installedModules;
  36. /******/
  37. /******/ // define getter function for harmony exports
  38. /******/ __webpack_require__.d = function(exports, name, getter) {
  39. /******/ if(!__webpack_require__.o(exports, name)) {
  40. /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
  41. /******/ }
  42. /******/ };
  43. /******/
  44. /******/ // define __esModule on exports
  45. /******/ __webpack_require__.r = function(exports) {
  46. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  47. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  48. /******/ }
  49. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  50. /******/ };
  51. /******/
  52. /******/ // create a fake namespace object
  53. /******/ // mode & 1: value is a module id, require it
  54. /******/ // mode & 2: merge all properties of value into the ns
  55. /******/ // mode & 4: return value when already ns object
  56. /******/ // mode & 8|1: behave like require
  57. /******/ __webpack_require__.t = function(value, mode) {
  58. /******/ if(mode & 1) value = __webpack_require__(value);
  59. /******/ if(mode & 8) return value;
  60. /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  61. /******/ var ns = Object.create(null);
  62. /******/ __webpack_require__.r(ns);
  63. /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  64. /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  65. /******/ return ns;
  66. /******/ };
  67. /******/
  68. /******/ // getDefaultExport function for compatibility with non-harmony modules
  69. /******/ __webpack_require__.n = function(module) {
  70. /******/ var getter = module && module.__esModule ?
  71. /******/ function getDefault() { return module['default']; } :
  72. /******/ function getModuleExports() { return module; };
  73. /******/ __webpack_require__.d(getter, 'a', getter);
  74. /******/ return getter;
  75. /******/ };
  76. /******/
  77. /******/ // Object.prototype.hasOwnProperty.call
  78. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  79. /******/
  80. /******/ // __webpack_public_path__
  81. /******/ __webpack_require__.p = "/dist/";
  82. /******/
  83. /******/
  84. /******/ // Load entry module and return exports
  85. /******/ return __webpack_require__(__webpack_require__.s = 530);
  86. /******/ })
  87. /************************************************************************/
  88. /******/ ({
  89. /***/ 10:
  90. /***/ (function(module, exports) {
  91. module.exports = require("tis-ui/lib/utils/util");
  92. /***/ }),
  93. /***/ 111:
  94. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  95. "use strict";
  96. // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time.vue?vue&type=template&id=3d939089&
  97. var render = function() {
  98. var _vm = this
  99. var _h = _vm.$createElement
  100. var _c = _vm._self._c || _h
  101. return _c(
  102. "transition",
  103. {
  104. attrs: { name: "el-zoom-in-top" },
  105. on: {
  106. "after-leave": function($event) {
  107. _vm.$emit("dodestroy")
  108. }
  109. }
  110. },
  111. [
  112. _c(
  113. "div",
  114. {
  115. directives: [
  116. {
  117. name: "show",
  118. rawName: "v-show",
  119. value: _vm.visible,
  120. expression: "visible"
  121. }
  122. ],
  123. staticClass: "el-time-panel el-popper",
  124. class: _vm.popperClass
  125. },
  126. [
  127. _c(
  128. "div",
  129. {
  130. staticClass: "el-time-panel__content",
  131. class: { "has-seconds": _vm.showSeconds }
  132. },
  133. [
  134. _c("time-spinner", {
  135. ref: "spinner",
  136. attrs: {
  137. "arrow-control": _vm.useArrow,
  138. "show-seconds": _vm.showSeconds,
  139. "am-pm-mode": _vm.amPmMode,
  140. date: _vm.date
  141. },
  142. on: {
  143. change: _vm.handleChange,
  144. "select-range": _vm.setSelectionRange
  145. }
  146. })
  147. ],
  148. 1
  149. ),
  150. _c("div", { staticClass: "el-time-panel__footer" }, [
  151. _c(
  152. "button",
  153. {
  154. staticClass: "el-time-panel__btn cancel",
  155. attrs: { type: "button" },
  156. on: { click: _vm.handleCancel }
  157. },
  158. [_vm._v(_vm._s(_vm.t("el.datepicker.cancel")))]
  159. ),
  160. _c(
  161. "button",
  162. {
  163. staticClass: "el-time-panel__btn",
  164. class: { confirm: !_vm.disabled },
  165. attrs: { type: "button" },
  166. on: {
  167. click: function($event) {
  168. _vm.handleConfirm()
  169. }
  170. }
  171. },
  172. [_vm._v(_vm._s(_vm.t("el.datepicker.confirm")))]
  173. )
  174. ])
  175. ]
  176. )
  177. ]
  178. )
  179. }
  180. var staticRenderFns = []
  181. render._withStripped = true
  182. // CONCATENATED MODULE: ./packages/date-picker/src/panel/time.vue?vue&type=template&id=3d939089&
  183. // EXTERNAL MODULE: external "tis-ui/lib/utils/date-util"
  184. var date_util_ = __webpack_require__(8);
  185. // EXTERNAL MODULE: external "tis-ui/lib/mixins/locale"
  186. var locale_ = __webpack_require__(38);
  187. var locale_default = /*#__PURE__*/__webpack_require__.n(locale_);
  188. // EXTERNAL MODULE: ./packages/date-picker/src/basic/time-spinner.vue + 4 modules
  189. var time_spinner = __webpack_require__(122);
  190. // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time.vue?vue&type=script&lang=js&
  191. //
  192. //
  193. //
  194. //
  195. //
  196. //
  197. //
  198. //
  199. //
  200. //
  201. //
  202. //
  203. //
  204. //
  205. //
  206. //
  207. //
  208. //
  209. //
  210. //
  211. //
  212. //
  213. //
  214. //
  215. //
  216. //
  217. //
  218. //
  219. //
  220. //
  221. //
  222. //
  223. /* harmony default export */ var timevue_type_script_lang_js_ = ({
  224. mixins: [locale_default.a],
  225. components: {
  226. TimeSpinner: time_spinner["a" /* default */]
  227. },
  228. props: {
  229. visible: Boolean,
  230. timeArrowControl: Boolean
  231. },
  232. watch: {
  233. visible: function visible(val) {
  234. var _this = this;
  235. if (val) {
  236. this.oldValue = this.value;
  237. this.$nextTick(function () {
  238. return _this.$refs.spinner.emitSelectRange('hours');
  239. });
  240. } else {
  241. this.needInitAdjust = true;
  242. }
  243. },
  244. value: function value(newVal) {
  245. var _this2 = this;
  246. var date = void 0;
  247. if (newVal instanceof Date) {
  248. date = Object(date_util_["limitTimeRange"])(newVal, this.selectableRange, this.format);
  249. } else if (!newVal) {
  250. date = this.defaultValue ? new Date(this.defaultValue) : new Date();
  251. }
  252. this.date = date;
  253. if (this.visible && this.needInitAdjust) {
  254. this.$nextTick(function (_) {
  255. return _this2.adjustSpinners();
  256. });
  257. this.needInitAdjust = false;
  258. }
  259. },
  260. selectableRange: function selectableRange(val) {
  261. this.$refs.spinner.selectableRange = val;
  262. },
  263. defaultValue: function defaultValue(val) {
  264. if (!Object(date_util_["isDate"])(this.value)) {
  265. this.date = val ? new Date(val) : new Date();
  266. }
  267. }
  268. },
  269. data: function data() {
  270. return {
  271. popperClass: '',
  272. format: 'HH:mm:ss',
  273. value: '',
  274. defaultValue: null,
  275. date: new Date(),
  276. oldValue: new Date(),
  277. selectableRange: [],
  278. selectionRange: [0, 2],
  279. disabled: false,
  280. arrowControl: false,
  281. needInitAdjust: true
  282. };
  283. },
  284. computed: {
  285. showSeconds: function showSeconds() {
  286. return (this.format || '').indexOf('ss') !== -1;
  287. },
  288. useArrow: function useArrow() {
  289. return this.arrowControl || this.timeArrowControl || false;
  290. },
  291. amPmMode: function amPmMode() {
  292. if ((this.format || '').indexOf('A') !== -1) return 'A';
  293. if ((this.format || '').indexOf('a') !== -1) return 'a';
  294. return '';
  295. }
  296. },
  297. methods: {
  298. handleCancel: function handleCancel() {
  299. this.$emit('pick', this.oldValue, false);
  300. },
  301. handleChange: function handleChange(date) {
  302. // this.visible avoids edge cases, when use scrolls during panel closing animation
  303. if (this.visible) {
  304. this.date = Object(date_util_["clearMilliseconds"])(date);
  305. // if date is out of range, do not emit
  306. if (this.isValidValue(this.date)) {
  307. this.$emit('pick', this.date, true);
  308. }
  309. }
  310. },
  311. setSelectionRange: function setSelectionRange(start, end) {
  312. this.$emit('select-range', start, end);
  313. this.selectionRange = [start, end];
  314. },
  315. handleConfirm: function handleConfirm() {
  316. var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
  317. var first = arguments[1];
  318. if (first) return;
  319. var date = Object(date_util_["clearMilliseconds"])(Object(date_util_["limitTimeRange"])(this.date, this.selectableRange, this.format));
  320. this.$emit('pick', date, visible, first);
  321. },
  322. handleKeydown: function handleKeydown(event) {
  323. var keyCode = event.keyCode;
  324. var mapping = { 38: -1, 40: 1, 37: -1, 39: 1 };
  325. // Left or Right
  326. if (keyCode === 37 || keyCode === 39) {
  327. var step = mapping[keyCode];
  328. this.changeSelectionRange(step);
  329. event.preventDefault();
  330. return;
  331. }
  332. // Up or Down
  333. if (keyCode === 38 || keyCode === 40) {
  334. var _step = mapping[keyCode];
  335. this.$refs.spinner.scrollDown(_step);
  336. event.preventDefault();
  337. return;
  338. }
  339. },
  340. isValidValue: function isValidValue(date) {
  341. return Object(date_util_["timeWithinRange"])(date, this.selectableRange, this.format);
  342. },
  343. adjustSpinners: function adjustSpinners() {
  344. return this.$refs.spinner.adjustSpinners();
  345. },
  346. changeSelectionRange: function changeSelectionRange(step) {
  347. var list = [0, 3].concat(this.showSeconds ? [6] : []);
  348. var mapping = ['hours', 'minutes'].concat(this.showSeconds ? ['seconds'] : []);
  349. var index = list.indexOf(this.selectionRange[0]);
  350. var next = (index + step + list.length) % list.length;
  351. this.$refs.spinner.emitSelectRange(mapping[next]);
  352. }
  353. },
  354. mounted: function mounted() {
  355. var _this3 = this;
  356. this.$nextTick(function () {
  357. return _this3.handleConfirm(true, true);
  358. });
  359. this.$emit('mounted');
  360. }
  361. });
  362. // CONCATENATED MODULE: ./packages/date-picker/src/panel/time.vue?vue&type=script&lang=js&
  363. /* harmony default export */ var panel_timevue_type_script_lang_js_ = (timevue_type_script_lang_js_);
  364. // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
  365. var componentNormalizer = __webpack_require__(2);
  366. // CONCATENATED MODULE: ./packages/date-picker/src/panel/time.vue
  367. /* normalize component */
  368. var component = Object(componentNormalizer["a" /* default */])(
  369. panel_timevue_type_script_lang_js_,
  370. render,
  371. staticRenderFns,
  372. false,
  373. null,
  374. null,
  375. null
  376. )
  377. /* hot reload */
  378. if (false) { var api; }
  379. component.options.__file = "packages/date-picker/src/panel/time.vue"
  380. /* harmony default export */ var time = __webpack_exports__["a"] = (component.exports);
  381. /***/ }),
  382. /***/ 113:
  383. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  384. "use strict";
  385. // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/picker.vue?vue&type=template&id=79ae069f&
  386. var render = function() {
  387. var _vm = this
  388. var _h = _vm.$createElement
  389. var _c = _vm._self._c || _h
  390. return !_vm.ranged
  391. ? _c(
  392. "tis-input",
  393. _vm._b(
  394. {
  395. directives: [
  396. {
  397. name: "clickoutside",
  398. rawName: "v-clickoutside",
  399. value: _vm.handleClose,
  400. expression: "handleClose"
  401. }
  402. ],
  403. ref: "reference",
  404. staticClass: "el-date-editor",
  405. class: "el-date-editor--" + _vm.type,
  406. attrs: {
  407. readonly:
  408. !_vm.editable ||
  409. _vm.readonly ||
  410. _vm.type === "dates" ||
  411. _vm.type === "week",
  412. disabled: _vm.pickerDisabled,
  413. size: _vm.pickerSize,
  414. name: _vm.name,
  415. placeholder: _vm.placeholder,
  416. value: _vm.displayValue,
  417. validateEvent: false
  418. },
  419. on: {
  420. focus: _vm.handleFocus,
  421. input: function(value) {
  422. return (_vm.userInput = value)
  423. },
  424. change: _vm.handleChange
  425. },
  426. nativeOn: {
  427. keydown: function($event) {
  428. return _vm.handleKeydown($event)
  429. },
  430. mouseenter: function($event) {
  431. return _vm.handleMouseEnter($event)
  432. },
  433. mouseleave: function($event) {
  434. _vm.showClose = false
  435. }
  436. }
  437. },
  438. "tis-input",
  439. _vm.firstInputId,
  440. false
  441. ),
  442. [
  443. _c("i", {
  444. staticClass: "el-input__icon",
  445. class: _vm.triggerClass,
  446. attrs: { slot: "prefix" },
  447. on: { click: _vm.handleFocus },
  448. slot: "prefix"
  449. }),
  450. _vm.haveTrigger
  451. ? _c("i", {
  452. staticClass: "el-input__icon",
  453. class: [_vm.showClose ? "" + _vm.clearIcon : ""],
  454. attrs: { slot: "suffix" },
  455. on: { click: _vm.handleClickIcon },
  456. slot: "suffix"
  457. })
  458. : _vm._e()
  459. ]
  460. )
  461. : _c(
  462. "div",
  463. {
  464. directives: [
  465. {
  466. name: "clickoutside",
  467. rawName: "v-clickoutside",
  468. value: _vm.handleClose,
  469. expression: "handleClose"
  470. }
  471. ],
  472. ref: "reference",
  473. staticClass: "el-date-editor el-range-editor el-input__inner",
  474. class: [
  475. "el-date-editor--" + _vm.type,
  476. _vm.pickerSize ? "el-range-editor--" + _vm.pickerSize : "",
  477. _vm.pickerDisabled ? "is-disabled" : "",
  478. _vm.pickerVisible ? "is-active" : ""
  479. ],
  480. on: {
  481. click: _vm.handleRangeClick,
  482. mouseenter: _vm.handleMouseEnter,
  483. mouseleave: function($event) {
  484. _vm.showClose = false
  485. },
  486. keydown: _vm.handleKeydown
  487. }
  488. },
  489. [
  490. _c("i", {
  491. class: ["el-input__icon", "el-range__icon", _vm.triggerClass]
  492. }),
  493. _c(
  494. "input",
  495. _vm._b(
  496. {
  497. staticClass: "el-range-input",
  498. attrs: {
  499. autocomplete: "off",
  500. placeholder: _vm.startPlaceholder,
  501. disabled: _vm.pickerDisabled,
  502. readonly: !_vm.editable || _vm.readonly,
  503. name: _vm.name && _vm.name[0]
  504. },
  505. domProps: { value: _vm.displayValue && _vm.displayValue[0] },
  506. on: {
  507. input: _vm.handleStartInput,
  508. change: _vm.handleStartChange,
  509. focus: _vm.handleFocus
  510. }
  511. },
  512. "input",
  513. _vm.firstInputId,
  514. false
  515. )
  516. ),
  517. _vm._t("range-separator", [
  518. _c("span", { staticClass: "el-range-separator" }, [
  519. _vm._v(_vm._s(_vm.rangeSeparator))
  520. ])
  521. ]),
  522. _c(
  523. "input",
  524. _vm._b(
  525. {
  526. staticClass: "el-range-input",
  527. attrs: {
  528. autocomplete: "off",
  529. placeholder: _vm.endPlaceholder,
  530. disabled: _vm.pickerDisabled,
  531. readonly: !_vm.editable || _vm.readonly,
  532. name: _vm.name && _vm.name[1]
  533. },
  534. domProps: { value: _vm.displayValue && _vm.displayValue[1] },
  535. on: {
  536. input: _vm.handleEndInput,
  537. change: _vm.handleEndChange,
  538. focus: _vm.handleFocus
  539. }
  540. },
  541. "input",
  542. _vm.secondInputId,
  543. false
  544. )
  545. ),
  546. _vm.haveTrigger
  547. ? _c("i", {
  548. staticClass: "el-input__icon el-range__close-icon",
  549. class: [_vm.showClose ? "" + _vm.clearIcon : ""],
  550. on: { click: _vm.handleClickIcon }
  551. })
  552. : _vm._e()
  553. ],
  554. 2
  555. )
  556. }
  557. var staticRenderFns = []
  558. render._withStripped = true
  559. // CONCATENATED MODULE: ./packages/date-picker/src/picker.vue?vue&type=template&id=79ae069f&
  560. // EXTERNAL MODULE: external "vue"
  561. var external_vue_ = __webpack_require__(4);
  562. var external_vue_default = /*#__PURE__*/__webpack_require__.n(external_vue_);
  563. // EXTERNAL MODULE: external "tis-ui/lib/utils/clickoutside"
  564. var clickoutside_ = __webpack_require__(61);
  565. var clickoutside_default = /*#__PURE__*/__webpack_require__.n(clickoutside_);
  566. // EXTERNAL MODULE: external "tis-ui/lib/utils/date-util"
  567. var date_util_ = __webpack_require__(8);
  568. // EXTERNAL MODULE: external "tis-ui/lib/utils/vue-popper"
  569. var vue_popper_ = __webpack_require__(34);
  570. var vue_popper_default = /*#__PURE__*/__webpack_require__.n(vue_popper_);
  571. // EXTERNAL MODULE: external "tis-ui/lib/mixins/emitter"
  572. var emitter_ = __webpack_require__(13);
  573. var emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_);
  574. // EXTERNAL MODULE: ./packages/input/index.js + 6 modules
  575. var input = __webpack_require__(52);
  576. // EXTERNAL MODULE: external "tis-ui/lib/utils/merge"
  577. var merge_ = __webpack_require__(33);
  578. var merge_default = /*#__PURE__*/__webpack_require__.n(merge_);
  579. // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/picker.vue?vue&type=script&lang=js&
  580. //
  581. //
  582. //
  583. //
  584. //
  585. //
  586. //
  587. //
  588. //
  589. //
  590. //
  591. //
  592. //
  593. //
  594. //
  595. //
  596. //
  597. //
  598. //
  599. //
  600. //
  601. //
  602. //
  603. //
  604. //
  605. //
  606. //
  607. //
  608. //
  609. //
  610. //
  611. //
  612. //
  613. //
  614. //
  615. //
  616. //
  617. //
  618. //
  619. //
  620. //
  621. //
  622. //
  623. //
  624. //
  625. //
  626. //
  627. //
  628. //
  629. //
  630. //
  631. //
  632. //
  633. //
  634. //
  635. //
  636. //
  637. //
  638. //
  639. //
  640. //
  641. //
  642. //
  643. //
  644. //
  645. //
  646. //
  647. //
  648. //
  649. //
  650. //
  651. //
  652. //
  653. //
  654. //
  655. //
  656. //
  657. //
  658. //
  659. //
  660. //
  661. //
  662. //
  663. //
  664. //
  665. var NewPopper = {
  666. props: {
  667. appendToBody: vue_popper_default.a.props.appendToBody,
  668. offset: vue_popper_default.a.props.offset,
  669. boundariesPadding: vue_popper_default.a.props.boundariesPadding,
  670. arrowOffset: vue_popper_default.a.props.arrowOffset
  671. },
  672. methods: vue_popper_default.a.methods,
  673. data: function data() {
  674. return merge_default()({ visibleArrow: true }, vue_popper_default.a.data);
  675. },
  676. beforeDestroy: vue_popper_default.a.beforeDestroy
  677. };
  678. var DEFAULT_FORMATS = {
  679. date: 'yyyy-MM-dd',
  680. month: 'yyyy-MM',
  681. datetime: 'yyyy-MM-dd HH:mm:ss',
  682. time: 'HH:mm:ss',
  683. week: 'yyyywWW',
  684. timerange: 'HH:mm:ss',
  685. daterange: 'yyyy-MM-dd',
  686. monthrange: 'yyyy-MM',
  687. datetimerange: 'yyyy-MM-dd HH:mm:ss',
  688. year: 'yyyy'
  689. };
  690. var HAVE_TRIGGER_TYPES = ['date', 'datetime', 'time', 'time-select', 'week', 'month', 'year', 'daterange', 'monthrange', 'timerange', 'datetimerange', 'dates'];
  691. var pickervue_type_script_lang_js_DATE_FORMATTER = function DATE_FORMATTER(value, format) {
  692. if (format === 'timestamp') return value.getTime();
  693. return Object(date_util_["formatDate"])(value, format);
  694. };
  695. var pickervue_type_script_lang_js_DATE_PARSER = function DATE_PARSER(text, format) {
  696. if (format === 'timestamp') return new Date(Number(text));
  697. return Object(date_util_["parseDate"])(text, format);
  698. };
  699. var RANGE_FORMATTER = function RANGE_FORMATTER(value, format) {
  700. if (Array.isArray(value) && value.length === 2) {
  701. var start = value[0];
  702. var end = value[1];
  703. if (start && end) {
  704. return [pickervue_type_script_lang_js_DATE_FORMATTER(start, format), pickervue_type_script_lang_js_DATE_FORMATTER(end, format)];
  705. }
  706. }
  707. return '';
  708. };
  709. var RANGE_PARSER = function RANGE_PARSER(array, format, separator) {
  710. if (!Array.isArray(array)) {
  711. array = array.split(separator);
  712. }
  713. if (array.length === 2) {
  714. var range1 = array[0];
  715. var range2 = array[1];
  716. return [pickervue_type_script_lang_js_DATE_PARSER(range1, format), pickervue_type_script_lang_js_DATE_PARSER(range2, format)];
  717. }
  718. return [];
  719. };
  720. var TYPE_VALUE_RESOLVER_MAP = {
  721. default: {
  722. formatter: function formatter(value) {
  723. if (!value) return '';
  724. return '' + value;
  725. },
  726. parser: function parser(text) {
  727. if (text === undefined || text === '') return null;
  728. return text;
  729. }
  730. },
  731. week: {
  732. formatter: function formatter(value, format) {
  733. var week = Object(date_util_["getWeekNumber"])(value);
  734. var month = value.getMonth();
  735. var trueDate = new Date(value);
  736. if (week === 1 && month === 11) {
  737. trueDate.setHours(0, 0, 0, 0);
  738. trueDate.setDate(trueDate.getDate() + 3 - (trueDate.getDay() + 6) % 7);
  739. }
  740. var date = Object(date_util_["formatDate"])(trueDate, format);
  741. date = /WW/.test(date) ? date.replace(/WW/, week < 10 ? '0' + week : week) : date.replace(/W/, week);
  742. return date;
  743. },
  744. parser: function parser(text, format) {
  745. // parse as if a normal date
  746. return TYPE_VALUE_RESOLVER_MAP.date.parser(text, format);
  747. }
  748. },
  749. date: {
  750. formatter: pickervue_type_script_lang_js_DATE_FORMATTER,
  751. parser: pickervue_type_script_lang_js_DATE_PARSER
  752. },
  753. datetime: {
  754. formatter: pickervue_type_script_lang_js_DATE_FORMATTER,
  755. parser: pickervue_type_script_lang_js_DATE_PARSER
  756. },
  757. daterange: {
  758. formatter: RANGE_FORMATTER,
  759. parser: RANGE_PARSER
  760. },
  761. monthrange: {
  762. formatter: RANGE_FORMATTER,
  763. parser: RANGE_PARSER
  764. },
  765. datetimerange: {
  766. formatter: RANGE_FORMATTER,
  767. parser: RANGE_PARSER
  768. },
  769. timerange: {
  770. formatter: RANGE_FORMATTER,
  771. parser: RANGE_PARSER
  772. },
  773. time: {
  774. formatter: pickervue_type_script_lang_js_DATE_FORMATTER,
  775. parser: pickervue_type_script_lang_js_DATE_PARSER
  776. },
  777. month: {
  778. formatter: pickervue_type_script_lang_js_DATE_FORMATTER,
  779. parser: pickervue_type_script_lang_js_DATE_PARSER
  780. },
  781. year: {
  782. formatter: pickervue_type_script_lang_js_DATE_FORMATTER,
  783. parser: pickervue_type_script_lang_js_DATE_PARSER
  784. },
  785. number: {
  786. formatter: function formatter(value) {
  787. if (!value) return '';
  788. return '' + value;
  789. },
  790. parser: function parser(text) {
  791. var result = Number(text);
  792. if (!isNaN(text)) {
  793. return result;
  794. } else {
  795. return null;
  796. }
  797. }
  798. },
  799. dates: {
  800. formatter: function formatter(value, format) {
  801. return value.map(function (date) {
  802. return pickervue_type_script_lang_js_DATE_FORMATTER(date, format);
  803. });
  804. },
  805. parser: function parser(value, format) {
  806. return (typeof value === 'string' ? value.split(', ') : value).map(function (date) {
  807. return date instanceof Date ? date : pickervue_type_script_lang_js_DATE_PARSER(date, format);
  808. });
  809. }
  810. }
  811. };
  812. var PLACEMENT_MAP = {
  813. left: 'bottom-start',
  814. center: 'bottom',
  815. right: 'bottom-end'
  816. };
  817. var parseAsFormatAndType = function parseAsFormatAndType(value, customFormat, type) {
  818. var rangeSeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '-';
  819. if (!value) return null;
  820. var parser = (TYPE_VALUE_RESOLVER_MAP[type] || TYPE_VALUE_RESOLVER_MAP['default']).parser;
  821. var format = customFormat || DEFAULT_FORMATS[type];
  822. return parser(value, format, rangeSeparator);
  823. };
  824. var formatAsFormatAndType = function formatAsFormatAndType(value, customFormat, type) {
  825. if (!value) return null;
  826. var formatter = (TYPE_VALUE_RESOLVER_MAP[type] || TYPE_VALUE_RESOLVER_MAP['default']).formatter;
  827. var format = customFormat || DEFAULT_FORMATS[type];
  828. return formatter(value, format);
  829. };
  830. /*
  831. * Considers:
  832. * 1. Date object
  833. * 2. date string
  834. * 3. array of 1 or 2
  835. */
  836. var valueEquals = function valueEquals(a, b) {
  837. // considers Date object and string
  838. var dateEquals = function dateEquals(a, b) {
  839. var aIsDate = a instanceof Date;
  840. var bIsDate = b instanceof Date;
  841. if (aIsDate && bIsDate) {
  842. return a.getTime() === b.getTime();
  843. }
  844. if (!aIsDate && !bIsDate) {
  845. return a === b;
  846. }
  847. return false;
  848. };
  849. var aIsArray = a instanceof Array;
  850. var bIsArray = b instanceof Array;
  851. if (aIsArray && bIsArray) {
  852. if (a.length !== b.length) {
  853. return false;
  854. }
  855. return a.every(function (item, index) {
  856. return dateEquals(item, b[index]);
  857. });
  858. }
  859. if (!aIsArray && !bIsArray) {
  860. return dateEquals(a, b);
  861. }
  862. return false;
  863. };
  864. var isString = function isString(val) {
  865. return typeof val === 'string' || val instanceof String;
  866. };
  867. var validator = function validator(val) {
  868. // either: String, Array of String, null / undefined
  869. return val === null || val === undefined || isString(val) || Array.isArray(val) && val.length === 2 && val.every(isString);
  870. };
  871. /* harmony default export */ var pickervue_type_script_lang_js_ = ({
  872. mixins: [emitter_default.a, NewPopper],
  873. inject: {
  874. elForm: {
  875. default: ''
  876. },
  877. elFormItem: {
  878. default: ''
  879. }
  880. },
  881. props: {
  882. size: String,
  883. format: String,
  884. valueFormat: String,
  885. readonly: Boolean,
  886. placeholder: String,
  887. startPlaceholder: String,
  888. endPlaceholder: String,
  889. prefixIcon: String,
  890. clearIcon: {
  891. type: String,
  892. default: 'el-icon-circle-close'
  893. },
  894. name: {
  895. default: '',
  896. validator: validator
  897. },
  898. disabled: Boolean,
  899. clearable: {
  900. type: Boolean,
  901. default: true
  902. },
  903. id: {
  904. default: '',
  905. validator: validator
  906. },
  907. popperClass: String,
  908. editable: {
  909. type: Boolean,
  910. default: true
  911. },
  912. align: {
  913. type: String,
  914. default: 'left'
  915. },
  916. value: {},
  917. defaultValue: {},
  918. defaultTime: {},
  919. rangeSeparator: {
  920. default: '-'
  921. },
  922. pickerOptions: {},
  923. unlinkPanels: Boolean,
  924. validateEvent: {
  925. type: Boolean,
  926. default: true
  927. }
  928. },
  929. components: { ElInput: input["default"] },
  930. directives: { Clickoutside: clickoutside_default.a },
  931. data: function data() {
  932. return {
  933. pickerVisible: false,
  934. showClose: false,
  935. userInput: null,
  936. valueOnOpen: null, // value when picker opens, used to determine whether to emit change
  937. unwatchPickerOptions: null
  938. };
  939. },
  940. watch: {
  941. pickerVisible: function pickerVisible(val) {
  942. if (this.readonly || this.pickerDisabled) return;
  943. if (val) {
  944. this.showPicker();
  945. this.valueOnOpen = Array.isArray(this.value) ? [].concat(this.value) : this.value;
  946. } else {
  947. this.hidePicker();
  948. this.emitChange(this.value);
  949. this.userInput = null;
  950. if (this.validateEvent) {
  951. this.dispatch('ElFormItem', 'el.form.blur');
  952. }
  953. this.$emit('blur', this);
  954. this.blur();
  955. }
  956. },
  957. parsedValue: {
  958. immediate: true,
  959. handler: function handler(val) {
  960. if (this.picker) {
  961. this.picker.value = val;
  962. }
  963. }
  964. },
  965. defaultValue: function defaultValue(val) {
  966. // NOTE: should eventually move to jsx style picker + panel ?
  967. if (this.picker) {
  968. this.picker.defaultValue = val;
  969. }
  970. },
  971. value: function value(val, oldVal) {
  972. if (!valueEquals(val, oldVal) && !this.pickerVisible && this.validateEvent) {
  973. this.dispatch('ElFormItem', 'el.form.change', val);
  974. }
  975. }
  976. },
  977. computed: {
  978. ranged: function ranged() {
  979. return this.type.indexOf('range') > -1;
  980. },
  981. reference: function reference() {
  982. var reference = this.$refs.reference;
  983. return reference.$el || reference;
  984. },
  985. refInput: function refInput() {
  986. if (this.reference) {
  987. return [].slice.call(this.reference.querySelectorAll('input'));
  988. }
  989. return [];
  990. },
  991. valueIsEmpty: function valueIsEmpty() {
  992. var val = this.value;
  993. if (Array.isArray(val)) {
  994. for (var i = 0, len = val.length; i < len; i++) {
  995. if (val[i]) {
  996. return false;
  997. }
  998. }
  999. } else {
  1000. if (val) {
  1001. return false;
  1002. }
  1003. }
  1004. return true;
  1005. },
  1006. triggerClass: function triggerClass() {
  1007. return this.prefixIcon || (this.type.indexOf('time') !== -1 ? 'el-icon-time' : 'el-icon-date');
  1008. },
  1009. selectionMode: function selectionMode() {
  1010. if (this.type === 'week') {
  1011. return 'week';
  1012. } else if (this.type === 'month') {
  1013. return 'month';
  1014. } else if (this.type === 'year') {
  1015. return 'year';
  1016. } else if (this.type === 'dates') {
  1017. return 'dates';
  1018. }
  1019. return 'day';
  1020. },
  1021. haveTrigger: function haveTrigger() {
  1022. if (typeof this.showTrigger !== 'undefined') {
  1023. return this.showTrigger;
  1024. }
  1025. return HAVE_TRIGGER_TYPES.indexOf(this.type) !== -1;
  1026. },
  1027. displayValue: function displayValue() {
  1028. var formattedValue = formatAsFormatAndType(this.parsedValue, this.format, this.type, this.rangeSeparator);
  1029. if (Array.isArray(this.userInput)) {
  1030. return [this.userInput[0] || formattedValue && formattedValue[0] || '', this.userInput[1] || formattedValue && formattedValue[1] || ''];
  1031. } else if (this.userInput !== null) {
  1032. return this.userInput;
  1033. } else if (formattedValue) {
  1034. return this.type === 'dates' ? formattedValue.join(', ') : formattedValue;
  1035. } else {
  1036. return '';
  1037. }
  1038. },
  1039. parsedValue: function parsedValue() {
  1040. if (!this.value) return this.value; // component value is not set
  1041. if (this.type === 'time-select') return this.value; // time-select does not require parsing, this might change in next major version
  1042. var valueIsDateObject = Object(date_util_["isDateObject"])(this.value) || Array.isArray(this.value) && this.value.every(date_util_["isDateObject"]);
  1043. if (valueIsDateObject) {
  1044. return this.value;
  1045. }
  1046. if (this.valueFormat) {
  1047. return parseAsFormatAndType(this.value, this.valueFormat, this.type, this.rangeSeparator) || this.value;
  1048. }
  1049. // NOTE: deal with common but incorrect usage, should remove in next major version
  1050. // user might provide string / timestamp without value-format, coerce them into date (or array of date)
  1051. return Array.isArray(this.value) ? this.value.map(function (val) {
  1052. return new Date(val);
  1053. }) : new Date(this.value);
  1054. },
  1055. _elFormItemSize: function _elFormItemSize() {
  1056. return (this.elFormItem || {}).elFormItemSize;
  1057. },
  1058. pickerSize: function pickerSize() {
  1059. return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;
  1060. },
  1061. pickerDisabled: function pickerDisabled() {
  1062. return this.disabled || (this.elForm || {}).disabled;
  1063. },
  1064. firstInputId: function firstInputId() {
  1065. var obj = {};
  1066. var id = void 0;
  1067. if (this.ranged) {
  1068. id = this.id && this.id[0];
  1069. } else {
  1070. id = this.id;
  1071. }
  1072. if (id) obj.id = id;
  1073. return obj;
  1074. },
  1075. secondInputId: function secondInputId() {
  1076. var obj = {};
  1077. var id = void 0;
  1078. if (this.ranged) {
  1079. id = this.id && this.id[1];
  1080. }
  1081. if (id) obj.id = id;
  1082. return obj;
  1083. }
  1084. },
  1085. created: function created() {
  1086. // vue-popper
  1087. this.popperOptions = {
  1088. boundariesPadding: 0,
  1089. gpuAcceleration: false
  1090. };
  1091. this.placement = PLACEMENT_MAP[this.align] || PLACEMENT_MAP.left;
  1092. this.$on('fieldReset', this.handleFieldReset);
  1093. },
  1094. methods: {
  1095. focus: function focus() {
  1096. if (!this.ranged) {
  1097. this.$refs.reference.focus();
  1098. } else {
  1099. this.handleFocus();
  1100. }
  1101. },
  1102. blur: function blur() {
  1103. this.refInput.forEach(function (input) {
  1104. return input.blur();
  1105. });
  1106. },
  1107. // {parse, formatTo} Value deals maps component value with internal Date
  1108. parseValue: function parseValue(value) {
  1109. var isParsed = Object(date_util_["isDateObject"])(value) || Array.isArray(value) && value.every(date_util_["isDateObject"]);
  1110. if (this.valueFormat && !isParsed) {
  1111. return parseAsFormatAndType(value, this.valueFormat, this.type, this.rangeSeparator) || value;
  1112. } else {
  1113. return value;
  1114. }
  1115. },
  1116. formatToValue: function formatToValue(date) {
  1117. var isFormattable = Object(date_util_["isDateObject"])(date) || Array.isArray(date) && date.every(date_util_["isDateObject"]);
  1118. if (this.valueFormat && isFormattable) {
  1119. return formatAsFormatAndType(date, this.valueFormat, this.type, this.rangeSeparator);
  1120. } else {
  1121. return date;
  1122. }
  1123. },
  1124. // {parse, formatTo} String deals with user input
  1125. parseString: function parseString(value) {
  1126. var type = Array.isArray(value) ? this.type : this.type.replace('range', '');
  1127. return parseAsFormatAndType(value, this.format, type);
  1128. },
  1129. formatToString: function formatToString(value) {
  1130. var type = Array.isArray(value) ? this.type : this.type.replace('range', '');
  1131. return formatAsFormatAndType(value, this.format, type);
  1132. },
  1133. handleMouseEnter: function handleMouseEnter() {
  1134. if (this.readonly || this.pickerDisabled) return;
  1135. if (!this.valueIsEmpty && this.clearable) {
  1136. this.showClose = true;
  1137. }
  1138. },
  1139. handleChange: function handleChange() {
  1140. if (this.userInput) {
  1141. var value = this.parseString(this.displayValue);
  1142. if (value) {
  1143. this.picker.value = value;
  1144. if (this.isValidValue(value)) {
  1145. this.emitInput(value);
  1146. this.userInput = null;
  1147. }
  1148. }
  1149. }
  1150. if (this.userInput === '') {
  1151. this.emitInput(null);
  1152. this.emitChange(null);
  1153. this.userInput = null;
  1154. }
  1155. },
  1156. handleStartInput: function handleStartInput(event) {
  1157. if (this.userInput) {
  1158. this.userInput = [event.target.value, this.userInput[1]];
  1159. } else {
  1160. this.userInput = [event.target.value, null];
  1161. }
  1162. },
  1163. handleEndInput: function handleEndInput(event) {
  1164. if (this.userInput) {
  1165. this.userInput = [this.userInput[0], event.target.value];
  1166. } else {
  1167. this.userInput = [null, event.target.value];
  1168. }
  1169. },
  1170. handleStartChange: function handleStartChange(event) {
  1171. var value = this.parseString(this.userInput && this.userInput[0]);
  1172. if (value) {
  1173. this.userInput = [this.formatToString(value), this.displayValue[1]];
  1174. var newValue = [value, this.picker.value && this.picker.value[1]];
  1175. this.picker.value = newValue;
  1176. if (this.isValidValue(newValue)) {
  1177. this.emitInput(newValue);
  1178. this.userInput = null;
  1179. }
  1180. }
  1181. },
  1182. handleEndChange: function handleEndChange(event) {
  1183. var value = this.parseString(this.userInput && this.userInput[1]);
  1184. if (value) {
  1185. this.userInput = [this.displayValue[0], this.formatToString(value)];
  1186. var newValue = [this.picker.value && this.picker.value[0], value];
  1187. this.picker.value = newValue;
  1188. if (this.isValidValue(newValue)) {
  1189. this.emitInput(newValue);
  1190. this.userInput = null;
  1191. }
  1192. }
  1193. },
  1194. handleClickIcon: function handleClickIcon(event) {
  1195. if (this.readonly || this.pickerDisabled) return;
  1196. if (this.showClose) {
  1197. this.valueOnOpen = this.value;
  1198. event.stopPropagation();
  1199. this.emitInput(null);
  1200. this.emitChange(null);
  1201. this.showClose = false;
  1202. if (this.picker && typeof this.picker.handleClear === 'function') {
  1203. this.picker.handleClear();
  1204. }
  1205. } else {
  1206. this.pickerVisible = !this.pickerVisible;
  1207. }
  1208. },
  1209. handleClose: function handleClose() {
  1210. if (!this.pickerVisible) return;
  1211. this.pickerVisible = false;
  1212. if (this.type === 'dates') {
  1213. // restore to former value
  1214. var oldValue = parseAsFormatAndType(this.valueOnOpen, this.valueFormat, this.type, this.rangeSeparator) || this.valueOnOpen;
  1215. this.emitInput(oldValue);
  1216. }
  1217. },
  1218. handleFieldReset: function handleFieldReset(initialValue) {
  1219. this.userInput = initialValue === '' ? null : initialValue;
  1220. },
  1221. handleFocus: function handleFocus() {
  1222. var type = this.type;
  1223. if (HAVE_TRIGGER_TYPES.indexOf(type) !== -1 && !this.pickerVisible) {
  1224. this.pickerVisible = true;
  1225. }
  1226. this.$emit('focus', this);
  1227. },
  1228. handleKeydown: function handleKeydown(event) {
  1229. var _this = this;
  1230. var keyCode = event.keyCode;
  1231. // ESC
  1232. if (keyCode === 27) {
  1233. this.pickerVisible = false;
  1234. event.stopPropagation();
  1235. return;
  1236. }
  1237. // Tab
  1238. if (keyCode === 9) {
  1239. if (!this.ranged) {
  1240. this.handleChange();
  1241. this.pickerVisible = this.picker.visible = false;
  1242. this.blur();
  1243. event.stopPropagation();
  1244. } else {
  1245. // user may change focus between two input
  1246. setTimeout(function () {
  1247. if (_this.refInput.indexOf(document.activeElement) === -1) {
  1248. _this.pickerVisible = false;
  1249. _this.blur();
  1250. event.stopPropagation();
  1251. }
  1252. }, 0);
  1253. }
  1254. return;
  1255. }
  1256. // Enter
  1257. if (keyCode === 13) {
  1258. if (this.userInput === '' || this.isValidValue(this.parseString(this.displayValue))) {
  1259. this.handleChange();
  1260. this.pickerVisible = this.picker.visible = false;
  1261. this.blur();
  1262. }
  1263. event.stopPropagation();
  1264. return;
  1265. }
  1266. // if user is typing, do not let picker handle key input
  1267. if (this.userInput) {
  1268. event.stopPropagation();
  1269. return;
  1270. }
  1271. // delegate other keys to panel
  1272. if (this.picker && this.picker.handleKeydown) {
  1273. this.picker.handleKeydown(event);
  1274. }
  1275. },
  1276. handleRangeClick: function handleRangeClick() {
  1277. var type = this.type;
  1278. if (HAVE_TRIGGER_TYPES.indexOf(type) !== -1 && !this.pickerVisible) {
  1279. this.pickerVisible = true;
  1280. }
  1281. this.$emit('focus', this);
  1282. },
  1283. hidePicker: function hidePicker() {
  1284. if (this.picker) {
  1285. this.picker.resetView && this.picker.resetView();
  1286. this.pickerVisible = this.picker.visible = false;
  1287. this.destroyPopper();
  1288. }
  1289. },
  1290. showPicker: function showPicker() {
  1291. var _this2 = this;
  1292. if (this.$isServer) return;
  1293. if (!this.picker) {
  1294. this.mountPicker();
  1295. }
  1296. this.pickerVisible = this.picker.visible = true;
  1297. this.updatePopper();
  1298. this.picker.value = this.parsedValue;
  1299. this.picker.resetView && this.picker.resetView();
  1300. this.$nextTick(function () {
  1301. _this2.picker.adjustSpinners && _this2.picker.adjustSpinners();
  1302. });
  1303. },
  1304. mountPicker: function mountPicker() {
  1305. var _this3 = this;
  1306. this.picker = new external_vue_default.a(this.panel).$mount();
  1307. this.picker.defaultValue = this.defaultValue;
  1308. this.picker.defaultTime = this.defaultTime;
  1309. this.picker.popperClass = this.popperClass;
  1310. this.popperElm = this.picker.$el;
  1311. this.picker.width = this.reference.getBoundingClientRect().width;
  1312. this.picker.showTime = this.type === 'datetime' || this.type === 'datetimerange';
  1313. this.picker.selectionMode = this.selectionMode;
  1314. this.picker.unlinkPanels = this.unlinkPanels;
  1315. this.picker.arrowControl = this.arrowControl || this.timeArrowControl || false;
  1316. this.$watch('format', function (format) {
  1317. _this3.picker.format = format;
  1318. });
  1319. var updateOptions = function updateOptions() {
  1320. var options = _this3.pickerOptions;
  1321. if (options && options.selectableRange) {
  1322. var ranges = options.selectableRange;
  1323. var parser = TYPE_VALUE_RESOLVER_MAP.datetimerange.parser;
  1324. var format = DEFAULT_FORMATS.timerange;
  1325. ranges = Array.isArray(ranges) ? ranges : [ranges];
  1326. _this3.picker.selectableRange = ranges.map(function (range) {
  1327. return parser(range, format, _this3.rangeSeparator);
  1328. });
  1329. }
  1330. for (var option in options) {
  1331. if (options.hasOwnProperty(option) &&
  1332. // 忽略 time-picker 的该配置项
  1333. option !== 'selectableRange') {
  1334. _this3.picker[option] = options[option];
  1335. }
  1336. }
  1337. // main format must prevail over undocumented pickerOptions.format
  1338. if (_this3.format) {
  1339. _this3.picker.format = _this3.format;
  1340. }
  1341. };
  1342. updateOptions();
  1343. this.unwatchPickerOptions = this.$watch('pickerOptions', function () {
  1344. return updateOptions();
  1345. }, { deep: true });
  1346. this.$el.appendChild(this.picker.$el);
  1347. this.picker.resetView && this.picker.resetView();
  1348. this.picker.$on('dodestroy', this.doDestroy);
  1349. this.picker.$on('pick', function () {
  1350. var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
  1351. var visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  1352. _this3.userInput = null;
  1353. _this3.pickerVisible = _this3.picker.visible = visible;
  1354. _this3.emitInput(date);
  1355. _this3.picker.resetView && _this3.picker.resetView();
  1356. });
  1357. this.picker.$on('select-range', function (start, end, pos) {
  1358. if (_this3.refInput.length === 0) return;
  1359. if (!pos || pos === 'min') {
  1360. _this3.refInput[0].setSelectionRange(start, end);
  1361. _this3.refInput[0].focus();
  1362. } else if (pos === 'max') {
  1363. _this3.refInput[1].setSelectionRange(start, end);
  1364. _this3.refInput[1].focus();
  1365. }
  1366. });
  1367. },
  1368. unmountPicker: function unmountPicker() {
  1369. if (this.picker) {
  1370. this.picker.$destroy();
  1371. this.picker.$off();
  1372. if (typeof this.unwatchPickerOptions === 'function') {
  1373. this.unwatchPickerOptions();
  1374. }
  1375. this.picker.$el.parentNode.removeChild(this.picker.$el);
  1376. }
  1377. },
  1378. emitChange: function emitChange(val) {
  1379. // determine user real change only
  1380. if (!valueEquals(val, this.valueOnOpen)) {
  1381. this.$emit('change', val);
  1382. this.valueOnOpen = val;
  1383. if (this.validateEvent) {
  1384. this.dispatch('ElFormItem', 'el.form.change', val);
  1385. }
  1386. }
  1387. },
  1388. emitInput: function emitInput(val) {
  1389. var formatted = this.formatToValue(val);
  1390. if (!valueEquals(this.value, formatted)) {
  1391. this.$emit('input', formatted);
  1392. }
  1393. },
  1394. isValidValue: function isValidValue(value) {
  1395. if (!this.picker) {
  1396. this.mountPicker();
  1397. }
  1398. if (this.picker.isValidValue) {
  1399. return value && this.picker.isValidValue(value);
  1400. } else {
  1401. return true;
  1402. }
  1403. }
  1404. }
  1405. });
  1406. // CONCATENATED MODULE: ./packages/date-picker/src/picker.vue?vue&type=script&lang=js&
  1407. /* harmony default export */ var src_pickervue_type_script_lang_js_ = (pickervue_type_script_lang_js_);
  1408. // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
  1409. var componentNormalizer = __webpack_require__(2);
  1410. // CONCATENATED MODULE: ./packages/date-picker/src/picker.vue
  1411. /* normalize component */
  1412. var component = Object(componentNormalizer["a" /* default */])(
  1413. src_pickervue_type_script_lang_js_,
  1414. render,
  1415. staticRenderFns,
  1416. false,
  1417. null,
  1418. null,
  1419. null
  1420. )
  1421. /* hot reload */
  1422. if (false) { var api; }
  1423. component.options.__file = "packages/date-picker/src/picker.vue"
  1424. /* harmony default export */ var picker = __webpack_exports__["a"] = (component.exports);
  1425. /***/ }),
  1426. /***/ 122:
  1427. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1428. "use strict";
  1429. // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/time-spinner.vue?vue&type=template&id=1facadeb&
  1430. var render = function() {
  1431. var _vm = this
  1432. var _h = _vm.$createElement
  1433. var _c = _vm._self._c || _h
  1434. return _c(
  1435. "div",
  1436. {
  1437. staticClass: "el-time-spinner",
  1438. class: { "has-seconds": _vm.showSeconds }
  1439. },
  1440. [
  1441. !_vm.arrowControl
  1442. ? [
  1443. _c(
  1444. "tis-scrollbar",
  1445. {
  1446. ref: "hours",
  1447. staticClass: "el-time-spinner__wrapper",
  1448. attrs: {
  1449. "wrap-style": "max-height: inherit;",
  1450. "view-class": "el-time-spinner__list",
  1451. noresize: "",
  1452. tag: "ul"
  1453. },
  1454. nativeOn: {
  1455. mouseenter: function($event) {
  1456. _vm.emitSelectRange("hours")
  1457. },
  1458. mousemove: function($event) {
  1459. _vm.adjustCurrentSpinner("hours")
  1460. }
  1461. }
  1462. },
  1463. _vm._l(_vm.hoursList, function(disabled, hour) {
  1464. return _c(
  1465. "li",
  1466. {
  1467. key: hour,
  1468. staticClass: "el-time-spinner__item",
  1469. class: { active: hour === _vm.hours, disabled: disabled },
  1470. on: {
  1471. click: function($event) {
  1472. _vm.handleClick("hours", {
  1473. value: hour,
  1474. disabled: disabled
  1475. })
  1476. }
  1477. }
  1478. },
  1479. [
  1480. _vm._v(
  1481. _vm._s(
  1482. ("0" + (_vm.amPmMode ? hour % 12 || 12 : hour)).slice(
  1483. -2
  1484. )
  1485. ) + _vm._s(_vm.amPm(hour))
  1486. )
  1487. ]
  1488. )
  1489. }),
  1490. 0
  1491. ),
  1492. _c(
  1493. "tis-scrollbar",
  1494. {
  1495. ref: "minutes",
  1496. staticClass: "el-time-spinner__wrapper",
  1497. attrs: {
  1498. "wrap-style": "max-height: inherit;",
  1499. "view-class": "el-time-spinner__list",
  1500. noresize: "",
  1501. tag: "ul"
  1502. },
  1503. nativeOn: {
  1504. mouseenter: function($event) {
  1505. _vm.emitSelectRange("minutes")
  1506. },
  1507. mousemove: function($event) {
  1508. _vm.adjustCurrentSpinner("minutes")
  1509. }
  1510. }
  1511. },
  1512. _vm._l(_vm.minutesList, function(enabled, key) {
  1513. return _c(
  1514. "li",
  1515. {
  1516. key: key,
  1517. staticClass: "el-time-spinner__item",
  1518. class: { active: key === _vm.minutes, disabled: !enabled },
  1519. on: {
  1520. click: function($event) {
  1521. _vm.handleClick("minutes", {
  1522. value: key,
  1523. disabled: false
  1524. })
  1525. }
  1526. }
  1527. },
  1528. [_vm._v(_vm._s(("0" + key).slice(-2)))]
  1529. )
  1530. }),
  1531. 0
  1532. ),
  1533. _c(
  1534. "tis-scrollbar",
  1535. {
  1536. directives: [
  1537. {
  1538. name: "show",
  1539. rawName: "v-show",
  1540. value: _vm.showSeconds,
  1541. expression: "showSeconds"
  1542. }
  1543. ],
  1544. ref: "seconds",
  1545. staticClass: "el-time-spinner__wrapper",
  1546. attrs: {
  1547. "wrap-style": "max-height: inherit;",
  1548. "view-class": "el-time-spinner__list",
  1549. noresize: "",
  1550. tag: "ul"
  1551. },
  1552. nativeOn: {
  1553. mouseenter: function($event) {
  1554. _vm.emitSelectRange("seconds")
  1555. },
  1556. mousemove: function($event) {
  1557. _vm.adjustCurrentSpinner("seconds")
  1558. }
  1559. }
  1560. },
  1561. _vm._l(60, function(second, key) {
  1562. return _c(
  1563. "li",
  1564. {
  1565. key: key,
  1566. staticClass: "el-time-spinner__item",
  1567. class: { active: key === _vm.seconds },
  1568. on: {
  1569. click: function($event) {
  1570. _vm.handleClick("seconds", {
  1571. value: key,
  1572. disabled: false
  1573. })
  1574. }
  1575. }
  1576. },
  1577. [_vm._v(_vm._s(("0" + key).slice(-2)))]
  1578. )
  1579. }),
  1580. 0
  1581. )
  1582. ]
  1583. : _vm._e(),
  1584. _vm.arrowControl
  1585. ? [
  1586. _c(
  1587. "div",
  1588. {
  1589. staticClass: "el-time-spinner__wrapper is-arrow",
  1590. on: {
  1591. mouseenter: function($event) {
  1592. _vm.emitSelectRange("hours")
  1593. }
  1594. }
  1595. },
  1596. [
  1597. _c("i", {
  1598. directives: [
  1599. {
  1600. name: "repeat-click",
  1601. rawName: "v-repeat-click",
  1602. value: _vm.decrease,
  1603. expression: "decrease"
  1604. }
  1605. ],
  1606. staticClass: "el-time-spinner__arrow el-icon-arrow-up"
  1607. }),
  1608. _c("i", {
  1609. directives: [
  1610. {
  1611. name: "repeat-click",
  1612. rawName: "v-repeat-click",
  1613. value: _vm.increase,
  1614. expression: "increase"
  1615. }
  1616. ],
  1617. staticClass: "el-time-spinner__arrow el-icon-arrow-down"
  1618. }),
  1619. _c(
  1620. "ul",
  1621. { ref: "hours", staticClass: "el-time-spinner__list" },
  1622. _vm._l(_vm.arrowHourList, function(hour, key) {
  1623. return _c(
  1624. "li",
  1625. {
  1626. key: key,
  1627. staticClass: "el-time-spinner__item",
  1628. class: {
  1629. active: hour === _vm.hours,
  1630. disabled: _vm.hoursList[hour]
  1631. }
  1632. },
  1633. [
  1634. _vm._v(
  1635. _vm._s(
  1636. hour === undefined
  1637. ? ""
  1638. : (
  1639. "0" + (_vm.amPmMode ? hour % 12 || 12 : hour)
  1640. ).slice(-2) + _vm.amPm(hour)
  1641. )
  1642. )
  1643. ]
  1644. )
  1645. }),
  1646. 0
  1647. )
  1648. ]
  1649. ),
  1650. _c(
  1651. "div",
  1652. {
  1653. staticClass: "el-time-spinner__wrapper is-arrow",
  1654. on: {
  1655. mouseenter: function($event) {
  1656. _vm.emitSelectRange("minutes")
  1657. }
  1658. }
  1659. },
  1660. [
  1661. _c("i", {
  1662. directives: [
  1663. {
  1664. name: "repeat-click",
  1665. rawName: "v-repeat-click",
  1666. value: _vm.decrease,
  1667. expression: "decrease"
  1668. }
  1669. ],
  1670. staticClass: "el-time-spinner__arrow el-icon-arrow-up"
  1671. }),
  1672. _c("i", {
  1673. directives: [
  1674. {
  1675. name: "repeat-click",
  1676. rawName: "v-repeat-click",
  1677. value: _vm.increase,
  1678. expression: "increase"
  1679. }
  1680. ],
  1681. staticClass: "el-time-spinner__arrow el-icon-arrow-down"
  1682. }),
  1683. _c(
  1684. "ul",
  1685. { ref: "minutes", staticClass: "el-time-spinner__list" },
  1686. _vm._l(_vm.arrowMinuteList, function(minute, key) {
  1687. return _c(
  1688. "li",
  1689. {
  1690. key: key,
  1691. staticClass: "el-time-spinner__item",
  1692. class: { active: minute === _vm.minutes }
  1693. },
  1694. [
  1695. _vm._v(
  1696. "\n " +
  1697. _vm._s(
  1698. minute === undefined
  1699. ? ""
  1700. : ("0" + minute).slice(-2)
  1701. ) +
  1702. "\n "
  1703. )
  1704. ]
  1705. )
  1706. }),
  1707. 0
  1708. )
  1709. ]
  1710. ),
  1711. _vm.showSeconds
  1712. ? _c(
  1713. "div",
  1714. {
  1715. staticClass: "el-time-spinner__wrapper is-arrow",
  1716. on: {
  1717. mouseenter: function($event) {
  1718. _vm.emitSelectRange("seconds")
  1719. }
  1720. }
  1721. },
  1722. [
  1723. _c("i", {
  1724. directives: [
  1725. {
  1726. name: "repeat-click",
  1727. rawName: "v-repeat-click",
  1728. value: _vm.decrease,
  1729. expression: "decrease"
  1730. }
  1731. ],
  1732. staticClass: "el-time-spinner__arrow el-icon-arrow-up"
  1733. }),
  1734. _c("i", {
  1735. directives: [
  1736. {
  1737. name: "repeat-click",
  1738. rawName: "v-repeat-click",
  1739. value: _vm.increase,
  1740. expression: "increase"
  1741. }
  1742. ],
  1743. staticClass: "el-time-spinner__arrow el-icon-arrow-down"
  1744. }),
  1745. _c(
  1746. "ul",
  1747. { ref: "seconds", staticClass: "el-time-spinner__list" },
  1748. _vm._l(_vm.arrowSecondList, function(second, key) {
  1749. return _c(
  1750. "li",
  1751. {
  1752. key: key,
  1753. staticClass: "el-time-spinner__item",
  1754. class: { active: second === _vm.seconds }
  1755. },
  1756. [
  1757. _vm._v(
  1758. "\n " +
  1759. _vm._s(
  1760. second === undefined
  1761. ? ""
  1762. : ("0" + second).slice(-2)
  1763. ) +
  1764. "\n "
  1765. )
  1766. ]
  1767. )
  1768. }),
  1769. 0
  1770. )
  1771. ]
  1772. )
  1773. : _vm._e()
  1774. ]
  1775. : _vm._e()
  1776. ],
  1777. 2
  1778. )
  1779. }
  1780. var staticRenderFns = []
  1781. render._withStripped = true
  1782. // CONCATENATED MODULE: ./packages/date-picker/src/basic/time-spinner.vue?vue&type=template&id=1facadeb&
  1783. // EXTERNAL MODULE: external "tis-ui/lib/utils/date-util"
  1784. var date_util_ = __webpack_require__(8);
  1785. // EXTERNAL MODULE: ./packages/scrollbar/index.js + 3 modules
  1786. var scrollbar = __webpack_require__(66);
  1787. // EXTERNAL MODULE: ./src/directives/repeat-click.js
  1788. var repeat_click = __webpack_require__(99);
  1789. // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/time-spinner.vue?vue&type=script&lang=js&
  1790. //
  1791. //
  1792. //
  1793. //
  1794. //
  1795. //
  1796. //
  1797. //
  1798. //
  1799. //
  1800. //
  1801. //
  1802. //
  1803. //
  1804. //
  1805. //
  1806. //
  1807. //
  1808. //
  1809. //
  1810. //
  1811. //
  1812. //
  1813. //
  1814. //
  1815. //
  1816. //
  1817. //
  1818. //
  1819. //
  1820. //
  1821. //
  1822. //
  1823. //
  1824. //
  1825. //
  1826. //
  1827. //
  1828. //
  1829. //
  1830. //
  1831. //
  1832. //
  1833. //
  1834. //
  1835. //
  1836. //
  1837. //
  1838. //
  1839. //
  1840. //
  1841. //
  1842. //
  1843. //
  1844. //
  1845. //
  1846. //
  1847. //
  1848. //
  1849. //
  1850. //
  1851. //
  1852. //
  1853. //
  1854. //
  1855. //
  1856. //
  1857. //
  1858. //
  1859. //
  1860. //
  1861. //
  1862. //
  1863. //
  1864. //
  1865. //
  1866. //
  1867. //
  1868. //
  1869. //
  1870. //
  1871. //
  1872. //
  1873. //
  1874. //
  1875. //
  1876. //
  1877. //
  1878. //
  1879. //
  1880. //
  1881. //
  1882. //
  1883. //
  1884. //
  1885. //
  1886. //
  1887. //
  1888. //
  1889. //
  1890. //
  1891. //
  1892. /* harmony default export */ var time_spinnervue_type_script_lang_js_ = ({
  1893. components: { ElScrollbar: scrollbar["default"] },
  1894. directives: {
  1895. repeatClick: repeat_click["a" /* default */]
  1896. },
  1897. props: {
  1898. date: {},
  1899. defaultValue: {}, // reserved for future use
  1900. showSeconds: {
  1901. type: Boolean,
  1902. default: true
  1903. },
  1904. arrowControl: Boolean,
  1905. amPmMode: {
  1906. type: String,
  1907. default: '' // 'a': am/pm; 'A': AM/PM
  1908. }
  1909. },
  1910. computed: {
  1911. hours: function hours() {
  1912. return this.date.getHours();
  1913. },
  1914. minutes: function minutes() {
  1915. return this.date.getMinutes();
  1916. },
  1917. seconds: function seconds() {
  1918. return this.date.getSeconds();
  1919. },
  1920. hoursList: function hoursList() {
  1921. return Object(date_util_["getRangeHours"])(this.selectableRange);
  1922. },
  1923. minutesList: function minutesList() {
  1924. return Object(date_util_["getRangeMinutes"])(this.selectableRange, this.hours);
  1925. },
  1926. arrowHourList: function arrowHourList() {
  1927. var hours = this.hours;
  1928. return [hours > 0 ? hours - 1 : undefined, hours, hours < 23 ? hours + 1 : undefined];
  1929. },
  1930. arrowMinuteList: function arrowMinuteList() {
  1931. var minutes = this.minutes;
  1932. return [minutes > 0 ? minutes - 1 : undefined, minutes, minutes < 59 ? minutes + 1 : undefined];
  1933. },
  1934. arrowSecondList: function arrowSecondList() {
  1935. var seconds = this.seconds;
  1936. return [seconds > 0 ? seconds - 1 : undefined, seconds, seconds < 59 ? seconds + 1 : undefined];
  1937. }
  1938. },
  1939. data: function data() {
  1940. return {
  1941. selectableRange: [],
  1942. currentScrollbar: null
  1943. };
  1944. },
  1945. mounted: function mounted() {
  1946. var _this = this;
  1947. this.$nextTick(function () {
  1948. !_this.arrowControl && _this.bindScrollEvent();
  1949. });
  1950. },
  1951. methods: {
  1952. increase: function increase() {
  1953. this.scrollDown(1);
  1954. },
  1955. decrease: function decrease() {
  1956. this.scrollDown(-1);
  1957. },
  1958. modifyDateField: function modifyDateField(type, value) {
  1959. switch (type) {
  1960. case 'hours':
  1961. this.$emit('change', Object(date_util_["modifyTime"])(this.date, value, this.minutes, this.seconds));break;
  1962. case 'minutes':
  1963. this.$emit('change', Object(date_util_["modifyTime"])(this.date, this.hours, value, this.seconds));break;
  1964. case 'seconds':
  1965. this.$emit('change', Object(date_util_["modifyTime"])(this.date, this.hours, this.minutes, value));break;
  1966. }
  1967. },
  1968. handleClick: function handleClick(type, _ref) {
  1969. var value = _ref.value,
  1970. disabled = _ref.disabled;
  1971. if (!disabled) {
  1972. this.modifyDateField(type, value);
  1973. this.emitSelectRange(type);
  1974. this.adjustSpinner(type, value);
  1975. }
  1976. },
  1977. emitSelectRange: function emitSelectRange(type) {
  1978. if (type === 'hours') {
  1979. this.$emit('select-range', 0, 2);
  1980. } else if (type === 'minutes') {
  1981. this.$emit('select-range', 3, 5);
  1982. } else if (type === 'seconds') {
  1983. this.$emit('select-range', 6, 8);
  1984. }
  1985. this.currentScrollbar = type;
  1986. },
  1987. bindScrollEvent: function bindScrollEvent() {
  1988. var _this2 = this;
  1989. var bindFuntion = function bindFuntion(type) {
  1990. _this2.$refs[type].wrap.onscroll = function (e) {
  1991. // TODO: scroll is emitted when set scrollTop programatically
  1992. // should find better solutions in the future!
  1993. _this2.handleScroll(type, e);
  1994. };
  1995. };
  1996. bindFuntion('hours');
  1997. bindFuntion('minutes');
  1998. bindFuntion('seconds');
  1999. },
  2000. handleScroll: function handleScroll(type) {
  2001. var value = Math.min(Math.round((this.$refs[type].wrap.scrollTop - (this.scrollBarHeight(type) * 0.5 - 10) / this.typeItemHeight(type) + 3) / this.typeItemHeight(type)), type === 'hours' ? 23 : 59);
  2002. this.modifyDateField(type, value);
  2003. },
  2004. // NOTE: used by datetime / date-range panel
  2005. // renamed from adjustScrollTop
  2006. // should try to refactory it
  2007. adjustSpinners: function adjustSpinners() {
  2008. this.adjustSpinner('hours', this.hours);
  2009. this.adjustSpinner('minutes', this.minutes);
  2010. this.adjustSpinner('seconds', this.seconds);
  2011. },
  2012. adjustCurrentSpinner: function adjustCurrentSpinner(type) {
  2013. this.adjustSpinner(type, this[type]);
  2014. },
  2015. adjustSpinner: function adjustSpinner(type, value) {
  2016. if (this.arrowControl) return;
  2017. var el = this.$refs[type].wrap;
  2018. if (el) {
  2019. el.scrollTop = Math.max(0, value * this.typeItemHeight(type));
  2020. }
  2021. },
  2022. scrollDown: function scrollDown(step) {
  2023. var _this3 = this;
  2024. if (!this.currentScrollbar) {
  2025. this.emitSelectRange('hours');
  2026. }
  2027. var label = this.currentScrollbar;
  2028. var hoursList = this.hoursList;
  2029. var now = this[label];
  2030. if (this.currentScrollbar === 'hours') {
  2031. var total = Math.abs(step);
  2032. step = step > 0 ? 1 : -1;
  2033. var length = hoursList.length;
  2034. while (length-- && total) {
  2035. now = (now + step + hoursList.length) % hoursList.length;
  2036. if (hoursList[now]) {
  2037. continue;
  2038. }
  2039. total--;
  2040. }
  2041. if (hoursList[now]) return;
  2042. } else {
  2043. now = (now + step + 60) % 60;
  2044. }
  2045. this.modifyDateField(label, now);
  2046. this.adjustSpinner(label, now);
  2047. this.$nextTick(function () {
  2048. return _this3.emitSelectRange(_this3.currentScrollbar);
  2049. });
  2050. },
  2051. amPm: function amPm(hour) {
  2052. var shouldShowAmPm = this.amPmMode.toLowerCase() === 'a';
  2053. if (!shouldShowAmPm) return '';
  2054. var isCapital = this.amPmMode === 'A';
  2055. var content = hour < 12 ? ' am' : ' pm';
  2056. if (isCapital) content = content.toUpperCase();
  2057. return content;
  2058. },
  2059. typeItemHeight: function typeItemHeight(type) {
  2060. return this.$refs[type].$el.querySelector('li').offsetHeight;
  2061. },
  2062. scrollBarHeight: function scrollBarHeight(type) {
  2063. return this.$refs[type].$el.offsetHeight;
  2064. }
  2065. }
  2066. });
  2067. // CONCATENATED MODULE: ./packages/date-picker/src/basic/time-spinner.vue?vue&type=script&lang=js&
  2068. /* harmony default export */ var basic_time_spinnervue_type_script_lang_js_ = (time_spinnervue_type_script_lang_js_);
  2069. // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
  2070. var componentNormalizer = __webpack_require__(2);
  2071. // CONCATENATED MODULE: ./packages/date-picker/src/basic/time-spinner.vue
  2072. /* normalize component */
  2073. var component = Object(componentNormalizer["a" /* default */])(
  2074. basic_time_spinnervue_type_script_lang_js_,
  2075. render,
  2076. staticRenderFns,
  2077. false,
  2078. null,
  2079. null,
  2080. null
  2081. )
  2082. /* hot reload */
  2083. if (false) { var api; }
  2084. component.options.__file = "packages/date-picker/src/basic/time-spinner.vue"
  2085. /* harmony default export */ var time_spinner = __webpack_exports__["a"] = (component.exports);
  2086. /***/ }),
  2087. /***/ 13:
  2088. /***/ (function(module, exports) {
  2089. module.exports = require("tis-ui/lib/mixins/emitter");
  2090. /***/ }),
  2091. /***/ 2:
  2092. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2093. "use strict";
  2094. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return normalizeComponent; });
  2095. /* globals __VUE_SSR_CONTEXT__ */
  2096. // IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
  2097. // This module is a runtime utility for cleaner component module output and will
  2098. // be included in the final webpack user bundle.
  2099. function normalizeComponent (
  2100. scriptExports,
  2101. render,
  2102. staticRenderFns,
  2103. functionalTemplate,
  2104. injectStyles,
  2105. scopeId,
  2106. moduleIdentifier, /* server only */
  2107. shadowMode /* vue-cli only */
  2108. ) {
  2109. // Vue.extend constructor export interop
  2110. var options = typeof scriptExports === 'function'
  2111. ? scriptExports.options
  2112. : scriptExports
  2113. // render functions
  2114. if (render) {
  2115. options.render = render
  2116. options.staticRenderFns = staticRenderFns
  2117. options._compiled = true
  2118. }
  2119. // functional template
  2120. if (functionalTemplate) {
  2121. options.functional = true
  2122. }
  2123. // scopedId
  2124. if (scopeId) {
  2125. options._scopeId = 'data-v-' + scopeId
  2126. }
  2127. var hook
  2128. if (moduleIdentifier) { // server build
  2129. hook = function (context) {
  2130. // 2.3 injection
  2131. context =
  2132. context || // cached call
  2133. (this.$vnode && this.$vnode.ssrContext) || // stateful
  2134. (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
  2135. // 2.2 with runInNewContext: true
  2136. if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
  2137. context = __VUE_SSR_CONTEXT__
  2138. }
  2139. // inject component styles
  2140. if (injectStyles) {
  2141. injectStyles.call(this, context)
  2142. }
  2143. // register component module identifier for async chunk inferrence
  2144. if (context && context._registeredComponents) {
  2145. context._registeredComponents.add(moduleIdentifier)
  2146. }
  2147. }
  2148. // used by ssr in case component is cached and beforeCreate
  2149. // never gets called
  2150. options._ssrRegister = hook
  2151. } else if (injectStyles) {
  2152. hook = shadowMode
  2153. ? function () {
  2154. injectStyles.call(
  2155. this,
  2156. (options.functional ? this.parent : this).$root.$options.shadowRoot
  2157. )
  2158. }
  2159. : injectStyles
  2160. }
  2161. if (hook) {
  2162. if (options.functional) {
  2163. // for template-only hot-reload because in that case the render fn doesn't
  2164. // go through the normalizer
  2165. options._injectStyles = hook
  2166. // register for functional component in vue file
  2167. var originalRender = options.render
  2168. options.render = function renderWithStyleInjection (h, context) {
  2169. hook.call(context)
  2170. return originalRender(h, context)
  2171. }
  2172. } else {
  2173. // inject component registration as beforeCreate hook
  2174. var existing = options.beforeCreate
  2175. options.beforeCreate = existing
  2176. ? [].concat(existing, hook)
  2177. : [hook]
  2178. }
  2179. }
  2180. return {
  2181. exports: scriptExports,
  2182. options: options
  2183. }
  2184. }
  2185. /***/ }),
  2186. /***/ 33:
  2187. /***/ (function(module, exports) {
  2188. module.exports = require("tis-ui/lib/utils/merge");
  2189. /***/ }),
  2190. /***/ 34:
  2191. /***/ (function(module, exports) {
  2192. module.exports = require("tis-ui/lib/utils/vue-popper");
  2193. /***/ }),
  2194. /***/ 36:
  2195. /***/ (function(module, exports) {
  2196. module.exports = require("tis-ui/lib/mixins/migrating");
  2197. /***/ }),
  2198. /***/ 38:
  2199. /***/ (function(module, exports) {
  2200. module.exports = require("tis-ui/lib/mixins/locale");
  2201. /***/ }),
  2202. /***/ 4:
  2203. /***/ (function(module, exports) {
  2204. module.exports = require("vue");
  2205. /***/ }),
  2206. /***/ 44:
  2207. /***/ (function(module, exports) {
  2208. module.exports = require("tis-ui/lib/utils/resize-event");
  2209. /***/ }),
  2210. /***/ 49:
  2211. /***/ (function(module, exports) {
  2212. module.exports = require("tis-ui/lib/utils/shared");
  2213. /***/ }),
  2214. /***/ 52:
  2215. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2216. "use strict";
  2217. // ESM COMPAT FLAG
  2218. __webpack_require__.r(__webpack_exports__);
  2219. // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/input/src/input.vue?vue&type=template&id=343dd774&
  2220. var render = function() {
  2221. var _vm = this
  2222. var _h = _vm.$createElement
  2223. var _c = _vm._self._c || _h
  2224. return _c(
  2225. "div",
  2226. {
  2227. class: [
  2228. _vm.type === "textarea" ? "el-textarea" : "el-input",
  2229. _vm.inputSize ? "el-input--" + _vm.inputSize : "",
  2230. {
  2231. "is-disabled": _vm.inputDisabled,
  2232. "is-exceed": _vm.inputExceed,
  2233. "el-input-group": _vm.$slots.prepend || _vm.$slots.append,
  2234. "el-input-group--append": _vm.$slots.append,
  2235. "el-input-group--prepend": _vm.$slots.prepend,
  2236. "el-input--prefix": _vm.$slots.prefix || _vm.prefixIcon,
  2237. "el-input--suffix":
  2238. _vm.$slots.suffix ||
  2239. _vm.suffixIcon ||
  2240. _vm.clearable ||
  2241. _vm.showPassword
  2242. }
  2243. ],
  2244. on: {
  2245. mouseenter: function($event) {
  2246. _vm.hovering = true
  2247. },
  2248. mouseleave: function($event) {
  2249. _vm.hovering = false
  2250. }
  2251. }
  2252. },
  2253. [
  2254. _vm.type !== "textarea"
  2255. ? [
  2256. _vm.$slots.prepend
  2257. ? _c(
  2258. "div",
  2259. { staticClass: "el-input-group__prepend" },
  2260. [_vm._t("prepend")],
  2261. 2
  2262. )
  2263. : _vm._e(),
  2264. _vm.type !== "textarea"
  2265. ? _c(
  2266. "input",
  2267. _vm._b(
  2268. {
  2269. ref: "input",
  2270. staticClass: "el-input__inner",
  2271. attrs: {
  2272. tabindex: _vm.tabindex,
  2273. type: _vm.showPassword
  2274. ? _vm.passwordVisible
  2275. ? "text"
  2276. : "password"
  2277. : _vm.type,
  2278. disabled: _vm.inputDisabled,
  2279. readonly: _vm.readonly,
  2280. autocomplete: _vm.autoComplete || _vm.autocomplete,
  2281. "aria-label": _vm.label
  2282. },
  2283. on: {
  2284. compositionstart: _vm.handleCompositionStart,
  2285. compositionupdate: _vm.handleCompositionUpdate,
  2286. compositionend: _vm.handleCompositionEnd,
  2287. input: _vm.handleInput,
  2288. focus: _vm.handleFocus,
  2289. blur: _vm.handleBlur,
  2290. change: _vm.handleChange
  2291. }
  2292. },
  2293. "input",
  2294. _vm.$attrs,
  2295. false
  2296. )
  2297. )
  2298. : _vm._e(),
  2299. _vm.$slots.prefix || _vm.prefixIcon
  2300. ? _c(
  2301. "span",
  2302. { staticClass: "el-input__prefix" },
  2303. [
  2304. _vm._t("prefix"),
  2305. _vm.prefixIcon
  2306. ? _c("i", {
  2307. staticClass: "el-input__icon",
  2308. class: _vm.prefixIcon
  2309. })
  2310. : _vm._e()
  2311. ],
  2312. 2
  2313. )
  2314. : _vm._e(),
  2315. _vm.getSuffixVisible()
  2316. ? _c("span", { staticClass: "el-input__suffix" }, [
  2317. _c(
  2318. "span",
  2319. { staticClass: "el-input__suffix-inner" },
  2320. [
  2321. !_vm.showClear ||
  2322. !_vm.showPwdVisible ||
  2323. !_vm.isWordLimitVisible
  2324. ? [
  2325. _vm._t("suffix"),
  2326. _vm.suffixIcon
  2327. ? _c("i", {
  2328. staticClass: "el-input__icon",
  2329. class: _vm.suffixIcon
  2330. })
  2331. : _vm._e()
  2332. ]
  2333. : _vm._e(),
  2334. _vm.showClear
  2335. ? _c("i", {
  2336. staticClass:
  2337. "el-input__icon el-icon-circle-close el-input__clear",
  2338. on: {
  2339. mousedown: function($event) {
  2340. $event.preventDefault()
  2341. },
  2342. click: _vm.clear
  2343. }
  2344. })
  2345. : _vm._e(),
  2346. _vm.showPwdVisible
  2347. ? _c("i", {
  2348. staticClass:
  2349. "el-input__icon el-icon-view el-input__clear",
  2350. on: { click: _vm.handlePasswordVisible }
  2351. })
  2352. : _vm._e(),
  2353. _vm.isWordLimitVisible
  2354. ? _c("span", { staticClass: "el-input__count" }, [
  2355. _c(
  2356. "span",
  2357. { staticClass: "el-input__count-inner" },
  2358. [
  2359. _vm._v(
  2360. "\n " +
  2361. _vm._s(_vm.textLength) +
  2362. "/" +
  2363. _vm._s(_vm.upperLimit) +
  2364. "\n "
  2365. )
  2366. ]
  2367. )
  2368. ])
  2369. : _vm._e()
  2370. ],
  2371. 2
  2372. ),
  2373. _vm.validateState
  2374. ? _c("i", {
  2375. staticClass: "el-input__icon",
  2376. class: ["el-input__validateIcon", _vm.validateIcon]
  2377. })
  2378. : _vm._e()
  2379. ])
  2380. : _vm._e(),
  2381. _vm.$slots.append
  2382. ? _c(
  2383. "div",
  2384. { staticClass: "el-input-group__append" },
  2385. [_vm._t("append")],
  2386. 2
  2387. )
  2388. : _vm._e()
  2389. ]
  2390. : _c(
  2391. "textarea",
  2392. _vm._b(
  2393. {
  2394. ref: "textarea",
  2395. staticClass: "el-textarea__inner",
  2396. style: _vm.textareaStyle,
  2397. attrs: {
  2398. tabindex: _vm.tabindex,
  2399. disabled: _vm.inputDisabled,
  2400. readonly: _vm.readonly,
  2401. autocomplete: _vm.autoComplete || _vm.autocomplete,
  2402. "aria-label": _vm.label
  2403. },
  2404. on: {
  2405. compositionstart: _vm.handleCompositionStart,
  2406. compositionupdate: _vm.handleCompositionUpdate,
  2407. compositionend: _vm.handleCompositionEnd,
  2408. input: _vm.handleInput,
  2409. focus: _vm.handleFocus,
  2410. blur: _vm.handleBlur,
  2411. change: _vm.handleChange
  2412. }
  2413. },
  2414. "textarea",
  2415. _vm.$attrs,
  2416. false
  2417. )
  2418. ),
  2419. _vm.isWordLimitVisible && _vm.type === "textarea"
  2420. ? _c("span", { staticClass: "el-input__count" }, [
  2421. _vm._v(_vm._s(_vm.textLength) + "/" + _vm._s(_vm.upperLimit))
  2422. ])
  2423. : _vm._e()
  2424. ],
  2425. 2
  2426. )
  2427. }
  2428. var staticRenderFns = []
  2429. render._withStripped = true
  2430. // CONCATENATED MODULE: ./packages/input/src/input.vue?vue&type=template&id=343dd774&
  2431. // EXTERNAL MODULE: external "tis-ui/lib/mixins/emitter"
  2432. var emitter_ = __webpack_require__(13);
  2433. var emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_);
  2434. // EXTERNAL MODULE: external "tis-ui/lib/mixins/migrating"
  2435. var migrating_ = __webpack_require__(36);
  2436. var migrating_default = /*#__PURE__*/__webpack_require__.n(migrating_);
  2437. // CONCATENATED MODULE: ./packages/input/src/calcTextareaHeight.js
  2438. var hiddenTextarea = void 0;
  2439. var HIDDEN_STYLE = '\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n';
  2440. var CONTEXT_STYLE = ['letter-spacing', 'line-height', 'padding-top', 'padding-bottom', 'font-family', 'font-weight', 'font-size', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-left', 'padding-right', 'border-width', 'box-sizing'];
  2441. function calculateNodeStyling(targetElement) {
  2442. var style = window.getComputedStyle(targetElement);
  2443. var boxSizing = style.getPropertyValue('box-sizing');
  2444. var paddingSize = parseFloat(style.getPropertyValue('padding-bottom')) + parseFloat(style.getPropertyValue('padding-top'));
  2445. var borderSize = parseFloat(style.getPropertyValue('border-bottom-width')) + parseFloat(style.getPropertyValue('border-top-width'));
  2446. var contextStyle = CONTEXT_STYLE.map(function (name) {
  2447. return name + ':' + style.getPropertyValue(name);
  2448. }).join(';');
  2449. return { contextStyle: contextStyle, paddingSize: paddingSize, borderSize: borderSize, boxSizing: boxSizing };
  2450. }
  2451. function calcTextareaHeight(targetElement) {
  2452. var minRows = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
  2453. var maxRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
  2454. if (!hiddenTextarea) {
  2455. hiddenTextarea = document.createElement('textarea');
  2456. document.body.appendChild(hiddenTextarea);
  2457. }
  2458. var _calculateNodeStyling = calculateNodeStyling(targetElement),
  2459. paddingSize = _calculateNodeStyling.paddingSize,
  2460. borderSize = _calculateNodeStyling.borderSize,
  2461. boxSizing = _calculateNodeStyling.boxSizing,
  2462. contextStyle = _calculateNodeStyling.contextStyle;
  2463. hiddenTextarea.setAttribute('style', contextStyle + ';' + HIDDEN_STYLE);
  2464. hiddenTextarea.value = targetElement.value || targetElement.placeholder || '';
  2465. var height = hiddenTextarea.scrollHeight;
  2466. var result = {};
  2467. if (boxSizing === 'border-box') {
  2468. height = height + borderSize;
  2469. } else if (boxSizing === 'content-box') {
  2470. height = height - paddingSize;
  2471. }
  2472. hiddenTextarea.value = '';
  2473. var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;
  2474. if (minRows !== null) {
  2475. var minHeight = singleRowHeight * minRows;
  2476. if (boxSizing === 'border-box') {
  2477. minHeight = minHeight + paddingSize + borderSize;
  2478. }
  2479. height = Math.max(minHeight, height);
  2480. result.minHeight = minHeight + 'px';
  2481. }
  2482. if (maxRows !== null) {
  2483. var maxHeight = singleRowHeight * maxRows;
  2484. if (boxSizing === 'border-box') {
  2485. maxHeight = maxHeight + paddingSize + borderSize;
  2486. }
  2487. height = Math.min(maxHeight, height);
  2488. }
  2489. result.height = height + 'px';
  2490. hiddenTextarea.parentNode && hiddenTextarea.parentNode.removeChild(hiddenTextarea);
  2491. hiddenTextarea = null;
  2492. return result;
  2493. };
  2494. // EXTERNAL MODULE: external "tis-ui/lib/utils/merge"
  2495. var merge_ = __webpack_require__(33);
  2496. var merge_default = /*#__PURE__*/__webpack_require__.n(merge_);
  2497. // EXTERNAL MODULE: external "tis-ui/lib/utils/shared"
  2498. var shared_ = __webpack_require__(49);
  2499. // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/input/src/input.vue?vue&type=script&lang=js&
  2500. //
  2501. //
  2502. //
  2503. //
  2504. //
  2505. //
  2506. //
  2507. //
  2508. //
  2509. //
  2510. //
  2511. //
  2512. //
  2513. //
  2514. //
  2515. //
  2516. //
  2517. //
  2518. //
  2519. //
  2520. //
  2521. //
  2522. //
  2523. //
  2524. //
  2525. //
  2526. //
  2527. //
  2528. //
  2529. //
  2530. //
  2531. //
  2532. //
  2533. //
  2534. //
  2535. //
  2536. //
  2537. //
  2538. //
  2539. //
  2540. //
  2541. //
  2542. //
  2543. //
  2544. //
  2545. //
  2546. //
  2547. //
  2548. //
  2549. //
  2550. //
  2551. //
  2552. //
  2553. //
  2554. //
  2555. //
  2556. //
  2557. //
  2558. //
  2559. //
  2560. //
  2561. //
  2562. //
  2563. //
  2564. //
  2565. //
  2566. //
  2567. //
  2568. //
  2569. //
  2570. //
  2571. //
  2572. //
  2573. //
  2574. //
  2575. //
  2576. //
  2577. //
  2578. //
  2579. //
  2580. //
  2581. //
  2582. //
  2583. //
  2584. //
  2585. //
  2586. //
  2587. //
  2588. //
  2589. //
  2590. //
  2591. //
  2592. //
  2593. //
  2594. //
  2595. //
  2596. //
  2597. //
  2598. //
  2599. //
  2600. //
  2601. //
  2602. //
  2603. //
  2604. //
  2605. //
  2606. //
  2607. //
  2608. //
  2609. /* harmony default export */ var inputvue_type_script_lang_js_ = ({
  2610. name: 'TisInput',
  2611. componentName: 'TisInput',
  2612. mixins: [emitter_default.a, migrating_default.a],
  2613. inheritAttrs: false,
  2614. inject: {
  2615. elForm: {
  2616. default: ''
  2617. },
  2618. elFormItem: {
  2619. default: ''
  2620. }
  2621. },
  2622. data: function data() {
  2623. return {
  2624. textareaCalcStyle: {},
  2625. hovering: false,
  2626. focused: false,
  2627. isComposing: false,
  2628. passwordVisible: false
  2629. };
  2630. },
  2631. props: {
  2632. value: [String, Number],
  2633. size: String,
  2634. resize: String,
  2635. form: String,
  2636. disabled: Boolean,
  2637. readonly: Boolean,
  2638. type: {
  2639. type: String,
  2640. default: 'text'
  2641. },
  2642. autosize: {
  2643. type: [Boolean, Object],
  2644. default: false
  2645. },
  2646. autocomplete: {
  2647. type: String,
  2648. default: 'off'
  2649. },
  2650. /** @Deprecated in next major version */
  2651. autoComplete: {
  2652. type: String,
  2653. validator: function validator(val) {
  2654. false && false;
  2655. return true;
  2656. }
  2657. },
  2658. validateEvent: {
  2659. type: Boolean,
  2660. default: true
  2661. },
  2662. suffixIcon: String,
  2663. prefixIcon: String,
  2664. label: String,
  2665. clearable: {
  2666. type: Boolean,
  2667. default: false
  2668. },
  2669. showPassword: {
  2670. type: Boolean,
  2671. default: false
  2672. },
  2673. showWordLimit: {
  2674. type: Boolean,
  2675. default: false
  2676. },
  2677. tabindex: String
  2678. },
  2679. computed: {
  2680. _elFormItemSize: function _elFormItemSize() {
  2681. return (this.elFormItem || {}).elFormItemSize;
  2682. },
  2683. validateState: function validateState() {
  2684. return this.elFormItem ? this.elFormItem.validateState : '';
  2685. },
  2686. needStatusIcon: function needStatusIcon() {
  2687. return this.elForm ? this.elForm.statusIcon : false;
  2688. },
  2689. validateIcon: function validateIcon() {
  2690. return {
  2691. validating: 'el-icon-loading',
  2692. success: 'el-icon-circle-check',
  2693. error: 'el-icon-circle-close'
  2694. }[this.validateState];
  2695. },
  2696. textareaStyle: function textareaStyle() {
  2697. return merge_default()({}, this.textareaCalcStyle, { resize: this.resize });
  2698. },
  2699. inputSize: function inputSize() {
  2700. return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;
  2701. },
  2702. inputDisabled: function inputDisabled() {
  2703. return this.disabled || (this.elForm || {}).disabled;
  2704. },
  2705. nativeInputValue: function nativeInputValue() {
  2706. return this.value === null || this.value === undefined ? '' : String(this.value);
  2707. },
  2708. showClear: function showClear() {
  2709. return this.clearable && !this.inputDisabled && !this.readonly && this.nativeInputValue && (this.focused || this.hovering);
  2710. },
  2711. showPwdVisible: function showPwdVisible() {
  2712. return this.showPassword && !this.inputDisabled && !this.readonly && (!!this.nativeInputValue || this.focused);
  2713. },
  2714. isWordLimitVisible: function isWordLimitVisible() {
  2715. return this.showWordLimit && this.$attrs.maxlength && (this.type === 'text' || this.type === 'textarea') && !this.inputDisabled && !this.readonly && !this.showPassword;
  2716. },
  2717. upperLimit: function upperLimit() {
  2718. return this.$attrs.maxlength;
  2719. },
  2720. textLength: function textLength() {
  2721. if (typeof this.value === 'number') {
  2722. return String(this.value).length;
  2723. }
  2724. return (this.value || '').length;
  2725. },
  2726. inputExceed: function inputExceed() {
  2727. // show exceed style if length of initial value greater then maxlength
  2728. return this.isWordLimitVisible && this.textLength > this.upperLimit;
  2729. }
  2730. },
  2731. watch: {
  2732. value: function value(val) {
  2733. this.$nextTick(this.resizeTextarea);
  2734. if (this.validateEvent) {
  2735. this.dispatch('ElFormItem', 'el.form.change', [val]);
  2736. }
  2737. },
  2738. // native input value is set explicitly
  2739. // do not use v-model / :value in template
  2740. // see: https://github.com/ElemeFE/element/issues/14521
  2741. nativeInputValue: function nativeInputValue() {
  2742. this.setNativeInputValue();
  2743. },
  2744. // when change between <input> and <textarea>,
  2745. // update DOM dependent value and styles
  2746. // https://github.com/ElemeFE/element/issues/14857
  2747. type: function type() {
  2748. var _this = this;
  2749. this.$nextTick(function () {
  2750. _this.setNativeInputValue();
  2751. _this.resizeTextarea();
  2752. _this.updateIconOffset();
  2753. });
  2754. }
  2755. },
  2756. methods: {
  2757. focus: function focus() {
  2758. this.getInput().focus();
  2759. },
  2760. blur: function blur() {
  2761. this.getInput().blur();
  2762. },
  2763. getMigratingConfig: function getMigratingConfig() {
  2764. return {
  2765. props: {
  2766. 'icon': 'icon is removed, use suffix-icon / prefix-icon instead.',
  2767. 'on-icon-click': 'on-icon-click is removed.'
  2768. },
  2769. events: {
  2770. 'click': 'click is removed.'
  2771. }
  2772. };
  2773. },
  2774. handleBlur: function handleBlur(event) {
  2775. this.focused = false;
  2776. this.$emit('blur', event);
  2777. if (this.validateEvent) {
  2778. this.dispatch('ElFormItem', 'el.form.blur', [this.value]);
  2779. }
  2780. },
  2781. select: function select() {
  2782. this.getInput().select();
  2783. },
  2784. resizeTextarea: function resizeTextarea() {
  2785. if (this.$isServer) return;
  2786. var autosize = this.autosize,
  2787. type = this.type;
  2788. if (type !== 'textarea') return;
  2789. if (!autosize) {
  2790. this.textareaCalcStyle = {
  2791. minHeight: calcTextareaHeight(this.$refs.textarea).minHeight
  2792. };
  2793. return;
  2794. }
  2795. var minRows = autosize.minRows;
  2796. var maxRows = autosize.maxRows;
  2797. this.textareaCalcStyle = calcTextareaHeight(this.$refs.textarea, minRows, maxRows);
  2798. },
  2799. setNativeInputValue: function setNativeInputValue() {
  2800. var input = this.getInput();
  2801. if (!input) return;
  2802. if (input.value === this.nativeInputValue) return;
  2803. input.value = this.nativeInputValue;
  2804. },
  2805. handleFocus: function handleFocus(event) {
  2806. this.focused = true;
  2807. this.$emit('focus', event);
  2808. },
  2809. handleCompositionStart: function handleCompositionStart() {
  2810. this.isComposing = true;
  2811. },
  2812. handleCompositionUpdate: function handleCompositionUpdate(event) {
  2813. var text = event.target.value;
  2814. var lastCharacter = text[text.length - 1] || '';
  2815. this.isComposing = !Object(shared_["isKorean"])(lastCharacter);
  2816. },
  2817. handleCompositionEnd: function handleCompositionEnd(event) {
  2818. if (this.isComposing) {
  2819. this.isComposing = false;
  2820. this.handleInput(event);
  2821. }
  2822. },
  2823. handleInput: function handleInput(event) {
  2824. // should not emit input during composition
  2825. // see: https://github.com/ElemeFE/element/issues/10516
  2826. if (this.isComposing) return;
  2827. // hack for https://github.com/ElemeFE/element/issues/8548
  2828. // should remove the following line when we don't support IE
  2829. if (event.target.value === this.nativeInputValue) return;
  2830. this.$emit('input', event.target.value);
  2831. // ensure native input value is controlled
  2832. // see: https://github.com/ElemeFE/element/issues/12850
  2833. this.$nextTick(this.setNativeInputValue);
  2834. },
  2835. handleChange: function handleChange(event) {
  2836. this.$emit('change', event.target.value);
  2837. },
  2838. calcIconOffset: function calcIconOffset(place) {
  2839. var elList = [].slice.call(this.$el.querySelectorAll('.el-input__' + place) || []);
  2840. if (!elList.length) return;
  2841. var el = null;
  2842. for (var i = 0; i < elList.length; i++) {
  2843. if (elList[i].parentNode === this.$el) {
  2844. el = elList[i];
  2845. break;
  2846. }
  2847. }
  2848. if (!el) return;
  2849. var pendantMap = {
  2850. suffix: 'append',
  2851. prefix: 'prepend'
  2852. };
  2853. var pendant = pendantMap[place];
  2854. if (this.$slots[pendant]) {
  2855. el.style.transform = 'translateX(' + (place === 'suffix' ? '-' : '') + this.$el.querySelector('.el-input-group__' + pendant).offsetWidth + 'px)';
  2856. } else {
  2857. el.removeAttribute('style');
  2858. }
  2859. },
  2860. updateIconOffset: function updateIconOffset() {
  2861. this.calcIconOffset('prefix');
  2862. this.calcIconOffset('suffix');
  2863. },
  2864. clear: function clear() {
  2865. this.$emit('input', '');
  2866. this.$emit('change', '');
  2867. this.$emit('clear');
  2868. },
  2869. handlePasswordVisible: function handlePasswordVisible() {
  2870. this.passwordVisible = !this.passwordVisible;
  2871. this.focus();
  2872. },
  2873. getInput: function getInput() {
  2874. return this.$refs.input || this.$refs.textarea;
  2875. },
  2876. getSuffixVisible: function getSuffixVisible() {
  2877. return this.$slots.suffix || this.suffixIcon || this.showClear || this.showPassword || this.isWordLimitVisible || this.validateState && this.needStatusIcon;
  2878. }
  2879. },
  2880. created: function created() {
  2881. this.$on('inputSelect', this.select);
  2882. },
  2883. mounted: function mounted() {
  2884. this.setNativeInputValue();
  2885. this.resizeTextarea();
  2886. this.updateIconOffset();
  2887. },
  2888. updated: function updated() {
  2889. this.$nextTick(this.updateIconOffset);
  2890. }
  2891. });
  2892. // CONCATENATED MODULE: ./packages/input/src/input.vue?vue&type=script&lang=js&
  2893. /* harmony default export */ var src_inputvue_type_script_lang_js_ = (inputvue_type_script_lang_js_);
  2894. // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
  2895. var componentNormalizer = __webpack_require__(2);
  2896. // CONCATENATED MODULE: ./packages/input/src/input.vue
  2897. /* normalize component */
  2898. var component = Object(componentNormalizer["a" /* default */])(
  2899. src_inputvue_type_script_lang_js_,
  2900. render,
  2901. staticRenderFns,
  2902. false,
  2903. null,
  2904. null,
  2905. null
  2906. )
  2907. /* hot reload */
  2908. if (false) { var api; }
  2909. component.options.__file = "packages/input/src/input.vue"
  2910. /* harmony default export */ var input = (component.exports);
  2911. // CONCATENATED MODULE: ./packages/input/index.js
  2912. /* istanbul ignore next */
  2913. input.install = function (Vue) {
  2914. Vue.component(input.name, input);
  2915. };
  2916. /* harmony default export */ var packages_input = __webpack_exports__["default"] = (input);
  2917. /***/ }),
  2918. /***/ 530:
  2919. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2920. "use strict";
  2921. // ESM COMPAT FLAG
  2922. __webpack_require__.r(__webpack_exports__);
  2923. // EXTERNAL MODULE: ./packages/date-picker/src/picker.vue + 4 modules
  2924. var picker = __webpack_require__(113);
  2925. // EXTERNAL MODULE: ./packages/date-picker/src/panel/time.vue + 4 modules
  2926. var time = __webpack_require__(111);
  2927. // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-range.vue?vue&type=template&id=fb28660e&
  2928. var render = function() {
  2929. var _vm = this
  2930. var _h = _vm.$createElement
  2931. var _c = _vm._self._c || _h
  2932. return _c(
  2933. "transition",
  2934. {
  2935. attrs: { name: "el-zoom-in-top" },
  2936. on: {
  2937. "after-leave": function($event) {
  2938. _vm.$emit("dodestroy")
  2939. }
  2940. }
  2941. },
  2942. [
  2943. _c(
  2944. "div",
  2945. {
  2946. directives: [
  2947. {
  2948. name: "show",
  2949. rawName: "v-show",
  2950. value: _vm.visible,
  2951. expression: "visible"
  2952. }
  2953. ],
  2954. staticClass: "el-time-range-picker el-picker-panel el-popper",
  2955. class: _vm.popperClass
  2956. },
  2957. [
  2958. _c("div", { staticClass: "el-time-range-picker__content" }, [
  2959. _c("div", { staticClass: "el-time-range-picker__cell" }, [
  2960. _c("div", { staticClass: "el-time-range-picker__header" }, [
  2961. _vm._v(_vm._s(_vm.t("el.datepicker.startTime")))
  2962. ]),
  2963. _c(
  2964. "div",
  2965. {
  2966. staticClass:
  2967. "el-time-range-picker__body el-time-panel__content",
  2968. class: {
  2969. "has-seconds": _vm.showSeconds,
  2970. "is-arrow": _vm.arrowControl
  2971. }
  2972. },
  2973. [
  2974. _c("time-spinner", {
  2975. ref: "minSpinner",
  2976. attrs: {
  2977. "show-seconds": _vm.showSeconds,
  2978. "am-pm-mode": _vm.amPmMode,
  2979. "arrow-control": _vm.arrowControl,
  2980. date: _vm.minDate
  2981. },
  2982. on: {
  2983. change: _vm.handleMinChange,
  2984. "select-range": _vm.setMinSelectionRange
  2985. }
  2986. })
  2987. ],
  2988. 1
  2989. )
  2990. ]),
  2991. _c("div", { staticClass: "el-time-range-picker__cell" }, [
  2992. _c("div", { staticClass: "el-time-range-picker__header" }, [
  2993. _vm._v(_vm._s(_vm.t("el.datepicker.endTime")))
  2994. ]),
  2995. _c(
  2996. "div",
  2997. {
  2998. staticClass:
  2999. "el-time-range-picker__body el-time-panel__content",
  3000. class: {
  3001. "has-seconds": _vm.showSeconds,
  3002. "is-arrow": _vm.arrowControl
  3003. }
  3004. },
  3005. [
  3006. _c("time-spinner", {
  3007. ref: "maxSpinner",
  3008. attrs: {
  3009. "show-seconds": _vm.showSeconds,
  3010. "am-pm-mode": _vm.amPmMode,
  3011. "arrow-control": _vm.arrowControl,
  3012. date: _vm.maxDate
  3013. },
  3014. on: {
  3015. change: _vm.handleMaxChange,
  3016. "select-range": _vm.setMaxSelectionRange
  3017. }
  3018. })
  3019. ],
  3020. 1
  3021. )
  3022. ])
  3023. ]),
  3024. _c("div", { staticClass: "el-time-panel__footer" }, [
  3025. _c(
  3026. "button",
  3027. {
  3028. staticClass: "el-time-panel__btn cancel",
  3029. attrs: { type: "button" },
  3030. on: {
  3031. click: function($event) {
  3032. _vm.handleCancel()
  3033. }
  3034. }
  3035. },
  3036. [_vm._v(_vm._s(_vm.t("el.datepicker.cancel")))]
  3037. ),
  3038. _c(
  3039. "button",
  3040. {
  3041. staticClass: "el-time-panel__btn confirm",
  3042. attrs: { type: "button", disabled: _vm.btnDisabled },
  3043. on: {
  3044. click: function($event) {
  3045. _vm.handleConfirm()
  3046. }
  3047. }
  3048. },
  3049. [_vm._v(_vm._s(_vm.t("el.datepicker.confirm")))]
  3050. )
  3051. ])
  3052. ]
  3053. )
  3054. ]
  3055. )
  3056. }
  3057. var staticRenderFns = []
  3058. render._withStripped = true
  3059. // CONCATENATED MODULE: ./packages/date-picker/src/panel/time-range.vue?vue&type=template&id=fb28660e&
  3060. // EXTERNAL MODULE: external "tis-ui/lib/utils/date-util"
  3061. var date_util_ = __webpack_require__(8);
  3062. // EXTERNAL MODULE: external "tis-ui/lib/mixins/locale"
  3063. var locale_ = __webpack_require__(38);
  3064. var locale_default = /*#__PURE__*/__webpack_require__.n(locale_);
  3065. // EXTERNAL MODULE: ./packages/date-picker/src/basic/time-spinner.vue + 4 modules
  3066. var time_spinner = __webpack_require__(122);
  3067. // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-range.vue?vue&type=script&lang=js&
  3068. //
  3069. //
  3070. //
  3071. //
  3072. //
  3073. //
  3074. //
  3075. //
  3076. //
  3077. //
  3078. //
  3079. //
  3080. //
  3081. //
  3082. //
  3083. //
  3084. //
  3085. //
  3086. //
  3087. //
  3088. //
  3089. //
  3090. //
  3091. //
  3092. //
  3093. //
  3094. //
  3095. //
  3096. //
  3097. //
  3098. //
  3099. //
  3100. //
  3101. //
  3102. //
  3103. //
  3104. //
  3105. //
  3106. //
  3107. //
  3108. //
  3109. //
  3110. //
  3111. //
  3112. //
  3113. //
  3114. //
  3115. //
  3116. //
  3117. //
  3118. //
  3119. //
  3120. //
  3121. //
  3122. //
  3123. //
  3124. //
  3125. var MIN_TIME = Object(date_util_["parseDate"])('00:00:00', 'HH:mm:ss');
  3126. var MAX_TIME = Object(date_util_["parseDate"])('23:59:59', 'HH:mm:ss');
  3127. var time_rangevue_type_script_lang_js_minTimeOfDay = function minTimeOfDay(date) {
  3128. return Object(date_util_["modifyDate"])(MIN_TIME, date.getFullYear(), date.getMonth(), date.getDate());
  3129. };
  3130. var time_rangevue_type_script_lang_js_maxTimeOfDay = function maxTimeOfDay(date) {
  3131. return Object(date_util_["modifyDate"])(MAX_TIME, date.getFullYear(), date.getMonth(), date.getDate());
  3132. };
  3133. // increase time by amount of milliseconds, but within the range of day
  3134. var advanceTime = function advanceTime(date, amount) {
  3135. return new Date(Math.min(date.getTime() + amount, time_rangevue_type_script_lang_js_maxTimeOfDay(date).getTime()));
  3136. };
  3137. /* harmony default export */ var time_rangevue_type_script_lang_js_ = ({
  3138. mixins: [locale_default.a],
  3139. components: { TimeSpinner: time_spinner["a" /* default */] },
  3140. computed: {
  3141. showSeconds: function showSeconds() {
  3142. return (this.format || '').indexOf('ss') !== -1;
  3143. },
  3144. offset: function offset() {
  3145. return this.showSeconds ? 11 : 8;
  3146. },
  3147. spinner: function spinner() {
  3148. return this.selectionRange[0] < this.offset ? this.$refs.minSpinner : this.$refs.maxSpinner;
  3149. },
  3150. btnDisabled: function btnDisabled() {
  3151. return this.minDate.getTime() > this.maxDate.getTime();
  3152. },
  3153. amPmMode: function amPmMode() {
  3154. if ((this.format || '').indexOf('A') !== -1) return 'A';
  3155. if ((this.format || '').indexOf('a') !== -1) return 'a';
  3156. return '';
  3157. }
  3158. },
  3159. data: function data() {
  3160. return {
  3161. popperClass: '',
  3162. minDate: new Date(),
  3163. maxDate: new Date(),
  3164. value: [],
  3165. oldValue: [new Date(), new Date()],
  3166. defaultValue: null,
  3167. format: 'HH:mm:ss',
  3168. visible: false,
  3169. selectionRange: [0, 2],
  3170. arrowControl: false
  3171. };
  3172. },
  3173. watch: {
  3174. value: function value(_value) {
  3175. if (Array.isArray(_value)) {
  3176. this.minDate = new Date(_value[0]);
  3177. this.maxDate = new Date(_value[1]);
  3178. } else {
  3179. if (Array.isArray(this.defaultValue)) {
  3180. this.minDate = new Date(this.defaultValue[0]);
  3181. this.maxDate = new Date(this.defaultValue[1]);
  3182. } else if (this.defaultValue) {
  3183. this.minDate = new Date(this.defaultValue);
  3184. this.maxDate = advanceTime(new Date(this.defaultValue), 60 * 60 * 1000);
  3185. } else {
  3186. this.minDate = new Date();
  3187. this.maxDate = advanceTime(new Date(), 60 * 60 * 1000);
  3188. }
  3189. }
  3190. },
  3191. visible: function visible(val) {
  3192. var _this = this;
  3193. if (val) {
  3194. this.oldValue = this.value;
  3195. this.$nextTick(function () {
  3196. return _this.$refs.minSpinner.emitSelectRange('hours');
  3197. });
  3198. }
  3199. }
  3200. },
  3201. methods: {
  3202. handleClear: function handleClear() {
  3203. this.$emit('pick', null);
  3204. },
  3205. handleCancel: function handleCancel() {
  3206. this.$emit('pick', this.oldValue);
  3207. },
  3208. handleMinChange: function handleMinChange(date) {
  3209. this.minDate = Object(date_util_["clearMilliseconds"])(date);
  3210. this.handleChange();
  3211. },
  3212. handleMaxChange: function handleMaxChange(date) {
  3213. this.maxDate = Object(date_util_["clearMilliseconds"])(date);
  3214. this.handleChange();
  3215. },
  3216. handleChange: function handleChange() {
  3217. if (this.isValidValue([this.minDate, this.maxDate])) {
  3218. this.$refs.minSpinner.selectableRange = [[time_rangevue_type_script_lang_js_minTimeOfDay(this.minDate), this.maxDate]];
  3219. this.$refs.maxSpinner.selectableRange = [[this.minDate, time_rangevue_type_script_lang_js_maxTimeOfDay(this.maxDate)]];
  3220. this.$emit('pick', [this.minDate, this.maxDate], true);
  3221. }
  3222. },
  3223. setMinSelectionRange: function setMinSelectionRange(start, end) {
  3224. this.$emit('select-range', start, end, 'min');
  3225. this.selectionRange = [start, end];
  3226. },
  3227. setMaxSelectionRange: function setMaxSelectionRange(start, end) {
  3228. this.$emit('select-range', start, end, 'max');
  3229. this.selectionRange = [start + this.offset, end + this.offset];
  3230. },
  3231. handleConfirm: function handleConfirm() {
  3232. var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
  3233. var minSelectableRange = this.$refs.minSpinner.selectableRange;
  3234. var maxSelectableRange = this.$refs.maxSpinner.selectableRange;
  3235. this.minDate = Object(date_util_["limitTimeRange"])(this.minDate, minSelectableRange, this.format);
  3236. this.maxDate = Object(date_util_["limitTimeRange"])(this.maxDate, maxSelectableRange, this.format);
  3237. this.$emit('pick', [this.minDate, this.maxDate], visible);
  3238. },
  3239. adjustSpinners: function adjustSpinners() {
  3240. this.$refs.minSpinner.adjustSpinners();
  3241. this.$refs.maxSpinner.adjustSpinners();
  3242. },
  3243. changeSelectionRange: function changeSelectionRange(step) {
  3244. var list = this.showSeconds ? [0, 3, 6, 11, 14, 17] : [0, 3, 8, 11];
  3245. var mapping = ['hours', 'minutes'].concat(this.showSeconds ? ['seconds'] : []);
  3246. var index = list.indexOf(this.selectionRange[0]);
  3247. var next = (index + step + list.length) % list.length;
  3248. var half = list.length / 2;
  3249. if (next < half) {
  3250. this.$refs.minSpinner.emitSelectRange(mapping[next]);
  3251. } else {
  3252. this.$refs.maxSpinner.emitSelectRange(mapping[next - half]);
  3253. }
  3254. },
  3255. isValidValue: function isValidValue(date) {
  3256. return Array.isArray(date) && Object(date_util_["timeWithinRange"])(this.minDate, this.$refs.minSpinner.selectableRange) && Object(date_util_["timeWithinRange"])(this.maxDate, this.$refs.maxSpinner.selectableRange);
  3257. },
  3258. handleKeydown: function handleKeydown(event) {
  3259. var keyCode = event.keyCode;
  3260. var mapping = { 38: -1, 40: 1, 37: -1, 39: 1 };
  3261. // Left or Right
  3262. if (keyCode === 37 || keyCode === 39) {
  3263. var step = mapping[keyCode];
  3264. this.changeSelectionRange(step);
  3265. event.preventDefault();
  3266. return;
  3267. }
  3268. // Up or Down
  3269. if (keyCode === 38 || keyCode === 40) {
  3270. var _step = mapping[keyCode];
  3271. this.spinner.scrollDown(_step);
  3272. event.preventDefault();
  3273. return;
  3274. }
  3275. }
  3276. }
  3277. });
  3278. // CONCATENATED MODULE: ./packages/date-picker/src/panel/time-range.vue?vue&type=script&lang=js&
  3279. /* harmony default export */ var panel_time_rangevue_type_script_lang_js_ = (time_rangevue_type_script_lang_js_);
  3280. // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
  3281. var componentNormalizer = __webpack_require__(2);
  3282. // CONCATENATED MODULE: ./packages/date-picker/src/panel/time-range.vue
  3283. /* normalize component */
  3284. var component = Object(componentNormalizer["a" /* default */])(
  3285. panel_time_rangevue_type_script_lang_js_,
  3286. render,
  3287. staticRenderFns,
  3288. false,
  3289. null,
  3290. null,
  3291. null
  3292. )
  3293. /* hot reload */
  3294. if (false) { var api; }
  3295. component.options.__file = "packages/date-picker/src/panel/time-range.vue"
  3296. /* harmony default export */ var time_range = (component.exports);
  3297. // CONCATENATED MODULE: ./packages/date-picker/src/picker/time-picker.js
  3298. /* harmony default export */ var time_picker = ({
  3299. mixins: [picker["a" /* default */]],
  3300. name: 'TisTimePicker',
  3301. props: {
  3302. isRange: Boolean,
  3303. arrowControl: Boolean
  3304. },
  3305. data: function data() {
  3306. return {
  3307. type: ''
  3308. };
  3309. },
  3310. watch: {
  3311. isRange: function isRange(_isRange) {
  3312. if (this.picker) {
  3313. this.unmountPicker();
  3314. this.type = _isRange ? 'timerange' : 'time';
  3315. this.panel = _isRange ? time_range : time["a" /* default */];
  3316. this.mountPicker();
  3317. } else {
  3318. this.type = _isRange ? 'timerange' : 'time';
  3319. this.panel = _isRange ? time_range : time["a" /* default */];
  3320. }
  3321. }
  3322. },
  3323. created: function created() {
  3324. this.type = this.isRange ? 'timerange' : 'time';
  3325. this.panel = this.isRange ? time_range : time["a" /* default */];
  3326. }
  3327. });
  3328. // CONCATENATED MODULE: ./packages/time-picker/index.js
  3329. /* istanbul ignore next */
  3330. time_picker.install = function (Vue) {
  3331. Vue.component(time_picker.name, time_picker);
  3332. };
  3333. /* harmony default export */ var packages_time_picker = __webpack_exports__["default"] = (time_picker);
  3334. /***/ }),
  3335. /***/ 61:
  3336. /***/ (function(module, exports) {
  3337. module.exports = require("tis-ui/lib/utils/clickoutside");
  3338. /***/ }),
  3339. /***/ 65:
  3340. /***/ (function(module, exports) {
  3341. module.exports = require("tis-ui/lib/utils/scrollbar-width");
  3342. /***/ }),
  3343. /***/ 66:
  3344. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  3345. "use strict";
  3346. // ESM COMPAT FLAG
  3347. __webpack_require__.r(__webpack_exports__);
  3348. // EXTERNAL MODULE: external "tis-ui/lib/utils/resize-event"
  3349. var resize_event_ = __webpack_require__(44);
  3350. // EXTERNAL MODULE: external "tis-ui/lib/utils/scrollbar-width"
  3351. var scrollbar_width_ = __webpack_require__(65);
  3352. var scrollbar_width_default = /*#__PURE__*/__webpack_require__.n(scrollbar_width_);
  3353. // EXTERNAL MODULE: external "tis-ui/lib/utils/util"
  3354. var util_ = __webpack_require__(10);
  3355. // EXTERNAL MODULE: external "tis-ui/lib/utils/dom"
  3356. var dom_ = __webpack_require__(7);
  3357. // CONCATENATED MODULE: ./packages/scrollbar/src/util.js
  3358. var BAR_MAP = {
  3359. vertical: {
  3360. offset: 'offsetHeight',
  3361. scroll: 'scrollTop',
  3362. scrollSize: 'scrollHeight',
  3363. size: 'height',
  3364. key: 'vertical',
  3365. axis: 'Y',
  3366. client: 'clientY',
  3367. direction: 'top'
  3368. },
  3369. horizontal: {
  3370. offset: 'offsetWidth',
  3371. scroll: 'scrollLeft',
  3372. scrollSize: 'scrollWidth',
  3373. size: 'width',
  3374. key: 'horizontal',
  3375. axis: 'X',
  3376. client: 'clientX',
  3377. direction: 'left'
  3378. }
  3379. };
  3380. function renderThumbStyle(_ref) {
  3381. var move = _ref.move,
  3382. size = _ref.size,
  3383. bar = _ref.bar;
  3384. var style = {};
  3385. var translate = 'translate' + bar.axis + '(' + move + '%)';
  3386. style[bar.size] = size;
  3387. style.transform = translate;
  3388. style.msTransform = translate;
  3389. style.webkitTransform = translate;
  3390. return style;
  3391. };
  3392. // CONCATENATED MODULE: ./packages/scrollbar/src/bar.js
  3393. /* istanbul ignore next */
  3394. /* harmony default export */ var src_bar = ({
  3395. name: 'Bar',
  3396. props: {
  3397. vertical: Boolean,
  3398. size: String,
  3399. move: Number
  3400. },
  3401. computed: {
  3402. bar: function bar() {
  3403. return BAR_MAP[this.vertical ? 'vertical' : 'horizontal'];
  3404. },
  3405. wrap: function wrap() {
  3406. return this.$parent.wrap;
  3407. }
  3408. },
  3409. render: function render(h) {
  3410. var size = this.size,
  3411. move = this.move,
  3412. bar = this.bar;
  3413. return h(
  3414. 'div',
  3415. {
  3416. 'class': ['el-scrollbar__bar', 'is-' + bar.key],
  3417. on: {
  3418. 'mousedown': this.clickTrackHandler
  3419. }
  3420. },
  3421. [h('div', {
  3422. ref: 'thumb',
  3423. 'class': 'el-scrollbar__thumb',
  3424. on: {
  3425. 'mousedown': this.clickThumbHandler
  3426. },
  3427. style: renderThumbStyle({ size: size, move: move, bar: bar }) })]
  3428. );
  3429. },
  3430. methods: {
  3431. clickThumbHandler: function clickThumbHandler(e) {
  3432. // prevent click event of right button
  3433. if (e.ctrlKey || e.button === 2) {
  3434. return;
  3435. }
  3436. this.startDrag(e);
  3437. this[this.bar.axis] = e.currentTarget[this.bar.offset] - (e[this.bar.client] - e.currentTarget.getBoundingClientRect()[this.bar.direction]);
  3438. },
  3439. clickTrackHandler: function clickTrackHandler(e) {
  3440. var offset = Math.abs(e.target.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]);
  3441. var thumbHalf = this.$refs.thumb[this.bar.offset] / 2;
  3442. var thumbPositionPercentage = (offset - thumbHalf) * 100 / this.$el[this.bar.offset];
  3443. this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;
  3444. },
  3445. startDrag: function startDrag(e) {
  3446. e.stopImmediatePropagation();
  3447. this.cursorDown = true;
  3448. Object(dom_["on"])(document, 'mousemove', this.mouseMoveDocumentHandler);
  3449. Object(dom_["on"])(document, 'mouseup', this.mouseUpDocumentHandler);
  3450. document.onselectstart = function () {
  3451. return false;
  3452. };
  3453. },
  3454. mouseMoveDocumentHandler: function mouseMoveDocumentHandler(e) {
  3455. if (this.cursorDown === false) return;
  3456. var prevPage = this[this.bar.axis];
  3457. if (!prevPage) return;
  3458. var offset = (this.$el.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]) * -1;
  3459. var thumbClickPosition = this.$refs.thumb[this.bar.offset] - prevPage;
  3460. var thumbPositionPercentage = (offset - thumbClickPosition) * 100 / this.$el[this.bar.offset];
  3461. this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;
  3462. },
  3463. mouseUpDocumentHandler: function mouseUpDocumentHandler(e) {
  3464. this.cursorDown = false;
  3465. this[this.bar.axis] = 0;
  3466. Object(dom_["off"])(document, 'mousemove', this.mouseMoveDocumentHandler);
  3467. document.onselectstart = null;
  3468. }
  3469. },
  3470. destroyed: function destroyed() {
  3471. Object(dom_["off"])(document, 'mouseup', this.mouseUpDocumentHandler);
  3472. }
  3473. });
  3474. // CONCATENATED MODULE: ./packages/scrollbar/src/main.js
  3475. // reference https://github.com/noeldelgado/gemini-scrollbar/blob/master/index.js
  3476. /* istanbul ignore next */
  3477. /* harmony default export */ var main = ({
  3478. name: 'TisScrollbar',
  3479. components: { Bar: src_bar },
  3480. props: {
  3481. native: Boolean,
  3482. wrapStyle: {},
  3483. wrapClass: {},
  3484. viewClass: {},
  3485. viewStyle: {},
  3486. noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能
  3487. tag: {
  3488. type: String,
  3489. default: 'div'
  3490. }
  3491. },
  3492. data: function data() {
  3493. return {
  3494. sizeWidth: '0',
  3495. sizeHeight: '0',
  3496. moveX: 0,
  3497. moveY: 0
  3498. };
  3499. },
  3500. computed: {
  3501. wrap: function wrap() {
  3502. return this.$refs.wrap;
  3503. }
  3504. },
  3505. render: function render(h) {
  3506. var gutter = scrollbar_width_default()();
  3507. var style = this.wrapStyle;
  3508. if (gutter) {
  3509. var gutterWith = '-' + gutter + 'px';
  3510. var gutterStyle = 'margin-bottom: ' + gutterWith + '; margin-right: ' + gutterWith + ';';
  3511. if (Array.isArray(this.wrapStyle)) {
  3512. style = Object(util_["toObject"])(this.wrapStyle);
  3513. style.marginRight = style.marginBottom = gutterWith;
  3514. } else if (typeof this.wrapStyle === 'string') {
  3515. style += gutterStyle;
  3516. } else {
  3517. style = gutterStyle;
  3518. }
  3519. }
  3520. var view = h(this.tag, {
  3521. class: ['el-scrollbar__view', this.viewClass],
  3522. style: this.viewStyle,
  3523. ref: 'resize'
  3524. }, this.$slots.default);
  3525. var wrap = h(
  3526. 'div',
  3527. {
  3528. ref: 'wrap',
  3529. style: style,
  3530. on: {
  3531. 'scroll': this.handleScroll
  3532. },
  3533. 'class': [this.wrapClass, 'el-scrollbar__wrap', gutter ? '' : 'el-scrollbar__wrap--hidden-default'] },
  3534. [[view]]
  3535. );
  3536. var nodes = void 0;
  3537. if (!this.native) {
  3538. nodes = [wrap, h(src_bar, {
  3539. attrs: {
  3540. move: this.moveX,
  3541. size: this.sizeWidth }
  3542. }), h(src_bar, {
  3543. attrs: {
  3544. vertical: true,
  3545. move: this.moveY,
  3546. size: this.sizeHeight }
  3547. })];
  3548. } else {
  3549. nodes = [h(
  3550. 'div',
  3551. {
  3552. ref: 'wrap',
  3553. 'class': [this.wrapClass, 'el-scrollbar__wrap'],
  3554. style: style },
  3555. [[view]]
  3556. )];
  3557. }
  3558. return h('div', { class: 'el-scrollbar' }, nodes);
  3559. },
  3560. methods: {
  3561. handleScroll: function handleScroll() {
  3562. var wrap = this.wrap;
  3563. this.moveY = wrap.scrollTop * 100 / wrap.clientHeight;
  3564. this.moveX = wrap.scrollLeft * 100 / wrap.clientWidth;
  3565. },
  3566. update: function update() {
  3567. var heightPercentage = void 0,
  3568. widthPercentage = void 0;
  3569. var wrap = this.wrap;
  3570. if (!wrap) return;
  3571. heightPercentage = wrap.clientHeight * 100 / wrap.scrollHeight;
  3572. widthPercentage = wrap.clientWidth * 100 / wrap.scrollWidth;
  3573. this.sizeHeight = heightPercentage < 100 ? heightPercentage + '%' : '';
  3574. this.sizeWidth = widthPercentage < 100 ? widthPercentage + '%' : '';
  3575. }
  3576. },
  3577. mounted: function mounted() {
  3578. if (this.native) return;
  3579. this.$nextTick(this.update);
  3580. !this.noresize && Object(resize_event_["addResizeListener"])(this.$refs.resize, this.update);
  3581. },
  3582. beforeDestroy: function beforeDestroy() {
  3583. if (this.native) return;
  3584. !this.noresize && Object(resize_event_["removeResizeListener"])(this.$refs.resize, this.update);
  3585. }
  3586. });
  3587. // CONCATENATED MODULE: ./packages/scrollbar/index.js
  3588. /* istanbul ignore next */
  3589. main.install = function (Vue) {
  3590. Vue.component(main.name, main);
  3591. };
  3592. /* harmony default export */ var scrollbar = __webpack_exports__["default"] = (main);
  3593. /***/ }),
  3594. /***/ 7:
  3595. /***/ (function(module, exports) {
  3596. module.exports = require("tis-ui/lib/utils/dom");
  3597. /***/ }),
  3598. /***/ 8:
  3599. /***/ (function(module, exports) {
  3600. module.exports = require("tis-ui/lib/utils/date-util");
  3601. /***/ }),
  3602. /***/ 99:
  3603. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  3604. "use strict";
  3605. /* harmony import */ var tis_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7);
  3606. /* harmony import */ var tis_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tis_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0__);
  3607. /* harmony default export */ __webpack_exports__["a"] = ({
  3608. bind: function bind(el, binding, vnode) {
  3609. var interval = null;
  3610. var startTime = void 0;
  3611. var handler = function handler() {
  3612. return vnode.context[binding.expression].apply();
  3613. };
  3614. var clear = function clear() {
  3615. if (Date.now() - startTime < 100) {
  3616. handler();
  3617. }
  3618. clearInterval(interval);
  3619. interval = null;
  3620. };
  3621. Object(tis_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0__["on"])(el, 'mousedown', function (e) {
  3622. if (e.button !== 0) return;
  3623. startTime = Date.now();
  3624. Object(tis_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0__["once"])(document, 'mouseup', clear);
  3625. clearInterval(interval);
  3626. interval = setInterval(handler, 100);
  3627. });
  3628. }
  3629. });
  3630. /***/ })
  3631. /******/ });