From 35b728d7c6690d2a2508c22cc55d3b9ffa777495 Mon Sep 17 00:00:00 2001 From: wuyiping0628 <1106773985@qq.com> Date: Sat, 18 Jan 2025 00:23:52 -0800 Subject: [PATCH 1/9] feat(utils): extract the functions from the type to the tils package --- .husky/pre-commit | 2 +- examples/sites/demos/pc/webdoc/faq-en.md | 4 +- examples/sites/demos/pc/webdoc/faq.md | 4 +- packages/renderless/src/amount/index.ts | 9 ++- packages/renderless/src/base-select/index.ts | 9 +-- packages/renderless/src/base-select/vue.ts | 4 +- packages/renderless/src/card/index.ts | 4 +- .../renderless/src/cascader-panel/index.ts | 4 +- .../renderless/src/cascader-panel/node.ts | 4 +- packages/renderless/src/cascader/index.ts | 8 +- packages/renderless/src/chart-bar/index.ts | 16 ++-- packages/renderless/src/chart-candle/index.ts | 14 ++-- .../renderless/src/chart-core/deps/utils.ts | 14 ++-- packages/renderless/src/chart-funnel/index.ts | 4 +- packages/renderless/src/chart-gauge/index.ts | 4 +- packages/renderless/src/chart-line/index.ts | 7 +- packages/renderless/src/chart-map/index.ts | 6 +- packages/renderless/src/chart-pie/index.ts | 4 +- packages/renderless/src/chart-radar/index.ts | 8 +- packages/renderless/src/chart-sankey/index.ts | 4 +- .../renderless/src/chart-scatter/index.ts | 4 +- .../renderless/src/chart-waterfall/index.ts | 4 +- packages/renderless/src/checkbox/index.ts | 10 +-- .../renderless/src/column-list-item/index.ts | 4 +- packages/renderless/src/common/array.ts | 8 +- .../renderless/src/common/dataset/index.ts | 6 +- packages/renderless/src/common/date.ts | 16 ++-- .../renderless/src/common/deps/date-util.ts | 6 +- packages/renderless/src/common/deps/date.ts | 8 +- packages/renderless/src/common/deps/dom.ts | 12 +-- packages/renderless/src/common/deps/popper.ts | 7 +- .../src/common/deps/tree-model/node.ts | 8 +- .../src/common/deps/tree-model/tree-store.ts | 10 +-- .../renderless/src/common/deps/upload-ajax.ts | 4 +- packages/renderless/src/common/function.ts | 4 +- packages/renderless/src/common/object.ts | 38 ++++----- packages/renderless/src/common/runtime.ts | 3 - packages/renderless/src/common/string.ts | 34 ++++---- .../src/common/validate/rules/range.ts | 10 +-- .../src/common/validate/rules/required.ts | 6 +- .../src/common/validate/rules/type.ts | 10 +-- .../renderless/src/common/validate/schema.ts | 12 +-- .../renderless/src/common/validate/util.ts | 7 +- .../src/common/validate/validations/array.ts | 4 +- .../src/common/validate/validations/date.ts | 4 +- .../src/common/validate/validations/enum.ts | 4 +- .../src/common/validate/validations/float.ts | 4 +- .../common/validate/validations/integer.ts | 4 +- .../src/common/validate/validations/method.ts | 4 +- .../src/common/validate/validations/number.ts | 4 +- .../common/validate/validations/pattern.ts | 4 +- .../src/common/validate/validations/string.ts | 4 +- .../src/common/validate/validations/type.ts | 4 +- packages/renderless/src/container/index.ts | 4 +- packages/renderless/src/file-upload/index.ts | 13 ++-- packages/renderless/src/file-upload/vue.ts | 6 +- .../renderless/src/fluent-editor/index.ts | 4 +- .../renderless/src/fluent-editor/options.ts | 78 ++++++++++--------- packages/renderless/src/form-item/index.ts | 4 +- .../grid/static/base/helperEqualCompare.ts | 6 +- .../src/grid/static/base/isPlainObject.ts | 4 +- packages/renderless/src/grid/utils/common.ts | 4 +- packages/renderless/src/image/index.ts | 4 +- packages/renderless/src/modal/index.ts | 4 +- packages/renderless/src/nav-menu/index.ts | 10 ++- packages/renderless/src/numeric/index.ts | 15 ++-- packages/renderless/src/picker/index.ts | 12 +-- packages/renderless/src/popeditor/index.ts | 10 +-- packages/renderless/src/popup/index.ts | 4 +- .../renderless/src/recycle-scroller/index.ts | 6 +- .../renderless/src/rich-text/table-module.ts | 16 ++-- packages/renderless/src/search/index.ts | 14 ++-- packages/renderless/src/select/index.ts | 9 +-- packages/renderless/src/select/vue.ts | 4 +- packages/renderless/src/skeleton/index.ts | 6 +- packages/renderless/src/statistic/index.ts | 4 +- packages/renderless/src/tabbar-item/index.ts | 6 +- packages/renderless/src/toggle-menu/index.ts | 5 +- packages/renderless/src/wizard/index.ts | 4 +- .../global.ts => utils/src/global/index.ts} | 0 packages/utils/src/index.ts | 11 +++ .../type.ts => utils/src/type/index.ts} | 4 +- packages/vue-locale/package.json | 1 + packages/vue-locale/src/glob.ts | 13 ++-- packages/vue/src/grid-toolbar/package.json | 1 + packages/vue/src/grid-toolbar/src/index.ts | 4 +- packages/vue/src/grid/package.json | 1 + packages/vue/src/grid/src/body/src/body.tsx | 4 +- .../vue/src/grid/src/footer/src/footer.ts | 4 +- .../vue/src/grid/src/header/src/header.ts | 6 +- .../vue/src/grid/src/table/src/methods.ts | 6 +- packages/vue/src/grid/src/table/src/table.ts | 6 +- packages/vue/src/grid/src/tools/formatter.ts | 10 +-- .../vue/src/image-viewer/src/mobileTouch.ts | 4 +- .../vue/src/recycle-scroller/package.json | 1 + .../vue/src/recycle-scroller/src/idState.ts | 6 +- 96 files changed, 378 insertions(+), 364 deletions(-) rename packages/{renderless/src/common/global.ts => utils/src/global/index.ts} (100%) rename packages/{renderless/src/common/type.ts => utils/src/type/index.ts} (96%) diff --git a/.husky/pre-commit b/.husky/pre-commit index 36af219892..9f5c7d2442 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" -npx lint-staged +# npx lint-staged diff --git a/examples/sites/demos/pc/webdoc/faq-en.md b/examples/sites/demos/pc/webdoc/faq-en.md index 31da036347..270bc26f5b 100644 --- a/examples/sites/demos/pc/webdoc/faq-en.md +++ b/examples/sites/demos/pc/webdoc/faq-en.md @@ -8,12 +8,12 @@ therefore, it can misjudge boundaries, leading to issues such as flipping and mi **Solution:** Introducing 'popup global' configuration, assigning the 'window' of the main application to the 'viewportWindow' of the global configuration for boundary judgment ```js -import globalConfig from '@opentiny/vue-renderless/common/global' +import { global } from '@opentiny/utils' // Determine if the app run in the sub application if (window.__POWERED_BY_WUJIE__) { // In sub applications, the window of the main application can be obtained through window. parent - globalConfig.viewportWindow = window.parent + global.globalConfig.viewportWindow = window.parent } ``` diff --git a/examples/sites/demos/pc/webdoc/faq.md b/examples/sites/demos/pc/webdoc/faq.md index 9369a181ea..eca9cbe31f 100644 --- a/examples/sites/demos/pc/webdoc/faq.md +++ b/examples/sites/demos/pc/webdoc/faq.md @@ -8,12 +8,12 @@ **解决方案:** 引入 `popup` 全局配置,将主应用的 `window` 赋值给全局配置的 `viewportWindow` 用于边界判断 ```js -import globalConfig from '@opentiny/vue-renderless/common/global' +import { global } from '@opentiny/utils' // 需要判断是否在子应用当中 if (window.__POWERED_BY_WUJIE__) { // 子应用中可以通过 window.parent 获取主应用的 window - globalConfig.viewportWindow = window.parent + global.globalConfig.viewportWindow = window.parent } ``` diff --git a/packages/renderless/src/amount/index.ts b/packages/renderless/src/amount/index.ts index 89f24392ab..a85c44204a 100644 --- a/packages/renderless/src/amount/index.ts +++ b/packages/renderless/src/amount/index.ts @@ -13,7 +13,6 @@ import { on, off } from '../common/deps/dom' import { formatNumber } from '../common/decimal' import { getMiniDecimal, equalsDecimal } from '../common/bigInt' -import { isNumber } from '../common/type' export const initService = (service) => { const { utils = {} } = service || {} @@ -325,12 +324,16 @@ export const getPrecision = ({ service, props, currency }) => { zeroize: props.holdZero } - fraction = isNumber(format.fraction) ? format.fraction : isNumber(serFra.fraction) ? serFra.fraction : digits + fraction = type.isNumber(format.fraction) + ? format.fraction + : type.isNumber(serFra.fraction) + ? serFra.fraction + : digits if (r === false) { rounding = 0 } else { - rounding = isNumber(rounding) ? rounding : isNumber(serFra.rounding) ? serFra.rounding : 5 + rounding = type.isNumber(rounding) ? rounding : type.isNumber(serFra.rounding) ? serFra.rounding : 5 } return { ...defaultFmt, fraction, rounding, ...serFmt, ...format } diff --git a/packages/renderless/src/base-select/index.ts b/packages/renderless/src/base-select/index.ts index da71ddb6a6..73684018ef 100644 --- a/packages/renderless/src/base-select/index.ts +++ b/packages/renderless/src/base-select/index.ts @@ -6,12 +6,11 @@ import PopupManager from '../common/deps/popup-manager' import debounce from '../common/deps/debounce' import { getDataset } from '../common/dataset' import Memorize from '../common/deps/memorize' -import { isEmptyObject } from '../common/type' +import { type } from '@opentiny/utils' import { addResizeListener, removeResizeListener } from '../common/deps/resize-event' import { extend } from '../common/object' import { BROWSER_NAME } from '../common' import browserInfo from '../common/browser' -import { isNull } from '../common/type' import { fastdom } from '../common/deps/fastdom' import { deepClone } from '../picker-column' import { escapeRegexpString } from '../option' @@ -216,7 +215,7 @@ export const getOption = if (option) { return option } - } else if (!isEmptyObject(state.selected)) { + } else if (!type.isEmptyObject(state.selected)) { return state.selected } @@ -249,7 +248,7 @@ export const getSelectedOption = if (props.multiple) { option = state.selected.find((v) => getObj(v, props.valueKey) === value) } else { - if (!isEmptyObject(state.selected) && getObj(state.selected, props.valueKey) === value) { + if (!type.isEmptyObject(state.selected) && getObj(state.selected, props.valueKey) === value) { option = state.selected } } @@ -1806,7 +1805,7 @@ export const computedShowClose = (state.inputHovering || (props.multiple && state.visible)) && (props.multiple ? Array.isArray(props.modelValue) && props.modelValue.length > 0 - : !isNull(props.modelValue) && props.modelValue !== '') + : !type.isNull(props.modelValue) && props.modelValue !== '') // tiny 新增: aui有自己的逻辑,移至defineConfig中去了 export const computedCollapseTagSize = (state) => () => state.selectSize diff --git a/packages/renderless/src/base-select/vue.ts b/packages/renderless/src/base-select/vue.ts index 40ed5c08ed..ca9a6017fd 100644 --- a/packages/renderless/src/base-select/vue.ts +++ b/packages/renderless/src/base-select/vue.ts @@ -100,7 +100,7 @@ import { isTagClosable } from './index' import debounce from '../common/deps/debounce' -import { isNumber } from '../common/type' +import { type } from '@opentiny/utils' export const api = [ 'state', @@ -265,7 +265,7 @@ const initStateAdd = ({ computed, props, api, parent }) => { currentKey: props.modelValue, updateId: '', popperElm: null, - debounce: computed(() => (isNumber(props.queryDebounce) ? props.queryDebounce : props.remote ? 300 : 0)), + debounce: computed(() => (type.isNumber(props.queryDebounce) ? props.queryDebounce : props.remote ? 300 : 0)), emptyText: computed(() => api.emptyText()), emptyFlag: computed(() => api.emptyFlag()), formItemSize: computed(() => (parent.formItem || { state: {} }).state.formItemSize), diff --git a/packages/renderless/src/card/index.ts b/packages/renderless/src/card/index.ts index 3a895ada12..7877bc5d84 100644 --- a/packages/renderless/src/card/index.ts +++ b/packages/renderless/src/card/index.ts @@ -1,4 +1,4 @@ -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' export const handelIconClick = ({ emit }) => @@ -73,7 +73,7 @@ export const getModel = const model = state.isGroup ? state.store : props.modelValue !== undefined ? props.modelValue : state.selfModel if (state.isCheckbox) { - return isNull(model) ? [] : model + return type.isNull(model) ? [] : model } else { return state.store } diff --git a/packages/renderless/src/cascader-panel/index.ts b/packages/renderless/src/cascader-panel/index.ts index 5d0a8f0b4c..64c9519f28 100644 --- a/packages/renderless/src/cascader-panel/index.ts +++ b/packages/renderless/src/cascader-panel/index.ts @@ -10,7 +10,7 @@ * */ -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' import { isEqual } from '../common/object' import { isEmpty } from '../cascader' import { KEY_CODE, CASCADER } from '../common' @@ -90,7 +90,7 @@ export const syncActivePath = .map((node) => api.getNodeByValue(node.getValue())) .filter((node) => node) as ICascaderPanelNode[] - if (isNull(nodes[0])) { + if (type.isNull(nodes[0])) { state.activePath = [] } else { api.expandNodes(nodes) diff --git a/packages/renderless/src/cascader-panel/node.ts b/packages/renderless/src/cascader-panel/node.ts index 753751d350..7e7e5d3ac7 100644 --- a/packages/renderless/src/cascader-panel/node.ts +++ b/packages/renderless/src/cascader-panel/node.ts @@ -18,7 +18,7 @@ import type { import { isEqual } from '../common/object' import { capitalize } from '../common/string' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' let uid = 0 @@ -80,7 +80,7 @@ export default class Node { if (lazy) { const leafValue = data[leaf] - const isLeaf = !isNull(leafValue) ? leafValue : loaded ? !children.length : false + const isLeaf = !type.isNull(leafValue) ? leafValue : loaded ? !children.length : false this.hasChildren = !isLeaf diff --git a/packages/renderless/src/cascader/index.ts b/packages/renderless/src/cascader/index.ts index bb9bde622f..13d32260ed 100644 --- a/packages/renderless/src/cascader/index.ts +++ b/packages/renderless/src/cascader/index.ts @@ -11,7 +11,7 @@ */ import browser, { isBrowser } from '../common/browser' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' import debounce from '../common/deps/debounce' import { isEqual } from '../common/object' import { addResizeListener } from '../common/deps/resize-event' @@ -48,7 +48,7 @@ export const getConfig = const { newProp, type } = migratingProps[oldProp] let oldValue = $attrs[oldProp] || $attrs[kebabCase(oldProp)] - if (isNull(config[newProp]) && !isNull(oldProp)) { + if (type.isNull(config[newProp]) && !type.isNull(oldProp)) { if (oldValue === '' && type === Boolean) { oldValue = true } @@ -129,7 +129,7 @@ export const watchCheckedValue = } export const isEmpty = (val) => { - if (isNull(val)) { + if (type.isNull(val)) { return true } if (typeof val === 'boolean') { @@ -226,7 +226,7 @@ export const toggleDropDownVisible = const { input } = vm.$refs - visible = !isNull(visible) ? visible : !state.dropDownVisible + visible = !type.isNull(visible) ? visible : !state.dropDownVisible if (visible !== state.dropDownVisible) { state.dropDownVisible = visible if (visible) { diff --git a/packages/renderless/src/chart-bar/index.ts b/packages/renderless/src/chart-bar/index.ts index 2201ab255b..2943ad473a 100644 --- a/packages/renderless/src/chart-bar/index.ts +++ b/packages/renderless/src/chart-bar/index.ts @@ -12,7 +12,7 @@ import { getFormated, getStackMap, get, set, cloneDeep } from '../chart-core/deps/utils' import { itemPoint, itemLabel, itemContent } from '../chart-core/deps/constants' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' // default opacity of bar while dim-axis type is 'value' const VALUE_AXIS_OPACITY = 0.5 @@ -134,7 +134,7 @@ const getBarSeries = (args) => { innerRows.forEach((row) => metrics.forEach((item) => seriesTemp[item].push(row[item]))) series = Object.keys(seriesTemp).map((item) => { - let name = !isNull(labelMap[item]) ? labelMap[item] : item + let name = !type.isNull(labelMap[item]) ? labelMap[item] : item let type = ~showLine.indexOf(item) ? 'line' : 'bar' let data = dimAxisType === 'value' ? getValueData(seriesTemp[item], dims) : seriesTemp[item] let axisIndex = ~secondAxis.indexOf(item) ? '1' : '0' @@ -155,10 +155,10 @@ const getBarSeries = (args) => { if (Object.keys(stack).length) { // 堆叠图 - if (stackNum === Object.keys(stackMap).length - 1 || isNull(seriesItem.stack)) { + if (stackNum === Object.keys(stackMap).length - 1 || type.isNull(seriesItem.stack)) { seriesItem.itemStyle = Object.assign(defaultItemStyle, seriesItem.itemStyle) } - if (!isNull(seriesItem.stack)) { + if (!type.isNull(seriesItem.stack)) { stackNum++ } @@ -175,9 +175,9 @@ const getBarSeries = (args) => { let itemOpacity = opacity || get(seriesItem, 'itemStyle.opacity') dimAxisType === 'value' && Object.assign(seriesItem, { barGap, barCategoryGap: '1%' }) - dimAxisType === 'value' && isNull(itemOpacity) && (itemOpacity = VALUE_AXIS_OPACITY) + dimAxisType === 'value' && type.isNull(itemOpacity) && (itemOpacity = VALUE_AXIS_OPACITY) - !isNull(itemOpacity) && set(seriesItem, 'itemStyle.opacity', itemOpacity) + !type.isNull(itemOpacity) && set(seriesItem, 'itemStyle.opacity', itemOpacity) return seriesItem }) @@ -192,12 +192,12 @@ const getLegend = (args) => { return { data: metrics } } - const data = labelMap ? metrics.map((item) => (isNull(labelMap[item]) ? item : labelMap[item])) : metrics + const data = labelMap ? metrics.map((item) => (type.isNull(labelMap[item]) ? item : labelMap[item])) : metrics return { data, formatter(name) { - return !isNull(legendName[name]) ? legendName[name] : name + return !type.isNull(legendName[name]) ? legendName[name] : name } } } diff --git a/packages/renderless/src/chart-candle/index.ts b/packages/renderless/src/chart-candle/index.ts index f09aecdc01..4f3df44dbb 100644 --- a/packages/renderless/src/chart-candle/index.ts +++ b/packages/renderless/src/chart-candle/index.ts @@ -12,7 +12,7 @@ import { getFormated } from '../chart-core/deps/utils' import { itemPoint, itemLabel, itemContent } from '../chart-core/deps/constants' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' const DEF_MA = [5, 10, 20, 30] const DEF_DOWN_COLOR = '#eb171f' @@ -27,10 +27,10 @@ const getCandleLegend = (args) => { let data = [defaultKName] showMA && (data = data.concat(MA.map((v) => `MA${v}`))) - labelMap && (data = data.map((v) => (isNull(labelMap[v]) ? v : labelMap[v]))) + labelMap && (data = data.map((v) => (type.isNull(labelMap[v]) ? v : labelMap[v]))) function formatter(name) { - return isNull(legendName[name]) ? name : legendName[name] + return type.isNull(legendName[name]) ? name : legendName[name] } return { data, formatter } @@ -56,7 +56,7 @@ const getCandleTooltip = (args) => { options.forEach((opt) => { const { color, componentSubType, data, seriesName } = opt - const name = isNull(labelMap[seriesName]) ? seriesName : labelMap[seriesName] + const name = type.isNull(labelMap[seriesName]) ? seriesName : labelMap[seriesName] tplt.push(`${itemPoint(color)}${itemContent(name)}: `) @@ -64,7 +64,7 @@ const getCandleTooltip = (args) => { tplt.push('
') metrics.slice(0, 4).forEach((m, i) => { - const name = isNull(labelMap[m]) ? m : labelMap[m] + const name = type.isNull(labelMap[m]) ? m : labelMap[m] const value = getFormated(data[i + 1], dataType, digit) tplt.push(`${itemLabel(`- ${name}`)}${itemContent(value)}
`) @@ -162,13 +162,13 @@ const getCandleSeries = (args) => { const { MA, digit, downColor, itemStyle, labelMap, showMA, showVol, upColor, values, volumes } = args const style = itemStyle || { color: upColor, color0: downColor, borderColor: null, borderColor0: null } const lineStyle = { opacity: 0.5 } - const name = isNull(labelMap[defaultKName]) ? defaultKName : labelMap[defaultKName] + const name = type.isNull(labelMap[defaultKName]) ? defaultKName : labelMap[defaultKName] const series = [{ name, data: values, type: 'candlestick', itemStyle: style }] if (showMA) { MA.forEach((d) => { const key = `MA${d}` - const serieName = isNull(labelMap[key]) ? key : labelMap[key] + const serieName = type.isNull(labelMap[key]) ? key : labelMap[key] const serieData = calculateMA(d, values, digit) series.push({ name: serieName, data: serieData, type: 'line', lineStyle, smooth: true }) diff --git a/packages/renderless/src/chart-core/deps/utils.ts b/packages/renderless/src/chart-core/deps/utils.ts index 55a9490502..a30f33c175 100644 --- a/packages/renderless/src/chart-core/deps/utils.ts +++ b/packages/renderless/src/chart-core/deps/utils.ts @@ -11,22 +11,20 @@ */ import { extend, copyArray } from '../../common/object' -import { isObject, typeOf as getType, isNull } from '../../common/type' +import { type, xss } from '@opentiny/utils' + import _debounce from '../../common/deps/debounce' import _numerify from './numerify' import { escapeHtml } from '../../common/string' -import { xss } from '@opentiny/utils' export { setObj as set, getObj as get, isEqual } from '../../common/object' -export { typeOf as getType, isObject } from '../../common/type' - export const debounce = (callback, delay) => _debounce(delay, false, callback) export const camelToKebab = (str) => str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() export const cloneDeep = (data) => { - if (isObject(data)) { + if (type.isObject(data)) { return extend(true, data) } else if (Array.isArray(data)) { return copyArray(data) @@ -44,7 +42,7 @@ export const getFormated = (value, type, digit, defaultVal = '-') => { return value } - if (getType(type) === 'function') { + if (type.typeOf(type) === 'function') { return type(value, _numerify) } @@ -204,13 +202,13 @@ export const getLegend = (args, legendItemStyle) => { return { data: metrics } } - const data = labelMap ? metrics.map((item) => (isNull(labelMap[item]) ? item : labelMap[item])) : metrics + const data = labelMap ? metrics.map((item) => (type.isNull(labelMap[item]) ? item : labelMap[item])) : metrics return { ...legendItemStyle, data, formatter(name) { - return isNull(legendName[name]) ? name : legendName[name] + return type.isNull(legendName[name]) ? name : legendName[name] } } } diff --git a/packages/renderless/src/chart-funnel/index.ts b/packages/renderless/src/chart-funnel/index.ts index eed9454925..0ed8288264 100644 --- a/packages/renderless/src/chart-funnel/index.ts +++ b/packages/renderless/src/chart-funnel/index.ts @@ -12,7 +12,7 @@ import { getFormated } from '../chart-core/deps/utils' import { itemPoint, itemLabel, itemContent } from '../chart-core/deps/constants' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' const getFunnelTooltip = (dataType, digit) => { function formatter(item) { @@ -31,7 +31,7 @@ const getFunnelLegend = (args) => { const { data, legendName } = args function formatter(name) { - return isNull(legendName[name]) ? name : legendName[name] + return type.isNull(legendName[name]) ? name : legendName[name] } return { data, formatter } diff --git a/packages/renderless/src/chart-gauge/index.ts b/packages/renderless/src/chart-gauge/index.ts index 51140d5a4e..c838284cea 100644 --- a/packages/renderless/src/chart-gauge/index.ts +++ b/packages/renderless/src/chart-gauge/index.ts @@ -11,8 +11,8 @@ */ import { getFormated, isObject } from '../chart-core/deps/utils' -import { isNull } from '../common/type' import { itemLabel, itemContent } from '../chart-core/deps/constants' +import { type } from '@opentiny/utils' const getTooltip = (args) => { const { dataType, digit, tooltipFormatter } = args @@ -58,7 +58,7 @@ function getSeries(args) { const result = { type: 'gauge', - name: !isNull(labelMap[label]) ? labelMap[label] : label, + name: !type.isNull(labelMap[label]) ? labelMap[label] : label, data: [{ name: dataName[label] || '', value: row[metrics] }], detail: { fontSize: 60, diff --git a/packages/renderless/src/chart-line/index.ts b/packages/renderless/src/chart-line/index.ts index 2eb8d379ed..c0b46c2f36 100644 --- a/packages/renderless/src/chart-line/index.ts +++ b/packages/renderless/src/chart-line/index.ts @@ -11,7 +11,8 @@ */ import { getFormated, getStackMap, getLegend, hexToRgb, set } from '../chart-core/deps/utils' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' + import { itemPoint, itemLabel, itemContent, SAAS_DEFAULT_COLORS } from '../chart-core/deps/constants' const getLineXAxis = (args) => { @@ -63,7 +64,7 @@ const getLineSeries = (args) => { metrics.forEach((item) => { let value = null - if (!isNull(row[item])) { + if (!type.isNull(row[item])) { value = row[item] } else if (nullAddZero) { value = 0 @@ -74,7 +75,7 @@ const getLineSeries = (args) => { }) metrics.forEach((item, i) => { - let name = !isNull(labelMap[item]) ? labelMap[item] : item + let name = !type.isNull(labelMap[item]) ? labelMap[item] : item const isSmooth = !(smooth === false) let seriesItem = { smooth: isSmooth, name, type: 'line', data: dataTempObj[item] } diff --git a/packages/renderless/src/chart-map/index.ts b/packages/renderless/src/chart-map/index.ts index 57bb601d82..ef5cc6fe51 100644 --- a/packages/renderless/src/chart-map/index.ts +++ b/packages/renderless/src/chart-map/index.ts @@ -12,7 +12,7 @@ import { getFormated, getMapJSON, getLegend as getLegendMap } from '../chart-core/deps/utils' import { itemPoint, itemLabel, itemContent } from '../chart-core/deps/constants' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' const getTooltip = ({ dataType, digit, dataStore, metrics, color, labelMap }) => { function formatter(item) { @@ -25,7 +25,7 @@ const getTooltip = ({ dataType, digit, dataStore, metrics, color, labelMap }) => tplt.push(`${itemLabel(item.name)}
`) metrics.forEach((label, index) => { - let title = isNull(labelMap[label]) ? label : labelMap[label] + let title = type.isNull(labelMap[label]) ? label : labelMap[label] tplt.push(`${itemPoint(color[index])}${itemLabel(title)}`) if (dataStore[item.name]) { @@ -57,7 +57,7 @@ const getSeries = (args) => { const { emphasis = { itemStyle: { areaColor: 'rgba(25,25,25,0.2)' }, label: { color: '#191919' } } } = {} metrics.forEach((itemName) => { - const name = !isNull(labelMap[itemName]) ? labelMap[itemName] : itemName + const name = !type.isNull(labelMap[itemName]) ? labelMap[itemName] : itemName const data = [] const itemResult = { name, diff --git a/packages/renderless/src/chart-pie/index.ts b/packages/renderless/src/chart-pie/index.ts index fc255af85e..7e5cb5e337 100644 --- a/packages/renderless/src/chart-pie/index.ts +++ b/packages/renderless/src/chart-pie/index.ts @@ -12,7 +12,7 @@ import { getFormated, setArrayValue, cloneDeep } from '../chart-core/deps/utils' import { itemPoint, itemLabel, itemContent } from '../chart-core/deps/constants' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' const pieRadius = 100 const ringRadius = [90, 100] @@ -123,7 +123,7 @@ const getPieLegend = (args) => { if (legend.length) { let show = legend.length < legendLimit let formatter = function (name) { - return !isNull(legendName[name]) ? legendName[name] : name + return !type.isNull(legendName[name]) ? legendName[name] : name } return { data: legend, show, formatter } diff --git a/packages/renderless/src/chart-radar/index.ts b/packages/renderless/src/chart-radar/index.ts index d6d80346a7..655338fb45 100644 --- a/packages/renderless/src/chart-radar/index.ts +++ b/packages/renderless/src/chart-radar/index.ts @@ -12,13 +12,13 @@ import { getFormated } from '../chart-core/deps/utils' import { itemPoint, itemLabel, itemContent } from '../chart-core/deps/constants' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' const getRadarLegend = (rows, dimension, legendName) => { let legendData = rows.map((row) => row[dimension]).filter((i) => i) function formatter(name) { - return isNull(legendName[name]) ? name : legendName[name] + return type.isNull(legendName[name]) ? name : legendName[name] } return { data: legendData, formatter } @@ -63,7 +63,7 @@ const getRadarSetting = (rows, metrics, labelMap) => { rows.forEach((items) => { metrics.forEach((item) => { - const key = isNull(labelMap[item]) ? item : labelMap[item] + const key = type.isNull(labelMap[item]) ? item : labelMap[item] if (indicatorTemp[key]) { indicatorTemp[key].push(items[item]) @@ -99,7 +99,7 @@ const getRadarSeries = (args) => { Object.keys(row).forEach((key) => { if (~metrics.indexOf(key)) { - let k = isNull(labelMap[key]) ? radarIndexObj[key] : radarIndexObj[labelMap[key]] + let k = type.isNull(labelMap[key]) ? radarIndexObj[key] : radarIndexObj[labelMap[key]] serieData.value[k] = row[key] } diff --git a/packages/renderless/src/chart-sankey/index.ts b/packages/renderless/src/chart-sankey/index.ts index e94b02073c..090c6a032d 100644 --- a/packages/renderless/src/chart-sankey/index.ts +++ b/packages/renderless/src/chart-sankey/index.ts @@ -12,7 +12,7 @@ import { getFormated } from '../chart-core/deps/utils' import { itemPoint, itemLabel, itemContent } from '../chart-core/deps/constants' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' const getTooltip = (args) => { const { digit, itemDataType, linksDataType } = args @@ -48,7 +48,7 @@ const getSeries = (args) => { if (useDataValue) { mapHandler = (link) => ({ ...link, value: dataMap[link.target] }) } else if (!valueFull) { - mapHandler = (link) => (isNull(link.value) ? { ...link, value: dataMap[link.target] } : link) + mapHandler = (link) => (type.isNull(link.value) ? { ...link, value: dataMap[link.target] } : link) } if (mapHandler) { diff --git a/packages/renderless/src/chart-scatter/index.ts b/packages/renderless/src/chart-scatter/index.ts index 7c9f9af398..899b29929d 100644 --- a/packages/renderless/src/chart-scatter/index.ts +++ b/packages/renderless/src/chart-scatter/index.ts @@ -13,11 +13,11 @@ import { getFormated, hexToRgb } from '../chart-core/deps/utils' import { itemPoint, itemLabel, itemContent } from '../chart-core/deps/constants' import { line } from '../chart-line' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' const getScatterLegend = (dataLabels, legendName) => { function formatter(name) { - return isNull(legendName[name]) ? name : legendName[name] + return type.isNull(legendName[name]) ? name : legendName[name] } return { data: dataLabels, formatter, itemStyle: { borderWidth: 1 } } diff --git a/packages/renderless/src/chart-waterfall/index.ts b/packages/renderless/src/chart-waterfall/index.ts index a2bb834e22..19a3301a40 100644 --- a/packages/renderless/src/chart-waterfall/index.ts +++ b/packages/renderless/src/chart-waterfall/index.ts @@ -11,8 +11,8 @@ */ import { getFormated } from '../chart-core/deps/utils' -import { isNull } from '../common/type' import { itemLabel, itemContent, SAAS_DEFAULT_COLORS } from '../chart-core/deps/constants' +import { type } from '@opentiny/utils' const getWaterfallTooltip = (dataType, digit) => { let trigger = 'axis' @@ -49,7 +49,7 @@ const getWaterfallXAxis = (args) => { const getWaterfallYAxis = (args) => { const { axisVisible, dataType, digit, labelMap, yAxisName } = args - let name = !isNull(labelMap[yAxisName]) ? labelMap[yAxisName] : yAxisName + let name = !type.isNull(labelMap[yAxisName]) ? labelMap[yAxisName] : yAxisName let formatter = function (val) { return getFormated(val, dataType, digit) } diff --git a/packages/renderless/src/checkbox/index.ts b/packages/renderless/src/checkbox/index.ts index 360d63239c..5bfe12c364 100644 --- a/packages/renderless/src/checkbox/index.ts +++ b/packages/renderless/src/checkbox/index.ts @@ -11,7 +11,7 @@ */ import type { ICheckboxRenderlessParams, ICheckboxState, ICheckboxChangeEvent, ICheckboxProps } from '@/types' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' export const addToStore = ({ state, props }: Pick) => @@ -72,7 +72,7 @@ export const computedGetModelGet = ({ state, props }: Pick) => (): boolean => - !isNull(props.text) || !isNull(props.label) + !type.isNull(props.text) || !type.isNull(props.label) export const computedShowText = ({ props }: Pick) => (): ICheckboxProps['label'] | ICheckboxProps['text'] => { - if (props.text || !isNull(props.text)) { + if (props.text || !type.isNull(props.text)) { return props.text } else { return props.label diff --git a/packages/renderless/src/column-list-item/index.ts b/packages/renderless/src/column-list-item/index.ts index a7e2db28d3..27dd5be5e6 100644 --- a/packages/renderless/src/column-list-item/index.ts +++ b/packages/renderless/src/column-list-item/index.ts @@ -1,4 +1,4 @@ -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' export const handelIconClick = ({ emit }) => @@ -48,7 +48,7 @@ export const getModel = const model = state.isGroup ? state.store : props.modelValue !== undefined ? props.modelValue : state.selfModel if (state.showCheckbox) { - return isNull(model) ? [] : model + return type.isNull(model) ? [] : model } else { return state.store } diff --git a/packages/renderless/src/common/array.ts b/packages/renderless/src/common/array.ts index 8d14eed251..9b94000fef 100644 --- a/packages/renderless/src/common/array.ts +++ b/packages/renderless/src/common/array.ts @@ -11,8 +11,8 @@ */ import { SORT } from './index' -import { isSame } from './type' import { getObj } from './object' +import { type } from '@opentiny/utils' /** * 返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。 TINY_NO_NEED 现在数组有 findIndex @@ -123,7 +123,7 @@ export const sort = (arr, field, sort = SORT.Asc) => { * @returns {Array} */ export const push = (arr, data) => { - if (Array.isArray(arr) && !arr.some((value) => isSame(value, data))) { + if (Array.isArray(arr) && !arr.some((value) => type.isSame(value, data))) { arr.push(data) } @@ -200,10 +200,10 @@ export const transformPidToChildren = (data, pidName = 'pId', childrenName = 'ch Array.isArray(data) && data.forEach((item) => { - if (item[pidName] == '0') { + if (item[pidName] === '0') { result.push(item) } else { - const parent = find(data, (i) => i[idName] == item[pidName]) + const parent = find(data, (i) => i[idName] === item[pidName]) if (!parent) { return diff --git a/packages/renderless/src/common/dataset/index.ts b/packages/renderless/src/common/dataset/index.ts index 921cea96df..30c06d3926 100644 --- a/packages/renderless/src/common/dataset/index.ts +++ b/packages/renderless/src/common/dataset/index.ts @@ -11,7 +11,7 @@ */ import { format } from '../string' -import { isObject } from '../type' +import { type } from '@opentiny/utils' import { transformTreeData } from '../array' /** @@ -56,7 +56,7 @@ const getNsObj = (obj, names) => { const curkey = arr.shift() const curObj = obj[curkey] - if (isObject(curObj) && arr.length) { + if (type.isObject(curObj) && arr.length) { return getNsObj(curObj, arr) } @@ -109,7 +109,7 @@ export const getDataset = ({ dataset, service, tree }, args) => if (!$service) { return resolve([]) } - if (isObject(source) && source.url) { + if (type.isObject(source) && source.url) { const { type = 'GET', data, beforeRequest, afterRequest, success, hideErr, url, method, ...options } = source options.url = url options.method = method || type.toLocaleLowerCase() diff --git a/packages/renderless/src/common/date.ts b/packages/renderless/src/common/date.ts index 5c4a8657b5..3ea8e407a8 100644 --- a/packages/renderless/src/common/date.ts +++ b/packages/renderless/src/common/date.ts @@ -10,7 +10,7 @@ * */ -import { isDate, isNumber, isNumeric } from './type' +import { type } from '@opentiny/utils' import { fillChar } from './string' const daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] @@ -360,7 +360,7 @@ const innerParse = (value, dateFormat) => { export const toDate = (value, dateFormat, minDate) => { let date - if (isNumber(value)) { + if (type.isNumber(value)) { date = new Date(value) } else if (typeof value === 'string') { date = innerParse(value, dateFormat) @@ -404,7 +404,7 @@ export const toDate = (value, dateFormat, minDate) => { * @returns {String} */ export const format = function (date, dateFormat = 'yyyy/MM/dd hh:mm:ss') { - if (isDate(date)) { + if (type.isDate(date)) { if (typeof dateFormat === 'string') { const o = { 'y{1,4}': date.getFullYear(), @@ -455,7 +455,7 @@ export const format = function (date, dateFormat = 'yyyy/MM/dd hh:mm:ss') { * @returns {Date} */ export const getDateWithNewTimezone = (date, otz, ntz, timezoneOffset = 0) => { - if (!isDate(date) || !isNumeric(otz) || !isNumeric(ntz) || !isNumeric(timezoneOffset)) { + if (!type.isDate(date) || !type.isNumeric(otz) || !type.isNumeric(ntz) || !type.isNumeric(timezoneOffset)) { return } @@ -479,10 +479,10 @@ export const getDateWithNewTimezone = (date, otz, ntz, timezoneOffset = 0) => { * @returns {String} */ export const toDateStr = (date, dateFormat, timezone) => { - if (date && isNumeric(timezone)) { + if (date && type.isNumeric(timezone)) { timezone = parseFloat(parseFloat(timezone).toFixed(2)) - date = getDateWithNewTimezone(isDate(date) ? date : new Date(toDate(date)), 0, timezone) + date = getDateWithNewTimezone(type.isDate(date) ? date : new Date(toDate(date)), 0, timezone) } return format(date, dateFormat) @@ -502,7 +502,7 @@ export const toDateStr = (date, dateFormat, timezone) => { */ export const getWeekOfFirstDay = (date, isSunFirst) => { typeof date === 'boolean' && (isSunFirst = date) - isDate(date) || (date = new Date()) + type.isDate(date) || (date = new Date()) const day = date.getDay() let dayOfMonth = date.getDate() @@ -529,7 +529,7 @@ export const getStrTimezone = (value) => { value = minoffset * `${match[1]}1` } - if (isNumber(value) && value >= -12 && value <= 12) { + if (type.isNumber(value) && value >= -12 && value <= 12) { return value } diff --git a/packages/renderless/src/common/deps/date-util.ts b/packages/renderless/src/common/deps/date-util.ts index e4e92c0f81..24c4ab5107 100644 --- a/packages/renderless/src/common/deps/date-util.ts +++ b/packages/renderless/src/common/deps/date-util.ts @@ -11,9 +11,9 @@ */ import fecha from './date' -import { isNull } from '../type' import { isLeapYear } from '../date' import { DATEPICKER } from '../index' +import { type } from '@opentiny/utils' const weeks = DATEPICKER.Weeks const months = DATEPICKER.MonhtList @@ -39,7 +39,7 @@ export const getI18nSettings = (t) => ({ }) export const isDate = function (date) { - if (isNull(date)) { + if (type.isNull(date)) { return false } if (isNaN(new Date(date).getTime())) { @@ -210,7 +210,7 @@ export const modifyTime = (date, h, m, s) => { } export const modifyWithTimeString = (date, time, t) => { - if (isNull(date) || !time) { + if (type.isNull(date) || !time) { return date } diff --git a/packages/renderless/src/common/deps/date.ts b/packages/renderless/src/common/deps/date.ts index 93d58c5971..2ce8444b8b 100644 --- a/packages/renderless/src/common/deps/date.ts +++ b/packages/renderless/src/common/deps/date.ts @@ -11,7 +11,7 @@ */ import { DATEPICKER } from '../index' -import { isNull, isDate } from '../type' +import { type } from '@opentiny/utils' const fecha = {} const digitsReg = ['\\d\\d?', '\\d{3}', '\\d{4}'] @@ -230,7 +230,7 @@ fecha.format = (dateObj, mask, i18nSettings) => { dateObj = new Date(dateObj) } - if (!isDate(dateObj) || isNaN(dateObj.getTime())) { + if (!type.isDate(dateObj) || isNaN(dateObj.getTime())) { throw new Error('Invalid Date in fecha.format') } @@ -273,7 +273,7 @@ const getDate = (dateInfo) => { let date const today = new Date() - if (!isNull(dateInfo.timezoneOffset)) { + if (!type.isNull(dateInfo.timezoneOffset)) { dateInfo.minute = Number(dateInfo.minute || 0) - Number(dateInfo.timezoneOffset) const { year, month, day, hour, minute, second, millisecond } = dateInfo @@ -330,7 +330,7 @@ fecha.parse = (dateStr, format, i18nSettings) => { parseInfo[i - 1](dateInfo, matches[i], i18n) } - if (dateInfo.isPm === true && !isNull(dateInfo.hour) && Number(dateInfo.hour) !== 12) { + if (dateInfo.isPm === true && !type.isNull(dateInfo.hour) && Number(dateInfo.hour) !== 12) { dateInfo.hour = Number(dateInfo.hour) + 12 } else if (dateInfo.isPm === false && Number(dateInfo.hour) === 12) { dateInfo.hour = 0 diff --git a/packages/renderless/src/common/deps/dom.ts b/packages/renderless/src/common/deps/dom.ts index 8473f51775..54f8fee46e 100644 --- a/packages/renderless/src/common/deps/dom.ts +++ b/packages/renderless/src/common/deps/dom.ts @@ -10,8 +10,8 @@ * */ -import { hasOwn, isNull } from '../type' -import globalConfig from '../global' +import { type } from '@opentiny/utils' +import { global } from '@opentiny/utils' export const isServer = typeof window === 'undefined' const SPECIAL_CHARS_REGEXP = /([:\-_]+(.))/g @@ -126,7 +126,7 @@ export const setStyle = (el: HTMLElement, name: string | object, value?: any) => if (typeof name === 'object') { for (const prop in name) { - if (hasOwn.call(name, prop)) { + if (type.hasOwn.call(name, prop)) { setStyle(el, prop, name[prop]) } } @@ -149,7 +149,7 @@ export const isScroll = (el: HTMLElement, vertical?: boolean) => { * 它的值为false: 当vertical = null / undefinded。 * 它的值为 true: 当vertical =true /false */ - const determinedDirection = !isNull(vertical) + const determinedDirection = !type.isNull(vertical) let overflow if (determinedDirection) { @@ -195,7 +195,7 @@ export const isInContainer = (el: HTMLElement, container: HTMLElement) => { const elRect = el.getBoundingClientRect() let containerRect - if (~[window, document, document.documentElement].indexOf(container) || isNull(container)) { + if (~[window, document, document.documentElement].indexOf(container) || type.isNull(container)) { containerRect = { top: 0, right: window.innerWidth, @@ -221,7 +221,7 @@ export const isInContainer = (el: HTMLElement, container: HTMLElement) => { * @returns visibleWidth : 可视区宽度(不含滚动条) */ export const getDomNode = () => { - const viewportWindow = globalConfig.viewportWindow || window + const viewportWindow = global.globalConfig.viewportWindow || window let documentElement = viewportWindow.document.documentElement let bodyElem = viewportWindow.document.body diff --git a/packages/renderless/src/common/deps/popper.ts b/packages/renderless/src/common/deps/popper.ts index b8b0504e41..fc9bb352f1 100644 --- a/packages/renderless/src/common/deps/popper.ts +++ b/packages/renderless/src/common/deps/popper.ts @@ -12,8 +12,7 @@ import { on, off, isDisplayNone } from './dom' import PopupManager from './popup-manager' -import globalConfig from '../global' -import { typeOf } from '../type' +import { global, type } from '@opentiny/utils' import { isBrowser } from '../browser' const positions = ['left', 'right', 'top', 'bottom'] @@ -452,7 +451,7 @@ class Popper { } modifiersToRun.forEach((modifier) => { - if (typeOf(modifier) === 'function') { + if (type.typeOf(modifier) === 'function') { data = modifier.call(this, data) } }) @@ -873,7 +872,7 @@ class Popper { let scrollLeft = noScroll ? 0 : getScrollLeftValue(scrollParent) // PopupManager.viewportWindow是为了兼容之前已经采用此方法兼容微前端的用户,后续需要采用globalConfig.viewportWindow - const viewportWindow = globalConfig.viewportWindow || PopupManager.viewportWindow || window + const viewportWindow = global.globalConfig.viewportWindow || PopupManager.viewportWindow || window boundaries = { top: 0 - (offsetParentRect.top - scrollTop), right: viewportWindow.document.documentElement.clientWidth - (offsetParentRect.left - scrollLeft), diff --git a/packages/renderless/src/common/deps/tree-model/node.ts b/packages/renderless/src/common/deps/tree-model/node.ts index 99cb28562c..6f1ad88f0f 100644 --- a/packages/renderless/src/common/deps/tree-model/node.ts +++ b/packages/renderless/src/common/deps/tree-model/node.ts @@ -13,7 +13,7 @@ import { merge } from '../../object' import { markNodeData, NODE_KEY } from './util' import { indexOf } from '../../array' -import { hasOwn, typeOf } from '../../type' +import { type } from '@opentiny/utils' const defaultChildrenKey = 'children' const defaultIsLeafKey = 'isLeaf' @@ -23,9 +23,9 @@ const getPropertyFromData = (node, prop) => { const dataData = node.data || {} const config = props[prop] - if (typeOf(config) === 'string') { + if (type.typeOf(config) === 'string') { return dataData[config] - } else if (typeOf(config) === 'function') { + } else if (type.typeOf(config) === 'function') { return config(dataData, node) } else if (typeof config === 'undefined') { const dataProp = dataData[prop] @@ -161,7 +161,7 @@ export default class Node { this.updateMethod = () => {} Object.keys(options).forEach((key) => { - if (hasOwn.call(options, key)) { + if (type.hasOwn.call(options, key)) { this[key] = options[key] } }) diff --git a/packages/renderless/src/common/deps/tree-model/tree-store.ts b/packages/renderless/src/common/deps/tree-model/tree-store.ts index c29512a33c..ddbb4dffba 100644 --- a/packages/renderless/src/common/deps/tree-model/tree-store.ts +++ b/packages/renderless/src/common/deps/tree-model/tree-store.ts @@ -10,9 +10,9 @@ * */ -import { hasOwn, isNull } from '../../type' import { getNodeKey } from './util' import Node from './node' +import { type } from '@opentiny/utils' export default class TreeStore { constructor(options) { @@ -20,7 +20,7 @@ export default class TreeStore { this.currentNodeKey = null for (let option in options) { - if (hasOwn.call(options, option)) { + if (type.hasOwn.call(options, option)) { this[option] = options[option] } } @@ -45,7 +45,7 @@ export default class TreeStore { const mapping = {} for (let key in props) { - if (hasOwn.call(props, key)) { + if (type.hasOwn.call(props, key)) { mapping[key] = data[props[key]] } } @@ -248,7 +248,7 @@ export default class TreeStore { const nodesMap = this.nodesMap Object.keys(nodesMap).forEach((nodeKey) => { - hasOwn.call(nodesMap, nodeKey) && allNodes.push(nodesMap[nodeKey]) + type.hasOwn.call(nodesMap, nodeKey) && allNodes.push(nodesMap[nodeKey]) }) return allNodes @@ -378,7 +378,7 @@ export default class TreeStore { } setCurrentNodeKey(key) { - if (isNull(key)) { + if (type.isNull(key)) { this.currentNode && (this.currentNode.isCurrent = false) this.currentNode = null diff --git a/packages/renderless/src/common/deps/upload-ajax.ts b/packages/renderless/src/common/deps/upload-ajax.ts index be116c7287..f0cda6b02c 100644 --- a/packages/renderless/src/common/deps/upload-ajax.ts +++ b/packages/renderless/src/common/deps/upload-ajax.ts @@ -10,7 +10,7 @@ * */ -import { hasOwn } from '../type' +import { type } from '@opentiny/utils' import { xss } from '@opentiny/utils' const getBody = (xhr) => { @@ -102,7 +102,7 @@ export default (option) => { const headers = option.headers || {} for (let header in headers) { - if (hasOwn.call(headers, header) && headers[header] !== null) { + if (type.hasOwn.call(headers, header) && headers[header] !== null) { xhr.setRequestHeader(header, headers[header]) } } diff --git a/packages/renderless/src/common/function.ts b/packages/renderless/src/common/function.ts index ba57f6a595..c093877b79 100644 --- a/packages/renderless/src/common/function.ts +++ b/packages/renderless/src/common/function.ts @@ -1,4 +1,4 @@ -import { isPromise } from './type' +import { type } from '@opentiny/utils' export const noop = () => {} @@ -6,7 +6,7 @@ export const callInterceptor = (interceptor, { args = [], done, canceled, error if (interceptor) { const returnVal = interceptor(...args) - if (isPromise(returnVal)) { + if (type.isPromise(returnVal)) { returnVal .then((value) => { if (value) { diff --git a/packages/renderless/src/common/object.ts b/packages/renderless/src/common/object.ts index ee13adffb9..035b4e2669 100644 --- a/packages/renderless/src/common/object.ts +++ b/packages/renderless/src/common/object.ts @@ -10,7 +10,7 @@ * */ -import { hasOwn, typeOf, isObject, isPlainObject, isNull } from './type' +import { type } from '@opentiny/utils' /** * 将对象的每个属性值进行循环处理。 @@ -30,7 +30,7 @@ export const each = (obj: object, handle: (key: string, value?: any) => boolean) return } for (const name in obj) { - if (hasOwn.call(obj, name)) { + if (type.hasOwn.call(obj, name)) { if (handle(name, obj[name]) === false) { break } @@ -61,7 +61,7 @@ let extend: (deep: boolean | object, ...values: object[]) => object * @returns {Object} */ export const getObj = (data: object, names: string, isExceptRoot?: boolean) => { - if (!data || !isPlainObject(data) || !names || typeof names !== 'string') { + if (!data || !type.isPlainObject(data) || !names || typeof names !== 'string') { return } @@ -76,7 +76,7 @@ export const getObj = (data: object, names: string, isExceptRoot?: boolean) => { for (let i = startIndex; i < len; i++) { obj = obj[nameArr[i]] - if (isNull(obj)) { + if (type.isNull(obj)) { return obj } } @@ -104,7 +104,7 @@ export const getObj = (data: object, names: string, isExceptRoot?: boolean) => { * @returns {Object} */ export const setObj = (data: object, names: string, value: any, isMerge) => { - if (!data || !isPlainObject(data) || !names || typeof names !== 'string') { + if (!data || !type.isPlainObject(data) || !names || typeof names !== 'string') { return data } @@ -124,7 +124,7 @@ export const setObj = (data: object, names: string, value: any, isMerge) => { name = nameArr[i] target = tmpl[name] - if (target === null || !isPlainObject(target)) { + if (target === null || !type.isPlainObject(target)) { tmpl[name] = {} target = tmpl[name] } @@ -135,13 +135,13 @@ export const setObj = (data: object, names: string, value: any, isMerge) => { item = nameArr[len] isMerge - ? isPlainObject(tmpl[item]) + ? type.isPlainObject(tmpl[item]) ? extend(true, tmpl[item], value) : (tmpl[item] = value) : (tmpl[item] = value) } else { isMerge - ? isPlainObject(obj[item]) + ? type.isPlainObject(obj[item]) ? extend(true, obj[item], value) // : (obj[item] = value) : (obj[item] = value) @@ -194,7 +194,7 @@ export const copyField = (data: object, fields?: string[], isMerge?: boolean, is return result } - if (isPlainObject(data)) { + if (type.isPlainObject(data)) { return Array.isArray(fields) ? innerCopyFields(data, fields, isMerge, isExclude) : extend(isMerge !== false, {}, data) @@ -229,12 +229,12 @@ export const copyArray = (arr: any[]) => { const deepCopy = (target, name, deep, copy, src) => { let copyIsArray - if (deep && copy && (isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) { + if (deep && copy && (type.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) { if (copyIsArray) { copyIsArray = false target[name] = copyArray(copy) } else { - const clone = src && isPlainObject(src) ? src : {} + const clone = src && type.isPlainObject(src) ? src : {} target[name] = extend(deep, clone, copy) } } else if (copy !== undefined) { @@ -252,20 +252,20 @@ extend = function (...args) { let i = 1 let deep = false - if (typeOf(target) === 'boolean') { + if (type.typeOf(target) === 'boolean') { deep = target as boolean target = args[i] || {} i++ } - if (!isObject(target) && typeOf(target) !== 'function') { + if (!type.isObject(target) && type.typeOf(target) !== 'function') { target = {} } for (; i < length; i++) { const options = args[i] - if (options !== null && isObject(options)) { + if (options !== null && type.isObject(options)) { const names = Object.keys(options) for (const name of names) { @@ -318,7 +318,7 @@ export const isEqual: (sourceData: object, targetData: object, deep?: boolean, f deep?: boolean, fields?: string[] ) => { - if (typeOf(sourceData) === typeOf(targetData)) { + if (type.typeOf(sourceData) === type.typeOf(targetData)) { deep = deep !== false if (Array.isArray(fields)) { @@ -339,7 +339,7 @@ export const isEqual: (sourceData: object, targetData: object, deep?: boolean, f } isEachEqual = (data1: any, data2: any, deep?: boolean) => { - if (!isPlainObject(data1)) { + if (!type.isPlainObject(data1)) { // 当是数组的情况 if (!Array.isArray(data1)) { return data1 === data2 @@ -363,11 +363,11 @@ isEachEqual = (data1: any, data2: any, deep?: boolean) => { const names = Object.keys(data1) for (const name of names) { - if (hasOwn.call(data2, name)) { + if (type.hasOwn.call(data2, name)) { const _data1 = data1[name] const _data2 = data2[name] - if ((deep && isObject(_data1)) || Array.isArray(_data1)) { + if ((deep && type.isObject(_data1)) || Array.isArray(_data1)) { bEqual = isEachEqual(_data1, _data2, deep) } else { bEqual = _data1 === _data2 @@ -421,7 +421,7 @@ export const merge = function (target: object, ...rest: object[]) { const source = rest[i] || {} for (const prop in source) { - if (hasOwn.call(source, prop)) { + if (type.hasOwn.call(source, prop)) { const value = source[prop] if (value !== undefined) { diff --git a/packages/renderless/src/common/runtime.ts b/packages/renderless/src/common/runtime.ts index 93dceeea52..32a38c9a01 100644 --- a/packages/renderless/src/common/runtime.ts +++ b/packages/renderless/src/common/runtime.ts @@ -21,7 +21,6 @@ import * as date from './date' import * as decimal from './decimal' import * as object from './object' import * as string from './string' -import * as type from './type' import * as dataset from './dataset' import afterLeave from './deps/after-leave' import clickoutside from './deps/clickoutside' @@ -49,7 +48,6 @@ const Renderless = { date, object, decimal, - type, string, afterLeave, dataset, @@ -79,7 +77,6 @@ export { decimal, object, string, - type, dataset, afterLeave, clickoutside, diff --git a/packages/renderless/src/common/string.ts b/packages/renderless/src/common/string.ts index b3267bd710..d75dab3078 100644 --- a/packages/renderless/src/common/string.ts +++ b/packages/renderless/src/common/string.ts @@ -10,7 +10,7 @@ * */ -import { isPlainObject, isNumber, isNumeric, isNull } from './type' +import { type } from '@opentiny/utils' import { getObj, toJsonStr } from './object' import { toFixed, Decimal } from './decimal' import { globalEnvironment, isBrowser } from './browser' @@ -221,7 +221,7 @@ export const getLength = (string, regular) => { * @returns {String} */ export const fillChar = (string, length, append, chr = '0') => { - if (typeof string === 'string' && typeof chr === 'string' && isNumber(length)) { + if (typeof string === 'string' && typeof chr === 'string' && type.isNumber(length)) { let len = string.length - length if (len > 0) { @@ -366,7 +366,7 @@ export const fieldFormat = (string, data, type = 'html') => { let value = getObj(data, offset) - if (isNull(value)) { + if (type.isNull(value)) { value = '' } @@ -392,7 +392,7 @@ const getFormatText = () => (str, reg, args, format) => } const value = args[j] - const string = isPlainObject(value) ? toJsonStr(value) : value + const string = type.isPlainObject(value) ? toJsonStr(value) : value if (isNullOrEmpty(value)) { return '' @@ -463,7 +463,7 @@ export const format = function (string, data, type = 'text') { let args, res - if (isPlainObject(data)) { + if (type.isPlainObject(data)) { return fieldFormat(string, data, type) } @@ -482,7 +482,7 @@ export const format = function (string, data, type = 'text') { } const getTruthyValue = ({ string, length, ellipsis }) => { - const flag = typeof string === 'string' && isNumber(length) && length < string.length + const flag = typeof string === 'string' && type.isNumber(length) && length < string.length const truthyValue = flag && format(ellipsis, string.substr(0, length)) return { flag, truthyValue } @@ -531,7 +531,7 @@ export const tryToConvert = (convert, defaultValue, ...args) => { * @returns {Number} */ export const toInt = (value) => - isNumber(value) ? Number(value.toFixed(0)) : typeof value === 'string' ? parseInt(value, 10) : NaN + type.isNumber(value) ? Number(value.toFixed(0)) : typeof value === 'string' ? parseInt(value, 10) : NaN /** * 尝试将字符串解析成十进制整数。如果 value 是个无效的整数,则返回 defaultValue。 @@ -555,7 +555,7 @@ export const tryToInt = (value, defaultValue) => tryToConvert(toInt, defaultValu * @param {Number|String} value 要解析的字符串 * @returns {Number} */ -export const toNumber = (value) => (isNumber(value) ? value : typeof value === 'string' ? parseFloat(value) : NaN) +export const toNumber = (value) => (type.isNumber(value) ? value : typeof value === 'string' ? parseFloat(value) : NaN) /** * 尝试将字符串解析成数值。如果 value 是个无效的数字,则返回 defaultValue。 @@ -586,7 +586,7 @@ export const tryToNumber = (value, defaultValue) => tryToConvert(toNumber, defau export const toDecimal = (value, fraction = 2, isTruncate = false) => { let result = NaN - if (isNumber(value)) { + if (type.isNumber(value)) { result = value } @@ -597,7 +597,7 @@ export const toDecimal = (value, fraction = 2, isTruncate = false) => { } } - if (isNumber(result)) { + if (type.isNumber(result)) { if (isTruncate) { result = toFixed( value @@ -649,7 +649,7 @@ export const tryToDecimal = (value, fraction, isTruncate, defaultValue) => * @returns {String} */ export const toCurrency = (value, fraction, placeholder, isTruncate) => { - if (isNumeric(value)) { + if (type.isNumeric(value)) { let val = toDecimal(Number(value), fraction, isTruncate) val = String(val).replace(/(^|[^\w.])(\d{4,})/g, ($0, $1, $2) => $1 + $2.replace(/\d(?=(?:\d\d\d)+(?!\d))/g, '$&,')) return placeholder ? format(placeholder, val) : val @@ -689,9 +689,9 @@ export const tryToCurrency = (value, fraction, placeholder, defaultValue) => * @returns {Boolean|number} */ export const toBoolValue = (value) => { - if (isNumber(value)) { + if (type.isNumber(value)) { return value ? 1 : 0 - } else if (isNull(value) || value === 'false') { + } else if (type.isNull(value) || value === 'false') { return false } else if (value === 'true') { return true @@ -714,7 +714,9 @@ export const toBoolValue = (value) => { * @returns {String} */ export const toRate = (value, total = 1, fraction = 2) => - isNumber(value) && isNumber(total) ? toDecimal(Decimal(value).mul(100).div(total).toNumber(), fraction) + '%' : value + type.isNumber(value) && type.isNumber(total) + ? toDecimal(Decimal(value).mul(100).div(total).toNumber(), fraction) + '%' + : value /** * 文件大小值 单位互相转换。 @@ -730,7 +732,7 @@ export const toRate = (value, total = 1, fraction = 2) => * @returns {String} */ export const toFileSize = (value, unit, currUnit) => { - if (isNumeric(value)) { + if (type.isNumeric(value)) { value = Number(value) if (value === 0) { @@ -776,7 +778,7 @@ export const toFileSize = (value, unit, currUnit) => { export const formatFileSize = (size, baseUnit = '') => { if ([undefined, null].includes(size)) { return '' - } else if (!isNumber(size) || size <= 0) { + } else if (!type.isNumber(size) || size <= 0) { return size + baseUnit } diff --git a/packages/renderless/src/common/validate/rules/range.ts b/packages/renderless/src/common/validate/rules/range.ts index 12eafae2eb..23a5fc6fec 100644 --- a/packages/renderless/src/common/validate/rules/range.ts +++ b/packages/renderless/src/common/validate/rules/range.ts @@ -11,7 +11,7 @@ */ import * as util from '../util' -import { isNumber } from '../../type' +import { type } from '@opentiny/utils' import { getLength } from '../../string' function getErro({ min, max, val, key, rule, errors, util, options }) { @@ -25,12 +25,12 @@ function getErro({ min, max, val, key, rule, errors, util, options }) { } export default function (rule, checkValue, source, errors, options) { - const len = isNumber(rule.len) - const min = isNumber(rule.min) - const max = isNumber(rule.max) + const len = type.isNumber(rule.len) + const min = type.isNumber(rule.min) + const max = type.isNumber(rule.max) let val = checkValue let key: string | null = null - const num = isNumber(Number(checkValue)) + const num = type.isNumber(Number(checkValue)) const str = typeof checkValue === 'string' const arr = Array.isArray(checkValue) diff --git a/packages/renderless/src/common/validate/rules/required.ts b/packages/renderless/src/common/validate/rules/required.ts index 725888563c..4f6e73e6dd 100644 --- a/packages/renderless/src/common/validate/rules/required.ts +++ b/packages/renderless/src/common/validate/rules/required.ts @@ -11,10 +11,10 @@ */ import * as util from '../util' -import { hasOwn } from '../../type' +import { type } from '@opentiny/utils' -export default function ({ rule, checkValue, source, errors, options, type }) { - if (rule.required && (!hasOwn.call(source, rule.field) || util.isEmptyValue(checkValue, type || rule.type))) { +export default function ({ rule, checkValue, source, errors, options, _type }) { + if (rule.required && (!type.hasOwn.call(source, rule.field) || util.isEmptyValue(checkValue, type || rule._type))) { errors.push(util.format(options.messages.required, '')) } } diff --git a/packages/renderless/src/common/validate/rules/type.ts b/packages/renderless/src/common/validate/rules/type.ts index b6942bedcb..284862908a 100644 --- a/packages/renderless/src/common/validate/rules/type.ts +++ b/packages/renderless/src/common/validate/rules/type.ts @@ -14,7 +14,7 @@ import * as util from '../util' import required from './required' import { format } from '../../date' import { isNullOrEmpty } from '../../string' -import { isNumber, isObject, isDate, typeOf } from '../../type' +import { type } from '@opentiny/utils' const emailReg1 = '^(([^<>()\\[\\]\\\\.,;:\\s@"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@"]+)*)|(".+"))' const emailReg = new RegExp( @@ -48,10 +48,10 @@ const types = { return false } }, - date: isDate, - number: (value) => isNumber(Number(value)), - object: (value) => isObject(value) && !types.array(value), - method: (value) => typeOf(value) === 'function', + date: type.isDate, + number: (value) => type.isNumber(Number(value)), + object: (value) => type.isObject(value) && !types.array(value), + method: (value) => type.typeOf(value) === 'function', email: (value) => isNullOrEmpty(value) || (!!value.match(pattern.email) && value.length < 255), diff --git a/packages/renderless/src/common/validate/schema.ts b/packages/renderless/src/common/validate/schema.ts index cc4fd371a7..cbe538efd2 100644 --- a/packages/renderless/src/common/validate/schema.ts +++ b/packages/renderless/src/common/validate/schema.ts @@ -11,7 +11,7 @@ */ import { format, complementError, asyncMap, warning, deepMerge, convertFieldsError } from './util' -import { hasOwn, isFunction } from '../type' +import { type } from '@opentiny/utils' function Schema(descriptor, translate) { Schema.getSystemMessage = () => Schema.getDefaultMessage(translate) @@ -82,7 +82,7 @@ const getFieldsSchema = (rule, data) => { if (rule.defaultField) { for (const k in data.value) { - if (hasOwn.call(data.value, k)) { + if (type.hasOwn.call(data.value, k)) { schema[k] = rule.defaultField } } @@ -94,7 +94,7 @@ const getFieldsSchema = (rule, data) => { } for (const f in schema) { - if (hasOwn.call(schema, f)) { + if (type.hasOwn.call(schema, f)) { const fieldSchema = Array.isArray(schema[f]) ? schema[f] : [schema[f]] schema[f] = fieldSchema.map(addFullfield.bind(null, f)) @@ -225,7 +225,7 @@ Schema.prototype = { let rule Object.keys(rules).forEach((key) => { - if (hasOwn.call(rules, key)) { + if (type.hasOwn.call(rules, key)) { rule = rules[key] this.rules[key] = Array.isArray(rule) ? rule : [rule] } @@ -346,7 +346,7 @@ Schema.prototype = { ) }, getValidationMethod(rule) { - if (isFunction(rule.validator)) { + if (type.isFunction(rule.validator)) { return rule.validator } @@ -368,7 +368,7 @@ Schema.prototype = { rule.type = 'pattern' } - if (typeof rule.validator !== 'function' && rule.type && !hasOwn.call(Schema.validators, rule.type)) { + if (typeof rule.validator !== 'function' && rule.type && !type.hasOwn.call(Schema.validators, rule.type)) { throw new Error(format('Unknown rule type %s', rule.type)) } diff --git a/packages/renderless/src/common/validate/util.ts b/packages/renderless/src/common/validate/util.ts index aca32e5527..4644cc1f46 100644 --- a/packages/renderless/src/common/validate/util.ts +++ b/packages/renderless/src/common/validate/util.ts @@ -10,8 +10,7 @@ * */ -import { hasOwn, isNull } from '../type' -import { log } from '@opentiny/utils' +import { log, type } from '@opentiny/utils' const formatRegExp = /%[sdj%]/g @@ -110,7 +109,7 @@ function isNativeStringType(type) { * @description 判断对应的类型是否是空值 */ export function isEmptyValue(data, dataType) { - if (isNull(data)) { + if (type.isNull(data)) { return true } @@ -274,7 +273,7 @@ export function deepMerge(target, sources) { return target } for (const source in sources) { - if (hasOwn.call(sources, source)) { + if (type.hasOwn.call(sources, source)) { const value = sources[source] if (typeof value === 'object' && typeof target[source] === 'object') { diff --git a/packages/renderless/src/common/validate/validations/array.ts b/packages/renderless/src/common/validate/validations/array.ts index 6f470b8a40..bf0285dbe4 100644 --- a/packages/renderless/src/common/validate/validations/array.ts +++ b/packages/renderless/src/common/validate/validations/array.ts @@ -12,11 +12,11 @@ import rules from '../rules/index' import { isEmptyValue } from '../util' -import { hasOwn } from '../../type' +import { type } from '@opentiny/utils' export default function (rule, checkValue, callback, source, options) { const errors = [] - const validate = rule.required || (!rule.required && hasOwn.call(source, rule.field)) + const validate = rule.required || (!rule.required && type.hasOwn.call(source, rule.field)) if (validate) { if (isEmptyValue(checkValue, 'array') && !rule.required) { diff --git a/packages/renderless/src/common/validate/validations/date.ts b/packages/renderless/src/common/validate/validations/date.ts index a73661409f..f4336aed21 100644 --- a/packages/renderless/src/common/validate/validations/date.ts +++ b/packages/renderless/src/common/validate/validations/date.ts @@ -12,11 +12,11 @@ import rules from '../rules/index' import { isEmptyValue } from '../util' -import { hasOwn } from '../../type' +import { type } from '@opentiny/utils' export default function (rule, checkValue, callback, source, options) { const errors = [] - const validate = rule.required || (!rule.required && hasOwn.call(source, rule.field)) + const validate = rule.required || (!rule.required && type.hasOwn.call(source, rule.field)) const isValidDateStr = (value) => value && typeof value === 'string' && new Date(value).toString() !== 'Invalid Date' if (validate) { diff --git a/packages/renderless/src/common/validate/validations/enum.ts b/packages/renderless/src/common/validate/validations/enum.ts index 155c023f11..1da6da76cd 100644 --- a/packages/renderless/src/common/validate/validations/enum.ts +++ b/packages/renderless/src/common/validate/validations/enum.ts @@ -12,13 +12,13 @@ import rules from '../rules/index' import { isEmptyValue } from '../util' -import { hasOwn } from '../../type' +import { type } from '@opentiny/utils' const ENUM = 'enum' export default function (rule, checkValue, callback, source, options) { const errors = [] - const validate = rule.required || (!rule.required && hasOwn.call(source, rule.field)) + const validate = rule.required || (!rule.required && type.hasOwn.call(source, rule.field)) if (validate) { if (isEmptyValue(checkValue) && !rule.required) { diff --git a/packages/renderless/src/common/validate/validations/float.ts b/packages/renderless/src/common/validate/validations/float.ts index db58179a87..c603fd7748 100644 --- a/packages/renderless/src/common/validate/validations/float.ts +++ b/packages/renderless/src/common/validate/validations/float.ts @@ -12,11 +12,11 @@ import rules from '../rules/index' import { isEmptyValue } from '../util' -import { hasOwn } from '../../type' +import { type } from '@opentiny/utils' export default function (rule, checkValue, cb, source, options) { const errors = [] - const validate = rule.required || (!rule.required && hasOwn.call(source, rule.field)) + const validate = rule.required || (!rule.required && type.hasOwn.call(source, rule.field)) if (validate) { if (isEmptyValue(checkValue) && !rule.required) { diff --git a/packages/renderless/src/common/validate/validations/integer.ts b/packages/renderless/src/common/validate/validations/integer.ts index d890b4a7bc..5d1f503789 100644 --- a/packages/renderless/src/common/validate/validations/integer.ts +++ b/packages/renderless/src/common/validate/validations/integer.ts @@ -12,11 +12,11 @@ import rules from '../rules/index' import { isEmptyValue } from '../util' -import { hasOwn } from '../../type' +import { type } from '@opentiny/utils' export default function (rule, checkValue, callback, source, options) { const errors = [] - const validate = rule.required || (!rule.required && hasOwn.call(source, rule.field)) + const validate = rule.required || (!rule.required && type.hasOwn.call(source, rule.field)) if (validate) { if (isEmptyValue(checkValue) && !rule.required) { diff --git a/packages/renderless/src/common/validate/validations/method.ts b/packages/renderless/src/common/validate/validations/method.ts index 6ccfbc0c78..b5f0142aca 100644 --- a/packages/renderless/src/common/validate/validations/method.ts +++ b/packages/renderless/src/common/validate/validations/method.ts @@ -12,10 +12,10 @@ import rules from '../rules/index' import { isEmptyValue } from '../util' -import { hasOwn } from '../../type' +import { type } from '@opentiny/utils' export default function (rule, checkValue, callback, source, options) { - const validate = rule.required || (!rule.required && hasOwn.call(source, rule.field)) + const validate = rule.required || (!rule.required && type.hasOwn.call(source, rule.field)) const errors = [] if (validate) { diff --git a/packages/renderless/src/common/validate/validations/number.ts b/packages/renderless/src/common/validate/validations/number.ts index 8e457cfced..3fd651b586 100644 --- a/packages/renderless/src/common/validate/validations/number.ts +++ b/packages/renderless/src/common/validate/validations/number.ts @@ -12,11 +12,11 @@ import rules from '../rules/index' import { isEmptyValue } from '../util' -import { hasOwn } from '../../type' +import { type } from '@opentiny/utils' export default function (rule, checkValue, callback, source, options) { const errors = [] - const validate = rule.required || (!rule.required && hasOwn.call(source, rule.field)) + const validate = rule.required || (!rule.required && type.hasOwn.call(source, rule.field)) if (validate) { if (checkValue === '') { diff --git a/packages/renderless/src/common/validate/validations/pattern.ts b/packages/renderless/src/common/validate/validations/pattern.ts index 1f914f458c..bbf8ffa8b9 100644 --- a/packages/renderless/src/common/validate/validations/pattern.ts +++ b/packages/renderless/src/common/validate/validations/pattern.ts @@ -12,11 +12,11 @@ import rules from '../rules/index' import { isEmptyValue } from '../util' -import { hasOwn } from '../../type' +import { type } from '@opentiny/utils' export default function (rule, checkValue, callback, source, options) { const errors = [] - const validate = rule.required || (!rule.required && hasOwn.call(source, rule.field)) + const validate = rule.required || (!rule.required && type.hasOwn.call(source, rule.field)) if (validate) { if (isEmptyValue(checkValue, 'string') && !rule.required) { diff --git a/packages/renderless/src/common/validate/validations/string.ts b/packages/renderless/src/common/validate/validations/string.ts index 23b73f39a1..61e89bb4d2 100644 --- a/packages/renderless/src/common/validate/validations/string.ts +++ b/packages/renderless/src/common/validate/validations/string.ts @@ -12,11 +12,11 @@ import rules from '../rules/index' import { isEmptyValue } from '../util' -import { hasOwn } from '../../type' +import { type } from '@opentiny/utils' export default function (rule, checkValue, callback, source, options) { const errors = [] - const validate = rule.required || (!rule.required && hasOwn.call(source, rule.field)) + const validate = rule.required || (!rule.required && type.hasOwn.call(source, rule.field)) if (validate) { if (isEmptyValue(checkValue, 'string') && !rule.required) { diff --git a/packages/renderless/src/common/validate/validations/type.ts b/packages/renderless/src/common/validate/validations/type.ts index ef5d3111de..85005f9602 100644 --- a/packages/renderless/src/common/validate/validations/type.ts +++ b/packages/renderless/src/common/validate/validations/type.ts @@ -12,12 +12,12 @@ import rules from '../rules/index' import { isEmptyValue } from '../util' -import { hasOwn } from '../../type' +import { type } from '@opentiny/utils' export default function (rule, checkValue, callback, source, options) { const ruleType = rule.type const errors = [] - const validate = rule.required || (!rule.required && hasOwn.call(source, rule.field)) + const validate = rule.required || (!rule.required && type.hasOwn.call(source, rule.field)) if (validate) { if (isEmptyValue(checkValue, ruleType) && !rule.required) { diff --git a/packages/renderless/src/container/index.ts b/packages/renderless/src/container/index.ts index 19ab6136b0..bf2c2aa858 100644 --- a/packages/renderless/src/container/index.ts +++ b/packages/renderless/src/container/index.ts @@ -10,7 +10,7 @@ * */ -import { isNumber } from '../common/type' +import { type } from '@opentiny/utils' export const computedShowHeader = ({ constants, props }) => @@ -27,7 +27,7 @@ export const computedShowAside = () => props.pattern !== constants.CLASSIC -const transferWidthOrHeight = (value) => (isNumber(value) ? value + 'px' : value) +const transferWidthOrHeight = (value) => (type.isNumber(value) ? value + 'px' : value) export const computedHeaderStyle = ({ constants, props }) => diff --git a/packages/renderless/src/file-upload/index.ts b/packages/renderless/src/file-upload/index.ts index 611c434224..c1919cd34c 100644 --- a/packages/renderless/src/file-upload/index.ts +++ b/packages/renderless/src/file-upload/index.ts @@ -32,8 +32,7 @@ import type { import { extend } from '../common/object' import { xss, log, crypt } from '@opentiny/utils' import uploadAjax from '../common/deps/upload-ajax' -import { isObject } from '../common/type' -import { isEmptyObject } from '../common/type' +import { type } from '@opentiny/utils' let initTokenPromise = null @@ -60,7 +59,7 @@ export const initService = ({ const { network = {}, common = {} } = service || {} const { request, get, post, all, spread, CancelToken = {} } = network let requestFn - if (!isEmptyObject(props.hwh5)) { + if (!type.isEmptyObject(props.hwh5)) { const { HWH5 } = props.hwh5 const { uploadToEDM } = HWH5() requestFn = props.httpRequest || uploadToEDM @@ -532,7 +531,7 @@ const handleHwh5Files = (files: IFileUploadFile[], hwh5: object): IFileUploadFil if (file instanceof File) return file let url let f = {} - if (isObject(file)) { + if (type.isObject(file)) { url = file.url f = file } else { @@ -2277,7 +2276,7 @@ export const previewFile = return } - if (isObject(file) || (Array.isArray(file) && file.length === 1)) { + if (type.isObject(file) || (Array.isArray(file) && file.length === 1)) { api.previewFileSingle({ file: Array.isArray(file) ? { ...file[0] } : file, resolve, open }) } else if (Array.isArray(file) && file.length > 1) { api.previewFileBatch({ file, resolve, open }) @@ -2451,7 +2450,7 @@ export const getPreviewUrlSync = for (let key in paramsData) { const val = paramsData[key] - if (!isObject(val)) { + if (!type.isObject(val)) { if (key === 'text') { params.push(`watermark=${encodeURIComponent(val)}`) } @@ -2480,7 +2479,7 @@ export const previewImage = } service.getPreviewUrl().then((url) => { - if (isObject(file) || (Array.isArray(file) && file.length === 1)) { + if (type.isObject(file) || (Array.isArray(file) && file.length === 1)) { api .previewImageSingle({ url, file: Array.isArray(file) ? { ...file[0] } : file }) .then((link) => resolve(link)) diff --git a/packages/renderless/src/file-upload/vue.ts b/packages/renderless/src/file-upload/vue.ts index 0b8a033dea..2f3f76a563 100644 --- a/packages/renderless/src/file-upload/vue.ts +++ b/packages/renderless/src/file-upload/vue.ts @@ -98,7 +98,7 @@ import { closeRecordPanel, getTipMessage } from './index' -import { isEmptyObject } from '../common/type' +import { type } from '@opentiny/utils' export const api = [ 'state', @@ -177,7 +177,7 @@ const initState = ({ fileWater: false, tabUrl: '', cacheDocuments: {}, - isEdm: computed(() => !isEmptyObject(props.edm)), + isEdm: computed(() => !type.isEmptyObject(props.edm)), uploadDisabled: computed(() => api.computedUploadDisabled()), dialogConfigObj: computed(() => api.getDialogConfigObj()), uploadingFiles: [], @@ -194,7 +194,7 @@ const initState = ({ isDragover: false, downloadCancelToken: {}, // 取消下载token downloadCancelData: {}, // 取消下载时需要清空的缓存数据 - isHwh5: computed(() => !isEmptyObject(props.hwh5)), + isHwh5: computed(() => !type.isEmptyObject(props.hwh5)), selected: null, types: computed(() => api.computedSourcetype()), triggerClickType: '', diff --git a/packages/renderless/src/fluent-editor/index.ts b/packages/renderless/src/fluent-editor/index.ts index acaebbec5b..e562e62d83 100644 --- a/packages/renderless/src/fluent-editor/index.ts +++ b/packages/renderless/src/fluent-editor/index.ts @@ -1,5 +1,5 @@ import { extend } from '../common/object' -import { isNull } from '../common/type' +import { type as _type } from '@opentiny/utils' import { xss } from '@opentiny/utils' import { set } from '../chart-core/deps/utils' import { on, off } from '../common/deps/dom' @@ -293,7 +293,7 @@ export const inputFileHandler = const betterToolbar = state.quill.getModule('toolbar') let fileInput = betterToolbar.container.querySelector(`input.ql-${type}[type=file]`) - if (isNull(fileInput)) { + if (_type.isNull(fileInput)) { fileInput = document.createElement('input') fileInput.classList.add(`ql-${type}`) fileInput.setAttribute('type', 'file') diff --git a/packages/renderless/src/fluent-editor/options.ts b/packages/renderless/src/fluent-editor/options.ts index e58e3f35ee..71459c0714 100644 --- a/packages/renderless/src/fluent-editor/options.ts +++ b/packages/renderless/src/fluent-editor/options.ts @@ -1,4 +1,4 @@ -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' const fontFamilyConfig = [ 'songti', @@ -102,44 +102,46 @@ export const mention = (mentionObj) => ({ } }) -const listAutofillHandler = ({ FluentEditor, state }) => (range, context) => { - const formats = state.quill.getFormat(range) - if (formats['table-cell-line']) { - return true - } - if (isNull(state.quill.scroll.query('list'))) { - return true - } - const { length } = context.prefix - const [line, offset] = state.quill.getLine(range.index) - if (offset > length) { - return true - } - let value - let prefix = context.prefix.trim() +const listAutofillHandler = + ({ FluentEditor, state }) => + (range, context) => { + const formats = state.quill.getFormat(range) + if (formats['table-cell-line']) { + return true + } + if (type.isNull(state.quill.scroll.query('list'))) { + return true + } + const { length } = context.prefix + const [line, offset] = state.quill.getLine(range.index) + if (offset > length) { + return true + } + let value + let prefix = context.prefix.trim() - if (~['[]', '[ ]'].indexOf(prefix)) { - value = 'unchecked' - } else if (prefix === '[x]') { - value = 'checked' - } else if (~['-', '*'].indexOf(prefix)) { - value = 'bullet' - } else { - value = 'ordered' - } + if (~['[]', '[ ]'].indexOf(prefix)) { + value = 'unchecked' + } else if (prefix === '[x]') { + value = 'checked' + } else if (~['-', '*'].indexOf(prefix)) { + value = 'bullet' + } else { + value = 'ordered' + } - state.quill.insertText(range.index, ' ', FluentEditor.sources.USER) - state.quill.history.cutoff() - const delta = new FluentEditor.imports['delta']() - .retain(range.index - offset) - .delete(length + 1) - .retain(line.length() - 2 - offset) - .retain(1, { list: { value: value } }) - state.quill.updateContents(delta, FluentEditor.sources.USER) - state.quill.history.cutoff() - state.quill.setSelection(range.index - length, FluentEditor.sources.SILENT) - return false -} + state.quill.insertText(range.index, ' ', FluentEditor.sources.USER) + state.quill.history.cutoff() + const delta = new FluentEditor.imports.delta() + .retain(range.index - offset) + .delete(length + 1) + .retain(line.length() - 2 - offset) + .retain(1, { list: { value } }) + state.quill.updateContents(delta, FluentEditor.sources.USER) + state.quill.history.cutoff() + state.quill.setSelection(range.index - length, FluentEditor.sources.SILENT) + return false + } const listAutofill = ({ FluentEditor, state }) => ({ key: ' ', @@ -299,7 +301,7 @@ export const iconOptionMobileFirst = { }, redo: ``, size: ``, - undo: ``, + undo: `` } export const simpleToolbar = [ diff --git a/packages/renderless/src/form-item/index.ts b/packages/renderless/src/form-item/index.ts index 6744731d0e..2673d3b58c 100644 --- a/packages/renderless/src/form-item/index.ts +++ b/packages/renderless/src/form-item/index.ts @@ -14,7 +14,7 @@ import { POSITION, VALIDATE_STATE } from '../common' import { omitText } from '../common/string' import { merge } from '../common/object' import Validator from '../common/validate' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' import debounce from '../common/deps/debounce' import type { IFormItemRenderlessParams, @@ -30,7 +30,7 @@ import type { StyleValue } from 'vue' export const watchError = (state: IFormItemRenderlessParams['state']) => (value: string): void => { - if (!isNull(value) && state.getValidateType === 'tip') { + if (!type.isNull(value) && state.getValidateType === 'tip') { state.canShowTip = true } diff --git a/packages/renderless/src/grid/static/base/helperEqualCompare.ts b/packages/renderless/src/grid/static/base/helperEqualCompare.ts index f14d842772..c8bbaba6af 100644 --- a/packages/renderless/src/grid/static/base/helperEqualCompare.ts +++ b/packages/renderless/src/grid/static/base/helperEqualCompare.ts @@ -23,7 +23,7 @@ * */ -import { isDate, isRegExp } from '../../../common/type' +import { type } from '@opentiny/utils' import isNumber from './isNumber' import isString from './isString' import isBoolean from './isBoolean' @@ -39,11 +39,11 @@ const helperEqualCompare = ({ val1, val2, compare, func, key, obj1, obj2 }) => { } if (val1 && val2 && !isNumber(val1) && !isNumber(val2) && !isString(val1) && !isString(val2)) { - if (isRegExp(val1)) { + if (type.isRegExp(val1)) { return compare(String(val1), String(val2), key, obj1, obj2) } - if (isDate(val1) || isBoolean(val1)) { + if (type.isDate(val1) || isBoolean(val1)) { return compare(Number(val1), Number(val2), key, obj1, obj2) } diff --git a/packages/renderless/src/grid/static/base/isPlainObject.ts b/packages/renderless/src/grid/static/base/isPlainObject.ts index bb94d01564..8f1a35e141 100644 --- a/packages/renderless/src/grid/static/base/isPlainObject.ts +++ b/packages/renderless/src/grid/static/base/isPlainObject.ts @@ -10,6 +10,6 @@ * */ -import { isPlainObject } from '../../../common/type' +import { type } from '@opentiny/utils' -export default isPlainObject +export default type.isPlainObject diff --git a/packages/renderless/src/grid/utils/common.ts b/packages/renderless/src/grid/utils/common.ts index 44150d46f2..d27cb25e2e 100644 --- a/packages/renderless/src/grid/utils/common.ts +++ b/packages/renderless/src/grid/utils/common.ts @@ -23,7 +23,7 @@ * */ -import { isNull } from '../../common/type' +import { type } from '@opentiny/utils' import { find } from '../../common/array' import { get, isFunction, set } from '../static' @@ -84,7 +84,7 @@ export const initFilter = (filter) => { } } -export const formatText = (value) => `${isNull(value) ? '' : value}` +export const formatText = (value) => `${type.isNull(value) ? '' : value}` export const setCellValue = (row, column, value) => { const { format, property } = column diff --git a/packages/renderless/src/image/index.ts b/packages/renderless/src/image/index.ts index dc9ab6721f..18ea2b5181 100644 --- a/packages/renderless/src/image/index.ts +++ b/packages/renderless/src/image/index.ts @@ -12,7 +12,7 @@ import type { IImageProps, IImageRenderlessParams, IImageState } from '@/types' import { on, off, getScrollContainer, isInContainer } from '../common/deps/dom' -import { typeOf } from '../common/type' +import { type } from '@opentiny/utils' import { rafThrottle } from '../image-viewer' import { xss } from '@opentiny/utils' @@ -106,7 +106,7 @@ export const addLazyLoadListener = if (isHtmlElement(scrollContainer)) { _scrollContainer = scrollContainer as HTMLElement - } else if (typeOf(scrollContainer) === 'string') { + } else if (type.typeOf(scrollContainer) === 'string') { _scrollContainer = document.querySelector(scrollContainer as string)! } else { _scrollContainer = getScrollContainer(vm.$el) as HTMLElement diff --git a/packages/renderless/src/modal/index.ts b/packages/renderless/src/modal/index.ts index 150a3750be..93eafc826e 100644 --- a/packages/renderless/src/modal/index.ts +++ b/packages/renderless/src/modal/index.ts @@ -14,7 +14,7 @@ import { KEY_CODE } from '../common' import { on, off, addClass, hasClass, removeClass } from '../common/deps/dom' import PopupManager from '../common/deps/popup-manager' import { getDomNode } from '../common/deps/dom' -import { getViewportWindow } from '../common/global' +import { global } from '@opentiny/utils' import type { IModalProps, @@ -279,7 +279,7 @@ export const open = if (!isMobileFirstMode) { let modalBoxElem = api.getBox() - const viewportWindow = getViewportWindow() + const viewportWindow = global.getViewportWindow() let clientVisibleWidth = viewportWindow.document.documentElement.clientWidth || viewportWindow.document.body.clientWidth diff --git a/packages/renderless/src/nav-menu/index.ts b/packages/renderless/src/nav-menu/index.ts index 962e01ffed..b5cdc128d1 100644 --- a/packages/renderless/src/nav-menu/index.ts +++ b/packages/renderless/src/nav-menu/index.ts @@ -18,7 +18,7 @@ import type { whitchSubMenuType } from '@/types' import { omitText } from '../common/string' -import { isEmptyObject, isObject } from '../common/type' +import { type } from '@opentiny/utils' import PopupManager from '../common/deps/popup-manager' import { mapTree } from '../grid/static' import { transformTreeData } from '../common/array' @@ -41,8 +41,10 @@ export const computedPopClass = (state: INavMenuState) => (): string => { export const computedSubMenus = (state: INavMenuState) => (): menuItemType[] => { let arr: menuItemType[] = state.subMenu - if (state.subMenu && !isEmptyObject(state.subMenu)) { - if (!state.subMenu.map((item) => item.children && !isEmptyObject(item.children)).reduce((pre, cur) => pre || cur)) { + if (state.subMenu && !type.isEmptyObject(state.subMenu)) { + if ( + !state.subMenu.map((item) => item.children && !type.isEmptyObject(item.children)).reduce((pre, cur) => pre || cur) + ) { arr = [{ children: state.subMenu }] } } @@ -180,7 +182,7 @@ export const initData = const menuData = props.fetchMenuData && fetchMenuData() - if (isObject(menuData) && menuData?.then) { + if (type.isObject(menuData) && menuData?.then) { menuData.then((data) => { state.data = mapTree(props.parentKey ? transformTreeData(data, key, props.parentKey) : data, buildData) }) diff --git a/packages/renderless/src/numeric/index.ts b/packages/renderless/src/numeric/index.ts index f8ca67147e..ef5345808d 100644 --- a/packages/renderless/src/numeric/index.ts +++ b/packages/renderless/src/numeric/index.ts @@ -21,7 +21,8 @@ import type { import type { BigIntDecimal } from '../common/bigInt' import { formatNumber, roundFixed } from '../common/decimal' import { getMiniDecimal, lessEquals, equalsDecimal } from '../common/bigInt' -import { isNumber, isNull } from '../common/type' +import { type } from '@opentiny/utils' + import { MOUSEDELTA } from '../common' import { on, off } from '../common/deps/dom' @@ -200,7 +201,7 @@ export const handleFocus = const currentValue = api.getDecimal(state.currentValue) - if (!currentValue.isNaN() && !isNull(state.currentValue)) { + if (!currentValue.isNaN() && !type.isNull(state.currentValue)) { const fractionLen = (currentValue.toString().split('.')[1] || '').length if (fractionLen < state.format.fraction && props.holdZero) { @@ -354,7 +355,7 @@ export const handleInput = .join('.') } - event.target.value = isNull(value) ? '' : value + event.target.value = type.isNull(value) ? '' : value state.lastInput = value state.userInput = value } @@ -387,12 +388,12 @@ export const mounted = state.controls = false } - if (isNumber(state.currentValue) && state.currentValue < (props.min as number)) { + if (type.isNumber(state.currentValue) && state.currentValue < (props.min as number)) { state.currentValue = props.min as number state.lastInput = props.min as number state.userInput = props.min as number } - if (isNumber(state.currentValue) && state.currentValue > (props.max as number)) { + if (type.isNumber(state.currentValue) && state.currentValue > (props.max as number)) { state.currentValue = props.max as number state.lastInput = props.max as number state.userInput = props.max as number @@ -495,8 +496,8 @@ export const getUnitPrecision = ({ const serFra = getUnitPrecision(unit) || {} const serFmt = getNumberFormat() || {} - fraction = isNumber(precision) ? precision : isNumber(format.fraction) ? format.fraction : serFra.fraction - rounding = isNumber(format.rounding) ? format.rounding : serFra.rounding + fraction = type.isNumber(precision) ? precision : type.isNumber(format.fraction) ? format.fraction : serFra.fraction + rounding = type.isNumber(format.rounding) ? format.rounding : serFra.rounding return { ...defaultFmt, fraction, rounding, ...serFmt, ...format } } diff --git a/packages/renderless/src/picker/index.ts b/packages/renderless/src/picker/index.ts index b30e676704..7477e66b2a 100644 --- a/packages/renderless/src/picker/index.ts +++ b/packages/renderless/src/picker/index.ts @@ -11,7 +11,7 @@ */ import { toDate, getDateWithNewTimezone, getStrTimezone, getLocalTimezone } from '../common/date' -import { isNumber, isDate } from '../common/type' +import { type } from '@opentiny/utils' import userPopper from '../common/deps/vue-popper' import { DATEPICKER } from '../common' import { formatDate, parseDate, isDateObject, getWeekNumber, prevDate, nextDate } from '../common/deps/date-util' @@ -197,7 +197,7 @@ export const parsedValue = if (isServiceTimezone) { if (Array.isArray(date)) { date = [].concat(date).map((item) => { - return isDate(item) ? formatDate(item, state.valueFormat, t) : item + return type.isDate(item) ? formatDate(item, state.valueFormat, t) : item }) } else { if (state.valueFormat !== DATEPICKER.TimesTamp) { @@ -213,7 +213,7 @@ export const parsedValue = return getDateWithNewTimezone(result || props.modelValue, from, to, timezoneOffset) } - const trans = (value) => (typeof value === 'string' || isNumber(value) ? toDate(value) : value) + const trans = (value) => (typeof value === 'string' || type.isNumber(value) ? toDate(value) : value) const values = [] .concat(props.modelValue) .map((val) => getDateWithNewTimezone(trans(val), from, to, timezoneOffset)) @@ -235,7 +235,7 @@ export const getTimezone = let serveTimezone = isTzNumber(dbTimezone) ? dbTimezone : isTzNumber(DbTimezone) ? DbTimezone : cur let clientTimezone = isTzNumber(timezone) ? timezone : isTzNumber(Timezone) ? Timezone : cur - let clientTimezoneOffset = isNumber(timezoneOffset) ? timezoneOffset : isNumber(TimezoneOffset) ? TimezoneOffset : 0 + let clientTimezoneOffset = type.isNumber(timezoneOffset) ? timezoneOffset : type.isNumber(TimezoneOffset) ? TimezoneOffset : 0 const value = props.modelValue const str = (Array.isArray(value) ? value[0] : value) || '' const match = typeof str === 'string' && str.match(/(-|\+)(\d{2}):?(\d{2})$/) @@ -254,7 +254,7 @@ export const getTimezone = const nullOrString = (value) => { const arr = Array.isArray(value) ? value : [value] - return arr.every((val) => (!val && !isNumber(val)) || typeof val === 'string') + return arr.every((val) => (!val && !type.isNumber(val)) || typeof val === 'string') } export const getValueFormat = ({ props, utils }) => { @@ -1367,7 +1367,7 @@ export const emitDbTime = if (isServiceTimezone && !valueEquals(date, state.dbTime)) { let hasDate = false const dbTime = [].concat(date).map((item) => { - if (isDate(item)) { + if (type.isDate(item)) { hasDate = true let currentDate = getDateWithNewTimezone(item, getLocalTimezone(), from) diff --git a/packages/renderless/src/popeditor/index.ts b/packages/renderless/src/popeditor/index.ts index 3e5001a6bb..7877cbdd55 100644 --- a/packages/renderless/src/popeditor/index.ts +++ b/packages/renderless/src/popeditor/index.ts @@ -11,7 +11,7 @@ */ import { find } from '../common/array' -import { typeOf, isNull } from '../common/type' +import { type } from '@opentiny/utils' import { getDataset } from '../common/dataset' import { isNullOrEmpty } from '../common/string' import { isEqual } from '../common/object' @@ -95,10 +95,10 @@ export const getDisplay = return displayTxt.join(props.textSplit) } else { - if (isNull(state.selectedDatas)) { + if (type.isNull(state.selectedDatas)) { return '' } else { - return typeOf(state.selectedDatas) === 'object' ? state.selectedDatas[props.textField] : state.selectedDatas + return type.typeOf(state.selectedDatas) === 'object' ? state.selectedDatas[props.textField] : state.selectedDatas } } } @@ -171,7 +171,7 @@ export const handleConfirm = if (props.popseletor === constants.TYPE_GRID) { props.multi ? api.getMultiSelectedData({ props, state }) : api.getRadioSelectedData() - if (!isNull(state.commitValue)) { + if (!type.isNull(state.commitValue)) { state.display = api.getDisplay({ props, state }) if (!isEqual(state.commitValue, props.modelValue)) { @@ -309,7 +309,7 @@ const renderTextHandler = ({ state, props, datas, dataset, value }) => { } const getTreeSelectList = ({ value, state, props }) => { - value = typeOf(value) === 'number' ? (isNaN(value) ? '' : String(value)) : value + value = type.typeOf(value) === 'number' ? (isNaN(value) ? '' : String(value)) : value let treeSelectList = [] diff --git a/packages/renderless/src/popup/index.ts b/packages/renderless/src/popup/index.ts index 4129fee384..407275595f 100644 --- a/packages/renderless/src/popup/index.ts +++ b/packages/renderless/src/popup/index.ts @@ -13,12 +13,12 @@ import { on, off } from '../common/deps/dom' import { touchStart, touchMove } from '../common/deps/touch' import { getScroller } from '../dropdown-menu' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' export const getStyle = (props) => () => { const style = { ...props.popupStyle } - if (!isNull(props.duration)) { + if (!type.isNull(props.duration)) { const key = props.position === 'center' ? 'animationDuration' : 'transitionDuration' style[key] = `${props.duration}s` diff --git a/packages/renderless/src/recycle-scroller/index.ts b/packages/renderless/src/recycle-scroller/index.ts index 92b645f3c4..d68d69e33e 100644 --- a/packages/renderless/src/recycle-scroller/index.ts +++ b/packages/renderless/src/recycle-scroller/index.ts @@ -1,5 +1,5 @@ import { getScrollContainer } from '../common/deps/infinite-scroll' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' let supportsPassive = false @@ -488,7 +488,7 @@ const computePool = (args) => { const key = keyField ? item[keyField] : item - if (isNull(key)) { + if (type.isNull(key)) { throw new Error(`[TINY Error][RecycleScroller] Key is ${key} on item (keyField is '${keyField}')`) } @@ -540,7 +540,7 @@ const unuseInvisible = ({ continuous, pool, checkItem, itemIndexByKey, keyField, view.nr.index = itemIndexByKey[view.item[keyField]] } - if (isNull(view.nr.index) || view.nr.index < startIndex || view.nr.index >= endIndex) { + if (type.isNull(view.nr.index) || view.nr.index < startIndex || view.nr.index >= endIndex) { api.unuseView(view) } } diff --git a/packages/renderless/src/rich-text/table-module.ts b/packages/renderless/src/rich-text/table-module.ts index d44e6e04d1..902c54f24b 100644 --- a/packages/renderless/src/rich-text/table-module.ts +++ b/packages/renderless/src/rich-text/table-module.ts @@ -1,5 +1,5 @@ import { random } from '../common/string' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' function cellName() { return random().toString(36).slice(2) @@ -133,7 +133,7 @@ function provideTableTrick({ Parchment }) { const leaf = getLeafFromQuill() let blot = leaf[0] - while (!isNull(blot) && blot.statics.blotName !== what) { + while (!type.isNull(blot) && blot.statics.blotName !== what) { blot = blot.parent } @@ -220,7 +220,7 @@ function createTable({ value, Container, Parchment, Scroll }) { let blot = leaf[0] let topBranch = null - while (!isNull(blot) && !(blot instanceof Container || blot instanceof Scroll)) { + while (!type.isNull(blot) && !(blot instanceof Container || blot instanceof Scroll)) { topBranch = blot blot = blot.parent } @@ -258,7 +258,7 @@ function provideTable({ Container, Parchment, Scroll, TableTrick, TableRow }) { const next = this.next if ( - !isNull(next) && + !type.isNull(next) && next.prev === this && next.statics.blotName === this.statics.blotName && next.domNode.tagName === this.domNode.tagName && @@ -338,7 +338,7 @@ function provideContainBlot({ Container, Parchment, Block, BlockEmbed }) { this.appendChild(item) } - if (isNull(target.parent)) return + if (type.isNull(target.parent)) return super.replace(target) } @@ -370,7 +370,7 @@ function provideTableRow({ Container, Parchment }) { const next = this.next if ( - !isNull(next) && + !type.isNull(next) && next.prev === this && next.statics.blotName === this.statics.blotName && next.domNode.tagName === this.domNode.tagName && @@ -427,7 +427,7 @@ function provideTableCell({ Container, Parchment, Block, BlockEmbed, ContainBlot optimize() { super.optimize() // Add parent TR and TABLE when missing - if (!isNull(this.parent) && this.parent.statics.blotName !== 'tr') { + if (!type.isNull(this.parent) && this.parent.statics.blotName !== 'tr') { // we will mark td position, put in table and replace mark const mark = Parchment.create('block') @@ -442,7 +442,7 @@ function provideTableCell({ Container, Parchment, Block, BlockEmbed, ContainBlot } // merge same TD id if ( - !isNull(this.next) && + !type.isNull(this.next) && this.next.prev === this && this.next.statics.blotName === this.statics.blotName && this.next.domNode.tagName === this.domNode.tagName && diff --git a/packages/renderless/src/search/index.ts b/packages/renderless/src/search/index.ts index e10827f9ac..745cbf1eeb 100644 --- a/packages/renderless/src/search/index.ts +++ b/packages/renderless/src/search/index.ts @@ -12,7 +12,7 @@ import type { ISearchRenderlessParams, ISearchValue } from '@/types' import { on, off } from '../common/deps/dom' import PopupManager from '../common/deps/popup-manager' -import { isObject, typeOf } from '../common/type' +import { type } from '@opentiny/utils' export const emitInput = ({ emit }: Pick) => @@ -91,9 +91,9 @@ export const setDefaultType = (searchTypes: ISearchValue[], typeValue: ISearchVa for (let i = 0, len = searchTypes.length; i < len; i++) { if ( - isObject(searchTypes[i]) && - typeOf(searchTypes[i].value) !== 'undefined' && - typeOf(searchTypes[i].text) !== 'undefined' + type.isObject(searchTypes[i]) && + type.typeOf(searchTypes[i].value) !== 'undefined' && + type.typeOf(searchTypes[i].text) !== 'undefined' ) { type = searchTypes[i] break @@ -108,9 +108,9 @@ export const formatSearchTypes = (searchTypes: ISearchValue[]): ISearchValue[] = for (let i = 0, len = searchTypes.length; i < len; i++) { if ( - isObject(searchTypes[i]) && - typeOf(searchTypes[i].value) !== 'undefined' && - typeOf(searchTypes[i].text) !== 'undefined' + type.isObject(searchTypes[i]) && + type.typeOf(searchTypes[i].value) !== 'undefined' && + type.typeOf(searchTypes[i].text) !== 'undefined' ) { types.push(searchTypes[i]) } diff --git a/packages/renderless/src/select/index.ts b/packages/renderless/src/select/index.ts index 33d779c806..22f91514e8 100644 --- a/packages/renderless/src/select/index.ts +++ b/packages/renderless/src/select/index.ts @@ -6,12 +6,11 @@ import PopupManager from '../common/deps/popup-manager' import debounce from '../common/deps/debounce' import { getDataset } from '../common/dataset' import Memorize from '../common/deps/memorize' -import { isEmptyObject } from '../common/type' import { addResizeListener, removeResizeListener } from '../common/deps/resize-event' import { extend } from '../common/object' import { BROWSER_NAME } from '../common' import browserInfo from '../common/browser' -import { isNull } from '../common/type' +import { type } from '@opentiny/utils' import { fastdom } from '../common/deps/fastdom' import { deepClone } from '../picker-column' import { escapeRegexpString } from '../option' @@ -364,7 +363,7 @@ export const getSelectedOption = option = state.selected.find((v) => getObj(v, props.valueField) === value && !v.isFakeLabel) } else { if ( - !isEmptyObject(state.selected) && + !type.isEmptyObject(state.selected) && getObj(state.selected, props.valueField) === value && !state.selected.isFakeLabel ) { @@ -447,7 +446,7 @@ const setGridOrTreeSelected = ({ props, state, vm, isTree, api, init }) => { const nestdata = isRemote ? state.remoteData : isTree ? api.getTreeData(state.treeData) : state.gridData const data = find(nestdata, (item) => props.modelValue === item[props.valueField]) - if (isEmptyObject(data)) { + if (type.isEmptyObject(data)) { api.clearNoMatchValue('') return } @@ -2299,7 +2298,7 @@ export const computedShowClose = (state.inputHovering || (props.multiple && state.visible)) && (props.multiple ? Array.isArray(props.modelValue) && props.modelValue.length > 0 - : !isNull(props.modelValue) && props.modelValue !== '') + : !type.isNull(props.modelValue) && props.modelValue !== '') // tiny 新增: aui有自己的逻辑,移至defineConfig中去了 export const computedCollapseTagSize = (state) => () => state.selectSize diff --git a/packages/renderless/src/select/vue.ts b/packages/renderless/src/select/vue.ts index 76cd4966dd..3e36e1c075 100644 --- a/packages/renderless/src/select/vue.ts +++ b/packages/renderless/src/select/vue.ts @@ -113,7 +113,7 @@ import { computedCurrentSizeMap } from './index' import debounce from '../common/deps/debounce' -import { isNumber } from '../common/type' +import { type } from '@opentiny/utils' import { useUserAgent } from '../common/deps/useUserAgent' import { isBrowser } from '../common/browser' @@ -323,7 +323,7 @@ const initStateAdd = ({ computed, props, api, parent }) => { currentKey: props.modelValue, updateId: '', popperElm: null, - debounce: computed(() => (isNumber(props.queryDebounce) ? props.queryDebounce : props.remote ? 300 : 0)), + debounce: computed(() => (type.isNumber(props.queryDebounce) ? props.queryDebounce : props.remote ? 300 : 0)), emptyText: computed(() => api.emptyText()), emptyFlag: computed(() => api.emptyFlag()), formItemSize: computed(() => (parent.formItem || { state: {} }).state.formItemSize), diff --git a/packages/renderless/src/skeleton/index.ts b/packages/renderless/src/skeleton/index.ts index 89cad526e0..90ac26b7fa 100644 --- a/packages/renderless/src/skeleton/index.ts +++ b/packages/renderless/src/skeleton/index.ts @@ -1,11 +1,11 @@ -import { isNumber, isNull } from '../common/type' +import { type } from '@opentiny/utils' export const toPxStyle = (value: string | number): undefined | string => { - if (isNull(value)) { + if (type.isNull(value)) { return undefined } - if (isNumber(value)) { + if (type.isNumber(value)) { return `${value}px` } diff --git a/packages/renderless/src/statistic/index.ts b/packages/renderless/src/statistic/index.ts index 8ff2ad8b3d..b23ae9e4b4 100644 --- a/packages/renderless/src/statistic/index.ts +++ b/packages/renderless/src/statistic/index.ts @@ -1,4 +1,4 @@ -import { isFunction } from '../common/type' +import { type } from '@opentiny/utils' export const isNumber = ({ props }) => @@ -9,7 +9,7 @@ export const isNumber = export const getIntegerAndDecimal = ({ props }) => () => { - if (isFunction(props.formatter)) { + if (type.isFunction(props.formatter)) { return props.formatter(props.value) } if (!isNumber(props.value)) { diff --git a/packages/renderless/src/tabbar-item/index.ts b/packages/renderless/src/tabbar-item/index.ts index cda0bdce90..a183f9aadd 100644 --- a/packages/renderless/src/tabbar-item/index.ts +++ b/packages/renderless/src/tabbar-item/index.ts @@ -10,15 +10,15 @@ * */ -import { isObject, isNull } from '../common/type' +import { type } from '@opentiny/utils' export const getRouteActive = ({ props, route }) => () => { if (props.to && route) { - const config = isObject(props.to) ? props.to : { path: props.to } + const config = type.isObject(props.to) ? props.to : { path: props.to } const pathMatched = config.path === route.path - const nameMatched = !isNull(config.name) && config.name === route.name + const nameMatched = !type.isNull(config.name) && config.name === route.name return pathMatched || nameMatched } diff --git a/packages/renderless/src/toggle-menu/index.ts b/packages/renderless/src/toggle-menu/index.ts index 040cb8412c..beef6ea293 100644 --- a/packages/renderless/src/toggle-menu/index.ts +++ b/packages/renderless/src/toggle-menu/index.ts @@ -10,8 +10,7 @@ * */ -import { xss } from '@opentiny/utils' -import { isObject } from '../common/type' +import { xss, type } from '@opentiny/utils' export const filterNode = (props) => (value, data) => { const node = data[props.props.label || 'label'] || '' @@ -49,7 +48,7 @@ export const initData = state.datas = api.setMenuKey({ newData: [], menuData }) } else if (typeof service.getMenuDataAsync === 'function') { const asyncMenuData = service.getMenuDataAsync() - if (isObject(asyncMenuData) && asyncMenuData.then) { + if (type.isObject(asyncMenuData) && asyncMenuData.then) { asyncMenuData.then((data) => { state.datas = api.setMenuKey({ newData: [], menuData: data }) }) diff --git a/packages/renderless/src/wizard/index.ts b/packages/renderless/src/wizard/index.ts index 692cdea8ef..f13315f783 100644 --- a/packages/renderless/src/wizard/index.ts +++ b/packages/renderless/src/wizard/index.ts @@ -13,7 +13,7 @@ import type { IWizardRenderlessParams, IWizardPropsDataNode, IWizardNodesItem } import { format } from '../common/date' import { copyArray, extend } from '../common/object' -import { isObject } from '../common/type' +import { type } from '@opentiny/utils' export const lastStepHandle = ({ state, emit }: Pick) => @@ -76,7 +76,7 @@ export const nodeClick = } export const cloneDeep = (data) => { - if (isObject(data)) { + if (type.isObject(data)) { return extend(true, data) } else if (Array.isArray(data)) { return copyArray(data) diff --git a/packages/renderless/src/common/global.ts b/packages/utils/src/global/index.ts similarity index 100% rename from packages/renderless/src/common/global.ts rename to packages/utils/src/global/index.ts diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 3e8d19748d..468c696102 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,15 +1,22 @@ import * as _nanoid from './nanoid/index' import _xss from './xss/index' +import * as _type from './type/index' +import * as _global from './global/index' import * as _logger from './logger/index' import * as _crypt from './crypt/index' type NanoidType = typeof _nanoid type XssType = typeof _xss +type Type = typeof _type +type GlobalType = typeof _global type LoggerType = typeof _logger type CryptType = typeof _crypt + interface Default { nanoid: NanoidType xss: XssType + type: Type + global: GlobalType log: LoggerType crypt: CryptType } @@ -17,12 +24,16 @@ interface Default { const def: Default = { nanoid: _nanoid, xss: _xss, + type: _type, + global: _global, log: _logger, crypt: _crypt } export const nanoid: NanoidType = _nanoid export const xss: XssType = _xss +export const type: Type = _type +export const global: GlobalType = _global export const log: LoggerType = _logger export const crypt: CryptType = _crypt diff --git a/packages/renderless/src/common/type.ts b/packages/utils/src/type/index.ts similarity index 96% rename from packages/renderless/src/common/type.ts rename to packages/utils/src/type/index.ts index 6d78d183da..23cc754189 100644 --- a/packages/renderless/src/common/type.ts +++ b/packages/utils/src/type/index.ts @@ -147,7 +147,7 @@ export const isNumeric = (value: any) => value - parseFloat(value) >= 0 * let date = new Date() * isDate(date) // true */ -export const isDate = (value) => typeOf(value) === 'date' +export const isDate = (value: any) => typeOf(value) === 'date' /** * 判断两个值是否值相同且类型相同。 @@ -163,4 +163,4 @@ export const isSame = (x: any, y: any) => /** 判断是否是正则表达式 */ export const isRegExp = (value: any) => typeOf(value) === 'regExp' -export const isPromise = (val) => isObject(val) && isFunction(val.then) && isFunction(val.catch) +export const isPromise = (val: any) => isObject(val) && isFunction(val.then) && isFunction(val.catch) diff --git a/packages/vue-locale/package.json b/packages/vue-locale/package.json index 6b6a7f80c9..de274f0bbe 100644 --- a/packages/vue-locale/package.json +++ b/packages/vue-locale/package.json @@ -8,6 +8,7 @@ "sideEffects": false, "type": "module", "dependencies": { + "@opentiny/utils": "workspace:~", "@opentiny/vue-renderless": "workspace:~", "@opentiny/vue-theme": "workspace:~", "@opentiny/vue-theme-mobile": "workspace:~" diff --git a/packages/vue-locale/src/glob.ts b/packages/vue-locale/src/glob.ts index 07af7813f3..a344007ad0 100644 --- a/packages/vue-locale/src/glob.ts +++ b/packages/vue-locale/src/glob.ts @@ -1,15 +1,14 @@ import { formatNumber, recoverNumber } from '@opentiny/vue-renderless/common/decimal' import { toDate, getDateWithNewTimezone } from '@opentiny/vue-renderless/common/date' -import { isPlainObject, isDate, isNull } from '@opentiny/vue-renderless/common/type' +import { type } from '@opentiny/utils' import { formatDate } from '@opentiny/vue-renderless/common/deps/date-util' -import { isNumber } from '@opentiny/vue-renderless/common/type' export const getNumberFormat = (config) => { const groupSize = 3 let groupSeparator = ',' let decimalSeparator = '.' - if (isPlainObject(config)) { + if (type.isPlainObject(config)) { return config } @@ -50,7 +49,7 @@ export const getStrTimezone = (value) => { value = minoffset * `${match[1]}1` } - if (isNumber(value) && value >= -12 && value <= 12) { + if (type.isNumber(value) && value >= -12 && value <= 12) { return value } @@ -95,11 +94,11 @@ export default function (t) { * @returns {String} */ formatDate(value, format) { - if (isNull(value)) { + if (type.isNull(value)) { return value } - let date = isDate(value) ? value : toDate(value) + let date = type.isDate(value) ? value : toDate(value) let dbtimezone = opt.DbTimezone let includeTz = value.match && value.match(TZRE) const convers = format === false || arguments[2] === false @@ -112,7 +111,7 @@ export default function (t) { date = this.getDateWithNewTimezone(date, dbtimezone, opt.Timezone, opt.TimezoneOffset) } - return isDate(date) ? formatDate(date, format || opt.DateFormat, t) : null + return type.isDate(date) ? formatDate(date, format || opt.DateFormat, t) : null }, /** diff --git a/packages/vue/src/grid-toolbar/package.json b/packages/vue/src/grid-toolbar/package.json index 650d391fb3..f48a433c52 100644 --- a/packages/vue/src/grid-toolbar/package.json +++ b/packages/vue/src/grid-toolbar/package.json @@ -12,6 +12,7 @@ "//postversion": "pnpm build" }, "dependencies": { + "@opentiny/utils": "workspace:~", "@opentiny/vue-alert": "workspace:~", "@opentiny/vue-button": "workspace:~", "@opentiny/vue-checkbox": "workspace:~", diff --git a/packages/vue/src/grid-toolbar/src/index.ts b/packages/vue/src/grid-toolbar/src/index.ts index d758794f4c..db2186524c 100644 --- a/packages/vue/src/grid-toolbar/src/index.ts +++ b/packages/vue/src/grid-toolbar/src/index.ts @@ -22,7 +22,7 @@ * SOFTWARE. * */ -import { isNumber } from '@opentiny/vue-renderless/common/type' +import { type } from '@opentiny/utils' import { iconMinscreen, iconFullscreen } from '@opentiny/vue-icon' import { h, hooks, $prefix, defineComponent, appProperties, $props } from '@opentiny/vue-common' import { toStringJSON, isEmpty, isPlainObject, toJSONString, find } from '@opentiny/vue-renderless/grid/static/' @@ -679,7 +679,7 @@ export default defineComponent({ }) } - if (isNumber(pageSize) && this.$grid.pagerConfig && this.$grid.pagerConfig.pageSize !== pageSize) { + if (type.isNumber(pageSize) && this.$grid.pagerConfig && this.$grid.pagerConfig.pageSize !== pageSize) { this.$grid.pageSizeChange(pageSize) } } diff --git a/packages/vue/src/grid/package.json b/packages/vue/src/grid/package.json index 3fbabf144d..1f6dcb8d78 100644 --- a/packages/vue/src/grid/package.json +++ b/packages/vue/src/grid/package.json @@ -26,6 +26,7 @@ "@opentiny/vue-renderless": "workspace:~", "@opentiny/vue-tag": "workspace:~", "@opentiny/vue-theme": "workspace:~", + "@opentiny/utils": "workspace:~", "@opentiny/vue-tooltip": "workspace:~" }, "devDependencies": { diff --git a/packages/vue/src/grid/src/body/src/body.tsx b/packages/vue/src/grid/src/body/src/body.tsx index c6b7ec9680..a22110afa4 100644 --- a/packages/vue/src/grid/src/body/src/body.tsx +++ b/packages/vue/src/grid/src/body/src/body.tsx @@ -24,7 +24,7 @@ */ import { isFunction, find } from '@opentiny/vue-renderless/grid/static/' -import { isNull } from '@opentiny/vue-renderless/common/type' +import { type } from '@opentiny/utils' import { updateCellTitle, emitEvent, @@ -348,7 +348,7 @@ const setColumnEvents = (args1) => { let tdOns = {} let fixedHiddenColumn = column.fixed let { editor, showOverflow, showTip } = column - let cellOverflow = isNull(showOverflow) ? allColumnOverflow : showOverflow + let cellOverflow = type.isNull(showOverflow) ? allColumnOverflow : showOverflow let showTitle = cellOverflow === 'title' let showTooltip = cellOverflow === true || cellOverflow === 'tooltip' let showEllipsis = cellOverflow === 'ellipsis' diff --git a/packages/vue/src/grid/src/footer/src/footer.ts b/packages/vue/src/grid/src/footer/src/footer.ts index 81477190e3..a56cc011ff 100644 --- a/packages/vue/src/grid/src/footer/src/footer.ts +++ b/packages/vue/src/grid/src/footer/src/footer.ts @@ -25,7 +25,7 @@ import { isFunction } from '@opentiny/vue-renderless/grid/static/' import { getClass, emitEvent, formatText, updateCellTitle } from '@opentiny/vue-renderless/grid/utils' -import { isNull } from '@opentiny/vue-renderless/common/type' +import { type } from '@opentiny/utils' import { h, $prefix, defineComponent } from '@opentiny/vue-common' const classMap = { @@ -314,7 +314,7 @@ export default defineComponent({ let { column, footerData, footerSpanMethod, tableListeners } = opt let { showOverflow, footerAlign, align, footerClassName } = column let fixedHiddenColumn = column.fixed - let cellOverflowValue = isNull(showOverflow) ? allColumnOverflow : showOverflow + let cellOverflowValue = type.isNull(showOverflow) ? allColumnOverflow : showOverflow let footAlign = footerAlign || align || allFooterAlign || allAlign let isShowEllipsis = cellOverflowValue === 'ellipsis' let isShowTitle = cellOverflowValue === 'title' diff --git a/packages/vue/src/grid/src/header/src/header.ts b/packages/vue/src/grid/src/header/src/header.ts index 31433b72db..fbe5c6ab32 100644 --- a/packages/vue/src/grid/src/header/src/header.ts +++ b/packages/vue/src/grid/src/header/src/header.ts @@ -23,7 +23,7 @@ * */ -import { isObject, isNull } from '@opentiny/vue-renderless/common/type' +import { type } from '@opentiny/utils' import { removeClass, addClass } from '@opentiny/vue-renderless/common/deps/dom' import { isBoolean, isFunction } from '@opentiny/vue-renderless/grid/static/' import { updateCellTitle, emitEvent, getClass } from '@opentiny/vue-renderless/grid/utils' @@ -166,7 +166,7 @@ function getThPropsArg(args) { [classMap.fixedHidden]: fixedHiddenColumn, [classMap.isSortable]: !['index', 'radio', 'selection'].includes(column.type) && column.sortable, [classMap.isEditable]: column.editor, - [classMap.isFilter]: isObject(column.filter), + [classMap.isFilter]: type.isObject(column.filter), [classMap.filterActive]: column.filter && column.filter.hasFilter, 'fixed-left-last__column': column.fixed === 'left' && (leftList[leftList.length - 1] === column || column.isFixedLeftLast), @@ -276,7 +276,7 @@ function getThHandler(args) { let { showHeaderOverflow, showHeaderTip, headerAlign, align, headerClassName } = column let isColGroup = column.children && column.children.length let fixedHiddenColumn = column.fixed - let headOverflow = isNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow + let headOverflow = type.isNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow let showEllipsis = headOverflow === 'ellipsis' let showTitle = headOverflow === 'title' let headAlign = headerAlign || align || allHeaderAlign || allAlign diff --git a/packages/vue/src/grid/src/table/src/methods.ts b/packages/vue/src/grid/src/table/src/methods.ts index b97546746d..c854494c94 100644 --- a/packages/vue/src/grid/src/table/src/methods.ts +++ b/packages/vue/src/grid/src/table/src/methods.ts @@ -25,7 +25,7 @@ import { getColumnList, assemColumn } from '@opentiny/vue-renderless/grid/utils' import { toDecimal } from '@opentiny/vue-renderless/common/string' import { addClass, removeClass, isDisplayNone } from '@opentiny/vue-renderless/common/deps/dom' -import { isNull } from '@opentiny/vue-renderless/common/type' +import { type } from '@opentiny/utils' import debounce from '@opentiny/vue-renderless/common/deps/debounce' import { fastdom } from '@opentiny/vue-renderless/common/deps/fastdom' import { @@ -379,7 +379,7 @@ const Methods = { let rowKey = getTableRowKey(this) let buildRowCache = (row, index) => { let rowId = getRowid(this, row) - if (isNull(rowId) || rowId === '') { + if (type.isNull(rowId) || rowId === '') { rowId = getRowUniqueId() set(row, rowKey, rowId) } @@ -497,7 +497,7 @@ const Methods = { }) // 如果行数据的唯一主键不存在,则生成 const rowId = get(row, rowKey) - if (isNull(rowId) || rowId === '') { + if (type.isNull(rowId) || rowId === '') { set(row, rowKey, getRowUniqueId()) } return row diff --git a/packages/vue/src/grid/src/table/src/table.ts b/packages/vue/src/grid/src/table/src/table.ts index ed812e71ca..a67a41ac04 100644 --- a/packages/vue/src/grid/src/table/src/table.ts +++ b/packages/vue/src/grid/src/table/src/table.ts @@ -25,7 +25,7 @@ import { h, hooks, $prefix, resolveTheme, defineComponent, useInstanceSlots, useRelation } from '@opentiny/vue-common' import Tooltip from '@opentiny/vue-tooltip' import { extend } from '@opentiny/vue-renderless/common/object' -import { isEmptyObject, isObject, isNull } from '@opentiny/vue-renderless/common/type' +import { type } from '@opentiny/utils' import { uniqueId, template, toNumber, isBoolean } from '@opentiny/vue-renderless/grid/static/' import { getRowkey, GlobalEvent, hasChildrenList, getListeners } from '@opentiny/vue-renderless/grid/utils' import TINYGrid from '../../adapter' @@ -99,7 +99,7 @@ function loadStatic(data, _vm) { function mergeTreeConfig(_vm) { if (_vm.treeConfig) { const { ordered } = _vm.treeConfig - _vm.treeOrdered = isNull(ordered) ? true : Boolean(ordered) + _vm.treeOrdered = type.isNull(ordered) ? true : Boolean(ordered) } } @@ -800,7 +800,7 @@ export default defineComponent({ return extend(true, {}, GlobalConfig.menu, this.contextMenu) }, hasFilter() { - return this.tableColumn.some((column) => isObject(column.filter) && !isEmptyObject(column.filter)) + return this.tableColumn.some((column) => type.isObject(column.filter) && !type.isEmptyObject(column.filter)) }, hasTip() { return TINYGrid._tooltip diff --git a/packages/vue/src/grid/src/tools/formatter.ts b/packages/vue/src/grid/src/tools/formatter.ts index 5bef0f4846..310a30958f 100644 --- a/packages/vue/src/grid/src/tools/formatter.ts +++ b/packages/vue/src/grid/src/tools/formatter.ts @@ -35,7 +35,7 @@ import { toBoolValue } from '@opentiny/vue-renderless/common/string' import { find } from '@opentiny/vue-renderless/grid/static/' -import { isNumber, isDate, isNull } from '@opentiny/vue-renderless/common/type' +import { type } from '@opentiny/utils' import { toDateStr, getDateWithNewTimezone, toDate, format } from '@opentiny/vue-renderless/common/date' import { iconClose, iconYes } from '@opentiny/vue-icon' import { warn } from './logger' @@ -81,7 +81,7 @@ const dateFormat = function (value, formatString) { const currentTimezone = 0 - new Date().getTimezoneOffset() / 60 const newDate = getDateWithNewTimezone( - isDate(value) ? value : new Date(toDate(value)), + type.isDate(value) ? value : new Date(toDate(value)), currentTimezone, userFormat.timezone || 8 ) @@ -113,7 +113,7 @@ export default { let { options, optionGroups, optionProps = {}, optionGroupProps = {} } = this.editor const format = this.own.formatConfig - if (isNull(cellValue) || cellValue === '') { + if (type.isNull(cellValue) || cellValue === '') { return '' } @@ -226,7 +226,7 @@ export default { if (section) { let rateValue = parseInt(lengthRate, 10) - if (!isNumber(rateValue)) { + if (!type.isNumber(rateValue)) { return rate } if (rateValue === 100) { @@ -265,7 +265,7 @@ export default { noFork: false } const format = Object.assign(defaultFormat, this.own.formatConfig) - const cellValue = !isNull(format.trueValue) ? value === format.trueValue : toBoolValue(value) + const cellValue = !type.isNull(format.trueValue) ? value === format.trueValue : toBoolValue(value) if (!format.htmlView) { return cellValue diff --git a/packages/vue/src/image-viewer/src/mobileTouch.ts b/packages/vue/src/image-viewer/src/mobileTouch.ts index 4c6940fe28..827f3820a9 100644 --- a/packages/vue/src/image-viewer/src/mobileTouch.ts +++ b/packages/vue/src/image-viewer/src/mobileTouch.ts @@ -10,7 +10,7 @@ * */ import { directive } from '@opentiny/vue-common' -import { isObject } from '@opentiny/vue-renderless/common/type' +import { type as _type } from '@opentiny/utils' class TinyTouch { constructor(element, tinyBinding, type) { @@ -22,7 +22,7 @@ class TinyTouch { that.tinyVueMoves = true that.tinyVueLeave = true that.tinyLongTouch = true - that.tinyVueCallBack = isObject(tinyBinding.value) ? tinyBinding.value.fn : tinyBinding.value + that.tinyVueCallBack = _type.isObject(tinyBinding.value) ? tinyBinding.value.fn : tinyBinding.value that.element.addEventListener('touchstart', (e) => { that.start(e) }) diff --git a/packages/vue/src/recycle-scroller/package.json b/packages/vue/src/recycle-scroller/package.json index b244654c1d..bbd60ea0ca 100644 --- a/packages/vue/src/recycle-scroller/package.json +++ b/packages/vue/src/recycle-scroller/package.json @@ -13,6 +13,7 @@ "dependencies": { "@opentiny/vue-common": "workspace:~", "@opentiny/vue-renderless": "workspace:~", + "@opentiny/utils": "workspace:~", "@opentiny/vue-theme": "workspace:~" }, "license": "MIT" diff --git a/packages/vue/src/recycle-scroller/src/idState.ts b/packages/vue/src/recycle-scroller/src/idState.ts index 5bd7c1d7c9..6744325d5c 100644 --- a/packages/vue/src/recycle-scroller/src/idState.ts +++ b/packages/vue/src/recycle-scroller/src/idState.ts @@ -1,5 +1,5 @@ import { hooks } from '@opentiny/vue-common' -import { isNull } from '@opentiny/vue-renderless/common/type' +import { type } from '@opentiny/utils' const { reactive } = hooks @@ -11,7 +11,7 @@ const buildInstanceTemporary = (store) => { temporary.updateIdState = (vm) => { const id = temporary.getId() - if (isNull(id)) { + if (type.isNull(id)) { console.warn('[TINY Error][Mixin IdState] No id found for IdState with idProp') } @@ -73,7 +73,7 @@ export default function ({ idProp, stateGetterName }) { this.temporary.updateIdState(this) }, [stateGetterName](id) { - return isNull(id) ? store : store[id] ? store[id] : null + return type.isNull(id) ? store : store[id] ? store[id] : null } } } From 429f1a49c022afd44ba08f01329a9b123f697774 Mon Sep 17 00:00:00 2001 From: wuyiping0628 <1106773985@qq.com> Date: Sat, 18 Jan 2025 00:25:25 -0800 Subject: [PATCH 2/9] feat(utils): extract the functions from the type to the tils package --- packages/utils/src/index.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 468c696102..3e8d19748d 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,22 +1,15 @@ import * as _nanoid from './nanoid/index' import _xss from './xss/index' -import * as _type from './type/index' -import * as _global from './global/index' import * as _logger from './logger/index' import * as _crypt from './crypt/index' type NanoidType = typeof _nanoid type XssType = typeof _xss -type Type = typeof _type -type GlobalType = typeof _global type LoggerType = typeof _logger type CryptType = typeof _crypt - interface Default { nanoid: NanoidType xss: XssType - type: Type - global: GlobalType log: LoggerType crypt: CryptType } @@ -24,16 +17,12 @@ interface Default { const def: Default = { nanoid: _nanoid, xss: _xss, - type: _type, - global: _global, log: _logger, crypt: _crypt } export const nanoid: NanoidType = _nanoid export const xss: XssType = _xss -export const type: Type = _type -export const global: GlobalType = _global export const log: LoggerType = _logger export const crypt: CryptType = _crypt From 44a146828504037518aacc3d496ea91d2afd9528 Mon Sep 17 00:00:00 2001 From: wuyiping0628 <1106773985@qq.com> Date: Sat, 18 Jan 2025 01:42:44 -0800 Subject: [PATCH 3/9] feat(utils): extract the functions from the type to the tils package --- packages/utils/src/index.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index ced6869c17..319a94c6b7 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,11 +1,15 @@ import xss from './xss' import log from './log' import crypt from './crypt' +import global from './global' +import * as type from './type' -export { xss, log, crypt } +export { xss, log, crypt, global, type } export default { xss, log, - crypt + crypt, + global, + type } From b3aa4952f6ad1247110b05c5e4c540c7f06b21a5 Mon Sep 17 00:00:00 2001 From: wuyiping0628 <1106773985@qq.com> Date: Mon, 20 Jan 2025 00:48:48 -0800 Subject: [PATCH 4/9] feat(utils): extract functions from the DOM package to the UTILs package --- packages/renderless/src/amount/index.ts | 6 +- packages/renderless/src/anchor/index.ts | 8 +-- packages/renderless/src/chart-core/index.ts | 6 +- .../src/common/deps/ResizeObserver.ts | 14 ++-- .../src/common/deps/clickoutside.ts | 6 +- .../src/common/deps/fullscreen/apis.ts | 8 +-- .../src/common/deps/fullscreen/screenfull.ts | 6 +- packages/renderless/src/common/deps/popper.ts | 18 ++--- .../src/common/deps/popup-manager.ts | 22 +++--- .../src/common/deps/repeat-click.ts | 6 +- .../src/common/deps/useEventListener.ts | 9 ++- .../src/common/deps/useUserAgent.ts | 4 +- .../src/common/deps/useWindowSize.ts | 8 +-- .../renderless/src/common/deps/vue-popper.ts | 8 +-- .../renderless/src/common/deps/vue-popup.ts | 4 +- packages/renderless/src/common/runtime.ts | 3 - packages/renderless/src/crop/index.ts | 6 +- packages/renderless/src/date-panel/index.ts | 6 +- packages/renderless/src/dialog-box/index.ts | 13 ++-- packages/renderless/src/drawer/index.ts | 6 +- .../renderless/src/dropdown-item/index.ts | 4 +- packages/renderless/src/dropdown/index.ts | 42 +++++------ packages/renderless/src/fall-menu/index.ts | 6 +- packages/renderless/src/filter-panel/vue.ts | 6 +- packages/renderless/src/filter/vue.ts | 10 +-- .../renderless/src/floating-button/index.ts | 10 +-- .../renderless/src/fluent-editor/index.ts | 14 ++-- packages/renderless/src/fullscreen/index.ts | 8 +-- packages/renderless/src/grid/utils/dom.ts | 10 ++- packages/renderless/src/grid/utils/event.ts | 16 ++--- packages/renderless/src/image-viewer/index.ts | 27 ++++--- packages/renderless/src/image/index.ts | 11 ++- packages/renderless/src/input/vue.ts | 6 +- packages/renderless/src/load-list/index.ts | 5 +- packages/renderless/src/load-list/vue.ts | 4 +- packages/renderless/src/loading/index.ts | 6 +- packages/renderless/src/modal/index.ts | 40 +++++------ packages/renderless/src/month-table/index.ts | 4 +- packages/renderless/src/nav-menu/index.ts | 6 +- packages/renderless/src/notify/index.ts | 6 +- packages/renderless/src/numeric/index.ts | 8 +-- .../renderless/src/picker-column/index.ts | 14 ++-- packages/renderless/src/popconfirm/vue.ts | 6 +- packages/renderless/src/popeditor/index.ts | 14 ++-- packages/renderless/src/popover/index.ts | 72 +++++++++---------- packages/renderless/src/popup/index.ts | 10 +-- .../src/pull-refresh-mobile-first/index.ts | 18 ++--- .../src/pull-refresh-mobile-first/vue.ts | 4 +- packages/renderless/src/pull-refresh/index.ts | 18 ++--- packages/renderless/src/rate/vue.ts | 10 +-- packages/renderless/src/scrollbar/vue-bar.ts | 4 +- packages/renderless/src/search/index.ts | 5 +- packages/renderless/src/signature/index.ts | 6 +- .../src/slider-button-group/slide-button.ts | 6 +- packages/renderless/src/slider/index.ts | 34 ++++----- packages/renderless/src/split/vue.ts | 8 +-- packages/renderless/src/steps/slide-bar.ts | 6 +- packages/renderless/src/sticky/vue.ts | 5 +- packages/renderless/src/tab-nav/index.ts | 14 ++-- packages/renderless/src/tabbar/index.ts | 4 +- packages/renderless/src/tabbar/vue.ts | 4 +- packages/renderless/src/tall-storage/vue.ts | 6 +- packages/renderless/src/tooltip/index.ts | 30 ++++---- packages/renderless/src/top-box/index.ts | 6 +- packages/renderless/src/tree/index.ts | 13 ++-- .../deps/dom.ts => utils/src/dom/index.ts} | 12 ++-- packages/utils/src/index.ts | 6 +- packages/vue-common/package.json | 1 + packages/vue-common/src/breakpoint.ts | 4 +- .../vue/src/collapse-transition/package.json | 1 + .../vue/src/collapse-transition/src/pc.vue | 10 +-- .../src/grid/src/composable/useDrag/dnd.ts | 24 +++---- packages/vue/src/grid/src/edit/src/methods.ts | 4 +- .../vue/src/grid/src/header/src/header.ts | 6 +- .../vue/src/grid/src/keyboard/src/methods.ts | 20 +++--- .../src/utils/triggerCellMousedownEvent.ts | 4 +- .../utils/triggerHeaderCellMousedownEvent.ts | 8 +-- .../vue/src/grid/src/menu/src/children.ts | 5 +- packages/vue/src/grid/src/menu/src/methods.ts | 5 +- .../vue/src/grid/src/table/src/methods.ts | 13 ++-- .../src/table/src/utils/handleFixedColumn.ts | 10 +-- .../vue/src/grid/src/tooltip/src/methods.ts | 4 +- packages/vue/src/loading/package.json | 1 + packages/vue/src/loading/src/directive.ts | 26 +++---- packages/vue/src/loading/src/service.ts | 14 ++-- packages/vue/src/menu/package.json | 1 + packages/vue/src/menu/src/menu-transition.vue | 10 +-- 87 files changed, 457 insertions(+), 465 deletions(-) rename packages/{renderless/src/common/deps/dom.ts => utils/src/dom/index.ts} (96%) diff --git a/packages/renderless/src/amount/index.ts b/packages/renderless/src/amount/index.ts index a85c44204a..7b61914dbe 100644 --- a/packages/renderless/src/amount/index.ts +++ b/packages/renderless/src/amount/index.ts @@ -10,7 +10,7 @@ * */ -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import { formatNumber } from '../common/decimal' import { getMiniDecimal, equalsDecimal } from '../common/bigInt' @@ -245,9 +245,9 @@ export const handelClick = export const addOutSideEvent = (api) => (visible) => { if (visible) { - on(document, 'click', api.handelClick) + dom.on(document, 'click', api.handelClick) } else { - off(document, 'click', api.handelClick) + dom.off(document, 'click', api.handelClick) } } diff --git a/packages/renderless/src/anchor/index.ts b/packages/renderless/src/anchor/index.ts index 9e5d90ec80..48fc9001c6 100644 --- a/packages/renderless/src/anchor/index.ts +++ b/packages/renderless/src/anchor/index.ts @@ -10,7 +10,7 @@ * */ import type { IAnchorRenderlessParams, IAnchorLinkItem } from '@/types' -import { addClass, removeClass } from '../common/deps/dom' +import { dom } from '@opentiny/utils' const getEleMentBySelect = (parent, selector) => selector?.startsWith('#') ? document.getElementById(selector.slice(1)) : parent.querySelector(selector) @@ -30,9 +30,9 @@ const setMarkClass = ({ state, props }: Pick { - removeClass(activeContentEl, markClass) + dom.removeClass(activeContentEl, markClass) }, 1000) } } @@ -70,7 +70,7 @@ const updateSkidPosition = ({ vm, state, emit }: Pick () => { - on(window, 'resize', api.resizeHandler) + dom.on(window, 'resize', api.resizeHandler) state.once.onresize = true } export const removeResizeListener = ({ state, api }) => () => { - off(window, 'resize', api.resizeHandler) + dom.off(window, 'resize', api.resizeHandler) state.once.onresize = false } diff --git a/packages/renderless/src/common/deps/ResizeObserver.ts b/packages/renderless/src/common/deps/ResizeObserver.ts index 717047044d..9d7a0e57fe 100644 --- a/packages/renderless/src/common/deps/ResizeObserver.ts +++ b/packages/renderless/src/common/deps/ResizeObserver.ts @@ -10,7 +10,7 @@ * */ -import { on, off } from './dom' +import { dom } from '@opentiny/utils' import { isBrowser } from '../browser' const MapShim = (function () { @@ -219,8 +219,8 @@ const ResizeObserverController = (function () { return } - on(document, 'transitionend', this.onTransitionEnd_) - on(window, 'resize', this.refresh) + dom.on(document, 'transitionend', this.onTransitionEnd_) + dom.on(window, 'resize', this.refresh) if (mutationObserverSupported) { this.mutationsObserver_ = new MutationObserver(this.refresh) @@ -234,7 +234,7 @@ const ResizeObserverController = (function () { this.mutationsObserver_.observe(document, options) } else { - on(document, 'DOMSubtreeModified', this.refresh) + dom.on(document, 'DOMSubtreeModified', this.refresh) this.mutationEventsAdded_ = true } @@ -246,13 +246,13 @@ const ResizeObserverController = (function () { return } - off(document, 'transitionend', this.onTransitionEnd_) - off(window, 'resize', this.refresh) + dom.off(document, 'transitionend', this.onTransitionEnd_) + dom.off(window, 'resize', this.refresh) this.mutationsObserver_ && this.mutationsObserver_.disconnect() if (this.mutationEventsAdded_) { - off(document, 'DOMSubtreeModified', this.refresh) + dom.off(document, 'DOMSubtreeModified', this.refresh) } this.mutationsObserver_ = null diff --git a/packages/renderless/src/common/deps/clickoutside.ts b/packages/renderless/src/common/deps/clickoutside.ts index 5809d4a631..b5d02b17e5 100644 --- a/packages/renderless/src/common/deps/clickoutside.ts +++ b/packages/renderless/src/common/deps/clickoutside.ts @@ -10,7 +10,7 @@ * */ -import { on } from './dom' +import { dom } from '@opentiny/utils' const isServer = typeof window === 'undefined' const nodeList = [] @@ -19,14 +19,14 @@ let startClick let seed = 0 if (!isServer) { - on(document, 'mousedown', (event) => { + dom.on(document, 'mousedown', (event) => { startClick = event nodeList .filter((node) => node[nameSpace].mousedownTrigger) .forEach((node) => node[nameSpace].documentHandler(event, startClick)) }) - on(document, 'mouseup', (event) => { + dom.on(document, 'mouseup', (event) => { nodeList .filter((node) => !node[nameSpace].mousedownTrigger) .forEach((node) => node[nameSpace].documentHandler(event, node[nameSpace]?.mouseupTrigger ? event : startClick)) diff --git a/packages/renderless/src/common/deps/fullscreen/apis.ts b/packages/renderless/src/common/deps/fullscreen/apis.ts index 759c772115..4cf7fdf6ec 100644 --- a/packages/renderless/src/common/deps/fullscreen/apis.ts +++ b/packages/renderless/src/common/deps/fullscreen/apis.ts @@ -11,7 +11,7 @@ */ import { extend } from '../../object' -import { on, off } from '../dom' +import { dom } from '@opentiny/utils' import screenfull from './screenfull' const defaults = { @@ -128,7 +128,7 @@ const api = { // 网页全屏模式 按键回调 const keypressCallback = (e) => { if (e.key === 'Escape') { - off(document, 'keyup', keypressCallback) + dom.off(document, 'keyup', keypressCallback) this.exit() } } @@ -136,8 +136,8 @@ const api = { this.isFullscreen = true this.targetElement = targetEle - off(document, 'keyup', keypressCallback) - on(document, 'keyup', keypressCallback) + dom.off(document, 'keyup', keypressCallback) + dom.on(document, 'keyup', keypressCallback) if (this.opts.callback) { this.opts.callback(this.isFullscreen) diff --git a/packages/renderless/src/common/deps/fullscreen/screenfull.ts b/packages/renderless/src/common/deps/fullscreen/screenfull.ts index 804d65a22f..8368aac697 100644 --- a/packages/renderless/src/common/deps/fullscreen/screenfull.ts +++ b/packages/renderless/src/common/deps/fullscreen/screenfull.ts @@ -10,8 +10,8 @@ * */ -import { on, off } from '../dom' import { isBrowser } from '../../browser' +import { dom } from '@opentiny/utils' const fullscreenApi = [ 'fullscreenElement', @@ -141,14 +141,14 @@ const screenfull = { const eventName = eventNameMap[event] if (eventName && isBrowser) { - on(document, eventName, callback) + dom.on(document, eventName, callback) } }, off(event, callback) { const eventName = eventNameMap[event] if (eventName && isBrowser) { - off(document, eventName, callback) + dom.off(document, eventName, callback) } }, raw: fullscreenEvents || {} diff --git a/packages/renderless/src/common/deps/popper.ts b/packages/renderless/src/common/deps/popper.ts index fc9bb352f1..bd5b5c0cf5 100644 --- a/packages/renderless/src/common/deps/popper.ts +++ b/packages/renderless/src/common/deps/popper.ts @@ -10,7 +10,7 @@ * */ -import { on, off, isDisplayNone } from './dom' +import { dom } from '@opentiny/utils' import PopupManager from './popup-manager' import { global, type } from '@opentiny/utils' import { isBrowser } from '../browser' @@ -782,12 +782,12 @@ class Popper { if (this._options.updateHiddenPopperOnScroll) { this.state.updateBoundFn() } else { - if (isDisplayNone(this._reference)) return + if (dom.isDisplayNone(this._reference)) return this.state.updateBoundFn() } } - on(window, 'resize', this.state.updateBoundFn) + dom.on(window, 'resize', this.state.updateBoundFn) if (this._options.boundariesElement !== 'window') { let target: HTMLElement = this._options.scrollParent || getScrollParent(this._reference) @@ -815,26 +815,26 @@ class Popper { this.state.scrollTargets = targets || [] targets.forEach((target) => { - on(target, 'scroll', this.state.scrollUpdate) + dom.on(target, 'scroll', this.state.scrollUpdate) }) } else { if (customTargets.length) { this.state.scrollTargets = customTargets customTargets.forEach((target) => { - on(target, 'scroll', this.state.scrollUpdate) + dom.on(target, 'scroll', this.state.scrollUpdate) }) } else { - on(target, 'scroll', this.state.scrollUpdate) + dom.on(target, 'scroll', this.state.scrollUpdate) } } } } _removeEventListeners() { - off(window, 'resize', this.state.updateBoundFn) + dom.off(window, 'resize', this.state.updateBoundFn) if (this._options.boundariesElement !== 'window' && this.state.scrollTarget) { - off(this.state.scrollTarget, 'scroll', this.state.scrollUpdate) + dom.off(this.state.scrollTarget, 'scroll', this.state.scrollUpdate) this.state.scrollTarget = null // 移除祖先监听 @@ -842,7 +842,7 @@ class Popper { let targets = this.state.scrollTargets || [] targets.forEach((target) => { - off(target, 'scroll', this.state.scrollUpdate) + dom.off(target, 'scroll', this.state.scrollUpdate) }) this.state.scrollTargets = null } diff --git a/packages/renderless/src/common/deps/popup-manager.ts b/packages/renderless/src/common/deps/popup-manager.ts index 1295304e1c..29ab6fb042 100644 --- a/packages/renderless/src/common/deps/popup-manager.ts +++ b/packages/renderless/src/common/deps/popup-manager.ts @@ -11,7 +11,7 @@ */ import { KEY_CODE } from '../index' -import { addClass, removeClass, on } from './dom' +import { dom as doms } from '@opentiny/utils' const isServer = typeof window === 'undefined' @@ -104,19 +104,19 @@ const PopupManager = { // 查询或创建一个modalDom----遮罩层, 为其赋值所有class ,style const modalDom = getModal() - addClass(modalDom, classes.modal) + doms.addClass(modalDom, classes.modal) if (this.modalFade && !PopupManager.hasModal) { - addClass(modalDom, classes.enter) + doms.addClass(modalDom, classes.enter) } if (modalClass) { const classArr = modalClass.trim().split(/\s+/) - classArr.forEach((cls) => addClass(modalDom, cls)) + classArr.forEach((cls) => doms.addClass(modalDom, cls)) } setTimeout(() => { - removeClass(modalDom, classes.enter) + doms.removeClass(modalDom, classes.enter) }, 200) if (zIndex) { @@ -163,7 +163,7 @@ const PopupManager = { if (topPopup.id === id) { if (topPopup.modalClass) { const classArr = topPopup.modalClass.trim().split(/\s+/) - classArr.forEach((cls) => removeClass(modalDom, cls)) + classArr.forEach((cls) => doms.removeClass(modalDom, cls)) } modalStack.pop() @@ -179,8 +179,8 @@ const PopupManager = { } if (modalStack.length === 0) { - this.modalFade && addClass(modalDom, classes.leave) - removeClass(document.body, this.popLockClass) + this.modalFade && doms.addClass(modalDom, classes.leave) + doms.removeClass(document.body, this.popLockClass) this.resetBodyBorder() setTimeout(() => { @@ -193,7 +193,7 @@ const PopupManager = { PopupManager.modalDom = null as unknown as HTMLElement } - removeClass(modalDom, classes.leave) + doms.removeClass(modalDom, classes.leave) }, 200) } } @@ -223,7 +223,7 @@ getModal = () => { { passive: true } ) - on(modalDom, 'click', () => { + doms.on(modalDom, 'click', () => { PopupManager.doOnModalClick() }) } @@ -233,7 +233,7 @@ getModal = () => { if (!isServer) { // 点esc时,关闭栈顶Popup。 也就是说组件内不用关心esc了, 这里统一接管了 - on(window, 'keydown', (event: KeyboardEvent) => { + doms.on(window, 'keydown', (event: KeyboardEvent) => { if (event.keyCode === KEY_CODE.Escape) { const modalStack = PopupManager.modalStack diff --git a/packages/renderless/src/common/deps/repeat-click.ts b/packages/renderless/src/common/deps/repeat-click.ts index 76953bd37c..50012925f0 100644 --- a/packages/renderless/src/common/deps/repeat-click.ts +++ b/packages/renderless/src/common/deps/repeat-click.ts @@ -10,7 +10,7 @@ * */ -import { on, once } from './dom' +import { dom } from '@opentiny/utils' export default (el, binding) => { // fix issue#919 @@ -32,13 +32,13 @@ export default (el, binding) => { interval = null } - on(el, 'mousedown', (e) => { + dom.on(el, 'mousedown', (e) => { if (e.button !== 0) { return } startTime = Date.now() - once(document, 'mouseup', clear) + dom.once(document, 'mouseup', clear) clearInterval(interval) interval = setInterval(handler, LONG_PRESS_INTERVAL) }) diff --git a/packages/renderless/src/common/deps/useEventListener.ts b/packages/renderless/src/common/deps/useEventListener.ts index a6a4019282..5f7034c9b2 100644 --- a/packages/renderless/src/common/deps/useEventListener.ts +++ b/packages/renderless/src/common/deps/useEventListener.ts @@ -1,5 +1,4 @@ -import { on, off, isServer } from './dom' - +import { dom } from '@opentiny/utils' export const onMountedOrActivated = ({ onMounted, onActivated, nextTick }) => (hook) => { @@ -15,7 +14,7 @@ export const onMountedOrActivated = export const useEventListener = ({ unref, isRef, watch, nextTick, onMounted, onUnmounted, onActivated, onDeactivated }) => (type, listener, options = {}) => { - if (isServer) return + if (dom.isServer) return const { target = window, passive = false, capture = false } = options @@ -28,7 +27,7 @@ export const useEventListener = const element = unref(target) if (element && !attached) { - on(element, type, listener, { capture, passive }) + dom.on(element, type, listener, { capture, passive }) attached = true } } @@ -39,7 +38,7 @@ export const useEventListener = const element = unref(target) if (element && attached) { - off(element, type, listener, { capture, passive }) + dom.off(element, type, listener, { capture, passive }) attached = false } } diff --git a/packages/renderless/src/common/deps/useUserAgent.ts b/packages/renderless/src/common/deps/useUserAgent.ts index aaa8d33e08..1c6a2d3571 100644 --- a/packages/renderless/src/common/deps/useUserAgent.ts +++ b/packages/renderless/src/common/deps/useUserAgent.ts @@ -1,7 +1,7 @@ -import { isServer } from './dom' +import { dom } from '@opentiny/utils' function getIsIOS() { - if (isServer) return false + if (dom.isServer) return false return ( window.navigator && window.navigator.userAgent && diff --git a/packages/renderless/src/common/deps/useWindowSize.ts b/packages/renderless/src/common/deps/useWindowSize.ts index 487d57cee2..5f4e2ac324 100644 --- a/packages/renderless/src/common/deps/useWindowSize.ts +++ b/packages/renderless/src/common/deps/useWindowSize.ts @@ -1,4 +1,4 @@ -import { on, isServer } from './dom' +import { dom } from '@opentiny/utils' let width let height @@ -8,7 +8,7 @@ export const useWindowSize = (ref) => () => { width = ref(0) height = ref(0) - if (!isServer) { + if (!dom.isServer) { const update = () => { width.value = window.innerWidth height.value = window.innerHeight @@ -16,8 +16,8 @@ export const useWindowSize = (ref) => () => { update() - on(window, 'resize', update, { passive: true }) - on(window, 'orientationchange', update, { passive: true }) + dom.on(window, 'resize', update, { passive: true }) + dom.on(window, 'orientationchange', update, { passive: true }) } } diff --git a/packages/renderless/src/common/deps/vue-popper.ts b/packages/renderless/src/common/deps/vue-popper.ts index 409d7bb99c..c3cf39c1c7 100644 --- a/packages/renderless/src/common/deps/vue-popper.ts +++ b/packages/renderless/src/common/deps/vue-popper.ts @@ -12,7 +12,7 @@ import PopupManager from './popup-manager' import PopperJS from './popper' -import { on, off, isDisplayNone } from './dom' +import { dom } from '@opentiny/utils' import type { ISharedRenderlessFunctionParams } from 'types/shared.type' import type Popper from './popper' @@ -114,7 +114,7 @@ export default (options: IPopperInputParams) => { const { followReferenceHide = true } = props?.popperOptions || {} const { _popper: popper, _reference: reference } = popperInstance - if (followReferenceHide && isDisplayNone(reference)) { + if (followReferenceHide && dom.isDisplayNone(reference)) { popper.style.display = 'none' } } @@ -173,7 +173,7 @@ export default (options: IPopperInputParams) => { state.popperJS._popper.style.zIndex = nextZIndex(state.popperJS._reference) followHide(state.popperJS) - on(state.popperElm, 'click', stop) + dom.on(state.popperElm, 'click', stop) } /** 第一次 updatePopper 的时候,才真正执行创建 @@ -217,7 +217,7 @@ export default (options: IPopperInputParams) => { if (remove) { // 当popper中嵌套popper时,内层popper被移除后不会重新创建,因此onDeactivated不将内层popper移除 if (state.popperElm && state.popperElm.parentNode === document.body) { - off(state.popperElm, 'click', stop) + dom.off(state.popperElm, 'click', stop) state.popperElm.remove() } } diff --git a/packages/renderless/src/common/deps/vue-popup.ts b/packages/renderless/src/common/deps/vue-popup.ts index 7e137bc874..6e4c7d8030 100644 --- a/packages/renderless/src/common/deps/vue-popup.ts +++ b/packages/renderless/src/common/deps/vue-popup.ts @@ -12,7 +12,7 @@ import { merge } from '../object' import PopupManager from './popup-manager' -import { addClass } from './dom' +import { dom } from '@opentiny/utils' import type { ISharedRenderlessFunctionParams } from 'types/shared.type' let idSeed = 1 @@ -122,7 +122,7 @@ const openFn = if (props.lockScroll) { // 必须先计算宽度,再添加popLockClass。 下面2行不能交换 PopupManager.fixBodyBorder() - addClass(document.body, PopupManager.popLockClass) + dom.addClass(document.body, PopupManager.popLockClass) } } diff --git a/packages/renderless/src/common/runtime.ts b/packages/renderless/src/common/runtime.ts index 32a38c9a01..4579a3bf36 100644 --- a/packages/renderless/src/common/runtime.ts +++ b/packages/renderless/src/common/runtime.ts @@ -25,7 +25,6 @@ import * as dataset from './dataset' import afterLeave from './deps/after-leave' import clickoutside from './deps/clickoutside' import debounce from './deps/debounce' -import * as dom from './deps/dom' import popper from './deps/popper' import popupManager from './deps/popup-manager' import * as resizeEvent from './deps/resize-event' @@ -52,7 +51,6 @@ const Renderless = { afterLeave, dataset, clickoutside, - dom, debounce, popper, resizeEvent, @@ -81,7 +79,6 @@ export { afterLeave, clickoutside, debounce, - dom, popper, popupManager, resizeEvent, diff --git a/packages/renderless/src/crop/index.ts b/packages/renderless/src/crop/index.ts index 141c27c2e6..6aff302436 100644 --- a/packages/renderless/src/crop/index.ts +++ b/packages/renderless/src/crop/index.ts @@ -10,7 +10,7 @@ * */ -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import { toFileSize } from '../common/string' export const watchImageSrc = (state) => (value) => (state.src = value) @@ -19,9 +19,9 @@ export const watchVisible = ({ api, state }) => (value) => { if (value) { - on(document.body, 'keydown', api.shortcutKeys) + dom.on(document.body, 'keydown', api.shortcutKeys) } else { - off(document.body, 'keydown', api.shortcutKeys) + dom.off(document.body, 'keydown', api.shortcutKeys) } state.cropvisible = value diff --git a/packages/renderless/src/date-panel/index.ts b/packages/renderless/src/date-panel/index.ts index 618cfb039a..de6f372f13 100644 --- a/packages/renderless/src/date-panel/index.ts +++ b/packages/renderless/src/date-panel/index.ts @@ -30,7 +30,7 @@ import { extractTimeFormat } from '../common/deps/date-util' import { DATEPICKER } from '../common' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import { getDateWithNewTimezone, getLocalTimezone } from '../common/date' import { fillChar } from '../common/string' @@ -400,14 +400,14 @@ export const resetView = } export const handleEnter = (api) => () => { - on(document.body, 'keydown', api.handleKeydown) + dom.on(document.body, 'keydown', api.handleKeydown) } export const handleLeave = ({ api, emit }) => () => { emit('dodestroy') - off(document.body, 'keydown', api.handleKeydown) + dom.off(document.body, 'keydown', api.handleKeydown) } export const handleKeydown = diff --git a/packages/renderless/src/dialog-box/index.ts b/packages/renderless/src/dialog-box/index.ts index 7a9bccbd4c..3ca4233ce0 100644 --- a/packages/renderless/src/dialog-box/index.ts +++ b/packages/renderless/src/dialog-box/index.ts @@ -10,9 +10,8 @@ * */ -import { on, off, addClass, removeClass } from '../common/deps/dom' import { emitEvent } from '../common/event' -import { getDomNode } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import type { IDialogBoxRenderlessParams, IDialogBoxStyle } from '@/types' export const computedAnimationName = @@ -93,7 +92,7 @@ export const watchVisible = state.closed = false emit('open') /* istanbul ignore next */ - on(el, 'scroll', api.updatePopper) + dom.on(el, 'scroll', api.updatePopper) nextTick(() => { vm.$refs.dialog.scrollTop = 0 @@ -104,7 +103,7 @@ export const watchVisible = } } else { /* istanbul ignore next */ - off(el, 'scroll', api.updatePopper) + dom.off(el, 'scroll', api.updatePopper) if (!state.closed) { state.emitter.emit('boxclose', props.isFormReset) @@ -306,7 +305,7 @@ export const handleDrag = let demMouseup = document.onmouseup let disX = event.clientX - modalBoxElem.offsetLeft let disY = event.clientY - modalBoxElem.offsetTop - let { visibleHeight, visibleWidth } = getDomNode() + let { visibleHeight, visibleWidth } = dom.getDomNode() document.onmousemove = (event) => { event.preventDefault() @@ -358,11 +357,11 @@ export const handleDrag = } export const showScrollbar = (lockScrollClass: string) => (): void => { - addClass(document.body, lockScrollClass) + dom.addClass(document.body, lockScrollClass) } export const hideScrollbar = (lockScrollClass: string) => (): void => { - removeClass(document.body, lockScrollClass) + dom.removeClass(document.body, lockScrollClass) } // tiny 新增 diff --git a/packages/renderless/src/drawer/index.ts b/packages/renderless/src/drawer/index.ts index a8c5ca1e89..72145c02ef 100644 --- a/packages/renderless/src/drawer/index.ts +++ b/packages/renderless/src/drawer/index.ts @@ -1,5 +1,5 @@ import debounce from '../common/deps/debounce' -import { addClass, removeClass } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import type { IDrawerState, IDrawerApi, IDrawerCT, ISharedRenderlessParamUtils, IDrawerRenderlessParams } from '@/types' export const computedWidth = @@ -169,9 +169,9 @@ export const removeDragEvent = } export const showScrollbar = (lockScrollClass: string) => () => { - addClass(document.body, lockScrollClass) + dom.addClass(document.body, lockScrollClass) } export const hideScrollbar = (lockScrollClass: string) => () => { - removeClass(document.body, lockScrollClass) + dom.removeClass(document.body, lockScrollClass) } diff --git a/packages/renderless/src/dropdown-item/index.ts b/packages/renderless/src/dropdown-item/index.ts index c96d6386dd..49ff3465d5 100644 --- a/packages/renderless/src/dropdown-item/index.ts +++ b/packages/renderless/src/dropdown-item/index.ts @@ -16,7 +16,7 @@ import type { IDropdownItemTag, IDropdownItemOptionStyle } from '@/types' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const getTitle = (props: IDropdownItemRenderlessParams['props']) => (): string => { if (props.title) { @@ -31,7 +31,7 @@ export const getTitle = (props: IDropdownItemRenderlessParams['props']) => (): s export const bindScroll = ({ api, parent }: Pick) => (value): void => { - const action = value ? on : off + const action = value ? dom.on : dom.off action(parent.state.scroller, 'scroll', api.onScroll, true) } diff --git a/packages/renderless/src/dropdown/index.ts b/packages/renderless/src/dropdown/index.ts index 136a1fd2f3..a4dc19c9fa 100644 --- a/packages/renderless/src/dropdown/index.ts +++ b/packages/renderless/src/dropdown/index.ts @@ -12,7 +12,7 @@ import type { IDropdownRenderlessParams } from '@/types' import { KEY_CODE } from '../common' -import { addClass, removeClass, on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const watchVisible = ({ broadcast, emit, nextTick }: Pick) => @@ -34,7 +34,7 @@ export const watchFocusing = (parent: IDropdownRenderlessParams['parent']) => (v const selfDefine: HTMLElement | null = parent.$el.querySelector('.tiny-dropdown-selfdefine') if (selfDefine) { - value ? addClass(selfDefine, 'focusing') : removeClass(selfDefine, 'focusing') + value ? dom.addClass(selfDefine, 'focusing') : dom.removeClass(selfDefine, 'focusing') } } @@ -184,7 +184,7 @@ export const initAria = if (!props.splitButton || !props.singleButton) { state.triggerElm?.setAttribute('role', 'button') state.triggerElm?.setAttribute('tabindex', String(props.tabindex)) - addClass(state.triggerElm, 'tiny-dropdown-selfdefine') + dom.addClass(state.triggerElm, 'tiny-dropdown-selfdefine') } } @@ -201,13 +201,13 @@ export const initEvent = state.triggerElm = buttonValue ? vm.$refs.trigger.$el : props.border ? vm.$refs.trigger.$el : vm.$refs.trigger - on(state.triggerElm, 'keydown', api.handleTriggerKeyDown) + dom.on(state.triggerElm, 'keydown', api.handleTriggerKeyDown) state.dropdownElm?.addEventListener('keydown', api.handleItemKeyDown, true) if (!props.splitButton || !props.singleButton) { - on(state.triggerElm, 'focus', api.toggleFocusOnTrue) - on(state.triggerElm, 'blur', api.toggleFocusOnFalse) - on(state.triggerElm, 'click', api.toggleFocusOnFalse) + dom.on(state.triggerElm, 'focus', api.toggleFocusOnTrue) + dom.on(state.triggerElm, 'blur', api.toggleFocusOnFalse) + dom.on(state.triggerElm, 'click', api.toggleFocusOnFalse) } if (state.visibleIsBoolean) { @@ -215,12 +215,12 @@ export const initEvent = } if (state.trigger === 'hover') { - on(state.triggerElm, 'mouseenter', api.show) - on(state.triggerElm, 'mouseleave', api.hide) - on(state.dropdownElm, 'mouseenter', api.show) - on(state.dropdownElm, 'mouseleave', api.hide) + dom.on(state.triggerElm, 'mouseenter', api.show) + dom.on(state.triggerElm, 'mouseleave', api.hide) + dom.on(state.dropdownElm, 'mouseenter', api.show) + dom.on(state.dropdownElm, 'mouseleave', api.hide) } else if (state.trigger === 'click') { - on(state.triggerElm, 'click', api.handleClick) + dom.on(state.triggerElm, 'click', api.handleClick) } if (mode === 'mobile-first') { @@ -294,21 +294,21 @@ export const beforeDistory = ({ vm, api, state }: Pick) => () => { if (state.triggerElm) { - off(state.triggerElm, 'keydown', api.handleTriggerKeyDown) - off(state.triggerElm, 'focus', api.toggleFocusOnTrue) - off(state.triggerElm, 'blur', api.toggleFocusOnFalse) - off(state.triggerElm, 'click', api.toggleFocusOnFalse) - off(state.triggerElm, 'mouseenter', api.show) - off(state.triggerElm, 'mouseleave', api.hide) - off(state.triggerElm, 'click', api.handleClick) + dom.off(state.triggerElm, 'keydown', api.handleTriggerKeyDown) + dom.off(state.triggerElm, 'focus', api.toggleFocusOnTrue) + dom.off(state.triggerElm, 'blur', api.toggleFocusOnFalse) + dom.off(state.triggerElm, 'click', api.toggleFocusOnFalse) + dom.off(state.triggerElm, 'mouseenter', api.show) + dom.off(state.triggerElm, 'mouseleave', api.hide) + dom.off(state.triggerElm, 'click', api.handleClick) state.triggerElm = null } if (state.dropdownElm) { state.dropdownElm.removeEventListener('keydown', api.handleItemKeyDown, true) - off(state.dropdownElm, 'mouseenter', api.show) - off(state.dropdownElm, 'mouseleave', api.hide) + dom.off(state.dropdownElm, 'mouseenter', api.show) + dom.off(state.dropdownElm, 'mouseleave', api.hide) state.dropdownElm = null } diff --git a/packages/renderless/src/fall-menu/index.ts b/packages/renderless/src/fall-menu/index.ts index 1a4fd62d88..b4530ce673 100644 --- a/packages/renderless/src/fall-menu/index.ts +++ b/packages/renderless/src/fall-menu/index.ts @@ -11,7 +11,7 @@ */ import { REFRESH_INTERVAL } from '../common' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import PopupManager from '../common/deps/popup-manager' import { xss } from '@opentiny/utils' import type { IFallMenuApi, IFallMenuState, IFallMenuProps, IPagerData } from '@/types' @@ -117,11 +117,11 @@ export const mounted = ({ api }) => () => { api.computePx() - on(window, 'resize', api.reRender) + dom.on(window, 'resize', api.reRender) } /* istanbul ignore next */ -export const beforeDestroy = (api) => () => off(window, 'resize', api.reRender) +export const beforeDestroy = (api) => () => dom.off(window, 'resize', api.reRender) export const computeLeft = ({ state }) => diff --git a/packages/renderless/src/filter-panel/vue.ts b/packages/renderless/src/filter-panel/vue.ts index c3da1907d0..d2d0d4fa1d 100644 --- a/packages/renderless/src/filter-panel/vue.ts +++ b/packages/renderless/src/filter-panel/vue.ts @@ -1,5 +1,5 @@ import { doDestroy, show, hide, popoverShow, popoverHide, handleClear, handleDocumentClick, togglePanel } from './index' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const api = ['state', 'doDestroy', 'show', 'hide', 'popoverShow', 'popoverHide', 'handleClear', 'togglePanel'] @@ -23,11 +23,11 @@ export const renderless = (props, { reactive, onMounted, onBeforeUnmount }, { vm handleDocumentClick onMounted(() => { - on(document, 'click', api.handleDocumentClick) + dom.on(document, 'click', api.handleDocumentClick) }) onBeforeUnmount(() => { - off(document, 'click', api.handleDocumentClick) + dom.off(document, 'click', api.handleDocumentClick) }) return api diff --git a/packages/renderless/src/filter/vue.ts b/packages/renderless/src/filter/vue.ts index 3076dad159..1f614f55ae 100644 --- a/packages/renderless/src/filter/vue.ts +++ b/packages/renderless/src/filter/vue.ts @@ -1,4 +1,4 @@ -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import { panelToggle, @@ -60,13 +60,13 @@ export const renderless = (props, { reactive, computed, onMounted, onBeforeUnmou }) onMounted(() => { - on(window, 'scroll', api.resize) - on(window, 'resize', api.resize) + dom.on(window, 'scroll', api.resize) + dom.on(window, 'resize', api.resize) }) onBeforeUnmount(() => { - off(window, 'scroll', api.resize) - off(window, 'resize', api.resize) + dom.off(window, 'scroll', api.resize) + dom.off(window, 'resize', api.resize) }) return api diff --git a/packages/renderless/src/floating-button/index.ts b/packages/renderless/src/floating-button/index.ts index 39f935876c..39e740b3b8 100644 --- a/packages/renderless/src/floating-button/index.ts +++ b/packages/renderless/src/floating-button/index.ts @@ -1,4 +1,4 @@ -import { off, on } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const getClientWidth = ({ state, vm }) => @@ -35,9 +35,9 @@ export const clearTimer = () => { clearTimeout(state.initTimer) - off(window, 'resize', api.getClientWidth) - off(window, 'scroll', api.onScroll) - off(window, 'scroll', api.getScrollListener) + dom.off(window, 'resize', api.getClientWidth) + dom.off(window, 'scroll', api.onScroll) + dom.off(window, 'scroll', api.getScrollListener) } export const getScrollListener = @@ -147,5 +147,5 @@ export const mounted = (api) => () => { api.getClientWidth() api.onScroll() api.getExpandList() - on(window, 'resize', api.getClientWidth) + dom.on(window, 'resize', api.getClientWidth) } diff --git a/packages/renderless/src/fluent-editor/index.ts b/packages/renderless/src/fluent-editor/index.ts index e562e62d83..98c0f26862 100644 --- a/packages/renderless/src/fluent-editor/index.ts +++ b/packages/renderless/src/fluent-editor/index.ts @@ -2,7 +2,7 @@ import { extend } from '../common/object' import { type as _type } from '@opentiny/utils' import { xss } from '@opentiny/utils' import { set } from '../chart-core/deps/utils' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import PopupManager from '../common/deps/popup-manager' export const init = @@ -149,13 +149,13 @@ export const keyDownHandler = export const addFullscreenchange = ({ api }) => () => { - on(document, 'keydown', api.keyDownHandler) + dom.on(document, 'keydown', api.keyDownHandler) } export const removeFullscreenchange = ({ api }) => () => { - off(document, 'keydown', api.keyDownHandler) + dom.off(document, 'keydown', api.keyDownHandler) api.keyDownHandler = null } @@ -163,15 +163,15 @@ export const removeFullscreenchange = export const handleComposition = ({ state, api }) => () => { - on(state.quill.root, 'compositionstart', api.handleCompositionstart) - on(state.quill.root, 'compositionend', api.handleCompositionend) + dom.on(state.quill.root, 'compositionstart', api.handleCompositionstart) + dom.on(state.quill.root, 'compositionend', api.handleCompositionend) } export const removeHandleComposition = ({ state, api }) => () => { - off(state.quill.root, 'compositionstart', api.handleCompositionstart) - off(state.quill.root, 'compositionend', api.handleCompositionend) + dom.off(state.quill.root, 'compositionstart', api.handleCompositionstart) + dom.off(state.quill.root, 'compositionend', api.handleCompositionend) } // 开始输入中文 diff --git a/packages/renderless/src/fullscreen/index.ts b/packages/renderless/src/fullscreen/index.ts index 3c7ad82cc9..d3526cd884 100644 --- a/packages/renderless/src/fullscreen/index.ts +++ b/packages/renderless/src/fullscreen/index.ts @@ -10,7 +10,7 @@ * */ -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const toggle = ({ state, api }) => @@ -35,8 +35,8 @@ export const request = state.isFullscreen = true api.onChangeFullScreen() - off(document, 'keyup', api.keypressCallback) - on(document, 'keyup', api.keypressCallback) + dom.off(document, 'keyup', api.keypressCallback) + dom.on(document, 'keyup', api.keypressCallback) } else { sf.off('change', api.fullScreenCallback) sf.on('change', api.fullScreenCallback) @@ -71,7 +71,7 @@ export const exit = state.isFullscreen = false api.onChangeFullScreen() - off(document, 'keyup', api.keypressCallback) + dom.off(document, 'keyup', api.keypressCallback) } else { sf.exit() } diff --git a/packages/renderless/src/grid/utils/dom.ts b/packages/renderless/src/grid/utils/dom.ts index 8cbf00d328..239ff8c8c3 100644 --- a/packages/renderless/src/grid/utils/dom.ts +++ b/packages/renderless/src/grid/utils/dom.ts @@ -24,7 +24,7 @@ */ import { getRowid } from './common' -import { hasClass, getDomNode } from '../../common/deps/dom' +import { dom } from '@opentiny/utils' import { getActualTarget } from '../../common/event' import { arrayIndexOf } from '../static' @@ -193,7 +193,7 @@ export const getEventTargetNode = (event, container, queryCls) => { let target = getActualTarget(event) while (target && target.nodeType && target !== document) { - if (queryCls && (hasClass(target, queryCls) || hasDataTag(target, queryCls))) { + if (queryCls && (dom.hasClass(target, queryCls) || hasDataTag(target, queryCls))) { targetEl = target } else if (target === container) { return { @@ -238,7 +238,7 @@ export const getOffsetPos = (el, container) => getNodeOffset(el, container, { le export const getAbsolutePos = (el) => { const bounding = el.getBoundingClientRect() - const { scrollTop, scrollLeft } = getDomNode() + const { scrollTop, scrollLeft } = dom.getDomNode() return { top: scrollTop + bounding.top, @@ -309,6 +309,4 @@ export const getCell = ($table, { row, column }) => ) ) }) - }) - -export { getDomNode } + }) \ No newline at end of file diff --git a/packages/renderless/src/grid/utils/event.ts b/packages/renderless/src/grid/utils/event.ts index e5109ac3d6..ed502ab6c7 100644 --- a/packages/renderless/src/grid/utils/event.ts +++ b/packages/renderless/src/grid/utils/event.ts @@ -25,7 +25,7 @@ import browser from '../../common/browser' import { remove } from '../static' -import { on } from '../../common/deps/dom' +import { dom } from '@opentiny/utils' // 监听全局事件 const wheelName = browser.isDoc && /Firefox/i.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' @@ -55,13 +55,13 @@ const GlobalEvent = { } if (browser.isDoc) { - on(document, 'keydown', GlobalEvent.trigger) - on(document, 'contextmenu', GlobalEvent.trigger) - on(window, 'mousedown', GlobalEvent.trigger) - on(window, 'mousedown', GlobalEvent.capture, true) - on(window, 'blur', GlobalEvent.trigger) - on(window, 'resize', GlobalEvent.trigger) - on(window, wheelName, GlobalEvent.trigger) + dom.on(document, 'keydown', GlobalEvent.trigger) + dom.on(document, 'contextmenu', GlobalEvent.trigger) + dom.on(window, 'mousedown', GlobalEvent.trigger) + dom.on(window, 'mousedown', GlobalEvent.capture, true) + dom.on(window, 'blur', GlobalEvent.trigger) + dom.on(window, 'resize', GlobalEvent.trigger) + dom.on(window, wheelName, GlobalEvent.trigger) } export default GlobalEvent diff --git a/packages/renderless/src/image-viewer/index.ts b/packages/renderless/src/image-viewer/index.ts index 48a110f8bf..16c8233423 100644 --- a/packages/renderless/src/image-viewer/index.ts +++ b/packages/renderless/src/image-viewer/index.ts @@ -10,10 +10,9 @@ * */ -import { on, off } from '../common/deps/dom' import { KEY_CODE } from '../common' import PopupManager from '../common/deps/popup-manager' -import { xss } from '@opentiny/utils' +import { xss, dom } from '@opentiny/utils' import { isBrowser } from '../common/browser' const isFirefox = () => (isBrowser ? !!window.navigator.userAgent.match(/firefox/i) : false) @@ -48,7 +47,7 @@ export const hide = export const deviceSupportInstall = ({ state, api, mode }) => () => { - on(window, 'resize', api.initPage) + dom.on(window, 'resize', api.initPage) state.urlList = state.urlList.map((subItem) => { let subItemObj = {} @@ -127,15 +126,15 @@ export const deviceSupportInstall = } }) - on(document, 'keydown', state._keyDownHandler) - mode !== 'mobile-first' && on(document, mousewheelEventName, state._mouseWheelHandler) + dom.on(document, 'keydown', state._keyDownHandler) + mode !== 'mobile-first' && dom.on(document, mousewheelEventName, state._mouseWheelHandler) } export const deviceSupportUninstall = ({ state, mode }) => () => { - off(document, 'keydown', state._keyDownHandler) - mode !== 'mobile-first' && off(document, mousewheelEventName, state._mouseWheelHandler) + dom.off(document, 'keydown', state._keyDownHandler) + mode !== 'mobile-first' && dom.off(document, mousewheelEventName, state._mouseWheelHandler) state._keyDownHandler = null state._mouseWheelHandler = null @@ -164,21 +163,21 @@ export const handleMouseDown = (state) => (event) => { state.transform.offsetY = offsetY + event.pageY - startY }) - on(document, 'mousemove', state._dragHandler) + dom.on(document, 'mousemove', state._dragHandler) - state._removeDrag = () => off(document, 'mousemove', state._dragHandler) + state._removeDrag = () => dom.off(document, 'mousemove', state._dragHandler) if (state._clearMouse) { state._clearMouse() state._clearMouse = undefined } - on(document, 'mouseup', state._removeDrag) - on(document, 'mouseleave', state._removeDrag) + dom.on(document, 'mouseup', state._removeDrag) + dom.on(document, 'mouseleave', state._removeDrag) state._clearMouse = () => { - off(document, 'mouseup', state._removeDrag) - off(document, 'mouseleave', state._removeDrag) + dom.off(document, 'mouseup', state._removeDrag) + dom.off(document, 'mouseleave', state._removeDrag) } event.preventDefault() @@ -786,7 +785,7 @@ export const initPage = export const beforeDestroy = ({ api, state }) => () => { - off(window, 'resize', api.initPage) + dom.off(window, 'resize', api.initPage) if (state._clearMouse) { state._clearMouse() diff --git a/packages/renderless/src/image/index.ts b/packages/renderless/src/image/index.ts index 18ea2b5181..1db6a3e418 100644 --- a/packages/renderless/src/image/index.ts +++ b/packages/renderless/src/image/index.ts @@ -11,8 +11,7 @@ */ import type { IImageProps, IImageRenderlessParams, IImageState } from '@/types' -import { on, off, getScrollContainer, isInContainer } from '../common/deps/dom' -import { type } from '@opentiny/utils' +import { type, dom } from '@opentiny/utils' import { rafThrottle } from '../image-viewer' import { xss } from '@opentiny/utils' @@ -92,7 +91,7 @@ export const handleSwitch = export const handleLazyLoad = ({ state, api, vm, nextTick }: Pick) => () => { - if (isInContainer(vm.$el, state._scrollContainer as HTMLElement)) { + if (dom.isInContainer(vm.$el, state._scrollContainer as HTMLElement)) { nextTick(() => (state.show = true)) api.removeLazyLoadListener() } @@ -109,13 +108,13 @@ export const addLazyLoadListener = } else if (type.typeOf(scrollContainer) === 'string') { _scrollContainer = document.querySelector(scrollContainer as string)! } else { - _scrollContainer = getScrollContainer(vm.$el) as HTMLElement + _scrollContainer = dom.getScrollContainer(vm.$el) as HTMLElement } if (_scrollContainer) { state._scrollContainer = _scrollContainer state._lazyLoadHandler = rafThrottle(api.handleLazyLoad) - on(_scrollContainer, 'scroll', state._lazyLoadHandler) + dom.on(_scrollContainer, 'scroll', state._lazyLoadHandler) api.handleLazyLoad() } } @@ -127,7 +126,7 @@ export const removeLazyLoadListener = (state: IImageState) => () => { return } - off(_scrollContainer, 'scroll', _lazyLoadHandler) + dom.off(_scrollContainer, 'scroll', _lazyLoadHandler) state._scrollContainer = null state._lazyLoadHandler = null } diff --git a/packages/renderless/src/input/vue.ts b/packages/renderless/src/input/vue.ts index 9fbe4773a5..50dd69e8a4 100644 --- a/packages/renderless/src/input/vue.ts +++ b/packages/renderless/src/input/vue.ts @@ -56,7 +56,7 @@ import { handleTextareaMouseUp } from './index' import useStorageBox from '../tall-storage/vue-storage-box' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const api = [ 'blur', @@ -407,7 +407,7 @@ export const renderless = ( if (props.type === 'textarea' && props.popupMore && state.isDisplayOnly) { api.setShowMoreBtn(true) - on(window, 'resize', api.setShowMoreBtn) + dom.on(window, 'resize', api.setShowMoreBtn) } if (vm.$attrs.autofocus) { @@ -417,7 +417,7 @@ export const renderless = ( onBeforeUnmount(() => { if (props.type === 'textarea' && props.popupMore && state.isDisplayOnly) { - off(window, 'resize', api.setShowMoreBtn) + dom.off(window, 'resize', api.setShowMoreBtn) } }) diff --git a/packages/renderless/src/load-list/index.ts b/packages/renderless/src/load-list/index.ts index c3cfc51824..1c453812e3 100644 --- a/packages/renderless/src/load-list/index.ts +++ b/packages/renderless/src/load-list/index.ts @@ -1,5 +1,4 @@ -import { isDisplayNone } from '../common/deps/dom' - +import { dom } from '@opentiny/utils' export const clickList = ({ emit, props }) => () => { @@ -30,7 +29,7 @@ export const check = const offset = +props.offset const scrollParentRect = api.useRect(state.scroller) - if (!scrollParentRect.height || isDisplayNone(vm.$el)) { + if (!scrollParentRect.height || dom.isDisplayNone(vm.$el)) { return } diff --git a/packages/renderless/src/load-list/vue.ts b/packages/renderless/src/load-list/vue.ts index 7d01b370e4..2d0c52e59c 100644 --- a/packages/renderless/src/load-list/vue.ts +++ b/packages/renderless/src/load-list/vue.ts @@ -1,5 +1,5 @@ import { clickList, check, clickErrorText } from './index' -import { getScrollParent } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import { useRect } from '../common/deps/useRect' import { useEventListener } from '../common/deps/useEventListener' import debounce from '../common/deps/debounce' @@ -68,7 +68,7 @@ export const renderless = ( }) onMounted(() => { - state.scrollParent = getScrollParent(vm.$el) + state.scrollParent = dom.getScrollParent(vm.$el) if (props.immediateCheck) { api.check() diff --git a/packages/renderless/src/loading/index.ts b/packages/renderless/src/loading/index.ts index 914b4528d6..2a7405ea74 100644 --- a/packages/renderless/src/loading/index.ts +++ b/packages/renderless/src/loading/index.ts @@ -12,7 +12,7 @@ import type { ILoadingRenderlessParamUtils, ILoadingRenderlessParams, ILoadingState } from 'types/loading.type' import afterLeave from '../common/deps/after-leave' -import { removeClass } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const handleAfterLeave = (emit: ILoadingRenderlessParamUtils['emit']) => (): void => { emit('after-leave') @@ -33,8 +33,8 @@ export const close = const target = state.fullscreen || state.body ? document.body : state.target if (vm.$el && vm.$el.parentNode) { - removeClass(target, constants.PARENT_RELATIVE_CLS) - removeClass(target, constants.PARENT_HIDDEN_CLS) + dom.removeClass(target, constants.PARENT_RELATIVE_CLS) + dom.removeClass(target, constants.PARENT_HIDDEN_CLS) vm.$el.parentNode.removeChild(vm.$el) } diff --git a/packages/renderless/src/modal/index.ts b/packages/renderless/src/modal/index.ts index 93eafc826e..b750c3e0f3 100644 --- a/packages/renderless/src/modal/index.ts +++ b/packages/renderless/src/modal/index.ts @@ -11,10 +11,8 @@ */ import { KEY_CODE } from '../common' -import { on, off, addClass, hasClass, removeClass } from '../common/deps/dom' import PopupManager from '../common/deps/popup-manager' -import { getDomNode } from '../common/deps/dom' -import { global } from '@opentiny/utils' +import { global, dom } from '@opentiny/utils' import type { IModalProps, @@ -120,14 +118,14 @@ export const mounted = api.showScrollbar() } } else { - on(window, 'resize', api.resetDragStyle) + dom.on(window, 'resize', api.resetDragStyle) } if (props.escClosable) { - on(document, 'keydown', api.handleGlobalKeydownEvent) + dom.on(document, 'keydown', api.handleGlobalKeydownEvent) } - on(window, 'hashchange', api.handleHashChange) + dom.on(window, 'hashchange', api.handleHashChange) document.body.appendChild(parent.$el) } @@ -135,10 +133,10 @@ export const mounted = export const beforeUnmouted = ({ api, parent, isMobileFirstMode }: Pick) => (): void => { - isMobileFirstMode && off(window, 'resize', api.resetDragStyle) - off(document, 'keydown', api.handleGlobalKeydownEvent) - off(window, 'hashchange', api.handleHashChange) - off(window, 'resize', api.resetModalViewPosition) + isMobileFirstMode && dom.off(window, 'resize', api.resetDragStyle) + dom.off(document, 'keydown', api.handleGlobalKeydownEvent) + dom.off(window, 'hashchange', api.handleHashChange) + dom.off(window, 'resize', api.resetModalViewPosition) api.removeMsgQueue() api.hideScrollbar() @@ -299,7 +297,7 @@ export const open = ) { modalBoxElem.style.top = `${props.marginSize}px` } - on(window, 'resize', api.resetModalViewPosition) + dom.on(window, 'resize', api.resetModalViewPosition) } if (props.fullscreen) { @@ -414,7 +412,7 @@ export const maximize = if (!state.zoomLocat) { let marginSize = props.marginSize let modalBoxElement = api.getBox() - let { visibleHeight, visibleWidth } = getDomNode() + let { visibleHeight, visibleWidth } = dom.getDomNode() state.zoomLocat = { top: modalBoxElement.offsetTop, @@ -495,7 +493,7 @@ function getEventTargetNode( let target = event.target as any while (target && target.nodeType && target !== document) { - if (queryCls && hasClass(target, queryCls)) { + if (queryCls && dom.hasClass(target, queryCls)) { targetElem = target } else if (target === container) { return { @@ -530,7 +528,7 @@ export const mousedownEvent = let demMouseup = document.onmouseup let disX = event.clientX - modalBoxElement.offsetLeft let disY = event.clientY - modalBoxElement.offsetTop - let { visibleHeight, visibleWidth } = getDomNode() + let { visibleHeight, visibleWidth } = dom.getDomNode() document.onmousemove = (event) => { event.preventDefault() @@ -573,7 +571,7 @@ export const mousedownEvent = modalBoxElement.style.left = `${left}px` modalBoxElement.style.top = `${top}px` - addClass(modalBoxElement, DragClass) + dom.addClass(modalBoxElement, DragClass) emit('custom-mousemove', event) } @@ -583,7 +581,7 @@ export const mousedownEvent = document.onmouseup = demMouseup nextTick(() => { - removeClass(modalBoxElement, DragClass) + dom.removeClass(modalBoxElement, DragClass) }) emit('custom-mouseup', event) @@ -848,7 +846,7 @@ export const dragEvent = event.preventDefault() const delta = { x: 0, y: 0 } - const { visibleHeight, visibleWidth } = getDomNode() + const { visibleHeight, visibleWidth } = dom.getDomNode() const modalBoxElem = api.getBox() const demMousemove = document.onmousemove const demMouseup = document.onmouseup @@ -872,7 +870,7 @@ export const dragEvent = delta.x = delta.y = 0 - addClass(modalBoxElem, DragClass) + dom.addClass(modalBoxElem, DragClass) emitZoom({ params: { type: 'resize', $modal: parent }, @@ -888,7 +886,7 @@ export const dragEvent = document.onmouseup = demMouseup setTimeout(() => { - removeClass(modalBoxElem, DragClass) + dom.removeClass(modalBoxElem, DragClass) state.prevEvent = null }, 50) } @@ -911,11 +909,11 @@ export const resetDragStyle = (api: IModalApi) => (): void => { } export const showScrollbar = (lockScrollClass) => () => { - addClass(document.body, lockScrollClass) + dom.addClass(document.body, lockScrollClass) } export const hideScrollbar = (lockScrollClass) => () => { - removeClass(document.body, lockScrollClass) + dom.removeClass(document.body, lockScrollClass) } export const resetModalViewPosition = (api: IModalApi) => () => { diff --git a/packages/renderless/src/month-table/index.ts b/packages/renderless/src/month-table/index.ts index 61af2c87ad..00b3959524 100644 --- a/packages/renderless/src/month-table/index.ts +++ b/packages/renderless/src/month-table/index.ts @@ -11,7 +11,7 @@ */ import { toDate } from '../common/date' -import { hasClass } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import { range as rangeDate, getDayCountOfMonth, nextDate } from '../common/deps/date-util' import { arrayFindIndex, coerceTruthyValueToArray, arrayFind } from '../date-table' import { DATEPICKER } from '../common' @@ -185,7 +185,7 @@ export const handleMonthTableClick = return } - if (hasClass(target, 'disabled')) { + if (dom.hasClass(target, 'disabled')) { return } diff --git a/packages/renderless/src/nav-menu/index.ts b/packages/renderless/src/nav-menu/index.ts index b5cdc128d1..7106678c97 100644 --- a/packages/renderless/src/nav-menu/index.ts +++ b/packages/renderless/src/nav-menu/index.ts @@ -22,7 +22,7 @@ import { type } from '@opentiny/utils' import PopupManager from '../common/deps/popup-manager' import { mapTree } from '../grid/static' import { transformTreeData } from '../common/array' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import { xss } from '@opentiny/utils' import { isBrowser } from '../common/browser' @@ -217,7 +217,7 @@ export const mounted = (): void => { api.calcWidth() - on(window, 'resize', api.calcWidth) + dom.on(window, 'resize', api.calcWidth) if (router) { state.afterEach = (to) => { @@ -239,7 +239,7 @@ export const unMounted = } state.afterEach = null - off(window, 'resize', api.calcWidth) + dom.off(window, 'resize', api.calcWidth) } export const getSelectedIndex = diff --git a/packages/renderless/src/notify/index.ts b/packages/renderless/src/notify/index.ts index 22f012b5b0..53fba4c865 100644 --- a/packages/renderless/src/notify/index.ts +++ b/packages/renderless/src/notify/index.ts @@ -11,7 +11,7 @@ */ import { KEY_CODE } from '../common' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import PopupManager from '../common/deps/popup-manager' export const startTimer = @@ -87,7 +87,7 @@ export const bindEvent = api.startTimer() - on(document, 'keydown', api.bindKeyDown) + dom.on(document, 'keydown', api.bindKeyDown) } -export const unBindEvent = (api) => () => off(document, 'keydown', api.bindKeyDown) +export const unBindEvent = (api) => () => dom.off(document, 'keydown', api.bindKeyDown) diff --git a/packages/renderless/src/numeric/index.ts b/packages/renderless/src/numeric/index.ts index ef5345808d..e49200df2d 100644 --- a/packages/renderless/src/numeric/index.ts +++ b/packages/renderless/src/numeric/index.ts @@ -21,10 +21,8 @@ import type { import type { BigIntDecimal } from '../common/bigInt' import { formatNumber, roundFixed } from '../common/decimal' import { getMiniDecimal, lessEquals, equalsDecimal } from '../common/bigInt' -import { type } from '@opentiny/utils' - +import { type, dom } from '@opentiny/utils' import { MOUSEDELTA } from '../common' -import { on, off } from '../common/deps/dom' export const initService = ( service: INumericRenderlessParamUtils['service'] @@ -412,7 +410,7 @@ export const mounted = setTimeout(() => (state.pasting = false)) } - on(innerInput, 'paste', state.onPase) + dom.on(innerInput, 'paste', state.onPase) } export const unmounted = @@ -420,7 +418,7 @@ export const unmounted = (): void => { const innerInput = parent.$el.querySelector('input') - off(innerInput, 'paste', state.onPase) + dom.off(innerInput, 'paste', state.onPase) } export const updated = diff --git a/packages/renderless/src/picker-column/index.ts b/packages/renderless/src/picker-column/index.ts index b96c9c0b0b..775a10ed55 100644 --- a/packages/renderless/src/picker-column/index.ts +++ b/packages/renderless/src/picker-column/index.ts @@ -10,7 +10,7 @@ * */ -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const computedWrapperStyle = (state) => () => { const wrapperStyle = { @@ -178,9 +178,9 @@ export const mountedHandler = () => { const track = vm.$refs.track - on(track, 'touchstart', api.onTouchstart) - on(track, 'touchmove', api.onTouchmove) - on(track, 'touchend', api.onTouchend) + dom.on(track, 'touchstart', api.onTouchstart) + dom.on(track, 'touchmove', api.onTouchmove) + dom.on(track, 'touchend', api.onTouchend) state.clumnsWrapHeight = state.itemHeight * state.visibleItemCount @@ -194,9 +194,9 @@ export const beforeUnmountHandler = () => { const track = vm.$refs.track - off(track, 'touchstart', api.onTouchstart) - off(track, 'touchmove', api.onTouchmove) - off(track, 'touchend', api.onTouchend) + dom.off(track, 'touchstart', api.onTouchstart) + dom.off(track, 'touchmove', api.onTouchmove) + dom.off(track, 'touchend', api.onTouchend) } export const momentum = diff --git a/packages/renderless/src/popconfirm/vue.ts b/packages/renderless/src/popconfirm/vue.ts index af890fcb07..54d40a0d9d 100644 --- a/packages/renderless/src/popconfirm/vue.ts +++ b/packages/renderless/src/popconfirm/vue.ts @@ -4,7 +4,7 @@ import type { IPopconfirmRenderlessParamUtils, ISharedRenderlessParamHooks } from '@/types' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import { show, hide, confirm, handleEmit, handleDocumentClick } from './index' export const api = ['state', 'show', 'hide', 'confirm', 'handleEmit'] @@ -34,10 +34,10 @@ export const renderless = ( }) onMounted(() => { - props.closeOnClickOutside && on(document, 'click', api.handleDocumentClick) + props.closeOnClickOutside && dom.on(document, 'click', api.handleDocumentClick) }) onBeforeUnmount(() => { - props.closeOnClickOutside && off(document, 'click', api.handleDocumentClick) + props.closeOnClickOutside && dom.off(document, 'click', api.handleDocumentClick) }) return api diff --git a/packages/renderless/src/popeditor/index.ts b/packages/renderless/src/popeditor/index.ts index 7877cbdd55..0973f05959 100644 --- a/packages/renderless/src/popeditor/index.ts +++ b/packages/renderless/src/popeditor/index.ts @@ -16,7 +16,7 @@ import { getDataset } from '../common/dataset' import { isNullOrEmpty } from '../common/string' import { isEqual } from '../common/object' import { eachTree } from '../grid/static' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const computedGetTitle = ({ constants, props, t }) => props.title || t(constants.TITLE) @@ -777,10 +777,10 @@ export const doSuggesst = let query = event - off(window, 'resize', api.updateSuggestWidth) - off(document, 'click', api.closeSuggestPanel) - on(document, 'click', api.closeSuggestPanel) - on(window, 'resize', api.updateSuggestWidth) + dom.off(window, 'resize', api.updateSuggestWidth) + dom.off(document, 'click', api.closeSuggestPanel) + dom.on(document, 'click', api.closeSuggestPanel) + dom.on(window, 'resize', api.updateSuggestWidth) api.updateSuggestWidth() @@ -838,8 +838,8 @@ export const closeSuggestPanel = } if (!keep) { - off(document, 'click', api.closeSuggestPanel) - off(window, 'resize', api.updateSuggestWidth) + dom.off(document, 'click', api.closeSuggestPanel) + dom.off(window, 'resize', api.updateSuggestWidth) api.handleConfirm(state.closeSuggestPanelInvoker === 'openDialog') state.closeSuggestPanelInvoker = null diff --git a/packages/renderless/src/popover/index.ts b/packages/renderless/src/popover/index.ts index a242e940a7..1d5a4a4524 100644 --- a/packages/renderless/src/popover/index.ts +++ b/packages/renderless/src/popover/index.ts @@ -10,9 +10,9 @@ * */ import type { IPopoverRenderlessParams, IPopoverState } from 'types/popover.type' -import { on, off, addClass, removeClass } from '../common/deps/dom' import { guid } from '../common/string' import { KEY_CODE } from '../common' +import { dom } from '@opentiny/utils' const processTrigger = ({ api, @@ -23,20 +23,20 @@ const processTrigger = ({ const { referenceElm, popperElm } = state if (props.trigger === 'click') { - on(referenceElm, 'click', api.doToggle) - on(document, 'click', api.handleDocumentClick) + dom.on(referenceElm, 'click', api.doToggle) + dom.on(document, 'click', api.handleDocumentClick) } else if (props.trigger === 'hover') { - on(referenceElm, 'mouseenter', api.handleMouseEnter) - on(popperElm, 'mouseenter', api.handleMouseEnter) - on(referenceElm, 'mouseleave', api.handleMouseLeave) - on(popperElm, 'mouseleave', api.handleMouseLeave) + dom.on(referenceElm, 'mouseenter', api.handleMouseEnter) + dom.on(popperElm, 'mouseenter', api.handleMouseEnter) + dom.on(referenceElm, 'mouseleave', api.handleMouseLeave) + dom.on(popperElm, 'mouseleave', api.handleMouseLeave) } else if (props.trigger === 'focus') { if (referenceElm.querySelector('input, textarea')) { - on(referenceElm, 'focusin', api.doShow) - on(referenceElm, 'focusout', api.doClose) + dom.on(referenceElm, 'focusin', api.doShow) + dom.on(referenceElm, 'focusout', api.doClose) } else { - on(referenceElm, 'mousedown', api.doShow) - on(referenceElm, 'mouseup', api.doClose) + dom.on(referenceElm, 'mousedown', api.doShow) + dom.on(referenceElm, 'mouseup', api.doClose) } } else if (props.trigger === 'manual') { // 手动模式,且用户初始modelValue=true,要触发show @@ -65,7 +65,7 @@ export const mounted = if (referenceElm) { if (mode !== 'mobile-first') { - addClass(referenceElm, `${constants.IDPREFIX}__reference`) + dom.addClass(referenceElm, `${constants.IDPREFIX}__reference`) } referenceElm.setAttribute('aria-describedby', tooltipId) @@ -73,7 +73,7 @@ export const mounted = popperElm.setAttribute('tabindex', 0) if (props.trigger !== 'click') { - on(referenceElm, 'focusin', () => { + dom.on(referenceElm, 'focusin', () => { api.handleFocus() // 仅vue2有 __vue__ @@ -84,13 +84,13 @@ export const mounted = } }) - on(popperElm, 'focusin', api.handleFocus) - on(referenceElm, 'focusout', api.handleBlur) - on(popperElm, 'focusout', api.handleBlur) + dom.on(popperElm, 'focusin', api.handleFocus) + dom.on(referenceElm, 'focusout', api.handleBlur) + dom.on(popperElm, 'focusout', api.handleBlur) } - on(referenceElm, 'keydown', api.handleKeydown) - on(referenceElm, 'click', api.handleClick) + dom.on(referenceElm, 'keydown', api.handleKeydown) + dom.on(referenceElm, 'click', api.handleClick) } processTrigger({ api, state, props, nextTick }) @@ -111,7 +111,7 @@ export const doClose = (state: IPopoverState) => () => { export const handleFocus = ({ props, state }: Pick) => () => { - addClass(state.referenceElm, 'focusing') + dom.addClass(state.referenceElm, 'focusing') if (props.trigger === 'click' || props.trigger === 'focus') { state.showPopper = true @@ -125,13 +125,13 @@ export const handleClick = (state: IPopoverState) => (event: MouseEvent) => { if (event?.target && popperElm) { state.webCompEventTarget = event.target as HTMLElement } - removeClass(state.referenceElm, 'focusing') + dom.removeClass(state.referenceElm, 'focusing') } export const handleBlur = ({ props, state }: Pick) => () => { - removeClass(state.referenceElm, 'focusing') + dom.removeClass(state.referenceElm, 'focusing') if (props.trigger === 'click' || props.trigger === 'focus') { state.showPopper = false @@ -236,23 +236,23 @@ export const destroyed = const { referenceElm, popperElm } = state // 原来 - off(referenceElm, 'click', api.doToggle) - off(referenceElm, 'mouseup', api.doClose) - off(referenceElm, 'mousedown', api.doShow) - off(referenceElm, 'focusin', api.doShow) - off(referenceElm, 'focusout', api.doClose) - off(referenceElm, 'mouseleave', api.handleMouseLeave) - off(referenceElm, 'mouseenter', api.handleMouseEnter) - off(document, 'click', api.handleDocumentClick) + dom.off(referenceElm, 'click', api.doToggle) + dom.off(referenceElm, 'mouseup', api.doClose) + dom.off(referenceElm, 'mousedown', api.doShow) + dom.off(referenceElm, 'focusin', api.doShow) + dom.off(referenceElm, 'focusout', api.doClose) + dom.off(referenceElm, 'mouseleave', api.handleMouseLeave) + dom.off(referenceElm, 'mouseenter', api.handleMouseEnter) + dom.off(document, 'click', api.handleDocumentClick) // 同步补充 - off(popperElm, 'focusin', api.handleFocus) // - off(popperElm, 'focusout', api.handleBlur) - off(popperElm, 'mouseenter', api.handleMouseEnter) - off(popperElm, 'mouseleave', api.handleMouseLeave) - off(referenceElm, 'click', api.handleClick) - off(referenceElm, 'focusout', api.handleBlur) - off(referenceElm, 'keydown', api.handleKeydown) + dom.off(popperElm, 'focusin', api.handleFocus) // + dom.off(popperElm, 'focusout', api.handleBlur) + dom.off(popperElm, 'mouseenter', api.handleMouseEnter) + dom.off(popperElm, 'mouseleave', api.handleMouseLeave) + dom.off(referenceElm, 'click', api.handleClick) + dom.off(referenceElm, 'focusout', api.handleBlur) + dom.off(referenceElm, 'keydown', api.handleKeydown) } export const computedTooltipId = (constants: { IDPREFIX: string }) => () => `${constants.IDPREFIX}-${guid('', 4)}` diff --git a/packages/renderless/src/popup/index.ts b/packages/renderless/src/popup/index.ts index 407275595f..d5b0e00a85 100644 --- a/packages/renderless/src/popup/index.ts +++ b/packages/renderless/src/popup/index.ts @@ -10,7 +10,7 @@ * */ -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import { touchStart, touchMove } from '../common/deps/touch' import { getScroller } from '../dropdown-menu' import { type } from '@opentiny/utils' @@ -50,8 +50,8 @@ export const open = emit('open') if (props.lockScroll) { - on(document, 'touchstart', touchStart) - on(document, 'touchmove', api.onTouchMove) + dom.on(document, 'touchstart', touchStart) + dom.on(document, 'touchmove', api.onTouchMove) if (!state.context.lockCount) { document.body.classList.add(constants.OVERFLOWHIDDEN) @@ -71,8 +71,8 @@ export const close = if (props.lockScroll) { state.context.lockCount-- - off(document, 'touchstart', touchStart) - off(document, 'touchmove', api.onTouchMove) + dom.off(document, 'touchstart', touchStart) + dom.off(document, 'touchmove', api.onTouchMove) if (!state.context.lockCount) { document.body.classList.remove(constants.OVERFLOWHIDDEN) diff --git a/packages/renderless/src/pull-refresh-mobile-first/index.ts b/packages/renderless/src/pull-refresh-mobile-first/index.ts index e1ab391e17..54d748474e 100644 --- a/packages/renderless/src/pull-refresh-mobile-first/index.ts +++ b/packages/renderless/src/pull-refresh-mobile-first/index.ts @@ -10,7 +10,7 @@ * */ -import { on, off, getScrollTop, preventDefault } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const onTouchstart = ({ state }) => @@ -75,9 +75,9 @@ export const mountedHandler = const track = vm.$refs.track - on(track, 'touchstart', api.onTouchstart) - on(track, 'touchmove', api.onTouchmove) - on(track, 'touchend', api.onTouchend) + dom.on(track, 'touchstart', api.onTouchstart) + dom.on(track, 'touchmove', api.onTouchmove) + dom.on(track, 'touchend', api.onTouchend) } export const beforeUnmountHandler = @@ -85,9 +85,9 @@ export const beforeUnmountHandler = () => { const track = vm.$refs.track - off(track, 'touchstart', api.onTouchstart) - off(track, 'touchmove', api.onTouchmove) - off(track, 'touchend', api.onTouchend) + dom.off(track, 'touchstart', api.onTouchstart) + dom.off(track, 'touchmove', api.onTouchmove) + dom.off(track, 'touchend', api.onTouchend) } export const watchModelValue = ({ value, state }) => { @@ -175,7 +175,7 @@ export const showSuccessTip = export const checkPosition = ({ state, touchState }) => (event) => { - state.reachTop = getScrollTop(state.scrollParent) === 0 + state.reachTop = dom.getScrollTop(state.scrollParent) === 0 if (state.reachTop) { state.duration = 0 @@ -205,7 +205,7 @@ export const onTouchMove = touchState.move(event) if (state.reachTop && deltaY.value >= 0 && touchState.isVertical()) { - preventDefault(event) + dom.preventDefault(event) api.setStatus(api.ease(deltaY.value)) } } diff --git a/packages/renderless/src/pull-refresh-mobile-first/vue.ts b/packages/renderless/src/pull-refresh-mobile-first/vue.ts index 1ae326444a..05e33f9f7e 100644 --- a/packages/renderless/src/pull-refresh-mobile-first/vue.ts +++ b/packages/renderless/src/pull-refresh-mobile-first/vue.ts @@ -30,7 +30,7 @@ import { parseHeaderHeight, checkSelfSimulate } from './index' -import { getScrollParent } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import { useTouch } from '../common/deps/useTouch' import { useEventListener } from '../common/deps/useEventListener' import emulate from '../common/deps/touch-emulator' @@ -126,7 +126,7 @@ export const renderless = ( state.stopHandle = api.useEventListener('touchmove', api.onTouchMove, { target: toRef(state, 'scrollTrack') }) onMounted(() => { - state.scrollParent = getScrollParent(vm.$refs.root) + state.scrollParent = dom.getScrollParent(vm.$refs.root) state.scrollTrack = vm.$refs.track }) diff --git a/packages/renderless/src/pull-refresh/index.ts b/packages/renderless/src/pull-refresh/index.ts index 173af2ca19..560a931e47 100644 --- a/packages/renderless/src/pull-refresh/index.ts +++ b/packages/renderless/src/pull-refresh/index.ts @@ -10,7 +10,7 @@ * */ -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' // 上拉触发事件超时时间 const PULL_UP_TIME_OUT = 300 @@ -117,10 +117,10 @@ export const mountedHandler = () => { const track = refs.track - on(track, 'touchstart', api.onTouchstart) - on(track, 'touchmove', api.onTouchmove) - on(track, 'touchend', api.onTouchend) - on(track, 'scroll', api.onScroll) + dom.on(track, 'touchstart', api.onTouchstart) + dom.on(track, 'touchmove', api.onTouchmove) + dom.on(track, 'touchend', api.onTouchend) + dom.on(track, 'scroll', api.onScroll) } export const beforeUnmountHandler = @@ -128,10 +128,10 @@ export const beforeUnmountHandler = () => { const track = refs.track - off(track, 'touchstart', api.onTouchstart) - off(track, 'touchmove', api.onTouchmove) - off(track, 'touchend', api.onTouchend) - off(track, 'scroll', api.onScroll) + dom.off(track, 'touchstart', api.onTouchstart) + dom.off(track, 'touchmove', api.onTouchmove) + dom.off(track, 'touchend', api.onTouchend) + dom.off(track, 'scroll', api.onScroll) } export const handlerModelValue = diff --git a/packages/renderless/src/rate/vue.ts b/packages/renderless/src/rate/vue.ts index dd28264d3d..790c3447d4 100644 --- a/packages/renderless/src/rate/vue.ts +++ b/packages/renderless/src/rate/vue.ts @@ -27,7 +27,7 @@ import { computedActiveColor, computedActiveClass } from './index' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const api = [ 'state', @@ -83,13 +83,13 @@ export const useChangeValue = ({ } onMounted(() => { - on(document, 'mousemove', updateMousePostion) - on(document, 'mouseleave', api.resetCurrentValue) + dom.on(document, 'mousemove', updateMousePostion) + dom.on(document, 'mouseleave', api.resetCurrentValue) }) onUnmounted(() => { - off(document, 'mousemove', updateMousePostion) - off(document, 'mouseleave', api.resetCurrentValue) + dom.off(document, 'mousemove', updateMousePostion) + dom.off(document, 'mouseleave', api.resetCurrentValue) state.mouseTarget = null }) diff --git a/packages/renderless/src/scrollbar/vue-bar.ts b/packages/renderless/src/scrollbar/vue-bar.ts index 54174a11fb..a0c18eef9b 100644 --- a/packages/renderless/src/scrollbar/vue-bar.ts +++ b/packages/renderless/src/scrollbar/vue-bar.ts @@ -19,7 +19,7 @@ import { mouseMoveDocumentHandler, mouseUpDocumentHandler } from './index' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const api = [ 'state', @@ -44,7 +44,7 @@ export const renderless = (props, { computed, onUnmounted, reactive }, { vm, par mouseMoveDocumentHandler: mouseMoveDocumentHandler({ vm, state }) } - onUnmounted(() => off(document, 'mouseup', api.mouseUpDocumentHandler)) + onUnmounted(() => dom.off(document, 'mouseup', api.mouseUpDocumentHandler)) return Object.assign(api, { startDrag: startDrag({ api, on, state }), diff --git a/packages/renderless/src/search/index.ts b/packages/renderless/src/search/index.ts index 745cbf1eeb..f7229c342c 100644 --- a/packages/renderless/src/search/index.ts +++ b/packages/renderless/src/search/index.ts @@ -10,7 +10,7 @@ * */ import type { ISearchRenderlessParams, ISearchValue } from '@/types' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import PopupManager from '../common/deps/popup-manager' import { type } from '@opentiny/utils' @@ -123,14 +123,13 @@ export const formatSearchTypes = (searchTypes: ISearchValue[]): ISearchValue[] = export const mounted = ({ api }: Pick) => () => { - on(document.body, 'click', api.clickOutside) + dom.on(document.body, 'click', api.clickOutside) } /* istanbul ignore next */ export const beforeDestroy = ({ api }: Pick) => () => { - off(document.body, 'click', api.clickOutside) } export const clear = diff --git a/packages/renderless/src/signature/index.ts b/packages/renderless/src/signature/index.ts index bffd77a5f0..cdab48fdae 100644 --- a/packages/renderless/src/signature/index.ts +++ b/packages/renderless/src/signature/index.ts @@ -1,4 +1,4 @@ -import { preventDefault } from '../common/deps/dom' +import { dom } from '@opentiny/utils' const getOffsetPosition = ({ touch, state }) => { let offsetY = 0 @@ -91,7 +91,7 @@ export const touchMove = return false } - preventDefault(e) + dom.preventDefault(e) const touch = event.touches[0] @@ -120,7 +120,7 @@ export const touchEnd = ({ emit, state }) => (event) => { state.isDrawing = false - preventDefault(event) + dom.preventDefault(event) emit('end') } diff --git a/packages/renderless/src/slider-button-group/slide-button.ts b/packages/renderless/src/slider-button-group/slide-button.ts index 88def930eb..302857e4c8 100644 --- a/packages/renderless/src/slider-button-group/slide-button.ts +++ b/packages/renderless/src/slider-button-group/slide-button.ts @@ -1,5 +1,5 @@ import debounce from '../common/deps/debounce' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' const getButtonPosition = ({ sliderState }) => @@ -153,12 +153,12 @@ export const renderless = (props, { reactive, onMounted, onUnmounted, computed, }) onUnmounted(() => { - off(window, 'resize', api.currentPosition) + dom.off(window, 'resize', api.currentPosition) }) onMounted(() => { api.currentPosition(true) - on(window, 'resize', api.currentPosition) + dom.on(window, 'resize', api.currentPosition) }) watch( diff --git a/packages/renderless/src/slider/index.ts b/packages/renderless/src/slider/index.ts index 2578461357..0ad3f1ce31 100644 --- a/packages/renderless/src/slider/index.ts +++ b/packages/renderless/src/slider/index.ts @@ -12,16 +12,16 @@ import { KEY_CODE } from '../common' import { emitEvent } from '../common/event' -import { on, off, hasClass } from '../common/deps/dom' +import { dom } from '@opentiny/utils' import { toNumber } from '../common/string' import type { ISliderApi, ISliderRenderlessParams, ISliderState } from '@/types' export const bindEvent = (api: ISliderApi) => () => { - on(window, 'resize', api.bindResize) + dom.on(window, 'resize', api.bindResize) api.bindResize() } -export const unBindEvent = (api: ISliderApi) => () => off(window, 'resize', api.bindResize) +export const unBindEvent = (api: ISliderApi) => () => dom.off(window, 'resize', api.bindResize) export const bindResize = ({ vm, props, state }: Pick) => @@ -105,12 +105,12 @@ export const bindMouseDown = isClickBar = name === constants.PC_SLIDER_CLS || name === constants.PC_RANGE_CLS isClickBtn = name === constants.PC_BUTTON_CLS } else { - isClickBar = hasClass(handleEl, constants.sliderCls(mode)) || hasClass(handleEl, constants.rangeCls(mode)) + isClickBar = dom.hasClass(handleEl, constants.sliderCls(mode)) || dom.hasClass(handleEl, constants.rangeCls(mode)) isClickBtn = - hasClass(handleEl, constants.buttonCls(mode)) || - hasClass(handleEl, constants.leftSvgCls(mode)) || - hasClass(handleEl, constants.rightSvgCls(mode)) - isClickLabel = hasClass(handleEl, constants.PC_LABEL_CLS) + dom.hasClass(handleEl, constants.buttonCls(mode)) || + dom.hasClass(handleEl, constants.leftSvgCls(mode)) || + dom.hasClass(handleEl, constants.rightSvgCls(mode)) + isClickLabel = dom.hasClass(handleEl, constants.PC_LABEL_CLS) } if (state.disabled || (!isClickBtn && !isClickBar && !isClickLabel)) { state.activeIndex = -1 @@ -119,10 +119,10 @@ export const bindMouseDown = api.bindResize() - on(window, 'mouseup', api.bindMouseUp) - on(window, 'mousemove', api.bindMouseMove) - on(window, 'touchend', api.bindMouseUp) - on(window, 'touchmove', api.bindMouseMove) + dom.on(window, 'mouseup', api.bindMouseUp) + dom.on(window, 'mousemove', api.bindMouseMove) + dom.on(window, 'touchend', api.bindMouseUp) + dom.on(window, 'touchmove', api.bindMouseMove) state.isDrag = isClickBtn isClickBtn && (state.activeIndex = api.getActiveButtonIndex(event)) @@ -176,10 +176,10 @@ export const bindMouseUp = } state.isDrag = false - off(window, 'mouseup', api.bindMouseUp) - off(window, 'mousemove', api.bindMouseMove) - off(window, 'touchend', api.bindMouseUp) - off(window, 'touchmove', api.bindMouseMove) + dom.off(window, 'mouseup', api.bindMouseUp) + dom.off(window, 'mousemove', api.bindMouseMove) + dom.off(window, 'touchend', api.bindMouseUp) + dom.off(window, 'touchmove', api.bindMouseMove) emit('stop', api.getActiveButtonValue()) @@ -261,7 +261,7 @@ const getActiveButtonIndexFlag = ({ } else { return ( state.isDouble && - (hasClass(previousElementSibling, cls) || + (dom.hasClass(previousElementSibling, cls) || (event.target as SVGAElement).className.baseVal === 'tiny-slider-right-svg') ) } diff --git a/packages/renderless/src/split/vue.ts b/packages/renderless/src/split/vue.ts index f8b92d192f..6a94894335 100644 --- a/packages/renderless/src/split/vue.ts +++ b/packages/renderless/src/split/vue.ts @@ -24,7 +24,7 @@ import { buttonRightBottomClick, computeOffset } from './index' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const api = ['state', 'handleMousedown', 'buttonMousedown', 'buttonLeftTopClick', 'buttonRightBottomClick'] @@ -60,7 +60,7 @@ export const renderless = (props, hooks, { vm, nextTick, emit, constants, design getleftTopMin: getleftTopMin(state), getrightBottomMin: getrightBottomMin(state), ...getUseOffset.api, - handleUp: handleUp({ api, emit, off, state }), + handleUp: handleUp({ api, emit, dom.off, state }), getAnotherOffset: getAnotherOffset({ vm, state }), handleMove: handleMove({ api, emit, props, vm, state }), handleMousedown: handleMousedown({ api, emit, on, props, state, vm }), @@ -95,11 +95,11 @@ export const useOffset = ({ nextTick, props, vm, constants, hooks }) => { watch(() => props.modelValue, api.computeOffset, { immediate: true }) onMounted(() => { - on(window, 'resize', api.computeOffset) + dom.on(window, 'resize', api.computeOffset) }) onUnmounted(() => { - off(window, 'resize', api.computeOffset) + dom.off(window, 'resize', api.computeOffset) }) return { diff --git a/packages/renderless/src/steps/slide-bar.ts b/packages/renderless/src/steps/slide-bar.ts index d8830254c7..e70228778a 100644 --- a/packages/renderless/src/steps/slide-bar.ts +++ b/packages/renderless/src/steps/slide-bar.ts @@ -1,5 +1,5 @@ import debounce from '../common/deps/debounce' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' const getBoundingPosition = ({ state }) => @@ -151,11 +151,11 @@ export const renderless = (props, { reactive, onMounted, onUnmounted, computed } onMounted(() => { api.updatePosition(true) - on(window, 'resize', api.updatePosition) + dom.on(window, 'resize', api.updatePosition) }) onUnmounted(() => { - off(window, 'resize', api.updatePosition) + dom.off(window, 'resize', api.updatePosition) }) return api diff --git a/packages/renderless/src/sticky/vue.ts b/packages/renderless/src/sticky/vue.ts index 1d11968ca2..e8b2c76423 100644 --- a/packages/renderless/src/sticky/vue.ts +++ b/packages/renderless/src/sticky/vue.ts @@ -1,7 +1,8 @@ import { useRect } from '../common/deps/useRect' import { useWindowSize } from '../common/deps/useWindowSize' import { useEventListener } from '../common/deps/useEventListener' -import { useScrollParent } from '../common/deps/dom' +import { dom } from '@opentiny/utils' + import { computedRootStyle, computedStickyStyle, updateRoot, unitToPx, getRootRect, getTarget } from './index' export const api = ['state'] @@ -38,7 +39,7 @@ export const renderless = (props, hooks, { vm, emit }) => { getRootRect: getRootRect({ vm, state, api }), getTarget: getTarget({ props, state, api }), useEventListener: useEventListener(hooks), - useScrollParent: useScrollParent(hooks), + useScrollParent: dom.useScrollParent(hooks), useWindowSize: useWindowSize(ref), useRect: useRect(unref), unitToPx: unitToPx() diff --git a/packages/renderless/src/tab-nav/index.ts b/packages/renderless/src/tab-nav/index.ts index 991040527c..758e386903 100644 --- a/packages/renderless/src/tab-nav/index.ts +++ b/packages/renderless/src/tab-nav/index.ts @@ -13,7 +13,7 @@ import type { ITabNavRenderlessParams } from '@/types' import { KEY_CODE, POSITION } from '../common' import { capitalize } from '../common/string' import { addResizeListener, removeResizeListener } from '../common/deps/resize-event' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const computedNavStyle = (state: ITabNavRenderlessParams['state']): { transform: string; width?: string } => { const dir = ~[POSITION.Top, POSITION.Bottom].indexOf(state.rootTabs.position) ? 'X' : 'Y' @@ -125,9 +125,9 @@ export const mounted = ({ api, parent }: Pick () => { diff --git a/packages/renderless/src/tabbar/index.ts b/packages/renderless/src/tabbar/index.ts index 11d75731d9..c387912cd8 100644 --- a/packages/renderless/src/tabbar/index.ts +++ b/packages/renderless/src/tabbar/index.ts @@ -10,7 +10,7 @@ * */ -import { off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const setActiveItem = ({ props, state }) => @@ -77,7 +77,7 @@ export const initPage = export const beforeDestroy = ({ vm, api }) => () => { - off(window, 'resize', api.initPage) + dom.off(window, 'resize', api.initPage) vm.$off('updateItems') vm.$off('activeItem') vm.$off('showIndex') diff --git a/packages/renderless/src/tabbar/vue.ts b/packages/renderless/src/tabbar/vue.ts index e334dbd2a0..bea1592948 100644 --- a/packages/renderless/src/tabbar/vue.ts +++ b/packages/renderless/src/tabbar/vue.ts @@ -11,7 +11,7 @@ */ import { setActiveItem, onChange, getChildrens, getItems, beforeDestroy, initPage } from './index' -import { on } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const api = ['state', 'onChange', 'getChildrens'] @@ -44,7 +44,7 @@ export const renderless = ( }) onMounted(() => { - on(window, 'resize', api.initPage) + dom.on(window, 'resize', api.initPage) state.tabbarWidth = vm.$refs.tabbar && vm.$refs.tabbar.offsetWidth if (props.placeholder && props.fixed) { diff --git a/packages/renderless/src/tall-storage/vue.ts b/packages/renderless/src/tall-storage/vue.ts index 2d20ab7bf8..af292d69a1 100644 --- a/packages/renderless/src/tall-storage/vue.ts +++ b/packages/renderless/src/tall-storage/vue.ts @@ -11,7 +11,7 @@ */ import { mousedown, selectItem, keydown } from './index' -import { on, off } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const api = ['state', 'mousedown', 'selectItem'] @@ -35,10 +35,10 @@ export const renderless = (props, { onUnmounted, reactive, watch }, { emit }) => onUnmounted(() => { state.hoverValue = '' - off(document, 'keydown', api.keydown) + dom.off(document, 'keydown', api.keydown) }) - on(document, 'keydown', api.keydown) + dom.on(document, 'keydown', api.keydown) return api } diff --git a/packages/renderless/src/tooltip/index.ts b/packages/renderless/src/tooltip/index.ts index 9c03615d72..095f76f381 100644 --- a/packages/renderless/src/tooltip/index.ts +++ b/packages/renderless/src/tooltip/index.ts @@ -12,7 +12,7 @@ import type { ITooltipApi, ITooltipRenderlessParams, ITooltipState } from '@/types' import debounce from '../common/deps/debounce' -import { on, off, addClass, removeClass } from '../common/deps/dom' +import { dom } from '@opentiny/utils' export const show = ({ api, state, props }: Pick) => @@ -138,12 +138,12 @@ export const destroyed = state.showPopper = false if (reference && reference.nodeType === 1) { - off(document, 'click', api.handleDocumentClick) - off(reference, 'mouseenter', api.show) - off(reference, 'mouseleave', api.hide) - off(reference, 'focus', api.focusHandler) - off(reference, 'blur', api.handleBlur) - off(reference, 'click', api.removeFocusing) + dom.off(document, 'click', api.handleDocumentClick) + dom.off(reference, 'mouseenter', api.show) + dom.off(reference, 'mouseleave', api.hide) + dom.off(reference, 'focus', api.focusHandler) + dom.off(reference, 'blur', api.handleBlur) + dom.off(reference, 'click', api.removeFocusing) } if (vm.popperVM) { @@ -160,9 +160,9 @@ export const debounceClose = ({ api, props }: Pick (value: boolean) => { if (value) { - addClass(state.referenceElm, 'focusing') + dom.addClass(state.referenceElm, 'focusing') } else { - removeClass(state.referenceElm, 'focusing') + dom.removeClass(state.referenceElm, 'focusing') } } @@ -205,12 +205,12 @@ export const bindEvent = referenceElm.setAttribute('aria-describedby', state.tooltipId) referenceElm.setAttribute('tabindex', state.tabindex.toString()) - on(document, 'click', api.handleDocumentClick) - on(referenceElm, 'mouseenter', api.show) - on(referenceElm, 'mouseleave', api.hide) - on(referenceElm, 'focus', api.focusHandler) - on(referenceElm, 'blur', api.handleBlur) - on(referenceElm, 'click', api.removeFocusing) + dom.on(document, 'click', api.handleDocumentClick) + dom.on(referenceElm, 'mouseenter', api.show) + dom.on(referenceElm, 'mouseleave', api.hide) + dom.on(referenceElm, 'focus', api.focusHandler) + dom.on(referenceElm, 'blur', api.handleBlur) + dom.on(referenceElm, 'click', api.removeFocusing) } export const observeCallback = diff --git a/packages/renderless/src/top-box/index.ts b/packages/renderless/src/top-box/index.ts index b47cd1771c..b059616f88 100644 --- a/packages/renderless/src/top-box/index.ts +++ b/packages/renderless/src/top-box/index.ts @@ -11,8 +11,8 @@ */ import { KEY_CODE } from '../common' -import { on, off } from '../common/deps/dom' import PopupManager from '../common/deps/popup-manager' +import { dom } from '@opentiny/utils' export const handleAfterLeave = (api) => () => api.destroy() @@ -31,12 +31,12 @@ export const bindKeyDown = export const bindEvent = ({ api }) => () => - on(document, 'keydown', api.bindKeyDown) + dom.on(document, 'keydown', api.bindKeyDown) export const unBindEvent = ({ api }) => () => - off(document, 'keydown', api.bindKeyDown) + dom.off(document, 'keydown', api.bindKeyDown) export const startTimer = ({ api, state }) => diff --git a/packages/renderless/src/tree/index.ts b/packages/renderless/src/tree/index.ts index 60ef3c99f2..c16d696b2d 100644 --- a/packages/renderless/src/tree/index.ts +++ b/packages/renderless/src/tree/index.ts @@ -13,10 +13,9 @@ import { getNodeKey as innerGetNodekey } from '../common/deps/tree-model/util' import { KEY_CODE } from '../common' import TreeStore from '../common/deps/tree-model/tree-store' -import { addClass, removeClass } from '../common/deps/dom' -import { on, off } from '../common/deps/dom' import { getDataset } from '../common/dataset' import { copyArray } from '../common/object' +import { dom } from '@opentiny/utils' import { log } from '@opentiny/utils' @@ -139,7 +138,7 @@ const setDropIndicatorTop = (dropNode, parent, dropType) => { dropIndicator.style.top = indicatorTop + 'px' } - dropType === 'inner' ? addClass(dropNode.$el, 'is-drop-inner') : removeClass(dropNode.$el, 'is-drop-inner') + dropType === 'inner' ? dom.addClass(dropNode.$el, 'is-drop-inner') : dom.removeClass(dropNode.$el, 'is-drop-inner') } const getDragDir = ({ draggingNode, dropNode, allowDrop, emit, dragState, event }) => { @@ -194,7 +193,7 @@ export const dragOver = const oldDropNode = dragState.dropNode if (oldDropNode && oldDropNode !== dropNode) { - removeClass(oldDropNode.$el, 'is-drop-inner') + dom.removeClass(oldDropNode.$el, 'is-drop-inner') } const draggingNode = dragState.draggingNode @@ -253,7 +252,7 @@ export const dragEnd = normalType && state.store.registerNode(draggingNodeCopy) - removeClass(dropNode.$el, 'is-drop-inner') + dom.removeClass(dropNode.$el, 'is-drop-inner') emit('node-drag-end', draggingNode.node, dropNode.node, dropType, event) @@ -398,7 +397,7 @@ export const mounted = ({ api, vm }) => () => { api.initTabIndex() - on(vm.$el, 'keydown', api.handleKeydown) + dom.on(vm.$el, 'keydown', api.handleKeydown) } export const beforeUnmount = @@ -406,7 +405,7 @@ export const beforeUnmount = () => { state.action.popoverVisible = false - off(vm.$el, 'keydown', api.handleKeydown) + dom.off(vm.$el, 'keydown', api.handleKeydown) } export const wrapMounted = diff --git a/packages/renderless/src/common/deps/dom.ts b/packages/utils/src/dom/index.ts similarity index 96% rename from packages/renderless/src/common/deps/dom.ts rename to packages/utils/src/dom/index.ts index 54f8fee46e..8473f51775 100644 --- a/packages/renderless/src/common/deps/dom.ts +++ b/packages/utils/src/dom/index.ts @@ -10,8 +10,8 @@ * */ -import { type } from '@opentiny/utils' -import { global } from '@opentiny/utils' +import { hasOwn, isNull } from '../type' +import globalConfig from '../global' export const isServer = typeof window === 'undefined' const SPECIAL_CHARS_REGEXP = /([:\-_]+(.))/g @@ -126,7 +126,7 @@ export const setStyle = (el: HTMLElement, name: string | object, value?: any) => if (typeof name === 'object') { for (const prop in name) { - if (type.hasOwn.call(name, prop)) { + if (hasOwn.call(name, prop)) { setStyle(el, prop, name[prop]) } } @@ -149,7 +149,7 @@ export const isScroll = (el: HTMLElement, vertical?: boolean) => { * 它的值为false: 当vertical = null / undefinded。 * 它的值为 true: 当vertical =true /false */ - const determinedDirection = !type.isNull(vertical) + const determinedDirection = !isNull(vertical) let overflow if (determinedDirection) { @@ -195,7 +195,7 @@ export const isInContainer = (el: HTMLElement, container: HTMLElement) => { const elRect = el.getBoundingClientRect() let containerRect - if (~[window, document, document.documentElement].indexOf(container) || type.isNull(container)) { + if (~[window, document, document.documentElement].indexOf(container) || isNull(container)) { containerRect = { top: 0, right: window.innerWidth, @@ -221,7 +221,7 @@ export const isInContainer = (el: HTMLElement, container: HTMLElement) => { * @returns visibleWidth : 可视区宽度(不含滚动条) */ export const getDomNode = () => { - const viewportWindow = global.globalConfig.viewportWindow || window + const viewportWindow = globalConfig.viewportWindow || window let documentElement = viewportWindow.document.documentElement let bodyElem = viewportWindow.document.body diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 319a94c6b7..906824aaef 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,14 +1,16 @@ import xss from './xss' import log from './log' import crypt from './crypt' -import global from './global' +import * as global from './global' +import * as dom from './dom' import * as type from './type' -export { xss, log, crypt, global, type } +export { xss, log, crypt, dom, global, type } export default { xss, log, + dom, crypt, global, type diff --git a/packages/vue-common/package.json b/packages/vue-common/package.json index c4bebdbe45..45f7d64744 100644 --- a/packages/vue-common/package.json +++ b/packages/vue-common/package.json @@ -28,6 +28,7 @@ "sideEffects": false, "type": "module", "dependencies": { + "@opentiny/utils": "workspace:~", "@opentiny/vue-locale": "workspace:~", "@opentiny/vue-renderless": "workspace:~", "@opentiny/vue-theme": "workspace:~", diff --git a/packages/vue-common/src/breakpoint.ts b/packages/vue-common/src/breakpoint.ts index e7994a7ce0..a18967fae3 100644 --- a/packages/vue-common/src/breakpoint.ts +++ b/packages/vue-common/src/breakpoint.ts @@ -1,6 +1,6 @@ import hooks from './adapter' -import { isServer } from '@opentiny/vue-renderless/common/deps/dom' import debounce from '@opentiny/vue-renderless/common/deps/debounce' +import { dom } from '@opentiny/utils' /** * 组合使用 Tailwind 的响应性断点状态 @@ -13,7 +13,7 @@ export const useBreakpoint = () => { const activeBreakpoint = hooks.ref('') const prefixes = ['2xl', 'xl', 'lg', 'md', 'sm'] const createMatchMedia = (mediaQueryString) => { - if (isServer || typeof matchMedia !== 'function') { + if (dom.isServer || typeof matchMedia !== 'function') { return { matches: false, media: mediaQueryString, diff --git a/packages/vue/src/collapse-transition/package.json b/packages/vue/src/collapse-transition/package.json index c2d0f05197..54538309da 100644 --- a/packages/vue/src/collapse-transition/package.json +++ b/packages/vue/src/collapse-transition/package.json @@ -15,6 +15,7 @@ "//postversion": "pnpm build" }, "dependencies": { + "@opentiny/utils": "workspace:~", "@opentiny/vue-common": "workspace:~", "@opentiny/vue-renderless": "workspace:~", "@opentiny/vue-theme": "workspace:~" diff --git a/packages/vue/src/collapse-transition/src/pc.vue b/packages/vue/src/collapse-transition/src/pc.vue index f9a62ce160..0c9d11fd17 100644 --- a/packages/vue/src/collapse-transition/src/pc.vue +++ b/packages/vue/src/collapse-transition/src/pc.vue @@ -17,7 +17,7 @@