Merge branch 'dev' into next

This commit is contained in:
chenjiahan 2022-01-25 14:42:56 +08:00
commit 437dcc6c41
34 changed files with 105 additions and 78 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@vant/area-data",
"version": "1.2.1",
"version": "1.2.2",
"description": "Vant 省市区数据",
"main": "dist/index.cjs.js",
"module": "dist/index.esm.js",

View File

@ -509,15 +509,14 @@ export const areaList = {
130471: '邯郸经济技术开发区',
130473: '邯郸冀南新区',
130481: '武安市',
130502: '桥东区',
130503: '桥西区',
130521: '邢台县',
130502: '襄都区',
130503: '信都区',
130505: '任泽区',
130506: '南和区',
130522: '临城县',
130523: '内丘县',
130524: '柏乡县',
130525: '隆尧县',
130526: '任县',
130527: '南和县',
130528: '宁晋县',
130529: '巨鹿县',
130530: '新河县',

View File

@ -16,7 +16,8 @@ const DEFAULT_CONFIG = {
setupFilesAfterEnv: [JEST_SETUP_FILE],
moduleFileExtensions: ['js', 'jsx', 'vue', 'ts', 'tsx'],
transform: {
'\\.(js|jsx|ts|tsx|vue)$': '<rootDir>/node_modules/@vant/cli/cjs/jest.transformer.cjs',
'\\.(js|jsx|ts|tsx|vue)$':
'<rootDir>/node_modules/@vant/cli/cjs/jest.transformer.cjs',
},
transformIgnorePatterns: ['/node_modules/(?!(@vant/cli))/'],
snapshotSerializers: ['jest-serializer-html'],

View File

@ -27,12 +27,12 @@ button
| transform | boolean | 防止预览区内 fixed 定位的元素飞出预览区 |
| inline | boolean | 只显示组件本身,不显示预览区边框和代码 |
### `compact`
```html
<demo-code compact>./demo/MyDemo.vue</demo-code>
```
![image](https://user-images.githubusercontent.com/5093611/111076728-77cc5d00-8528-11eb-85f1-e7217344ab14.png)
### `transform`
@ -40,6 +40,7 @@ button
```html
<demo-code transform>./demo/MyDemo.vue</demo-code>
```
![image](https://user-images.githubusercontent.com/5093611/111076799-d5f94000-8528-11eb-973f-c9d69f91d2a7.png)
### `inline`
@ -47,6 +48,7 @@ button
```html
<demo-code inline>./demo/MyDemo.vue</demo-code>
```
![image](https://user-images.githubusercontent.com/5093611/111076845-15c02780-8529-11eb-9cfb-76c9b25dc2a2.png)
### 去除手机模拟器
@ -79,5 +81,4 @@ module.exports = {
},
},
};
```
```

View File

@ -18,10 +18,9 @@
<% if (baiduAnalytics) { %>
<script>
var _hmt = _hmt || [];
(function() {
(function () {
var hm = document.createElement('script');
hm.src =
'https://hm.baidu.com/hm.js?<%= baiduAnalytics.seed %>';
hm.src = 'https://hm.baidu.com/hm.js?<%= baiduAnalytics.seed %>';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(hm, s);
})();

View File

@ -12,8 +12,7 @@
export default {
data() {
return {
path:
'M296.114 508.035c-3.22-13.597.473-28.499 11.079-39.105l333.912-333.912c16.271-16.272 42.653-16.272 58.925 0s16.272 42.654 0 58.926L395.504 498.47l304.574 304.574c16.272 16.272 16.272 42.654 0 58.926s-42.654 16.272-58.926 0L307.241 528.058a41.472 41.472 0 0 1-11.127-20.023z',
path: 'M296.114 508.035c-3.22-13.597.473-28.499 11.079-39.105l333.912-333.912c16.271-16.272 42.653-16.272 58.925 0s16.272 42.654 0 58.926L395.504 498.47l304.574 304.574c16.272 16.272 16.272 42.654 0 58.926s-42.654 16.272-58.926 0L307.241 528.058a41.472 41.472 0 0 1-11.127-20.023z',
};
},

View File

@ -1,4 +1,4 @@
import { defineComponent } from 'vue'
import { defineComponent } from 'vue';
export default defineComponent({
name: 'App',
@ -7,6 +7,6 @@ export default defineComponent({
<>
<h1>App</h1>
</>
)
}
})
);
},
});

View File

@ -5,15 +5,15 @@
</template>
<script>
const a = 1
a = 1
const a = 1;
a = 1;
export default {
data() {
return {
arr: [1, 2, 3]
}
}
}
arr: [1, 2, 3],
};
},
};
</script>
<style></style>

View File

@ -1,2 +1,2 @@
const a = b + 1
export default a
const a = b + 1;
export default a;

View File

@ -1,7 +1,7 @@
declare const config: {
name: string;
basic: string[];
outline: string[];
filled: string[];
name: string;
basic: string[];
outline: string[];
filled: string[];
};
export default config;

View File

@ -1281,9 +1281,9 @@ new-github-release-url@1.0.0:
type-fest "^0.4.1"
node-fetch@^2.6.1:
version "2.6.6"
resolved "https://registry.npmmirror.com/node-fetch/download/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89"
integrity sha1-F1GnwBg06OFpd1hzLp77burfr4k=
version "2.6.7"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
dependencies:
whatwg-url "^5.0.0"
@ -1794,7 +1794,7 @@ to-regex-range@^5.0.1:
tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz?cache=0&sync_timestamp=1633303287861&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftr46%2Fdownload%2Ftr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
tslib@~2.1.0:
@ -1887,12 +1887,12 @@ wcwidth@^1.0.1:
webidl-conversions@^3.0.0:
version "3.0.1"
resolved "https://registry.npmmirror.com/webidl-conversions/download/webidl-conversions-3.0.1.tgz?cache=0&sync_timestamp=1632753508689&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwebidl-conversions%2Fdownload%2Fwebidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
whatwg-url@^5.0.0:
version "5.0.0"
resolved "https://registry.npmmirror.com/whatwg-url/download/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
dependencies:
tr46 "~0.0.3"

View File

@ -20,7 +20,7 @@ export type VueAttribute = {
name: string;
default: string;
description: string;
options: string[]
options: string[];
value: {
kind: 'expression';
type: string;

View File

@ -21,8 +21,8 @@ export function normalizePath(path: string): string {
return path.replace(/\\/g, '/');
}
// `default` `primary` -> ['default', 'primary']
// `default` `primary` -> ['default', 'primary']
export function formatOptions(options?: string) {
if (!options) return []
return options.replace(/`/g, '').split(' ')
if (!options) return [];
return options.replace(/`/g, '').split(' ');
}

View File

@ -1,5 +1,9 @@
# Changelog
## v1.3.5
- Fix useChildren missing subTree when flattening vnodes
## v1.3.4
- Fix useClickAway failed in SSR

View File

@ -1,6 +1,6 @@
{
"name": "@vant/use",
"version": "1.3.4",
"version": "1.3.5",
"description": "Vant Composition API",
"main": "dist/index.cjs.js",
"module": "dist/index.esm.js",

View File

@ -6,9 +6,8 @@ export type CustomFieldInjectionValue = {
validateWithTrigger: (trigger: 'onBlur' | 'onChange' | 'onSubmit') => void;
};
export const CUSTOM_FIELD_INJECTION_KEY: InjectionKey<CustomFieldInjectionValue> = Symbol(
'van-field'
);
export const CUSTOM_FIELD_INJECTION_KEY: InjectionKey<CustomFieldInjectionValue> =
Symbol('van-field');
export function useCustomFieldValue(customValue: () => unknown) {
const field = inject(CUSTOM_FIELD_INJECTION_KEY, null);

View File

@ -20,6 +20,7 @@ export function flattenVNodes(children: VNodeNormalizedChildren) {
result.push(child);
if (child.component?.subTree) {
result.push(child.component.subTree);
traverse(child.component.subTree.children);
}

View File

@ -20,11 +20,11 @@ export default {
setup() {
const root = ref();
onMounted(()=>{
onMounted(() => {
const rect = useRect(root);
console.log(rect); // -> 元素的大小及其相对于视口的位置
})
});
return { root };
},
};

View File

@ -33,7 +33,6 @@
align-items: center;
justify-content: center;
min-width: 0; // hack for flex ellipsis
cursor: pointer;
&--disabled {
.van-dropdown-menu__title {

View File

@ -2,6 +2,7 @@
.van-icon {
&__image {
display: block;
width: 1em;
height: 1em;
object-fit: contain;

View File

@ -86,7 +86,6 @@
z-index: var(--van-image-preview-close-icon-z-index);
color: var(--van-image-preview-close-icon-color);
font-size: var(--van-image-preview-close-icon-size);
cursor: pointer;
&--top-left {
top: var(--van-image-preview-close-icon-margin);

View File

@ -62,7 +62,6 @@
align-items: center;
padding: 0 var(--van-padding-md);
font-size: var(--van-font-size-md);
cursor: pointer;
}
&__left {

View File

@ -72,7 +72,6 @@
font-size: var(--van-number-keyboard-close-font-size);
background-color: transparent;
border: none;
cursor: pointer;
}
&__sidebar {

View File

@ -40,7 +40,6 @@
font-size: var(--van-picker-action-font-size);
background-color: transparent;
border: none;
cursor: pointer;
}
&__confirm {

View File

@ -114,7 +114,6 @@
z-index: var(--van-popup-close-icon-z-index);
color: var(--van-popup-close-icon-color);
font-size: var(--van-popup-close-icon-size);
cursor: pointer;
&--top-left {
top: var(--van-popup-close-icon-margin);

View File

@ -61,7 +61,6 @@
display: flex;
flex-direction: column;
align-items: center;
cursor: pointer;
user-select: none;
}

View File

@ -30,7 +30,6 @@
vertical-align: middle;
background: var(--van-stepper-background);
border: 0;
cursor: pointer;
&::before {
width: 50%;

View File

@ -30,8 +30,12 @@
padding-bottom: env(safe-area-inset-bottom);
}
.van-haptics-feedback:active {
opacity: var(--van-active-opacity);
.van-haptics-feedback {
cursor: pointer;
&:active {
opacity: var(--van-active-opacity);
}
}
[class*='van-hairline'] {

View File

@ -15,7 +15,7 @@ exports[`should render Tab inside a component correctly 1`] = `
aria-controls="van-tab"
>
<span class="van-tab__text van-tab__text--ellipsis">
2
1
</span>
</div>
<div id="van-tabs-1"
@ -26,7 +26,7 @@ exports[`should render Tab inside a component correctly 1`] = `
aria-controls="van-tab"
>
<span class="van-tab__text van-tab__text--ellipsis">
1
2
</span>
</div>
<div id="van-tabs-2"
@ -47,15 +47,6 @@ exports[`should render Tab inside a component correctly 1`] = `
</div>
</div>
<div class="van-tabs__content">
<div id="van-tab"
role="tabpanel"
class="van-tab__panel"
tabindex="0"
aria-labelledby="van-tabs-1"
style
>
1
</div>
<div id="van-tab"
role="tabpanel"
class="van-tab__panel"
@ -64,6 +55,15 @@ exports[`should render Tab inside a component correctly 1`] = `
style="display: none;"
>
</div>
<div id="van-tab"
role="tabpanel"
class="van-tab__panel"
tabindex="0"
aria-labelledby="van-tabs-1"
style
>
2
</div>
<div id="van-tab"
role="tabpanel"
class="van-tab__panel"

View File

@ -5,7 +5,12 @@ import {
type CSSProperties,
type ExtractPropTypes,
} from 'vue';
import { truthProp, makeStringProp, createNamespace } from '../utils';
import {
truthProp,
makeStringProp,
createNamespace,
HAPTICS_FEEDBACK,
} from '../utils';
import { Icon } from '../icon';
const [name, bem] = createNamespace('tag');
@ -66,7 +71,11 @@ export default defineComponent({
}
const CloseIcon = closeable && (
<Icon name="cross" class={bem('close')} onClick={onClose} />
<Icon
name="cross"
class={[bem('close'), HAPTICS_FEEDBACK]}
onClick={onClose}
/>
);
return (

View File

@ -111,6 +111,5 @@
&__close {
margin-left: 2px;
cursor: pointer;
}
}

View File

@ -112,7 +112,7 @@ exports[`should render demo and match snapshot 1`] = `
<transition-stub>
<span class="van-tag van-tag--medium van-tag--primary">
Tag
<i class="van-badge__wrapper van-icon van-icon-cross van-tag__close">
<i class="van-badge__wrapper van-icon van-icon-cross van-tag__close van-haptics-feedback">
</i>
</span>
</transition-stub>

View File

@ -112,9 +112,10 @@ export default defineComponent({
const onSidebarChange = (index: number) => {
emit('update:mainActiveIndex', index);
emit('click-nav', index);
};
const onClickSidebarItem = (index: number) => emit('click-nav', index);
const renderSidebar = () => {
const Items = props.items.map((item) => (
<SidebarItem
@ -123,6 +124,7 @@ export default defineComponent({
badge={item.badge}
class={[bem('nav-item'), item.className]}
disabled={item.disabled}
onClick={onClickSidebarItem}
/>
));

View File

@ -26,7 +26,23 @@ test('should render empty TreeSelect correctly', () => {
expect(mount(TreeSelect).html()).toMatchSnapshot();
});
test('should emit click-nav event when nav item is clicked', () => {
test('should emit update:mainActiveIndex event when mainActiveIndex is changed', async () => {
const wrapper = mount(TreeSelect, {
props: {
items: mockItems,
mainActiveIndex: 0,
},
});
const navItems = wrapper.findAll('.van-tree-select__nav-item');
await navItems[0].trigger('click');
expect(wrapper.emitted('update:mainActiveIndex')).toBeFalsy();
await navItems[1].trigger('click');
expect(wrapper.emitted('update:mainActiveIndex')?.[0]).toEqual([1]);
});
test('should emit click-nav event when nav item is clicked', async () => {
const wrapper = mount(TreeSelect, {
props: {
items: mockItems,
@ -34,9 +50,10 @@ test('should emit click-nav event when nav item is clicked', () => {
});
const navItems = wrapper.findAll('.van-tree-select__nav-item');
navItems[1].trigger('click');
expect(wrapper.emitted('update:mainActiveIndex')?.[0]).toEqual([1]);
expect(wrapper.emitted('click-nav')?.[0]).toEqual([1]);
await navItems[0].trigger('click');
expect(wrapper.emitted('click-nav')?.[0]).toEqual([0]);
await navItems[0].trigger('click');
expect(wrapper.emitted('click-nav')?.[1]).toEqual([0]);
});
test('should emit click-item event when item is clicked', () => {