@speckle/ui-components 2.16.1-alpha8 → 2.17.0
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/AvatarEditor-0cf61750.cjs +2 -0
- package/dist/AvatarEditor-0cf61750.cjs.map +1 -0
- package/dist/{AvatarEditor-1bbae637.js → AvatarEditor-8531c565.js} +84 -74
- package/dist/AvatarEditor-8531c565.js.map +1 -0
- package/dist/components/form/ClipboardInput.vue.d.ts +32 -0
- package/dist/components/form/TextInput.vue.d.ts +6 -6
- package/dist/components/form/select/Base.vue.d.ts +8 -4
- package/dist/components/form/select/SourceApps.vue.d.ts +1 -1
- package/dist/components/layout/Dialog.vue.d.ts +5 -0
- package/dist/components/layout/DialogSection.vue.d.ts +55 -0
- package/dist/components/user/Avatar.vue.d.ts +1 -0
- package/dist/components/user/AvatarEditable.vue.d.ts +61 -8
- package/dist/components/user/AvatarEditor.vue.d.ts +7 -1
- package/dist/composables/form/textInput.d.ts +1 -1
- package/dist/composables/user/avatar.d.ts +4 -4
- package/dist/helpers/common/ssr.d.ts +1 -0
- package/dist/helpers/global/accessibility.d.ts +6 -0
- package/dist/lib.cjs +1 -1
- package/dist/lib.cjs.map +1 -1
- package/dist/lib.d.ts +6 -2
- package/dist/lib.js +1852 -1609
- package/dist/lib.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +5 -5
- package/dist/AvatarEditor-1bbae637.js.map +0 -1
- package/dist/AvatarEditor-f4b16291.cjs +0 -2
- package/dist/AvatarEditor-f4b16291.cjs.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),n=require("@heroicons/vue/24/outline"),z=require("vue-advanced-cropper");require("vue-advanced-cropper/dist/style.css");const i=require("./lib.cjs"),c=require("vue-tippy");require("lodash");require("@heroicons/vue/24/solid");require("@heroicons/vue/20/solid");require("vee-validate");require("nanoid");require("@speckle/shared");require("@vueuse/core");require("@headlessui/vue");require("v3-infinite-loading");const q={class:"flex flex-col space-y-2"},R={class:"flex"},B={class:"flex mx-14 space-x-2"},_=e.createElementVNode("div",{class:"grow"},null,-1),F=e.defineComponent({__name:"AvatarEditor",props:{user:null,disabled:{type:Boolean},size:null},emits:["cancel","save"],setup(u,{emit:m}){const d=u,o=e.ref(null),f=e.ref(null),a=e.ref(null),r=e.ref(null),s=e.computed(()=>{switch(d.size){case"xs":return{width:64,height:64};case"xxl":return{width:140,height:140};case"editable":return{width:240,height:240};case"base":default:return{width:32,height:32}}}),h=t=>{r.value&&URL.revokeObjectURL(r.value),r.value=t},p=t=>{const l=t.files[0];l&&(a.value=l)},x=t=>{var l;return t?"border-primary":(l=a.value)!=null&&l.error?"border-danger":"border-outline-2"},g=()=>{var t;return(t=o.value)==null?void 0:t.rotate(-90)},C=()=>{var t;return(t=o.value)==null?void 0:t.rotate(90)},w=()=>{var t;return(t=o.value)==null?void 0:t.flip(1,0)},k=()=>{var t;return(t=o.value)==null?void 0:t.flip(0,1)},y=()=>{var t;return(t=f.value)==null?void 0:t.triggerPicker()},N=()=>{a.value=null,r.value=null},V=()=>{var l;const t=((l=o.value)==null?void 0:l.getResult().canvas.toDataURL("image/jpeg",.85))||null;m("save",t)};return e.onUnmounted(()=>{h(null)}),e.watch(()=>d.user.avatar,t=>{r.value=t||null},{immediate:!0}),e.watch(a,t=>{r.value=t!=null&&t.file&&!t.error?URL.createObjectURL(t.file):null},{deep:!0}),(t,l)=>(e.openBlock(),e.createElementBlock("div",q,[e.createElementVNode("div",R,[e.createElementVNode("div",{class:e.normalizeClass(["flex flex-col px-2 space-y-1",{invisible:!r.value}])},[e.withDirectives(e.createVNode(i.FormButton,{"icon-left":e.unref(n.ArrowUturnLeftIcon),"hide-text":"",size:"sm",outlined:"",onClick:g},null,8,["icon-left"]),[[e.unref(c.directive),"Rotate left"]]),e.withDirectives(e.createVNode(i.FormButton,{"icon-left":e.unref(n.ArrowUturnRightIcon),"hide-text":"",size:"sm",outlined:"",onClick:C},null,8,["icon-left"]),[[e.unref(c.directive),"Rotate right"]]),e.withDirectives(e.createVNode(i.FormButton,{"icon-left":e.unref(n.ArrowUpOnSquareIcon),"hide-text":"",size:"sm",outlined:"",onClick:k},null,8,["icon-left"]),[[e.unref(c.directive),"Flip vertically"]]),e.withDirectives(e.createVNode(i.FormButton,{"icon-left":e.unref(n.ArrowLeftOnRectangleIcon),"hide-text":"",size:"sm",outlined:"",onClick:w},null,8,["icon-left"]),[[e.unref(c.directive),"Flip horizontally"]])],2),r.value?(e.openBlock(),e.createBlock(e.unref(z.Cropper),{key:0,ref_key:"cropper",ref:o,class:"cropper",src:r.value,"stencil-props":{aspectRatio:1/1},canvas:s.value,style:e.normalizeStyle(`width: ${s.value.width}px; height: ${s.value.height}px`)},null,8,["src","canvas","style"])):e.createCommentVNode("",!0),e.createVNode(i.FormFileUploadZone,{ref_key:"uploadZone",ref:f,class:e.normalizeClass(["cropper flex items-center justify-center",{hidden:r.value}]),accept:"image/*","size-limit":5*1024*1024,onFilesSelected:p},{default:e.withCtx(({isDraggingFiles:v,activatorOn:b})=>[e.createElementVNode("div",e.mergeProps({class:["cursor-pointer text-center w-full h-full border-dashed border-2 rounded-md p-4 flex items-center justify-center text-sm text-foreground-2",[x(v)]]},e.toHandlers(b,!0))," Click here or drag and drop an image ",16)]),_:1},8,["class"]),e.createElementVNode("div",{class:e.normalizeClass(["flex flex-col px-2 space-y-1",{invisible:!r.value}])},[e.withDirectives(e.createVNode(i.FormButton,{"icon-left":e.unref(n.PhotoIcon),"hide-text":"",size:"sm",onClick:y},null,8,["icon-left"]),[[e.unref(c.directive),"Replace image"]]),e.withDirectives(e.createVNode(i.FormButton,{"icon-left":e.unref(n.XMarkIcon),"hide-text":"",size:"sm",color:"danger",onClick:N},null,8,["icon-left"]),[[e.unref(c.directive),"Remove"]])],2)]),e.createElementVNode("div",B,[_,e.createVNode(i.FormButton,{color:"secondary",size:"sm",onClick:l[0]||(l[0]=v=>t.$emit("cancel"))},{default:e.withCtx(()=>[e.createTextVNode(" Close ")]),_:1}),e.createVNode(i.FormButton,{size:"sm",disabled:u.disabled,onClick:V},{default:e.withCtx(()=>[e.createTextVNode("Save")]),_:1},8,["disabled"])])]))}});exports.default=F;
|
|
2
|
+
//# sourceMappingURL=AvatarEditor-0cf61750.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AvatarEditor-0cf61750.cjs","sources":["../src/components/user/AvatarEditor.vue"],"sourcesContent":["<template>\n <div class=\"flex flex-col space-y-2\">\n <div class=\"flex\">\n <div class=\"flex flex-col px-2 space-y-1\" :class=\"{ invisible: !activeImageUrl }\">\n <FormButton\n v-tippy=\"'Rotate left'\"\n :icon-left=\"ArrowUturnLeftIcon\"\n hide-text\n size=\"sm\"\n outlined\n @click=\"rotateLeft\"\n />\n <FormButton\n v-tippy=\"'Rotate right'\"\n :icon-left=\"ArrowUturnRightIcon\"\n hide-text\n size=\"sm\"\n outlined\n @click=\"rotateRight\"\n />\n <FormButton\n v-tippy=\"'Flip vertically'\"\n :icon-left=\"ArrowUpOnSquareIcon\"\n hide-text\n size=\"sm\"\n outlined\n @click=\"flipVertical\"\n />\n <FormButton\n v-tippy=\"'Flip horizontally'\"\n :icon-left=\"ArrowLeftOnRectangleIcon\"\n hide-text\n size=\"sm\"\n outlined\n @click=\"flipHorizontal\"\n />\n </div>\n <Cropper\n v-if=\"activeImageUrl\"\n ref=\"cropper\"\n class=\"cropper\"\n :src=\"activeImageUrl\"\n :stencil-props=\"{\n aspectRatio: 1 / 1\n }\"\n :canvas=\"canvasSize\"\n :style=\"`width: ${canvasSize.width}px; height: ${canvasSize.height}px`\"\n />\n <FormFileUploadZone\n ref=\"uploadZone\"\n v-slot=\"{ isDraggingFiles, activatorOn }\"\n class=\"cropper flex items-center justify-center\"\n :class=\"{ hidden: activeImageUrl }\"\n accept=\"image/*\"\n :size-limit=\"5 * 1024 * 1024\"\n @files-selected=\"onFilesSelected\"\n >\n <div\n class=\"cursor-pointer text-center w-full h-full border-dashed border-2 rounded-md p-4 flex items-center justify-center text-sm text-foreground-2\"\n :class=\"[getDashedBorderClasses(isDraggingFiles)]\"\n v-on=\"activatorOn\"\n >\n Click here or drag and drop an image\n </div>\n </FormFileUploadZone>\n <div class=\"flex flex-col px-2 space-y-1\" :class=\"{ invisible: !activeImageUrl }\">\n <FormButton\n v-tippy=\"'Replace image'\"\n :icon-left=\"PhotoIcon\"\n hide-text\n size=\"sm\"\n @click=\"onReplace\"\n />\n <FormButton\n v-tippy=\"'Remove'\"\n :icon-left=\"XMarkIcon\"\n hide-text\n size=\"sm\"\n color=\"danger\"\n @click=\"onRemove\"\n />\n </div>\n </div>\n <div class=\"flex mx-14 space-x-2\">\n <div class=\"grow\" />\n <FormButton color=\"secondary\" size=\"sm\" @click=\"$emit('cancel')\">\n Close\n </FormButton>\n <FormButton size=\"sm\" :disabled=\"disabled\" @click=\"onSave\">Save</FormButton>\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {\n ArrowUturnLeftIcon,\n ArrowUturnRightIcon,\n ArrowLeftOnRectangleIcon,\n ArrowUpOnSquareIcon,\n XMarkIcon,\n PhotoIcon\n} from '@heroicons/vue/24/outline'\nimport { Nullable } from '@speckle/shared'\nimport { onUnmounted, ref, watch, computed } from 'vue'\nimport { Cropper } from 'vue-advanced-cropper'\nimport 'vue-advanced-cropper/dist/style.css'\nimport FormButton from '~~/src/components/form/Button.vue'\nimport FormFileUploadZone from '~~/src/components/form/file-upload/Zone.vue'\nimport { UploadableFileItem } from '~~/src/composables/form/fileUpload'\nimport { AvatarUser, UserAvatarSize } from '~~/src/composables/user/avatar'\nimport { directive as vTippy } from 'vue-tippy'\n\n/**\n * Always try to lazy load this, as it's quite heavy\n */\n\nconst emit = defineEmits([\"cancel\", \"save\"])\n\nconst props = defineProps({\n \"user\": null,\n \"disabled\": { type: Boolean, },\n \"size\": null\n})\n\nconst cropper = ref(\n null as Nullable<{\n flip: (x: number, y: number) => void\n rotate: (angle: number) => void\n getResult: () => { canvas: HTMLCanvasElement }\n }>\n)\nconst uploadZone = ref(null as Nullable<{ triggerPicker: () => void }>)\nconst selectedUpload = ref(null as Nullable<UploadableFileItem>)\nconst activeImageUrl = ref(null as Nullable<string>)\n\nconst canvasSize = computed(() => {\n switch (props.size) {\n case 'xs' || 'sm' || 'lg' || 'xl':\n return { width: 64, height: 64 }\n case 'xxl':\n return { width: 140, height: 140 }\n case 'editable':\n return { width: 240, height: 240 }\n case 'base':\n default:\n return { width: 32, height: 32 }\n }\n})\n\nconst setNewActiveUrl = (url: Nullable<string>) => {\n if (activeImageUrl.value) {\n URL.revokeObjectURL(activeImageUrl.value)\n }\n\n activeImageUrl.value = url\n}\n\nconst onFilesSelected = (params: { files: UploadableFileItem[] }) => {\n const file = params.files[0]\n if (!file) return\n selectedUpload.value = file\n}\n\nconst getDashedBorderClasses = (isDraggingFiles: boolean) => {\n if (isDraggingFiles) return 'border-primary'\n if (selectedUpload.value?.error) return 'border-danger'\n\n return 'border-outline-2'\n}\n\nconst rotateLeft = () => cropper.value?.rotate(-90)\nconst rotateRight = () => cropper.value?.rotate(90)\nconst flipHorizontal = () => cropper.value?.flip(1, 0)\nconst flipVertical = () => cropper.value?.flip(0, 1)\n\nconst onReplace = () => uploadZone.value?.triggerPicker()\nconst onRemove = () => {\n selectedUpload.value = null\n activeImageUrl.value = null\n}\nconst onSave = () => {\n const newUrl = cropper.value?.getResult().canvas.toDataURL('image/jpeg', 0.85) || null\n emit('save', newUrl)\n}\n\nonUnmounted(() => {\n setNewActiveUrl(null)\n})\n\nwatch(\n () => props.user.avatar,\n (newAvatar) => {\n activeImageUrl.value = newAvatar || null\n },\n { immediate: true }\n)\n\nwatch(\n selectedUpload,\n (newUpload) => {\n activeImageUrl.value =\n newUpload?.file && !newUpload.error ? URL.createObjectURL(newUpload.file) : null\n },\n { deep: true }\n)\n</script>\n"],"names":["cropper","ref","uploadZone","selectedUpload","activeImageUrl","canvasSize","computed","props","setNewActiveUrl","url","onFilesSelected","params","file","getDashedBorderClasses","isDraggingFiles","_a","rotateLeft","rotateRight","flipHorizontal","flipVertical","onReplace","onRemove","onSave","newUrl","emit","onUnmounted","watch","newAvatar","newUpload"],"mappings":"syBA2HMA,EAAUC,EAAA,IACd,IAAA,EAMIC,EAAaD,MAAI,IAA+C,EAChEE,EAAiBF,MAAI,IAAoC,EACzDG,EAAiBH,MAAI,IAAwB,EAE7CI,EAAaC,EAAAA,SAAS,IAAM,CAChC,OAAQC,EAAM,KAAM,CAClB,IAAK,KACH,MAAO,CAAE,MAAO,GAAI,OAAQ,EAAG,EACjC,IAAK,MACH,MAAO,CAAE,MAAO,IAAK,OAAQ,GAAI,EACnC,IAAK,WACH,MAAO,CAAE,MAAO,IAAK,OAAQ,GAAI,EACnC,IAAK,OACL,QACE,MAAO,CAAE,MAAO,GAAI,OAAQ,EAAG,CACnC,CAAA,CACD,EAEKC,EAAmBC,GAA0B,CAC7CL,EAAe,OACb,IAAA,gBAAgBA,EAAe,KAAK,EAG1CA,EAAe,MAAQK,CAAA,EAGnBC,EAAmBC,GAA4C,CAC7D,MAAAC,EAAOD,EAAO,MAAM,CAAC,EACtBC,IACLT,EAAe,MAAQS,EAAA,EAGnBC,EAA0BC,GAA6B,OACvD,OAAAA,EAAwB,kBACxBC,EAAAZ,EAAe,QAAf,MAAAY,EAAsB,MAAc,gBAEjC,kBAAA,EAGHC,EAAa,IAAA,OAAM,OAAAD,EAAAf,EAAQ,QAAR,YAAAe,EAAe,OAAO,MACzCE,EAAc,IAAA,OAAM,OAAAF,EAAAf,EAAQ,QAAR,YAAAe,EAAe,OAAO,KAC1CG,EAAiB,IAAA,OAAM,OAAAH,EAAAf,EAAQ,QAAR,YAAAe,EAAe,KAAK,EAAG,IAC9CI,EAAe,IAAA,OAAM,OAAAJ,EAAAf,EAAQ,QAAR,YAAAe,EAAe,KAAK,EAAG,IAE5CK,EAAY,IAAM,OAAA,OAAAL,EAAAb,EAAW,QAAX,YAAAa,EAAkB,iBACpCM,EAAW,IAAM,CACrBlB,EAAe,MAAQ,KACvBC,EAAe,MAAQ,IAAA,EAEnBkB,EAAS,IAAM,OACb,MAAAC,IAASR,EAAAf,EAAQ,QAAR,YAAAe,EAAe,YAAY,OAAO,UAAU,aAAc,OAAS,KAClFS,EAAK,OAAQD,CAAM,CAAA,EAGrBE,OAAAA,EAAAA,YAAY,IAAM,CAChBjB,EAAgB,IAAI,CAAA,CACrB,EAEDkB,EAAA,MACE,IAAMnB,EAAM,KAAK,OAChBoB,GAAc,CACbvB,EAAe,MAAQuB,GAAa,IACtC,EACA,CAAE,UAAW,EAAK,CAAA,EAGpBD,EAAA,MACEvB,EACCyB,GAAc,CACExB,EAAA,MACbwB,GAAA,MAAAA,EAAW,MAAQ,CAACA,EAAU,MAAQ,IAAI,gBAAgBA,EAAU,IAAI,EAAI,IAChF,EACA,CAAE,KAAM,EAAK,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { defineComponent as j, ref as d,
|
|
2
|
-
import { ArrowUturnLeftIcon as
|
|
3
|
-
import { Cropper as
|
|
1
|
+
import { defineComponent as j, ref as d, computed as N, onUnmounted as V, watch as k, openBlock as y, createElementBlock as $, createElementVNode as a, normalizeClass as m, withDirectives as s, createVNode as r, unref as t, createBlock as O, normalizeStyle as D, createCommentVNode as E, withCtx as p, mergeProps as P, toHandlers as Z, createTextVNode as z } from "vue";
|
|
2
|
+
import { ArrowUturnLeftIcon as H, ArrowUturnRightIcon as q, ArrowUpOnSquareIcon as M, ArrowLeftOnRectangleIcon as T, PhotoIcon as X, XMarkIcon as G } from "@heroicons/vue/24/outline";
|
|
3
|
+
import { Cropper as J } from "vue-advanced-cropper";
|
|
4
4
|
import "vue-advanced-cropper/dist/style.css";
|
|
5
|
-
import { FormButton as i, FormFileUploadZone as
|
|
6
|
-
import { directive as
|
|
5
|
+
import { FormButton as i, FormFileUploadZone as K } from "./lib.js";
|
|
6
|
+
import { directive as c } from "vue-tippy";
|
|
7
7
|
import "lodash";
|
|
8
8
|
import "@heroicons/vue/24/solid";
|
|
9
9
|
import "@heroicons/vue/20/solid";
|
|
@@ -13,25 +13,38 @@ import "@speckle/shared";
|
|
|
13
13
|
import "@vueuse/core";
|
|
14
14
|
import "@headlessui/vue";
|
|
15
15
|
import "v3-infinite-loading";
|
|
16
|
-
const
|
|
16
|
+
const Q = { class: "flex flex-col space-y-2" }, W = { class: "flex" }, Y = { class: "flex mx-14 space-x-2" }, ee = /* @__PURE__ */ a("div", { class: "grow" }, null, -1), he = /* @__PURE__ */ j({
|
|
17
17
|
__name: "AvatarEditor",
|
|
18
18
|
props: {
|
|
19
19
|
user: null,
|
|
20
|
-
disabled: { type: Boolean }
|
|
20
|
+
disabled: { type: Boolean },
|
|
21
|
+
size: null
|
|
21
22
|
},
|
|
22
23
|
emits: ["cancel", "save"],
|
|
23
|
-
setup(
|
|
24
|
-
const
|
|
24
|
+
setup(v, { emit: C }) {
|
|
25
|
+
const h = v, n = d(
|
|
25
26
|
null
|
|
26
|
-
),
|
|
27
|
+
), x = d(null), u = d(null), l = d(null), f = N(() => {
|
|
28
|
+
switch (h.size) {
|
|
29
|
+
case "xs":
|
|
30
|
+
return { width: 64, height: 64 };
|
|
31
|
+
case "xxl":
|
|
32
|
+
return { width: 140, height: 140 };
|
|
33
|
+
case "editable":
|
|
34
|
+
return { width: 240, height: 240 };
|
|
35
|
+
case "base":
|
|
36
|
+
default:
|
|
37
|
+
return { width: 32, height: 32 };
|
|
38
|
+
}
|
|
39
|
+
}), R = (e) => {
|
|
27
40
|
l.value && URL.revokeObjectURL(l.value), l.value = e;
|
|
28
|
-
},
|
|
41
|
+
}, _ = (e) => {
|
|
29
42
|
const o = e.files[0];
|
|
30
43
|
o && (u.value = o);
|
|
31
44
|
}, b = (e) => {
|
|
32
45
|
var o;
|
|
33
46
|
return e ? "border-primary" : (o = u.value) != null && o.error ? "border-danger" : "border-outline-2";
|
|
34
|
-
},
|
|
47
|
+
}, w = () => {
|
|
35
48
|
var e;
|
|
36
49
|
return (e = n.value) == null ? void 0 : e.rotate(-90);
|
|
37
50
|
}, L = () => {
|
|
@@ -40,76 +53,76 @@ const G = { class: "flex flex-col space-y-2" }, J = { class: "flex" }, K = { cla
|
|
|
40
53
|
}, U = () => {
|
|
41
54
|
var e;
|
|
42
55
|
return (e = n.value) == null ? void 0 : e.flip(1, 0);
|
|
43
|
-
}, w = () => {
|
|
44
|
-
var e;
|
|
45
|
-
return (e = n.value) == null ? void 0 : e.flip(0, 1);
|
|
46
56
|
}, I = () => {
|
|
47
57
|
var e;
|
|
48
|
-
return (e =
|
|
58
|
+
return (e = n.value) == null ? void 0 : e.flip(0, 1);
|
|
49
59
|
}, A = () => {
|
|
50
|
-
|
|
60
|
+
var e;
|
|
61
|
+
return (e = x.value) == null ? void 0 : e.triggerPicker();
|
|
51
62
|
}, B = () => {
|
|
63
|
+
u.value = null, l.value = null;
|
|
64
|
+
}, F = () => {
|
|
52
65
|
var o;
|
|
53
66
|
const e = ((o = n.value) == null ? void 0 : o.getResult().canvas.toDataURL("image/jpeg", 0.85)) || null;
|
|
54
67
|
C("save", e);
|
|
55
68
|
};
|
|
56
|
-
return
|
|
57
|
-
|
|
58
|
-
}),
|
|
59
|
-
() =>
|
|
69
|
+
return V(() => {
|
|
70
|
+
R(null);
|
|
71
|
+
}), k(
|
|
72
|
+
() => h.user.avatar,
|
|
60
73
|
(e) => {
|
|
61
74
|
l.value = e || null;
|
|
62
75
|
},
|
|
63
76
|
{ immediate: !0 }
|
|
64
|
-
),
|
|
77
|
+
), k(
|
|
65
78
|
u,
|
|
66
79
|
(e) => {
|
|
67
80
|
l.value = e != null && e.file && !e.error ? URL.createObjectURL(e.file) : null;
|
|
68
81
|
},
|
|
69
82
|
{ deep: !0 }
|
|
70
|
-
), (e, o) => (
|
|
71
|
-
a("div",
|
|
83
|
+
), (e, o) => (y(), $("div", Q, [
|
|
84
|
+
a("div", W, [
|
|
72
85
|
a("div", {
|
|
73
|
-
class:
|
|
86
|
+
class: m(["flex flex-col px-2 space-y-1", { invisible: !l.value }])
|
|
74
87
|
}, [
|
|
75
|
-
|
|
76
|
-
"icon-left": t(
|
|
88
|
+
s(r(i, {
|
|
89
|
+
"icon-left": t(H),
|
|
77
90
|
"hide-text": "",
|
|
78
91
|
size: "sm",
|
|
79
92
|
outlined: "",
|
|
80
|
-
onClick:
|
|
93
|
+
onClick: w
|
|
81
94
|
}, null, 8, ["icon-left"]), [
|
|
82
|
-
[t(
|
|
95
|
+
[t(c), "Rotate left"]
|
|
83
96
|
]),
|
|
84
|
-
|
|
85
|
-
"icon-left": t(
|
|
97
|
+
s(r(i, {
|
|
98
|
+
"icon-left": t(q),
|
|
86
99
|
"hide-text": "",
|
|
87
100
|
size: "sm",
|
|
88
101
|
outlined: "",
|
|
89
102
|
onClick: L
|
|
90
103
|
}, null, 8, ["icon-left"]), [
|
|
91
|
-
[t(
|
|
104
|
+
[t(c), "Rotate right"]
|
|
92
105
|
]),
|
|
93
|
-
|
|
94
|
-
"icon-left": t(
|
|
106
|
+
s(r(i, {
|
|
107
|
+
"icon-left": t(M),
|
|
95
108
|
"hide-text": "",
|
|
96
109
|
size: "sm",
|
|
97
110
|
outlined: "",
|
|
98
|
-
onClick:
|
|
111
|
+
onClick: I
|
|
99
112
|
}, null, 8, ["icon-left"]), [
|
|
100
|
-
[t(
|
|
113
|
+
[t(c), "Flip vertically"]
|
|
101
114
|
]),
|
|
102
|
-
|
|
103
|
-
"icon-left": t(
|
|
115
|
+
s(r(i, {
|
|
116
|
+
"icon-left": t(T),
|
|
104
117
|
"hide-text": "",
|
|
105
118
|
size: "sm",
|
|
106
119
|
outlined: "",
|
|
107
120
|
onClick: U
|
|
108
121
|
}, null, 8, ["icon-left"]), [
|
|
109
|
-
[t(
|
|
122
|
+
[t(c), "Flip horizontally"]
|
|
110
123
|
])
|
|
111
124
|
], 2),
|
|
112
|
-
l.value ? (
|
|
125
|
+
l.value ? (y(), O(t(J), {
|
|
113
126
|
key: 0,
|
|
114
127
|
ref_key: "cropper",
|
|
115
128
|
ref: n,
|
|
@@ -118,68 +131,65 @@ const G = { class: "flex flex-col space-y-2" }, J = { class: "flex" }, K = { cla
|
|
|
118
131
|
"stencil-props": {
|
|
119
132
|
aspectRatio: 1 / 1
|
|
120
133
|
},
|
|
121
|
-
canvas:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
style: { width: "250px", height: "250px" }
|
|
126
|
-
}, null, 8, ["src"])) : S("", !0),
|
|
127
|
-
r(X, {
|
|
134
|
+
canvas: f.value,
|
|
135
|
+
style: D(`width: ${f.value.width}px; height: ${f.value.height}px`)
|
|
136
|
+
}, null, 8, ["src", "canvas", "style"])) : E("", !0),
|
|
137
|
+
r(K, {
|
|
128
138
|
ref_key: "uploadZone",
|
|
129
|
-
ref:
|
|
130
|
-
class:
|
|
139
|
+
ref: x,
|
|
140
|
+
class: m(["cropper flex items-center justify-center", { hidden: l.value }]),
|
|
131
141
|
accept: "image/*",
|
|
132
142
|
"size-limit": 5 * 1024 * 1024,
|
|
133
|
-
onFilesSelected:
|
|
143
|
+
onFilesSelected: _
|
|
134
144
|
}, {
|
|
135
|
-
default:
|
|
136
|
-
a("div",
|
|
137
|
-
class: ["cursor-pointer text-center w-full h-full border-dashed border-2 rounded-md p-4 flex items-center justify-center text-sm text-foreground-2", [b(
|
|
138
|
-
},
|
|
145
|
+
default: p(({ isDraggingFiles: g, activatorOn: S }) => [
|
|
146
|
+
a("div", P({
|
|
147
|
+
class: ["cursor-pointer text-center w-full h-full border-dashed border-2 rounded-md p-4 flex items-center justify-center text-sm text-foreground-2", [b(g)]]
|
|
148
|
+
}, Z(S, !0)), " Click here or drag and drop an image ", 16)
|
|
139
149
|
]),
|
|
140
150
|
_: 1
|
|
141
151
|
}, 8, ["class"]),
|
|
142
152
|
a("div", {
|
|
143
|
-
class:
|
|
153
|
+
class: m(["flex flex-col px-2 space-y-1", { invisible: !l.value }])
|
|
144
154
|
}, [
|
|
145
|
-
|
|
146
|
-
"icon-left": t(
|
|
155
|
+
s(r(i, {
|
|
156
|
+
"icon-left": t(X),
|
|
147
157
|
"hide-text": "",
|
|
148
158
|
size: "sm",
|
|
149
|
-
onClick:
|
|
159
|
+
onClick: A
|
|
150
160
|
}, null, 8, ["icon-left"]), [
|
|
151
|
-
[t(
|
|
161
|
+
[t(c), "Replace image"]
|
|
152
162
|
]),
|
|
153
|
-
|
|
154
|
-
"icon-left": t(
|
|
163
|
+
s(r(i, {
|
|
164
|
+
"icon-left": t(G),
|
|
155
165
|
"hide-text": "",
|
|
156
166
|
size: "sm",
|
|
157
167
|
color: "danger",
|
|
158
|
-
onClick:
|
|
168
|
+
onClick: B
|
|
159
169
|
}, null, 8, ["icon-left"]), [
|
|
160
|
-
[t(
|
|
170
|
+
[t(c), "Remove"]
|
|
161
171
|
])
|
|
162
172
|
], 2)
|
|
163
173
|
]),
|
|
164
|
-
a("div",
|
|
165
|
-
|
|
174
|
+
a("div", Y, [
|
|
175
|
+
ee,
|
|
166
176
|
r(i, {
|
|
167
177
|
color: "secondary",
|
|
168
178
|
size: "sm",
|
|
169
|
-
onClick: o[0] || (o[0] = (
|
|
179
|
+
onClick: o[0] || (o[0] = (g) => e.$emit("cancel"))
|
|
170
180
|
}, {
|
|
171
|
-
default:
|
|
172
|
-
|
|
181
|
+
default: p(() => [
|
|
182
|
+
z(" Close ")
|
|
173
183
|
]),
|
|
174
184
|
_: 1
|
|
175
185
|
}),
|
|
176
186
|
r(i, {
|
|
177
187
|
size: "sm",
|
|
178
|
-
disabled:
|
|
179
|
-
onClick:
|
|
188
|
+
disabled: v.disabled,
|
|
189
|
+
onClick: F
|
|
180
190
|
}, {
|
|
181
|
-
default:
|
|
182
|
-
|
|
191
|
+
default: p(() => [
|
|
192
|
+
z("Save")
|
|
183
193
|
]),
|
|
184
194
|
_: 1
|
|
185
195
|
}, 8, ["disabled"])
|
|
@@ -188,6 +198,6 @@ const G = { class: "flex flex-col space-y-2" }, J = { class: "flex" }, K = { cla
|
|
|
188
198
|
}
|
|
189
199
|
});
|
|
190
200
|
export {
|
|
191
|
-
|
|
201
|
+
he as default
|
|
192
202
|
};
|
|
193
|
-
//# sourceMappingURL=AvatarEditor-
|
|
203
|
+
//# sourceMappingURL=AvatarEditor-8531c565.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AvatarEditor-8531c565.js","sources":["../src/components/user/AvatarEditor.vue"],"sourcesContent":["<template>\n <div class=\"flex flex-col space-y-2\">\n <div class=\"flex\">\n <div class=\"flex flex-col px-2 space-y-1\" :class=\"{ invisible: !activeImageUrl }\">\n <FormButton\n v-tippy=\"'Rotate left'\"\n :icon-left=\"ArrowUturnLeftIcon\"\n hide-text\n size=\"sm\"\n outlined\n @click=\"rotateLeft\"\n />\n <FormButton\n v-tippy=\"'Rotate right'\"\n :icon-left=\"ArrowUturnRightIcon\"\n hide-text\n size=\"sm\"\n outlined\n @click=\"rotateRight\"\n />\n <FormButton\n v-tippy=\"'Flip vertically'\"\n :icon-left=\"ArrowUpOnSquareIcon\"\n hide-text\n size=\"sm\"\n outlined\n @click=\"flipVertical\"\n />\n <FormButton\n v-tippy=\"'Flip horizontally'\"\n :icon-left=\"ArrowLeftOnRectangleIcon\"\n hide-text\n size=\"sm\"\n outlined\n @click=\"flipHorizontal\"\n />\n </div>\n <Cropper\n v-if=\"activeImageUrl\"\n ref=\"cropper\"\n class=\"cropper\"\n :src=\"activeImageUrl\"\n :stencil-props=\"{\n aspectRatio: 1 / 1\n }\"\n :canvas=\"canvasSize\"\n :style=\"`width: ${canvasSize.width}px; height: ${canvasSize.height}px`\"\n />\n <FormFileUploadZone\n ref=\"uploadZone\"\n v-slot=\"{ isDraggingFiles, activatorOn }\"\n class=\"cropper flex items-center justify-center\"\n :class=\"{ hidden: activeImageUrl }\"\n accept=\"image/*\"\n :size-limit=\"5 * 1024 * 1024\"\n @files-selected=\"onFilesSelected\"\n >\n <div\n class=\"cursor-pointer text-center w-full h-full border-dashed border-2 rounded-md p-4 flex items-center justify-center text-sm text-foreground-2\"\n :class=\"[getDashedBorderClasses(isDraggingFiles)]\"\n v-on=\"activatorOn\"\n >\n Click here or drag and drop an image\n </div>\n </FormFileUploadZone>\n <div class=\"flex flex-col px-2 space-y-1\" :class=\"{ invisible: !activeImageUrl }\">\n <FormButton\n v-tippy=\"'Replace image'\"\n :icon-left=\"PhotoIcon\"\n hide-text\n size=\"sm\"\n @click=\"onReplace\"\n />\n <FormButton\n v-tippy=\"'Remove'\"\n :icon-left=\"XMarkIcon\"\n hide-text\n size=\"sm\"\n color=\"danger\"\n @click=\"onRemove\"\n />\n </div>\n </div>\n <div class=\"flex mx-14 space-x-2\">\n <div class=\"grow\" />\n <FormButton color=\"secondary\" size=\"sm\" @click=\"$emit('cancel')\">\n Close\n </FormButton>\n <FormButton size=\"sm\" :disabled=\"disabled\" @click=\"onSave\">Save</FormButton>\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {\n ArrowUturnLeftIcon,\n ArrowUturnRightIcon,\n ArrowLeftOnRectangleIcon,\n ArrowUpOnSquareIcon,\n XMarkIcon,\n PhotoIcon\n} from '@heroicons/vue/24/outline'\nimport { Nullable } from '@speckle/shared'\nimport { onUnmounted, ref, watch, computed } from 'vue'\nimport { Cropper } from 'vue-advanced-cropper'\nimport 'vue-advanced-cropper/dist/style.css'\nimport FormButton from '~~/src/components/form/Button.vue'\nimport FormFileUploadZone from '~~/src/components/form/file-upload/Zone.vue'\nimport { UploadableFileItem } from '~~/src/composables/form/fileUpload'\nimport { AvatarUser, UserAvatarSize } from '~~/src/composables/user/avatar'\nimport { directive as vTippy } from 'vue-tippy'\n\n/**\n * Always try to lazy load this, as it's quite heavy\n */\n\nconst emit = defineEmits([\"cancel\", \"save\"])\n\nconst props = defineProps({\n \"user\": null,\n \"disabled\": { type: Boolean, },\n \"size\": null\n})\n\nconst cropper = ref(\n null as Nullable<{\n flip: (x: number, y: number) => void\n rotate: (angle: number) => void\n getResult: () => { canvas: HTMLCanvasElement }\n }>\n)\nconst uploadZone = ref(null as Nullable<{ triggerPicker: () => void }>)\nconst selectedUpload = ref(null as Nullable<UploadableFileItem>)\nconst activeImageUrl = ref(null as Nullable<string>)\n\nconst canvasSize = computed(() => {\n switch (props.size) {\n case 'xs' || 'sm' || 'lg' || 'xl':\n return { width: 64, height: 64 }\n case 'xxl':\n return { width: 140, height: 140 }\n case 'editable':\n return { width: 240, height: 240 }\n case 'base':\n default:\n return { width: 32, height: 32 }\n }\n})\n\nconst setNewActiveUrl = (url: Nullable<string>) => {\n if (activeImageUrl.value) {\n URL.revokeObjectURL(activeImageUrl.value)\n }\n\n activeImageUrl.value = url\n}\n\nconst onFilesSelected = (params: { files: UploadableFileItem[] }) => {\n const file = params.files[0]\n if (!file) return\n selectedUpload.value = file\n}\n\nconst getDashedBorderClasses = (isDraggingFiles: boolean) => {\n if (isDraggingFiles) return 'border-primary'\n if (selectedUpload.value?.error) return 'border-danger'\n\n return 'border-outline-2'\n}\n\nconst rotateLeft = () => cropper.value?.rotate(-90)\nconst rotateRight = () => cropper.value?.rotate(90)\nconst flipHorizontal = () => cropper.value?.flip(1, 0)\nconst flipVertical = () => cropper.value?.flip(0, 1)\n\nconst onReplace = () => uploadZone.value?.triggerPicker()\nconst onRemove = () => {\n selectedUpload.value = null\n activeImageUrl.value = null\n}\nconst onSave = () => {\n const newUrl = cropper.value?.getResult().canvas.toDataURL('image/jpeg', 0.85) || null\n emit('save', newUrl)\n}\n\nonUnmounted(() => {\n setNewActiveUrl(null)\n})\n\nwatch(\n () => props.user.avatar,\n (newAvatar) => {\n activeImageUrl.value = newAvatar || null\n },\n { immediate: true }\n)\n\nwatch(\n selectedUpload,\n (newUpload) => {\n activeImageUrl.value =\n newUpload?.file && !newUpload.error ? URL.createObjectURL(newUpload.file) : null\n },\n { deep: true }\n)\n</script>\n"],"names":["cropper","ref","uploadZone","selectedUpload","activeImageUrl","canvasSize","computed","props","setNewActiveUrl","url","onFilesSelected","params","file","getDashedBorderClasses","isDraggingFiles","_a","rotateLeft","rotateRight","flipHorizontal","flipVertical","onReplace","onRemove","onSave","newUrl","emit","onUnmounted","watch","newAvatar","newUpload"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;iBA2HMA,IAAUC;AAAA,MACd;AAAA,IAAA,GAMIC,IAAaD,EAAI,IAA+C,GAChEE,IAAiBF,EAAI,IAAoC,GACzDG,IAAiBH,EAAI,IAAwB,GAE7CI,IAAaC,EAAS,MAAM;AAChC,cAAQC,EAAM,MAAM;AAAA,QAClB,KAAK;AACH,iBAAO,EAAE,OAAO,IAAI,QAAQ,GAAG;AAAA,QACjC,KAAK;AACH,iBAAO,EAAE,OAAO,KAAK,QAAQ,IAAI;AAAA,QACnC,KAAK;AACH,iBAAO,EAAE,OAAO,KAAK,QAAQ,IAAI;AAAA,QACnC,KAAK;AAAA,QACL;AACE,iBAAO,EAAE,OAAO,IAAI,QAAQ,GAAG;AAAA,MACnC;AAAA,IAAA,CACD,GAEKC,IAAkB,CAACC,MAA0B;AACjD,MAAIL,EAAe,SACb,IAAA,gBAAgBA,EAAe,KAAK,GAG1CA,EAAe,QAAQK;AAAA,IAAA,GAGnBC,IAAkB,CAACC,MAA4C;AAC7D,YAAAC,IAAOD,EAAO,MAAM,CAAC;AAC3B,MAAKC,MACLT,EAAe,QAAQS;AAAA,IAAA,GAGnBC,IAAyB,CAACC,MAA6B;;AACvD,aAAAA,IAAwB,oBACxBC,IAAAZ,EAAe,UAAf,QAAAY,EAAsB,QAAc,kBAEjC;AAAA,IAAA,GAGHC,IAAa,MAAA;;AAAM,cAAAD,IAAAf,EAAQ,UAAR,gBAAAe,EAAe,OAAO;AAAA,OACzCE,IAAc,MAAA;;AAAM,cAAAF,IAAAf,EAAQ,UAAR,gBAAAe,EAAe,OAAO;AAAA,OAC1CG,IAAiB,MAAA;;AAAM,cAAAH,IAAAf,EAAQ,UAAR,gBAAAe,EAAe,KAAK,GAAG;AAAA,OAC9CI,IAAe,MAAA;;AAAM,cAAAJ,IAAAf,EAAQ,UAAR,gBAAAe,EAAe,KAAK,GAAG;AAAA,OAE5CK,IAAY,MAAM;;AAAA,cAAAL,IAAAb,EAAW,UAAX,gBAAAa,EAAkB;AAAA,OACpCM,IAAW,MAAM;AACrB,MAAAlB,EAAe,QAAQ,MACvBC,EAAe,QAAQ;AAAA,IAAA,GAEnBkB,IAAS,MAAM;;AACb,YAAAC,MAASR,IAAAf,EAAQ,UAAR,gBAAAe,EAAe,YAAY,OAAO,UAAU,cAAc,UAAS;AAClF,MAAAS,EAAK,QAAQD,CAAM;AAAA,IAAA;AAGrB,WAAAE,EAAY,MAAM;AAChB,MAAAjB,EAAgB,IAAI;AAAA,IAAA,CACrB,GAEDkB;AAAA,MACE,MAAMnB,EAAM,KAAK;AAAA,MACjB,CAACoB,MAAc;AACb,QAAAvB,EAAe,QAAQuB,KAAa;AAAA,MACtC;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IAAA,GAGpBD;AAAA,MACEvB;AAAA,MACA,CAACyB,MAAc;AACE,QAAAxB,EAAA,QACbwB,KAAA,QAAAA,EAAW,QAAQ,CAACA,EAAU,QAAQ,IAAI,gBAAgBA,EAAU,IAAI,IAAI;AAAA,MAChF;AAAA,MACA,EAAE,MAAM,GAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{
|
|
2
|
+
value: {
|
|
3
|
+
type: import("vue").PropType<string>;
|
|
4
|
+
required: true;
|
|
5
|
+
};
|
|
6
|
+
rows: {
|
|
7
|
+
type: import("vue").PropType<number>;
|
|
8
|
+
};
|
|
9
|
+
isMultiline: {
|
|
10
|
+
type: import("vue").PropType<boolean>;
|
|
11
|
+
default: boolean;
|
|
12
|
+
};
|
|
13
|
+
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
14
|
+
copy: (val: string) => void;
|
|
15
|
+
}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
16
|
+
value: {
|
|
17
|
+
type: import("vue").PropType<string>;
|
|
18
|
+
required: true;
|
|
19
|
+
};
|
|
20
|
+
rows: {
|
|
21
|
+
type: import("vue").PropType<number>;
|
|
22
|
+
};
|
|
23
|
+
isMultiline: {
|
|
24
|
+
type: import("vue").PropType<boolean>;
|
|
25
|
+
default: boolean;
|
|
26
|
+
};
|
|
27
|
+
}>> & {
|
|
28
|
+
onCopy?: ((val: string) => any) | undefined;
|
|
29
|
+
}, {
|
|
30
|
+
isMultiline: boolean;
|
|
31
|
+
}, {}>;
|
|
32
|
+
export default _default;
|
|
@@ -2,7 +2,7 @@ import { RuleExpression } from 'vee-validate';
|
|
|
2
2
|
import { ConcreteComponent, PropType } from 'vue';
|
|
3
3
|
import { Optional } from '@speckle/shared';
|
|
4
4
|
type InputSize = 'sm' | 'base' | 'lg' | 'xl';
|
|
5
|
-
type InputColor = 'page' | 'foundation';
|
|
5
|
+
type InputColor = 'page' | 'foundation' | 'transparent';
|
|
6
6
|
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
7
7
|
/**
|
|
8
8
|
* Input "type" value (changes behaviour & look)
|
|
@@ -147,8 +147,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
|
147
147
|
value: string;
|
|
148
148
|
}) => void;
|
|
149
149
|
clear: () => void;
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
focus: () => void;
|
|
151
|
+
blur: () => void;
|
|
152
152
|
}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
153
153
|
/**
|
|
154
154
|
* Input "type" value (changes behaviour & look)
|
|
@@ -281,8 +281,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
|
281
281
|
default: string;
|
|
282
282
|
};
|
|
283
283
|
}>> & {
|
|
284
|
-
|
|
285
|
-
|
|
284
|
+
onFocus?: (() => any) | undefined;
|
|
285
|
+
onBlur?: (() => any) | undefined;
|
|
286
286
|
onChange?: ((val: {
|
|
287
287
|
event?: Event | undefined;
|
|
288
288
|
value: string;
|
|
@@ -313,8 +313,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
|
313
313
|
showClear: boolean;
|
|
314
314
|
useLabelInErrors: boolean;
|
|
315
315
|
hideErrorMessage: boolean;
|
|
316
|
-
wrapperClasses: string;
|
|
317
316
|
inputClasses: string;
|
|
317
|
+
wrapperClasses: string;
|
|
318
318
|
}, {}>, {
|
|
319
319
|
"input-right"?(_: {}): any;
|
|
320
320
|
}>;
|
|
@@ -19,7 +19,6 @@ declare const _default: <SingleItem extends string | number | Record<string, unk
|
|
|
19
19
|
help?: Optional<string>;
|
|
20
20
|
showLabel?: boolean | undefined;
|
|
21
21
|
useLabelInErrors?: boolean | undefined;
|
|
22
|
-
clearable?: boolean | undefined;
|
|
23
22
|
items?: SingleItem[] | undefined;
|
|
24
23
|
filterPredicate?: Optional<(item: SingleItem, searchString: string) => boolean>;
|
|
25
24
|
disabledItemPredicate?: Optional<(item: SingleItem) => boolean>;
|
|
@@ -28,8 +27,10 @@ declare const _default: <SingleItem extends string | number | Record<string, unk
|
|
|
28
27
|
buttonStyle?: Optional<"base" | "simple" | "tinted">;
|
|
29
28
|
hideCheckmarks?: Optional<boolean>;
|
|
30
29
|
allowUnset?: Optional<boolean>;
|
|
30
|
+
clearable?: boolean | undefined;
|
|
31
31
|
fixedHeight?: boolean | undefined;
|
|
32
32
|
fullyControlValue?: boolean | undefined;
|
|
33
|
+
mountMenuOnBody?: boolean | undefined;
|
|
33
34
|
class?: unknown;
|
|
34
35
|
style?: unknown;
|
|
35
36
|
readonly placeholder?: string | undefined;
|
|
@@ -98,7 +99,6 @@ declare const _default: <SingleItem extends string | number | Record<string, unk
|
|
|
98
99
|
help?: Optional<string>;
|
|
99
100
|
showLabel?: boolean | undefined;
|
|
100
101
|
useLabelInErrors?: boolean | undefined;
|
|
101
|
-
clearable?: boolean | undefined;
|
|
102
102
|
items?: SingleItem[] | undefined;
|
|
103
103
|
filterPredicate?: Optional<(item: SingleItem, searchString: string) => boolean>;
|
|
104
104
|
disabledItemPredicate?: Optional<(item: SingleItem) => boolean>;
|
|
@@ -107,8 +107,10 @@ declare const _default: <SingleItem extends string | number | Record<string, unk
|
|
|
107
107
|
buttonStyle?: Optional<"base" | "simple" | "tinted">;
|
|
108
108
|
hideCheckmarks?: Optional<boolean>;
|
|
109
109
|
allowUnset?: Optional<boolean>;
|
|
110
|
+
clearable?: boolean | undefined;
|
|
110
111
|
fixedHeight?: boolean | undefined;
|
|
111
112
|
fullyControlValue?: boolean | undefined;
|
|
113
|
+
mountMenuOnBody?: boolean | undefined;
|
|
112
114
|
class?: unknown;
|
|
113
115
|
style?: unknown;
|
|
114
116
|
readonly placeholder?: string | undefined;
|
|
@@ -196,7 +198,6 @@ declare const _default: <SingleItem extends string | number | Record<string, unk
|
|
|
196
198
|
help?: Optional<string>;
|
|
197
199
|
showLabel?: boolean | undefined;
|
|
198
200
|
useLabelInErrors?: boolean | undefined;
|
|
199
|
-
clearable?: boolean | undefined;
|
|
200
201
|
items?: SingleItem[] | undefined;
|
|
201
202
|
filterPredicate?: Optional<(item: SingleItem, searchString: string) => boolean>;
|
|
202
203
|
disabledItemPredicate?: Optional<(item: SingleItem) => boolean>;
|
|
@@ -205,8 +206,10 @@ declare const _default: <SingleItem extends string | number | Record<string, unk
|
|
|
205
206
|
buttonStyle?: Optional<"base" | "simple" | "tinted">;
|
|
206
207
|
hideCheckmarks?: Optional<boolean>;
|
|
207
208
|
allowUnset?: Optional<boolean>;
|
|
209
|
+
clearable?: boolean | undefined;
|
|
208
210
|
fixedHeight?: boolean | undefined;
|
|
209
211
|
fullyControlValue?: boolean | undefined;
|
|
212
|
+
mountMenuOnBody?: boolean | undefined;
|
|
210
213
|
class?: unknown;
|
|
211
214
|
style?: unknown;
|
|
212
215
|
readonly placeholder?: string | undefined;
|
|
@@ -297,7 +300,6 @@ declare const _default: <SingleItem extends string | number | Record<string, unk
|
|
|
297
300
|
help?: Optional<string>;
|
|
298
301
|
showLabel?: boolean | undefined;
|
|
299
302
|
useLabelInErrors?: boolean | undefined;
|
|
300
|
-
clearable?: boolean | undefined;
|
|
301
303
|
items?: SingleItem[] | undefined;
|
|
302
304
|
filterPredicate?: Optional<(item: SingleItem, searchString: string) => boolean>;
|
|
303
305
|
disabledItemPredicate?: Optional<(item: SingleItem) => boolean>;
|
|
@@ -306,8 +308,10 @@ declare const _default: <SingleItem extends string | number | Record<string, unk
|
|
|
306
308
|
buttonStyle?: Optional<"base" | "simple" | "tinted">;
|
|
307
309
|
hideCheckmarks?: Optional<boolean>;
|
|
308
310
|
allowUnset?: Optional<boolean>;
|
|
311
|
+
clearable?: boolean | undefined;
|
|
309
312
|
fixedHeight?: boolean | undefined;
|
|
310
313
|
fullyControlValue?: boolean | undefined;
|
|
314
|
+
mountMenuOnBody?: boolean | undefined;
|
|
311
315
|
class?: unknown;
|
|
312
316
|
style?: unknown;
|
|
313
317
|
readonly placeholder?: string | undefined;
|
|
@@ -133,9 +133,9 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
133
133
|
modelValue: ValueType;
|
|
134
134
|
multiple: boolean;
|
|
135
135
|
showLabel: boolean;
|
|
136
|
-
clearable: boolean;
|
|
137
136
|
items: Optional<SourceAppDefinition[]>;
|
|
138
137
|
searchPlaceholder: string;
|
|
138
|
+
clearable: boolean;
|
|
139
139
|
selectorPlaceholder: Optional<string>;
|
|
140
140
|
}, {}>;
|
|
141
141
|
export default _default;
|
|
@@ -21,6 +21,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
|
21
21
|
text: string;
|
|
22
22
|
props: Record<string, unknown>;
|
|
23
23
|
onClick?: (() => void) | undefined;
|
|
24
|
+
disabled?: boolean | undefined;
|
|
25
|
+
submit?: boolean | undefined;
|
|
24
26
|
}[]>;
|
|
25
27
|
};
|
|
26
28
|
onSubmit: {
|
|
@@ -51,6 +53,8 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
|
51
53
|
text: string;
|
|
52
54
|
props: Record<string, unknown>;
|
|
53
55
|
onClick?: (() => void) | undefined;
|
|
56
|
+
disabled?: boolean | undefined;
|
|
57
|
+
submit?: boolean | undefined;
|
|
54
58
|
}[]>;
|
|
55
59
|
};
|
|
56
60
|
onSubmit: {
|
|
@@ -60,6 +64,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
|
60
64
|
"onUpdate:open"?: ((v: boolean) => any) | undefined;
|
|
61
65
|
"onFully-closed"?: (() => any) | undefined;
|
|
62
66
|
}, {}, {}>, {
|
|
67
|
+
header?(_: {}): any;
|
|
63
68
|
default?(_: {}): any;
|
|
64
69
|
buttons?(_: {}): any;
|
|
65
70
|
}>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ConcreteComponent } from 'vue';
|
|
2
|
+
type TitleColor = 'default' | 'danger' | 'warning' | 'success' | 'secondary' | 'info';
|
|
3
|
+
type FormButtonColor = 'default' | 'invert' | 'danger' | 'warning' | 'success' | 'card' | 'secondary' | 'info';
|
|
4
|
+
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
5
|
+
title: StringConstructor;
|
|
6
|
+
borderT: BooleanConstructor;
|
|
7
|
+
borderB: BooleanConstructor;
|
|
8
|
+
allowOverflow: BooleanConstructor;
|
|
9
|
+
titleColor: {
|
|
10
|
+
type: () => TitleColor;
|
|
11
|
+
default: string;
|
|
12
|
+
};
|
|
13
|
+
button: () => {
|
|
14
|
+
expandContent?: boolean | undefined;
|
|
15
|
+
text: string;
|
|
16
|
+
to?: string | undefined;
|
|
17
|
+
color: FormButtonColor;
|
|
18
|
+
iconRight?: ConcreteComponent | undefined;
|
|
19
|
+
onClick?: (() => void) | undefined;
|
|
20
|
+
} | undefined;
|
|
21
|
+
alwaysOpen: BooleanConstructor;
|
|
22
|
+
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
23
|
+
title: StringConstructor;
|
|
24
|
+
borderT: BooleanConstructor;
|
|
25
|
+
borderB: BooleanConstructor;
|
|
26
|
+
allowOverflow: BooleanConstructor;
|
|
27
|
+
titleColor: {
|
|
28
|
+
type: () => TitleColor;
|
|
29
|
+
default: string;
|
|
30
|
+
};
|
|
31
|
+
button: () => {
|
|
32
|
+
expandContent?: boolean | undefined;
|
|
33
|
+
text: string;
|
|
34
|
+
to?: string | undefined;
|
|
35
|
+
color: FormButtonColor;
|
|
36
|
+
iconRight?: ConcreteComponent | undefined;
|
|
37
|
+
onClick?: (() => void) | undefined;
|
|
38
|
+
} | undefined;
|
|
39
|
+
alwaysOpen: BooleanConstructor;
|
|
40
|
+
}>>, {
|
|
41
|
+
borderT: boolean;
|
|
42
|
+
borderB: boolean;
|
|
43
|
+
allowOverflow: boolean;
|
|
44
|
+
titleColor: TitleColor;
|
|
45
|
+
alwaysOpen: boolean;
|
|
46
|
+
}, {}>, {
|
|
47
|
+
icon?(_: {}): any;
|
|
48
|
+
default?(_: {}): any;
|
|
49
|
+
}>;
|
|
50
|
+
export default _default;
|
|
51
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
52
|
+
new (): {
|
|
53
|
+
$slots: S;
|
|
54
|
+
};
|
|
55
|
+
};
|