persagy-vant 0.0.36 → 0.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/area/style/index.mjs +2 -0
- package/es/area/style/less.mjs +2 -0
- package/es/cell/Cell.d.ts +9 -0
- package/es/cell/Cell.mjs +15 -3
- package/es/cell/index.css +1 -1
- package/es/cell/index.d.ts +6 -1
- package/es/cell/index.less +24 -2
- package/es/cell/var.less +6 -0
- package/es/cell-group/CellGroup.d.ts +4 -0
- package/es/cell-group/CellGroup.mjs +4 -2
- package/es/cell-group/index.css +1 -1
- package/es/cell-group/index.d.ts +3 -0
- package/es/cell-group/index.less +27 -0
- package/es/cell-group/var.less +3 -0
- package/es/collapse-item/CollapseItem.d.ts +7 -0
- package/es/collapse-item/index.d.ts +5 -0
- package/es/field/Field.d.ts +7 -0
- package/es/field/index.d.ts +5 -0
- package/es/icon/Icon.mjs +7 -4
- package/es/icon/assets/copy.svg +4 -0
- package/es/icon/config.d.ts +1 -0
- package/es/icon/config.mjs +1 -0
- package/es/icon/gif.d.ts +6 -0
- package/es/icon/gif.mjs +9 -0
- package/es/icon/index.css +1 -1
- package/es/icon/index.d.ts +2 -0
- package/es/icon/index.mjs +4 -1
- package/es/icon/latest-iconfont.css +1 -1
- package/es/icon/latest-iconfont.less +11 -0
- package/es/index.d.ts +1 -1
- package/es/index.mjs +1 -1
- package/es/info-card/InfoCard.d.ts +31 -0
- package/es/info-card/InfoCard.mjs +45 -3
- package/es/info-card/index.css +1 -1
- package/es/info-card/index.d.ts +22 -1
- package/es/info-card/index.less +57 -0
- package/es/info-card/var.less +1 -1
- package/es/label/Label.d.ts +21 -0
- package/es/label/Label.mjs +12 -2
- package/es/label/index.css +1 -1
- package/es/label/index.d.ts +15 -0
- package/es/label/index.less +27 -0
- package/es/label/var.less +1 -0
- package/es/list/style/index.mjs +2 -0
- package/es/list/style/less.mjs +2 -0
- package/es/loading/Loading.mjs +8 -26
- package/es/loading/index.css +1 -1
- package/es/loading/index.less +1 -1
- package/es/loading/style/index.mjs +2 -0
- package/es/loading/style/less.mjs +2 -0
- package/es/material-action-bar/index.css +1 -1
- package/es/material-action-bar/index.less +3 -1
- package/es/material-add/MaterialAdd.mjs +158 -63
- package/es/material-add/index.css +1 -1
- package/es/material-add/index.d.ts +1 -1
- package/es/material-add/index.less +0 -14
- package/es/material-add/types.d.ts +7 -4
- package/es/material-detail/MaterialDetail.mjs +14 -9
- package/es/material-display-bar/index.css +1 -1
- package/es/material-display-bar/index.less +2 -1
- package/es/material-display-bar/var.less +1 -0
- package/es/number-keyboard/style/index.mjs +2 -0
- package/es/number-keyboard/style/less.mjs +2 -0
- package/es/object-select/ObjectSelect.mjs +13 -1
- package/es/picker/style/index.mjs +2 -0
- package/es/picker/style/less.mjs +2 -0
- package/es/progress/Progress.d.ts +17 -0
- package/es/progress/Progress.mjs +14 -9
- package/es/progress/index.css +1 -1
- package/es/progress/index.d.ts +12 -1
- package/es/progress/index.less +24 -14
- package/es/progress/types.d.ts +1 -0
- package/es/progress/var.less +10 -7
- package/es/pull-refresh/style/index.mjs +2 -0
- package/es/pull-refresh/style/less.mjs +2 -0
- package/es/style/base.css +1 -1
- package/es/style/base.less +5 -0
- package/es/style/css-variables.css +1 -1
- package/es/style/css-variables.less +1 -0
- package/es/style/var.less +1 -0
- package/es/switch/style/index.mjs +2 -0
- package/es/switch/style/less.mjs +2 -0
- package/es/title-bar/TitleBar.d.ts +5 -1
- package/es/title-bar/TitleBar.mjs +5 -3
- package/es/title-bar/index.css +1 -1
- package/es/title-bar/index.d.ts +4 -1
- package/es/title-bar/index.less +6 -1
- package/es/title-bar/var.less +2 -0
- package/es/tree-select/TreeSelect.mjs +9 -4
- package/es/tree-select/index.css +1 -1
- package/es/tree-select/index.less +29 -1
- package/es/uploader/Uploader.d.ts +7 -0
- package/es/uploader/Uploader.mjs +55 -30
- package/es/uploader/UploaderPreviewItem.d.ts +2 -1
- package/es/uploader/UploaderPreviewItem.mjs +13 -6
- package/es/uploader/index.css +1 -1
- package/es/uploader/index.d.ts +5 -0
- package/es/uploader/index.less +30 -0
- package/es/uploader/types.d.ts +1 -0
- package/es/uploader/utils.d.ts +2 -0
- package/es/uploader/utils.mjs +74 -0
- package/es/uploader/var.less +5 -0
- package/es/work-order-card/WorkOrderCard.mjs +52 -11
- package/es/work-order-card/index.css +1 -1
- package/es/work-order-card/index.less +3 -4
- package/es/work-order-card/style/index.mjs +2 -0
- package/es/work-order-card/style/less.mjs +2 -0
- package/es/work-order-card/types.d.ts +14 -1
- package/lib/area/style/index.js +2 -0
- package/lib/area/style/less.js +2 -0
- package/lib/cell/Cell.d.ts +9 -0
- package/lib/cell/Cell.js +15 -3
- package/lib/cell/index.css +1 -1
- package/lib/cell/index.d.ts +6 -1
- package/lib/cell/index.less +24 -2
- package/lib/cell/var.less +6 -0
- package/lib/cell-group/CellGroup.d.ts +4 -0
- package/lib/cell-group/CellGroup.js +4 -2
- package/lib/cell-group/index.css +1 -1
- package/lib/cell-group/index.d.ts +3 -0
- package/lib/cell-group/index.less +27 -0
- package/lib/cell-group/var.less +3 -0
- package/lib/collapse-item/CollapseItem.d.ts +7 -0
- package/lib/collapse-item/index.d.ts +5 -0
- package/lib/field/Field.d.ts +7 -0
- package/lib/field/index.d.ts +5 -0
- package/lib/icon/Icon.js +7 -4
- package/lib/icon/assets/copy.svg +4 -0
- package/lib/icon/config.d.ts +1 -0
- package/lib/icon/config.js +1 -0
- package/lib/icon/gif.d.ts +6 -0
- package/lib/icon/gif.js +28 -0
- package/lib/icon/index.css +1 -1
- package/lib/icon/index.d.ts +2 -0
- package/lib/icon/index.js +4 -1
- package/lib/icon/latest-iconfont.css +1 -1
- package/lib/icon/latest-iconfont.less +11 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/info-card/InfoCard.d.ts +31 -0
- package/lib/info-card/InfoCard.js +45 -3
- package/lib/info-card/index.css +1 -1
- package/lib/info-card/index.d.ts +22 -1
- package/lib/info-card/index.less +57 -0
- package/lib/info-card/var.less +1 -1
- package/lib/label/Label.d.ts +21 -0
- package/lib/label/Label.js +12 -2
- package/lib/label/index.css +1 -1
- package/lib/label/index.d.ts +15 -0
- package/lib/label/index.less +27 -0
- package/lib/label/var.less +1 -0
- package/lib/list/style/index.js +2 -0
- package/lib/list/style/less.js +2 -0
- package/lib/loading/Loading.js +8 -26
- package/lib/loading/index.css +1 -1
- package/lib/loading/index.less +1 -1
- package/lib/loading/style/index.js +2 -0
- package/lib/loading/style/less.js +2 -0
- package/lib/material-action-bar/index.css +1 -1
- package/lib/material-action-bar/index.less +3 -1
- package/lib/material-add/MaterialAdd.js +158 -63
- package/lib/material-add/index.css +1 -1
- package/lib/material-add/index.d.ts +1 -1
- package/lib/material-add/index.less +0 -14
- package/lib/material-add/types.d.ts +7 -4
- package/lib/material-detail/MaterialDetail.js +14 -9
- package/lib/material-display-bar/index.css +1 -1
- package/lib/material-display-bar/index.less +2 -1
- package/lib/material-display-bar/var.less +1 -0
- package/lib/number-keyboard/style/index.js +2 -0
- package/lib/number-keyboard/style/less.js +2 -0
- package/lib/object-select/ObjectSelect.js +13 -1
- package/lib/picker/style/index.js +2 -0
- package/lib/picker/style/less.js +2 -0
- package/lib/progress/Progress.d.ts +17 -0
- package/lib/progress/Progress.js +13 -8
- package/lib/progress/index.css +1 -1
- package/lib/progress/index.d.ts +12 -1
- package/lib/progress/index.less +24 -14
- package/lib/progress/types.d.ts +1 -0
- package/lib/progress/var.less +10 -7
- package/lib/pull-refresh/style/index.js +2 -0
- package/lib/pull-refresh/style/less.js +2 -0
- package/lib/style/base.css +1 -1
- package/lib/style/base.less +5 -0
- package/lib/style/css-variables.css +1 -1
- package/lib/style/css-variables.less +1 -0
- package/lib/style/var.less +1 -0
- package/lib/switch/style/index.js +2 -0
- package/lib/switch/style/less.js +2 -0
- package/lib/title-bar/TitleBar.d.ts +5 -1
- package/lib/title-bar/TitleBar.js +5 -3
- package/lib/title-bar/index.css +1 -1
- package/lib/title-bar/index.d.ts +4 -1
- package/lib/title-bar/index.less +6 -1
- package/lib/title-bar/var.less +2 -0
- package/lib/tree-select/TreeSelect.js +9 -4
- package/lib/tree-select/index.css +1 -1
- package/lib/tree-select/index.less +29 -1
- package/lib/uploader/Uploader.d.ts +7 -0
- package/lib/uploader/Uploader.js +53 -28
- package/lib/uploader/UploaderPreviewItem.d.ts +2 -1
- package/lib/uploader/UploaderPreviewItem.js +12 -5
- package/lib/uploader/index.css +1 -1
- package/lib/uploader/index.d.ts +5 -0
- package/lib/uploader/index.less +30 -0
- package/lib/uploader/types.d.ts +1 -0
- package/lib/uploader/utils.d.ts +2 -0
- package/lib/uploader/utils.js +74 -0
- package/lib/uploader/var.less +5 -0
- package/lib/vant.cjs.js +482 -170
- package/lib/vant.es.js +482 -170
- package/lib/vant.js +482 -170
- package/lib/vant.min.js +1 -1
- package/lib/web-types.json +1 -1
- package/lib/work-order-card/WorkOrderCard.js +52 -11
- package/lib/work-order-card/index.css +1 -1
- package/lib/work-order-card/index.less +3 -4
- package/lib/work-order-card/style/index.js +2 -0
- package/lib/work-order-card/style/less.js +2 -0
- package/lib/work-order-card/types.d.ts +14 -1
- package/package.json +2 -2
- package/skills/use-persagy-vant/SKILL.md +4 -3
- package/skills/use-persagy-vant/references/component-documentation.md +8 -8
- package/skills/use-persagy-vant/references/component-variant-selection.md +53 -0
- package/skills/use-persagy-vant/references/design-interaction-baseline.md +2 -1
- package/skills/use-persagy-vant/references/page-recipes.md +4 -0
- package/skills/use-persagy-vant/references/reuse-policy.md +9 -6
- /package/es/{loading/assets/building.gif → icon/assets/gif/loading-building.gif} +0 -0
- /package/lib/{loading/assets/building.gif → icon/assets/gif/loading-building.gif} +0 -0
package/es/title-bar/index.less
CHANGED
|
@@ -5,16 +5,20 @@
|
|
|
5
5
|
--van-title-bar-gap: @title-bar-gap;
|
|
6
6
|
--van-title-bar-title-color: @title-bar-title-color;
|
|
7
7
|
--van-title-bar-description-color: @title-bar-description-color;
|
|
8
|
+
--van-title-bar-required-color: @title-bar-required-color;
|
|
8
9
|
--van-title-bar-action-divider-before-gap: @title-bar-action-divider-before-gap;
|
|
9
10
|
--van-title-bar-action-divider-after-gap: @title-bar-action-divider-after-gap;
|
|
10
11
|
--van-title-bar-action-divider-color: @title-bar-action-divider-color;
|
|
11
12
|
--van-title-bar-action-divider-height: @title-bar-action-divider-height;
|
|
13
|
+
--van-title-bar-action-padding: @title-bar-action-padding;
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
.van-title-bar {
|
|
15
17
|
color: var(--van-title-bar-title-color);
|
|
16
18
|
|
|
17
19
|
&__header { display: flex; align-items: flex-start; width: 100%; padding: var(--van-title-bar-padding); color: inherit; font: inherit; text-align: left; background: transparent; border: 0; }
|
|
20
|
+
&--required &__header { position: relative; overflow: visible; }
|
|
21
|
+
&--required &__header::before { position: absolute; top: 12px; left: var(--van-padding-xs); color: var(--van-title-bar-required-color); font-size: var(--van-font-size-md); line-height: var(--van-line-height-lg); content: '*'; }
|
|
18
22
|
&--expandable &__header { cursor: pointer; &:active { background: var(--van-active-color); } }
|
|
19
23
|
&__icon { flex: none; margin: 3px 4px 0 0; font-size: 16px; }
|
|
20
24
|
&__text { display: flex; flex: 1; flex-direction: column; min-width: 0; }
|
|
@@ -23,11 +27,12 @@
|
|
|
23
27
|
&__description { overflow: hidden; color: var(--van-title-bar-description-color); font-size: var(--van-font-size-sm); font-weight: 400; line-height: var(--van-line-height-md); text-overflow: ellipsis; white-space: nowrap; }
|
|
24
28
|
&__action { display: flex; flex: none; align-items: center; margin-left: var(--van-title-bar-action-divider-before-gap); }
|
|
25
29
|
&__action-divider { width: 1px; height: var(--van-title-bar-action-divider-height); margin-right: var(--van-title-bar-action-divider-after-gap); background: var(--van-title-bar-action-divider-color); }
|
|
26
|
-
&__action .van-button { flex: none; }
|
|
30
|
+
&__action .van-button { flex: none; height: var(--van-line-height-lg); padding: var(--van-title-bar-action-padding); font-size: var(--van-font-size-md); font-weight: var(--van-font-weight-bold); line-height: var(--van-line-height-lg); }
|
|
27
31
|
&__arrow { flex: none; margin: 4px 0 0 8px; color: var(--van-gray-6); font-size: 14px; transition: transform var(--van-animation-duration-fast); transform: rotate(180deg); }
|
|
28
32
|
&__arrow--expanded { transform: rotate(0); }
|
|
29
33
|
&--mini &__header { padding-top: 12px; padding-bottom: 4px; }
|
|
30
34
|
&--mini &__text strong { font-size: var(--van-font-size-sm); line-height: var(--van-line-height-md); }
|
|
31
35
|
&--mini &__icon { margin-top: 3px; font-size: 14px; }
|
|
32
36
|
&--mini &__arrow { margin-top: 3px; }
|
|
37
|
+
&--mini &__action .van-button { height: var(--van-line-height-md); font-size: var(--van-font-size-sm); line-height: var(--van-line-height-md); }
|
|
33
38
|
}
|
package/es/title-bar/var.less
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
@title-bar-gap: 4px;
|
|
5
5
|
@title-bar-title-color: var(--van-gray-8);
|
|
6
6
|
@title-bar-description-color: var(--van-gray-6);
|
|
7
|
+
@title-bar-required-color: var(--van-danger-color);
|
|
7
8
|
@title-bar-action-divider-before-gap: 8px;
|
|
8
9
|
@title-bar-action-divider-after-gap: 2px;
|
|
9
10
|
@title-bar-action-divider-color: var(--van-gray-4);
|
|
10
11
|
@title-bar-action-divider-height: 12px;
|
|
12
|
+
@title-bar-action-padding: 0 8px;
|
|
@@ -41,6 +41,10 @@ var stdin_default = defineComponent({
|
|
|
41
41
|
const expandedKeys = computed(() => props.expandedKeys);
|
|
42
42
|
const isExpanded = (id) => expandedKeys.value.includes(id);
|
|
43
43
|
const isSelected = (id) => selectedKeys.value.includes(id);
|
|
44
|
+
const getNodeStyle = (level) => ({
|
|
45
|
+
paddingLeft: `calc(var(--van-padding-md) + ${level * 16}px)`,
|
|
46
|
+
"--van-tree-select-divider-left": `calc(var(--van-padding-md) + ${level * 16}px)`
|
|
47
|
+
});
|
|
44
48
|
const getDescendantIds = (item) => {
|
|
45
49
|
var _a;
|
|
46
50
|
return ((_a = item.children) == null ? void 0 : _a.flatMap((child) => [child.id, ...getDescendantIds(child)])) || [];
|
|
@@ -103,7 +107,10 @@ var stdin_default = defineComponent({
|
|
|
103
107
|
if (!hasChildren && slots.leaf) {
|
|
104
108
|
return _createVNode("div", {
|
|
105
109
|
"key": item.id,
|
|
106
|
-
"class": bem("node")
|
|
110
|
+
"class": [bem("node"), bem("leaf", {
|
|
111
|
+
divider: props.showDivider
|
|
112
|
+
})],
|
|
113
|
+
"style": getNodeStyle(level)
|
|
107
114
|
}, [slots.leaf({
|
|
108
115
|
item,
|
|
109
116
|
level
|
|
@@ -120,9 +127,7 @@ var stdin_default = defineComponent({
|
|
|
120
127
|
}),
|
|
121
128
|
"title": item.text,
|
|
122
129
|
"border": props.showDivider,
|
|
123
|
-
"style":
|
|
124
|
-
paddingLeft: `calc(var(--van-padding-md) + ${level * 16}px)`
|
|
125
|
-
},
|
|
130
|
+
"style": getNodeStyle(level),
|
|
126
131
|
"rightSelect": selectable && selectionState !== "indeterminate" ? selectionState === "checked" : void 0,
|
|
127
132
|
"selectType": props.multiple ? "checkbox" : "radio",
|
|
128
133
|
"onUpdate:rightSelect": (value) => updateSelected(item, value)
|
package/es/tree-select/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--van-tree-select-indent: var(--van-padding-md);--van-tree-select-arrow-size: 16px;--van-tree-select-animation-duration: .24s}.van-tree-select{overflow:hidden;color:var(--van-cell-text-color);background:var(--van-white)}.van-tree-select__node{overflow:hidden}.van-tree-select__cell{min-height:44px;padding:10px var(--van-padding-md)}.van-tree-select__cell .van-cell__title-row{align-items:center}.van-tree-select__cell .van-cell__title{font-size:var(--van-font-size-md);line-height:22px}.van-tree-select__node:not(:last-child)>.van-tree-select__cell:not(.van-cell--borderless):after{display:block}.van-tree-select__arrow{flex:none;margin-right:var(--van-padding-base);color:var(--van-gray-5);font-size:var(--van-tree-select-arrow-size);transition:transform var(--van-tree-select-animation-duration) ease}.van-tree-select__arrow--expanded{transform:rotate(0)}.van-tree-select__arrow:not(.van-tree-select__arrow--expanded){transform:rotate(-90deg)}.van-tree-select__expand-control{display:inline-flex;align-items:center;padding:0;color:inherit;font:inherit;line-height:inherit;text-align:left;background:transparent;border:0}.van-tree-select__expand-control:not(:disabled){cursor:pointer}.van-tree-select__expand-control:disabled{color:var(--van-text-color-3);cursor:not-allowed}.van-tree-select__children{overflow:hidden}.van-tree-select__indeterminate{position:relative;display:block;width:14px;height:14px;padding:0;background:var(--van-primary-color);border:0;border-radius:50%}.van-tree-select__indeterminate:after{position:absolute;top:calc(50% - 1px);right:25%;left:25%;height:2px;content:"";background:var(--van-white);border-radius:1px}.van-tree-select-expand-enter-active,.van-tree-select-expand-leave-active{overflow:hidden;transition:max-height var(--van-tree-select-animation-duration) ease,opacity var(--van-tree-select-animation-duration) ease}.van-tree-select-expand-enter-from,.van-tree-select-expand-leave-to{max-height:0;opacity:0}.van-tree-select-expand-enter-to,.van-tree-select-expand-leave-from{max-height:1000px;opacity:1}
|
|
1
|
+
:root{--van-tree-select-indent: var(--van-padding-md);--van-tree-select-arrow-size: 16px;--van-tree-select-animation-duration: .24s;--van-tree-select-divider-left: var(--van-padding-md)}.van-tree-select{overflow:hidden;color:var(--van-cell-text-color);background:var(--van-white)}.van-tree-select__node{overflow:hidden}.van-tree-select__leaf{position:relative;box-sizing:border-box}.van-tree-select__leaf--divider:not(:last-child):after{position:absolute;right:var(--van-padding-md);bottom:0;left:var(--van-tree-select-divider-left);height:1px;background:var(--van-border-color);content:"";transform:scaleY(.5)}.van-tree-select__cell{min-height:44px;padding:10px var(--van-padding-md)}.van-tree-select__cell .van-cell__title-row{align-items:center}.van-tree-select__cell .van-cell__title{font-size:var(--van-font-size-md);line-height:22px}.van-tree-select__node:not(:last-child)>.van-tree-select__cell:not(.van-cell--borderless):after{display:block;left:var(--van-tree-select-divider-left)}.van-tree-select__cell--branch:not(.van-cell--borderless):after{display:block;left:var(--van-tree-select-divider-left)}.van-tree-select__arrow{flex:none;margin-right:var(--van-padding-base);color:var(--van-gray-5);font-size:var(--van-tree-select-arrow-size);transition:transform var(--van-tree-select-animation-duration) ease}.van-tree-select__arrow--expanded{transform:rotate(0)}.van-tree-select__arrow:not(.van-tree-select__arrow--expanded){transform:rotate(-90deg)}.van-tree-select__expand-control{display:inline-flex;align-items:center;padding:0;color:inherit;font:inherit;line-height:inherit;text-align:left;background:transparent;border:0}.van-tree-select__expand-control:not(:disabled){cursor:pointer}.van-tree-select__expand-control:disabled{color:var(--van-text-color-3);cursor:not-allowed}.van-tree-select__children{overflow:hidden}.van-tree-select__indeterminate{position:relative;display:block;width:14px;height:14px;padding:0;background:var(--van-primary-color);border:0;border-radius:50%}.van-tree-select__indeterminate:after{position:absolute;top:calc(50% - 1px);right:25%;left:25%;height:2px;content:"";background:var(--van-white);border-radius:1px}.van-tree-select-expand-enter-active,.van-tree-select-expand-leave-active{overflow:hidden;transition:max-height var(--van-tree-select-animation-duration) ease,opacity var(--van-tree-select-animation-duration) ease}.van-tree-select-expand-enter-from,.van-tree-select-expand-leave-to{max-height:0;opacity:0}.van-tree-select-expand-enter-to,.van-tree-select-expand-leave-from{max-height:1000px;opacity:1}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
--van-tree-select-indent: @tree-select-indent;
|
|
5
5
|
--van-tree-select-arrow-size: @tree-select-arrow-size;
|
|
6
6
|
--van-tree-select-animation-duration: @tree-select-animation-duration;
|
|
7
|
+
--van-tree-select-divider-left: var(--van-padding-md);
|
|
7
8
|
}
|
|
8
9
|
|
|
9
10
|
.van-tree-select {
|
|
@@ -13,6 +14,26 @@
|
|
|
13
14
|
|
|
14
15
|
&__node { overflow: hidden; }
|
|
15
16
|
|
|
17
|
+
// Slot content keeps the same left hierarchy as regular tree nodes. Embedded
|
|
18
|
+
// components retain their own right padding to avoid doubling the edge gap.
|
|
19
|
+
&__leaf {
|
|
20
|
+
position: relative;
|
|
21
|
+
box-sizing: border-box;
|
|
22
|
+
|
|
23
|
+
// Leaf-slot items are wrapped by separate tree nodes, so restore the
|
|
24
|
+
// divider between adjacent leaves just as we do for regular Cell nodes.
|
|
25
|
+
&--divider:not(:last-child)::after {
|
|
26
|
+
position: absolute;
|
|
27
|
+
right: var(--van-padding-md);
|
|
28
|
+
bottom: 0;
|
|
29
|
+
left: var(--van-tree-select-divider-left);
|
|
30
|
+
height: 1px;
|
|
31
|
+
background: var(--van-border-color);
|
|
32
|
+
content: '';
|
|
33
|
+
transform: scaleY(.5);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
16
37
|
&__cell {
|
|
17
38
|
min-height: 44px;
|
|
18
39
|
padding: 10px var(--van-padding-md);
|
|
@@ -22,9 +43,16 @@
|
|
|
22
43
|
}
|
|
23
44
|
|
|
24
45
|
// Each Cell is wrapped by a tree node, so Cell's :last-child rule would
|
|
25
|
-
// otherwise hide every divider.
|
|
46
|
+
// otherwise hide every divider. Branches retain a divider even when they
|
|
47
|
+
// are the only sibling, separating the parent from its indented children.
|
|
26
48
|
&__node:not(:last-child) > &__cell:not(.van-cell--borderless)::after {
|
|
27
49
|
display: block;
|
|
50
|
+
left: var(--van-tree-select-divider-left);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&__cell--branch:not(.van-cell--borderless)::after {
|
|
54
|
+
display: block;
|
|
55
|
+
left: var(--van-tree-select-divider-left);
|
|
28
56
|
}
|
|
29
57
|
|
|
30
58
|
&__arrow {
|
|
@@ -14,6 +14,8 @@ declare const uploaderProps: {
|
|
|
14
14
|
};
|
|
15
15
|
capture: StringConstructor;
|
|
16
16
|
multiple: BooleanConstructor;
|
|
17
|
+
label: StringConstructor;
|
|
18
|
+
required: BooleanConstructor;
|
|
17
19
|
disabled: BooleanConstructor;
|
|
18
20
|
readonly: BooleanConstructor;
|
|
19
21
|
lazyLoad: BooleanConstructor;
|
|
@@ -76,6 +78,8 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
76
78
|
};
|
|
77
79
|
capture: StringConstructor;
|
|
78
80
|
multiple: BooleanConstructor;
|
|
81
|
+
label: StringConstructor;
|
|
82
|
+
required: BooleanConstructor;
|
|
79
83
|
disabled: BooleanConstructor;
|
|
80
84
|
readonly: BooleanConstructor;
|
|
81
85
|
lazyLoad: BooleanConstructor;
|
|
@@ -136,6 +140,8 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
136
140
|
};
|
|
137
141
|
capture: StringConstructor;
|
|
138
142
|
multiple: BooleanConstructor;
|
|
143
|
+
label: StringConstructor;
|
|
144
|
+
required: BooleanConstructor;
|
|
139
145
|
disabled: BooleanConstructor;
|
|
140
146
|
readonly: BooleanConstructor;
|
|
141
147
|
lazyLoad: BooleanConstructor;
|
|
@@ -193,6 +199,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
193
199
|
"onClose-preview"?: ((...args: any[]) => any) | undefined;
|
|
194
200
|
"onClick-preview"?: ((...args: any[]) => any) | undefined;
|
|
195
201
|
}, {
|
|
202
|
+
required: boolean;
|
|
196
203
|
name: string | number;
|
|
197
204
|
accept: string;
|
|
198
205
|
disabled: boolean;
|
package/es/uploader/Uploader.mjs
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
var __async = (__this, __arguments, generator) => {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
var fulfilled = (value) => {
|
|
4
|
+
try {
|
|
5
|
+
step(generator.next(value));
|
|
6
|
+
} catch (e) {
|
|
7
|
+
reject(e);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var rejected = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.throw(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
import { ref, reactive, defineComponent, onBeforeUnmount, mergeProps as _mergeProps, createVNode as _createVNode, createTextVNode as _createTextVNode } from "vue";
|
|
2
22
|
import { pick, extend, toArray, isPromise, truthProp, getSizeStyle, makeArrayProp, makeStringProp, makeNumericProp } from "../utils/index.mjs";
|
|
3
|
-
import { bem, name, isOversize, filterFiles, isImageFile, readFileContent } from "./utils.mjs";
|
|
23
|
+
import { bem, name, isOversize, filterFiles, isImageFile, isVideoFile, readFileContent, createVideoThumbnail } from "./utils.mjs";
|
|
4
24
|
import { useCustomFieldValue } from "@vant/use";
|
|
5
25
|
import { useExpose } from "../composables/use-expose.mjs";
|
|
6
26
|
import { Icon } from "../icon/index.mjs";
|
|
@@ -11,6 +31,8 @@ const uploaderProps = {
|
|
|
11
31
|
accept: makeStringProp("image/*"),
|
|
12
32
|
capture: String,
|
|
13
33
|
multiple: Boolean,
|
|
34
|
+
label: String,
|
|
35
|
+
required: Boolean,
|
|
14
36
|
disabled: Boolean,
|
|
15
37
|
readonly: Boolean,
|
|
16
38
|
lazyLoad: Boolean,
|
|
@@ -80,37 +102,29 @@ var stdin_default = defineComponent({
|
|
|
80
102
|
modelValue,
|
|
81
103
|
resultType
|
|
82
104
|
} = props;
|
|
105
|
+
const createFileItem = (file) => __async(this, null, function* () {
|
|
106
|
+
const content = yield readFileContent(file, resultType);
|
|
107
|
+
const result = {
|
|
108
|
+
file,
|
|
109
|
+
status: "",
|
|
110
|
+
message: ""
|
|
111
|
+
};
|
|
112
|
+
if (content) {
|
|
113
|
+
result.content = content;
|
|
114
|
+
}
|
|
115
|
+
if (isVideoFile(result)) {
|
|
116
|
+
result.videoThumbnail = yield createVideoThumbnail(file);
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
});
|
|
83
120
|
if (Array.isArray(files)) {
|
|
84
121
|
const remainCount = +maxCount - modelValue.length;
|
|
85
122
|
if (files.length > remainCount) {
|
|
86
123
|
files = files.slice(0, remainCount);
|
|
87
124
|
}
|
|
88
|
-
Promise.all(files.map(
|
|
89
|
-
const fileList = files.map((file, index) => {
|
|
90
|
-
const result = {
|
|
91
|
-
file,
|
|
92
|
-
status: "",
|
|
93
|
-
message: ""
|
|
94
|
-
};
|
|
95
|
-
if (contents[index]) {
|
|
96
|
-
result.content = contents[index];
|
|
97
|
-
}
|
|
98
|
-
return result;
|
|
99
|
-
});
|
|
100
|
-
onAfterRead(fileList);
|
|
101
|
-
});
|
|
125
|
+
Promise.all(files.map(createFileItem)).then(onAfterRead);
|
|
102
126
|
} else {
|
|
103
|
-
|
|
104
|
-
const result = {
|
|
105
|
-
file: files,
|
|
106
|
-
status: "",
|
|
107
|
-
message: ""
|
|
108
|
-
};
|
|
109
|
-
if (content) {
|
|
110
|
-
result.content = content;
|
|
111
|
-
}
|
|
112
|
-
onAfterRead(result);
|
|
113
|
-
});
|
|
127
|
+
createFileItem(files).then(onAfterRead);
|
|
114
128
|
}
|
|
115
129
|
};
|
|
116
130
|
const onChange = (event) => {
|
|
@@ -143,7 +157,7 @@ var stdin_default = defineComponent({
|
|
|
143
157
|
let imagePreview;
|
|
144
158
|
const onClosePreview = () => emit("close-preview");
|
|
145
159
|
const previewImage = (item) => {
|
|
146
|
-
if (props.previewFullImage) {
|
|
160
|
+
if (props.previewFullImage && isImageFile(item)) {
|
|
147
161
|
const imageFiles = props.modelValue.filter(isImageFile);
|
|
148
162
|
const images = imageFiles.map((item2) => {
|
|
149
163
|
if (item2.file && !item2.url && item2.status !== "failed") {
|
|
@@ -186,6 +200,15 @@ var stdin_default = defineComponent({
|
|
|
186
200
|
return props.modelValue.map(renderPreviewItem);
|
|
187
201
|
}
|
|
188
202
|
};
|
|
203
|
+
const renderLabel = () => {
|
|
204
|
+
if (!props.label)
|
|
205
|
+
return;
|
|
206
|
+
return _createVNode("div", {
|
|
207
|
+
"class": bem("label")
|
|
208
|
+
}, [props.required && _createVNode("span", {
|
|
209
|
+
"class": bem("required")
|
|
210
|
+
}, [_createTextVNode("*")]), props.label]);
|
|
211
|
+
};
|
|
189
212
|
const onClickUpload = (event) => emit("click-upload", event);
|
|
190
213
|
const renderUpload = () => {
|
|
191
214
|
if (props.modelValue.length >= props.maxCount || !props.showUpload) {
|
|
@@ -234,8 +257,10 @@ var stdin_default = defineComponent({
|
|
|
234
257
|
});
|
|
235
258
|
useCustomFieldValue(() => props.modelValue);
|
|
236
259
|
return () => _createVNode("div", {
|
|
237
|
-
"class": bem(
|
|
238
|
-
|
|
260
|
+
"class": bem({
|
|
261
|
+
required: props.required && !props.label
|
|
262
|
+
})
|
|
263
|
+
}, [renderLabel(), _createVNode("div", {
|
|
239
264
|
"class": bem("wrapper", {
|
|
240
265
|
disabled: props.disabled
|
|
241
266
|
})
|
|
@@ -14,7 +14,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
14
14
|
deletable: BooleanConstructor;
|
|
15
15
|
previewSize: PropType<Numeric | [Numeric, Numeric]>;
|
|
16
16
|
beforeDelete: PropType<Interceptor>;
|
|
17
|
-
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("delete" | "preview")[], "delete" | "preview", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
17
|
+
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("click" | "delete" | "preview")[], "click" | "delete" | "preview", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
18
18
|
name: (NumberConstructor | StringConstructor)[];
|
|
19
19
|
item: {
|
|
20
20
|
type: PropType<UploaderFileListItem>;
|
|
@@ -27,6 +27,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
27
27
|
previewSize: PropType<Numeric | [Numeric, Numeric]>;
|
|
28
28
|
beforeDelete: PropType<Interceptor>;
|
|
29
29
|
}>> & {
|
|
30
|
+
onClick?: ((...args: any[]) => any) | undefined;
|
|
30
31
|
onDelete?: ((...args: any[]) => any) | undefined;
|
|
31
32
|
onPreview?: ((...args: any[]) => any) | undefined;
|
|
32
33
|
}, {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, createVNode as _createVNode } from "vue";
|
|
2
|
-
import { t, bem, isImageFile } from "./utils.mjs";
|
|
2
|
+
import { t, bem, isImageFile, isVideoFile } from "./utils.mjs";
|
|
3
3
|
import { isDef, extend, numericProp, getSizeStyle, callInterceptor, makeRequiredProp } from "../utils/index.mjs";
|
|
4
4
|
import { Icon } from "../icon/index.mjs";
|
|
5
5
|
import { Image } from "../image/index.mjs";
|
|
@@ -15,7 +15,7 @@ var stdin_default = defineComponent({
|
|
|
15
15
|
previewSize: [Number, String, Array],
|
|
16
16
|
beforeDelete: Function
|
|
17
17
|
},
|
|
18
|
-
emits: ["delete", "preview"],
|
|
18
|
+
emits: ["delete", "preview", "click"],
|
|
19
19
|
setup(props, {
|
|
20
20
|
emit,
|
|
21
21
|
slots
|
|
@@ -56,7 +56,11 @@ var stdin_default = defineComponent({
|
|
|
56
56
|
done: () => emit("delete")
|
|
57
57
|
});
|
|
58
58
|
};
|
|
59
|
-
const onPreview = () =>
|
|
59
|
+
const onPreview = () => {
|
|
60
|
+
emit("preview");
|
|
61
|
+
emit("click");
|
|
62
|
+
};
|
|
63
|
+
const onFilePreview = () => emit("click");
|
|
60
64
|
const renderDeleteIcon = () => {
|
|
61
65
|
if (props.deletable && props.item.status !== "uploading") {
|
|
62
66
|
const slot = slots["preview-delete"];
|
|
@@ -94,10 +98,12 @@ var stdin_default = defineComponent({
|
|
|
94
98
|
imageFit,
|
|
95
99
|
previewSize
|
|
96
100
|
} = props;
|
|
97
|
-
|
|
101
|
+
const isImage = isImageFile(item);
|
|
102
|
+
const isVideo = isVideoFile(item);
|
|
103
|
+
if (isImage || isVideo && item.videoThumbnail) {
|
|
98
104
|
return _createVNode(Image, {
|
|
99
105
|
"fit": imageFit,
|
|
100
|
-
"src": item.content || item.url,
|
|
106
|
+
"src": isVideo ? item.videoThumbnail : item.content || item.url,
|
|
101
107
|
"class": bem("preview-image"),
|
|
102
108
|
"width": Array.isArray(previewSize) ? previewSize[0] : previewSize,
|
|
103
109
|
"height": Array.isArray(previewSize) ? previewSize[1] : previewSize,
|
|
@@ -109,7 +115,8 @@ var stdin_default = defineComponent({
|
|
|
109
115
|
}
|
|
110
116
|
return _createVNode("div", {
|
|
111
117
|
"class": bem("file"),
|
|
112
|
-
"style": getSizeStyle(props.previewSize)
|
|
118
|
+
"style": getSizeStyle(props.previewSize),
|
|
119
|
+
"onClick": onFilePreview
|
|
113
120
|
}, [_createVNode(Icon, {
|
|
114
121
|
"class": bem("file-icon"),
|
|
115
122
|
"name": "description"
|
package/es/uploader/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--van-uploader-size: 72px;--van-uploader-border-radius: 8px;--van-uploader-border: 1px solid var(--van-grey-50);--van-uploader-icon-size: 24px;--van-uploader-icon-color: var(--van-gray-4);--van-uploader-text-color: var(--van-text-color-2);--van-uploader-text-font-size: var(--van-font-size-sm);--van-uploader-upload-background-color: var(--van-gray-1);--van-uploader-upload-active-color: var(--van-active-color);--van-uploader-delete-color: var(--van-white);--van-uploader-delete-icon-size: 14px;--van-uploader-delete-background-color: rgba(0, 0, 0, .7);--van-uploader-file-background-color: var(--van-background-color);--van-uploader-file-icon-size: 20px;--van-uploader-file-icon-color: var(--van-gray-7);--van-uploader-file-name-padding: 0 var(--van-padding-base);--van-uploader-file-name-margin-top: var(--van-padding-xs);--van-uploader-file-name-font-size: var(--van-font-size-sm);--van-uploader-file-name-text-color: var(--van-gray-7);--van-uploader-mask-text-color: var(--van-white);--van-uploader-mask-background-color: rgba(50, 50, 51, .88);--van-uploader-mask-icon-size: 22px;--van-uploader-mask-message-font-size: var(--van-font-size-sm);--van-uploader-mask-message-line-height: var(--van-line-height-xs);--van-uploader-loading-icon-size: 22px;--van-uploader-loading-icon-color: var(--van-white);--van-uploader-disabled-opacity: var(--van-disabled-opacity)}.van-uploader{position:relative;display:inline-block}.van-uploader__wrapper{display:flex;flex-wrap:wrap;gap:var(--van-padding-xs)}.van-uploader__wrapper--disabled{opacity:var(--van-uploader-disabled-opacity)}.van-uploader__input{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;cursor:pointer;opacity:0}.van-uploader__input-wrapper{position:relative}.van-uploader__input:disabled{cursor:not-allowed}.van-uploader__upload{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:var(--van-uploader-size);height:var(--van-uploader-size);background:var(--van-uploader-upload-background-color);border-radius:var(--van-uploader-border-radius);border:var(--van-uploader-border)}.van-uploader__upload:active{background-color:var(--van-uploader-upload-active-color)}.van-uploader__upload--readonly:active{background-color:var(--van-uploader-upload-background-color)}.van-uploader__upload-icon{color:var(--van-uploader-icon-color);font-size:var(--van-uploader-icon-size)}.van-uploader__upload-text{margin-top:var(--van-padding-xs);color:var(--van-uploader-text-color);font-size:var(--van-uploader-text-font-size)}.van-uploader__preview{position:relative;cursor:pointer;border-radius:var(--van-uploader-border-radius);overflow:hidden}.van-uploader__preview-image{display:block;width:var(--van-uploader-size);height:var(--van-uploader-size);border-radius:var(--van-uploader-border-radius);border:var(--van-uploader-border);overflow:hidden;box-sizing:border-box}.van-uploader__preview-delete{position:absolute;top:0;right:0}.van-uploader__preview-delete--shadow{width:var(--van-uploader-delete-icon-size);height:var(--van-uploader-delete-icon-size);background:var(--van-uploader-delete-background-color);border-radius:0 0 0 12px}.van-uploader__preview-delete-icon{position:absolute;top:0;right:0;color:var(--van-uploader-delete-color);font-size:var(--van-uploader-delete-icon-size);transform:scale(.7) translate(10%,-10%)}.van-uploader__preview-cover{position:absolute;top:0;right:0;bottom:0;left:0}.van-uploader__mask{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--van-uploader-mask-text-color);background:var(--van-uploader-mask-background-color);border-radius:var(--van-uploader-border-radius);border:var(--van-uploader-border)}.van-uploader__mask-icon{font-size:var(--van-uploader-mask-icon-size)}.van-uploader__mask-message{margin-top:6px;padding:0 var(--van-padding-base);font-size:var(--van-uploader-mask-message-font-size);line-height:var(--van-uploader-mask-message-line-height)}.van-uploader__loading{width:var(--van-uploader-loading-icon-size);height:var(--van-uploader-loading-icon-size);color:var(--van-uploader-loading-icon-color)}.van-uploader__file{display:flex;flex-direction:column;align-items:center;justify-content:center;width:var(--van-uploader-size);height:var(--van-uploader-size);background:var(--van-uploader-file-background-color)}.van-uploader__file-icon{color:var(--van-uploader-file-icon-color);font-size:var(--van-uploader-file-icon-size)}.van-uploader__file-name{box-sizing:border-box;width:100%;margin-top:var(--van-uploader-file-name-margin-top);padding:var(--van-uploader-file-name-padding);color:var(--van-uploader-file-name-text-color);font-size:var(--van-uploader-file-name-font-size);text-align:center}
|
|
1
|
+
:root{--van-uploader-size: 72px;--van-uploader-border-radius: 8px;--van-uploader-border: 1px solid var(--van-grey-50);--van-uploader-icon-size: 24px;--van-uploader-icon-color: var(--van-gray-4);--van-uploader-text-color: var(--van-text-color-2);--van-uploader-text-font-size: var(--van-font-size-sm);--van-uploader-upload-background-color: var(--van-gray-1);--van-uploader-upload-active-color: var(--van-active-color);--van-uploader-delete-color: var(--van-white);--van-uploader-delete-icon-size: 14px;--van-uploader-delete-background-color: rgba(0, 0, 0, .7);--van-uploader-file-background-color: var(--van-background-color);--van-uploader-file-icon-size: 20px;--van-uploader-file-icon-color: var(--van-gray-7);--van-uploader-file-name-padding: 0 var(--van-padding-base);--van-uploader-file-name-margin-top: var(--van-padding-xs);--van-uploader-file-name-font-size: var(--van-font-size-sm);--van-uploader-file-name-text-color: var(--van-gray-7);--van-uploader-mask-text-color: var(--van-white);--van-uploader-mask-background-color: rgba(50, 50, 51, .88);--van-uploader-mask-icon-size: 22px;--van-uploader-mask-message-font-size: var(--van-font-size-sm);--van-uploader-mask-message-line-height: var(--van-line-height-xs);--van-uploader-loading-icon-size: 22px;--van-uploader-loading-icon-color: var(--van-white);--van-uploader-disabled-opacity: var(--van-disabled-opacity);--van-uploader-required-color: var(--van-danger-color);--van-uploader-label-color: var(--van-text-color);--van-uploader-label-font-size: var(--van-font-size-md);--van-uploader-label-line-height: var(--van-line-height-md);--van-uploader-label-margin-bottom: var(--van-padding-sm)}.van-uploader{position:relative;display:inline-block}.van-uploader--required:before{position:absolute;top:0;left:calc(-1 * var(--van-padding-sm));color:var(--van-uploader-required-color);font-size:var(--van-font-size-md);line-height:var(--van-line-height-md);content:"*"}.van-uploader__label{position:relative;margin-bottom:var(--van-uploader-label-margin-bottom);color:var(--van-uploader-label-color);font-size:var(--van-uploader-label-font-size);line-height:var(--van-uploader-label-line-height)}.van-uploader__required{position:absolute;top:0;left:calc(-1 * (var(--van-padding-md) - var(--van-padding-xs)));color:var(--van-uploader-required-color)}.van-uploader__wrapper{display:flex;flex-wrap:wrap;gap:var(--van-padding-xs)}.van-uploader__wrapper--disabled{opacity:var(--van-uploader-disabled-opacity)}.van-uploader__input{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;cursor:pointer;opacity:0}.van-uploader__input-wrapper{position:relative}.van-uploader__input:disabled{cursor:not-allowed}.van-uploader__upload{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:var(--van-uploader-size);height:var(--van-uploader-size);background:var(--van-uploader-upload-background-color);border-radius:var(--van-uploader-border-radius);border:var(--van-uploader-border)}.van-uploader__upload:active{background-color:var(--van-uploader-upload-active-color)}.van-uploader__upload--readonly:active{background-color:var(--van-uploader-upload-background-color)}.van-uploader__upload-icon{color:var(--van-uploader-icon-color);font-size:var(--van-uploader-icon-size)}.van-uploader__upload-text{margin-top:var(--van-padding-xs);color:var(--van-uploader-text-color);font-size:var(--van-uploader-text-font-size)}.van-uploader__preview{position:relative;cursor:pointer;border-radius:var(--van-uploader-border-radius);overflow:hidden}.van-uploader__preview-image{display:block;width:var(--van-uploader-size);height:var(--van-uploader-size);border-radius:var(--van-uploader-border-radius);border:var(--van-uploader-border);overflow:hidden;box-sizing:border-box}.van-uploader__preview-delete{position:absolute;top:0;right:0}.van-uploader__preview-delete--shadow{width:var(--van-uploader-delete-icon-size);height:var(--van-uploader-delete-icon-size);background:var(--van-uploader-delete-background-color);border-radius:0 0 0 12px}.van-uploader__preview-delete-icon{position:absolute;top:0;right:0;color:var(--van-uploader-delete-color);font-size:var(--van-uploader-delete-icon-size);transform:scale(.7) translate(10%,-10%)}.van-uploader__preview-cover{position:absolute;top:0;right:0;bottom:0;left:0}.van-uploader__mask{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--van-uploader-mask-text-color);background:var(--van-uploader-mask-background-color);border-radius:var(--van-uploader-border-radius);border:var(--van-uploader-border)}.van-uploader__mask-icon{font-size:var(--van-uploader-mask-icon-size)}.van-uploader__mask-message{margin-top:6px;padding:0 var(--van-padding-base);font-size:var(--van-uploader-mask-message-font-size);line-height:var(--van-uploader-mask-message-line-height)}.van-uploader__loading{width:var(--van-uploader-loading-icon-size);height:var(--van-uploader-loading-icon-size);color:var(--van-uploader-loading-icon-color)}.van-uploader__file{display:flex;flex-direction:column;align-items:center;justify-content:center;width:var(--van-uploader-size);height:var(--van-uploader-size);background:var(--van-uploader-file-background-color)}.van-uploader__file-icon{color:var(--van-uploader-file-icon-color);font-size:var(--van-uploader-file-icon-size)}.van-uploader__file-name{box-sizing:border-box;width:100%;margin-top:var(--van-uploader-file-name-margin-top);padding:var(--van-uploader-file-name-padding);color:var(--van-uploader-file-name-text-color);font-size:var(--van-uploader-file-name-font-size);text-align:center}
|
package/es/uploader/index.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export declare const Uploader: import("../utils").WithInstall<import("vue").Defi
|
|
|
10
10
|
};
|
|
11
11
|
capture: StringConstructor;
|
|
12
12
|
multiple: BooleanConstructor;
|
|
13
|
+
label: StringConstructor;
|
|
14
|
+
required: BooleanConstructor;
|
|
13
15
|
disabled: BooleanConstructor;
|
|
14
16
|
readonly: BooleanConstructor;
|
|
15
17
|
lazyLoad: BooleanConstructor;
|
|
@@ -70,6 +72,8 @@ export declare const Uploader: import("../utils").WithInstall<import("vue").Defi
|
|
|
70
72
|
};
|
|
71
73
|
capture: StringConstructor;
|
|
72
74
|
multiple: BooleanConstructor;
|
|
75
|
+
label: StringConstructor;
|
|
76
|
+
required: BooleanConstructor;
|
|
73
77
|
disabled: BooleanConstructor;
|
|
74
78
|
readonly: BooleanConstructor;
|
|
75
79
|
lazyLoad: BooleanConstructor;
|
|
@@ -127,6 +131,7 @@ export declare const Uploader: import("../utils").WithInstall<import("vue").Defi
|
|
|
127
131
|
"onClose-preview"?: ((...args: any[]) => any) | undefined;
|
|
128
132
|
"onClick-preview"?: ((...args: any[]) => any) | undefined;
|
|
129
133
|
}, {
|
|
134
|
+
required: boolean;
|
|
130
135
|
name: string | number;
|
|
131
136
|
accept: string;
|
|
132
137
|
disabled: boolean;
|
package/es/uploader/index.less
CHANGED
|
@@ -28,12 +28,42 @@
|
|
|
28
28
|
--van-uploader-loading-icon-size: @uploader-loading-icon-size;
|
|
29
29
|
--van-uploader-loading-icon-color: @uploader-loading-icon-color;
|
|
30
30
|
--van-uploader-disabled-opacity: @uploader-disabled-opacity;
|
|
31
|
+
--van-uploader-required-color: @uploader-required-color;
|
|
32
|
+
--van-uploader-label-color: @uploader-label-color;
|
|
33
|
+
--van-uploader-label-font-size: @uploader-label-font-size;
|
|
34
|
+
--van-uploader-label-line-height: @uploader-label-line-height;
|
|
35
|
+
--van-uploader-label-margin-bottom: @uploader-label-margin-bottom;
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
.van-uploader {
|
|
34
39
|
position: relative;
|
|
35
40
|
display: inline-block;
|
|
36
41
|
|
|
42
|
+
&--required::before {
|
|
43
|
+
position: absolute;
|
|
44
|
+
top: 0;
|
|
45
|
+
left: calc(-1 * var(--van-padding-sm));
|
|
46
|
+
color: var(--van-uploader-required-color);
|
|
47
|
+
font-size: var(--van-font-size-md);
|
|
48
|
+
line-height: var(--van-line-height-md);
|
|
49
|
+
content: '*';
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&__label {
|
|
53
|
+
position: relative;
|
|
54
|
+
margin-bottom: var(--van-uploader-label-margin-bottom);
|
|
55
|
+
color: var(--van-uploader-label-color);
|
|
56
|
+
font-size: var(--van-uploader-label-font-size);
|
|
57
|
+
line-height: var(--van-uploader-label-line-height);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
&__required {
|
|
61
|
+
position: absolute;
|
|
62
|
+
top: 0;
|
|
63
|
+
left: calc(-1 * (var(--van-padding-md) - var(--van-padding-xs)));
|
|
64
|
+
color: var(--van-uploader-required-color);
|
|
65
|
+
}
|
|
66
|
+
|
|
37
67
|
&__wrapper {
|
|
38
68
|
display: flex;
|
|
39
69
|
flex-wrap: wrap;
|
package/es/uploader/types.d.ts
CHANGED
package/es/uploader/utils.d.ts
CHANGED
|
@@ -9,3 +9,5 @@ export declare function filterFiles(items: UploaderFileListItem[], maxSize: Uplo
|
|
|
9
9
|
};
|
|
10
10
|
export declare const isImageUrl: (url: string) => boolean;
|
|
11
11
|
export declare function isImageFile(item: UploaderFileListItem): boolean;
|
|
12
|
+
export declare function isVideoFile(item: UploaderFileListItem): boolean;
|
|
13
|
+
export declare function createVideoThumbnail(file: File): Promise<string | undefined>;
|
package/es/uploader/utils.mjs
CHANGED
|
@@ -41,6 +41,7 @@ function filterFiles(items, maxSize) {
|
|
|
41
41
|
return { valid, invalid };
|
|
42
42
|
}
|
|
43
43
|
const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i;
|
|
44
|
+
const VIDEO_REGEXP = /\.(mp4|webm|ogg|mov)(?:$|\?)/i;
|
|
44
45
|
const isImageUrl = (url) => IMAGE_REGEXP.test(url);
|
|
45
46
|
function isImageFile(item) {
|
|
46
47
|
if (item.isImage) {
|
|
@@ -57,12 +58,85 @@ function isImageFile(item) {
|
|
|
57
58
|
}
|
|
58
59
|
return false;
|
|
59
60
|
}
|
|
61
|
+
function isVideoFile(item) {
|
|
62
|
+
var _a;
|
|
63
|
+
if ((_a = item.file) == null ? void 0 : _a.type) {
|
|
64
|
+
return item.file.type.indexOf("video/") === 0;
|
|
65
|
+
}
|
|
66
|
+
if (item.url) {
|
|
67
|
+
return VIDEO_REGEXP.test(item.url);
|
|
68
|
+
}
|
|
69
|
+
return typeof item.content === "string" && item.content.indexOf("data:video") === 0;
|
|
70
|
+
}
|
|
71
|
+
function createVideoThumbnail(file) {
|
|
72
|
+
if (typeof document === "undefined" || typeof URL === "undefined" || typeof URL.createObjectURL !== "function") {
|
|
73
|
+
return Promise.resolve(void 0);
|
|
74
|
+
}
|
|
75
|
+
return new Promise((resolve) => {
|
|
76
|
+
const video = document.createElement("video");
|
|
77
|
+
const objectUrl = URL.createObjectURL(file);
|
|
78
|
+
let settled = false;
|
|
79
|
+
let timeout;
|
|
80
|
+
const cleanup = () => {
|
|
81
|
+
if (timeout !== void 0) {
|
|
82
|
+
window.clearTimeout(timeout);
|
|
83
|
+
}
|
|
84
|
+
URL.revokeObjectURL(objectUrl);
|
|
85
|
+
video.removeAttribute("src");
|
|
86
|
+
try {
|
|
87
|
+
video.load();
|
|
88
|
+
} catch (e) {
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const done = (thumbnail) => {
|
|
92
|
+
if (settled)
|
|
93
|
+
return;
|
|
94
|
+
settled = true;
|
|
95
|
+
cleanup();
|
|
96
|
+
resolve(thumbnail);
|
|
97
|
+
};
|
|
98
|
+
const captureFrame = () => {
|
|
99
|
+
if (!video.videoWidth || !video.videoHeight) {
|
|
100
|
+
done();
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const canvas = document.createElement("canvas");
|
|
104
|
+
canvas.width = video.videoWidth;
|
|
105
|
+
canvas.height = video.videoHeight;
|
|
106
|
+
const context = canvas.getContext("2d");
|
|
107
|
+
if (!context) {
|
|
108
|
+
done();
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
context.drawImage(video, 0, 0, canvas.width, canvas.height);
|
|
112
|
+
done(canvas.toDataURL("image/jpeg", 0.8));
|
|
113
|
+
};
|
|
114
|
+
video.muted = true;
|
|
115
|
+
video.playsInline = true;
|
|
116
|
+
video.preload = "auto";
|
|
117
|
+
video.onloadedmetadata = () => {
|
|
118
|
+
const duration = Number.isFinite(video.duration) ? video.duration : 0.1;
|
|
119
|
+
const frameTime = Math.min(0.1, Math.max(duration - 0.01, 0));
|
|
120
|
+
if (frameTime) {
|
|
121
|
+
video.currentTime = frameTime;
|
|
122
|
+
} else {
|
|
123
|
+
captureFrame();
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
video.onseeked = captureFrame;
|
|
127
|
+
video.onerror = () => done();
|
|
128
|
+
video.src = objectUrl;
|
|
129
|
+
timeout = window.setTimeout(() => done(), 3e3);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
60
132
|
export {
|
|
61
133
|
bem,
|
|
134
|
+
createVideoThumbnail,
|
|
62
135
|
filterFiles,
|
|
63
136
|
isImageFile,
|
|
64
137
|
isImageUrl,
|
|
65
138
|
isOversize,
|
|
139
|
+
isVideoFile,
|
|
66
140
|
name,
|
|
67
141
|
readFileContent,
|
|
68
142
|
t
|
package/es/uploader/var.less
CHANGED
|
@@ -27,3 +27,8 @@
|
|
|
27
27
|
@uploader-loading-icon-size: 22px;
|
|
28
28
|
@uploader-loading-icon-color: var(--van-white);
|
|
29
29
|
@uploader-disabled-opacity: var(--van-disabled-opacity);
|
|
30
|
+
@uploader-required-color: var(--van-danger-color);
|
|
31
|
+
@uploader-label-color: var(--van-text-color);
|
|
32
|
+
@uploader-label-font-size: var(--van-font-size-md);
|
|
33
|
+
@uploader-label-line-height: var(--van-line-height-md);
|
|
34
|
+
@uploader-label-margin-bottom: var(--van-padding-sm);
|