zartui 3.1.89 → 3.1.90

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/es/index.d.ts +2 -1
  2. package/es/index.mjs +4 -1
  3. package/es/media-picker/MediaPicker.d.ts +1 -14
  4. package/es/media-picker/MediaPicker.mjs +8 -78
  5. package/es/media-picker/index.css +1 -1
  6. package/es/media-picker/index.d.ts +1 -10
  7. package/es/media-picker/type.d.ts +0 -10
  8. package/es/pagination/Pagination.mjs +3 -1
  9. package/es/pagination/index.css +1 -1
  10. package/es/photo-picker/PhotoPicker.d.ts +202 -0
  11. package/es/photo-picker/PhotoPicker.mjs +510 -0
  12. package/es/photo-picker/index.css +1 -0
  13. package/es/photo-picker/index.d.ts +145 -0
  14. package/es/photo-picker/index.mjs +10 -0
  15. package/es/photo-picker/style/index.d.ts +1 -0
  16. package/es/photo-picker/style/index.mjs +15 -0
  17. package/lib/index.css +1 -1
  18. package/lib/index.d.ts +2 -1
  19. package/lib/index.js +4 -1
  20. package/lib/media-picker/MediaPicker.d.ts +1 -14
  21. package/lib/media-picker/MediaPicker.js +7 -77
  22. package/lib/media-picker/index.css +1 -1
  23. package/lib/media-picker/index.d.ts +1 -10
  24. package/lib/media-picker/type.d.ts +0 -10
  25. package/lib/pagination/Pagination.js +3 -1
  26. package/lib/pagination/index.css +1 -1
  27. package/lib/photo-picker/PhotoPicker.d.ts +202 -0
  28. package/lib/photo-picker/PhotoPicker.js +539 -0
  29. package/lib/photo-picker/index.css +1 -0
  30. package/lib/photo-picker/index.d.ts +145 -0
  31. package/lib/photo-picker/index.js +39 -0
  32. package/lib/photo-picker/style/index.d.ts +1 -0
  33. package/lib/photo-picker/style/index.js +15 -0
  34. package/lib/web-types.json +1 -1
  35. package/lib/zartui.cjs.js +1394 -966
  36. package/lib/zartui.es.js +1394 -966
  37. package/lib/zartui.js +1400 -972
  38. package/lib/zartui.min.js +2 -2
  39. package/package.json +3 -3
package/lib/index.d.ts CHANGED
@@ -45,6 +45,7 @@ export * from "./number-keyboard";
45
45
  export * from "./overlay";
46
46
  export * from "./pagination";
47
47
  export * from "./password-input";
48
+ export * from "./photo-picker";
48
49
  export * from "./picker";
49
50
  export * from "./popover";
50
51
  export * from "./popup";
@@ -85,4 +86,4 @@ declare namespace _default {
85
86
  }
86
87
  export default _default;
87
88
  export function install(app: any): void;
88
- export const version: "3.1.89";
89
+ export const version: "3.1.90";
package/lib/index.js CHANGED
@@ -69,6 +69,7 @@ var import_number_keyboard = require("./number-keyboard");
69
69
  var import_overlay = require("./overlay");
70
70
  var import_pagination = require("./pagination");
71
71
  var import_password_input = require("./password-input");
72
+ var import_photo_picker = require("./photo-picker");
72
73
  var import_picker = require("./picker");
73
74
  var import_popover = require("./popover");
74
75
  var import_popup = require("./popup");
@@ -150,6 +151,7 @@ __reExport(stdin_exports, require("./number-keyboard"), module.exports);
150
151
  __reExport(stdin_exports, require("./overlay"), module.exports);
151
152
  __reExport(stdin_exports, require("./pagination"), module.exports);
152
153
  __reExport(stdin_exports, require("./password-input"), module.exports);
154
+ __reExport(stdin_exports, require("./photo-picker"), module.exports);
153
155
  __reExport(stdin_exports, require("./picker"), module.exports);
154
156
  __reExport(stdin_exports, require("./popover"), module.exports);
155
157
  __reExport(stdin_exports, require("./popup"), module.exports);
@@ -184,7 +186,7 @@ __reExport(stdin_exports, require("./timeline"), module.exports);
184
186
  __reExport(stdin_exports, require("./toast"), module.exports);
185
187
  __reExport(stdin_exports, require("./uploader"), module.exports);
186
188
  __reExport(stdin_exports, require("./video"), module.exports);
187
- const version = "3.1.89";
189
+ const version = "3.1.90";
188
190
  function install(app) {
189
191
  const components = [
190
192
  import_action_sheet.ActionSheet,
@@ -233,6 +235,7 @@ function install(app) {
233
235
  import_overlay.Overlay,
234
236
  import_pagination.Pagination,
235
237
  import_password_input.PasswordInput,
238
+ import_photo_picker.PhotoPicker,
236
239
  import_picker.Picker,
237
240
  import_popover.Popover,
238
241
  import_popup.Popup,
@@ -1,12 +1,8 @@
1
1
  import { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue';
2
- import type { Media, MediaAddType, MediaAfterRead, MediaBeforeDelete, MediaBeforeRead, MediaPick, MediaPickerVariant, MediaPreview, MediaSizeType, MediaType } from './type';
2
+ import type { Media, MediaAddType, MediaAfterRead, MediaBeforeDelete, MediaBeforeRead, MediaPick, MediaPreview, MediaSizeType, MediaType } from './type';
3
3
  import { MediaPlayerProps } from '../media-player';
4
4
  import { DownloadActionParams } from '../image-preview/ImagePreview';
5
5
  declare const mediaPickerProps: {
6
- variant: {
7
- type: PropType<MediaPickerVariant>;
8
- default: MediaPickerVariant;
9
- };
10
6
  sortable: {
11
7
  type: BooleanConstructor;
12
8
  default: boolean;
@@ -100,10 +96,6 @@ export type MediaPickerInstance = ComponentPublicInstance<{
100
96
  mediaPickAction: (mediaType: MediaType, mediaAddType: MediaAddType) => void;
101
97
  }>;
102
98
  declare const _default: import("vue").DefineComponent<ExtractPropTypes<{
103
- variant: {
104
- type: PropType<MediaPickerVariant>;
105
- default: MediaPickerVariant;
106
- };
107
99
  sortable: {
108
100
  type: BooleanConstructor;
109
101
  default: boolean;
@@ -192,10 +184,6 @@ declare const _default: import("vue").DefineComponent<ExtractPropTypes<{
192
184
  };
193
185
  mediaPlayerProps: PropType<Partial<MediaPlayerProps>>;
194
186
  }>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("delete" | "processing" | "update:mediaList")[], "delete" | "processing" | "update:mediaList", import("vue").PublicProps, Readonly<ExtractPropTypes<{
195
- variant: {
196
- type: PropType<MediaPickerVariant>;
197
- default: MediaPickerVariant;
198
- };
199
187
  sortable: {
200
188
  type: BooleanConstructor;
201
189
  default: boolean;
@@ -292,7 +280,6 @@ declare const _default: import("vue").DefineComponent<ExtractPropTypes<{
292
280
  disabled: boolean;
293
281
  showTitle: boolean;
294
282
  showDownload: boolean;
295
- variant: MediaPickerVariant;
296
283
  sortable: boolean;
297
284
  useFileNameAsLabel: boolean;
298
285
  mediaList: Media[];
@@ -92,7 +92,6 @@ const COMPATIBLE_TYPE_MAPPINGS = {
92
92
  "m4a": /* @__PURE__ */ new Set(["mp4", "mp4a", "x-m4a"])
93
93
  };
94
94
  const mediaPickerProps = {
95
- variant: (0, import_utils.makeStringProp)("default"),
96
95
  sortable: {
97
96
  type: Boolean,
98
97
  default: false
@@ -181,10 +180,7 @@ var stdin_default = (0, import_vue2.defineComponent)({
181
180
  const gridRef = (0, import_vue2.ref)();
182
181
  const mediaListPlaceholder = (0, import_vue2.ref)([]);
183
182
  const sort = (0, import_vue2.ref)();
184
- const isAttachmentVariant = (0, import_vue2.computed)(() => props.variant === "attachment");
185
- const attachmentMediaList = (0, import_vue2.computed)(() => props.mediaList.filter((media) => media.type === "photo"));
186
- const attachmentMediaListPlaceholder = (0, import_vue2.computed)(() => mediaListPlaceholder.value.filter((media) => media.type === "photo"));
187
- const shouldIsolateSortableTouch = () => !isAttachmentVariant.value && props.sortable && props.mediaList.length > 0;
183
+ const shouldIsolateSortableTouch = () => props.sortable && props.mediaList.length > 0;
188
184
  const stopSortableTouchStartPropagation = (event) => {
189
185
  if (!shouldIsolateSortableTouch()) {
190
186
  return;
@@ -200,7 +196,7 @@ var stdin_default = (0, import_vue2.defineComponent)({
200
196
  };
201
197
  const initSortable = () => __async(this, null, function* () {
202
198
  var _a;
203
- if (sort.value || isAttachmentVariant.value || !props.sortable || !props.mediaList.length)
199
+ if (sort.value || !props.sortable || !props.mediaList.length)
204
200
  return;
205
201
  yield (0, import_vue2.nextTick)();
206
202
  const gridEl = (_a = gridRef.value) == null ? void 0 : _a.$el;
@@ -780,40 +776,6 @@ var stdin_default = (0, import_vue2.defineComponent)({
780
776
  }
781
777
  return buttons;
782
778
  };
783
- const renderAttachmentAdd = () => {
784
- const canTakePhoto = props.allowTakePhoto;
785
- const canPickPhoto = props.allowPickPhoto;
786
- if (!canTakePhoto && !canPickPhoto) {
787
- return;
788
- }
789
- if (props.allowTakePhoto && props.allowPickPhoto) {
790
- return (0, import_vue.createVNode)("button", {
791
- "type": "button",
792
- "class": bem("attachment-add"),
793
- "disabled": props.disabled,
794
- "onClick": () => {
795
- if (props.disabled) {
796
- return;
797
- }
798
- actionVisible.value = true;
799
- photoOptionsVisible.value = true;
800
- videoOptionsVisible.value = false;
801
- audioOptionsVisible.value = false;
802
- }
803
- }, [(0, import_vue.createVNode)("span", {
804
- "class": bem("attachment-add-icon")
805
- }, [(0, import_vue.createTextVNode)("+")])]);
806
- }
807
- const addType = canTakePhoto ? "take" : "pick";
808
- return (0, import_vue.createVNode)("button", {
809
- "type": "button",
810
- "class": bem("attachment-add"),
811
- "disabled": props.disabled,
812
- "onClick": () => mediaPickAction("photo", addType)
813
- }, [(0, import_vue.createVNode)("span", {
814
- "class": bem("attachment-add-icon")
815
- }, [(0, import_vue.createTextVNode)("+")])]);
816
- };
817
779
  const genThumbnailMask = (media) => {
818
780
  const {
819
781
  status,
@@ -980,36 +942,6 @@ var stdin_default = (0, import_vue2.defineComponent)({
980
942
  default: () => [renderMediaThumbnail(media), renderMediaLabel(media), genThumbnailMask(media), deleteIcon]
981
943
  });
982
944
  });
983
- const renderAttachmentDelete = (media, index) => {
984
- if (!media.deletable || media.status === "uploading") {
985
- return;
986
- }
987
- return (0, import_vue.createVNode)("button", {
988
- "type": "button",
989
- "class": bem("attachment-delete"),
990
- "onClick": (event) => {
991
- event.stopPropagation();
992
- onDelete(media, index);
993
- }
994
- }, [(0, import_vue.createTextVNode)("\xD7")]);
995
- };
996
- const renderAttachmentMedia = (media) => {
997
- const index = props.mediaList.indexOf(media);
998
- return (0, import_vue.createVNode)("div", {
999
- "key": media.uniqueCode,
1000
- "class": bem("attachment-item"),
1001
- "onClick": () => previewMedia(index)
1002
- }, [renderMediaThumbnail(media), renderMediaLabel(media), genThumbnailMask(media), renderAttachmentDelete(media, index)]);
1003
- };
1004
- const renderAttachmentPlaceholder = (media) => (0, import_vue.createVNode)("div", {
1005
- "key": media.uniqueCode || media.fileName,
1006
- "class": bem("attachment-item")
1007
- }, [renderMediaThumbnail(media), renderMediaLabel(media), genThumbnailMask(media)]);
1008
- const renderAttachment = () => (0, import_vue.createVNode)("div", {
1009
- "class": bem("attachment")
1010
- }, [(0, import_vue.createVNode)("div", {
1011
- "class": bem("attachment-track")
1012
- }, [attachmentMediaList.value.map(renderAttachmentMedia), attachmentMediaListPlaceholder.value.map(renderAttachmentPlaceholder), renderAttachmentAdd()])]);
1013
945
  const selectAction = (action) => {
1014
946
  actionVisible.value = false;
1015
947
  photoOptionsVisible.value = false;
@@ -1017,8 +949,8 @@ var stdin_default = (0, import_vue2.defineComponent)({
1017
949
  audioOptionsVisible.value = false;
1018
950
  action.func && action.func();
1019
951
  };
1020
- (0, import_vue2.watch)(() => [props.sortable, props.mediaList.length, props.variant], (_0) => __async(this, [_0], function* ([sortable, mediaCount]) {
1021
- if (isAttachmentVariant.value || !sortable || !mediaCount) {
952
+ (0, import_vue2.watch)(() => [props.sortable, props.mediaList.length], (_0) => __async(this, [_0], function* ([sortable, mediaCount]) {
953
+ if (!sortable || !mediaCount) {
1022
954
  destroySortable();
1023
955
  return;
1024
956
  }
@@ -1042,9 +974,7 @@ var stdin_default = (0, import_vue2.defineComponent)({
1042
974
  }, [props.title]);
1043
975
  const showButtons = props.allowTakePhoto || props.allowPickPhoto || props.allowTakeVideo || props.allowPickVideo || props.allowTakeAudio || props.allowPickAudio || props.allowPickFile;
1044
976
  return (0, import_vue.createVNode)("div", {
1045
- "class": bem({
1046
- attachment: isAttachmentVariant.value
1047
- })
977
+ "class": bem()
1048
978
  }, [title, hiddenInput(), (0, import_vue.createVNode)(import_media_player.default, (0, import_vue.mergeProps)({
1049
979
  "show": mediaPlayerVisible.value,
1050
980
  "onUpdate:show": ($event) => mediaPlayerVisible.value = $event,
@@ -1060,7 +990,7 @@ var stdin_default = (0, import_vue2.defineComponent)({
1060
990
  "teleport": "body",
1061
991
  "close-on-click-action": true,
1062
992
  "onSelect": selectAction
1063
- }, null), isAttachmentVariant.value ? renderAttachment() : (0, import_vue.createVNode)(import_vue.Fragment, null, [(0, import_vue.withDirectives)((0, import_vue.createVNode)("div", {
993
+ }, null), (0, import_vue.withDirectives)((0, import_vue.createVNode)("div", {
1064
994
  "class": bem("line")
1065
995
  }, [renderButtons(), slots["extend"] ? slots.extend() : ""]), [[import_vue.vShow, showButtons]]), (0, import_vue.withDirectives)((0, import_vue.createVNode)(import_grid.default, {
1066
996
  "ref": gridRef,
@@ -1080,7 +1010,7 @@ var stdin_default = (0, import_vue2.defineComponent)({
1080
1010
  "class": bem("grid")
1081
1011
  }, {
1082
1012
  default: () => [renderMediaListPlaceholder()]
1083
- }), [[import_vue.vShow, mediaListPlaceholder.value.length]])])]);
1013
+ }), [[import_vue.vShow, mediaListPlaceholder.value.length]])]);
1084
1014
  };
1085
1015
  }
1086
1016
  });
@@ -1 +1 @@
1
- :root{--zt-media-picker-image-color: var(--zt-text-color);--zt-media-picker-button-background: linear-gradient(135deg, #e6ebf0 0%, #fff 100%, #fff 100%);--zt-media-picker-button-box-shadow: -4px -4px 8px 0 var(--zt-white), 4px 4px 8px 0 var(--zt-gray-a1);--zt-media-picker-button-border: 0;--zt-media-picker-button-active-border: 1px solid rgba(255, 255, 255, .75);--zt-media-picker-button-active-box-shadow: inset 4px 4px 8px 0 var(--zt-gray-a2);--zt-media-picker-line-height: 46px;--zt-media-picker-box-size: 48px;--zt-media-picker-icon-size: 32px;--zt-media-picker-title-height: 44px;--zt-media-picker-thumbnail-label-background: rgba(var(--zt-gray-rgb), .5);--zt-media-picker-thumbnail-label-color: var(--zt-white);--zt-media-picker-attachment-padding: 12px;--zt-media-picker-attachment-gap: 16px;--zt-media-picker-attachment-item-size: 140px;--zt-media-picker-attachment-radius: 10px;--zt-media-picker-attachment-add-border: 1px dashed #d7deee;--zt-media-picker-attachment-add-color: #9aa8c0;--zt-media-picker-attachment-add-background: #f8f9fc;--zt-media-picker-attachment-delete-background: var(--zt-primary-color);--zt-media-picker-attachment-delete-color: var(--zt-white)}:root[zt-theme-size=large]{--zt-media-picker-line-height: 52px;--zt-media-picker-box-size: 54px;--zt-media-picker-icon-size: 38px;--zt-media-picker-title-height: 56px}.zt-media-picker__hidden{display:none}.zt-media-picker__title{position:relative;height:var(--zt-media-picker-title-height);line-height:var(--zt-media-picker-title-height);font-weight:700;font-size:var(--zt-font-size-lg);color:var(--zt-text-color);padding:0 16px}.zt-media-picker__title:before{position:absolute;width:4px;height:16px;background:var(--zt-primary-color);left:0;top:14px;content:" "}.zt-media-picker__title:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:0;bottom:0;left:0;border-bottom:1px solid var(--zt-border-color);transform:scaleY(.5)}.zt-media-picker__line{width:100%;height:calc(var(--zt-media-picker-line-height) * 2);display:flex;align-items:center;overflow-x:auto}.zt-media-picker__line::-webkit-scrollbar{width:0;height:0}.zt-media-picker__line:after{content:" ";min-width:16px;height:10px}.zt-media-picker__box{width:var(--zt-media-picker-box-size);display:flex;flex-direction:column;align-items:center}.zt-media-picker__box:first-child{margin-left:16px}.zt-media-picker__box:not(:last-child){margin-right:24px}.zt-media-picker__button{display:flex;align-items:center;justify-content:center;width:var(--zt-media-picker-box-size);height:var(--zt-media-picker-box-size);background:var(--zt-media-picker-button-background);box-shadow:var(--zt-media-picker-button-box-shadow);border:var(--zt-media-picker-button-border);border-radius:8px;box-sizing:border-box}.zt-media-picker__button:active{background:var(--zt-gray-a04);border:var(--zt-media-picker-button-active-border);box-shadow:var(--zt-media-picker-button-active-box-shadow)}.zt-media-picker__icon{width:var(--zt-media-picker-icon-size);height:var(--zt-media-picker-icon-size);color:var(--zt-media-picker-image-color)}.zt-media-picker__label{margin-top:8px;font-size:var(--zt-font-size-sm);color:var(--zt-gray-a8);letter-spacing:0;text-align:center;line-height:var(--zt-line-height-sm);-webkit-user-select:none;-moz-user-select:none;user-select:none}.zt-media-picker__grid{padding:0 16px 8px!important}.zt-media-picker--attachment{width:100%;height:100%}.zt-media-picker__attachment{box-sizing:border-box;width:100%;height:100%;padding:var(--zt-media-picker-attachment-padding);overflow:hidden}.zt-media-picker__attachment-track{display:flex;flex-wrap:nowrap;align-items:flex-start;gap:var(--zt-media-picker-attachment-gap);width:100%;height:100%;overflow-x:auto;overflow-y:hidden}.zt-media-picker__attachment-track::-webkit-scrollbar{width:0;height:0}.zt-media-picker__attachment-item,.zt-media-picker__attachment-add{position:relative;flex:0 0 var(--zt-media-picker-attachment-item-size);width:var(--zt-media-picker-attachment-item-size);height:var(--zt-media-picker-attachment-item-size);border-radius:var(--zt-media-picker-attachment-radius);box-sizing:border-box;overflow:hidden}.zt-media-picker__attachment-add{display:flex;align-items:center;justify-content:center;padding:0;color:var(--zt-media-picker-attachment-add-color);background:var(--zt-media-picker-attachment-add-background);border:var(--zt-media-picker-attachment-add-border)}.zt-media-picker__attachment-add:disabled{opacity:var(--zt-disabled-opacity)}.zt-media-picker__attachment-add-icon{font-size:48px;line-height:1;font-weight:300}.zt-media-picker__attachment-delete{position:absolute;top:8px;right:8px;display:flex;align-items:center;justify-content:center;width:calc(var(--zt-media-picker-attachment-item-size) * .2);height:calc(var(--zt-media-picker-attachment-item-size) * .2);padding:0;color:var(--zt-media-picker-attachment-delete-color);font-size:calc(var(--zt-media-picker-attachment-item-size) * .15);line-height:1;background:var(--zt-media-picker-attachment-delete-background);border:0;border-radius:50%}.zt-media-picker__delete{box-sizing:content-box;width:20px;height:20px;position:absolute;padding:4px;top:0;right:0}.zt-media-picker .zt-image{width:100%;height:100%}.zt-media-picker .zt-grid-item__content{padding:0}.zt-media-picker__thumbnail{width:100%;height:100%}.zt-media-picker__thumbnail-label{position:absolute;bottom:0;left:0;box-sizing:border-box;width:100%;height:var(--zt-line-height-lg);line-height:var(--zt-line-height-lg);padding:0 var(--zt-padding-xs);overflow:hidden;text-align:center;border-radius:0 0 4px 4px;font-size:var(--zt-font-size-sm);text-overflow:ellipsis;word-break:break-all;white-space:nowrap;color:var(--zt-media-picker-thumbnail-label-color);background-color:var(--zt-media-picker-thumbnail-label-background)}.zt-media-picker__mask{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--zt-white);background-color:var(--zt-uploader-mask-background);border-radius:4px}.zt-media-picker__mask-icon{font-size:var(--zt-font-size-xxxl)}.zt-media-picker__mask-message{margin-top:6px;padding:0 var(--zt-padding-base);font-size:var(--zt-font-size-sm);line-height:var(--zt-uploader-mask-message-line-height)}.zt-media-picker__loading{width:var(--zt-uploader-loading-icon-size);height:var(--zt-uploader-loading-icon-size);color:var(--zt-uploader-icon-color)}.zt-theme-dark{--zt-media-picker-button-background: linear-gradient(135deg, #111c29 0%, #1d2c3e 100%, #1c2a3c 100%);--zt-media-picker-button-box-shadow: -4px -4px 8px 0 rgba(255, 255, 255, .08), 4px 4px 8px 0 rgba(0, 12, 24, .8);--zt-media-picker-button-border: 1px solid var(--zt-gray-a1);--zt-media-picker-button-active-border: 1px solid var(--zt-gray-a1);--zt-media-picker-button-active-box-shadow: inset 6px 6px 6px 0 #000d1b}
1
+ :root{--zt-media-picker-image-color: var(--zt-text-color);--zt-media-picker-button-background: linear-gradient(135deg, #e6ebf0 0%, #fff 100%, #fff 100%);--zt-media-picker-button-box-shadow: -4px -4px 8px 0 var(--zt-white), 4px 4px 8px 0 var(--zt-gray-a1);--zt-media-picker-button-border: 0;--zt-media-picker-button-active-border: 1px solid rgba(255, 255, 255, .75);--zt-media-picker-button-active-box-shadow: inset 4px 4px 8px 0 var(--zt-gray-a2);--zt-media-picker-line-height: 46px;--zt-media-picker-box-size: 48px;--zt-media-picker-icon-size: 32px;--zt-media-picker-title-height: 44px;--zt-media-picker-thumbnail-label-background: rgba(var(--zt-gray-rgb), .5);--zt-media-picker-thumbnail-label-color: var(--zt-white)}:root[zt-theme-size=large]{--zt-media-picker-line-height: 52px;--zt-media-picker-box-size: 54px;--zt-media-picker-icon-size: 38px;--zt-media-picker-title-height: 56px}.zt-media-picker__hidden{display:none}.zt-media-picker__title{position:relative;height:var(--zt-media-picker-title-height);line-height:var(--zt-media-picker-title-height);font-weight:700;font-size:var(--zt-font-size-lg);color:var(--zt-text-color);padding:0 16px}.zt-media-picker__title:before{position:absolute;width:4px;height:16px;background:var(--zt-primary-color);left:0;top:14px;content:" "}.zt-media-picker__title:after{position:absolute;box-sizing:border-box;content:" ";pointer-events:none;right:0;bottom:0;left:0;border-bottom:1px solid var(--zt-border-color);transform:scaleY(.5)}.zt-media-picker__line{width:100%;height:calc(var(--zt-media-picker-line-height) * 2);display:flex;align-items:center;overflow-x:auto}.zt-media-picker__line::-webkit-scrollbar{width:0;height:0}.zt-media-picker__line:after{content:" ";min-width:16px;height:10px}.zt-media-picker__box{width:var(--zt-media-picker-box-size);display:flex;flex-direction:column;align-items:center}.zt-media-picker__box:first-child{margin-left:16px}.zt-media-picker__box:not(:last-child){margin-right:24px}.zt-media-picker__button{display:flex;align-items:center;justify-content:center;width:var(--zt-media-picker-box-size);height:var(--zt-media-picker-box-size);background:var(--zt-media-picker-button-background);box-shadow:var(--zt-media-picker-button-box-shadow);border:var(--zt-media-picker-button-border);border-radius:8px;box-sizing:border-box}.zt-media-picker__button:active{background:var(--zt-gray-a04);border:var(--zt-media-picker-button-active-border);box-shadow:var(--zt-media-picker-button-active-box-shadow)}.zt-media-picker__icon{width:var(--zt-media-picker-icon-size);height:var(--zt-media-picker-icon-size);color:var(--zt-media-picker-image-color)}.zt-media-picker__label{margin-top:8px;font-size:var(--zt-font-size-sm);color:var(--zt-gray-a8);letter-spacing:0;text-align:center;line-height:var(--zt-line-height-sm);-webkit-user-select:none;-moz-user-select:none;user-select:none}.zt-media-picker__grid{padding:0 16px 8px!important}.zt-media-picker__delete{box-sizing:content-box;width:20px;height:20px;position:absolute;padding:4px;top:0;right:0}.zt-media-picker .zt-image{width:100%;height:100%}.zt-media-picker .zt-grid-item__content{padding:0}.zt-media-picker__thumbnail{width:100%;height:100%}.zt-media-picker__thumbnail-label{position:absolute;bottom:0;left:0;box-sizing:border-box;width:100%;height:var(--zt-line-height-lg);line-height:var(--zt-line-height-lg);padding:0 var(--zt-padding-xs);overflow:hidden;text-align:center;border-radius:0 0 4px 4px;font-size:var(--zt-font-size-sm);text-overflow:ellipsis;word-break:break-all;white-space:nowrap;color:var(--zt-media-picker-thumbnail-label-color);background-color:var(--zt-media-picker-thumbnail-label-background)}.zt-media-picker__mask{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--zt-white);background-color:var(--zt-uploader-mask-background);border-radius:4px}.zt-media-picker__mask-icon{font-size:var(--zt-font-size-xxxl)}.zt-media-picker__mask-message{margin-top:6px;padding:0 var(--zt-padding-base);font-size:var(--zt-font-size-sm);line-height:var(--zt-uploader-mask-message-line-height)}.zt-media-picker__loading{width:var(--zt-uploader-loading-icon-size);height:var(--zt-uploader-loading-icon-size);color:var(--zt-uploader-icon-color)}.zt-theme-dark{--zt-media-picker-button-background: linear-gradient(135deg, #111c29 0%, #1d2c3e 100%, #1c2a3c 100%);--zt-media-picker-button-box-shadow: -4px -4px 8px 0 rgba(255, 255, 255, .08), 4px 4px 8px 0 rgba(0, 12, 24, .8);--zt-media-picker-button-border: 1px solid var(--zt-gray-a1);--zt-media-picker-button-active-border: 1px solid var(--zt-gray-a1);--zt-media-picker-button-active-box-shadow: inset 6px 6px 6px 0 #000d1b}
@@ -1,8 +1,4 @@
1
1
  export declare const MediaPicker: import("../utils").WithInstall<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
2
- variant: {
3
- type: import("vue").PropType<import("./type").MediaPickerVariant>;
4
- default: import("./type").MediaPickerVariant;
5
- };
6
2
  sortable: {
7
3
  type: BooleanConstructor;
8
4
  default: boolean;
@@ -81,10 +77,6 @@ export declare const MediaPicker: import("../utils").WithInstall<import("vue").D
81
77
  };
82
78
  mediaPlayerProps: import("vue").PropType<Partial<import("..").MediaPlayerProps>>;
83
79
  }>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("delete" | "processing" | "update:mediaList")[], "delete" | "processing" | "update:mediaList", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
84
- variant: {
85
- type: import("vue").PropType<import("./type").MediaPickerVariant>;
86
- default: import("./type").MediaPickerVariant;
87
- };
88
80
  sortable: {
89
81
  type: BooleanConstructor;
90
82
  default: boolean;
@@ -171,7 +163,6 @@ export declare const MediaPicker: import("../utils").WithInstall<import("vue").D
171
163
  disabled: boolean;
172
164
  showTitle: boolean;
173
165
  showDownload: boolean;
174
- variant: import("./type").MediaPickerVariant;
175
166
  sortable: boolean;
176
167
  useFileNameAsLabel: boolean;
177
168
  mediaList: import("./type").Media[];
@@ -196,7 +187,7 @@ export declare const MediaPicker: import("../utils").WithInstall<import("vue").D
196
187
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
197
188
  export default MediaPicker;
198
189
  export type { MediaPickerProps, MediaPickerInstance } from './MediaPicker';
199
- export type { Media, MediaType, MediaAddType, MediaUploadStatus, MediaPreview, MediaPick, MediaBeforeRead, MediaAfterRead, MediaBeforeDelete, MediaPickerThemeVars, MediaPickerVariant, MediaSizeType, } from './type';
190
+ export type { Media, MediaType, MediaAddType, MediaUploadStatus, MediaPreview, MediaPick, MediaBeforeRead, MediaAfterRead, MediaBeforeDelete, MediaPickerThemeVars, MediaSizeType, } from './type';
200
191
  export { defaultMedia } from './type';
201
192
  declare module 'vue' {
202
193
  interface GlobalComponents {
@@ -3,7 +3,6 @@ export type MediaAddType = 'take' | 'pick' | 'take_and_pick';
3
3
  export type MediaUploadStatus = 'processing' | 'uploading' | 'done' | 'failed';
4
4
  export type WxMediaType = 'camera' | 'album';
5
5
  export type MediaSizeType = 'original' | 'compressed';
6
- export type MediaPickerVariant = 'default' | 'attachment';
7
6
  export type Media = {
8
7
  file?: File;
9
8
  url?: string;
@@ -49,13 +48,4 @@ export type MediaPickerThemeVars = {
49
48
  mediaPickerBoxSize?: string;
50
49
  mediaPickerIconSize?: string;
51
50
  mediaPickerTitleHeight?: string;
52
- mediaPickerAttachmentPadding?: string;
53
- mediaPickerAttachmentGap?: string;
54
- mediaPickerAttachmentItemSize?: string;
55
- mediaPickerAttachmentRadius?: string;
56
- mediaPickerAttachmentAddBorder?: string;
57
- mediaPickerAttachmentAddColor?: string;
58
- mediaPickerAttachmentAddBackground?: string;
59
- mediaPickerAttachmentDeleteBackground?: string;
60
- mediaPickerAttachmentDeleteColor?: string;
61
51
  };
@@ -132,7 +132,9 @@ var stdin_default = (0, import_vue.defineComponent)({
132
132
  "class": bem("popup-pages")
133
133
  }, [pages.value.map((page) => (0, import_vue.createVNode)("button", {
134
134
  "type": "button",
135
- "class": bem("popup-page"),
135
+ "class": bem("popup-page", {
136
+ active: page === currentPage.value
137
+ }),
136
138
  "onClick": () => onSelect(page)
137
139
  }, [page]))]), (0, import_vue.createVNode)("div", {
138
140
  "class": bem("popup-footer")
@@ -1 +1 @@
1
- :root{--zt-pagination-bottom: 29px;--zt-pagination-item-size: 44px;--zt-pagination-gap: 16px;--zt-pagination-background: #2d4b7380;--zt-pagination-backdrop-filter: blur(5.44px);--zt-pagination-box-shadow: 0 4px 8px 0 #2d4b7333;--zt-pagination-text-color: #fff;--zt-pagination-disabled-icon-color: rgba(255, 255, 255, .45);--zt-pagination-font-size: 14px;--zt-pagination-text-line-height: 17px;--zt-pagination-z-index: 100}.zt-pagination{position:fixed;left:0;right:0;bottom:var(--zt-pagination-bottom);z-index:var(--zt-pagination-z-index);display:flex;align-items:center;justify-content:center;pointer-events:none}.zt-pagination__button,.zt-pagination__page{height:var(--zt-pagination-item-size);background:var(--zt-pagination-background);-webkit-backdrop-filter:var(--zt-pagination-backdrop-filter);backdrop-filter:var(--zt-pagination-backdrop-filter);box-shadow:var(--zt-pagination-box-shadow)}.zt-pagination__button{width:var(--zt-pagination-item-size);padding:0;border:0;border-radius:50%;color:var(--zt-pagination-text-color);display:flex;align-items:center;justify-content:center;cursor:pointer;pointer-events:auto;transition:opacity var(--zt-duration-fast),transform var(--zt-duration-fast)}.zt-pagination__button:not(.zt-pagination__button--disabled):hover{opacity:.88;transform:scale(1.04)}.zt-pagination__button:not(.zt-pagination__button--disabled):active{opacity:.75;transform:scale(.96)}.zt-pagination__button--disabled{color:var(--zt-pagination-disabled-icon-color);cursor:default}.zt-pagination__page{margin:0 var(--zt-pagination-gap);padding:0 27px;border:0;border-radius:22px;display:flex;align-items:center;justify-content:center;color:var(--zt-pagination-text-color);cursor:pointer;pointer-events:auto;-webkit-appearance:none;-moz-appearance:none;appearance:none}.zt-pagination__text{height:var(--zt-pagination-text-line-height);color:var(--zt-pagination-text-color);font-size:var(--zt-pagination-font-size);line-height:var(--zt-pagination-text-line-height)}.zt-pagination__next-icon{transform:rotate(180deg)}.zt-pagination__popup{height:100%;display:flex;flex-direction:column;background:#fff}.zt-pagination__popup-title{padding-top:var(--zt-popup-close-icon-margin);color:#2d4b73;font-size:18px;font-weight:600;text-align:center}.zt-pagination__popup-pages{flex:1;display:grid;grid-template-columns:repeat(5,40px);grid-auto-rows:40px;justify-content:space-around;row-gap:24px;padding:24px 0;overflow-y:auto}.zt-pagination__popup-page{width:40px;height:40px;padding:0;border:0;border-radius:50%;color:#235;background:#F1F6FA;font-size:16px;line-height:24px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;transition:background-color var(--zt-duration-fast),transform var(--zt-duration-fast),opacity var(--zt-duration-fast)}.zt-pagination__popup-page:hover{background:rgba(45,75,115,.1);transform:scale(1.04)}.zt-pagination__popup-page:active{opacity:.75;transform:scale(.96)}.zt-pagination__popup-footer{padding:8px 16px;border-top:1px solid var(--zt-border-color)}
1
+ :root{--zt-pagination-bottom: 29px;--zt-pagination-item-size: 44px;--zt-pagination-gap: 16px;--zt-pagination-background: #2d4b7380;--zt-pagination-backdrop-filter: blur(5.44px);--zt-pagination-box-shadow: 0 4px 8px 0 #2d4b7333;--zt-pagination-text-color: #fff;--zt-pagination-disabled-icon-color: rgba(255, 255, 255, .45);--zt-pagination-font-size: 14px;--zt-pagination-text-line-height: 17px;--zt-pagination-z-index: 100}.zt-pagination{position:fixed;left:0;right:0;bottom:var(--zt-pagination-bottom);z-index:var(--zt-pagination-z-index);display:flex;align-items:center;justify-content:center;pointer-events:none}.zt-pagination__button,.zt-pagination__page{height:var(--zt-pagination-item-size);background:var(--zt-pagination-background);-webkit-backdrop-filter:var(--zt-pagination-backdrop-filter);backdrop-filter:var(--zt-pagination-backdrop-filter);box-shadow:var(--zt-pagination-box-shadow)}.zt-pagination__button{width:var(--zt-pagination-item-size);padding:0;border:0;border-radius:50%;color:var(--zt-pagination-text-color);display:flex;align-items:center;justify-content:center;cursor:pointer;pointer-events:auto;transition:opacity var(--zt-duration-fast),transform var(--zt-duration-fast)}.zt-pagination__button:not(.zt-pagination__button--disabled):hover{opacity:.88;transform:scale(1.04)}.zt-pagination__button:not(.zt-pagination__button--disabled):active{opacity:.75;transform:scale(.96)}.zt-pagination__button--disabled{color:var(--zt-pagination-disabled-icon-color);cursor:default}.zt-pagination__page{margin:0 var(--zt-pagination-gap);padding:0 27px;border:0;border-radius:22px;display:flex;align-items:center;justify-content:center;color:var(--zt-pagination-text-color);cursor:pointer;pointer-events:auto;-webkit-appearance:none;-moz-appearance:none;appearance:none}.zt-pagination__text{height:var(--zt-pagination-text-line-height);color:var(--zt-pagination-text-color);font-size:var(--zt-pagination-font-size);line-height:var(--zt-pagination-text-line-height)}.zt-pagination__next-icon{transform:rotate(180deg)}.zt-pagination__popup{height:100%;display:flex;flex-direction:column;background:#fff}.zt-pagination__popup-title{padding-top:var(--zt-popup-close-icon-margin);color:#2d4b73;font-size:18px;font-weight:600;text-align:center}.zt-pagination__popup-pages{flex:1;display:grid;grid-template-columns:repeat(5,40px);grid-auto-rows:40px;justify-content:space-around;row-gap:24px;padding:24px 0;overflow-y:auto}.zt-pagination__popup-page{width:40px;height:40px;padding:0;border:0;border-radius:50%;color:#235;background:#F1F6FA;font-size:16px;line-height:24px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;transition:background-color var(--zt-duration-fast),color var(--zt-duration-fast),transform var(--zt-duration-fast),opacity var(--zt-duration-fast)}.zt-pagination__popup-page:not(.zt-pagination__popup-page--active):hover{background:rgba(45,75,115,.1);transform:scale(1.04)}.zt-pagination__popup-page:active{opacity:.75;transform:scale(.96)}.zt-pagination__popup-page--active{color:#fff;background:#3388FF}.zt-pagination__popup-page--active:hover{color:#fff;background:#3388FF;transform:scale(1.04)}.zt-pagination__popup-footer{padding:8px 16px;border-top:1px solid var(--zt-border-color)}
@@ -0,0 +1,202 @@
1
+ import { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue';
2
+ import type { Media, MediaAddType, MediaAfterRead, MediaBeforeDelete, MediaBeforeRead, MediaPick, MediaPreview, MediaSizeType, MediaType } from '../media-picker/type';
3
+ import { DownloadActionParams } from '../image-preview/ImagePreview';
4
+ declare const photoPickerProps: {
5
+ disabled: BooleanConstructor;
6
+ showTitle: BooleanConstructor;
7
+ showDownload: BooleanConstructor;
8
+ downloadAction: PropType<(params: DownloadActionParams) => boolean>;
9
+ useFileNameAsLabel: BooleanConstructor;
10
+ title: {
11
+ type: PropType<string>;
12
+ default: string;
13
+ };
14
+ mediaList: {
15
+ type: PropType<Media[]>;
16
+ default: () => Media[];
17
+ };
18
+ attachmentHeight: PropType<string | number>;
19
+ maxAttachmentCount: {
20
+ type: NumberConstructor;
21
+ default: number;
22
+ };
23
+ maxImageSideLength: {
24
+ type: NumberConstructor;
25
+ default: number;
26
+ };
27
+ maxImageFileSize: {
28
+ type: NumberConstructor;
29
+ default: number;
30
+ };
31
+ maxFileSize: {
32
+ type: NumberConstructor;
33
+ default: number;
34
+ };
35
+ keepFileType: {
36
+ type: BooleanConstructor;
37
+ default: boolean;
38
+ };
39
+ watermarkOptions: {
40
+ type: ObjectConstructor;
41
+ default: () => null;
42
+ };
43
+ allowTakePhoto: {
44
+ type: BooleanConstructor;
45
+ default: true;
46
+ };
47
+ allowPickPhoto: {
48
+ type: BooleanConstructor;
49
+ default: true;
50
+ };
51
+ preview: PropType<MediaPreview>;
52
+ mediaPick: PropType<MediaPick>;
53
+ beforeRead: PropType<MediaBeforeRead>;
54
+ afterRead: PropType<MediaAfterRead>;
55
+ beforeDelete: PropType<MediaBeforeDelete>;
56
+ useWx: BooleanConstructor;
57
+ imageSizeType: {
58
+ type: PropType<MediaSizeType>;
59
+ default: MediaSizeType;
60
+ };
61
+ };
62
+ export type PhotoPickerProps = ExtractPropTypes<typeof photoPickerProps>;
63
+ export type PhotoPickerInstance = ComponentPublicInstance<{
64
+ mediaPickAction: (mediaType: MediaType, mediaAddType: MediaAddType) => void;
65
+ }>;
66
+ declare const _default: import("vue").DefineComponent<ExtractPropTypes<{
67
+ disabled: BooleanConstructor;
68
+ showTitle: BooleanConstructor;
69
+ showDownload: BooleanConstructor;
70
+ downloadAction: PropType<(params: DownloadActionParams) => boolean>;
71
+ useFileNameAsLabel: BooleanConstructor;
72
+ title: {
73
+ type: PropType<string>;
74
+ default: string;
75
+ };
76
+ mediaList: {
77
+ type: PropType<Media[]>;
78
+ default: () => Media[];
79
+ };
80
+ attachmentHeight: PropType<string | number>;
81
+ maxAttachmentCount: {
82
+ type: NumberConstructor;
83
+ default: number;
84
+ };
85
+ maxImageSideLength: {
86
+ type: NumberConstructor;
87
+ default: number;
88
+ };
89
+ maxImageFileSize: {
90
+ type: NumberConstructor;
91
+ default: number;
92
+ };
93
+ maxFileSize: {
94
+ type: NumberConstructor;
95
+ default: number;
96
+ };
97
+ keepFileType: {
98
+ type: BooleanConstructor;
99
+ default: boolean;
100
+ };
101
+ watermarkOptions: {
102
+ type: ObjectConstructor;
103
+ default: () => null;
104
+ };
105
+ allowTakePhoto: {
106
+ type: BooleanConstructor;
107
+ default: true;
108
+ };
109
+ allowPickPhoto: {
110
+ type: BooleanConstructor;
111
+ default: true;
112
+ };
113
+ preview: PropType<MediaPreview>;
114
+ mediaPick: PropType<MediaPick>;
115
+ beforeRead: PropType<MediaBeforeRead>;
116
+ afterRead: PropType<MediaAfterRead>;
117
+ beforeDelete: PropType<MediaBeforeDelete>;
118
+ useWx: BooleanConstructor;
119
+ imageSizeType: {
120
+ type: PropType<MediaSizeType>;
121
+ default: MediaSizeType;
122
+ };
123
+ }>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("delete" | "processing" | "update:mediaList")[], "delete" | "processing" | "update:mediaList", import("vue").PublicProps, Readonly<ExtractPropTypes<{
124
+ disabled: BooleanConstructor;
125
+ showTitle: BooleanConstructor;
126
+ showDownload: BooleanConstructor;
127
+ downloadAction: PropType<(params: DownloadActionParams) => boolean>;
128
+ useFileNameAsLabel: BooleanConstructor;
129
+ title: {
130
+ type: PropType<string>;
131
+ default: string;
132
+ };
133
+ mediaList: {
134
+ type: PropType<Media[]>;
135
+ default: () => Media[];
136
+ };
137
+ attachmentHeight: PropType<string | number>;
138
+ maxAttachmentCount: {
139
+ type: NumberConstructor;
140
+ default: number;
141
+ };
142
+ maxImageSideLength: {
143
+ type: NumberConstructor;
144
+ default: number;
145
+ };
146
+ maxImageFileSize: {
147
+ type: NumberConstructor;
148
+ default: number;
149
+ };
150
+ maxFileSize: {
151
+ type: NumberConstructor;
152
+ default: number;
153
+ };
154
+ keepFileType: {
155
+ type: BooleanConstructor;
156
+ default: boolean;
157
+ };
158
+ watermarkOptions: {
159
+ type: ObjectConstructor;
160
+ default: () => null;
161
+ };
162
+ allowTakePhoto: {
163
+ type: BooleanConstructor;
164
+ default: true;
165
+ };
166
+ allowPickPhoto: {
167
+ type: BooleanConstructor;
168
+ default: true;
169
+ };
170
+ preview: PropType<MediaPreview>;
171
+ mediaPick: PropType<MediaPick>;
172
+ beforeRead: PropType<MediaBeforeRead>;
173
+ afterRead: PropType<MediaAfterRead>;
174
+ beforeDelete: PropType<MediaBeforeDelete>;
175
+ useWx: BooleanConstructor;
176
+ imageSizeType: {
177
+ type: PropType<MediaSizeType>;
178
+ default: MediaSizeType;
179
+ };
180
+ }>> & Readonly<{
181
+ onDelete?: ((...args: any[]) => any) | undefined;
182
+ onProcessing?: ((...args: any[]) => any) | undefined;
183
+ "onUpdate:mediaList"?: ((...args: any[]) => any) | undefined;
184
+ }>, {
185
+ title: string;
186
+ disabled: boolean;
187
+ showTitle: boolean;
188
+ showDownload: boolean;
189
+ useFileNameAsLabel: boolean;
190
+ mediaList: Media[];
191
+ maxImageSideLength: number;
192
+ maxImageFileSize: number;
193
+ maxFileSize: number;
194
+ keepFileType: boolean;
195
+ watermarkOptions: Record<string, any>;
196
+ allowTakePhoto: boolean;
197
+ allowPickPhoto: boolean;
198
+ useWx: boolean;
199
+ imageSizeType: MediaSizeType;
200
+ maxAttachmentCount: number;
201
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
202
+ export default _default;