umy-ui-table 1.2.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 (142) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +111 -0
  3. package/lib/button.js +1 -0
  4. package/lib/icon.js +1 -0
  5. package/lib/index.js +1 -0
  6. package/lib/locale/format.js +56 -0
  7. package/lib/locale/index.js +72 -0
  8. package/lib/locale/lang/en.js +123 -0
  9. package/lib/locale/lang/zh-CN.js +119 -0
  10. package/lib/mixins/locale.js +17 -0
  11. package/lib/theme-chalk/base.css +0 -0
  12. package/lib/theme-chalk/button.css +1 -0
  13. package/lib/theme-chalk/fonts/element-icons.ttf +0 -0
  14. package/lib/theme-chalk/fonts/element-icons.woff +0 -0
  15. package/lib/theme-chalk/fonts/iconfont.1785562768224.ttf +0 -0
  16. package/lib/theme-chalk/fonts/iconfont.1785562768224.woff +0 -0
  17. package/lib/theme-chalk/fonts/iconfont.1785562768224.woff2 +0 -0
  18. package/lib/theme-chalk/icon.css +1 -0
  19. package/lib/theme-chalk/index.css +1 -0
  20. package/lib/theme-chalk/u-table-column.css +0 -0
  21. package/lib/theme-chalk/u-table.css +1 -0
  22. package/lib/theme-chalk/ux-grid.css +1 -0
  23. package/lib/theme-chalk/ux-table-column.css +0 -0
  24. package/lib/u-table-column.js +1 -0
  25. package/lib/u-table.js +1 -0
  26. package/lib/umd/locale/en.js +139 -0
  27. package/lib/umd/locale/zh-CN.js +135 -0
  28. package/lib/umy-ui.common.js +1 -0
  29. package/lib/utils/svg.js +33 -0
  30. package/lib/utils/types.js +35 -0
  31. package/lib/utils/util.js +268 -0
  32. package/lib/ux-grid.js +1 -0
  33. package/lib/ux-table-column.js +1 -0
  34. package/package.json +117 -0
  35. package/packages/button/index.js +7 -0
  36. package/packages/button/src/button-group.vue +10 -0
  37. package/packages/button/src/button.vue +166 -0
  38. package/packages/checkbox/index.js +8 -0
  39. package/packages/checkbox/src/checkbox-button.vue +199 -0
  40. package/packages/checkbox/src/checkbox-group.vue +48 -0
  41. package/packages/checkbox/src/checkbox.vue +222 -0
  42. package/packages/checkbox-button/index.js +8 -0
  43. package/packages/checkbox-group/index.js +8 -0
  44. package/packages/icon/index.js +7 -0
  45. package/packages/icon/src/icon.vue +40 -0
  46. package/packages/input/index.js +2 -0
  47. package/packages/input/src/calcTextareaHeight.js +104 -0
  48. package/packages/input/src/input.vue +424 -0
  49. package/packages/option/index.js +2 -0
  50. package/packages/pagination/index.js +2 -0
  51. package/packages/pagination/src/pager.vue +163 -0
  52. package/packages/pagination/src/pagination.js +386 -0
  53. package/packages/scrollbar/index.js +8 -0
  54. package/packages/scrollbar/src/bar.js +92 -0
  55. package/packages/scrollbar/src/main.js +130 -0
  56. package/packages/scrollbar/src/util.js +34 -0
  57. package/packages/select/index.js +2 -0
  58. package/packages/select/src/navigation-mixin.js +54 -0
  59. package/packages/select/src/option-group.vue +60 -0
  60. package/packages/select/src/option.vue +163 -0
  61. package/packages/select/src/select-dropdown.vue +74 -0
  62. package/packages/select/src/select.vue +889 -0
  63. package/packages/table/index.js +8 -0
  64. package/packages/table/src/config.js +123 -0
  65. package/packages/table/src/dropdown.js +28 -0
  66. package/packages/table/src/filter-panel.vue +194 -0
  67. package/packages/table/src/layout-observer.js +68 -0
  68. package/packages/table/src/store/current.js +71 -0
  69. package/packages/table/src/store/expand.js +65 -0
  70. package/packages/table/src/store/helper.js +37 -0
  71. package/packages/table/src/store/index.js +145 -0
  72. package/packages/table/src/store/tree.js +208 -0
  73. package/packages/table/src/store/watcher.js +448 -0
  74. package/packages/table/src/table-body.js +493 -0
  75. package/packages/table/src/table-column.js +381 -0
  76. package/packages/table/src/table-footer.js +174 -0
  77. package/packages/table/src/table-header.js +537 -0
  78. package/packages/table/src/table-layout.js +231 -0
  79. package/packages/table/src/table.vue +741 -0
  80. package/packages/table/src/util.js +256 -0
  81. package/packages/tag/index.js +8 -0
  82. package/packages/tag/src/tag.vue +58 -0
  83. package/packages/tools/directives/mousewheel.js +18 -0
  84. package/packages/tools/directives/repeat-click.js +24 -0
  85. package/packages/tools/locale/format.js +46 -0
  86. package/packages/tools/locale/index.js +48 -0
  87. package/packages/tools/locale/lang/en.js +120 -0
  88. package/packages/tools/locale/lang/zh-CN.js +116 -0
  89. package/packages/tools/mixins/emitter.js +33 -0
  90. package/packages/tools/mixins/focus.js +9 -0
  91. package/packages/tools/mixins/locale.js +9 -0
  92. package/packages/tools/mixins/migrating.js +54 -0
  93. package/packages/tools/transitions/collapse-transition.js +77 -0
  94. package/packages/tools/utils/after-leave.js +27 -0
  95. package/packages/tools/utils/aria-dialog.js +90 -0
  96. package/packages/tools/utils/aria-utils.js +122 -0
  97. package/packages/tools/utils/clickoutside.js +76 -0
  98. package/packages/tools/utils/date-util.js +292 -0
  99. package/packages/tools/utils/date.js +368 -0
  100. package/packages/tools/utils/dom.js +227 -0
  101. package/packages/tools/utils/menu/aria-menubar.js +14 -0
  102. package/packages/tools/utils/menu/aria-menuitem.js +49 -0
  103. package/packages/tools/utils/menu/aria-submenu.js +59 -0
  104. package/packages/tools/utils/merge.js +15 -0
  105. package/packages/tools/utils/popper.js +1276 -0
  106. package/packages/tools/utils/popup/index.js +218 -0
  107. package/packages/tools/utils/popup/popup-manager.js +194 -0
  108. package/packages/tools/utils/resize-event.js +35 -0
  109. package/packages/tools/utils/scroll-into-view.js +27 -0
  110. package/packages/tools/utils/scrollbar-width.js +29 -0
  111. package/packages/tools/utils/shared.js +7 -0
  112. package/packages/tools/utils/svg.js +1 -0
  113. package/packages/tools/utils/types.js +28 -0
  114. package/packages/tools/utils/util.js +241 -0
  115. package/packages/tools/utils/vdom.js +5 -0
  116. package/packages/tools/utils/vue-popper.js +198 -0
  117. package/packages/tooltip/index.js +8 -0
  118. package/packages/tooltip/src/main.js +241 -0
  119. package/packages/u-table/index.js +4 -0
  120. package/packages/u-table/revise-el-table-mixins/index.js +10 -0
  121. package/packages/u-table/revise-el-table-mixins/table-extend.js +60 -0
  122. package/packages/u-table/revise-el-table-mixins/table.mixins.js +261 -0
  123. package/packages/u-table/revise-el-table-mixins/virtual-table-body-render.js +132 -0
  124. package/packages/u-table/src/u-table.vue +248 -0
  125. package/packages/u-table/u-table-mixins/index.js +483 -0
  126. package/packages/u-table/u-table-tree-mixins/methods.js +120 -0
  127. package/packages/u-table/u-table-tree-mixins/u-table-tree-mixins.js +161 -0
  128. package/packages/u-table-column/index.js +8 -0
  129. package/packages/utils/common.js +27 -0
  130. package/packages/ux-grid/index.js +6 -0
  131. package/packages/ux-grid/mixins/index.js +707 -0
  132. package/packages/ux-grid/src/interceptor.js +6 -0
  133. package/packages/ux-grid/src/ux-grid.vue +301 -0
  134. package/packages/ux-table-column/index.js +10 -0
  135. package/tools/locale/format.js +46 -0
  136. package/tools/locale/index.js +54 -0
  137. package/tools/locale/lang/en.js +120 -0
  138. package/tools/locale/lang/zh-CN.js +116 -0
  139. package/tools/mixins/locale.js +9 -0
  140. package/tools/utils/svg.js +1 -0
  141. package/tools/utils/types.js +28 -0
  142. package/tools/utils/util.js +241 -0
@@ -0,0 +1,218 @@
1
+ import Vue from 'vue';
2
+ import merge from '../merge';
3
+ import PopupManager from './popup-manager';
4
+ import getScrollBarWidth from '../scrollbar-width';
5
+ import { getStyle, addClass, removeClass, hasClass } from '../dom';
6
+
7
+ let idSeed = 1;
8
+
9
+ let scrollBarWidth;
10
+
11
+ export default {
12
+ props: {
13
+ visible: {
14
+ type: Boolean,
15
+ default: false
16
+ },
17
+ openDelay: {},
18
+ closeDelay: {},
19
+ zIndex: {},
20
+ modal: {
21
+ type: Boolean,
22
+ default: false
23
+ },
24
+ modalFade: {
25
+ type: Boolean,
26
+ default: true
27
+ },
28
+ modalClass: {},
29
+ modalAppendToBody: {
30
+ type: Boolean,
31
+ default: false
32
+ },
33
+ lockScroll: {
34
+ type: Boolean,
35
+ default: true
36
+ },
37
+ closeOnPressEscape: {
38
+ type: Boolean,
39
+ default: false
40
+ },
41
+ closeOnClickModal: {
42
+ type: Boolean,
43
+ default: false
44
+ }
45
+ },
46
+
47
+ beforeMount() {
48
+ this._popupId = 'popup-' + idSeed++;
49
+ PopupManager.register(this._popupId, this);
50
+ },
51
+
52
+ beforeDestroy() {
53
+ PopupManager.deregister(this._popupId);
54
+ PopupManager.closeModal(this._popupId);
55
+
56
+ this.restoreBodyStyle();
57
+ },
58
+
59
+ data() {
60
+ return {
61
+ opened: false,
62
+ bodyPaddingRight: null,
63
+ computedBodyPaddingRight: 0,
64
+ withoutHiddenClass: true,
65
+ rendered: false
66
+ };
67
+ },
68
+
69
+ watch: {
70
+ visible(val) {
71
+ if (val) {
72
+ if (this._opening) return;
73
+ if (!this.rendered) {
74
+ this.rendered = true;
75
+ Vue.nextTick(() => {
76
+ this.open();
77
+ });
78
+ } else {
79
+ this.open();
80
+ }
81
+ } else {
82
+ this.close();
83
+ }
84
+ }
85
+ },
86
+
87
+ methods: {
88
+ open(options) {
89
+ if (!this.rendered) {
90
+ this.rendered = true;
91
+ }
92
+
93
+ const props = merge({}, this.$props || this, options);
94
+
95
+ if (this._closeTimer) {
96
+ clearTimeout(this._closeTimer);
97
+ this._closeTimer = null;
98
+ }
99
+ clearTimeout(this._openTimer);
100
+
101
+ const openDelay = Number(props.openDelay);
102
+ if (openDelay > 0) {
103
+ this._openTimer = setTimeout(() => {
104
+ this._openTimer = null;
105
+ this.doOpen(props);
106
+ }, openDelay);
107
+ } else {
108
+ this.doOpen(props);
109
+ }
110
+ },
111
+
112
+ doOpen(props) {
113
+ if (this.$isServer) return;
114
+ if (this.willOpen && !this.willOpen()) return;
115
+ if (this.opened) return;
116
+
117
+ this._opening = true;
118
+
119
+ const dom = this.$el;
120
+
121
+ const modal = props.modal;
122
+
123
+ const zIndex = props.zIndex;
124
+ if (zIndex) {
125
+ PopupManager.zIndex = zIndex;
126
+ }
127
+
128
+ if (modal) {
129
+ if (this._closing) {
130
+ PopupManager.closeModal(this._popupId);
131
+ this._closing = false;
132
+ }
133
+ PopupManager.openModal(this._popupId, PopupManager.nextZIndex(), this.modalAppendToBody ? undefined : dom, props.modalClass, props.modalFade);
134
+ if (props.lockScroll) {
135
+ this.withoutHiddenClass = !hasClass(document.body, 'el-popup-parent--hidden');
136
+ if (this.withoutHiddenClass) {
137
+ this.bodyPaddingRight = document.body.style.paddingRight;
138
+ this.computedBodyPaddingRight = parseInt(getStyle(document.body, 'paddingRight'), 10);
139
+ }
140
+ scrollBarWidth = getScrollBarWidth();
141
+ let bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;
142
+ let bodyOverflowY = getStyle(document.body, 'overflowY');
143
+ if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === 'scroll') && this.withoutHiddenClass) {
144
+ document.body.style.paddingRight = this.computedBodyPaddingRight + scrollBarWidth + 'px';
145
+ }
146
+ addClass(document.body, 'el-popup-parent--hidden');
147
+ }
148
+ }
149
+
150
+ if (getComputedStyle(dom).position === 'static') {
151
+ dom.style.position = 'absolute';
152
+ }
153
+
154
+ dom.style.zIndex = PopupManager.nextZIndex();
155
+ this.opened = true;
156
+
157
+ this.onOpen && this.onOpen();
158
+
159
+ this.doAfterOpen();
160
+ },
161
+
162
+ doAfterOpen() {
163
+ this._opening = false;
164
+ },
165
+
166
+ close() {
167
+ if (this.willClose && !this.willClose()) return;
168
+
169
+ if (this._openTimer !== null) {
170
+ clearTimeout(this._openTimer);
171
+ this._openTimer = null;
172
+ }
173
+ clearTimeout(this._closeTimer);
174
+
175
+ const closeDelay = Number(this.closeDelay);
176
+
177
+ if (closeDelay > 0) {
178
+ this._closeTimer = setTimeout(() => {
179
+ this._closeTimer = null;
180
+ this.doClose();
181
+ }, closeDelay);
182
+ } else {
183
+ this.doClose();
184
+ }
185
+ },
186
+
187
+ doClose() {
188
+ this._closing = true;
189
+
190
+ this.onClose && this.onClose();
191
+
192
+ if (this.lockScroll) {
193
+ setTimeout(this.restoreBodyStyle, 200);
194
+ }
195
+
196
+ this.opened = false;
197
+
198
+ this.doAfterClose();
199
+ },
200
+
201
+ doAfterClose() {
202
+ PopupManager.closeModal(this._popupId);
203
+ this._closing = false;
204
+ },
205
+
206
+ restoreBodyStyle() {
207
+ if (this.modal && this.withoutHiddenClass) {
208
+ document.body.style.paddingRight = this.bodyPaddingRight;
209
+ removeClass(document.body, 'el-popup-parent--hidden');
210
+ }
211
+ this.withoutHiddenClass = true;
212
+ }
213
+ }
214
+ };
215
+
216
+ export {
217
+ PopupManager
218
+ };
@@ -0,0 +1,194 @@
1
+ import Vue from 'vue';
2
+ import { addClass, removeClass } from '../dom';
3
+
4
+ let hasModal = false;
5
+ let hasInitZIndex = false;
6
+ let zIndex;
7
+
8
+ const getModal = function() {
9
+ if (Vue.prototype.$isServer) return;
10
+ let modalDom = PopupManager.modalDom;
11
+ if (modalDom) {
12
+ hasModal = true;
13
+ } else {
14
+ hasModal = false;
15
+ modalDom = document.createElement('div');
16
+ PopupManager.modalDom = modalDom;
17
+
18
+ modalDom.addEventListener('touchmove', function(event) {
19
+ event.preventDefault();
20
+ event.stopPropagation();
21
+ });
22
+
23
+ modalDom.addEventListener('click', function() {
24
+ PopupManager.doOnModalClick && PopupManager.doOnModalClick();
25
+ });
26
+ }
27
+
28
+ return modalDom;
29
+ };
30
+
31
+ const instances = {};
32
+
33
+ const PopupManager = {
34
+ modalFade: true,
35
+
36
+ getInstance: function(id) {
37
+ return instances[id];
38
+ },
39
+
40
+ register: function(id, instance) {
41
+ if (id && instance) {
42
+ instances[id] = instance;
43
+ }
44
+ },
45
+
46
+ deregister: function(id) {
47
+ if (id) {
48
+ instances[id] = null;
49
+ delete instances[id];
50
+ }
51
+ },
52
+
53
+ nextZIndex: function() {
54
+ return PopupManager.zIndex++;
55
+ },
56
+
57
+ modalStack: [],
58
+
59
+ doOnModalClick: function() {
60
+ const topItem = PopupManager.modalStack[PopupManager.modalStack.length - 1];
61
+ if (!topItem) return;
62
+
63
+ const instance = PopupManager.getInstance(topItem.id);
64
+ if (instance && instance.closeOnClickModal) {
65
+ instance.close();
66
+ }
67
+ },
68
+
69
+ openModal: function(id, zIndex, dom, modalClass, modalFade) {
70
+ if (Vue.prototype.$isServer) return;
71
+ if (!id || zIndex === undefined) return;
72
+ this.modalFade = modalFade;
73
+
74
+ const modalStack = this.modalStack;
75
+
76
+ for (let i = 0, j = modalStack.length; i < j; i++) {
77
+ const item = modalStack[i];
78
+ if (item.id === id) {
79
+ return;
80
+ }
81
+ }
82
+
83
+ const modalDom = getModal();
84
+
85
+ addClass(modalDom, 'v-modal');
86
+ if (this.modalFade && !hasModal) {
87
+ addClass(modalDom, 'v-modal-enter');
88
+ }
89
+ if (modalClass) {
90
+ let classArr = modalClass.trim().split(/\s+/);
91
+ classArr.forEach(item => addClass(modalDom, item));
92
+ }
93
+ setTimeout(() => {
94
+ removeClass(modalDom, 'v-modal-enter');
95
+ }, 200);
96
+
97
+ if (dom && dom.parentNode && dom.parentNode.nodeType !== 11) {
98
+ dom.parentNode.appendChild(modalDom);
99
+ } else {
100
+ document.body.appendChild(modalDom);
101
+ }
102
+
103
+ if (zIndex) {
104
+ modalDom.style.zIndex = zIndex;
105
+ }
106
+ modalDom.tabIndex = 0;
107
+ modalDom.style.display = '';
108
+
109
+ this.modalStack.push({ id: id, zIndex: zIndex, modalClass: modalClass });
110
+ },
111
+
112
+ closeModal: function(id) {
113
+ const modalStack = this.modalStack;
114
+ const modalDom = getModal();
115
+
116
+ if (modalStack.length > 0) {
117
+ const topItem = modalStack[modalStack.length - 1];
118
+ if (topItem.id === id) {
119
+ if (topItem.modalClass) {
120
+ let classArr = topItem.modalClass.trim().split(/\s+/);
121
+ classArr.forEach(item => removeClass(modalDom, item));
122
+ }
123
+
124
+ modalStack.pop();
125
+ if (modalStack.length > 0) {
126
+ modalDom.style.zIndex = modalStack[modalStack.length - 1].zIndex;
127
+ }
128
+ } else {
129
+ for (let i = modalStack.length - 1; i >= 0; i--) {
130
+ if (modalStack[i].id === id) {
131
+ modalStack.splice(i, 1);
132
+ break;
133
+ }
134
+ }
135
+ }
136
+ }
137
+
138
+ if (modalStack.length === 0) {
139
+ if (this.modalFade) {
140
+ addClass(modalDom, 'v-modal-leave');
141
+ }
142
+ setTimeout(() => {
143
+ if (modalStack.length === 0) {
144
+ if (modalDom.parentNode) modalDom.parentNode.removeChild(modalDom);
145
+ modalDom.style.display = 'none';
146
+ PopupManager.modalDom = undefined;
147
+ }
148
+ removeClass(modalDom, 'v-modal-leave');
149
+ }, 200);
150
+ }
151
+ }
152
+ };
153
+
154
+ Object.defineProperty(PopupManager, 'zIndex', {
155
+ configurable: true,
156
+ get() {
157
+ if (!hasInitZIndex) {
158
+ zIndex = zIndex || (Vue.prototype.$ELEMENT || {}).zIndex || 2000;
159
+ hasInitZIndex = true;
160
+ }
161
+ return zIndex;
162
+ },
163
+ set(value) {
164
+ zIndex = value;
165
+ }
166
+ });
167
+
168
+ const getTopPopup = function() {
169
+ if (Vue.prototype.$isServer) return;
170
+ if (PopupManager.modalStack.length > 0) {
171
+ const topPopup = PopupManager.modalStack[PopupManager.modalStack.length - 1];
172
+ if (!topPopup) return;
173
+ const instance = PopupManager.getInstance(topPopup.id);
174
+
175
+ return instance;
176
+ }
177
+ };
178
+
179
+ if (!Vue.prototype.$isServer) {
180
+ // handle `esc` key when the popup is shown
181
+ window.addEventListener('keydown', function(event) {
182
+ if (event.keyCode === 27) {
183
+ const topPopup = getTopPopup();
184
+
185
+ if (topPopup && topPopup.closeOnPressEscape) {
186
+ topPopup.handleClose
187
+ ? topPopup.handleClose()
188
+ : (topPopup.handleAction ? topPopup.handleAction('cancel') : topPopup.close());
189
+ }
190
+ }
191
+ });
192
+ }
193
+
194
+ export default PopupManager;
@@ -0,0 +1,35 @@
1
+ import ResizeObserver from 'resize-observer-polyfill';
2
+
3
+ const isServer = typeof window === 'undefined';
4
+
5
+ /* istanbul ignore next */
6
+ const resizeHandler = function(entries) {
7
+ for (let entry of entries) {
8
+ const listeners = entry.target.__resizeListeners__ || [];
9
+ if (listeners.length) {
10
+ listeners.forEach(fn => {
11
+ fn();
12
+ });
13
+ }
14
+ }
15
+ };
16
+
17
+ /* istanbul ignore next */
18
+ export const addResizeListener = function(element, fn) {
19
+ if (isServer) return;
20
+ if (!element.__resizeListeners__) {
21
+ element.__resizeListeners__ = [];
22
+ element.__ro__ = new ResizeObserver(resizeHandler);
23
+ element.__ro__.observe(element);
24
+ }
25
+ element.__resizeListeners__.push(fn);
26
+ };
27
+
28
+ /* istanbul ignore next */
29
+ export const removeResizeListener = function(element, fn) {
30
+ if (!element || !element.__resizeListeners__) return;
31
+ element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
32
+ if (!element.__resizeListeners__.length) {
33
+ element.__ro__.disconnect();
34
+ }
35
+ };
@@ -0,0 +1,27 @@
1
+ import Vue from 'vue';
2
+
3
+ export default function scrollIntoView(container, selected) {
4
+ if (Vue.prototype.$isServer) return;
5
+
6
+ if (!selected) {
7
+ container.scrollTop = 0;
8
+ return;
9
+ }
10
+
11
+ const offsetParents = [];
12
+ let pointer = selected.offsetParent;
13
+ while (pointer && container !== pointer && container.contains(pointer)) {
14
+ offsetParents.push(pointer);
15
+ pointer = pointer.offsetParent;
16
+ }
17
+ const top = selected.offsetTop + offsetParents.reduce((prev, curr) => (prev + curr.offsetTop), 0);
18
+ const bottom = top + selected.offsetHeight;
19
+ const viewRectTop = container.scrollTop;
20
+ const viewRectBottom = viewRectTop + container.clientHeight;
21
+
22
+ if (top < viewRectTop) {
23
+ container.scrollTop = top;
24
+ } else if (bottom > viewRectBottom) {
25
+ container.scrollTop = bottom - container.clientHeight;
26
+ }
27
+ }
@@ -0,0 +1,29 @@
1
+ import Vue from 'vue';
2
+
3
+ let scrollBarWidth;
4
+
5
+ export default function() {
6
+ if (Vue.prototype.$isServer) return 0;
7
+ if (scrollBarWidth !== undefined) return scrollBarWidth;
8
+
9
+ const outer = document.createElement('div');
10
+ outer.className = 'el-scrollbar__wrap';
11
+ outer.style.visibility = 'hidden';
12
+ outer.style.width = '100px';
13
+ outer.style.position = 'absolute';
14
+ outer.style.top = '-9999px';
15
+ document.body.appendChild(outer);
16
+
17
+ const widthNoScroll = outer.offsetWidth;
18
+ outer.style.overflow = 'scroll';
19
+
20
+ const inner = document.createElement('div');
21
+ inner.style.width = '100%';
22
+ outer.appendChild(inner);
23
+
24
+ const widthWithScroll = inner.offsetWidth;
25
+ outer.parentNode.removeChild(outer);
26
+ scrollBarWidth = widthNoScroll - widthWithScroll;
27
+
28
+ return scrollBarWidth;
29
+ };
@@ -0,0 +1,7 @@
1
+ export function isDef(val) {
2
+ return val !== undefined && val !== null;
3
+ }
4
+ export function isKorean(text) {
5
+ const reg = /([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi;
6
+ return reg.test(text);
7
+ }