import { isHTMLTag, isSVGTag } from '@vue/shared' export const BUILT_IN_TAG_NAMES = [ 'ad', 'ad-content-page', 'ad-draw', 'audio', 'button', 'camera', 'canvas', 'checkbox', 'checkbox-group', 'cover-image', 'cover-view', 'editor', 'form', 'functional-page-navigator', 'icon', 'image', 'input', 'label', 'live-player', 'live-pusher', 'map', 'movable-area', 'movable-view', 'navigator', 'official-account', 'open-data', 'picker', 'picker-view', 'picker-view-column', 'progress', 'radio', 'radio-group', 'rich-text', 'scroll-view', 'slider', 'swiper', 'swiper-item', 'switch', 'text', 'textarea', 'video', 'view', 'web-view', ] export const BUILT_IN_TAGS = BUILT_IN_TAG_NAMES.map((tag) => 'uni-' + tag) export const TAGS = [ 'app', 'layout', 'content', 'main', 'top-window', 'left-window', 'right-window', 'tabbar', 'page', 'page-head', 'page-wrapper', 'page-body', 'page-refresh', 'actionsheet', 'modal', 'toast', 'resize-sensor', 'shadow-root', ].map((tag) => 'uni-' + tag) export const NVUE_BUILT_IN_TAGS = [ 'svg', 'view', 'a', 'div', 'img', 'image', 'text', 'span', 'input', 'textarea', 'spinner', 'select', // slider 被自定义 u-slider 替代 // 'slider', 'slider-neighbor', 'indicator', 'canvas', 'list', 'cell', 'header', 'loading', 'loading-indicator', 'refresh', 'scrollable', 'scroller', 'video', 'web', 'embed', 'tabbar', 'tabheader', 'datepicker', 'timepicker', 'marquee', 'countdown', 'dc-switch', ] export const NVUE_U_BUILT_IN_TAGS = [ 'u-text', 'u-image', 'u-input', 'u-textarea', 'u-video', 'u-web-view', 'u-slider', 'u-ad', 'u-ad-draw', ] export function isBuiltInComponent(tag: string) { // h5 平台会被转换为 v-uni- return BUILT_IN_TAGS.indexOf('uni-' + tag.replace('v-uni-', '')) !== -1 } export function isH5CustomElement(tag: string) { return TAGS.indexOf(tag) !== -1 || BUILT_IN_TAGS.indexOf(tag) !== -1 } export function isH5NativeTag(tag: string) { return ( tag !== 'head' && (isHTMLTag(tag) || isSVGTag(tag)) && !isBuiltInComponent(tag) ) } export function isAppNativeTag(tag: string) { return isHTMLTag(tag) || isSVGTag(tag) || isBuiltInComponent(tag) } const NVUE_CUSTOM_COMPONENTS = [ 'ad', 'ad-draw', 'button', 'checkbox-group', 'checkbox', 'form', 'icon', 'label', 'movable-area', 'movable-view', 'navigator', 'picker', 'progress', 'radio-group', 'radio', 'rich-text', 'swiper-item', 'swiper', 'switch', 'slider', 'picker-view', 'picker-view-column', ] export function isAppNVueNativeTag(tag: string) { if (NVUE_BUILT_IN_TAGS.includes(tag)) { return true } if (NVUE_CUSTOM_COMPONENTS.includes(tag)) { return false } if (isBuiltInComponent(tag)) { return true } // u-text,u-video... if (NVUE_U_BUILT_IN_TAGS.includes(tag)) { return true } return false } export function isMiniProgramNativeTag(tag: string) { return isBuiltInComponent(tag) } export function createIsCustomElement(tags: string[] = []) { return function isCustomElement(tag: string) { return tags.includes(tag) } } export function isComponentTag(tag: string) { return tag[0].toLowerCase() + tag.slice(1) === 'component' } export const COMPONENT_SELECTOR_PREFIX = 'uni-' export const COMPONENT_PREFIX = 'v-' + COMPONENT_SELECTOR_PREFIX