@bagelink/vue 0.0.1033 → 0.0.1035
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/dist/components/Image.vue.d.ts +2 -1
- package/dist/components/Image.vue.d.ts.map +1 -1
- package/dist/components/form/BglField.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/NumberInput.vue.d.ts +1 -1
- package/dist/components/form/inputs/NumberInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/Upload/UploadInput.vue.d.ts +86 -0
- package/dist/components/form/inputs/Upload/UploadInput.vue.d.ts.map +1 -0
- package/dist/components/form/inputs/index.d.ts +1 -1
- package/dist/components/form/inputs/index.d.ts.map +1 -1
- package/dist/index.cjs +94 -72
- package/dist/index.mjs +94 -72
- package/dist/style.css +34 -34
- package/dist/utils/BagelFormUtils.d.ts +9 -0
- package/dist/utils/BagelFormUtils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Image.vue +18 -11
- package/src/components/form/BglField.vue +5 -1
- package/src/components/form/inputs/NumberInput.vue +3 -3
- package/src/components/form/inputs/Upload/{UploadFile.vue → UploadInput.vue} +24 -19
- package/src/components/form/inputs/index.ts +1 -1
- package/src/utils/BagelFormUtils.ts +17 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.vue.d.ts","sourceRoot":"","sources":["../../src/components/Image.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Image.vue.d.ts","sourceRoot":"","sources":["../../src/components/Image.vue"],"names":[],"mappings":"AA4GA,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM;QACf,QAAQ,EAAE,GAAG,CAAA;KACb;CACD;AAED,KAAK,WAAW,GAAG;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB,CAAC;;AA2IF,wBAMG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BglField.vue.d.ts","sourceRoot":"","sources":["../../../src/components/form/BglField.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BglField.vue.d.ts","sourceRoot":"","sources":["../../../src/components/form/BglField.vue"],"names":[],"mappings":"AAoKA,OAAO,EAIN,KAAK,KAAK,EAWV,MAAM,eAAe,CAAA;yBAIL,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,eAChC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,cAClD,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,iBAC5F,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;WAuNxD,mBAAmB,CAAC;;;eAnNrB,KAAK,CAAC,CAAC,CAAC;oBACH;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;SAAE;KAkNmF,CAAC,4BAA2B;oBAChI,OAAO,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,IAAI;WAClD,GAAG;;;OAKD,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,WAAW,CAAC,CAAA;CAAE;AAjOzE,wBAiO4E;AAC5E,KAAK,mBAAmB,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberInput.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/form/inputs/NumberInput.vue"],"names":[],"mappings":"AA4KA,OAAO,EAAQ,KAAK,aAAa,EAAO,MAAM,eAAe,CAAA;AAK7D,KAAK,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAA;AAEzD,UAAU,gBAAgB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"NumberInput.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/form/inputs/NumberInput.vue"],"names":[],"mappings":"AA4KA,OAAO,EAAQ,KAAK,aAAa,EAAO,MAAM,eAAe,CAAA;AAK7D,KAAK,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAA;AAEzD,UAAU,gBAAgB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;;;;;;AAuRD,wBAQG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
label?: string;
|
|
3
|
+
multiple?: boolean;
|
|
4
|
+
modelValue?: string | string[];
|
|
5
|
+
width?: string;
|
|
6
|
+
height?: string | 'auto';
|
|
7
|
+
dirPath?: string;
|
|
8
|
+
fill?: boolean;
|
|
9
|
+
oval?: boolean;
|
|
10
|
+
theme?: 'dropzone' | 'basic';
|
|
11
|
+
accept?: string;
|
|
12
|
+
required?: boolean;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
baseURL?: string;
|
|
15
|
+
};
|
|
16
|
+
declare function browse(): void;
|
|
17
|
+
declare function __VLS_template(): {
|
|
18
|
+
attrs: Partial<{}>;
|
|
19
|
+
slots: {
|
|
20
|
+
files?(_: {
|
|
21
|
+
files: import('@vue-macros/reactivity-transform/macros.js').ComputedVariable<string[]>;
|
|
22
|
+
fileQueue: import('@vue-macros/reactivity-transform/macros.js').ReactiveVariable<{
|
|
23
|
+
file: {
|
|
24
|
+
readonly lastModified: number;
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly webkitRelativePath: string;
|
|
27
|
+
readonly size: number;
|
|
28
|
+
readonly type: string;
|
|
29
|
+
arrayBuffer: () => Promise<ArrayBuffer>;
|
|
30
|
+
bytes: () => Promise<Uint8Array>;
|
|
31
|
+
slice: (start?: number, end?: number, contentType?: string) => Blob;
|
|
32
|
+
stream: () => ReadableStream<Uint8Array>;
|
|
33
|
+
text: () => Promise<string>;
|
|
34
|
+
};
|
|
35
|
+
progress: number;
|
|
36
|
+
uploading?: boolean | undefined;
|
|
37
|
+
name?: string | undefined;
|
|
38
|
+
uploaded?: boolean | undefined;
|
|
39
|
+
}[]>;
|
|
40
|
+
}): any;
|
|
41
|
+
placeholder?(_: {
|
|
42
|
+
files: import('@vue-macros/reactivity-transform/macros.js').ComputedVariable<string[]>;
|
|
43
|
+
fileQueue: import('@vue-macros/reactivity-transform/macros.js').ReactiveVariable<{
|
|
44
|
+
file: {
|
|
45
|
+
readonly lastModified: number;
|
|
46
|
+
readonly name: string;
|
|
47
|
+
readonly webkitRelativePath: string;
|
|
48
|
+
readonly size: number;
|
|
49
|
+
readonly type: string;
|
|
50
|
+
arrayBuffer: () => Promise<ArrayBuffer>;
|
|
51
|
+
bytes: () => Promise<Uint8Array>;
|
|
52
|
+
slice: (start?: number, end?: number, contentType?: string) => Blob;
|
|
53
|
+
stream: () => ReadableStream<Uint8Array>;
|
|
54
|
+
text: () => Promise<string>;
|
|
55
|
+
};
|
|
56
|
+
progress: number;
|
|
57
|
+
uploading?: boolean | undefined;
|
|
58
|
+
name?: string | undefined;
|
|
59
|
+
uploaded?: boolean | undefined;
|
|
60
|
+
}[]>;
|
|
61
|
+
browse: typeof browse;
|
|
62
|
+
}): any;
|
|
63
|
+
};
|
|
64
|
+
refs: {};
|
|
65
|
+
rootEl: HTMLDivElement;
|
|
66
|
+
};
|
|
67
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
68
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
69
|
+
"update:modelValue": (...args: any[]) => void;
|
|
70
|
+
addFileStart: (...args: any[]) => void;
|
|
71
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
72
|
+
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
73
|
+
onAddFileStart?: ((...args: any[]) => any) | undefined;
|
|
74
|
+
}>, {
|
|
75
|
+
height: string | "auto";
|
|
76
|
+
theme: "dropzone" | "basic";
|
|
77
|
+
accept: string;
|
|
78
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
79
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
80
|
+
export default _default;
|
|
81
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
82
|
+
new (): {
|
|
83
|
+
$slots: S;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=UploadInput.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UploadInput.vue.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/inputs/Upload/UploadInput.vue"],"names":[],"mappings":"AAyXA,KAAK,WAAW,GAAG;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB,CAAC;AAmEF,iBAAS,MAAM,SAYd;AA8CD,iBAAS,cAAc;WAoaT,OAAO,IAA6B;;;;;;;;;;;;;;;;;;;;;;YATtB,GAAG;;;;;;;;;;;;;;;;;;;;;;YACI,GAAG;;;;EAarC;AAwBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;YAxkBX,MAAM,GAAG,MAAM;WAIhB,UAAU,GAAG,OAAO;YACnB,MAAM;wFA4kBd,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAgBpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
|
@@ -19,5 +19,5 @@ export { default as TableField } from './TableField.vue';
|
|
|
19
19
|
export { default as TelInput } from './TelInput.vue';
|
|
20
20
|
export { default as TextInput } from './TextInput.vue';
|
|
21
21
|
export { default as ToggleInput } from './ToggleInput.vue';
|
|
22
|
-
export { default as
|
|
22
|
+
export { default as UploadInput } from './Upload/UploadInput.vue';
|
|
23
23
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/form/inputs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/form/inputs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA"}
|
package/dist/index.cjs
CHANGED
|
@@ -42,6 +42,9 @@ const bagelFormUtils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defi
|
|
|
42
42
|
},
|
|
43
43
|
get txtField() {
|
|
44
44
|
return txtField;
|
|
45
|
+
},
|
|
46
|
+
get uploadField() {
|
|
47
|
+
return uploadField;
|
|
45
48
|
}
|
|
46
49
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
47
50
|
const _sfc_main$15 = /* @__PURE__ */ vue.defineComponent({
|
|
@@ -10385,11 +10388,13 @@ const _sfc_main$S = /* @__PURE__ */ vue.defineComponent({
|
|
|
10385
10388
|
customAttrs.value.multiline = true;
|
|
10386
10389
|
return TextInput;
|
|
10387
10390
|
}
|
|
10391
|
+
if (props2.field.$el === "number") return NumberInput;
|
|
10388
10392
|
if (props2.field.$el === "array") return FieldArray;
|
|
10389
10393
|
if (props2.field.$el === "select") return SelectInput;
|
|
10390
10394
|
if (props2.field.$el === "toggle") return ToggleInput;
|
|
10391
10395
|
if (props2.field.$el === "check") return CheckInput;
|
|
10392
10396
|
if (props2.field.$el === "richtext") return RichText;
|
|
10397
|
+
if (props2.field.$el === "upload") return UploadInput;
|
|
10393
10398
|
if (props2.field.$el === "file") return FileUpload;
|
|
10394
10399
|
if (props2.field.$el === "date") return DateInput;
|
|
10395
10400
|
if (props2.field.$el === "tabs") return TabsNav;
|
|
@@ -19987,7 +19992,8 @@ const DatePicker = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["render", _sfc_ren
|
|
|
19987
19992
|
const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
|
|
19988
19993
|
__name: "Image",
|
|
19989
19994
|
props: {
|
|
19990
|
-
src: { type: String, required:
|
|
19995
|
+
src: { type: String, required: false },
|
|
19996
|
+
pathKey: { type: String, required: false },
|
|
19991
19997
|
alt: { type: String, required: false, default: "" },
|
|
19992
19998
|
width: { type: [String, Number], required: false },
|
|
19993
19999
|
height: { type: [String, Number], required: false },
|
|
@@ -19996,20 +20002,25 @@ const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
|
|
|
19996
20002
|
setup(__props, { expose: __expose }) {
|
|
19997
20003
|
__expose();
|
|
19998
20004
|
let imageSrc = vue.ref(null);
|
|
19999
|
-
|
|
20005
|
+
const bagel = useBagel();
|
|
20006
|
+
const fileBaseUrl = vue.computed(() => (bagel.fileBaseUrl || "https://files.bagel.design").replace(/\/$/, ""));
|
|
20007
|
+
const pathToUrl = () => `${fileBaseUrl.value}/${__props.pathKey}`;
|
|
20008
|
+
async function loadImage() {
|
|
20000
20009
|
var _a2;
|
|
20001
|
-
|
|
20010
|
+
const url = __props.src || pathToUrl();
|
|
20011
|
+
console.log(url);
|
|
20012
|
+
if (!url) {
|
|
20002
20013
|
imageSrc.value = null;
|
|
20003
20014
|
return;
|
|
20004
20015
|
}
|
|
20005
|
-
const ext = (_a2 =
|
|
20016
|
+
const ext = (_a2 = url.split(".").pop()) == null ? void 0 : _a2.toLowerCase().split("?").shift();
|
|
20006
20017
|
if (ext === "heic") {
|
|
20007
20018
|
if (!("caches" in window)) {
|
|
20008
20019
|
console.warn("Caching is not available. Proceeding without cache.");
|
|
20009
20020
|
} else {
|
|
20010
20021
|
try {
|
|
20011
20022
|
const imgCache = await window.caches.open("img-cache");
|
|
20012
|
-
const cachedResponse = await imgCache.match(
|
|
20023
|
+
const cachedResponse = await imgCache.match(url);
|
|
20013
20024
|
if (cachedResponse) {
|
|
20014
20025
|
imageSrc.value = URL.createObjectURL(await cachedResponse.blob());
|
|
20015
20026
|
return;
|
|
@@ -20020,14 +20031,14 @@ const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
|
|
|
20020
20031
|
}
|
|
20021
20032
|
try {
|
|
20022
20033
|
await appendScript("https://cdnjs.cloudflare.com/ajax/libs/heic2any/0.0.1/index.min.js");
|
|
20023
|
-
const response = await fetch(
|
|
20034
|
+
const response = await fetch(url);
|
|
20024
20035
|
const blob = await response.blob();
|
|
20025
20036
|
const convertedBlob = await window.heic2any({ blob });
|
|
20026
20037
|
imageSrc.value = URL.createObjectURL(convertedBlob);
|
|
20027
20038
|
if ("caches" in window) {
|
|
20028
20039
|
try {
|
|
20029
20040
|
const imgCache = await window.caches.open("img-cache");
|
|
20030
|
-
imgCache.put(
|
|
20041
|
+
imgCache.put(url, new Response(convertedBlob));
|
|
20031
20042
|
} catch (cacheError) {
|
|
20032
20043
|
console.warn("Failed to cache the image:", cacheError);
|
|
20033
20044
|
}
|
|
@@ -20036,15 +20047,15 @@ const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
|
|
|
20036
20047
|
console.error("Error converting HEIC file:", error);
|
|
20037
20048
|
}
|
|
20038
20049
|
} else {
|
|
20039
|
-
imageSrc.value =
|
|
20050
|
+
imageSrc.value = url;
|
|
20040
20051
|
}
|
|
20041
20052
|
}
|
|
20042
|
-
vue.watch(() => __props.src, loadImage, { immediate: true });
|
|
20053
|
+
vue.watch(() => [__props.src, __props.pathKey], loadImage, { immediate: true });
|
|
20043
20054
|
const __returned__ = { get imageSrc() {
|
|
20044
20055
|
return imageSrc;
|
|
20045
20056
|
}, set imageSrc(v) {
|
|
20046
20057
|
imageSrc = v;
|
|
20047
|
-
}, loadImage, get Skeleton() {
|
|
20058
|
+
}, bagel, fileBaseUrl, pathToUrl, loadImage, get Skeleton() {
|
|
20048
20059
|
return Skeleton;
|
|
20049
20060
|
}, get normalizeDimension() {
|
|
20050
20061
|
return normalizeDimension;
|
|
@@ -20738,7 +20749,7 @@ const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
|
|
|
20738
20749
|
icon: { type: null, required: false },
|
|
20739
20750
|
label: { type: String, required: false },
|
|
20740
20751
|
placeholder: { type: String, required: false },
|
|
20741
|
-
disabled: { type: Boolean, required:
|
|
20752
|
+
disabled: { type: Boolean, required: false },
|
|
20742
20753
|
required: { type: Boolean, required: false },
|
|
20743
20754
|
id: { type: String, required: false },
|
|
20744
20755
|
helptext: { type: String, required: false },
|
|
@@ -20831,6 +20842,7 @@ function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
20831
20842
|
[
|
|
20832
20843
|
$props.layout && $setup.btnLayouts.includes($props.layout) ? (vue.openBlock(), vue.createBlock($setup["Btn"], {
|
|
20833
20844
|
key: 0,
|
|
20845
|
+
flat: "",
|
|
20834
20846
|
icon: "add",
|
|
20835
20847
|
class: vue.normalizeClass(["radius", [{ "bgl-big-ctrl-num-btn": $props.layout === "vertical" }]]),
|
|
20836
20848
|
onClick: $setup.increment
|
|
@@ -20889,6 +20901,7 @@ function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
20889
20901
|
}, null, 8, ["icon"])) : vue.createCommentVNode("v-if", true),
|
|
20890
20902
|
$props.layout && $setup.btnLayouts.includes($props.layout) ? (vue.openBlock(), vue.createBlock($setup["Btn"], {
|
|
20891
20903
|
key: 4,
|
|
20904
|
+
flat: "",
|
|
20892
20905
|
icon: "remove",
|
|
20893
20906
|
class: vue.normalizeClass(["radius", [{ "bgl-big-ctrl-num-btn": $props.layout === "vertical" }]]),
|
|
20894
20907
|
onClick: $setup.decrement
|
|
@@ -31838,7 +31851,7 @@ const files = {
|
|
|
31838
31851
|
}
|
|
31839
31852
|
};
|
|
31840
31853
|
const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
|
|
31841
|
-
__name: "
|
|
31854
|
+
__name: "UploadInput",
|
|
31842
31855
|
props: {
|
|
31843
31856
|
label: { type: String, required: false },
|
|
31844
31857
|
multiple: { type: Boolean, required: false },
|
|
@@ -31860,8 +31873,9 @@ const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
|
|
|
31860
31873
|
const props2 = __props;
|
|
31861
31874
|
const emit2 = __emit;
|
|
31862
31875
|
const bagel = useBagel();
|
|
31863
|
-
const fileBaseUrl = vue.computed(() => (props2.baseURL || bagel.fileBaseUrl || "https://files.bagel.design").replace(/\/$/, ""));
|
|
31864
31876
|
files.setBaseUrl(bagel.host);
|
|
31877
|
+
const fileBaseUrl = vue.computed(() => (props2.baseURL || bagel.fileBaseUrl || "https://files.bagel.design").replace(/\/$/, ""));
|
|
31878
|
+
const pathToUrl = (path_key) => `${fileBaseUrl.value}/${path_key}`;
|
|
31865
31879
|
const fileQueue = vue.ref([]);
|
|
31866
31880
|
let storageFiles = vue.ref([]);
|
|
31867
31881
|
const pk = vue.ref([props2.modelValue].flat().filter(Boolean));
|
|
@@ -31874,7 +31888,6 @@ const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
|
|
|
31874
31888
|
else emit2("update:modelValue", value[0] || void 0);
|
|
31875
31889
|
}, { deep: true });
|
|
31876
31890
|
const isImage = (str) => IMAGE_FORMATS_REGEXP.test(str);
|
|
31877
|
-
const pathToUrl = (path_key) => `${fileBaseUrl.value}/${path_key}`;
|
|
31878
31891
|
const fileToUrl = (file) => URL.createObjectURL(file);
|
|
31879
31892
|
let isDragOver = vue.ref(false);
|
|
31880
31893
|
async function removeFile(path_key) {
|
|
@@ -31943,11 +31956,11 @@ const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
|
|
|
31943
31956
|
files.get(props2.dirPath).then((response) => storageFiles.value.push(...[response.data].flat())).catch(console.error);
|
|
31944
31957
|
}
|
|
31945
31958
|
});
|
|
31946
|
-
const __returned__ = { props: props2, emit: emit2, bagel, fileBaseUrl, fileQueue, get storageFiles() {
|
|
31959
|
+
const __returned__ = { props: props2, emit: emit2, bagel, fileBaseUrl, pathToUrl, fileQueue, get storageFiles() {
|
|
31947
31960
|
return storageFiles;
|
|
31948
31961
|
}, set storageFiles(v) {
|
|
31949
31962
|
storageFiles = v;
|
|
31950
|
-
}, pk, pathKeys, isImage,
|
|
31963
|
+
}, pk, pathKeys, isImage, fileToUrl, get isDragOver() {
|
|
31951
31964
|
return isDragOver;
|
|
31952
31965
|
}, set isDragOver(v) {
|
|
31953
31966
|
isDragOver = v;
|
|
@@ -31983,27 +31996,26 @@ const _hoisted_7$3 = {
|
|
|
31983
31996
|
key: 0,
|
|
31984
31997
|
class: "bgl-multi-preview"
|
|
31985
31998
|
};
|
|
31986
|
-
const _hoisted_8$3 =
|
|
31987
|
-
const _hoisted_9$2 = { class: "
|
|
31988
|
-
const _hoisted_10$2 = {
|
|
31989
|
-
const _hoisted_11$2 = {
|
|
31999
|
+
const _hoisted_8$3 = { class: "m-0" };
|
|
32000
|
+
const _hoisted_9$2 = { class: "no-margin multi-preview-txt" };
|
|
32001
|
+
const _hoisted_10$2 = {
|
|
31990
32002
|
key: 0,
|
|
31991
32003
|
class: "progress"
|
|
31992
32004
|
};
|
|
31993
|
-
const
|
|
32005
|
+
const _hoisted_11$2 = {
|
|
31994
32006
|
key: 1,
|
|
31995
32007
|
class: "bgl-single-preview"
|
|
31996
32008
|
};
|
|
31997
|
-
const
|
|
31998
|
-
const
|
|
32009
|
+
const _hoisted_12$1 = { class: "position-start m-05 flex opacity-7 z-99 gap-025" };
|
|
32010
|
+
const _hoisted_13$1 = {
|
|
31999
32011
|
key: 0,
|
|
32000
32012
|
class: "h-100"
|
|
32001
32013
|
};
|
|
32002
|
-
const
|
|
32014
|
+
const _hoisted_14 = {
|
|
32003
32015
|
key: 0,
|
|
32004
32016
|
class: "progress"
|
|
32005
32017
|
};
|
|
32006
|
-
const
|
|
32018
|
+
const _hoisted_15 = { class: "p-1 flex column hover fileUploadPlaceHolder justify-content-center mb-05" };
|
|
32007
32019
|
function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
|
|
32008
32020
|
const _directive_tooltip = vue.resolveDirective("tooltip");
|
|
32009
32021
|
const _directive_lightbox = vue.resolveDirective("lightbox");
|
|
@@ -32046,29 +32058,35 @@ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
32046
32058
|
class: "txt-gray txt-12 flex"
|
|
32047
32059
|
}, [
|
|
32048
32060
|
vue.createElementVNode("div", _hoisted_4$4, [
|
|
32049
|
-
(vue.
|
|
32050
|
-
|
|
32061
|
+
vue.withDirectives(vue.createVNode($setup["Btn"], {
|
|
32062
|
+
color: "gray",
|
|
32063
|
+
thin: "",
|
|
32064
|
+
icon: "delete",
|
|
32065
|
+
onClick: ($event) => $setup.removeFile(path_key)
|
|
32066
|
+
}, null, 8, ["onClick"]), [
|
|
32067
|
+
[_directive_tooltip, "Delete"]
|
|
32068
|
+
]),
|
|
32069
|
+
vue.withDirectives(vue.createVNode(
|
|
32070
|
+
$setup["Btn"],
|
|
32071
|
+
{
|
|
32072
|
+
color: "gray",
|
|
32073
|
+
thin: "",
|
|
32074
|
+
icon: "autorenew",
|
|
32075
|
+
onClick: $setup.browse
|
|
32076
|
+
},
|
|
32051
32077
|
null,
|
|
32052
|
-
|
|
32053
|
-
|
|
32054
|
-
|
|
32055
|
-
|
|
32056
|
-
|
|
32057
|
-
|
|
32058
|
-
|
|
32059
|
-
|
|
32060
|
-
|
|
32061
|
-
|
|
32062
|
-
|
|
32063
|
-
|
|
32064
|
-
onClick: vue.withModifiers(action.onClick, ["stop"])
|
|
32065
|
-
}), null, 16, ["icon", "onClick"])), [
|
|
32066
|
-
[_directive_tooltip, action.tooltip]
|
|
32067
|
-
]);
|
|
32068
|
-
}),
|
|
32069
|
-
128
|
|
32070
|
-
/* KEYED_FRAGMENT */
|
|
32071
|
-
)),
|
|
32078
|
+
512
|
|
32079
|
+
/* NEED_PATCH */
|
|
32080
|
+
), [
|
|
32081
|
+
[_directive_tooltip, "Replace"]
|
|
32082
|
+
]),
|
|
32083
|
+
vue.createVNode($setup["Btn"], {
|
|
32084
|
+
icon: "download",
|
|
32085
|
+
flat: "",
|
|
32086
|
+
thin: "",
|
|
32087
|
+
href: $setup.pathToUrl(path_key),
|
|
32088
|
+
download: path_key.split("/").pop()
|
|
32089
|
+
}, null, 8, ["href", "download"]),
|
|
32072
32090
|
vue.withDirectives((vue.openBlock(), vue.createElementBlock("p", _hoisted_5$4, [
|
|
32073
32091
|
vue.createTextVNode(
|
|
32074
32092
|
vue.toDisplayString(path_key.split("/").pop()),
|
|
@@ -32120,19 +32138,18 @@ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
32120
32138
|
class: vue.normalizeClass(["multi-image-item-preview", { "bgl_fill-image": $props.fill }])
|
|
32121
32139
|
},
|
|
32122
32140
|
[
|
|
32123
|
-
$setup.isImage(path_key) ? (vue.openBlock(), vue.
|
|
32141
|
+
$setup.isImage(path_key) ? (vue.openBlock(), vue.createBlock($setup["Image"], {
|
|
32124
32142
|
key: 0,
|
|
32125
|
-
|
|
32126
|
-
|
|
32127
|
-
|
|
32128
|
-
}, null, 8, _hoisted_8$3)) : (vue.openBlock(), vue.createBlock($setup["Icon"], {
|
|
32143
|
+
pathKey: path_key,
|
|
32144
|
+
class: "multi-preview"
|
|
32145
|
+
}, null, 8, ["pathKey"])) : (vue.openBlock(), vue.createBlock($setup["Icon"], {
|
|
32129
32146
|
key: 1,
|
|
32130
32147
|
icon: "description",
|
|
32131
32148
|
class: "multi-preview"
|
|
32132
32149
|
})),
|
|
32133
32150
|
vue.createElementVNode(
|
|
32134
32151
|
"p",
|
|
32135
|
-
|
|
32152
|
+
_hoisted_8$3,
|
|
32136
32153
|
vue.toDisplayString(path_key.split("/").pop()),
|
|
32137
32154
|
1
|
|
32138
32155
|
/* TEXT */
|
|
@@ -32142,7 +32159,7 @@ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
32142
32159
|
flat: "",
|
|
32143
32160
|
icon: "delete",
|
|
32144
32161
|
color: "red",
|
|
32145
|
-
onClick:
|
|
32162
|
+
onClick: ($event) => $setup.removeFile(path_key)
|
|
32146
32163
|
}, null, 8, ["onClick"])
|
|
32147
32164
|
],
|
|
32148
32165
|
2
|
|
@@ -32177,7 +32194,7 @@ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
32177
32194
|
})),
|
|
32178
32195
|
vue.createElementVNode(
|
|
32179
32196
|
"p",
|
|
32180
|
-
|
|
32197
|
+
_hoisted_9$2,
|
|
32181
32198
|
vue.toDisplayString(file.name),
|
|
32182
32199
|
1
|
|
32183
32200
|
/* TEXT */
|
|
@@ -32191,7 +32208,7 @@ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
32191
32208
|
[
|
|
32192
32209
|
file.progress < 100 ? (vue.openBlock(), vue.createElementBlock(
|
|
32193
32210
|
"span",
|
|
32194
|
-
|
|
32211
|
+
_hoisted_10$2,
|
|
32195
32212
|
vue.toDisplayString(file.progress.toFixed(0)),
|
|
32196
32213
|
1
|
|
32197
32214
|
/* TEXT */
|
|
@@ -32212,7 +32229,7 @@ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
32212
32229
|
128
|
|
32213
32230
|
/* KEYED_FRAGMENT */
|
|
32214
32231
|
))
|
|
32215
|
-
])) : $setup.pathKeys.length > 0 || $setup.fileQueue.length > 0 ? (vue.openBlock(), vue.createElementBlock("div",
|
|
32232
|
+
])) : $setup.pathKeys.length > 0 || $setup.fileQueue.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_11$2, [
|
|
32216
32233
|
(vue.openBlock(true), vue.createElementBlock(
|
|
32217
32234
|
vue.Fragment,
|
|
32218
32235
|
null,
|
|
@@ -32224,7 +32241,7 @@ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
32224
32241
|
class: vue.normalizeClass(["single-image-item-preview", { "bgl_fill-image": $props.fill }])
|
|
32225
32242
|
},
|
|
32226
32243
|
[
|
|
32227
|
-
vue.createElementVNode("div",
|
|
32244
|
+
vue.createElementVNode("div", _hoisted_12$1, [
|
|
32228
32245
|
vue.withDirectives(vue.createVNode($setup["Btn"], {
|
|
32229
32246
|
color: "gray",
|
|
32230
32247
|
thin: "",
|
|
@@ -32257,12 +32274,12 @@ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
32257
32274
|
[_directive_tooltip, "Download"]
|
|
32258
32275
|
])
|
|
32259
32276
|
]),
|
|
32260
|
-
$setup.isImage(path_key) ? (vue.openBlock(), vue.createElementBlock("div",
|
|
32277
|
+
$setup.isImage(path_key) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_13$1, [
|
|
32261
32278
|
vue.createVNode($setup["Image"], {
|
|
32262
32279
|
class: "single-preview",
|
|
32263
|
-
|
|
32280
|
+
pathKey: path_key,
|
|
32264
32281
|
alt: ""
|
|
32265
|
-
}, null, 8, ["
|
|
32282
|
+
}, null, 8, ["pathKey"])
|
|
32266
32283
|
])) : vue.withDirectives((vue.openBlock(), vue.createBlock(
|
|
32267
32284
|
$setup["Icon"],
|
|
32268
32285
|
{
|
|
@@ -32306,7 +32323,7 @@ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
32306
32323
|
[
|
|
32307
32324
|
file.progress < 100 ? (vue.openBlock(), vue.createElementBlock(
|
|
32308
32325
|
"span",
|
|
32309
|
-
|
|
32326
|
+
_hoisted_14,
|
|
32310
32327
|
vue.toDisplayString(file.progress.toFixed(0)),
|
|
32311
32328
|
1
|
|
32312
32329
|
/* TEXT */
|
|
@@ -32341,7 +32358,7 @@ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
32341
32358
|
fileQueue: $setup.fileQueue,
|
|
32342
32359
|
browse: $setup.browse
|
|
32343
32360
|
}, () => [
|
|
32344
|
-
vue.createElementVNode("p",
|
|
32361
|
+
vue.createElementVNode("p", _hoisted_15, [
|
|
32345
32362
|
vue.createVNode($setup["Icon"], { icon: "upload_2" }),
|
|
32346
32363
|
_cache[4] || (_cache[4] = vue.createTextVNode(" Drop files here or click to upload "))
|
|
32347
32364
|
])
|
|
@@ -32352,7 +32369,7 @@ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
32352
32369
|
))
|
|
32353
32370
|
]);
|
|
32354
32371
|
}
|
|
32355
|
-
const
|
|
32372
|
+
const UploadInput = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["render", _sfc_render$q], ["__scopeId", "data-v-bec8d254"], ["__file", "/Users/natanelyoung/Projects/bagelink/packages/vue/src/components/form/inputs/Upload/UploadInput.vue"]]);
|
|
32356
32373
|
const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
|
|
32357
32374
|
__name: "IframeVue",
|
|
32358
32375
|
props: {
|
|
@@ -36327,7 +36344,7 @@ function dateField(id, label, options) {
|
|
|
36327
36344
|
}
|
|
36328
36345
|
function numField(id, label, options) {
|
|
36329
36346
|
return {
|
|
36330
|
-
$el: "
|
|
36347
|
+
$el: "number",
|
|
36331
36348
|
class: options == null ? void 0 : options.class,
|
|
36332
36349
|
required: options == null ? void 0 : options.required,
|
|
36333
36350
|
defaultValue: options == null ? void 0 : options.defaultValue,
|
|
@@ -36337,12 +36354,9 @@ function numField(id, label, options) {
|
|
|
36337
36354
|
placeholder: options == null ? void 0 : options.placeholder,
|
|
36338
36355
|
helptext: options == null ? void 0 : options.helptext,
|
|
36339
36356
|
attrs: {
|
|
36340
|
-
|
|
36341
|
-
|
|
36342
|
-
|
|
36343
|
-
min: options == null ? void 0 : options.min,
|
|
36344
|
-
max: options == null ? void 0 : options.max
|
|
36345
|
-
}
|
|
36357
|
+
step: options == null ? void 0 : options.step,
|
|
36358
|
+
min: options == null ? void 0 : options.min,
|
|
36359
|
+
max: options == null ? void 0 : options.max
|
|
36346
36360
|
}
|
|
36347
36361
|
};
|
|
36348
36362
|
}
|
|
@@ -36353,6 +36367,14 @@ function frmRow(...children2) {
|
|
|
36353
36367
|
children: children2
|
|
36354
36368
|
};
|
|
36355
36369
|
}
|
|
36370
|
+
function uploadField(id, label, options) {
|
|
36371
|
+
return {
|
|
36372
|
+
$el: "upload",
|
|
36373
|
+
id,
|
|
36374
|
+
label,
|
|
36375
|
+
attrs: options
|
|
36376
|
+
};
|
|
36377
|
+
}
|
|
36356
36378
|
function bglForm(idOrField, ...schema) {
|
|
36357
36379
|
if (typeof idOrField === "string") {
|
|
36358
36380
|
return {
|
|
@@ -37164,7 +37186,7 @@ exports.Title = Title;
|
|
|
37164
37186
|
exports.ToggleInput = ToggleInput;
|
|
37165
37187
|
exports.ToolBar = ToolBar;
|
|
37166
37188
|
exports.TopBar = TopBar;
|
|
37167
|
-
exports.
|
|
37189
|
+
exports.UploadInput = UploadInput;
|
|
37168
37190
|
exports.VIDEO_FORMATS = VIDEO_FORMATS;
|
|
37169
37191
|
exports.VIDEO_FORMATS_REGEXP = VIDEO_FORMATS_REGEXP;
|
|
37170
37192
|
exports.Zoomer = Zoomer;
|