@opentiny/vue-renderless 3.21.2 → 3.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/amount/index.js +4 -4
  2. package/anchor/index.js +1 -1
  3. package/async-flowchart/index.js +1 -1
  4. package/autocomplete/index.js +1 -1
  5. package/autocomplete/vue.js +3 -3
  6. package/base-select/index.js +19 -19
  7. package/base-select/vue.js +2 -2
  8. package/calendar/index.js +2 -2
  9. package/calendar-bar/index.js +2 -2
  10. package/calendar-bar/vue.js +1 -1
  11. package/calendar-view/index.js +66 -22
  12. package/calendar-view/vue.js +2 -3
  13. package/card/index.js +1 -1
  14. package/card-template/index.js +1 -1
  15. package/carousel/index.js +4 -4
  16. package/carousel/vue.js +1 -1
  17. package/cascader/index.js +21 -11
  18. package/cascader/vue.js +6 -5
  19. package/cascader-menu/vue.js +2 -2
  20. package/cascader-mobile/index.js +1 -1
  21. package/cascader-panel/index.js +4 -4
  22. package/cascader-panel/node.js +3 -4
  23. package/cascader-panel/vue.js +1 -1
  24. package/cascader-select/column-index.js +2 -2
  25. package/cascader-view/index.js +1 -1
  26. package/chart-bar/index.js +1 -1
  27. package/chart-candle/index.js +1 -1
  28. package/chart-core/deps/utils.js +6 -6
  29. package/chart-core/index.js +1 -1
  30. package/chart-funnel/index.js +1 -1
  31. package/chart-gauge/index.js +1 -1
  32. package/chart-line/index.js +1 -1
  33. package/chart-map/index.js +1 -1
  34. package/chart-pie/index.js +1 -1
  35. package/chart-radar/index.js +1 -1
  36. package/chart-sankey/index.js +1 -1
  37. package/chart-scatter/index.js +1 -1
  38. package/chart-waterfall/index.js +1 -1
  39. package/chart-wordcloud/index.js +1 -1
  40. package/checkbox/index.js +1 -1
  41. package/collapse-item/vue.js +1 -1
  42. package/column-list-item/index.js +1 -1
  43. package/common/deps/dom.js +20 -196
  44. package/common/deps/infinite-scroll.js +4 -43
  45. package/common/deps/popup-manager.js +1 -200
  46. package/container/index.js +2 -2
  47. package/crop/index.js +3 -3
  48. package/currency/index.js +2 -2
  49. package/date-panel/index.js +75 -25
  50. package/date-panel/vue.js +53 -21
  51. package/date-picker/vue.js +1 -1
  52. package/date-picker-mobile/index.js +1 -1
  53. package/date-range/index.js +71 -37
  54. package/date-range/vue.js +27 -23
  55. package/date-table/index.js +8 -5
  56. package/date-table/vue.js +1 -1
  57. package/dialog-box/index.js +3 -3
  58. package/dialog-box/vue.js +1 -1
  59. package/dialog-select/vue.js +7 -4
  60. package/drawer/index.js +2 -2
  61. package/drop-times/index.js +1 -1
  62. package/dropdown/index.js +11 -3
  63. package/dropdown/vue.js +2 -2
  64. package/dropdown-item/index.js +1 -1
  65. package/dropdown-item/mf.js +1 -1
  66. package/dropdown-menu/index.js +1 -1
  67. package/espace/vue.js +2 -2
  68. package/fall-menu/index.js +3 -3
  69. package/file-upload/index.js +16 -13
  70. package/file-upload/vue.js +2 -2
  71. package/filter/vue.js +1 -1
  72. package/filter-panel/vue.js +1 -2
  73. package/floating-button/index.js +1 -1
  74. package/flowchart/index.js +3 -3
  75. package/flowchart/vue.js +1 -1
  76. package/fluent-editor/index.js +5 -7
  77. package/fluent-editor/options.js +2 -2
  78. package/form/index.js +20 -2
  79. package/form-item/index.js +6 -6
  80. package/fullscreen/index.js +1 -1
  81. package/fullscreen/vue.js +1 -1
  82. package/grid/plugins/export.js +2 -2
  83. package/grid/plugins/exportExcel.js +3 -3
  84. package/grid/plugins/resize.js +2 -2
  85. package/grid/static/base/helperEqualCompare.js +1 -1
  86. package/grid/static/base/isPlainObject.js +1 -1
  87. package/grid/utils/common.js +2 -2
  88. package/grid/utils/dom.js +12 -7
  89. package/grid/utils/event.js +4 -4
  90. package/hrapprover/index.js +1 -1
  91. package/image/index.js +3 -3
  92. package/image-viewer/index.js +4 -6
  93. package/input/index.js +2 -2
  94. package/input/vue.js +1 -1
  95. package/ip-address/index.js +17 -21
  96. package/ip-address/vue.js +1 -1
  97. package/link-menu/index.js +1 -1
  98. package/link-menu/vue.js +1 -1
  99. package/load-list/index.js +1 -1
  100. package/load-list/vue.js +4 -4
  101. package/loading/index.js +2 -2
  102. package/menu/vue.js +1 -1
  103. package/milestone/index.js +6 -45
  104. package/modal/index.js +5 -5
  105. package/month-range/index.js +45 -5
  106. package/month-range/vue.js +19 -15
  107. package/month-table/index.js +5 -5
  108. package/month-table/vue.js +1 -1
  109. package/nav-menu/index.js +7 -7
  110. package/notify/index.js +3 -3
  111. package/numeric/index.js +5 -5
  112. package/option/index.js +1 -1
  113. package/option/vue.js +2 -1
  114. package/package.json +3 -2
  115. package/pager/index.js +28 -16
  116. package/pager/vue.js +27 -16
  117. package/panel/index.js +1 -1
  118. package/picker/index.js +11 -11
  119. package/picker/vue.js +2 -2
  120. package/picker-column/index.js +1 -1
  121. package/pop-upload/vue.js +1 -1
  122. package/popconfirm/vue.js +1 -1
  123. package/popeditor/index.js +6 -6
  124. package/popeditor/vue.js +2 -2
  125. package/popover/index.js +3 -3
  126. package/popover/vue.js +1 -1
  127. package/popup/index.js +3 -3
  128. package/pull-refresh/index.js +1 -1
  129. package/pull-refresh-mobile-first/index.js +1 -1
  130. package/pull-refresh-mobile-first/vue.js +4 -4
  131. package/quarter-panel/index.js +2 -2
  132. package/quarter-panel/vue.js +1 -1
  133. package/radio-group/index.js +1 -1
  134. package/rate/index.js +1 -1
  135. package/rate/vue.js +1 -1
  136. package/recycle-scroller/index.js +2 -2
  137. package/recycle-scroller/vue.js +1 -1
  138. package/rich-text/index.js +1 -1
  139. package/rich-text/table-module.js +2 -2
  140. package/river/river.js +1 -1
  141. package/river/vue.js +1 -1
  142. package/scrollbar/vue-bar.js +1 -1
  143. package/scrollbar/vue.js +1 -1
  144. package/search/index.js +3 -3
  145. package/select/index.js +26 -22
  146. package/select/vue.js +8 -7
  147. package/select-dropdown/vue.js +5 -5
  148. package/selected-box/index.js +1 -1
  149. package/signature/index.js +1 -1
  150. package/signature/vue.js +2 -2
  151. package/skeleton/index.js +1 -1
  152. package/slider/index.js +4 -4
  153. package/slider-button-group/slide-button.js +2 -2
  154. package/split/index.js +2 -2
  155. package/split/vue.js +1 -1
  156. package/statistic/index.js +1 -1
  157. package/steps/index.js +2 -3
  158. package/steps/slide-bar.js +2 -2
  159. package/sticky/vue.js +4 -4
  160. package/tab-bar/index.js +2 -2
  161. package/tab-item-mf/vue.js +1 -1
  162. package/tab-nav/index.js +4 -4
  163. package/tabbar/index.js +1 -1
  164. package/tabbar/vue.js +1 -1
  165. package/tabbar-item/index.js +1 -1
  166. package/tabs-mf/index.js +5 -5
  167. package/tabs-mf/vue-bar.js +1 -1
  168. package/tabs-mf/vue-swipe.js +1 -1
  169. package/tabs-mf/vue.js +2 -2
  170. package/tabs-mf/wheel.js +3 -3
  171. package/tag-group/vue.js +2 -2
  172. package/tall-storage/index.js +1 -1
  173. package/tall-storage/vue.js +1 -1
  174. package/time/index.js +1 -1
  175. package/time/vue.js +1 -1
  176. package/time-line/index.js +1 -1
  177. package/time-line-new/index.js +1 -1
  178. package/time-panel/index.js +2 -2
  179. package/time-panel/vue.js +1 -1
  180. package/time-range/index.js +1 -1
  181. package/time-range/vue.js +1 -1
  182. package/time-spinner/index.js +4 -4
  183. package/time-spinner/vue.js +1 -1
  184. package/timeline-item/index.js +1 -1
  185. package/toggle-menu/index.js +1 -1
  186. package/tooltip/index.js +2 -2
  187. package/tooltip/vue.js +2 -2
  188. package/top-box/index.js +3 -3
  189. package/transfer/index.js +1 -1
  190. package/transfer-panel/index.js +1 -1
  191. package/tree/index.js +9 -9
  192. package/tree/vue.js +2 -2
  193. package/tree-node/index.js +1 -1
  194. package/tree-node/vue.js +1 -1
  195. package/tree-select/index.js +1 -1
  196. package/types/async-flowchart.type.d.ts +2 -14
  197. package/types/breadcrumb-item.type.d.ts +5 -1
  198. package/types/breadcrumb.type.d.ts +5 -1
  199. package/types/button-group.type.d.ts +5 -1
  200. package/types/button.type.d.ts +1 -1
  201. package/types/cascader.type.d.ts +6 -1
  202. package/types/date-table.type.d.ts +1 -120
  203. package/types/dropdown.type.d.ts +1 -1
  204. package/types/label.type.d.ts +1 -53
  205. package/types/loading.type.d.ts +12 -0
  206. package/types/numeric.type.d.ts +3 -22
  207. package/types/pager.type.d.ts +12 -7
  208. package/types/popconfirm.type.d.ts +2 -0
  209. package/types/steps.type.d.ts +1 -0
  210. package/types/tag-group.type.d.ts +2 -14
  211. package/types/tag.type.d.ts +4 -4
  212. package/types/tooltip.type.d.ts +3 -13
  213. package/types/user-head.type.d.ts +0 -4
  214. package/upload/index.js +1 -1
  215. package/upload-list/index.js +1 -1
  216. package/upload-list/vue.js +4 -4
  217. package/user/index.js +7 -7
  218. package/user/vue.js +15 -2
  219. package/user-contact/vue.js +2 -2
  220. package/virtual-scroll-box/index.js +2 -2
  221. package/wizard/index.js +3 -3
  222. package/year-range/index.js +61 -11
  223. package/year-range/vue.js +33 -20
  224. package/year-table/index.js +7 -5
  225. package/avatar/index.js +0 -30
  226. package/avatar/vue.js +0 -22
  227. package/common/array.js +0 -115
  228. package/common/bigInt.js +0 -315
  229. package/common/browser.js +0 -81
  230. package/common/calendar/calendar.js +0 -97
  231. package/common/dataset/index.js +0 -99
  232. package/common/date.js +0 -354
  233. package/common/decimal.js +0 -155
  234. package/common/deps/ResizeObserver.js +0 -456
  235. package/common/deps/after-leave.js +0 -27
  236. package/common/deps/clickoutside.js +0 -75
  237. package/common/deps/date-util.js +0 -255
  238. package/common/deps/date.js +0 -286
  239. package/common/deps/debounce.js +0 -8
  240. package/common/deps/eSpaceCtrl.js +0 -304
  241. package/common/deps/fastdom/async.js +0 -41
  242. package/common/deps/fastdom/index.js +0 -9
  243. package/common/deps/fastdom/sandbox.js +0 -53
  244. package/common/deps/fastdom/singleton.js +0 -88
  245. package/common/deps/fullscreen/apis.js +0 -143
  246. package/common/deps/fullscreen/screenfull.js +0 -165
  247. package/common/deps/memorize.js +0 -124
  248. package/common/deps/observe-visibility.js +0 -106
  249. package/common/deps/popper.js +0 -616
  250. package/common/deps/repeat-click.js +0 -29
  251. package/common/deps/resize-event.js +0 -39
  252. package/common/deps/scroll-into-view.js +0 -29
  253. package/common/deps/scrollbar-width.js +0 -33
  254. package/common/deps/throttle.js +0 -45
  255. package/common/deps/touch-emulator.js +0 -103
  256. package/common/deps/touch.js +0 -37
  257. package/common/deps/tree-model/node.js +0 -475
  258. package/common/deps/tree-model/tree-store.js +0 -312
  259. package/common/deps/tree-model/util.js +0 -24
  260. package/common/deps/upload-ajax.js +0 -81
  261. package/common/deps/useEventListener.js +0 -54
  262. package/common/deps/useInstanceSlots.js +0 -22
  263. package/common/deps/useRect.js +0 -25
  264. package/common/deps/useRelation.js +0 -89
  265. package/common/deps/useTouch.js +0 -68
  266. package/common/deps/useUserAgent.js +0 -16
  267. package/common/deps/useWindowSize.js +0 -23
  268. package/common/deps/vue-emitter.js +0 -34
  269. package/common/deps/vue-popper.js +0 -180
  270. package/common/deps/vue-popup.js +0 -138
  271. package/common/event.js +0 -46
  272. package/common/form/const.js +0 -10
  273. package/common/function.js +0 -28
  274. package/common/global.js +0 -11
  275. package/common/index.js +0 -259
  276. package/common/object.js +0 -227
  277. package/common/prop-util.js +0 -43
  278. package/common/runtime.js +0 -79
  279. package/common/string.js +0 -417
  280. package/common/type.js +0 -66
  281. package/common/validate/index.js +0 -10
  282. package/common/validate/messages.js +0 -65
  283. package/common/validate/rules/enum.js +0 -12
  284. package/common/validate/rules/index.js +0 -18
  285. package/common/validate/rules/pattern.js +0 -20
  286. package/common/validate/rules/range.js +0 -52
  287. package/common/validate/rules/required.js +0 -11
  288. package/common/validate/rules/type.js +0 -100
  289. package/common/validate/rules/whitespace.js +0 -10
  290. package/common/validate/schema.js +0 -290
  291. package/common/validate/util.js +0 -211
  292. package/common/validate/validations/array.js +0 -22
  293. package/common/validate/validations/date.js +0 -31
  294. package/common/validate/validations/enum.js +0 -22
  295. package/common/validate/validations/float.js +0 -22
  296. package/common/validate/validations/index.js +0 -46
  297. package/common/validate/validations/integer.js +0 -22
  298. package/common/validate/validations/method.js +0 -21
  299. package/common/validate/validations/number.js +0 -25
  300. package/common/validate/validations/pattern.js +0 -21
  301. package/common/validate/validations/required.js +0 -11
  302. package/common/validate/validations/string.js +0 -33
  303. package/common/validate/validations/type.js +0 -29
  304. package/index-bar/index.js +0 -66
  305. package/index-bar/vue.js +0 -73
  306. package/index-bar-anchor/vue.js +0 -16
  307. package/label/index.js +0 -56
  308. package/label/vue.js +0 -26
  309. package/list/index.js +0 -13
  310. package/list/vue.js +0 -17
  311. package/mask/index.js +0 -13
  312. package/mask/vue.js +0 -18
  313. package/mini-picker/index.js +0 -165
  314. package/mini-picker/vue.js +0 -122
  315. package/multi-select/index.js +0 -394
  316. package/multi-select/vue.js +0 -113
  317. package/multi-select-item/index.js +0 -23
  318. package/multi-select-item/vue.js +0 -31
  319. package/toast/index.js +0 -7
  320. package/toast/vue.js +0 -19
  321. package/types/toast.type.d.ts +0 -63
  322. package/wheel/index.js +0 -165
  323. package/wheel/vue.js +0 -79
@@ -1,5 +1,5 @@
1
1
  import "../../chunk-G2ADBYYC.js";
2
- import browser from "../../common/browser";
2
+ import { browserInfo } from "@opentiny/utils";
3
3
  import { remove } from "../static";
4
4
  let resizeTimeout;
5
5
  let defaultInterval = 250;
@@ -58,7 +58,7 @@ class ResizeObserverPolyfill {
58
58
  remove(eventStore, (item) => item === this);
59
59
  }
60
60
  }
61
- const Resize = browser.isDoc ? window.ResizeObserver || ResizeObserverPolyfill : ResizeObserverPolyfill;
61
+ const Resize = browserInfo.isDoc ? window.ResizeObserver || ResizeObserverPolyfill : ResizeObserverPolyfill;
62
62
  var resize_default = Resize;
63
63
  export {
64
64
  resize_default as default
@@ -1,5 +1,5 @@
1
1
  import "../../../chunk-G2ADBYYC.js";
2
- import { isDate, isRegExp } from "../../../common/type";
2
+ import { isDate, isRegExp } from "@opentiny/utils";
3
3
  import isNumber from "./isNumber";
4
4
  import isString from "./isString";
5
5
  import isBoolean from "./isBoolean";
@@ -1,5 +1,5 @@
1
1
  import "../../../chunk-G2ADBYYC.js";
2
- import { isPlainObject } from "../../../common/type";
2
+ import { isPlainObject } from "@opentiny/utils";
3
3
  var isPlainObject_default = isPlainObject;
4
4
  export {
5
5
  isPlainObject_default as default
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  __spreadValues
3
3
  } from "../../chunk-G2ADBYYC.js";
4
- import { isNull } from "../../common/type";
5
- import { find } from "../../common/array";
4
+ import { isNull } from "@opentiny/utils";
5
+ import { find } from "@opentiny/utils";
6
6
  import { get, isFunction, set } from "../static";
7
7
  const gridSize = ["medium", "small", "mini"];
8
8
  const getSize = ({ size, $parent }) => size || ($parent && gridSize.includes($parent.size) ? $parent.size : null);
package/grid/utils/dom.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import "../../chunk-G2ADBYYC.js";
2
2
  import { getRowid } from "./common";
3
- import { hasClass, getDomNode } from "../../common/deps/dom";
4
- import { getActualTarget } from "../../common/event";
3
+ import { hasClass, getDomNode } from "@opentiny/utils";
4
+ import { getActualTarget } from "@opentiny/utils";
5
5
  import { arrayIndexOf } from "../static";
6
6
  const ATTR_NAME = "data-rowid";
7
7
  const CELL_CLS = ".tiny-grid-cell";
@@ -21,7 +21,16 @@ const rowToVisible = ($table, row) => {
21
21
  if (tableBodyVnode) {
22
22
  const gridbodyEl = tableBodyVnode.$el;
23
23
  const trEl = gridbodyEl.querySelector(`[${ATTR_NAME}="${getRowid($table, row)}"]`);
24
- if (trEl) {
24
+ if ($table.scrollYLoad) {
25
+ const isOutOfBody = () => {
26
+ const bodyRect = $table.$el.getBoundingClientRect();
27
+ const trRect = trEl.getBoundingClientRect();
28
+ return trRect.top + trRect.height / 2 > bodyRect.top + bodyRect.height;
29
+ };
30
+ if (!trEl || isOutOfBody()) {
31
+ gridbodyEl.scrollTop = ($table.afterFullData.indexOf(row) - 1) * $table.scrollYStore.rowHeight;
32
+ }
33
+ } else if (trEl) {
25
34
  const bodyHeight = gridbodyEl.clientHeight;
26
35
  const bodySrcollTop = gridbodyEl.scrollTop;
27
36
  const trOffsetTop = trEl.offsetTop + (trEl.offsetParent ? trEl.offsetParent.offsetTop : 0);
@@ -31,10 +40,6 @@ const rowToVisible = ($table, row) => {
31
40
  } else if (trOffsetTop + trHeight >= bodyHeight + bodySrcollTop) {
32
41
  gridbodyEl.scrollTop = bodySrcollTop + trHeight;
33
42
  }
34
- } else {
35
- if ($table.scrollYLoad) {
36
- gridbodyEl.scrollTop = ($table.afterFullData.indexOf(row) - 1) * $table.scrollYStore.rowHeight;
37
- }
38
43
  }
39
44
  }
40
45
  });
@@ -1,8 +1,8 @@
1
1
  import "../../chunk-G2ADBYYC.js";
2
- import browser from "../../common/browser";
2
+ import { browserInfo } from "@opentiny/utils";
3
3
  import { remove } from "../static";
4
- import { on } from "../../common/deps/dom";
5
- const wheelName = browser.isDoc && /Firefox/i.test(navigator.userAgent) ? "DOMMouseScroll" : "mousewheel";
4
+ import { on } from "@opentiny/utils";
5
+ const wheelName = browserInfo.isDoc && /Firefox/i.test(navigator.userAgent) ? "DOMMouseScroll" : "mousewheel";
6
6
  const eventStore = [];
7
7
  const invoke = ({ comp, type, cb }, event) => {
8
8
  if (type === event.type || type === "mousewheel" && event.type === wheelName) {
@@ -25,7 +25,7 @@ const GlobalEvent = {
25
25
  eventStore.filter((item) => item.capture).forEach((item) => invoke(item, event));
26
26
  }
27
27
  };
28
- if (browser.isDoc) {
28
+ if (browserInfo.isDoc) {
29
29
  on(document, "keydown", GlobalEvent.trigger);
30
30
  on(document, "contextmenu", GlobalEvent.trigger);
31
31
  on(window, "mousedown", GlobalEvent.trigger);
@@ -1,5 +1,5 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
- import { extend } from "../common/object";
2
+ import { extend } from "@opentiny/utils";
3
3
  const getHrList = ({ api, props, state }) => (deptCode) => {
4
4
  state.loading = true;
5
5
  const params = {
package/image/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
- import { on, off, getScrollContainer, isInContainer } from "../common/deps/dom";
3
- import { typeOf } from "../common/type";
2
+ import { on, off, getScrollContainer, isInContainer } from "@opentiny/utils";
3
+ import { typeOf } from "@opentiny/utils";
4
4
  import { rafThrottle } from "../image-viewer";
5
5
  import { xss } from "@opentiny/utils";
6
6
  const isSupportObjectFit = () => document.documentElement.style.objectFit !== void 0;
@@ -112,7 +112,7 @@ const mounted = ({ props, api }) => () => {
112
112
  }
113
113
  };
114
114
  const filterImageUrl = (props) => () => {
115
- const isBase64 = /^data:image\/(png|jpg|jpeg|gif);base64,([a-zA-Z0-9+/]+={0,2})/;
115
+ const isBase64 = /^data:(image|application)\/(png|jpg|jpeg|gif|octet-stream|svg\+xml);base64,([a-zA-Z0-9+/]+={0,2})/;
116
116
  return isBase64.test(props.src) ? props.src : xss.filterUrl(props.src);
117
117
  };
118
118
  export {
@@ -1,13 +1,11 @@
1
1
  import {
2
2
  __spreadValues
3
3
  } from "../chunk-G2ADBYYC.js";
4
- import { on, off } from "../common/deps/dom";
5
- import { KEY_CODE } from "../common";
6
- import PopupManager from "../common/deps/popup-manager";
4
+ import { on, off } from "@opentiny/utils";
5
+ import { KEY_CODE } from "@opentiny/utils";
6
+ import { PopupManager } from "@opentiny/utils";
7
7
  import { xss } from "@opentiny/utils";
8
- import { isBrowser } from "../common/browser";
9
- const isFirefox = () => isBrowser ? !!window.navigator.userAgent.match(/firefox/i) : false;
10
- const mousewheelEventName = isFirefox() ? "DOMMouseScroll" : "mousewheel";
8
+ const mousewheelEventName = "mousewheel";
11
9
  const rafThrottle = (fn) => {
12
10
  let locked = false;
13
11
  return function(...args) {
package/input/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
- import { omitText } from "../common/string";
2
+ import { omitText } from "@opentiny/utils";
3
+ import { isServer } from "@opentiny/utils";
3
4
  const HIDDEN_STYLE = `
4
5
  height:0 !important;visibility:hidden !important;overflow:hidden !important;
5
6
  position:absolute !important;z-index:-1000 !important;top:0 !important;right:0 !important
@@ -30,7 +31,6 @@ const STYLE = {
30
31
  BorderTopWidth: "border-top-width",
31
32
  BorderBottomWidth: "border-bottom-width"
32
33
  };
33
- const isServer = typeof window === "undefined";
34
34
  const isKorean = (text) => /([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi.test(text);
35
35
  const showBox = (state) => () => {
36
36
  if (state.inputDisabled) {
package/input/vue.js CHANGED
@@ -40,7 +40,7 @@ import {
40
40
  handleTextareaMouseUp
41
41
  } from "./index";
42
42
  import useStorageBox from "../tall-storage/vue-storage-box";
43
- import { on, off } from "../common/deps/dom";
43
+ import { on, off } from "@opentiny/utils";
44
44
  const api = [
45
45
  "blur",
46
46
  "showBox",
@@ -1,5 +1,5 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
- import { KEY_CODE, IPTHRESHOLD } from "../common";
2
+ import { KEY_CODE, IPTHRESHOLD } from "@opentiny/utils";
3
3
  const isIP6 = (str) => /^IPv6$/i.test(str);
4
4
  const isIP4 = (str) => /^IPv4$/i.test(str);
5
5
  const ipValidator = ({ props, api }) => (value) => {
@@ -53,29 +53,25 @@ const getValue = ({ api, props, state }) => () => {
53
53
  };
54
54
  const setValue = ({ api, props, state }) => (value) => {
55
55
  var _a;
56
- if (value) {
57
- if ((_a = api == null ? void 0 : api.ipValidator) == null ? void 0 : _a.call(api, value)) {
58
- if (api.isIP6(props.type)) {
59
- state.address = value.split(":").map((item) => ({ value: item }));
60
- if (state.address.length < 8) {
61
- let insertIndex = 0;
62
- state.address.forEach((item, index) => {
63
- if (item.value === "") {
64
- item.value = "0000";
65
- insertIndex = index;
66
- }
67
- });
68
- for (let i = 0; i <= 8 - state.address.length; i++) {
69
- state.address.splice(insertIndex, 0, { value: "0000" });
70
- }
71
- }
72
- } else {
73
- state.address = value.split(".").map((item) => ({ value: item }));
56
+ if (!value || !((_a = api == null ? void 0 : api.ipValidator) == null ? void 0 : _a.call(api, value))) {
57
+ const createValue = () => ({ value: "" });
58
+ state.address = api.isIP6(props.type) ? Array.from({ length: 8 }, createValue) : Array.from({ length: 4 }, createValue);
59
+ return;
60
+ }
61
+ if (api.isIP6(props.type)) {
62
+ state.address = value.split(":").map((item) => ({ value: item }));
63
+ if (state.address.length < 8) {
64
+ const missingCount = 8 - state.address.length;
65
+ const emptyIndex = state.address.findIndex((item) => item.value === "");
66
+ const insertIndex = emptyIndex >= 0 ? emptyIndex : 0;
67
+ if (emptyIndex >= 0) {
68
+ state.address[emptyIndex].value = "0000";
74
69
  }
70
+ const newItems = Array(missingCount).fill({ value: "0000" });
71
+ state.address.splice(insertIndex, 0, ...newItems);
75
72
  }
76
73
  } else {
77
- const createValue = () => ({ value: "" });
78
- state.address = api.isIP6(props.type) ? new Array(8).fill("").map(createValue) : new Array(4).fill("").map(createValue);
74
+ state.address = value.split(".").map((item) => ({ value: item }));
79
75
  }
80
76
  };
81
77
  const activeEvent = ({
package/ip-address/vue.js CHANGED
@@ -17,7 +17,7 @@ import {
17
17
  keyup,
18
18
  keydown
19
19
  } from "./index";
20
- import { KEY_CODE } from "../common";
20
+ import { KEY_CODE } from "@opentiny/utils";
21
21
  const api = ["state", "focus", "inputEvent", "blur", "keyup", "keydown", "change", "select"];
22
22
  const initState = ({
23
23
  reactive,
@@ -3,7 +3,7 @@ import {
3
3
  __spreadValues
4
4
  } from "../chunk-G2ADBYYC.js";
5
5
  import { mapTree } from "../grid/static";
6
- import { copyArray } from "../common/object";
6
+ import { copyArray } from "@opentiny/utils";
7
7
  const dialogTitle = ({ constants, props, t }) => () => props.title || t(constants.DIALOG_TITLE);
8
8
  const showDialog = (state) => () => state.boxVisibility = true;
9
9
  const hideDialog = ({ api, state, vm, props }) => () => {
package/link-menu/vue.js CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  disabledTreeNode,
12
12
  initService
13
13
  } from "./index";
14
- import { copyArray } from "../common/object";
14
+ import { copyArray } from "@opentiny/utils";
15
15
  import { setMenuKey } from "../tree-menu";
16
16
  const api = [
17
17
  "state",
@@ -1,5 +1,5 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
- import { isDisplayNone } from "../common/deps/dom";
2
+ import { isDisplayNone } from "@opentiny/utils";
3
3
  const clickList = ({ emit, props }) => () => {
4
4
  const list = {
5
5
  id: props.id,
package/load-list/vue.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
2
  import { clickList, check, clickErrorText } from "./index";
3
- import { getScrollParent } from "../common/deps/dom";
4
- import { useRect } from "../common/deps/useRect";
5
- import { useEventListener } from "../common/deps/useEventListener";
6
- import debounce from "../common/deps/debounce";
3
+ import { getScrollParent } from "@opentiny/utils";
4
+ import { useRect } from "@opentiny/vue-hooks";
5
+ import { useEventListener } from "@opentiny/vue-hooks";
6
+ import { debounce } from "@opentiny/utils";
7
7
  const api = ["state", "clickList", "check", "clickErrorText"];
8
8
  const renderless = (props, {
9
9
  inject,
package/loading/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
- import afterLeave from "../common/deps/after-leave";
3
- import { removeClass } from "../common/deps/dom";
2
+ import { afterLeave } from "@opentiny/utils";
3
+ import { removeClass } from "@opentiny/utils";
4
4
  const handleAfterLeave = (emit) => () => {
5
5
  emit("after-leave");
6
6
  };
package/menu/vue.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  filterInput,
10
10
  computeData
11
11
  } from "./index";
12
- import debounce from "../common/deps/debounce";
12
+ import { debounce } from "@opentiny/utils";
13
13
  const api = ["state", "setIsCurrent", "filterNodes", "filterInput"];
14
14
  const initState = ({ reactive, computed, props, api: api2 }) => {
15
15
  const state = reactive({
@@ -1,7 +1,7 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
- import { isBrowser } from "../common/browser";
2
+ import { isServer } from "@opentiny/utils";
3
3
  const hexToRgb = (hex) => {
4
- if (hex.includes("var") && isBrowser) {
4
+ if (hex.includes("var") && !isServer) {
5
5
  hex = hex.replace(/var\(|\)/g, "");
6
6
  hex = getComputedStyle(document.documentElement).getPropertyValue(hex);
7
7
  }
@@ -33,55 +33,16 @@ const flagOperate = ({ constants, refs, state }) => ({ event, over, text }) => {
33
33
  }
34
34
  };
35
35
  const getMileIcon = ({ constants, props }) => (node) => {
36
- const smbConstants = {
37
- STATUS_COLOR_MAP: {
38
- DEFAULT: {
39
- BORDER_COLOR: "#C2C2C2",
40
- BACKGROUND_COLOR: "#FFFFFF",
41
- COLOR: "#191919",
42
- BOX_SHADOW_PX: "0px 0px 0px 4px",
43
- FLAG_CONTENT_CLS: ".content"
44
- },
45
- COMPLETED: {
46
- BORDER_COLOR: "#191919",
47
- BACKGROUND_COLOR: "#FFFFFF",
48
- COLOR: "#191919",
49
- BOX_SHADOW_PX: "0px 0px 0px 4px",
50
- FLAG_CONTENT_CLS: ".content"
51
- },
52
- DOING: {
53
- BORDER_COLOR: "#191919",
54
- BACKGROUND_COLOR: "#191919",
55
- COLOR: "#FFFFFF",
56
- BOX_SHADOW_PX: "0px 0px 0px 4px",
57
- FLAG_CONTENT_CLS: ".content"
58
- }
59
- }
60
- };
61
36
  const status = node[props.statusField];
62
37
  const statusColor = props.milestonesStatus[status];
63
- if (props.solid || status === constants.STATUS_MAP.DOING) {
64
- return {
65
- "background-color": statusColor || smbConstants.STATUS_COLOR_MAP.DOING.BACKGROUND_COLOR + "!important",
66
- color: smbConstants.STATUS_COLOR_MAP.DOING.COLOR + "!important",
67
- "border-color": statusColor || smbConstants.STATUS_COLOR_MAP.DOING.BORDER_COLOR,
68
- boxShadow: "unset"
69
- };
70
- }
71
- if (status === constants.STATUS_MAP.COMPLETED) {
38
+ if (statusColor) {
72
39
  return {
73
- "background-color": smbConstants.STATUS_COLOR_MAP.COMPLETED.BACKGROUND_COLOR + "!important",
74
- color: statusColor || smbConstants.STATUS_COLOR_MAP.COMPLETED.COLOR + "!important",
75
- "border-color": statusColor || smbConstants.STATUS_COLOR_MAP.COMPLETED.BORDER_COLOR,
40
+ "background-color": props.solid || status === constants.STATUS_MAP.DOING ? statusColor : "",
41
+ color: props.solid && status !== constants.STATUS_MAP.COMPLETED || status === constants.STATUS_MAP.DOING ? "#fff" : statusColor,
42
+ "border-color": statusColor,
76
43
  boxShadow: "unset"
77
44
  };
78
45
  }
79
- return {
80
- background: smbConstants.STATUS_COLOR_MAP.DEFAULT.BACKGROUND_COLOR + "!important",
81
- color: statusColor || smbConstants.STATUS_COLOR_MAP.DEFAULT.COLOR + "!important",
82
- "border-color": statusColor || smbConstants.STATUS_COLOR_MAP.DEFAULT.BORDER_COLOR,
83
- boxShadow: "unset"
84
- };
85
46
  };
86
47
  const getMileContent = (props) => ({ data, index }) => {
87
48
  const content = data[props.flagBefore ? index : index + 1][props.flagField];
package/modal/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
- import { KEY_CODE } from "../common";
3
- import { on, off, addClass, hasClass, removeClass } from "../common/deps/dom";
4
- import PopupManager from "../common/deps/popup-manager";
5
- import { getDomNode } from "../common/deps/dom";
6
- import { getViewportWindow } from "../common/global";
2
+ import { KEY_CODE } from "@opentiny/utils";
3
+ import { on, off, addClass, hasClass, removeClass } from "@opentiny/utils";
4
+ import { PopupManager } from "@opentiny/utils";
5
+ import { getDomNode } from "@opentiny/utils";
6
+ import { getViewportWindow } from "@opentiny/utils";
7
7
  const DragClass = "is__drag";
8
8
  const emitZoom = ({ params, parent, emit, event }) => {
9
9
  let { $listeners, events = {} } = parent;
@@ -1,5 +1,15 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
- import { isDate, modifyWithTimeString, prevYear, nextYear, nextMonth } from "../common/deps/date-util";
2
+ import {
3
+ DATEPICKER,
4
+ isDate1 as isDate,
5
+ toDate1,
6
+ modifyDate,
7
+ formatDate,
8
+ modifyWithTimeString,
9
+ prevYear,
10
+ nextYear,
11
+ nextMonth1 as nextMonth
12
+ } from "@opentiny/utils";
3
13
  const calcDefaultValue = (defaultValue) => {
4
14
  if (Array.isArray(defaultValue)) {
5
15
  return [new Date(defaultValue[0]), new Date(defaultValue[1])];
@@ -57,7 +67,10 @@ const handleChangeRange = (state) => (val) => {
57
67
  state.maxDate = val.maxDate;
58
68
  state.rangeState = val.rangeState;
59
69
  };
60
- const handleRangePick = ({ api, state, t }) => (val, close = true) => {
70
+ const handleRangePick = ({ api, state, props, t }) => (val, close = true) => {
71
+ if (props.readonly) {
72
+ return;
73
+ }
61
74
  const defaultTime = state.defaultTime || [];
62
75
  const max = modifyWithTimeString(val.maxDate, defaultTime[1], t);
63
76
  const min = modifyWithTimeString(val.minDate, defaultTime[0], t);
@@ -78,11 +91,19 @@ const handleRangePick = ({ api, state, t }) => (val, close = true) => {
78
91
  }
79
92
  api.handleConfirm();
80
93
  };
81
- const handleShortcutClick = (api) => (shortcutObj) => {
94
+ const handleShortcutClick = (state, api, props) => (shortcutObj) => {
82
95
  if (shortcutObj.onClick) {
83
96
  const choose = {
84
97
  $emit: (type, [start, end]) => {
85
- api.doPick(start, end);
98
+ var _a;
99
+ if ((_a = props.shortcuts) == null ? void 0 : _a.length) {
100
+ state.value = [start, end];
101
+ state.leftDate = start;
102
+ state.rightDate = end;
103
+ api.handleRangePick({ minDate: start, maxDate: end });
104
+ } else {
105
+ api.doPick(start, end);
106
+ }
86
107
  }
87
108
  };
88
109
  shortcutObj.onClick(choose);
@@ -105,9 +126,14 @@ const rightNextYear = (state) => () => {
105
126
  };
106
127
  const leftNextYear = (state) => () => state.leftDate = nextYear(state.leftDate);
107
128
  const rightPrevYear = (state) => () => state.rightDate = prevYear(state.rightDate);
108
- const handleConfirm = ({ api, emit, state }) => (visible = false) => {
129
+ const handleConfirm = ({ api, emit, state, props, t }) => (visible = false) => {
109
130
  if (api.isValidValue([state.minDate, state.maxDate])) {
110
131
  emit("pick", [state.minDate, state.maxDate], visible);
132
+ const defaultFormat = DATEPICKER.DateFormats.monthrange;
133
+ const start = formatDate(state.minDate, props.format || defaultFormat, t);
134
+ const end = formatDate(state.maxDate, props.format || defaultFormat, t);
135
+ emit("update:modelValue", [start, end]);
136
+ emit("select-change", [start, end]);
111
137
  }
112
138
  };
113
139
  const isValidValue = (state) => (value) => Array.isArray(value) && value && value[1] && value[0] && isDate(value[1]) && isDate(value[0]) && value[0].getTime() <= value[1].getTime() && (typeof state.disabledDate === "function" ? !state.disabledDate(value[1]) && !state.disabledDate(value[0]) : true);
@@ -115,6 +141,19 @@ const resetView = (state) => () => {
115
141
  state.minDate = state.value && isDate(state.value[0]) ? new Date(state.value[0]) : null;
116
142
  state.maxDate = state.value && isDate(state.value[0]) ? new Date(state.value[1]) : null;
117
143
  };
144
+ const watchModelValue = ({ state }) => (val) => {
145
+ const newVal = toDate1(val == null ? void 0 : val[0]);
146
+ const newVal1 = toDate1(val == null ? void 0 : val[1]);
147
+ if (newVal && newVal1) {
148
+ const start = modifyDate(newVal, newVal.getFullYear(), newVal.getMonth() + 1, newVal.getUTCDate());
149
+ const end = modifyDate(newVal1, newVal1.getFullYear(), newVal1.getMonth() + 1, newVal1.getUTCDate());
150
+ state.value = [start, end];
151
+ state.minDate = start;
152
+ state.maxDate = end;
153
+ state.leftDate = start;
154
+ state.rightDate = end;
155
+ }
156
+ };
118
157
  export {
119
158
  calcDefaultValue,
120
159
  doPick,
@@ -130,5 +169,6 @@ export {
130
169
  rightNextYear,
131
170
  rightPrevYear,
132
171
  watchDefaultValue,
172
+ watchModelValue,
133
173
  watchValue
134
174
  };
@@ -13,9 +13,10 @@ import {
13
13
  handleChangeRange,
14
14
  handleRangePick,
15
15
  handleShortcutClick,
16
- doPick
16
+ doPick,
17
+ watchModelValue
17
18
  } from "./index";
18
- import { nextYear } from "../common/deps/date-util";
19
+ import { nextYear } from "@opentiny/utils";
19
20
  const api = [
20
21
  "state",
21
22
  "rightNextYear",
@@ -25,12 +26,13 @@ const api = [
25
26
  "handleChangeRange",
26
27
  "leftPrevYear",
27
28
  "leftNextYear",
28
- "isValidValue"
29
+ "isValidValue",
30
+ "watchModelValue"
29
31
  ];
30
- const initState = ({ reactive, computed, api: api2, t }) => {
32
+ const initState = ({ reactive, computed, api: api2, props, t }) => {
31
33
  const state = reactive({
32
- popperClass: "",
33
- value: [],
34
+ popperClass: props.popperClass || "",
35
+ value: props.modelValue || [],
34
36
  defaultValue: null,
35
37
  defaultTime: null,
36
38
  minDate: "",
@@ -38,12 +40,12 @@ const initState = ({ reactive, computed, api: api2, t }) => {
38
40
  leftDate: /* @__PURE__ */ new Date(),
39
41
  rightDate: nextYear(/* @__PURE__ */ new Date()),
40
42
  rangeState: { endDate: null, selecting: false, row: null, column: null },
41
- shortcuts: "",
43
+ shortcuts: props.shortcuts || [],
42
44
  visible: "",
43
- disabledDate: "",
44
- format: "",
45
+ disabledDate: props.disabledDate || null,
46
+ format: props.format || "",
45
47
  arrowControl: false,
46
- unlinkPanels: false,
48
+ unlinkPanels: props.unlinkPanels || false,
47
49
  btnDisabled: computed(
48
50
  () => !(state.minDate && state.maxDate && !state.selecting && api2.isValidValue([state.minDate, state.maxDate]))
49
51
  ),
@@ -60,11 +62,11 @@ const initState = ({ reactive, computed, api: api2, t }) => {
60
62
  const renderless = (props, { computed, reactive, watch }, { t, emit: $emit }) => {
61
63
  const api2 = {};
62
64
  const emit = props.emitter ? props.emitter.emit : $emit;
63
- const state = initState({ reactive, computed, api: api2, t });
65
+ const state = initState({ reactive, computed, api: api2, props, t });
64
66
  Object.assign(api2, {
65
67
  state,
66
68
  resetView: resetView(state),
67
- handleChangeRange: handleChangeRange(state),
69
+ handleChangeRange: handleChangeRange(state, props),
68
70
  isValidValue: isValidValue(state),
69
71
  leftNextYear: leftNextYear(state),
70
72
  leftPrevYear: leftPrevYear(state),
@@ -74,10 +76,12 @@ const renderless = (props, { computed, reactive, watch }, { t, emit: $emit }) =>
74
76
  watchValue: watchValue({ state }),
75
77
  handleClear: handleClear({ emit, state }),
76
78
  watchDefaultValue: watchDefaultValue({ state }),
77
- handleConfirm: handleConfirm({ api: api2, emit, state }),
78
- handleRangePick: handleRangePick({ api: api2, state, t }),
79
- handleShortcutClick: handleShortcutClick(api2)
79
+ handleConfirm: handleConfirm({ api: api2, emit, state, props, t }),
80
+ handleRangePick: handleRangePick({ api: api2, state, props, t }),
81
+ handleShortcutClick: handleShortcutClick(state, api2, props),
82
+ watchModelValue: watchModelValue({ state, api: api2 })
80
83
  });
84
+ watch(() => props.modelValue, api2.watchModelValue, { immediate: true });
81
85
  watch(() => state.value, api2.watchValue);
82
86
  watch(() => state.defaultValue, api2.watchDefaultValue);
83
87
  return api2;
@@ -1,9 +1,6 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
- import { toDate } from "../common/date";
3
- import { hasClass } from "../common/deps/dom";
4
- import { range as rangeDate, getDayCountOfMonth, nextDate } from "../common/deps/date-util";
2
+ import { range as rangeDate, getDayCountOfMonth, nextDate, toDate1, hasClass, DATEPICKER } from "@opentiny/utils";
5
3
  import { arrayFindIndex, coerceTruthyValueToArray, arrayFind } from "../date-table";
6
- import { DATEPICKER } from "../common";
7
4
  const datesInMonth = (year, month) => {
8
5
  const numOfDays = getDayCountOfMonth(year, month);
9
6
  const firstDay = new Date(year, month, 1);
@@ -122,6 +119,9 @@ const handleMouseMove = ({ api, emit, props, state }) => (event) => {
122
119
  }
123
120
  };
124
121
  const handleMonthTableClick = ({ api, emit, props }) => (event) => {
122
+ if (props.readonly) {
123
+ return;
124
+ }
125
125
  const target = getTarget(event);
126
126
  if (!target) {
127
127
  return;
@@ -160,7 +160,7 @@ const getCellStyle = ({ api, props }) => (cell) => {
160
160
  const month = cell.text;
161
161
  const defaultValue = props.defaultValue ? Array.isArray(props.defaultValue) ? props.defaultValue : [props.defaultValue] : [];
162
162
  style.disabled = typeof props.disabledDate === "function" ? datesInMonth(year, month).every(props.disabledDate) : false;
163
- const execDate = typeof props.value === "object" ? props.value : toDate(props.value);
163
+ const execDate = typeof props.value === "object" ? props.value : toDate1(props.value);
164
164
  style.current = arrayFindIndex(
165
165
  coerceTruthyValueToArray(execDate),
166
166
  (date) => date.getFullYear() === year && date.getMonth() === month
@@ -10,7 +10,7 @@ import {
10
10
  getCellStyle,
11
11
  getMonthOfCell
12
12
  } from "./index";
13
- import { DATEPICKER } from "../common";
13
+ import { DATEPICKER } from "@opentiny/utils";
14
14
  const api = ["state", "handleMonthTableClick", "handleMouseMove", "getCellStyle"];
15
15
  const renderless = (props, { computed, reactive, watch }, { t, vm, emit }) => {
16
16
  const api2 = {};
package/nav-menu/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
- import { omitText } from "../common/string";
3
- import { isEmptyObject, isObject } from "../common/type";
4
- import PopupManager from "../common/deps/popup-manager";
2
+ import { omitText } from "@opentiny/utils";
3
+ import { isEmptyObject, isObject } from "@opentiny/utils";
4
+ import { PopupManager } from "@opentiny/utils";
5
5
  import { mapTree } from "../grid/static";
6
- import { transformTreeData } from "../common/array";
7
- import { on, off } from "../common/deps/dom";
6
+ import { transformTreeData } from "@opentiny/utils";
7
+ import { on, off } from "@opentiny/utils";
8
8
  import { xss } from "@opentiny/utils";
9
- import { isBrowser } from "../common/browser";
9
+ import { isServer } from "@opentiny/utils";
10
10
  const { nextZIndex } = PopupManager;
11
11
  const computedIsShowMore = ({ props, state }) => () => !/^(retract|fixed|hidden)$/.test(props.overflow) && state.more && state.more.length;
12
12
  const computedPopClass = (state) => () => {
@@ -348,7 +348,7 @@ const skip = ({ api, router, fields }) => (item, flag = false) => {
348
348
  }
349
349
  };
350
350
  const getPoint = ({ api, parent }) => () => {
351
- if (!isBrowser)
351
+ if (isServer)
352
352
  return 0;
353
353
  else {
354
354
  const items = parent.$el.querySelectorAll(".menu>li");
package/notify/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import "../chunk-G2ADBYYC.js";
2
- import { KEY_CODE } from "../common";
3
- import { on, off } from "../common/deps/dom";
4
- import PopupManager from "../common/deps/popup-manager";
2
+ import { KEY_CODE } from "@opentiny/utils";
3
+ import { on, off } from "@opentiny/utils";
4
+ import { PopupManager } from "@opentiny/utils";
5
5
  const startTimer = ({ api, state }) => () => {
6
6
  if (state.duration > 0) {
7
7
  state.timer = setTimeout(() => {