@leaflink/stash 50.4.0 → 50.5.1
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/Carousel.js +321 -324
- package/dist/Carousel.js.map +1 -1
- package/dist/Carousel.vue.d.ts +4 -0
- package/dist/DataViewToolbar.js +24 -18
- package/dist/DataViewToolbar.js.map +1 -1
- package/dist/DatePicker.vue.d.ts +1 -1
- package/dist/Filters.vue.d.ts +9 -9
- package/dist/Image.js +6 -166
- package/dist/Image.js.map +1 -1
- package/dist/Image.vue_vue_type_script_setup_true_lang-YUNunj71.js +169 -0
- package/dist/Image.vue_vue_type_script_setup_true_lang-YUNunj71.js.map +1 -0
- package/dist/InlineEdit.vue.d.ts +1 -1
- package/dist/ListView.vue.d.ts +9 -9
- package/dist/Module.vue.d.ts +1 -1
- package/dist/Textarea.js +25 -20
- package/dist/Textarea.js.map +1 -1
- package/dist/Thumbnail.js +91 -0
- package/dist/Thumbnail.js.map +1 -0
- package/dist/Thumbnail.vue.d.ts +63 -0
- package/dist/ThumbnailEmpty.js +33 -0
- package/dist/ThumbnailEmpty.js.map +1 -0
- package/dist/ThumbnailEmpty.vue.d.ts +9 -0
- package/dist/ThumbnailGroup.js +73 -0
- package/dist/ThumbnailGroup.js.map +1 -0
- package/dist/ThumbnailGroup.keys-D6WL5xQ5.js +16 -0
- package/dist/ThumbnailGroup.keys-D6WL5xQ5.js.map +1 -0
- package/dist/ThumbnailGroup.vue.d.ts +191 -0
- package/dist/Tooltip.js +6 -6
- package/dist/components.css +1 -1
- package/dist/{index-Ck3Dl09q.js → index-Bbc2pg2X.js} +3 -3
- package/dist/index-Bbc2pg2X.js.map +1 -0
- package/dist/locale.js +16 -12
- package/dist/locale.js.map +1 -1
- package/dist/useSortable.js +1 -1
- package/package.json +2 -1
- package/dist/index-Ck3Dl09q.js.map +0 -1
package/dist/Image.js
CHANGED
|
@@ -1,169 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import q from "lodash-es/merge";
|
|
4
|
-
const j = {
|
|
5
|
-
xs: 160,
|
|
6
|
-
sm: 338,
|
|
7
|
-
md: 676,
|
|
8
|
-
lg: 1352,
|
|
9
|
-
xl: 2704
|
|
10
|
-
};
|
|
11
|
-
var z = /* @__PURE__ */ ((t) => (t.None = "none", t.Rounded = "rounded", t.Circle = "circle", t))(z || {}), b = /* @__PURE__ */ ((t) => (t.Cloudinary = "cloudinary", t.Static = "static", t))(b || {});
|
|
12
|
-
function P(t) {
|
|
13
|
-
return (s) => t[s] || s;
|
|
14
|
-
}
|
|
15
|
-
function G({
|
|
16
|
-
formatter: t = (m, c) => `${m}=${c}`,
|
|
17
|
-
keyMap: s,
|
|
18
|
-
joinWith: i = "/",
|
|
19
|
-
valueMap: e = {}
|
|
20
|
-
} = {}) {
|
|
21
|
-
const m = typeof s == "function" ? s : P(s || {});
|
|
22
|
-
return Object.keys(e).forEach((c) => {
|
|
23
|
-
typeof e[c] != "function" && (e[c] = P(e[c]));
|
|
24
|
-
}), (c = {}) => Object.entries(c).map(([l, d]) => {
|
|
25
|
-
const p = e[l], g = m(l);
|
|
26
|
-
let v = d;
|
|
27
|
-
return typeof p == "function" && (v = p(c[l])), t(g, v);
|
|
28
|
-
}).join(i);
|
|
29
|
-
}
|
|
30
|
-
const Q = N.CLOUDINARY, T = (t) => t.startsWith("#") ? t.replace("#", "rgb_") : t, E = G({
|
|
31
|
-
keyMap: {
|
|
32
|
-
fit: "c",
|
|
33
|
-
width: "w",
|
|
34
|
-
height: "h",
|
|
35
|
-
format: "f",
|
|
36
|
-
quality: "q",
|
|
37
|
-
background: "b",
|
|
38
|
-
dpr: "dpr"
|
|
39
|
-
},
|
|
40
|
-
valueMap: {
|
|
41
|
-
fit: {
|
|
42
|
-
fill: "fill",
|
|
43
|
-
inside: "pad",
|
|
44
|
-
outside: "lpad",
|
|
45
|
-
cover: "fit",
|
|
46
|
-
contain: "scale"
|
|
47
|
-
},
|
|
48
|
-
format: {
|
|
49
|
-
jpeg: "jpg"
|
|
50
|
-
},
|
|
51
|
-
background(t) {
|
|
52
|
-
return T(t);
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
joinWith: ",",
|
|
56
|
-
formatter: (t, s) => `${t}_${s}`
|
|
57
|
-
}), D = {
|
|
58
|
-
format: "auto",
|
|
59
|
-
quality: "auto:best"
|
|
60
|
-
};
|
|
61
|
-
function F(t, s = {}) {
|
|
62
|
-
const i = q(D, s), e = E(i);
|
|
63
|
-
return `${Q}/${e}/${t}`;
|
|
64
|
-
}
|
|
65
|
-
const V = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
66
|
-
__proto__: null,
|
|
67
|
-
getImageUrl: F,
|
|
68
|
-
operationsGenerator: E
|
|
69
|
-
}, Symbol.toStringTag, { value: "Module" }));
|
|
70
|
-
function H(t = "") {
|
|
71
|
-
return t;
|
|
72
|
-
}
|
|
73
|
-
const Y = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
74
|
-
__proto__: null,
|
|
75
|
-
getImageUrl: H
|
|
76
|
-
}, Symbol.toStringTag, { value: "Module" })), Z = {
|
|
77
|
-
cloudinary: V,
|
|
78
|
-
static: Y
|
|
79
|
-
}, J = ["src"], et = /* @__PURE__ */ W({
|
|
80
|
-
inheritAttrs: !1,
|
|
81
|
-
__name: "Image",
|
|
82
|
-
props: {
|
|
83
|
-
src: { default: "" },
|
|
84
|
-
srcset: { default: void 0 },
|
|
85
|
-
sizes: { default: void 0 },
|
|
86
|
-
provider: { default: void 0 },
|
|
87
|
-
radius: { default: "none" },
|
|
88
|
-
staticPath: { default: void 0 }
|
|
89
|
-
},
|
|
90
|
-
setup(t) {
|
|
91
|
-
const s = {
|
|
92
|
-
md: w.md,
|
|
93
|
-
lg: w.lg
|
|
94
|
-
}, i = C("stashOptions"), e = t, m = a(() => {
|
|
95
|
-
const { src: r, ...n } = M();
|
|
96
|
-
return n.sizes = v.value, n.srcset = I.value, n;
|
|
97
|
-
}), c = a(() => {
|
|
98
|
-
try {
|
|
99
|
-
return new URL(e.src), !0;
|
|
100
|
-
} catch {
|
|
101
|
-
return !1;
|
|
102
|
-
}
|
|
103
|
-
}), S = a(() => {
|
|
104
|
-
var r;
|
|
105
|
-
return e.provider || ((r = i == null ? void 0 : i.images) == null ? void 0 : r.provider) || b.Static;
|
|
106
|
-
}), l = a(() => e.staticPath ?? (i == null ? void 0 : i.staticPath)), d = a(() => S.value === b.Static), p = a(() => Z[S.value]), g = a(() => d.value ? _() : _({ width: j.md })), v = a(() => e.sizes ? O() : e.sizes), I = a(() => e.sizes && !e.srcset && !d.value ? R() : e.srcset), U = a(() => e.sizes ? x(e.sizes) : []);
|
|
107
|
-
function _(r = {}) {
|
|
108
|
-
if (d.value && c.value)
|
|
109
|
-
return e.src;
|
|
110
|
-
const n = d.value && l.value ? `${l.value}/${e.src}` : e.src;
|
|
111
|
-
return p.value.getImageUrl(n, r);
|
|
112
|
-
}
|
|
113
|
-
function R() {
|
|
114
|
-
return Object.values(j).map((r) => `${_({ width: r })} ${r}w`).join(", ");
|
|
115
|
-
}
|
|
116
|
-
function O() {
|
|
117
|
-
var r;
|
|
118
|
-
return (r = e.sizes) != null && r.includes("(") ? e.sizes : U.value.map((n) => `${n.mediaQuery ? n.mediaQuery + " " : ""}${n.size}`).join(", ");
|
|
119
|
-
}
|
|
120
|
-
function x(r = "") {
|
|
121
|
-
const n = [], h = {
|
|
122
|
-
default: "100vw"
|
|
123
|
-
};
|
|
124
|
-
if (typeof r == "string") {
|
|
125
|
-
const f = r.split(/[\s]+/).filter((u) => u);
|
|
126
|
-
for (const u of f) {
|
|
127
|
-
const o = u.split(":");
|
|
128
|
-
if (o.length !== 2) {
|
|
129
|
-
h.default = o[0].trim();
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
h[o[0].trim()] = o[1].trim();
|
|
133
|
-
}
|
|
134
|
-
} else
|
|
135
|
-
throw new Error("`sizes` needs to be a string");
|
|
136
|
-
for (const f in h) {
|
|
137
|
-
const u = parseInt(s[f] || 0);
|
|
138
|
-
let o = String(h[f]);
|
|
139
|
-
const y = o.endsWith("vw");
|
|
140
|
-
if (!y && /^\d+$/.test(o) && (o = `${o}px`), !y && o.endsWith("%"))
|
|
141
|
-
throw new Error("Image: `sizes` does not support percentage values");
|
|
142
|
-
const A = {
|
|
143
|
-
mediaQuery: u ? `(min-width: ${u}px)` : "",
|
|
144
|
-
screenMinWidth: u,
|
|
145
|
-
size: o
|
|
146
|
-
};
|
|
147
|
-
n.push(A);
|
|
148
|
-
}
|
|
149
|
-
return n.sort((f, u) => f.screenMinWidth > u.screenMinWidth ? -1 : 1), n;
|
|
150
|
-
}
|
|
151
|
-
return (r, n) => (B(), k("img", L({
|
|
152
|
-
ref: "img",
|
|
153
|
-
key: g.value,
|
|
154
|
-
"data-test": "stash-image",
|
|
155
|
-
class: ["stash-image", {
|
|
156
|
-
"tw-rounded": e.radius === $(z).Rounded,
|
|
157
|
-
"tw-rounded-full": e.radius === $(z).Circle
|
|
158
|
-
}],
|
|
159
|
-
src: g.value
|
|
160
|
-
}, m.value), null, 16, J));
|
|
161
|
-
}
|
|
162
|
-
});
|
|
1
|
+
import { _ as s } from "./Image.vue_vue_type_script_setup_true_lang-YUNunj71.js";
|
|
2
|
+
import { a as m, I as o, S as f } from "./Image.vue_vue_type_script_setup_true_lang-YUNunj71.js";
|
|
163
3
|
export {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
4
|
+
m as ImageProviders,
|
|
5
|
+
o as ImageRadius,
|
|
6
|
+
f as Screens,
|
|
7
|
+
s as default
|
|
168
8
|
};
|
|
169
9
|
//# sourceMappingURL=Image.js.map
|
package/dist/Image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.js","sources":["../src/components/Image/Image.types.ts","../src/components/Image/providers/utils.ts","../src/components/Image/providers/cloudinary.ts","../src/components/Image/providers/static.ts","../src/components/Image/providers/index.ts","../src/components/Image/Image.vue"],"sourcesContent":["// Sizes used to generate resized and optimized versions of an image.\n// Generated in `srcset`, and informed by `sizes`.\nexport const Screens = {\n xs: 160,\n sm: 338,\n md: 676,\n lg: 1352,\n xl: 2704,\n} as const;\n\nexport interface ImageSizeCondition {\n mediaQuery: string;\n screenMinWidth: number;\n size: string;\n}\n\nexport enum ImageRadius {\n None = 'none',\n Rounded = 'rounded',\n Circle = 'circle',\n}\n\nexport type ImageRadii = `${ImageRadius}`;\n\nexport enum ImageProviders {\n Cloudinary = 'cloudinary',\n Static = 'static',\n}\n","export interface ImageModifiers {\n format?: string;\n height?: number;\n width?: number;\n [key: string]: any /* eslint-disable-line @typescript-eslint/no-explicit-any */;\n}\n\nexport type ParamFormatter = (key: string, value: string) => string;\n\nexport type ParamMapper = { [key: string]: string } | ((key: string) => string);\n\nexport interface ProviderUrlBuilder {\n keyMap?: ParamMapper;\n formatter?: ParamFormatter;\n joinWith?: string;\n valueMap?: {\n [key: string]: ParamMapper;\n };\n}\n\nfunction createMapper(map: ParamMapper) {\n return (key: string) => {\n return map[key] || key;\n };\n}\n\n/**\n * Builds the parameterized Cloudinary url\n */\nexport function buildProviderUrl({\n formatter = (key, value) => `${key}=${value}`,\n keyMap,\n joinWith = '/',\n valueMap = {},\n}: ProviderUrlBuilder = {}) {\n const keyMapper = typeof keyMap === 'function' ? keyMap : createMapper(keyMap || {});\n\n Object.keys(valueMap).forEach((valueKey) => {\n if (typeof valueMap[valueKey] !== 'function') {\n valueMap[valueKey] = createMapper(valueMap[valueKey]);\n }\n });\n\n return (modifiers: { [key: string]: string } = {}) => {\n const operations = Object.entries(modifiers).map(([key, value]) => {\n const mapper = valueMap[key];\n const newKey = keyMapper(key);\n let newVal = value;\n\n if (typeof mapper === 'function') {\n newVal = mapper(modifiers[key]);\n }\n\n return formatter(newKey, newVal);\n });\n\n return operations.join(joinWith);\n };\n}\n\n/**\n * Checks if a (sub)domain is included in a list of acceptable domains\n * @param str the (sub)domain to check\n * @param domains an array of valid domains\n */\nexport function isDomainValid(str = '', domains: string[] = []): boolean {\n const url = new URL(str);\n const host = url.host;\n\n return domains.some((domain) => {\n if (domain === host) {\n return true;\n }\n\n return domain.endsWith(`.${host}`);\n });\n}\n","import merge from 'lodash-es/merge';\n\nimport { IMAGE_PROVIDER_URLS } from '../../../constants';\nimport { buildProviderUrl, ImageModifiers } from './utils';\n\nconst BASE_URL = IMAGE_PROVIDER_URLS.CLOUDINARY;\n\nconst convertHextoRGBFormat = (value: string) => (value.startsWith('#') ? value.replace('#', 'rgb_') : value);\n\n/**\n * Parameters (option and value pairs) that can be used in the <transformations> segment of the Cloudinary transformation URL.\n * Options and their respective values are connected by an underscore (eg `w_250` for width of 250px.).\n * Multiple parameters are comma separated (eg. `w_250,h_250`).\n *\n * `keyMap` maps the option to its option prefix.\n * `valueMap` is used for grouping options using the same `keyMap` value under a 'category', allowing for easier usage and custom labelling in the component context.\n *\n * Transformation URL structure:\n * https://cloudinary.com/documentation/transformation_reference\n *\n * Transformation URL parameters (options and values):\n * https://cloudinary.com/documentation/image_transformations#transformation_url_syntax\n *\n */\nexport const operationsGenerator = buildProviderUrl({\n keyMap: {\n fit: 'c',\n width: 'w',\n height: 'h',\n format: 'f',\n quality: 'q',\n background: 'b',\n dpr: 'dpr',\n },\n valueMap: {\n fit: {\n fill: 'fill',\n inside: 'pad',\n outside: 'lpad',\n cover: 'fit',\n contain: 'scale',\n },\n format: {\n jpeg: 'jpg',\n },\n background(value: string) {\n return convertHextoRGBFormat(value);\n },\n },\n joinWith: ',',\n formatter: (key, value) => `${key}_${value}`,\n});\n\n// Note: Not configurable via Image props (for now).\nconst defaultModifiers = {\n format: 'auto',\n quality: 'auto:best',\n};\n\nexport function getImageUrl(src: string, modifiers: Partial<ImageModifiers> = {}): string {\n const mergeModifiers = merge(defaultModifiers, modifiers);\n const operations = operationsGenerator(mergeModifiers);\n\n return `${BASE_URL}/${operations}/${src}`;\n}\n","export function getImageUrl(src = ''): string {\n return src;\n}\n","import * as cloudinary from './cloudinary';\nimport * as staticProvider from './static';\n\nexport default {\n cloudinary,\n static: staticProvider,\n};\n","<script lang=\"ts\">\n export * from './Image.types';\n</script>\n\n<script setup lang=\"ts\">\n import { computed, inject, useAttrs } from 'vue';\n\n import { StashImageProviders, StashProvideState } from '../../../types/misc';\n import { SCREEN_SIZES } from '../../constants';\n import { ImageProviders, ImageRadii, ImageRadius, ImageSizeCondition, Screens } from './Image.types';\n import providers from './providers';\n import { ImageModifiers } from './providers/utils';\n\n export interface ImageProps {\n /**\n * The path to the image you want to embed.\n */\n src: string;\n\n /**\n * Native srcset attribute.\n * One or more strings separated by commas, indicating possible image sources\n * Can only be used with provider=static, otherwise it's ignored and auto-generated with `sizes` usage\n */\n srcset?: string;\n\n /**\n * For specifying responsive sizes\n */\n sizes?: string;\n\n /**\n * Where the image is served from.\n * If not provided, the provider will inherit from the Stash config `stashOptions.images.provider` (default: `static`).\n * - `static` for relative or absolute paths\n * - `cloudinary` for images served via Cloudinary\n */\n provider?: StashImageProviders;\n\n /**\n * For applying border radius\n */\n radius?: ImageRadii;\n\n /**\n * A custom static path the image src will be appended onto when provider=static.\n * Can be used to override the library-level default.\n */\n staticPath?: string;\n\n /**\n * TODO - https://leaflink.atlassian.net/browse/GRO-204\n * A custom function used to resolve a URL string for the image\n */\n // loader?: () => string;\n }\n\n defineOptions({\n inheritAttrs: false,\n });\n\n const BREAKPOINTS = {\n md: SCREEN_SIZES.md,\n lg: SCREEN_SIZES.lg,\n };\n const stashOptions = inject<StashProvideState>('stashOptions');\n const props = withDefaults(defineProps<ImageProps>(), {\n src: '',\n srcset: undefined,\n sizes: undefined,\n staticPath: undefined,\n provider: undefined,\n radius: 'none',\n // loader: undefined, // TODO - https://leaflink.atlassian.net/browse/GRO-204\n });\n\n const attrs = computed(() => {\n const { src, ...attrs } = useAttrs();\n\n attrs.sizes = imgSizes.value;\n attrs.srcset = imgSrcset.value;\n\n return attrs;\n });\n\n const isAbsoluteUrl = computed(() => {\n // return true if not an absolute url\n try {\n new URL(props.src);\n return true;\n } catch (e) {\n return false;\n }\n });\n\n const computedProvider = computed(() => props.provider || stashOptions?.images?.provider || ImageProviders.Static);\n\n const computedStaticPath = computed(() => props.staticPath ?? stashOptions?.staticPath);\n\n const isStatic = computed(() => computedProvider.value === ImageProviders.Static);\n\n const imgProvider = computed(() => providers[computedProvider.value]);\n\n const imgSrc = computed(() => (isStatic.value ? getProviderImage() : getProviderImage({ width: Screens.md })));\n\n const imgSizes = computed(() => (props.sizes ? getSizes() : props.sizes));\n\n const imgSrcset = computed(() => (props.sizes && !props.srcset && !isStatic.value ? getSources() : props.srcset));\n\n const parsedSizes = computed(() => {\n return props.sizes ? parseSizes(props.sizes) : [];\n });\n\n function getProviderImage(modifiers: ImageModifiers = {}) {\n if (isStatic.value && isAbsoluteUrl.value) {\n return props.src;\n }\n\n const src = isStatic.value && computedStaticPath.value ? `${computedStaticPath.value}/${props.src}` : props.src;\n\n return imgProvider.value.getImageUrl(src, modifiers);\n }\n\n function getSources() {\n return Object.values(Screens)\n .map((width) => {\n const src = getProviderImage({ width });\n\n return `${src} ${width}w`;\n })\n .join(', ');\n }\n\n function getSizes() {\n // return if using native media conditions\n if (props.sizes?.includes('(')) {\n return props.sizes;\n }\n\n return parsedSizes.value.map((v) => `${v.mediaQuery ? v.mediaQuery + ' ' : ''}${v.size}`).join(', ');\n }\n\n function parseSizes(providedSizes = '') {\n const conditions: ImageSizeCondition[] = [];\n const sizes = {\n default: '100vw',\n };\n\n // parse sizes and convert to object\n if (typeof providedSizes === 'string') {\n const definitions = providedSizes.split(/[\\s]+/).filter((size) => size);\n\n for (const entry of definitions) {\n const size = entry.split(':');\n\n if (size.length !== 2) {\n sizes['default'] = size[0].trim();\n continue;\n }\n\n sizes[size[0].trim()] = size[1].trim();\n }\n } else {\n throw new Error('`sizes` needs to be a string');\n }\n\n for (const key in sizes) {\n const screenMinWidth = parseInt(BREAKPOINTS[key] || 0);\n let size = String(sizes[key]);\n const isFluidSize = size.endsWith('vw');\n\n // convert integer to pixels\n if (!isFluidSize && /^\\d+$/.test(size)) {\n size = `${size}px`;\n }\n\n if (!isFluidSize && size.endsWith('%')) {\n throw new Error('Image: `sizes` does not support percentage values');\n }\n\n const condition = {\n mediaQuery: screenMinWidth ? `(min-width: ${screenMinWidth}px)` : '',\n screenMinWidth,\n size,\n };\n\n conditions.push(condition);\n }\n\n conditions.sort((v1, v2) => (v1.screenMinWidth > v2.screenMinWidth ? -1 : 1));\n\n return conditions;\n }\n</script>\n\n<template>\n <img\n ref=\"img\"\n :key=\"imgSrc\"\n data-test=\"stash-image\"\n class=\"stash-image\"\n :class=\"{\n 'tw-rounded': props.radius === ImageRadius.Rounded,\n 'tw-rounded-full': props.radius === ImageRadius.Circle,\n }\"\n :src=\"imgSrc\"\n v-bind=\"attrs\"\n />\n</template>\n"],"names":["Screens","ImageRadius","ImageProviders","createMapper","map","key","buildProviderUrl","formatter","value","keyMap","joinWith","valueMap","keyMapper","valueKey","modifiers","mapper","newKey","newVal","BASE_URL","IMAGE_PROVIDER_URLS","convertHextoRGBFormat","operationsGenerator","defaultModifiers","getImageUrl","src","mergeModifiers","merge","operations","providers","cloudinary","staticProvider","BREAKPOINTS","SCREEN_SIZES","stashOptions","inject","props","__props","attrs","computed","useAttrs","imgSizes","imgSrcset","isAbsoluteUrl","computedProvider","_a","computedStaticPath","isStatic","imgProvider","imgSrc","getProviderImage","getSizes","getSources","parsedSizes","parseSizes","width","v","providedSizes","conditions","sizes","definitions","size","entry","screenMinWidth","isFluidSize","condition","v1","v2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Image.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { defineComponent as W, inject as C, computed as a, useAttrs as M, openBlock as B, createElementBlock as k, mergeProps as L, unref as $ } from "vue";
|
|
2
|
+
import { IMAGE_PROVIDER_URLS as N, SCREEN_SIZES as w } from "./constants.js";
|
|
3
|
+
import q from "lodash-es/merge";
|
|
4
|
+
const j = {
|
|
5
|
+
xs: 160,
|
|
6
|
+
sm: 338,
|
|
7
|
+
md: 676,
|
|
8
|
+
lg: 1352,
|
|
9
|
+
xl: 2704
|
|
10
|
+
};
|
|
11
|
+
var z = /* @__PURE__ */ ((t) => (t.None = "none", t.Rounded = "rounded", t.Circle = "circle", t))(z || {}), b = /* @__PURE__ */ ((t) => (t.Cloudinary = "cloudinary", t.Static = "static", t))(b || {});
|
|
12
|
+
function P(t) {
|
|
13
|
+
return (s) => t[s] || s;
|
|
14
|
+
}
|
|
15
|
+
function G({
|
|
16
|
+
formatter: t = (m, c) => `${m}=${c}`,
|
|
17
|
+
keyMap: s,
|
|
18
|
+
joinWith: i = "/",
|
|
19
|
+
valueMap: e = {}
|
|
20
|
+
} = {}) {
|
|
21
|
+
const m = typeof s == "function" ? s : P(s || {});
|
|
22
|
+
return Object.keys(e).forEach((c) => {
|
|
23
|
+
typeof e[c] != "function" && (e[c] = P(e[c]));
|
|
24
|
+
}), (c = {}) => Object.entries(c).map(([l, d]) => {
|
|
25
|
+
const p = e[l], g = m(l);
|
|
26
|
+
let v = d;
|
|
27
|
+
return typeof p == "function" && (v = p(c[l])), t(g, v);
|
|
28
|
+
}).join(i);
|
|
29
|
+
}
|
|
30
|
+
const Q = N.CLOUDINARY, T = (t) => t.startsWith("#") ? t.replace("#", "rgb_") : t, E = G({
|
|
31
|
+
keyMap: {
|
|
32
|
+
fit: "c",
|
|
33
|
+
width: "w",
|
|
34
|
+
height: "h",
|
|
35
|
+
format: "f",
|
|
36
|
+
quality: "q",
|
|
37
|
+
background: "b",
|
|
38
|
+
dpr: "dpr"
|
|
39
|
+
},
|
|
40
|
+
valueMap: {
|
|
41
|
+
fit: {
|
|
42
|
+
fill: "fill",
|
|
43
|
+
inside: "pad",
|
|
44
|
+
outside: "lpad",
|
|
45
|
+
cover: "fit",
|
|
46
|
+
contain: "scale"
|
|
47
|
+
},
|
|
48
|
+
format: {
|
|
49
|
+
jpeg: "jpg"
|
|
50
|
+
},
|
|
51
|
+
background(t) {
|
|
52
|
+
return T(t);
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
joinWith: ",",
|
|
56
|
+
formatter: (t, s) => `${t}_${s}`
|
|
57
|
+
}), D = {
|
|
58
|
+
format: "auto",
|
|
59
|
+
quality: "auto:best"
|
|
60
|
+
};
|
|
61
|
+
function F(t, s = {}) {
|
|
62
|
+
const i = q(D, s), e = E(i);
|
|
63
|
+
return `${Q}/${e}/${t}`;
|
|
64
|
+
}
|
|
65
|
+
const V = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
66
|
+
__proto__: null,
|
|
67
|
+
getImageUrl: F,
|
|
68
|
+
operationsGenerator: E
|
|
69
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
70
|
+
function H(t = "") {
|
|
71
|
+
return t;
|
|
72
|
+
}
|
|
73
|
+
const Y = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
74
|
+
__proto__: null,
|
|
75
|
+
getImageUrl: H
|
|
76
|
+
}, Symbol.toStringTag, { value: "Module" })), Z = {
|
|
77
|
+
cloudinary: V,
|
|
78
|
+
static: Y
|
|
79
|
+
}, J = ["src"], et = /* @__PURE__ */ W({
|
|
80
|
+
inheritAttrs: !1,
|
|
81
|
+
__name: "Image",
|
|
82
|
+
props: {
|
|
83
|
+
src: { default: "" },
|
|
84
|
+
srcset: { default: void 0 },
|
|
85
|
+
sizes: { default: void 0 },
|
|
86
|
+
provider: { default: void 0 },
|
|
87
|
+
radius: { default: "none" },
|
|
88
|
+
staticPath: { default: void 0 }
|
|
89
|
+
},
|
|
90
|
+
setup(t) {
|
|
91
|
+
const s = {
|
|
92
|
+
md: w.md,
|
|
93
|
+
lg: w.lg
|
|
94
|
+
}, i = C("stashOptions"), e = t, m = a(() => {
|
|
95
|
+
const { src: r, ...n } = M();
|
|
96
|
+
return n.sizes = v.value, n.srcset = I.value, n;
|
|
97
|
+
}), c = a(() => {
|
|
98
|
+
try {
|
|
99
|
+
return new URL(e.src), !0;
|
|
100
|
+
} catch {
|
|
101
|
+
return !1;
|
|
102
|
+
}
|
|
103
|
+
}), S = a(() => {
|
|
104
|
+
var r;
|
|
105
|
+
return e.provider || ((r = i == null ? void 0 : i.images) == null ? void 0 : r.provider) || b.Static;
|
|
106
|
+
}), l = a(() => e.staticPath ?? (i == null ? void 0 : i.staticPath)), d = a(() => S.value === b.Static), p = a(() => Z[S.value]), g = a(() => d.value ? _() : _({ width: j.md })), v = a(() => e.sizes ? O() : e.sizes), I = a(() => e.sizes && !e.srcset && !d.value ? R() : e.srcset), U = a(() => e.sizes ? x(e.sizes) : []);
|
|
107
|
+
function _(r = {}) {
|
|
108
|
+
if (d.value && c.value)
|
|
109
|
+
return e.src;
|
|
110
|
+
const n = d.value && l.value ? `${l.value}/${e.src}` : e.src;
|
|
111
|
+
return p.value.getImageUrl(n, r);
|
|
112
|
+
}
|
|
113
|
+
function R() {
|
|
114
|
+
return Object.values(j).map((r) => `${_({ width: r })} ${r}w`).join(", ");
|
|
115
|
+
}
|
|
116
|
+
function O() {
|
|
117
|
+
var r;
|
|
118
|
+
return (r = e.sizes) != null && r.includes("(") ? e.sizes : U.value.map((n) => `${n.mediaQuery ? n.mediaQuery + " " : ""}${n.size}`).join(", ");
|
|
119
|
+
}
|
|
120
|
+
function x(r = "") {
|
|
121
|
+
const n = [], h = {
|
|
122
|
+
default: "100vw"
|
|
123
|
+
};
|
|
124
|
+
if (typeof r == "string") {
|
|
125
|
+
const f = r.split(/[\s]+/).filter((u) => u);
|
|
126
|
+
for (const u of f) {
|
|
127
|
+
const o = u.split(":");
|
|
128
|
+
if (o.length !== 2) {
|
|
129
|
+
h.default = o[0].trim();
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
h[o[0].trim()] = o[1].trim();
|
|
133
|
+
}
|
|
134
|
+
} else
|
|
135
|
+
throw new Error("`sizes` needs to be a string");
|
|
136
|
+
for (const f in h) {
|
|
137
|
+
const u = parseInt(s[f] || 0);
|
|
138
|
+
let o = String(h[f]);
|
|
139
|
+
const y = o.endsWith("vw");
|
|
140
|
+
if (!y && /^\d+$/.test(o) && (o = `${o}px`), !y && o.endsWith("%"))
|
|
141
|
+
throw new Error("Image: `sizes` does not support percentage values");
|
|
142
|
+
const A = {
|
|
143
|
+
mediaQuery: u ? `(min-width: ${u}px)` : "",
|
|
144
|
+
screenMinWidth: u,
|
|
145
|
+
size: o
|
|
146
|
+
};
|
|
147
|
+
n.push(A);
|
|
148
|
+
}
|
|
149
|
+
return n.sort((f, u) => f.screenMinWidth > u.screenMinWidth ? -1 : 1), n;
|
|
150
|
+
}
|
|
151
|
+
return (r, n) => (B(), k("img", L({
|
|
152
|
+
ref: "img",
|
|
153
|
+
key: g.value,
|
|
154
|
+
"data-test": "stash-image",
|
|
155
|
+
class: ["stash-image", {
|
|
156
|
+
"tw-rounded": e.radius === $(z).Rounded,
|
|
157
|
+
"tw-rounded-full": e.radius === $(z).Circle
|
|
158
|
+
}],
|
|
159
|
+
src: g.value
|
|
160
|
+
}, m.value), null, 16, J));
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
export {
|
|
164
|
+
z as I,
|
|
165
|
+
j as S,
|
|
166
|
+
et as _,
|
|
167
|
+
b as a
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=Image.vue_vue_type_script_setup_true_lang-YUNunj71.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Image.vue_vue_type_script_setup_true_lang-YUNunj71.js","sources":["../src/components/Image/Image.types.ts","../src/components/Image/providers/utils.ts","../src/components/Image/providers/cloudinary.ts","../src/components/Image/providers/static.ts","../src/components/Image/providers/index.ts","../src/components/Image/Image.vue"],"sourcesContent":["// Sizes used to generate resized and optimized versions of an image.\n// Generated in `srcset`, and informed by `sizes`.\nexport const Screens = {\n xs: 160,\n sm: 338,\n md: 676,\n lg: 1352,\n xl: 2704,\n} as const;\n\nexport interface ImageSizeCondition {\n mediaQuery: string;\n screenMinWidth: number;\n size: string;\n}\n\nexport enum ImageRadius {\n None = 'none',\n Rounded = 'rounded',\n Circle = 'circle',\n}\n\nexport type ImageRadii = `${ImageRadius}`;\n\nexport enum ImageProviders {\n Cloudinary = 'cloudinary',\n Static = 'static',\n}\n","export interface ImageModifiers {\n format?: string;\n height?: number;\n width?: number;\n [key: string]: any /* eslint-disable-line @typescript-eslint/no-explicit-any */;\n}\n\nexport type ParamFormatter = (key: string, value: string) => string;\n\nexport type ParamMapper = { [key: string]: string } | ((key: string) => string);\n\nexport interface ProviderUrlBuilder {\n keyMap?: ParamMapper;\n formatter?: ParamFormatter;\n joinWith?: string;\n valueMap?: {\n [key: string]: ParamMapper;\n };\n}\n\nfunction createMapper(map: ParamMapper) {\n return (key: string) => {\n return map[key] || key;\n };\n}\n\n/**\n * Builds the parameterized Cloudinary url\n */\nexport function buildProviderUrl({\n formatter = (key, value) => `${key}=${value}`,\n keyMap,\n joinWith = '/',\n valueMap = {},\n}: ProviderUrlBuilder = {}) {\n const keyMapper = typeof keyMap === 'function' ? keyMap : createMapper(keyMap || {});\n\n Object.keys(valueMap).forEach((valueKey) => {\n if (typeof valueMap[valueKey] !== 'function') {\n valueMap[valueKey] = createMapper(valueMap[valueKey]);\n }\n });\n\n return (modifiers: { [key: string]: string } = {}) => {\n const operations = Object.entries(modifiers).map(([key, value]) => {\n const mapper = valueMap[key];\n const newKey = keyMapper(key);\n let newVal = value;\n\n if (typeof mapper === 'function') {\n newVal = mapper(modifiers[key]);\n }\n\n return formatter(newKey, newVal);\n });\n\n return operations.join(joinWith);\n };\n}\n\n/**\n * Checks if a (sub)domain is included in a list of acceptable domains\n * @param str the (sub)domain to check\n * @param domains an array of valid domains\n */\nexport function isDomainValid(str = '', domains: string[] = []): boolean {\n const url = new URL(str);\n const host = url.host;\n\n return domains.some((domain) => {\n if (domain === host) {\n return true;\n }\n\n return domain.endsWith(`.${host}`);\n });\n}\n","import merge from 'lodash-es/merge';\n\nimport { IMAGE_PROVIDER_URLS } from '../../../constants';\nimport { buildProviderUrl, ImageModifiers } from './utils';\n\nconst BASE_URL = IMAGE_PROVIDER_URLS.CLOUDINARY;\n\nconst convertHextoRGBFormat = (value: string) => (value.startsWith('#') ? value.replace('#', 'rgb_') : value);\n\n/**\n * Parameters (option and value pairs) that can be used in the <transformations> segment of the Cloudinary transformation URL.\n * Options and their respective values are connected by an underscore (eg `w_250` for width of 250px.).\n * Multiple parameters are comma separated (eg. `w_250,h_250`).\n *\n * `keyMap` maps the option to its option prefix.\n * `valueMap` is used for grouping options using the same `keyMap` value under a 'category', allowing for easier usage and custom labelling in the component context.\n *\n * Transformation URL structure:\n * https://cloudinary.com/documentation/transformation_reference\n *\n * Transformation URL parameters (options and values):\n * https://cloudinary.com/documentation/image_transformations#transformation_url_syntax\n *\n */\nexport const operationsGenerator = buildProviderUrl({\n keyMap: {\n fit: 'c',\n width: 'w',\n height: 'h',\n format: 'f',\n quality: 'q',\n background: 'b',\n dpr: 'dpr',\n },\n valueMap: {\n fit: {\n fill: 'fill',\n inside: 'pad',\n outside: 'lpad',\n cover: 'fit',\n contain: 'scale',\n },\n format: {\n jpeg: 'jpg',\n },\n background(value: string) {\n return convertHextoRGBFormat(value);\n },\n },\n joinWith: ',',\n formatter: (key, value) => `${key}_${value}`,\n});\n\n// Note: Not configurable via Image props (for now).\nconst defaultModifiers = {\n format: 'auto',\n quality: 'auto:best',\n};\n\nexport function getImageUrl(src: string, modifiers: Partial<ImageModifiers> = {}): string {\n const mergeModifiers = merge(defaultModifiers, modifiers);\n const operations = operationsGenerator(mergeModifiers);\n\n return `${BASE_URL}/${operations}/${src}`;\n}\n","export function getImageUrl(src = ''): string {\n return src;\n}\n","import * as cloudinary from './cloudinary';\nimport * as staticProvider from './static';\n\nexport default {\n cloudinary,\n static: staticProvider,\n};\n","<script lang=\"ts\">\n export * from './Image.types';\n</script>\n\n<script setup lang=\"ts\">\n import { computed, inject, useAttrs } from 'vue';\n\n import { StashImageProviders, StashProvideState } from '../../../types/misc';\n import { SCREEN_SIZES } from '../../constants';\n import { ImageProviders, ImageRadii, ImageRadius, ImageSizeCondition, Screens } from './Image.types';\n import providers from './providers';\n import { ImageModifiers } from './providers/utils';\n\n export interface ImageProps {\n /**\n * The path to the image you want to embed.\n */\n src: string;\n\n /**\n * Native srcset attribute.\n * One or more strings separated by commas, indicating possible image sources\n * Can only be used with provider=static, otherwise it's ignored and auto-generated with `sizes` usage\n */\n srcset?: string;\n\n /**\n * For specifying responsive sizes\n */\n sizes?: string;\n\n /**\n * Where the image is served from.\n * If not provided, the provider will inherit from the Stash config `stashOptions.images.provider` (default: `static`).\n * - `static` for relative or absolute paths\n * - `cloudinary` for images served via Cloudinary\n */\n provider?: StashImageProviders;\n\n /**\n * For applying border radius\n */\n radius?: ImageRadii;\n\n /**\n * A custom static path the image src will be appended onto when provider=static.\n * Can be used to override the library-level default.\n */\n staticPath?: string;\n\n /**\n * TODO - https://leaflink.atlassian.net/browse/GRO-204\n * A custom function used to resolve a URL string for the image\n */\n // loader?: () => string;\n }\n\n defineOptions({\n inheritAttrs: false,\n });\n\n const BREAKPOINTS = {\n md: SCREEN_SIZES.md,\n lg: SCREEN_SIZES.lg,\n };\n const stashOptions = inject<StashProvideState>('stashOptions');\n const props = withDefaults(defineProps<ImageProps>(), {\n src: '',\n srcset: undefined,\n sizes: undefined,\n staticPath: undefined,\n provider: undefined,\n radius: 'none',\n // loader: undefined, // TODO - https://leaflink.atlassian.net/browse/GRO-204\n });\n\n const attrs = computed(() => {\n const { src, ...attrs } = useAttrs();\n\n attrs.sizes = imgSizes.value;\n attrs.srcset = imgSrcset.value;\n\n return attrs;\n });\n\n const isAbsoluteUrl = computed(() => {\n // return true if not an absolute url\n try {\n new URL(props.src);\n return true;\n } catch (e) {\n return false;\n }\n });\n\n const computedProvider = computed(() => props.provider || stashOptions?.images?.provider || ImageProviders.Static);\n\n const computedStaticPath = computed(() => props.staticPath ?? stashOptions?.staticPath);\n\n const isStatic = computed(() => computedProvider.value === ImageProviders.Static);\n\n const imgProvider = computed(() => providers[computedProvider.value]);\n\n const imgSrc = computed(() => (isStatic.value ? getProviderImage() : getProviderImage({ width: Screens.md })));\n\n const imgSizes = computed(() => (props.sizes ? getSizes() : props.sizes));\n\n const imgSrcset = computed(() => (props.sizes && !props.srcset && !isStatic.value ? getSources() : props.srcset));\n\n const parsedSizes = computed(() => {\n return props.sizes ? parseSizes(props.sizes) : [];\n });\n\n function getProviderImage(modifiers: ImageModifiers = {}) {\n if (isStatic.value && isAbsoluteUrl.value) {\n return props.src;\n }\n\n const src = isStatic.value && computedStaticPath.value ? `${computedStaticPath.value}/${props.src}` : props.src;\n\n return imgProvider.value.getImageUrl(src, modifiers);\n }\n\n function getSources() {\n return Object.values(Screens)\n .map((width) => {\n const src = getProviderImage({ width });\n\n return `${src} ${width}w`;\n })\n .join(', ');\n }\n\n function getSizes() {\n // return if using native media conditions\n if (props.sizes?.includes('(')) {\n return props.sizes;\n }\n\n return parsedSizes.value.map((v) => `${v.mediaQuery ? v.mediaQuery + ' ' : ''}${v.size}`).join(', ');\n }\n\n function parseSizes(providedSizes = '') {\n const conditions: ImageSizeCondition[] = [];\n const sizes = {\n default: '100vw',\n };\n\n // parse sizes and convert to object\n if (typeof providedSizes === 'string') {\n const definitions = providedSizes.split(/[\\s]+/).filter((size) => size);\n\n for (const entry of definitions) {\n const size = entry.split(':');\n\n if (size.length !== 2) {\n sizes['default'] = size[0].trim();\n continue;\n }\n\n sizes[size[0].trim()] = size[1].trim();\n }\n } else {\n throw new Error('`sizes` needs to be a string');\n }\n\n for (const key in sizes) {\n const screenMinWidth = parseInt(BREAKPOINTS[key] || 0);\n let size = String(sizes[key]);\n const isFluidSize = size.endsWith('vw');\n\n // convert integer to pixels\n if (!isFluidSize && /^\\d+$/.test(size)) {\n size = `${size}px`;\n }\n\n if (!isFluidSize && size.endsWith('%')) {\n throw new Error('Image: `sizes` does not support percentage values');\n }\n\n const condition = {\n mediaQuery: screenMinWidth ? `(min-width: ${screenMinWidth}px)` : '',\n screenMinWidth,\n size,\n };\n\n conditions.push(condition);\n }\n\n conditions.sort((v1, v2) => (v1.screenMinWidth > v2.screenMinWidth ? -1 : 1));\n\n return conditions;\n }\n</script>\n\n<template>\n <img\n ref=\"img\"\n :key=\"imgSrc\"\n data-test=\"stash-image\"\n class=\"stash-image\"\n :class=\"{\n 'tw-rounded': props.radius === ImageRadius.Rounded,\n 'tw-rounded-full': props.radius === ImageRadius.Circle,\n }\"\n :src=\"imgSrc\"\n v-bind=\"attrs\"\n />\n</template>\n"],"names":["Screens","ImageRadius","ImageProviders","createMapper","map","key","buildProviderUrl","formatter","value","keyMap","joinWith","valueMap","keyMapper","valueKey","modifiers","mapper","newKey","newVal","BASE_URL","IMAGE_PROVIDER_URLS","convertHextoRGBFormat","operationsGenerator","defaultModifiers","getImageUrl","src","mergeModifiers","merge","operations","providers","cloudinary","staticProvider","BREAKPOINTS","SCREEN_SIZES","stashOptions","inject","props","__props","attrs","computed","useAttrs","imgSizes","imgSrcset","isAbsoluteUrl","computedProvider","_a","computedStaticPath","isStatic","imgProvider","imgSrc","getProviderImage","getSizes","getSources","parsedSizes","parseSizes","width","v","providedSizes","conditions","sizes","definitions","size","entry","screenMinWidth","isFluidSize","condition","v1","v2"],"mappings":"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"}
|
package/dist/InlineEdit.vue.d.ts
CHANGED
|
@@ -61,8 +61,8 @@ errorText: string;
|
|
|
61
61
|
hintText: string;
|
|
62
62
|
placeholder: string;
|
|
63
63
|
modelValue: string | number;
|
|
64
|
-
oldValue: string | number;
|
|
65
64
|
format: "" | "currency" | "percent";
|
|
65
|
+
oldValue: string | number;
|
|
66
66
|
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>, {
|
|
67
67
|
prepend?(_: {}): any;
|
|
68
68
|
append?(_: {}): any;
|
package/dist/ListView.vue.d.ts
CHANGED
|
@@ -3048,11 +3048,11 @@ enableTeleport: {
|
|
|
3048
3048
|
type: PropType<boolean>;
|
|
3049
3049
|
default: boolean;
|
|
3050
3050
|
};
|
|
3051
|
-
|
|
3051
|
+
format: {
|
|
3052
3052
|
type: PropType<string>;
|
|
3053
3053
|
default: string;
|
|
3054
3054
|
};
|
|
3055
|
-
|
|
3055
|
+
timeZone: {
|
|
3056
3056
|
type: PropType<string>;
|
|
3057
3057
|
default: string;
|
|
3058
3058
|
};
|
|
@@ -3115,8 +3115,8 @@ hintText: string;
|
|
|
3115
3115
|
placeholder: string;
|
|
3116
3116
|
modelValue: string;
|
|
3117
3117
|
enableTeleport: boolean;
|
|
3118
|
-
timeZone: string;
|
|
3119
3118
|
format: string;
|
|
3119
|
+
timeZone: string;
|
|
3120
3120
|
availableDates: DateRangeSource[];
|
|
3121
3121
|
disabledDates: DateRangeSource[];
|
|
3122
3122
|
hideClearButton: boolean;
|
|
@@ -3183,11 +3183,11 @@ enableTeleport: {
|
|
|
3183
3183
|
type: PropType<boolean>;
|
|
3184
3184
|
default: boolean;
|
|
3185
3185
|
};
|
|
3186
|
-
|
|
3186
|
+
format: {
|
|
3187
3187
|
type: PropType<string>;
|
|
3188
3188
|
default: string;
|
|
3189
3189
|
};
|
|
3190
|
-
|
|
3190
|
+
timeZone: {
|
|
3191
3191
|
type: PropType<string>;
|
|
3192
3192
|
default: string;
|
|
3193
3193
|
};
|
|
@@ -3247,8 +3247,8 @@ hintText: string;
|
|
|
3247
3247
|
placeholder: string;
|
|
3248
3248
|
modelValue: string;
|
|
3249
3249
|
enableTeleport: boolean;
|
|
3250
|
-
timeZone: string;
|
|
3251
3250
|
format: string;
|
|
3251
|
+
timeZone: string;
|
|
3252
3252
|
availableDates: DateRangeSource[];
|
|
3253
3253
|
disabledDates: DateRangeSource[];
|
|
3254
3254
|
hideClearButton: boolean;
|
|
@@ -3312,11 +3312,11 @@ enableTeleport: {
|
|
|
3312
3312
|
type: PropType<boolean>;
|
|
3313
3313
|
default: boolean;
|
|
3314
3314
|
};
|
|
3315
|
-
|
|
3315
|
+
format: {
|
|
3316
3316
|
type: PropType<string>;
|
|
3317
3317
|
default: string;
|
|
3318
3318
|
};
|
|
3319
|
-
|
|
3319
|
+
timeZone: {
|
|
3320
3320
|
type: PropType<string>;
|
|
3321
3321
|
default: string;
|
|
3322
3322
|
};
|
|
@@ -3379,8 +3379,8 @@ hintText: string;
|
|
|
3379
3379
|
placeholder: string;
|
|
3380
3380
|
modelValue: string;
|
|
3381
3381
|
enableTeleport: boolean;
|
|
3382
|
-
timeZone: string;
|
|
3383
3382
|
format: string;
|
|
3383
|
+
timeZone: string;
|
|
3384
3384
|
availableDates: DateRangeSource[];
|
|
3385
3385
|
disabledDates: DateRangeSource[];
|
|
3386
3386
|
hideClearButton: boolean;
|
package/dist/Module.vue.d.ts
CHANGED
|
@@ -58,7 +58,7 @@ variant: string;
|
|
|
58
58
|
}>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<ModuleProps>, {
|
|
59
59
|
variant: string;
|
|
60
60
|
}>>> & Readonly<{}>, {
|
|
61
|
-
variant: "table" | "
|
|
61
|
+
variant: "table" | "list" | "box" | "card";
|
|
62
62
|
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>, {
|
|
63
63
|
default?(_: {}): any;
|
|
64
64
|
}>;
|
package/dist/Textarea.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as E, useAttrs as M, useSlots as k, useCssModule as H, ref as b, computed as w, watch as A, onMounted as I, nextTick as P, onBeforeUnmount as V, openBlock as $, createBlock as q, mergeProps as x, unref as p, createSlots as D, withCtx as y, createElementVNode as j, renderSlot as F } from "vue";
|
|
2
2
|
import { _ as L } from "./Field.vue_vue_type_script_setup_true_lang-DEizIcDo.js";
|
|
3
3
|
import { _ as N } from "./_plugin-vue_export-helper-CHgC5LLL.js";
|
|
4
|
-
const U = ["id", "value", "placeholder", "disabled", "readonly"], W = /* @__PURE__ */
|
|
4
|
+
const U = ["id", "value", "placeholder", "disabled", "readonly"], W = /* @__PURE__ */ E({
|
|
5
5
|
name: "ll-textarea",
|
|
6
6
|
__name: "Textarea",
|
|
7
7
|
props: {
|
|
@@ -23,9 +23,9 @@ const U = ["id", "value", "placeholder", "disabled", "readonly"], W = /* @__PURE
|
|
|
23
23
|
disabled: { type: Boolean }
|
|
24
24
|
},
|
|
25
25
|
emits: ["update:model-value"],
|
|
26
|
-
setup(
|
|
27
|
-
const
|
|
28
|
-
const e = { ...
|
|
26
|
+
setup(_, { emit: g }) {
|
|
27
|
+
const c = M(), B = k(), m = H(), o = _, z = g, u = b(), l = b(), R = w(() => o.isReadOnly || "readonly" in c && c.readonly !== !1), T = w(() => {
|
|
28
|
+
const e = { ...c };
|
|
29
29
|
return delete e["data-test"], delete e.class, e;
|
|
30
30
|
});
|
|
31
31
|
A(
|
|
@@ -42,11 +42,11 @@ const U = ["id", "value", "placeholder", "disabled", "readonly"], W = /* @__PURE
|
|
|
42
42
|
const { target: t } = e, s = v(u.value) || document.documentElement, { scrollTop: a } = s;
|
|
43
43
|
let n = 0;
|
|
44
44
|
if (s === document.documentElement) {
|
|
45
|
-
const { top: r, height: i } = C(t), { innerHeight:
|
|
46
|
-
n = Math.max(r + i - (
|
|
45
|
+
const { top: r, height: i } = C(t), { innerHeight: d } = window;
|
|
46
|
+
n = Math.max(r + i - (d + a), 0);
|
|
47
47
|
} else {
|
|
48
|
-
const { top: r, height: i } = t.getBoundingClientRect(), { top:
|
|
49
|
-
n = Math.max(
|
|
48
|
+
const { top: r, height: i } = t.getBoundingClientRect(), { top: d } = s.getBoundingClientRect(), { offsetHeight: f } = s, S = r - d;
|
|
49
|
+
n = Math.max(S + i - f, 0);
|
|
50
50
|
}
|
|
51
51
|
n && requestAnimationFrame(() => {
|
|
52
52
|
s.scrollTop = a + n;
|
|
@@ -61,8 +61,8 @@ const U = ["id", "value", "placeholder", "disabled", "readonly"], W = /* @__PURE
|
|
|
61
61
|
}, C = (e) => {
|
|
62
62
|
const { offsetWidth: t, offsetHeight: s } = e;
|
|
63
63
|
let a = 0, n = 0;
|
|
64
|
-
const r = function({ offsetLeft: i, offsetTop:
|
|
65
|
-
a += i, n +=
|
|
64
|
+
const r = function({ offsetLeft: i, offsetTop: d, offsetParent: f }) {
|
|
65
|
+
a += i, n += d, f && r(f);
|
|
66
66
|
};
|
|
67
67
|
return r(e), {
|
|
68
68
|
top: n,
|
|
@@ -75,24 +75,30 @@ const U = ["id", "value", "placeholder", "disabled", "readonly"], W = /* @__PURE
|
|
|
75
75
|
var e;
|
|
76
76
|
if (o.value !== null)
|
|
77
77
|
throw new Error("ll-input: use :model-value or v-model instead of :value.");
|
|
78
|
-
if (
|
|
78
|
+
if (c.onInput)
|
|
79
79
|
throw new Error("ll-input: use the @update:model-value event instead of @input");
|
|
80
80
|
(typeof o.resize == "boolean" && o.resize || (e = o.resize) != null && e.forceBrowserScroll) && (await P(), h());
|
|
81
81
|
}), V(() => {
|
|
82
82
|
var e;
|
|
83
83
|
(e = l.value) == null || e.disconnect();
|
|
84
|
-
}), (e, t) => ($(), q(L,
|
|
84
|
+
}), (e, t) => ($(), q(L, x(o, {
|
|
85
85
|
class: ["stash-textarea", [p(m).root]],
|
|
86
86
|
"data-test": "stash-textarea"
|
|
87
87
|
}), D({
|
|
88
|
-
default:
|
|
89
|
-
j("textarea",
|
|
88
|
+
default: y(({ fieldId: s, hasError: a }) => [
|
|
89
|
+
j("textarea", x({
|
|
90
90
|
id: s,
|
|
91
91
|
ref_key: "textareaRef",
|
|
92
92
|
ref: u,
|
|
93
93
|
class: [
|
|
94
94
|
p(m).textarea,
|
|
95
|
-
|
|
95
|
+
"tw-border tw-border-ice-500",
|
|
96
|
+
{
|
|
97
|
+
"stash-textarea--error tw-border-red-500 tw-text-red-500": a,
|
|
98
|
+
"tw-text-ice-700 hover:tw-border-ice-500 focus:tw-border-blue-500 active:tw-border-blue-500": !a && !o.disabled,
|
|
99
|
+
"tw-resize-y": o.resize,
|
|
100
|
+
"tw-resize-none": !o.resize
|
|
101
|
+
}
|
|
96
102
|
],
|
|
97
103
|
value: o.modelValue,
|
|
98
104
|
"data-test": "stash-textarea|textarea",
|
|
@@ -107,17 +113,16 @@ const U = ["id", "value", "placeholder", "disabled", "readonly"], W = /* @__PURE
|
|
|
107
113
|
}, [
|
|
108
114
|
p(B).hint ? {
|
|
109
115
|
name: "hint",
|
|
110
|
-
fn:
|
|
116
|
+
fn: y(() => [
|
|
111
117
|
F(e.$slots, "hint")
|
|
112
118
|
]),
|
|
113
119
|
key: "0"
|
|
114
120
|
} : void 0
|
|
115
121
|
]), 1040, ["class"]));
|
|
116
122
|
}
|
|
117
|
-
}), Y = "
|
|
123
|
+
}), Y = "_root_fulrr_2", G = "_textarea_fulrr_7", J = {
|
|
118
124
|
root: Y,
|
|
119
|
-
textarea: G
|
|
120
|
-
"stash-textarea--error": "_stash-textarea--error_1sns8_28"
|
|
125
|
+
textarea: G
|
|
121
126
|
}, K = {
|
|
122
127
|
$style: J
|
|
123
128
|
}, ee = /* @__PURE__ */ N(W, [["__cssModules", K]]);
|