zartui 3.1.92 → 3.1.94

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 (57) hide show
  1. package/es/composables/use-media-download.d.ts +20 -0
  2. package/es/composables/use-media-download.mjs +111 -0
  3. package/es/drawer-select/DrawerSelect.mjs +13 -30
  4. package/es/drawer-select/index.css +1 -1
  5. package/es/image-preview/ImagePreview.d.ts +2 -5
  6. package/es/image-preview/ImagePreview.mjs +32 -79
  7. package/es/image-preview/function-call.mjs +4 -1
  8. package/es/image-preview/index.css +1 -1
  9. package/es/image-preview/index.d.ts +1 -2
  10. package/es/image-preview/style/index.mjs +2 -0
  11. package/es/image-preview/types.d.ts +3 -1
  12. package/es/index.d.ts +1 -1
  13. package/es/index.mjs +1 -1
  14. package/es/media-picker/MediaPicker.d.ts +1 -1
  15. package/es/media-picker/MediaPicker.mjs +54 -36
  16. package/es/media-picker/index.d.ts +2 -2
  17. package/es/media-picker/style/index.mjs +3 -1
  18. package/es/media-player/MediaPlayer.d.ts +21 -0
  19. package/es/media-player/MediaPlayer.mjs +25 -2
  20. package/es/media-player/index.css +1 -1
  21. package/es/media-player/index.d.ts +14 -0
  22. package/es/media-player/style/index.mjs +4 -0
  23. package/es/photo-picker/index.d.ts +2 -2
  24. package/es/photo-picker/style/index.mjs +2 -0
  25. package/es/uploader/style/index.mjs +2 -0
  26. package/lib/composables/use-media-download.d.ts +20 -0
  27. package/lib/composables/use-media-download.js +138 -0
  28. package/lib/drawer-select/DrawerSelect.js +12 -29
  29. package/lib/drawer-select/index.css +1 -1
  30. package/lib/image-preview/ImagePreview.d.ts +2 -5
  31. package/lib/image-preview/ImagePreview.js +32 -79
  32. package/lib/image-preview/function-call.js +4 -1
  33. package/lib/image-preview/index.css +1 -1
  34. package/lib/image-preview/index.d.ts +1 -2
  35. package/lib/image-preview/style/index.js +2 -0
  36. package/lib/image-preview/types.d.ts +3 -1
  37. package/lib/index.css +1 -1
  38. package/lib/index.d.ts +1 -1
  39. package/lib/index.js +1 -1
  40. package/lib/media-picker/MediaPicker.d.ts +1 -1
  41. package/lib/media-picker/MediaPicker.js +51 -35
  42. package/lib/media-picker/index.d.ts +2 -2
  43. package/lib/media-picker/style/index.js +3 -1
  44. package/lib/media-player/MediaPlayer.d.ts +21 -0
  45. package/lib/media-player/MediaPlayer.js +25 -2
  46. package/lib/media-player/index.css +1 -1
  47. package/lib/media-player/index.d.ts +14 -0
  48. package/lib/media-player/style/index.js +4 -0
  49. package/lib/photo-picker/index.d.ts +2 -2
  50. package/lib/photo-picker/style/index.js +2 -0
  51. package/lib/uploader/style/index.js +2 -0
  52. package/lib/web-types.json +1 -1
  53. package/lib/zartui.cjs.js +208 -134
  54. package/lib/zartui.es.js +208 -134
  55. package/lib/zartui.js +216 -142
  56. package/lib/zartui.min.js +2 -2
  57. package/package.json +5 -5
@@ -1,12 +1,9 @@
1
1
  import type { PropType, CSSProperties, ExtractPropTypes } from 'vue';
2
2
  import { Interceptor } from '../utils';
3
3
  import { PopupCloseIconPosition } from '../popup';
4
+ import type { DownloadActionParams } from '../composables/use-media-download';
4
5
  import { ImageItem } from './types';
5
- export type DownloadActionParams = {
6
- index: number;
7
- url?: string;
8
- title?: string;
9
- };
6
+ export type { DownloadActionParams, FileDownloadOptions } from '../composables/use-media-download';
10
7
  export declare const imagePreviewProps: {
11
8
  show: BooleanConstructor;
12
9
  loop: {
@@ -25,26 +25,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
25
25
  mod
26
26
  ));
27
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
- var __async = (__this, __arguments, generator) => {
29
- return new Promise((resolve, reject) => {
30
- var fulfilled = (value) => {
31
- try {
32
- step(generator.next(value));
33
- } catch (e) {
34
- reject(e);
35
- }
36
- };
37
- var rejected = (value) => {
38
- try {
39
- step(generator.throw(value));
40
- } catch (e) {
41
- reject(e);
42
- }
43
- };
44
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
45
- step((generator = generator.apply(__this, __arguments)).next());
46
- });
47
- };
48
28
  var stdin_exports = {};
49
29
  __export(stdin_exports, {
50
30
  default: () => stdin_default,
@@ -59,8 +39,7 @@ var import_icon = require("../icon");
59
39
  var import_swipe = require("../swipe");
60
40
  var import_popup = require("../popup");
61
41
  var import_ImagePreviewItem = __toESM(require("./ImagePreviewItem"));
62
- var import_Download = require("./svg/Download");
63
- var import_toast = require("../toast");
42
+ var import_use_media_download = require("../composables/use-media-download");
64
43
  const [name, bem] = (0, import_utils.createNamespace)("image-preview");
65
44
  const popupProps = ["show", "transition", "overlayStyle", "closeOnPopstate", "teleport"];
66
45
  const imagePreviewProps = {
@@ -97,8 +76,13 @@ var stdin_default = (0, import_vue.defineComponent)({
97
76
  slots
98
77
  }) {
99
78
  const swipeRef = (0, import_vue.ref)();
79
+ const {
80
+ downloading,
81
+ download,
82
+ downloadFile
83
+ } = (0, import_use_media_download.useMediaDownload)(props);
100
84
  const state = (0, import_vue.reactive)({
101
- active: 0,
85
+ active: +props.startPosition,
102
86
  rootWidth: 0,
103
87
  rootHeight: 0,
104
88
  disableZoom: false
@@ -136,71 +120,38 @@ var stdin_default = (0, import_vue.defineComponent)({
136
120
  }, [props.images[state.active].title]);
137
121
  }
138
122
  };
139
- const onDownload = () => __async(this, null, function* () {
123
+ const onDownload = () => {
140
124
  var _a, _b, _c;
141
- const downloadParams = {
125
+ return download({
142
126
  index: state.active,
143
127
  url: (_a = props.images[state.active]) == null ? void 0 : _a.url,
144
- title: (_b = props.images[state.active]) == null ? void 0 : _b.title
145
- };
146
- if (props.downloadAction) {
147
- const result = props.downloadAction(downloadParams);
148
- if (result) {
149
- return;
150
- }
151
- }
152
- try {
153
- let universalJsSdk = yield import("@egova/universal-js-sdk");
154
- if (universalJsSdk && universalJsSdk.getJSI && downloadParams.url) {
155
- let fileJsi = (_c = universalJsSdk.getJSI()) == null ? void 0 : _c.file;
156
- if (fileJsi && fileJsi.download) {
157
- (0, import_toast.showLoadingToast)({
158
- message: "\u4E0B\u8F7D\u4E2D...",
159
- forbidClick: true,
160
- duration: 0
161
- });
162
- fileJsi.download({
163
- url: downloadParams.url
164
- }).then(({
165
- tempFilePath
166
- }) => {
167
- (0, import_toast.closeToast)();
168
- (0, import_toast.showSuccessToast)("\u4E0B\u8F7D\u6210\u529F");
169
- }).catch(() => {
170
- (0, import_toast.closeToast)();
171
- (0, import_toast.showFailToast)("\u4E0B\u8F7D\u5931\u8D25");
172
- });
173
- return;
174
- } else {
175
- (0, import_toast.showFailToast)("\u5F53\u524D\u73AF\u5883\u6682\u4E0D\u652F\u6301\u4E0B\u8F7D");
176
- }
177
- }
178
- } catch (e) {
179
- console.log(e.message);
180
- }
181
- });
128
+ title: (_b = props.images[state.active]) == null ? void 0 : _b.title,
129
+ fileName: (_c = props.images[state.active]) == null ? void 0 : _c.fileName
130
+ });
131
+ };
132
+ const renderDownloadIcon = () => (0, import_vue.createVNode)("button", {
133
+ "type": "button",
134
+ "class": bem("download-icon"),
135
+ "aria-label": "\u4E0B\u8F7D\u539F\u56FE",
136
+ "disabled": downloading.value,
137
+ "onClick": onDownload
138
+ }, [(0, import_vue.createVNode)(import_icon.Icon, {
139
+ "name": "download",
140
+ "size": "24"
141
+ }, null)]);
182
142
  const renderIndex = () => {
183
143
  const image = props.images[state.active];
184
- const showDownload = props.showDownload && !image.url.startsWith("data:");
144
+ const showDownload = props.showDownload && (image == null ? void 0 : image.url) && !image.url.startsWith("data:");
185
145
  if (props.showIndex || showDownload) {
186
- if (props.showIndex && slots.index) {
187
- return (0, import_vue.createVNode)("div", {
188
- "class": bem("index")
189
- }, [slots.index({
190
- index: state.active
191
- })]);
192
- }
193
146
  return (0, import_vue.createVNode)("div", {
194
147
  "class": bem("index")
195
- }, [props.showIndex && renderIndexText(), props.showIndex && renderImageTitle(), showDownload && renderDownloadIcon()]);
148
+ }, [props.showIndex && (0, import_vue.createVNode)("div", {
149
+ "class": bem("index-content")
150
+ }, [slots.index ? slots.index({
151
+ index: state.active
152
+ }) : [renderIndexText(), renderImageTitle()]]), showDownload && renderDownloadIcon()]);
196
153
  }
197
154
  };
198
- const renderDownloadIcon = () => {
199
- return (0, import_vue.createVNode)("div", {
200
- "class": bem("download-icon"),
201
- "onClick": onDownload
202
- }, [(0, import_Download.Download)(bem)]);
203
- };
204
155
  const renderCover = () => {
205
156
  if (slots.cover) {
206
157
  return (0, import_vue.createVNode)("div", {
@@ -262,7 +213,8 @@ var stdin_default = (0, import_vue.defineComponent)({
262
213
  return (_a = swipeRef.value) == null ? void 0 : _a.swipeTo(index, options);
263
214
  };
264
215
  (0, import_use_expose.useExpose)({
265
- swipeTo
216
+ swipeTo,
217
+ downloadFile
266
218
  });
267
219
  (0, import_vue.onMounted)(() => {
268
220
  resize();
@@ -292,6 +244,7 @@ var stdin_default = (0, import_vue.defineComponent)({
292
244
  return () => (0, import_vue.createVNode)(import_popup.Popup, (0, import_vue.mergeProps)({
293
245
  "class": [bem(), props.className],
294
246
  "overlayClass": [bem("overlay"), props.overlayClass],
247
+ "onClick": (event) => event.stopPropagation(),
295
248
  "onClosed": onClosed,
296
249
  "onUpdate:show": updateShow
297
250
  }, (0, import_utils.pick)(props, popupProps)), {
@@ -47,6 +47,8 @@ const defaultConfig = {
47
47
  className: "",
48
48
  showIndex: true,
49
49
  closeable: false,
50
+ showDownload: false,
51
+ downloadAction: void 0,
50
52
  closeIcon: "clear",
51
53
  transition: void 0,
52
54
  beforeClose: void 0,
@@ -95,7 +97,8 @@ const showImagePreview = (options, startPosition = 0) => {
95
97
  }
96
98
  return {
97
99
  url: opt.url,
98
- title: opt.title || ""
100
+ title: opt.title || "",
101
+ fileName: opt.fileName
99
102
  };
100
103
  }),
101
104
  startPosition
@@ -1 +1 @@
1
- :root{--zt-image-preview-index-height: 48px;--zt-image-preview-index-background: var(--zt-gray-a4);--zt-image-preview-index-text-color: var(--zt-white);--zt-image-preview-overlay-background: rgba(0, 0, 0, .9);--zt-image-preview-close-icon-color: var(--zt-gray-5);--zt-image-preview-close-icon-margin: var(--zt-padding-md);--zt-image-preview-close-icon-z-index: 1;--zt-image-preview-error-font-size: 36px}:root[zt-theme-size=large]{--zt-image-preview-error-font-size: 42px}.zt-image-preview{position:fixed;top:0;left:0;width:100%;height:100%;max-width:none;background-color:transparent;transform:none}.zt-image-preview__swipe{height:100%}.zt-image-preview__swipe-item{display:flex;align-items:center;justify-content:center;overflow:hidden}.zt-image-preview__cover{position:absolute;top:0;left:0}.zt-image-preview__image,.zt-image-preview__image-wrap{width:100%;transition-property:transform}.zt-image-preview__image--vertical,.zt-image-preview__image-wrap--vertical{width:auto;height:100%}.zt-image-preview__image img,.zt-image-preview__image-wrap img,.zt-image-preview__image video,.zt-image-preview__image-wrap video{-webkit-user-drag:none}.zt-image-preview__image .zt-image__error,.zt-image-preview__image-wrap .zt-image__error{top:30%;height:40%}.zt-image-preview__image .zt-image__error-icon,.zt-image-preview__image-wrap .zt-image__error-icon{font-size:var(--zt-image-preview-error-font-size)}.zt-image-preview__image .zt-image__loading,.zt-image-preview__image-wrap .zt-image__loading{background-color:transparent}.zt-image-preview__index{box-sizing:border-box;display:flex;align-items:center;position:absolute;bottom:0;left:0;width:100%;height:var(--zt-image-preview-index-height);padding:0 16px;background-color:var(--zt-image-preview-index-background);color:var(--zt-image-preview-index-text-color);overflow:hidden}.zt-image-preview__index-number{height:var(--zt-line-height-xl);background:rgba(45,75,115,.8);border-radius:2px;font-size:var(--zt-font-size-sm);text-align:center;line-height:var(--zt-line-height-xl);padding:0 8px}.zt-image-preview__title{flex-shrink:0;margin-left:8px;margin-right:8px;font-size:var(--zt-font-size-md);line-height:var(--zt-line-height-md)}.zt-image-preview__download-icon{display:flex;align-items:center;justify-content:center;margin-left:auto;cursor:pointer;padding:4px}.zt-image-preview__download-icon svg{width:20px;height:20px}.zt-image-preview__overlay{background:var(--zt-image-preview-overlay-background)}.zt-image-preview__close-icon{position:absolute;z-index:var(--zt-image-preview-close-icon-z-index);color:var(--zt-image-preview-close-icon-color);font-size:var(--zt-font-size-xxxl)}.zt-image-preview__close-icon--top-left{top:var(--zt-image-preview-close-icon-margin);left:var(--zt-image-preview-close-icon-margin)}.zt-image-preview__close-icon--top-right{top:var(--zt-image-preview-close-icon-margin);right:var(--zt-image-preview-close-icon-margin)}.zt-image-preview__close-icon--bottom-left{bottom:var(--zt-image-preview-close-icon-margin);left:var(--zt-image-preview-close-icon-margin)}.zt-image-preview__close-icon--bottom-right{right:var(--zt-image-preview-close-icon-margin);bottom:var(--zt-image-preview-close-icon-margin)}
1
+ :root{--zt-image-preview-index-height: 48px;--zt-image-preview-index-background: var(--zt-gray-a4);--zt-image-preview-index-text-color: var(--zt-white);--zt-image-preview-overlay-background: rgba(0, 0, 0, .9);--zt-image-preview-close-icon-color: var(--zt-gray-5);--zt-image-preview-close-icon-margin: var(--zt-padding-md);--zt-image-preview-close-icon-z-index: 1;--zt-image-preview-error-font-size: 36px}:root[zt-theme-size=large]{--zt-image-preview-error-font-size: 42px}.zt-image-preview{position:fixed;top:0;left:0;width:100%;height:100%;max-width:none;background-color:transparent;transform:none}.zt-image-preview__swipe{height:100%}.zt-image-preview__swipe-item{display:flex;align-items:center;justify-content:center;overflow:hidden}.zt-image-preview__cover{position:absolute;top:0;left:0}.zt-image-preview__image,.zt-image-preview__image-wrap{width:100%;transition-property:transform}.zt-image-preview__image--vertical,.zt-image-preview__image-wrap--vertical{width:auto;height:100%}.zt-image-preview__image img,.zt-image-preview__image-wrap img,.zt-image-preview__image video,.zt-image-preview__image-wrap video{-webkit-user-drag:none}.zt-image-preview__image .zt-image__error,.zt-image-preview__image-wrap .zt-image__error{top:30%;height:40%}.zt-image-preview__image .zt-image__error-icon,.zt-image-preview__image-wrap .zt-image__error-icon{font-size:var(--zt-image-preview-error-font-size)}.zt-image-preview__image .zt-image__loading,.zt-image-preview__image-wrap .zt-image__loading{background-color:transparent}.zt-image-preview__index{box-sizing:border-box;display:flex;align-items:center;position:absolute;bottom:0;left:0;width:100%;height:var(--zt-image-preview-index-height);padding:0 16px;background-color:var(--zt-image-preview-index-background);color:var(--zt-image-preview-index-text-color);overflow:hidden}.zt-image-preview__index-number{height:var(--zt-line-height-xl);background:rgba(45,75,115,.8);border-radius:2px;font-size:var(--zt-font-size-sm);text-align:center;line-height:var(--zt-line-height-xl);padding:0 8px}.zt-image-preview__title{flex-shrink:0;margin-left:8px;margin-right:8px;font-size:var(--zt-font-size-md);line-height:var(--zt-line-height-md)}.zt-image-preview__index-content{display:flex;align-items:center;flex:1;min-width:0;height:100%;overflow:hidden}.zt-image-preview__download-icon{display:flex;align-items:center;border:0;background:transparent;color:inherit;flex-shrink:0;margin-left:auto;padding:4px;cursor:pointer}.zt-image-preview__overlay{background:var(--zt-image-preview-overlay-background)}.zt-image-preview__close-icon{position:absolute;z-index:var(--zt-image-preview-close-icon-z-index);color:var(--zt-image-preview-close-icon-color);font-size:var(--zt-font-size-xxxl)}.zt-image-preview__close-icon--top-left{top:var(--zt-image-preview-close-icon-margin);left:var(--zt-image-preview-close-icon-margin)}.zt-image-preview__close-icon--top-right{top:var(--zt-image-preview-close-icon-margin);right:var(--zt-image-preview-close-icon-margin)}.zt-image-preview__close-icon--bottom-left{bottom:var(--zt-image-preview-close-icon-margin);left:var(--zt-image-preview-close-icon-margin)}.zt-image-preview__close-icon--bottom-right{right:var(--zt-image-preview-close-icon-margin);bottom:var(--zt-image-preview-close-icon-margin)}
@@ -1,4 +1,3 @@
1
- import type { ImagePreviewProps } from './ImagePreview';
2
1
  export declare const ImagePreview: import("../utils").WithInstall<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
2
  show: BooleanConstructor;
4
3
  loop: {
@@ -148,7 +147,7 @@ export declare const ImagePreview: import("../utils").WithInstall<import("vue").
148
147
  export default ImagePreview;
149
148
  export { imagePreviewProps } from './ImagePreview';
150
149
  export { showImagePreview } from './function-call';
151
- export type { ImagePreviewProps };
150
+ export type { ImagePreviewProps, DownloadActionParams, FileDownloadOptions } from './ImagePreview';
152
151
  export type { ImageItem, ImagePreviewOptions, ImagePreviewInstance, ImagePreviewScaleEventParams, ImagePreviewThemeVars, } from './types';
153
152
  declare module 'vue' {
154
153
  interface GlobalComponents {
@@ -6,6 +6,8 @@ require("../../overlay/index.css");
6
6
  require("../../popup/index.css");
7
7
  require("../../loading/index.css");
8
8
  require("../../toast/index.css");
9
+ require("../../button/index.css");
10
+ require("../../dialog/index.css");
9
11
  require("../../swipe/index.css");
10
12
  require("../../swipe-item/index.css");
11
13
  require("../index.css");
@@ -2,10 +2,11 @@ import type { CSSProperties, TeleportProps, ComponentPublicInstance } from 'vue'
2
2
  import type { Interceptor } from '../utils';
3
3
  import type { SwipeToOptions } from '../swipe';
4
4
  import type { PopupCloseIconPosition } from '../popup';
5
- import type { DownloadActionParams, ImagePreviewProps } from './ImagePreview';
5
+ import type { DownloadActionParams, FileDownloadOptions, ImagePreviewProps } from './ImagePreview';
6
6
  export type ImageItem = {
7
7
  url: string;
8
8
  title?: string;
9
+ fileName?: string;
9
10
  };
10
11
  export type ImagePreviewOptions = {
11
12
  loop?: boolean;
@@ -41,6 +42,7 @@ export type ImagePreviewScaleEventParams = {
41
42
  index: number;
42
43
  };
43
44
  export type ImagePreviewExpose = {
45
+ downloadFile: (options: FileDownloadOptions) => Promise<void>;
44
46
  swipeTo: (index: number, options?: SwipeToOptions) => void;
45
47
  };
46
48
  export type ImagePreviewInstance = ComponentPublicInstance<ImagePreviewProps, ImagePreviewExpose>;