@limetech/lime-elements 38.23.5 → 38.24.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/CHANGELOG.md +9 -0
- package/dist/cjs/lime-elements.cjs.js +1 -1
- package/dist/cjs/limel-action-bar_2.cjs.entry.js +1 -1
- package/dist/cjs/limel-ai-avatar.cjs.entry.js +1 -1
- package/dist/cjs/limel-badge.cjs.entry.js +42 -0
- package/dist/cjs/limel-badge.cjs.entry.js.map +1 -0
- package/dist/cjs/limel-callout.cjs.entry.js +1 -1
- package/dist/cjs/limel-chart.cjs.entry.js +1 -1
- package/dist/cjs/limel-chip_2.cjs.entry.js +1 -1
- package/dist/cjs/limel-collapsible-section.cjs.entry.js +1 -1
- package/dist/cjs/limel-file-viewer.cjs.entry.js +1 -1
- package/dist/cjs/limel-file.cjs.entry.js +1 -1
- package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +1 -1
- package/dist/cjs/limel-linear-progress.cjs.entry.js +1 -1
- package/dist/cjs/{limel-portal_2.cjs.entry.js → limel-portal_3.cjs.entry.js} +107 -11
- package/dist/cjs/limel-portal_3.cjs.entry.js.map +1 -0
- package/dist/cjs/limel-profile-picture.cjs.entry.js +536 -0
- package/dist/cjs/limel-profile-picture.cjs.entry.js.map +1 -0
- package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +1 -1
- package/dist/cjs/limel-snackbar.cjs.entry.js +1 -1
- package/dist/cjs/limel-table.cjs.entry.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{translations-2746c4c6.js → translations-7499f391.js} +25 -1
- package/dist/cjs/translations-7499f391.js.map +1 -0
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/profile-picture/profile-picture.css +255 -0
- package/dist/collection/components/profile-picture/profile-picture.js +554 -0
- package/dist/collection/components/profile-picture/profile-picture.js.map +1 -0
- package/dist/collection/translations/da.js +3 -0
- package/dist/collection/translations/da.js.map +1 -1
- package/dist/collection/translations/de.js +3 -0
- package/dist/collection/translations/de.js.map +1 -1
- package/dist/collection/translations/en.js +3 -0
- package/dist/collection/translations/en.js.map +1 -1
- package/dist/collection/translations/fi.js +3 -0
- package/dist/collection/translations/fi.js.map +1 -1
- package/dist/collection/translations/fr.js +3 -0
- package/dist/collection/translations/fr.js.map +1 -1
- package/dist/collection/translations/nl.js +3 -0
- package/dist/collection/translations/nl.js.map +1 -1
- package/dist/collection/translations/no.js +3 -0
- package/dist/collection/translations/no.js.map +1 -1
- package/dist/collection/translations/sv.js +3 -0
- package/dist/collection/translations/sv.js.map +1 -1
- package/dist/collection/util/image-resize.js +305 -0
- package/dist/collection/util/image-resize.js.map +1 -0
- package/dist/esm/lime-elements.js +1 -1
- package/dist/esm/limel-action-bar_2.entry.js +1 -1
- package/dist/esm/limel-ai-avatar.entry.js +1 -1
- package/dist/esm/limel-badge.entry.js +38 -0
- package/dist/esm/limel-badge.entry.js.map +1 -0
- package/dist/esm/limel-callout.entry.js +1 -1
- package/dist/esm/limel-chart.entry.js +1 -1
- package/dist/esm/limel-chip_2.entry.js +1 -1
- package/dist/esm/limel-collapsible-section.entry.js +1 -1
- package/dist/esm/limel-file-viewer.entry.js +1 -1
- package/dist/esm/limel-file.entry.js +1 -1
- package/dist/esm/limel-flatpickr-adapter.entry.js +1 -1
- package/dist/esm/limel-linear-progress.entry.js +1 -1
- package/dist/esm/{limel-portal_2.entry.js → limel-portal_3.entry.js} +107 -12
- package/dist/esm/limel-portal_3.entry.js.map +1 -0
- package/dist/esm/limel-profile-picture.entry.js +532 -0
- package/dist/esm/limel-profile-picture.entry.js.map +1 -0
- package/dist/esm/limel-prosemirror-adapter.entry.js +1 -1
- package/dist/esm/limel-snackbar.entry.js +1 -1
- package/dist/esm/limel-table.entry.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{translations-0c3c0779.js → translations-1d617679.js} +25 -1
- package/dist/esm/translations-1d617679.js.map +1 -0
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/lime-elements.esm.js.map +1 -1
- package/dist/lime-elements/{p-6edfe426.entry.js → p-011f5d81.entry.js} +2 -2
- package/dist/lime-elements/p-18a3c28a.entry.js +2 -0
- package/dist/lime-elements/p-18a3c28a.entry.js.map +1 -0
- package/dist/lime-elements/{p-8a7bc823.entry.js → p-20d1913a.entry.js} +2 -2
- package/dist/lime-elements/{p-244e13f5.entry.js → p-3f698d18.entry.js} +2 -2
- package/dist/lime-elements/{p-9abbe61a.entry.js → p-441c1eab.entry.js} +2 -2
- package/dist/lime-elements/{p-b957a3ca.entry.js → p-4558a60e.entry.js} +2 -2
- package/dist/lime-elements/p-58777116.js +2 -0
- package/dist/lime-elements/p-58777116.js.map +1 -0
- package/dist/lime-elements/{p-d7e93894.entry.js → p-597e6f79.entry.js} +2 -2
- package/dist/lime-elements/{p-208f87d2.entry.js → p-78abbc50.entry.js} +2 -2
- package/dist/lime-elements/p-7e3a4f49.entry.js +2 -0
- package/dist/lime-elements/p-7e3a4f49.entry.js.map +1 -0
- package/dist/lime-elements/{p-e4d64dd2.entry.js → p-8ae75f4a.entry.js} +2 -2
- package/dist/lime-elements/{p-5018673b.entry.js → p-99de518a.entry.js} +2 -2
- package/dist/lime-elements/p-b5a96409.entry.js +2 -0
- package/dist/lime-elements/p-b5a96409.entry.js.map +1 -0
- package/dist/lime-elements/{p-2173d6d5.entry.js → p-bd619d56.entry.js} +2 -2
- package/dist/lime-elements/{p-65d5d2fb.entry.js → p-bd6878ee.entry.js} +2 -2
- package/dist/lime-elements/{p-5bf57c21.entry.js → p-ce29c097.entry.js} +2 -2
- package/dist/lime-elements/{p-00aee6b6.entry.js → p-e7201ebd.entry.js} +2 -2
- package/dist/types/components/profile-picture/profile-picture.d.ts +126 -0
- package/dist/types/components.d.ts +203 -0
- package/dist/types/translations/da.d.ts +3 -0
- package/dist/types/translations/de.d.ts +3 -0
- package/dist/types/translations/en.d.ts +3 -0
- package/dist/types/translations/fi.d.ts +3 -0
- package/dist/types/translations/fr.d.ts +3 -0
- package/dist/types/translations/nl.d.ts +3 -0
- package/dist/types/translations/no.d.ts +3 -0
- package/dist/types/translations/sv.d.ts +3 -0
- package/dist/types/util/image-resize.d.ts +138 -0
- package/package.json +1 -1
- package/dist/cjs/limel-badge_2.cjs.entry.js +0 -138
- package/dist/cjs/limel-badge_2.cjs.entry.js.map +0 -1
- package/dist/cjs/limel-portal_2.cjs.entry.js.map +0 -1
- package/dist/cjs/translations-2746c4c6.js.map +0 -1
- package/dist/esm/limel-badge_2.entry.js +0 -133
- package/dist/esm/limel-badge_2.entry.js.map +0 -1
- package/dist/esm/limel-portal_2.entry.js.map +0 -1
- package/dist/esm/translations-0c3c0779.js.map +0 -1
- package/dist/lime-elements/p-29b1f083.entry.js +0 -2
- package/dist/lime-elements/p-29b1f083.entry.js.map +0 -1
- package/dist/lime-elements/p-c8825e88.js +0 -2
- package/dist/lime-elements/p-c8825e88.js.map +0 -1
- package/dist/lime-elements/p-fe7243c1.entry.js +0 -2
- package/dist/lime-elements/p-fe7243c1.entry.js.map +0 -1
- /package/dist/lime-elements/{p-6edfe426.entry.js.map → p-011f5d81.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-8a7bc823.entry.js.map → p-20d1913a.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-244e13f5.entry.js.map → p-3f698d18.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-9abbe61a.entry.js.map → p-441c1eab.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-b957a3ca.entry.js.map → p-4558a60e.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-d7e93894.entry.js.map → p-597e6f79.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-208f87d2.entry.js.map → p-78abbc50.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-e4d64dd2.entry.js.map → p-8ae75f4a.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-5018673b.entry.js.map → p-99de518a.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-2173d6d5.entry.js.map → p-bd619d56.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-65d5d2fb.entry.js.map → p-bd6878ee.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-5bf57c21.entry.js.map → p-ce29c097.entry.js.map} +0 -0
- /package/dist/lime-elements/{p-00aee6b6.entry.js.map → p-e7201ebd.entry.js.map} +0 -0
|
@@ -0,0 +1,554 @@
|
|
|
1
|
+
import { h, Host, } from '@stencil/core';
|
|
2
|
+
import { isTypeAccepted } from '../../util/files';
|
|
3
|
+
import { getIconName } from '../icon/get-icon-props';
|
|
4
|
+
import translate from '../../global/translations';
|
|
5
|
+
import { createRandomString } from '../../util/random-string';
|
|
6
|
+
import { resizeImage } from '../../util/image-resize';
|
|
7
|
+
/**
|
|
8
|
+
* This component displays a profile picture, while allowing the user
|
|
9
|
+
* to change it via a file input or drag-and-drop.
|
|
10
|
+
*
|
|
11
|
+
* It supports client-side image resizing and conversion,
|
|
12
|
+
* as well as a simple lazy-loading mechanism.
|
|
13
|
+
*
|
|
14
|
+
* @exampleComponent limel-example-profile-picture-basic
|
|
15
|
+
* @exampleComponent limel-example-profile-picture-helper-text
|
|
16
|
+
* @exampleComponent limel-example-profile-picture-icon
|
|
17
|
+
* @exampleComponent limel-example-profile-picture-with-value
|
|
18
|
+
* @exampleComponent limel-example-profile-picture-loading
|
|
19
|
+
* @exampleComponent limel-example-profile-picture-image-fit
|
|
20
|
+
* @exampleComponent limel-example-profile-picture-composite
|
|
21
|
+
* @exampleComponent limel-example-profile-picture-resize-contain
|
|
22
|
+
* @exampleComponent limel-example-profile-picture-resize-cover
|
|
23
|
+
* @exampleComponent limel-example-profile-picture-resize-fallback
|
|
24
|
+
* @exampleComponent limel-example-profile-picture-styling
|
|
25
|
+
* @beta
|
|
26
|
+
*/
|
|
27
|
+
export class ProfilePicture {
|
|
28
|
+
constructor() {
|
|
29
|
+
this.removeButtonId = createRandomString();
|
|
30
|
+
this.browseButtonId = createRandomString();
|
|
31
|
+
this.renderHelperText = () => {
|
|
32
|
+
if (!this.helperText) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
return (h("limel-tooltip", { elementId: this.browseButtonId, label: this.helperText }));
|
|
36
|
+
};
|
|
37
|
+
this.handleNewFiles = async (event) => {
|
|
38
|
+
var _a, _b;
|
|
39
|
+
event.stopPropagation();
|
|
40
|
+
if (this.disabled) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const file = (_a = event.detail) === null || _a === void 0 ? void 0 : _a[0];
|
|
44
|
+
if (!file) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (!isTypeAccepted(file, this.accept)) {
|
|
48
|
+
this.filesRejected.emit([file]);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.revokeObjectUrl();
|
|
52
|
+
this.imageError = false;
|
|
53
|
+
let out = file;
|
|
54
|
+
// Optional client-side resize
|
|
55
|
+
if (this.resize && file.fileContent instanceof File) {
|
|
56
|
+
try {
|
|
57
|
+
const processed = await resizeImage(file.fileContent, Object.assign(Object.assign({}, this.resize), { fit: (_b = this.resize.fit) !== null && _b !== void 0 ? _b : this.imageFit }));
|
|
58
|
+
out = Object.assign(Object.assign({}, file), { filename: processed.name, size: processed.size, contentType: processed.type, fileContent: processed });
|
|
59
|
+
}
|
|
60
|
+
catch (_c) {
|
|
61
|
+
// Fall back to original file if resize fails
|
|
62
|
+
out = file;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Create an object URL for immediate preview if no href present
|
|
66
|
+
if (!out.href && out.fileContent instanceof File) {
|
|
67
|
+
this.objectUrl = URL.createObjectURL(out.fileContent);
|
|
68
|
+
}
|
|
69
|
+
this.change.emit(out);
|
|
70
|
+
};
|
|
71
|
+
this.handleRejectedFiles = (event) => {
|
|
72
|
+
event.stopPropagation();
|
|
73
|
+
this.filesRejected.emit(event.detail);
|
|
74
|
+
};
|
|
75
|
+
this.handleClear = (event) => {
|
|
76
|
+
event.stopPropagation();
|
|
77
|
+
this.revokeObjectUrl();
|
|
78
|
+
this.imageError = false;
|
|
79
|
+
this.change.emit(undefined);
|
|
80
|
+
};
|
|
81
|
+
this.onImageError = () => {
|
|
82
|
+
this.imageError = true;
|
|
83
|
+
};
|
|
84
|
+
this.openPopover = (event) => {
|
|
85
|
+
event.stopPropagation();
|
|
86
|
+
this.isErrorMessagePopoverOpen = true;
|
|
87
|
+
};
|
|
88
|
+
this.onPopoverClose = (event) => {
|
|
89
|
+
event.stopPropagation();
|
|
90
|
+
this.isErrorMessagePopoverOpen = false;
|
|
91
|
+
};
|
|
92
|
+
this.getTranslation = (key) => {
|
|
93
|
+
return translate.get(key, this.language);
|
|
94
|
+
};
|
|
95
|
+
this.language = 'en';
|
|
96
|
+
this.label = undefined;
|
|
97
|
+
this.icon = 'user';
|
|
98
|
+
this.helperText = undefined;
|
|
99
|
+
this.disabled = false;
|
|
100
|
+
this.readonly = false;
|
|
101
|
+
this.required = false;
|
|
102
|
+
this.invalid = false;
|
|
103
|
+
this.loading = false;
|
|
104
|
+
this.value = undefined;
|
|
105
|
+
this.imageFit = 'cover';
|
|
106
|
+
this.accept = 'image/jpeg,image/png,image/heic,.jpg,.jpeg,.png,.heic';
|
|
107
|
+
this.resize = undefined;
|
|
108
|
+
this.objectUrl = undefined;
|
|
109
|
+
this.imageError = false;
|
|
110
|
+
this.isErrorMessagePopoverOpen = false;
|
|
111
|
+
}
|
|
112
|
+
disconnectedCallback() {
|
|
113
|
+
this.revokeObjectUrl();
|
|
114
|
+
}
|
|
115
|
+
handleValueChange() {
|
|
116
|
+
// Clear previously created object URL when value changes
|
|
117
|
+
this.revokeObjectUrl();
|
|
118
|
+
this.imageError = false;
|
|
119
|
+
// If a new File without href is provided, create an object URL for preview
|
|
120
|
+
const currentValue = this.value;
|
|
121
|
+
if (currentValue &&
|
|
122
|
+
typeof currentValue !== 'string' &&
|
|
123
|
+
!currentValue.href &&
|
|
124
|
+
currentValue.fileContent instanceof File) {
|
|
125
|
+
this.objectUrl = URL.createObjectURL(currentValue.fileContent);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
render() {
|
|
129
|
+
const hostClassNames = {
|
|
130
|
+
'has-image-error': this.imageError,
|
|
131
|
+
};
|
|
132
|
+
if (this.readonly) {
|
|
133
|
+
return h(Host, { class: hostClassNames }, this.renderAvatar());
|
|
134
|
+
}
|
|
135
|
+
return (h(Host, { class: hostClassNames }, h("limel-file-dropzone", { disabled: this.disabled, accept: this.accept, onFilesSelected: this.handleNewFiles, onFilesRejected: this.handleRejectedFiles }, h("limel-file-input", { accept: this.accept, disabled: this.disabled, "aria-required": this.required ? 'true' : undefined, "aria-invalid": this.invalid ? 'true' : undefined }, this.renderBrowseButton())), this.renderClearButton(), this.renderSpinner(), this.renderErrorMessage(), this.renderHelperText()));
|
|
136
|
+
}
|
|
137
|
+
get hasValue() {
|
|
138
|
+
if (typeof this.value === 'string') {
|
|
139
|
+
return !!this.value;
|
|
140
|
+
}
|
|
141
|
+
if (this.value && (this.value.href || this.value.fileContent)) {
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
return !!this.objectUrl;
|
|
145
|
+
}
|
|
146
|
+
renderBrowseButton() {
|
|
147
|
+
return (h("button", { id: this.browseButtonId, type: "button", class: "avatar", disabled: this.disabled, "aria-label": this.label, "aria-busy": this.loading ? 'true' : 'false', "aria-live": "polite" }, this.renderAvatar()));
|
|
148
|
+
}
|
|
149
|
+
renderAvatar() {
|
|
150
|
+
const src = this.getImageSrc();
|
|
151
|
+
if (src) {
|
|
152
|
+
return (h("img", { src: src, alt: "", style: {
|
|
153
|
+
'--limel-profile-picture-object-fit': this.imageFit,
|
|
154
|
+
}, loading: "lazy", onError: this.onImageError }));
|
|
155
|
+
}
|
|
156
|
+
return this.renderIcon();
|
|
157
|
+
}
|
|
158
|
+
renderIcon() {
|
|
159
|
+
var _a, _b;
|
|
160
|
+
const icon = getIconName(this.icon);
|
|
161
|
+
return (h("limel-icon", { name: icon, style: {
|
|
162
|
+
color: `${(_a = this.icon) === null || _a === void 0 ? void 0 : _a.color}`,
|
|
163
|
+
'background-color': `${(_b = this.icon) === null || _b === void 0 ? void 0 : _b.backgroundColor}`,
|
|
164
|
+
} }));
|
|
165
|
+
}
|
|
166
|
+
renderClearButton() {
|
|
167
|
+
if (!this.hasValue || this.disabled) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
return [
|
|
171
|
+
h("button", { class: "remove", type: "button", id: this.removeButtonId, onClick: this.handleClear }),
|
|
172
|
+
h("limel-tooltip", { label: this.getTranslation('profile-picture.remove'), elementId: this.removeButtonId }),
|
|
173
|
+
];
|
|
174
|
+
}
|
|
175
|
+
renderSpinner() {
|
|
176
|
+
if (!this.loading) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
return h("limel-spinner", null);
|
|
180
|
+
}
|
|
181
|
+
// Collects derived flags used for deciding whether to show the unsupported preview message
|
|
182
|
+
getUnsupportedPreviewContext() {
|
|
183
|
+
const currentValue = this.value;
|
|
184
|
+
const hasNoSrc = !this.getImageSrc();
|
|
185
|
+
const hasLocalFile = !!(currentValue &&
|
|
186
|
+
typeof currentValue !== 'string' &&
|
|
187
|
+
currentValue.fileContent instanceof File &&
|
|
188
|
+
!currentValue.href);
|
|
189
|
+
const isResizeConfigured = !!this.resize;
|
|
190
|
+
return { hasNoSrc, hasLocalFile, isResizeConfigured };
|
|
191
|
+
}
|
|
192
|
+
shouldShowErrorMessage() {
|
|
193
|
+
const { hasNoSrc, hasLocalFile, isResizeConfigured } = this.getUnsupportedPreviewContext();
|
|
194
|
+
return ((hasNoSrc || this.imageError) && hasLocalFile && isResizeConfigured);
|
|
195
|
+
}
|
|
196
|
+
// Shows a non-intrusive note when there is a File without href and no object URL, which
|
|
197
|
+
// can happen if the browser failed to decode the source (e.g., HEIC in Chromium).
|
|
198
|
+
renderErrorMessage() {
|
|
199
|
+
if (!this.shouldShowErrorMessage()) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const errorIcon = {
|
|
203
|
+
name: 'error',
|
|
204
|
+
color: 'rgb(var(--color-orange-dark))',
|
|
205
|
+
};
|
|
206
|
+
const errorMessageStyles = {
|
|
207
|
+
maxWidth: '20rem',
|
|
208
|
+
borderRadius: '0.75rem',
|
|
209
|
+
};
|
|
210
|
+
return (h("limel-popover", { open: this.isErrorMessagePopoverOpen, onClick: this.openPopover, onClose: this.onPopoverClose }, h("limel-icon-button", { slot: "trigger", elevated: true, icon: errorIcon, "aria-live": "polite", label: this.getTranslation('profile-picture.unsupported-preview.title') }), h("limel-callout", { type: "warning", style: errorMessageStyles, heading: this.getTranslation('profile-picture.unsupported-preview.title') }, this.getTranslation('profile-picture.unsupported-preview.description'))));
|
|
211
|
+
}
|
|
212
|
+
getImageSrc() {
|
|
213
|
+
if (!this.value) {
|
|
214
|
+
return this.objectUrl; // Could be set from last selection before parent consumes
|
|
215
|
+
}
|
|
216
|
+
if (typeof this.value === 'string') {
|
|
217
|
+
return this.value;
|
|
218
|
+
}
|
|
219
|
+
if (this.value.href) {
|
|
220
|
+
return this.value.href;
|
|
221
|
+
}
|
|
222
|
+
if (this.value.fileContent instanceof File) {
|
|
223
|
+
return this.objectUrl;
|
|
224
|
+
}
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
revokeObjectUrl() {
|
|
228
|
+
if (this.objectUrl) {
|
|
229
|
+
URL.revokeObjectURL(this.objectUrl);
|
|
230
|
+
this.objectUrl = undefined;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
static get is() { return "limel-profile-picture"; }
|
|
234
|
+
static get encapsulation() { return "shadow"; }
|
|
235
|
+
static get originalStyleUrls() {
|
|
236
|
+
return {
|
|
237
|
+
"$": ["profile-picture.scss"]
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
static get styleUrls() {
|
|
241
|
+
return {
|
|
242
|
+
"$": ["profile-picture.css"]
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
static get properties() {
|
|
246
|
+
return {
|
|
247
|
+
"language": {
|
|
248
|
+
"type": "string",
|
|
249
|
+
"mutable": false,
|
|
250
|
+
"complexType": {
|
|
251
|
+
"original": "Languages",
|
|
252
|
+
"resolved": "\"da\" | \"de\" | \"en\" | \"fi\" | \"fr\" | \"nb\" | \"nl\" | \"no\" | \"sv\"",
|
|
253
|
+
"references": {
|
|
254
|
+
"Languages": {
|
|
255
|
+
"location": "import",
|
|
256
|
+
"path": "../date-picker/date.types"
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
"required": false,
|
|
261
|
+
"optional": false,
|
|
262
|
+
"docs": {
|
|
263
|
+
"tags": [],
|
|
264
|
+
"text": "Defines the language for translations.\nWill translate the translatable strings on the components."
|
|
265
|
+
},
|
|
266
|
+
"attribute": "language",
|
|
267
|
+
"reflect": true,
|
|
268
|
+
"defaultValue": "'en'"
|
|
269
|
+
},
|
|
270
|
+
"label": {
|
|
271
|
+
"type": "string",
|
|
272
|
+
"mutable": false,
|
|
273
|
+
"complexType": {
|
|
274
|
+
"original": "string",
|
|
275
|
+
"resolved": "string",
|
|
276
|
+
"references": {}
|
|
277
|
+
},
|
|
278
|
+
"required": false,
|
|
279
|
+
"optional": false,
|
|
280
|
+
"docs": {
|
|
281
|
+
"tags": [],
|
|
282
|
+
"text": "Accessible label for the the browse button."
|
|
283
|
+
},
|
|
284
|
+
"attribute": "label",
|
|
285
|
+
"reflect": true
|
|
286
|
+
},
|
|
287
|
+
"icon": {
|
|
288
|
+
"type": "string",
|
|
289
|
+
"mutable": false,
|
|
290
|
+
"complexType": {
|
|
291
|
+
"original": "string | Icon",
|
|
292
|
+
"resolved": "Icon | string",
|
|
293
|
+
"references": {
|
|
294
|
+
"Icon": {
|
|
295
|
+
"location": "import",
|
|
296
|
+
"path": "../../global/shared-types/icon.types"
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
"required": false,
|
|
301
|
+
"optional": false,
|
|
302
|
+
"docs": {
|
|
303
|
+
"tags": [],
|
|
304
|
+
"text": "Placeholder icon of the component, displayed when no image is present."
|
|
305
|
+
},
|
|
306
|
+
"attribute": "icon",
|
|
307
|
+
"reflect": false,
|
|
308
|
+
"defaultValue": "'user'"
|
|
309
|
+
},
|
|
310
|
+
"helperText": {
|
|
311
|
+
"type": "string",
|
|
312
|
+
"mutable": false,
|
|
313
|
+
"complexType": {
|
|
314
|
+
"original": "string",
|
|
315
|
+
"resolved": "string",
|
|
316
|
+
"references": {}
|
|
317
|
+
},
|
|
318
|
+
"required": false,
|
|
319
|
+
"optional": true,
|
|
320
|
+
"docs": {
|
|
321
|
+
"tags": [],
|
|
322
|
+
"text": "Helper text shown as a tooltip on hover or focus."
|
|
323
|
+
},
|
|
324
|
+
"attribute": "helper-text",
|
|
325
|
+
"reflect": false
|
|
326
|
+
},
|
|
327
|
+
"disabled": {
|
|
328
|
+
"type": "boolean",
|
|
329
|
+
"mutable": false,
|
|
330
|
+
"complexType": {
|
|
331
|
+
"original": "boolean",
|
|
332
|
+
"resolved": "boolean",
|
|
333
|
+
"references": {}
|
|
334
|
+
},
|
|
335
|
+
"required": false,
|
|
336
|
+
"optional": false,
|
|
337
|
+
"docs": {
|
|
338
|
+
"tags": [],
|
|
339
|
+
"text": "Disables user interaction.\nPrevents uploading new pictures or removing existing ones."
|
|
340
|
+
},
|
|
341
|
+
"attribute": "disabled",
|
|
342
|
+
"reflect": true,
|
|
343
|
+
"defaultValue": "false"
|
|
344
|
+
},
|
|
345
|
+
"readonly": {
|
|
346
|
+
"type": "boolean",
|
|
347
|
+
"mutable": false,
|
|
348
|
+
"complexType": {
|
|
349
|
+
"original": "boolean",
|
|
350
|
+
"resolved": "boolean",
|
|
351
|
+
"references": {}
|
|
352
|
+
},
|
|
353
|
+
"required": false,
|
|
354
|
+
"optional": false,
|
|
355
|
+
"docs": {
|
|
356
|
+
"tags": [],
|
|
357
|
+
"text": "Readonly prevents changing the value but allows interaction like focus."
|
|
358
|
+
},
|
|
359
|
+
"attribute": "readonly",
|
|
360
|
+
"reflect": true,
|
|
361
|
+
"defaultValue": "false"
|
|
362
|
+
},
|
|
363
|
+
"required": {
|
|
364
|
+
"type": "boolean",
|
|
365
|
+
"mutable": false,
|
|
366
|
+
"complexType": {
|
|
367
|
+
"original": "boolean",
|
|
368
|
+
"resolved": "boolean",
|
|
369
|
+
"references": {}
|
|
370
|
+
},
|
|
371
|
+
"required": false,
|
|
372
|
+
"optional": false,
|
|
373
|
+
"docs": {
|
|
374
|
+
"tags": [],
|
|
375
|
+
"text": "Marks the control as required."
|
|
376
|
+
},
|
|
377
|
+
"attribute": "required",
|
|
378
|
+
"reflect": true,
|
|
379
|
+
"defaultValue": "false"
|
|
380
|
+
},
|
|
381
|
+
"invalid": {
|
|
382
|
+
"type": "boolean",
|
|
383
|
+
"mutable": false,
|
|
384
|
+
"complexType": {
|
|
385
|
+
"original": "boolean",
|
|
386
|
+
"resolved": "boolean",
|
|
387
|
+
"references": {}
|
|
388
|
+
},
|
|
389
|
+
"required": false,
|
|
390
|
+
"optional": false,
|
|
391
|
+
"docs": {
|
|
392
|
+
"tags": [],
|
|
393
|
+
"text": "Marks the control as invalid."
|
|
394
|
+
},
|
|
395
|
+
"attribute": "invalid",
|
|
396
|
+
"reflect": true,
|
|
397
|
+
"defaultValue": "false"
|
|
398
|
+
},
|
|
399
|
+
"loading": {
|
|
400
|
+
"type": "boolean",
|
|
401
|
+
"mutable": false,
|
|
402
|
+
"complexType": {
|
|
403
|
+
"original": "boolean",
|
|
404
|
+
"resolved": "boolean",
|
|
405
|
+
"references": {}
|
|
406
|
+
},
|
|
407
|
+
"required": false,
|
|
408
|
+
"optional": false,
|
|
409
|
+
"docs": {
|
|
410
|
+
"tags": [],
|
|
411
|
+
"text": "Set to `true` to put the component in the `loading` state,\nand render an indeterminate progress indicator inside.\nThis does _not_ disable the interactivity of the component!"
|
|
412
|
+
},
|
|
413
|
+
"attribute": "loading",
|
|
414
|
+
"reflect": true,
|
|
415
|
+
"defaultValue": "false"
|
|
416
|
+
},
|
|
417
|
+
"value": {
|
|
418
|
+
"type": "string",
|
|
419
|
+
"mutable": false,
|
|
420
|
+
"complexType": {
|
|
421
|
+
"original": "string | FileInfo",
|
|
422
|
+
"resolved": "FileInfo | string",
|
|
423
|
+
"references": {
|
|
424
|
+
"FileInfo": {
|
|
425
|
+
"location": "import",
|
|
426
|
+
"path": "../../global/shared-types/file.types"
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
},
|
|
430
|
+
"required": false,
|
|
431
|
+
"optional": true,
|
|
432
|
+
"docs": {
|
|
433
|
+
"tags": [],
|
|
434
|
+
"text": "Current image to display. Either a URL string or a `FileInfo` with an href."
|
|
435
|
+
},
|
|
436
|
+
"attribute": "value",
|
|
437
|
+
"reflect": false
|
|
438
|
+
},
|
|
439
|
+
"imageFit": {
|
|
440
|
+
"type": "string",
|
|
441
|
+
"mutable": false,
|
|
442
|
+
"complexType": {
|
|
443
|
+
"original": "'cover' | 'contain'",
|
|
444
|
+
"resolved": "\"contain\" | \"cover\"",
|
|
445
|
+
"references": {}
|
|
446
|
+
},
|
|
447
|
+
"required": false,
|
|
448
|
+
"optional": false,
|
|
449
|
+
"docs": {
|
|
450
|
+
"tags": [],
|
|
451
|
+
"text": "How the image should fit within the container.\n- `cover` will fill the container and crop excess parts.\n- `contain` will scale the image to fit within the container without cropping."
|
|
452
|
+
},
|
|
453
|
+
"attribute": "image-fit",
|
|
454
|
+
"reflect": true,
|
|
455
|
+
"defaultValue": "'cover'"
|
|
456
|
+
},
|
|
457
|
+
"accept": {
|
|
458
|
+
"type": "string",
|
|
459
|
+
"mutable": false,
|
|
460
|
+
"complexType": {
|
|
461
|
+
"original": "string",
|
|
462
|
+
"resolved": "string",
|
|
463
|
+
"references": {}
|
|
464
|
+
},
|
|
465
|
+
"required": false,
|
|
466
|
+
"optional": false,
|
|
467
|
+
"docs": {
|
|
468
|
+
"tags": [],
|
|
469
|
+
"text": "A comma-separated list of accepted file types."
|
|
470
|
+
},
|
|
471
|
+
"attribute": "accept",
|
|
472
|
+
"reflect": true,
|
|
473
|
+
"defaultValue": "'image/jpeg,image/png,image/heic,.jpg,.jpeg,.png,.heic'"
|
|
474
|
+
},
|
|
475
|
+
"resize": {
|
|
476
|
+
"type": "unknown",
|
|
477
|
+
"mutable": false,
|
|
478
|
+
"complexType": {
|
|
479
|
+
"original": "ResizeOptions",
|
|
480
|
+
"resolved": "{ width: number; height: number; fit?: \"cover\" | \"contain\"; type?: \"image/jpeg\" | \"image/png\"; quality?: number; rename?: (originalName: string) => string; }",
|
|
481
|
+
"references": {
|
|
482
|
+
"ResizeOptions": {
|
|
483
|
+
"location": "import",
|
|
484
|
+
"path": "../../util/image-resize"
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
},
|
|
488
|
+
"required": false,
|
|
489
|
+
"optional": true,
|
|
490
|
+
"docs": {
|
|
491
|
+
"tags": [],
|
|
492
|
+
"text": "Optional client-side resize before emitting the file.\nIf provided, the selected image will be resized on the client device.\n:::note\nHEIC may not decode in all browsers; when decoding fails, the original\nfile will be emitted. See the examples for more info.\n:::"
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
static get states() {
|
|
498
|
+
return {
|
|
499
|
+
"objectUrl": {},
|
|
500
|
+
"imageError": {},
|
|
501
|
+
"isErrorMessagePopoverOpen": {}
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
static get events() {
|
|
505
|
+
return [{
|
|
506
|
+
"method": "change",
|
|
507
|
+
"name": "change",
|
|
508
|
+
"bubbles": true,
|
|
509
|
+
"cancelable": true,
|
|
510
|
+
"composed": true,
|
|
511
|
+
"docs": {
|
|
512
|
+
"tags": [],
|
|
513
|
+
"text": "Emitted when the picture changes (first FileInfo only)."
|
|
514
|
+
},
|
|
515
|
+
"complexType": {
|
|
516
|
+
"original": "FileInfo | undefined",
|
|
517
|
+
"resolved": "FileInfo",
|
|
518
|
+
"references": {
|
|
519
|
+
"FileInfo": {
|
|
520
|
+
"location": "import",
|
|
521
|
+
"path": "../../global/shared-types/file.types"
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
}, {
|
|
526
|
+
"method": "filesRejected",
|
|
527
|
+
"name": "filesRejected",
|
|
528
|
+
"bubbles": true,
|
|
529
|
+
"cancelable": true,
|
|
530
|
+
"composed": true,
|
|
531
|
+
"docs": {
|
|
532
|
+
"tags": [],
|
|
533
|
+
"text": "Emitted when a file is rejected by accept filter."
|
|
534
|
+
},
|
|
535
|
+
"complexType": {
|
|
536
|
+
"original": "FileInfo[]",
|
|
537
|
+
"resolved": "FileInfo[]",
|
|
538
|
+
"references": {
|
|
539
|
+
"FileInfo": {
|
|
540
|
+
"location": "import",
|
|
541
|
+
"path": "../../global/shared-types/file.types"
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
}];
|
|
546
|
+
}
|
|
547
|
+
static get watchers() {
|
|
548
|
+
return [{
|
|
549
|
+
"propName": "value",
|
|
550
|
+
"methodName": "handleValueChange"
|
|
551
|
+
}];
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
//# sourceMappingURL=profile-picture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-picture.js","sourceRoot":"","sources":["../../../src/components/profile-picture/profile-picture.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { FileInfo } from '../../global/shared-types/file.types';\nimport { isTypeAccepted } from '../../util/files';\nimport { Icon } from '../../global/shared-types/icon.types';\nimport { getIconName } from '../icon/get-icon-props';\nimport translate from '../../global/translations';\nimport { Languages } from '../date-picker/date.types';\nimport { createRandomString } from '../../util/random-string';\nimport { resizeImage, ResizeOptions } from '../../util/image-resize';\n\n/**\n * This component displays a profile picture, while allowing the user\n * to change it via a file input or drag-and-drop.\n *\n * It supports client-side image resizing and conversion,\n * as well as a simple lazy-loading mechanism.\n *\n * @exampleComponent limel-example-profile-picture-basic\n * @exampleComponent limel-example-profile-picture-helper-text\n * @exampleComponent limel-example-profile-picture-icon\n * @exampleComponent limel-example-profile-picture-with-value\n * @exampleComponent limel-example-profile-picture-loading\n * @exampleComponent limel-example-profile-picture-image-fit\n * @exampleComponent limel-example-profile-picture-composite\n * @exampleComponent limel-example-profile-picture-resize-contain\n * @exampleComponent limel-example-profile-picture-resize-cover\n * @exampleComponent limel-example-profile-picture-resize-fallback\n * @exampleComponent limel-example-profile-picture-styling\n * @beta\n */\n@Component({\n tag: 'limel-profile-picture',\n shadow: true,\n styleUrl: 'profile-picture.scss',\n})\nexport class ProfilePicture {\n /**\n * Defines the language for translations.\n * Will translate the translatable strings on the components.\n */\n @Prop({ reflect: true })\n public language: Languages = 'en';\n\n /**\n * Accessible label for the the browse button.\n */\n @Prop({ reflect: true })\n public label: string;\n\n /**\n * Placeholder icon of the component, displayed when no image is present.\n */\n @Prop()\n public icon: string | Icon = 'user';\n\n /**\n * Helper text shown as a tooltip on hover or focus.\n */\n @Prop()\n public helperText?: string;\n\n /**\n * Disables user interaction.\n * Prevents uploading new pictures or removing existing ones.\n */\n @Prop({ reflect: true })\n public disabled = false;\n\n /**\n * Readonly prevents changing the value but allows interaction like focus.\n */\n @Prop({ reflect: true })\n public readonly = false;\n\n /**\n * Marks the control as required.\n */\n @Prop({ reflect: true })\n public required = false;\n\n /**\n * Marks the control as invalid.\n */\n @Prop({ reflect: true })\n public invalid = false;\n\n /**\n * Set to `true` to put the component in the `loading` state,\n * and render an indeterminate progress indicator inside.\n * This does _not_ disable the interactivity of the component!\n */\n @Prop({ reflect: true })\n public loading = false;\n\n /**\n * Current image to display. Either a URL string or a `FileInfo` with an href.\n */\n @Prop()\n public value?: string | FileInfo;\n\n /**\n * How the image should fit within the container.\n * - `cover` will fill the container and crop excess parts.\n * - `contain` will scale the image to fit within the container without cropping.\n */\n @Prop({ reflect: true })\n public imageFit: 'cover' | 'contain' = 'cover';\n\n /**\n * A comma-separated list of accepted file types.\n */\n @Prop({ reflect: true })\n public accept: string =\n 'image/jpeg,image/png,image/heic,.jpg,.jpeg,.png,.heic';\n\n /**\n * Optional client-side resize before emitting the file.\n * If provided, the selected image will be resized on the client device.\n * :::note\n * HEIC may not decode in all browsers; when decoding fails, the original\n * file will be emitted. See the examples for more info.\n * :::\n */\n @Prop()\n public resize?: ResizeOptions;\n\n /**\n * Emitted when the picture changes (first FileInfo only).\n */\n @Event()\n public change: EventEmitter<FileInfo | undefined>;\n\n /**\n * Emitted when a file is rejected by accept filter.\n */\n @Event()\n public filesRejected: EventEmitter<FileInfo[]>;\n\n @State()\n private objectUrl?: string;\n\n @State()\n private imageError = false;\n\n @State()\n private isErrorMessagePopoverOpen = false;\n\n private removeButtonId = createRandomString();\n private browseButtonId = createRandomString();\n\n public disconnectedCallback() {\n this.revokeObjectUrl();\n }\n\n @Watch('value')\n protected handleValueChange() {\n // Clear previously created object URL when value changes\n this.revokeObjectUrl();\n this.imageError = false;\n\n // If a new File without href is provided, create an object URL for preview\n const currentValue = this.value;\n if (\n currentValue &&\n typeof currentValue !== 'string' &&\n !currentValue.href &&\n currentValue.fileContent instanceof File\n ) {\n this.objectUrl = URL.createObjectURL(currentValue.fileContent);\n }\n }\n\n public render() {\n const hostClassNames = {\n 'has-image-error': this.imageError,\n };\n\n if (this.readonly) {\n return <Host class={hostClassNames}>{this.renderAvatar()}</Host>;\n }\n\n return (\n <Host class={hostClassNames}>\n <limel-file-dropzone\n disabled={this.disabled}\n accept={this.accept}\n onFilesSelected={this.handleNewFiles}\n onFilesRejected={this.handleRejectedFiles}\n >\n <limel-file-input\n accept={this.accept}\n disabled={this.disabled}\n aria-required={this.required ? 'true' : undefined}\n aria-invalid={this.invalid ? 'true' : undefined}\n >\n {this.renderBrowseButton()}\n </limel-file-input>\n </limel-file-dropzone>\n {this.renderClearButton()}\n {this.renderSpinner()}\n {this.renderErrorMessage()}\n {this.renderHelperText()}\n </Host>\n );\n }\n\n private get hasValue(): boolean {\n if (typeof this.value === 'string') {\n return !!this.value;\n }\n\n if (this.value && (this.value.href || this.value.fileContent)) {\n return true;\n }\n\n return !!this.objectUrl;\n }\n\n private renderBrowseButton() {\n return (\n <button\n id={this.browseButtonId}\n type=\"button\"\n class=\"avatar\"\n disabled={this.disabled}\n aria-label={this.label}\n aria-busy={this.loading ? 'true' : 'false'}\n aria-live=\"polite\"\n >\n {this.renderAvatar()}\n </button>\n );\n }\n\n private renderAvatar() {\n const src = this.getImageSrc();\n\n if (src) {\n return (\n <img\n src={src}\n alt=\"\"\n style={{\n '--limel-profile-picture-object-fit': this.imageFit,\n }}\n loading=\"lazy\"\n onError={this.onImageError}\n />\n );\n }\n\n return this.renderIcon();\n }\n\n private renderIcon() {\n const icon = getIconName(this.icon);\n\n return (\n <limel-icon\n name={icon}\n style={{\n color: `${(this.icon as Icon)?.color}`,\n 'background-color': `${\n (this.icon as Icon)?.backgroundColor\n }`,\n }}\n />\n );\n }\n\n private renderClearButton() {\n if (!this.hasValue || this.disabled) {\n return;\n }\n\n return [\n <button\n class=\"remove\"\n type=\"button\"\n id={this.removeButtonId}\n onClick={this.handleClear}\n />,\n <limel-tooltip\n label={this.getTranslation('profile-picture.remove')}\n elementId={this.removeButtonId}\n />,\n ];\n }\n\n private renderSpinner() {\n if (!this.loading) {\n return;\n }\n\n return <limel-spinner />;\n }\n\n private renderHelperText = () => {\n if (!this.helperText) {\n return;\n }\n\n return (\n <limel-tooltip\n elementId={this.browseButtonId}\n label={this.helperText}\n />\n );\n };\n\n // Collects derived flags used for deciding whether to show the unsupported preview message\n private getUnsupportedPreviewContext() {\n const currentValue = this.value;\n const hasNoSrc = !this.getImageSrc();\n const hasLocalFile = !!(\n currentValue &&\n typeof currentValue !== 'string' &&\n currentValue.fileContent instanceof File &&\n !currentValue.href\n );\n const isResizeConfigured = !!this.resize;\n\n return { hasNoSrc, hasLocalFile, isResizeConfigured };\n }\n\n private shouldShowErrorMessage(): boolean {\n const { hasNoSrc, hasLocalFile, isResizeConfigured } =\n this.getUnsupportedPreviewContext();\n\n return (\n (hasNoSrc || this.imageError) && hasLocalFile && isResizeConfigured\n );\n }\n\n // Shows a non-intrusive note when there is a File without href and no object URL, which\n // can happen if the browser failed to decode the source (e.g., HEIC in Chromium).\n private renderErrorMessage() {\n if (!this.shouldShowErrorMessage()) {\n return;\n }\n\n const errorIcon = {\n name: 'error',\n color: 'rgb(var(--color-orange-dark))',\n };\n const errorMessageStyles = {\n maxWidth: '20rem',\n borderRadius: '0.75rem',\n };\n return (\n <limel-popover\n open={this.isErrorMessagePopoverOpen}\n onClick={this.openPopover}\n onClose={this.onPopoverClose}\n >\n <limel-icon-button\n slot=\"trigger\"\n elevated={true}\n icon={errorIcon}\n aria-live=\"polite\"\n label={this.getTranslation(\n 'profile-picture.unsupported-preview.title'\n )}\n />\n <limel-callout\n type=\"warning\"\n style={errorMessageStyles}\n heading={this.getTranslation(\n 'profile-picture.unsupported-preview.title'\n )}\n >\n {this.getTranslation(\n 'profile-picture.unsupported-preview.description'\n )}\n </limel-callout>\n </limel-popover>\n );\n }\n\n private handleNewFiles = async (event: CustomEvent<FileInfo[]>) => {\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n\n const file = event.detail?.[0];\n if (!file) {\n return;\n }\n\n if (!isTypeAccepted(file, this.accept)) {\n this.filesRejected.emit([file]);\n return;\n }\n\n this.revokeObjectUrl();\n this.imageError = false;\n\n let out = file;\n\n // Optional client-side resize\n if (this.resize && file.fileContent instanceof File) {\n try {\n const processed = await resizeImage(file.fileContent, {\n ...this.resize,\n fit: this.resize.fit ?? this.imageFit,\n });\n out = {\n ...file,\n filename: processed.name,\n size: processed.size,\n contentType: processed.type,\n fileContent: processed,\n };\n } catch {\n // Fall back to original file if resize fails\n out = file;\n }\n }\n // Create an object URL for immediate preview if no href present\n if (!out.href && out.fileContent instanceof File) {\n this.objectUrl = URL.createObjectURL(out.fileContent);\n }\n this.change.emit(out);\n };\n\n private handleRejectedFiles = (event: CustomEvent<FileInfo[]>) => {\n event.stopPropagation();\n this.filesRejected.emit(event.detail);\n };\n\n private getImageSrc(): string | undefined {\n if (!this.value) {\n return this.objectUrl; // Could be set from last selection before parent consumes\n }\n\n if (typeof this.value === 'string') {\n return this.value;\n }\n\n if (this.value.href) {\n return this.value.href;\n }\n\n if (this.value.fileContent instanceof File) {\n return this.objectUrl;\n }\n\n return undefined;\n }\n\n private revokeObjectUrl() {\n if (this.objectUrl) {\n URL.revokeObjectURL(this.objectUrl);\n this.objectUrl = undefined;\n }\n }\n\n private handleClear = (event: Event) => {\n event.stopPropagation();\n this.revokeObjectUrl();\n this.imageError = false;\n this.change.emit(undefined);\n };\n\n private onImageError = () => {\n this.imageError = true;\n };\n\n private openPopover = (event: MouseEvent) => {\n event.stopPropagation();\n this.isErrorMessagePopoverOpen = true;\n };\n\n private onPopoverClose = (event: CustomEvent) => {\n event.stopPropagation();\n this.isErrorMessagePopoverOpen = false;\n };\n\n private getTranslation = (key: string) => {\n return translate.get(key, this.language);\n };\n}\n"]}
|
|
@@ -50,5 +50,8 @@ export default {
|
|
|
50
50
|
'ai-avatar.thinking': 'tænker',
|
|
51
51
|
'table.select-all': 'Vælg alle rækker',
|
|
52
52
|
'table.select-row': 'Vælg denne række',
|
|
53
|
+
'profile-picture.remove': 'Fjern valgt billede',
|
|
54
|
+
'profile-picture.unsupported-preview.title': 'Ikke-understøttet billedformat',
|
|
55
|
+
'profile-picture.unsupported-preview.description': 'Vi kan ikke vise det valgte billede i denne browser. Vælg venligst en anden billedfil.',
|
|
53
56
|
};
|
|
54
57
|
//# sourceMappingURL=da.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"da.js","sourceRoot":"","sources":["../../src/translations/da.ts"],"names":[],"mappings":"AAAA,eAAe;EACX,MAAM,EAAE,OAAO;EACf,IAAI,EAAE,KAAK;EACX,MAAM,EAAE,UAAU;EAClB,OAAO,EAAE,WAAW;EACpB,KAAK,EAAE,OAAO;EACd,qBAAqB,EAAE,OAAO;EAC9B,mBAAmB,EAAE,KAAK;EAC1B,oBAAoB,EAAE,YAAY;EAClC,cAAc,EAAE,QAAQ;EACxB,mBAAmB,EAAE,QAAQ;EAC7B,aAAa,EAAE,KAAK;EACpB,iBAAiB,EAAE,UAAU;EAC7B,iBAAiB,EAAE,UAAU;EAC7B,0BAA0B,EAAE,wBAAwB;EACpD,2BAA2B,EAAE,wBAAwB;EACrD,mBAAmB,EAAE,MAAM;EAC3B,2BAA2B,EAAE,OAAO;EACpC,6BAA6B,EAAE,SAAS;EACxC,0BAA0B,EAAE,IAAI;EAChC,oBAAoB,EAAE,UAAU;EAChC,kBAAkB,EAAE,KAAK;EACzB,yBAAyB,EACrB,oDAAoD;EACxD,0CAA0C,EAAE,2BAA2B;EACvE,sBAAsB,EAAE,MAAM;EAC9B,6BAA6B,EAAE,kBAAkB;EACjD,gCAAgC,EAAE,kBAAkB;EACpD,6BAA6B,EAAE,kBAAkB;EACjD,0BAA0B,EAAE,OAAO;EACnC,kBAAkB,EAAE,KAAK;EACzB,oBAAoB,EAAE,QAAQ;EAC9B,2BAA2B,EAAE,eAAe;EAC5C,gBAAgB,EAAE,cAAc;EAChC,gBAAgB,EAAE,cAAc;EAChC,gBAAgB,EAAE,cAAc;EAChC,2BAA2B,EAAE,YAAY;EACzC,2BAA2B,EAAE,kBAAkB;EAC/C,wBAAwB,EAAE,WAAW;EACrC,kBAAkB,EAAE,aAAa;EACjC,uBAAuB,EAAE,OAAO;EAChC,uBAAuB,EAAE,MAAM;EAC/B,wBAAwB,EAAE,UAAU;EACpC,kBAAkB,EAAE,MAAM;EAC1B,2BAA2B,EAAE,mCAAmC;EAChE,0BAA0B,EAAE,0CAA0C;EACtE,2BAA2B,EAAE,+BAA+B;EAC5D,iCAAiC,EAC7B,kEAAkE;EACtE,cAAc,EAAE,sBAAsB;EACtC,iBAAiB,EAAE,WAAW;EAC9B,oBAAoB,EAAE,QAAQ;EAC9B,kBAAkB,EAAE,kBAAkB;EACtC,kBAAkB,EAAE,kBAAkB;
|
|
1
|
+
{"version":3,"file":"da.js","sourceRoot":"","sources":["../../src/translations/da.ts"],"names":[],"mappings":"AAAA,eAAe;EACX,MAAM,EAAE,OAAO;EACf,IAAI,EAAE,KAAK;EACX,MAAM,EAAE,UAAU;EAClB,OAAO,EAAE,WAAW;EACpB,KAAK,EAAE,OAAO;EACd,qBAAqB,EAAE,OAAO;EAC9B,mBAAmB,EAAE,KAAK;EAC1B,oBAAoB,EAAE,YAAY;EAClC,cAAc,EAAE,QAAQ;EACxB,mBAAmB,EAAE,QAAQ;EAC7B,aAAa,EAAE,KAAK;EACpB,iBAAiB,EAAE,UAAU;EAC7B,iBAAiB,EAAE,UAAU;EAC7B,0BAA0B,EAAE,wBAAwB;EACpD,2BAA2B,EAAE,wBAAwB;EACrD,mBAAmB,EAAE,MAAM;EAC3B,2BAA2B,EAAE,OAAO;EACpC,6BAA6B,EAAE,SAAS;EACxC,0BAA0B,EAAE,IAAI;EAChC,oBAAoB,EAAE,UAAU;EAChC,kBAAkB,EAAE,KAAK;EACzB,yBAAyB,EACrB,oDAAoD;EACxD,0CAA0C,EAAE,2BAA2B;EACvE,sBAAsB,EAAE,MAAM;EAC9B,6BAA6B,EAAE,kBAAkB;EACjD,gCAAgC,EAAE,kBAAkB;EACpD,6BAA6B,EAAE,kBAAkB;EACjD,0BAA0B,EAAE,OAAO;EACnC,kBAAkB,EAAE,KAAK;EACzB,oBAAoB,EAAE,QAAQ;EAC9B,2BAA2B,EAAE,eAAe;EAC5C,gBAAgB,EAAE,cAAc;EAChC,gBAAgB,EAAE,cAAc;EAChC,gBAAgB,EAAE,cAAc;EAChC,2BAA2B,EAAE,YAAY;EACzC,2BAA2B,EAAE,kBAAkB;EAC/C,wBAAwB,EAAE,WAAW;EACrC,kBAAkB,EAAE,aAAa;EACjC,uBAAuB,EAAE,OAAO;EAChC,uBAAuB,EAAE,MAAM;EAC/B,wBAAwB,EAAE,UAAU;EACpC,kBAAkB,EAAE,MAAM;EAC1B,2BAA2B,EAAE,mCAAmC;EAChE,0BAA0B,EAAE,0CAA0C;EACtE,2BAA2B,EAAE,+BAA+B;EAC5D,iCAAiC,EAC7B,kEAAkE;EACtE,cAAc,EAAE,sBAAsB;EACtC,iBAAiB,EAAE,WAAW;EAC9B,oBAAoB,EAAE,QAAQ;EAC9B,kBAAkB,EAAE,kBAAkB;EACtC,kBAAkB,EAAE,kBAAkB;EACtC,wBAAwB,EAAE,qBAAqB;EAC/C,2CAA2C,EACvC,gCAAgC;EACpC,iDAAiD,EAC7C,wFAAwF;CAC/F,CAAC","sourcesContent":["export default {\n remove: 'Fjern',\n save: 'Gem',\n cancel: 'Annullér',\n loading: 'Indlæser…',\n value: 'Værdi',\n 'action-bar.collapse': 'Skjul',\n 'action-bar.expand': 'Vis',\n 'action-bar.actions': 'Handlinger',\n 'callout.note': 'Bemærk',\n 'callout.important': 'Vigtig',\n 'callout.tip': 'Tip',\n 'callout.caution': 'Advarsel',\n 'callout.warning': 'Advarsel',\n 'collapsible-section.open': 'Åbn { header } sektion',\n 'collapsible-section.close': 'Luk { header } sektion',\n 'date-picker.today': 'Idag',\n 'date-picker.month.heading': 'Måned',\n 'date-picker.quarter.heading': 'Kvartal',\n 'date-picker.year.heading': 'År',\n 'chip-set.clear-all': 'Ryd alle',\n 'snackbar.dismiss': 'Luk',\n 'file.drag-and-drop-tips':\n 'Træk & slip filen her, eller klik for at gennemse.',\n 'file-viewer.message.unsupported-filetype': 'Denne fil kan ikke vises!',\n 'file-viewer.download': 'Hent',\n 'file-viewer.exit-fullscreen': 'Afslut fuldskærm',\n 'file-viewer.open-in-fullscreen': 'Åbn i fuld skærm',\n 'file-viewer.open-in-new-tab': 'Åbn i en ny fane',\n 'file-viewer.more-actions': 'Mere…',\n 'editor-menu.bold': 'Fed',\n 'editor-menu.italic': 'Kursiv',\n 'editor-menu.strikethrough': 'Gennemstreget',\n 'editor-menu.h1': 'Overskrift 1',\n 'editor-menu.h2': 'Overskrift 2',\n 'editor-menu.h3': 'Overskrift 3',\n 'editor-menu.bulleted-list': 'Punktliste',\n 'editor-menu.numbered-list': 'Nummereret liste',\n 'editor-menu.blockquote': 'Blokcitat',\n 'editor-menu.link': 'Tilføj link',\n 'editor-link-menu.text': 'Tekst',\n 'editor-link-menu.link': 'Link',\n 'editor-menu.code-block': 'Kodeblok',\n 'editor-menu.code': 'Kode',\n 'editor-image-view.loading': 'Indlæser billede: { filename }...',\n 'editor-image-view.failed': 'Noget gik galt med billede: { filename }',\n 'editor-image-view.success': 'Billede: { filename } er klar',\n 'editor-image-view.resize-handle':\n 'Træk til højre eller venstre for at ændre størrelsen på billedet',\n 'progress-bar': 'Fremskridtsindikator',\n 'ai-avatar.label': 'AI-avatar',\n 'ai-avatar.thinking': 'tænker',\n 'table.select-all': 'Vælg alle rækker',\n 'table.select-row': 'Vælg denne række',\n 'profile-picture.remove': 'Fjern valgt billede',\n 'profile-picture.unsupported-preview.title':\n 'Ikke-understøttet billedformat',\n 'profile-picture.unsupported-preview.description':\n 'Vi kan ikke vise det valgte billede i denne browser. Vælg venligst en anden billedfil.',\n};\n"]}
|
|
@@ -50,5 +50,8 @@ export default {
|
|
|
50
50
|
'ai-avatar.thinking': 'denkt',
|
|
51
51
|
'table.select-all': 'Alle Zeilen auswählen',
|
|
52
52
|
'table.select-row': 'Diese Zeile auswählen',
|
|
53
|
+
'profile-picture.remove': 'Ausgewähltes Bild entfernen',
|
|
54
|
+
'profile-picture.unsupported-preview.title': 'Nicht unterstütztes Bildformat',
|
|
55
|
+
'profile-picture.unsupported-preview.description': 'Wir können das ausgewählte Bild in diesem Browser nicht anzeigen. Bitte wählen Sie eine andere Bilddatei.',
|
|
53
56
|
};
|
|
54
57
|
//# sourceMappingURL=de.js.map
|