invensys-ng 21.3.10 → 21.3.12
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/fesm2022/invensys-ng.mjs +234 -76
- package/fesm2022/invensys-ng.mjs.map +1 -1
- package/package.json +1 -1
- package/types/invensys-ng.d.ts +64 -2
package/fesm2022/invensys-ng.mjs
CHANGED
|
@@ -3003,6 +3003,239 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
|
|
|
3003
3003
|
type: Input
|
|
3004
3004
|
}] } });
|
|
3005
3005
|
|
|
3006
|
+
class IMessage {
|
|
3007
|
+
/**
|
|
3008
|
+
* Severity type of the message
|
|
3009
|
+
* @default 'info'
|
|
3010
|
+
*/
|
|
3011
|
+
severity = 'info';
|
|
3012
|
+
/**
|
|
3013
|
+
* Size of the message
|
|
3014
|
+
* @default 'medium'
|
|
3015
|
+
*/
|
|
3016
|
+
size = 'medium';
|
|
3017
|
+
/**
|
|
3018
|
+
* Icon to display (Material Icons)
|
|
3019
|
+
* If not provided, default icons based on severity will be used
|
|
3020
|
+
*/
|
|
3021
|
+
icon;
|
|
3022
|
+
/**
|
|
3023
|
+
* Whether the message can be closed
|
|
3024
|
+
* @default false
|
|
3025
|
+
*/
|
|
3026
|
+
closable = false;
|
|
3027
|
+
/**
|
|
3028
|
+
* Whether the message is visible
|
|
3029
|
+
* @default true
|
|
3030
|
+
*/
|
|
3031
|
+
visible = true;
|
|
3032
|
+
/**
|
|
3033
|
+
* Event emitted when visible changes (for two-way binding)
|
|
3034
|
+
*/
|
|
3035
|
+
visibleChange = new EventEmitter();
|
|
3036
|
+
/**
|
|
3037
|
+
* Get the default icon based on severity
|
|
3038
|
+
*/
|
|
3039
|
+
getDefaultIcon() {
|
|
3040
|
+
if (this.icon)
|
|
3041
|
+
return this.icon;
|
|
3042
|
+
const iconMap = {
|
|
3043
|
+
success: 'pi pi-check-circle',
|
|
3044
|
+
info: 'pi pi-lightbulb',
|
|
3045
|
+
warning: 'pi pi-exclamation-triangle',
|
|
3046
|
+
danger: 'pi pi-times-circle',
|
|
3047
|
+
primary: 'pi pi-info-circle',
|
|
3048
|
+
secondary: 'pi pi-info-circle',
|
|
3049
|
+
tertiary: 'pi pi-info-circle',
|
|
3050
|
+
contrast: 'pi pi-info-circle',
|
|
3051
|
+
};
|
|
3052
|
+
return iconMap[this.severity] || 'pi pi-info-circle';
|
|
3053
|
+
}
|
|
3054
|
+
/**
|
|
3055
|
+
* Close the message
|
|
3056
|
+
*/
|
|
3057
|
+
close() {
|
|
3058
|
+
this.visible = false;
|
|
3059
|
+
this.visibleChange.emit(this.visible);
|
|
3060
|
+
}
|
|
3061
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: IMessage, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3062
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: IMessage, isStandalone: true, selector: "i-message", inputs: { severity: "severity", size: "size", icon: "icon", closable: "closable", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "@if (visible) {\n <div\n class=\"i-message i-message-{{ severity }} i-message--{{ size }}\"\n role=\"alert\"\n >\n <div class=\"i-message-content\">\n <div class=\"i-message-icon\">\n <i [class]=\"getDefaultIcon()\"></i>\n </div>\n <div class=\"i-message-text\">\n <ng-content></ng-content>\n </div>\n @if (closable) {\n <button\n class=\"i-message-close\"\n type=\"button\"\n (click)=\"close()\"\n aria-label=\"Close\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n }\n </div>\n </div>\n}\n", styles: [".i-message{background-color:var(--surface-section);border-left:4px solid transparent}.i-message .i-message-text{color:var(--color-text-primary)}.i-message .i-message-close{color:var(--color-text-secondary)}.i-message .i-message-close:hover{color:var(--color-text-primary);background-color:var(--surface-hover)}.i-message.i-message-success{border-left-color:var(--color-success)}.i-message.i-message-success .i-message-icon{color:var(--color-success)}.i-message.i-message-info{border-left-color:var(--color-info)}.i-message.i-message-info .i-message-icon{color:var(--color-info)}.i-message.i-message-warning{border-left-color:var(--color-warning)}.i-message.i-message-warning .i-message-icon{color:var(--color-warning)}.i-message.i-message-danger{border-left-color:var(--color-danger)}.i-message.i-message-danger .i-message-icon{color:var(--color-danger)}.i-message.i-message-primary{border-left-color:var(--color-primary)}.i-message.i-message-primary .i-message-icon{color:var(--color-primary)}.i-message.i-message-secondary{border-left-color:var(--color-secondary)}.i-message.i-message-secondary .i-message-icon{color:var(--color-secondary)}.i-message.i-message-tertiary{border-left-color:var(--color-text-tertiary)}.i-message.i-message-tertiary .i-message-icon{color:var(--color-text-tertiary)}.i-message.i-message-contrast{border-left-color:var(--color-contrast)}.i-message.i-message-contrast .i-message-icon{color:var(--color-contrast)}.i-message{display:flex;align-items:flex-start;border-radius:8px;margin-bottom:16px}.i-message:last-child{margin-bottom:0}.i-message--small .i-message-content{gap:8px;padding:8px 12px}.i-message--small .i-message-content .i-message-icon i{font-size:14px}.i-message--small .i-message-content .i-message-text{font-size:.95em}.i-message--small .i-message-content .i-message-close{padding:2px}.i-message--small .i-message-content .i-message-close i{font-size:10px}.i-message--medium .i-message-content{gap:12px;padding:16px}.i-message--medium .i-message-content .i-message-icon i{font-size:18px}.i-message--medium .i-message-content .i-message-text{font-size:1em}.i-message--medium .i-message-content .i-message-close i{font-size:12px}.i-message--large .i-message-content{gap:16px;padding:20px 24px}.i-message--large .i-message-content .i-message-icon i{font-size:24px}.i-message--large .i-message-content .i-message-text{font-size:1.1em}.i-message--large .i-message-content .i-message-close{padding:6px}.i-message--large .i-message-content .i-message-close i{font-size:14px}.i-message .i-message-content{display:flex;align-items:flex-start;width:100%}.i-message .i-message-content .i-message-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.i-message .i-message-content .i-message-text{flex:1;line-height:1.5;min-width:0;word-wrap:break-word}.i-message .i-message-content .i-message-close{background:none;border:none;cursor:pointer;padding:4px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;transition:background-color .2s,color .2s}\n"] });
|
|
3063
|
+
}
|
|
3064
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: IMessage, decorators: [{
|
|
3065
|
+
type: Component,
|
|
3066
|
+
args: [{ selector: 'i-message', imports: [], template: "@if (visible) {\n <div\n class=\"i-message i-message-{{ severity }} i-message--{{ size }}\"\n role=\"alert\"\n >\n <div class=\"i-message-content\">\n <div class=\"i-message-icon\">\n <i [class]=\"getDefaultIcon()\"></i>\n </div>\n <div class=\"i-message-text\">\n <ng-content></ng-content>\n </div>\n @if (closable) {\n <button\n class=\"i-message-close\"\n type=\"button\"\n (click)=\"close()\"\n aria-label=\"Close\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n }\n </div>\n </div>\n}\n", styles: [".i-message{background-color:var(--surface-section);border-left:4px solid transparent}.i-message .i-message-text{color:var(--color-text-primary)}.i-message .i-message-close{color:var(--color-text-secondary)}.i-message .i-message-close:hover{color:var(--color-text-primary);background-color:var(--surface-hover)}.i-message.i-message-success{border-left-color:var(--color-success)}.i-message.i-message-success .i-message-icon{color:var(--color-success)}.i-message.i-message-info{border-left-color:var(--color-info)}.i-message.i-message-info .i-message-icon{color:var(--color-info)}.i-message.i-message-warning{border-left-color:var(--color-warning)}.i-message.i-message-warning .i-message-icon{color:var(--color-warning)}.i-message.i-message-danger{border-left-color:var(--color-danger)}.i-message.i-message-danger .i-message-icon{color:var(--color-danger)}.i-message.i-message-primary{border-left-color:var(--color-primary)}.i-message.i-message-primary .i-message-icon{color:var(--color-primary)}.i-message.i-message-secondary{border-left-color:var(--color-secondary)}.i-message.i-message-secondary .i-message-icon{color:var(--color-secondary)}.i-message.i-message-tertiary{border-left-color:var(--color-text-tertiary)}.i-message.i-message-tertiary .i-message-icon{color:var(--color-text-tertiary)}.i-message.i-message-contrast{border-left-color:var(--color-contrast)}.i-message.i-message-contrast .i-message-icon{color:var(--color-contrast)}.i-message{display:flex;align-items:flex-start;border-radius:8px;margin-bottom:16px}.i-message:last-child{margin-bottom:0}.i-message--small .i-message-content{gap:8px;padding:8px 12px}.i-message--small .i-message-content .i-message-icon i{font-size:14px}.i-message--small .i-message-content .i-message-text{font-size:.95em}.i-message--small .i-message-content .i-message-close{padding:2px}.i-message--small .i-message-content .i-message-close i{font-size:10px}.i-message--medium .i-message-content{gap:12px;padding:16px}.i-message--medium .i-message-content .i-message-icon i{font-size:18px}.i-message--medium .i-message-content .i-message-text{font-size:1em}.i-message--medium .i-message-content .i-message-close i{font-size:12px}.i-message--large .i-message-content{gap:16px;padding:20px 24px}.i-message--large .i-message-content .i-message-icon i{font-size:24px}.i-message--large .i-message-content .i-message-text{font-size:1.1em}.i-message--large .i-message-content .i-message-close{padding:6px}.i-message--large .i-message-content .i-message-close i{font-size:14px}.i-message .i-message-content{display:flex;align-items:flex-start;width:100%}.i-message .i-message-content .i-message-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.i-message .i-message-content .i-message-text{flex:1;line-height:1.5;min-width:0;word-wrap:break-word}.i-message .i-message-content .i-message-close{background:none;border:none;cursor:pointer;padding:4px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;transition:background-color .2s,color .2s}\n"] }]
|
|
3067
|
+
}], propDecorators: { severity: [{
|
|
3068
|
+
type: Input
|
|
3069
|
+
}], size: [{
|
|
3070
|
+
type: Input
|
|
3071
|
+
}], icon: [{
|
|
3072
|
+
type: Input
|
|
3073
|
+
}], closable: [{
|
|
3074
|
+
type: Input
|
|
3075
|
+
}], visible: [{
|
|
3076
|
+
type: Input
|
|
3077
|
+
}], visibleChange: [{
|
|
3078
|
+
type: Output
|
|
3079
|
+
}] } });
|
|
3080
|
+
|
|
3081
|
+
/**
|
|
3082
|
+
* Selects and validates local files. The consuming app owns the selection and upload transport.
|
|
3083
|
+
* @example
|
|
3084
|
+
* <i-file-upload [(files)]="files" [options]="uploadOptions" />
|
|
3085
|
+
*/
|
|
3086
|
+
class IFileUpload {
|
|
3087
|
+
/** Controlled selection; supports [(files)]. */
|
|
3088
|
+
files = [];
|
|
3089
|
+
options = {};
|
|
3090
|
+
disabled = false;
|
|
3091
|
+
dropLabel = 'Drop your files here';
|
|
3092
|
+
description = 'or choose files from your device';
|
|
3093
|
+
chooseLabel = 'Choose files';
|
|
3094
|
+
ariaLabel = 'Choose files';
|
|
3095
|
+
uploadIcon = 'pi pi-cloud-upload';
|
|
3096
|
+
fileIcon = 'pi pi-file';
|
|
3097
|
+
/** Emits only when a valid selection changes. Invalid batches are rejected as a whole. */
|
|
3098
|
+
filesChange = new EventEmitter();
|
|
3099
|
+
validationError = new EventEmitter();
|
|
3100
|
+
componentId = UniqueComponentId('i-file-upload-');
|
|
3101
|
+
dragging = false;
|
|
3102
|
+
error = null;
|
|
3103
|
+
get limits() {
|
|
3104
|
+
return {
|
|
3105
|
+
fileTypes: this.options.fileTypes ?? [],
|
|
3106
|
+
multiple: this.options.multiple ?? true,
|
|
3107
|
+
maxFiles: this.options.maxFiles ?? 20,
|
|
3108
|
+
maxFileSize: this.options.maxFileSize ?? 25 * 1024 * 1024,
|
|
3109
|
+
maxTotalSize: this.options.maxTotalSize ?? 100 * 1024 * 1024,
|
|
3110
|
+
allowEmptyFiles: this.options.allowEmptyFiles ?? false,
|
|
3111
|
+
};
|
|
3112
|
+
}
|
|
3113
|
+
get accept() {
|
|
3114
|
+
return this.limits.fileTypes.join(',');
|
|
3115
|
+
}
|
|
3116
|
+
get limitsLabel() {
|
|
3117
|
+
const limits = this.limits;
|
|
3118
|
+
return `Up to ${limits.multiple ? limits.maxFiles : Math.min(1, limits.maxFiles)} files · ${this.formatSize(limits.maxFileSize)} per file · ${this.formatSize(limits.maxTotalSize)} total`;
|
|
3119
|
+
}
|
|
3120
|
+
onSelect(event) {
|
|
3121
|
+
const element = event.target;
|
|
3122
|
+
this.addFiles(Array.from(element.files ?? []));
|
|
3123
|
+
element.value = '';
|
|
3124
|
+
}
|
|
3125
|
+
onDragOver(event) {
|
|
3126
|
+
event.preventDefault();
|
|
3127
|
+
if (!this.disabled)
|
|
3128
|
+
this.dragging = true;
|
|
3129
|
+
}
|
|
3130
|
+
onDragLeave(event) {
|
|
3131
|
+
const zone = event.currentTarget;
|
|
3132
|
+
if (!(event.relatedTarget instanceof Node) || !zone.contains(event.relatedTarget)) {
|
|
3133
|
+
this.dragging = false;
|
|
3134
|
+
}
|
|
3135
|
+
}
|
|
3136
|
+
onDrop(event) {
|
|
3137
|
+
event.preventDefault();
|
|
3138
|
+
this.dragging = false;
|
|
3139
|
+
this.addFiles(Array.from(event.dataTransfer?.files ?? []));
|
|
3140
|
+
}
|
|
3141
|
+
addFiles(incoming) {
|
|
3142
|
+
if (this.disabled || incoming.length === 0)
|
|
3143
|
+
return;
|
|
3144
|
+
this.error = null;
|
|
3145
|
+
const limits = this.limits;
|
|
3146
|
+
for (const file of incoming) {
|
|
3147
|
+
if (!this.accepts(file)) {
|
|
3148
|
+
this.reject({ code: 'fileType', file, message: `${file.name}: supported file types are ${limits.fileTypes.join(', ')}.` });
|
|
3149
|
+
return;
|
|
3150
|
+
}
|
|
3151
|
+
if (!limits.allowEmptyFiles && file.size === 0) {
|
|
3152
|
+
this.reject({ code: 'emptyFile', file, message: `${file.name} is empty.` });
|
|
3153
|
+
return;
|
|
3154
|
+
}
|
|
3155
|
+
if (file.size > limits.maxFileSize) {
|
|
3156
|
+
this.reject({ code: 'fileSize', file, message: `${file.name} exceeds ${this.formatSize(limits.maxFileSize)} per file.` });
|
|
3157
|
+
return;
|
|
3158
|
+
}
|
|
3159
|
+
}
|
|
3160
|
+
// Single-file mode replaces the existing selection. A multi-file drop is still rejected.
|
|
3161
|
+
const combined = limits.multiple ? [...this.files] : [];
|
|
3162
|
+
for (const file of incoming) {
|
|
3163
|
+
if (!combined.some((existing) => this.sameFile(existing, file)))
|
|
3164
|
+
combined.push(file);
|
|
3165
|
+
}
|
|
3166
|
+
const maxFiles = limits.multiple ? limits.maxFiles : Math.min(1, limits.maxFiles);
|
|
3167
|
+
if (combined.length > maxFiles) {
|
|
3168
|
+
this.reject({ code: 'fileCount', message: `Select at most ${maxFiles} file${maxFiles === 1 ? '' : 's'}.` });
|
|
3169
|
+
return;
|
|
3170
|
+
}
|
|
3171
|
+
if (combined.reduce((total, file) => total + file.size, 0) > limits.maxTotalSize) {
|
|
3172
|
+
this.reject({ code: 'totalSize', message: `Selected files exceed ${this.formatSize(limits.maxTotalSize)} in total.` });
|
|
3173
|
+
return;
|
|
3174
|
+
}
|
|
3175
|
+
if (combined.length !== this.files.length || combined.some((file, index) => !this.sameFile(file, this.files[index]))) {
|
|
3176
|
+
this.filesChange.emit(combined);
|
|
3177
|
+
}
|
|
3178
|
+
}
|
|
3179
|
+
remove(index) {
|
|
3180
|
+
if (this.disabled || index < 0 || index >= this.files.length)
|
|
3181
|
+
return;
|
|
3182
|
+
this.error = null;
|
|
3183
|
+
this.filesChange.emit(this.files.filter((_, position) => position !== index));
|
|
3184
|
+
}
|
|
3185
|
+
formatSize(bytes) {
|
|
3186
|
+
if (bytes < 1024)
|
|
3187
|
+
return `${bytes} B`;
|
|
3188
|
+
if (bytes < 1024 * 1024)
|
|
3189
|
+
return `${Number((bytes / 1024).toFixed(1))} KB`;
|
|
3190
|
+
return `${Number((bytes / (1024 * 1024)).toFixed(1))} MB`;
|
|
3191
|
+
}
|
|
3192
|
+
accepts(file) {
|
|
3193
|
+
return this.limits.fileTypes.length === 0 || this.limits.fileTypes.some((type) => {
|
|
3194
|
+
const token = type.toLowerCase();
|
|
3195
|
+
if (token.startsWith('.'))
|
|
3196
|
+
return file.name.toLowerCase().endsWith(token);
|
|
3197
|
+
if (token.endsWith('/*'))
|
|
3198
|
+
return file.type.toLowerCase().startsWith(token.slice(0, -1));
|
|
3199
|
+
return file.type.toLowerCase() === token;
|
|
3200
|
+
});
|
|
3201
|
+
}
|
|
3202
|
+
sameFile(a, b) {
|
|
3203
|
+
return a.name === b.name && a.size === b.size && a.lastModified === b.lastModified;
|
|
3204
|
+
}
|
|
3205
|
+
reject(error) {
|
|
3206
|
+
this.error = error;
|
|
3207
|
+
this.validationError.emit(error);
|
|
3208
|
+
}
|
|
3209
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: IFileUpload, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3210
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: IFileUpload, isStandalone: true, selector: "i-file-upload", inputs: { files: "files", options: "options", disabled: "disabled", dropLabel: "dropLabel", description: "description", chooseLabel: "chooseLabel", ariaLabel: "ariaLabel", uploadIcon: "uploadIcon", fileIcon: "fileIcon" }, outputs: { filesChange: "filesChange", validationError: "validationError" }, ngImport: i0, template: "<div class=\"i-file-upload\" [class.i-file-upload--disabled]=\"disabled\">\n <div class=\"i-file-upload__drop-zone\" [class.i-file-upload__drop-zone--active]=\"dragging && !disabled\"\n (dragover)=\"onDragOver($event)\" (dragleave)=\"onDragLeave($event)\" (drop)=\"onDrop($event)\">\n <i [class]=\"uploadIcon + ' i-file-upload__icon'\" aria-hidden=\"true\"></i>\n <strong>{{ dropLabel }}</strong>\n <span class=\"i-file-upload__description\">{{ description }}</span>\n <input #fileInput type=\"file\" hidden [multiple]=\"limits.multiple\" [accept]=\"accept\"\n [disabled]=\"disabled\" (change)=\"onSelect($event)\" [attr.aria-label]=\"ariaLabel\"\n [attr.aria-describedby]=\"componentId + '-limits'\" />\n <i-button icon=\"pi pi-plus\" [outlined]=\"true\" [disabled]=\"disabled\" [ariaLabel]=\"ariaLabel\"\n (clicked)=\"fileInput.click()\">{{ chooseLabel }}</i-button>\n <small [id]=\"componentId + '-limits'\" class=\"i-file-upload__description\">{{ limitsLabel }}</small>\n @if (accept) {\n <small class=\"i-file-upload__description\">Accepted types: {{ accept }}</small>\n }\n </div>\n @if (error) {\n <i-message severity=\"danger\" role=\"alert\">{{ error.message }}</i-message>\n }\n <div class=\"i-file-upload__list\" aria-live=\"polite\" aria-relevant=\"additions removals text\">\n @if (files.length) {\n <strong>{{ files.length }} file{{ files.length === 1 ? '' : 's' }} selected</strong>\n @for (file of files; track $index) {\n <div class=\"i-file-upload__row\">\n <i [class]=\"fileIcon\" aria-hidden=\"true\"></i>\n <span class=\"i-file-upload__name\" [title]=\"file.name\">{{ file.name }}</span>\n <small class=\"i-file-upload__description\">{{ formatSize(file.size) }}</small>\n <i-button icon=\"pi pi-times\" [text]=\"true\" size=\"small\" [ariaLabel]=\"'Remove ' + file.name\"\n [disabled]=\"disabled\" (clicked)=\"remove($index)\" />\n </div>\n }\n }\n </div>\n</div>\n", styles: [".i-file-upload{color:var(--color-text-primary)}.i-file-upload__drop-zone{border-color:var(--surface-border);background:var(--color-component-background)}.i-file-upload__drop-zone--active,.i-file-upload__drop-zone:focus-within{border-color:var(--color-primary);background:var(--surface-hover)}.i-file-upload__icon,.i-file-upload__row>i{color:var(--color-primary)}.i-file-upload__description{color:var(--color-text-secondary)}.i-file-upload__row{border-color:var(--surface-border)}.i-file-upload--disabled .i-file-upload__drop-zone{background:var(--color-disabled-background);border-color:var(--color-disabled-border)}:host{display:block}.i-file-upload{display:flex;flex-direction:column;gap:1rem}.i-file-upload__drop-zone{display:flex;flex-direction:column;align-items:center;gap:.75rem;padding:1.5rem 1rem;text-align:center;border:2px dashed;border-radius:8px;transition:border-color .2s,background .2s}.i-file-upload__icon{font-size:2rem}.i-file-upload--disabled .i-file-upload__drop-zone{opacity:.65}.i-file-upload__list{display:flex;flex-direction:column;gap:.5rem}.i-file-upload__row{display:flex;align-items:center;gap:.75rem;padding:.5rem;border-bottom:1px solid}.i-file-upload__row small{white-space:nowrap}.i-file-upload__name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"], dependencies: [{ kind: "component", type: IButton, selector: "i-button", inputs: ["severity", "size", "type", "ariaLabel", "ariaExpanded", "disabled", "outlined", "raised", "text", "icon", "fluid", "loading"], outputs: ["clicked"] }, { kind: "component", type: IMessage, selector: "i-message", inputs: ["severity", "size", "icon", "closable", "visible"], outputs: ["visibleChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3211
|
+
}
|
|
3212
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: IFileUpload, decorators: [{
|
|
3213
|
+
type: Component,
|
|
3214
|
+
args: [{ selector: 'i-file-upload', standalone: true, imports: [IButton, IMessage], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"i-file-upload\" [class.i-file-upload--disabled]=\"disabled\">\n <div class=\"i-file-upload__drop-zone\" [class.i-file-upload__drop-zone--active]=\"dragging && !disabled\"\n (dragover)=\"onDragOver($event)\" (dragleave)=\"onDragLeave($event)\" (drop)=\"onDrop($event)\">\n <i [class]=\"uploadIcon + ' i-file-upload__icon'\" aria-hidden=\"true\"></i>\n <strong>{{ dropLabel }}</strong>\n <span class=\"i-file-upload__description\">{{ description }}</span>\n <input #fileInput type=\"file\" hidden [multiple]=\"limits.multiple\" [accept]=\"accept\"\n [disabled]=\"disabled\" (change)=\"onSelect($event)\" [attr.aria-label]=\"ariaLabel\"\n [attr.aria-describedby]=\"componentId + '-limits'\" />\n <i-button icon=\"pi pi-plus\" [outlined]=\"true\" [disabled]=\"disabled\" [ariaLabel]=\"ariaLabel\"\n (clicked)=\"fileInput.click()\">{{ chooseLabel }}</i-button>\n <small [id]=\"componentId + '-limits'\" class=\"i-file-upload__description\">{{ limitsLabel }}</small>\n @if (accept) {\n <small class=\"i-file-upload__description\">Accepted types: {{ accept }}</small>\n }\n </div>\n @if (error) {\n <i-message severity=\"danger\" role=\"alert\">{{ error.message }}</i-message>\n }\n <div class=\"i-file-upload__list\" aria-live=\"polite\" aria-relevant=\"additions removals text\">\n @if (files.length) {\n <strong>{{ files.length }} file{{ files.length === 1 ? '' : 's' }} selected</strong>\n @for (file of files; track $index) {\n <div class=\"i-file-upload__row\">\n <i [class]=\"fileIcon\" aria-hidden=\"true\"></i>\n <span class=\"i-file-upload__name\" [title]=\"file.name\">{{ file.name }}</span>\n <small class=\"i-file-upload__description\">{{ formatSize(file.size) }}</small>\n <i-button icon=\"pi pi-times\" [text]=\"true\" size=\"small\" [ariaLabel]=\"'Remove ' + file.name\"\n [disabled]=\"disabled\" (clicked)=\"remove($index)\" />\n </div>\n }\n }\n </div>\n</div>\n", styles: [".i-file-upload{color:var(--color-text-primary)}.i-file-upload__drop-zone{border-color:var(--surface-border);background:var(--color-component-background)}.i-file-upload__drop-zone--active,.i-file-upload__drop-zone:focus-within{border-color:var(--color-primary);background:var(--surface-hover)}.i-file-upload__icon,.i-file-upload__row>i{color:var(--color-primary)}.i-file-upload__description{color:var(--color-text-secondary)}.i-file-upload__row{border-color:var(--surface-border)}.i-file-upload--disabled .i-file-upload__drop-zone{background:var(--color-disabled-background);border-color:var(--color-disabled-border)}:host{display:block}.i-file-upload{display:flex;flex-direction:column;gap:1rem}.i-file-upload__drop-zone{display:flex;flex-direction:column;align-items:center;gap:.75rem;padding:1.5rem 1rem;text-align:center;border:2px dashed;border-radius:8px;transition:border-color .2s,background .2s}.i-file-upload__icon{font-size:2rem}.i-file-upload--disabled .i-file-upload__drop-zone{opacity:.65}.i-file-upload__list{display:flex;flex-direction:column;gap:.5rem}.i-file-upload__row{display:flex;align-items:center;gap:.75rem;padding:.5rem;border-bottom:1px solid}.i-file-upload__row small{white-space:nowrap}.i-file-upload__name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"] }]
|
|
3215
|
+
}], propDecorators: { files: [{
|
|
3216
|
+
type: Input
|
|
3217
|
+
}], options: [{
|
|
3218
|
+
type: Input
|
|
3219
|
+
}], disabled: [{
|
|
3220
|
+
type: Input
|
|
3221
|
+
}], dropLabel: [{
|
|
3222
|
+
type: Input
|
|
3223
|
+
}], description: [{
|
|
3224
|
+
type: Input
|
|
3225
|
+
}], chooseLabel: [{
|
|
3226
|
+
type: Input
|
|
3227
|
+
}], ariaLabel: [{
|
|
3228
|
+
type: Input
|
|
3229
|
+
}], uploadIcon: [{
|
|
3230
|
+
type: Input
|
|
3231
|
+
}], fileIcon: [{
|
|
3232
|
+
type: Input
|
|
3233
|
+
}], filesChange: [{
|
|
3234
|
+
type: Output
|
|
3235
|
+
}], validationError: [{
|
|
3236
|
+
type: Output
|
|
3237
|
+
}] } });
|
|
3238
|
+
|
|
3006
3239
|
/**
|
|
3007
3240
|
* Textarea Component
|
|
3008
3241
|
*
|
|
@@ -4813,81 +5046,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
|
|
|
4813
5046
|
type: Output
|
|
4814
5047
|
}] } });
|
|
4815
5048
|
|
|
4816
|
-
class IMessage {
|
|
4817
|
-
/**
|
|
4818
|
-
* Severity type of the message
|
|
4819
|
-
* @default 'info'
|
|
4820
|
-
*/
|
|
4821
|
-
severity = 'info';
|
|
4822
|
-
/**
|
|
4823
|
-
* Size of the message
|
|
4824
|
-
* @default 'medium'
|
|
4825
|
-
*/
|
|
4826
|
-
size = 'medium';
|
|
4827
|
-
/**
|
|
4828
|
-
* Icon to display (Material Icons)
|
|
4829
|
-
* If not provided, default icons based on severity will be used
|
|
4830
|
-
*/
|
|
4831
|
-
icon;
|
|
4832
|
-
/**
|
|
4833
|
-
* Whether the message can be closed
|
|
4834
|
-
* @default false
|
|
4835
|
-
*/
|
|
4836
|
-
closable = false;
|
|
4837
|
-
/**
|
|
4838
|
-
* Whether the message is visible
|
|
4839
|
-
* @default true
|
|
4840
|
-
*/
|
|
4841
|
-
visible = true;
|
|
4842
|
-
/**
|
|
4843
|
-
* Event emitted when visible changes (for two-way binding)
|
|
4844
|
-
*/
|
|
4845
|
-
visibleChange = new EventEmitter();
|
|
4846
|
-
/**
|
|
4847
|
-
* Get the default icon based on severity
|
|
4848
|
-
*/
|
|
4849
|
-
getDefaultIcon() {
|
|
4850
|
-
if (this.icon)
|
|
4851
|
-
return this.icon;
|
|
4852
|
-
const iconMap = {
|
|
4853
|
-
success: 'pi pi-check-circle',
|
|
4854
|
-
info: 'pi pi-lightbulb',
|
|
4855
|
-
warning: 'pi pi-exclamation-triangle',
|
|
4856
|
-
danger: 'pi pi-times-circle',
|
|
4857
|
-
primary: 'pi pi-info-circle',
|
|
4858
|
-
secondary: 'pi pi-info-circle',
|
|
4859
|
-
tertiary: 'pi pi-info-circle',
|
|
4860
|
-
contrast: 'pi pi-info-circle',
|
|
4861
|
-
};
|
|
4862
|
-
return iconMap[this.severity] || 'pi pi-info-circle';
|
|
4863
|
-
}
|
|
4864
|
-
/**
|
|
4865
|
-
* Close the message
|
|
4866
|
-
*/
|
|
4867
|
-
close() {
|
|
4868
|
-
this.visible = false;
|
|
4869
|
-
this.visibleChange.emit(this.visible);
|
|
4870
|
-
}
|
|
4871
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: IMessage, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4872
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: IMessage, isStandalone: true, selector: "i-message", inputs: { severity: "severity", size: "size", icon: "icon", closable: "closable", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "@if (visible) {\n <div\n class=\"i-message i-message-{{ severity }} i-message--{{ size }}\"\n role=\"alert\"\n >\n <div class=\"i-message-content\">\n <div class=\"i-message-icon\">\n <i [class]=\"getDefaultIcon()\"></i>\n </div>\n <div class=\"i-message-text\">\n <ng-content></ng-content>\n </div>\n @if (closable) {\n <button\n class=\"i-message-close\"\n type=\"button\"\n (click)=\"close()\"\n aria-label=\"Close\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n }\n </div>\n </div>\n}\n", styles: [".i-message{background-color:var(--surface-section);border-left:4px solid transparent}.i-message .i-message-text{color:var(--color-text-primary)}.i-message .i-message-close{color:var(--color-text-secondary)}.i-message .i-message-close:hover{color:var(--color-text-primary);background-color:var(--surface-hover)}.i-message.i-message-success{border-left-color:var(--color-success)}.i-message.i-message-success .i-message-icon{color:var(--color-success)}.i-message.i-message-info{border-left-color:var(--color-info)}.i-message.i-message-info .i-message-icon{color:var(--color-info)}.i-message.i-message-warning{border-left-color:var(--color-warning)}.i-message.i-message-warning .i-message-icon{color:var(--color-warning)}.i-message.i-message-danger{border-left-color:var(--color-danger)}.i-message.i-message-danger .i-message-icon{color:var(--color-danger)}.i-message.i-message-primary{border-left-color:var(--color-primary)}.i-message.i-message-primary .i-message-icon{color:var(--color-primary)}.i-message.i-message-secondary{border-left-color:var(--color-secondary)}.i-message.i-message-secondary .i-message-icon{color:var(--color-secondary)}.i-message.i-message-tertiary{border-left-color:var(--color-text-tertiary)}.i-message.i-message-tertiary .i-message-icon{color:var(--color-text-tertiary)}.i-message.i-message-contrast{border-left-color:var(--color-contrast)}.i-message.i-message-contrast .i-message-icon{color:var(--color-contrast)}.i-message{display:flex;align-items:flex-start;border-radius:8px;margin-bottom:16px}.i-message:last-child{margin-bottom:0}.i-message--small .i-message-content{gap:8px;padding:8px 12px}.i-message--small .i-message-content .i-message-icon i{font-size:14px}.i-message--small .i-message-content .i-message-text{font-size:.95em}.i-message--small .i-message-content .i-message-close{padding:2px}.i-message--small .i-message-content .i-message-close i{font-size:10px}.i-message--medium .i-message-content{gap:12px;padding:16px}.i-message--medium .i-message-content .i-message-icon i{font-size:18px}.i-message--medium .i-message-content .i-message-text{font-size:1em}.i-message--medium .i-message-content .i-message-close i{font-size:12px}.i-message--large .i-message-content{gap:16px;padding:20px 24px}.i-message--large .i-message-content .i-message-icon i{font-size:24px}.i-message--large .i-message-content .i-message-text{font-size:1.1em}.i-message--large .i-message-content .i-message-close{padding:6px}.i-message--large .i-message-content .i-message-close i{font-size:14px}.i-message .i-message-content{display:flex;align-items:flex-start;width:100%}.i-message .i-message-content .i-message-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.i-message .i-message-content .i-message-text{flex:1;line-height:1.5;min-width:0;word-wrap:break-word}.i-message .i-message-content .i-message-close{background:none;border:none;cursor:pointer;padding:4px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;transition:background-color .2s,color .2s}\n"] });
|
|
4873
|
-
}
|
|
4874
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: IMessage, decorators: [{
|
|
4875
|
-
type: Component,
|
|
4876
|
-
args: [{ selector: 'i-message', imports: [], template: "@if (visible) {\n <div\n class=\"i-message i-message-{{ severity }} i-message--{{ size }}\"\n role=\"alert\"\n >\n <div class=\"i-message-content\">\n <div class=\"i-message-icon\">\n <i [class]=\"getDefaultIcon()\"></i>\n </div>\n <div class=\"i-message-text\">\n <ng-content></ng-content>\n </div>\n @if (closable) {\n <button\n class=\"i-message-close\"\n type=\"button\"\n (click)=\"close()\"\n aria-label=\"Close\"\n >\n <i class=\"pi pi-times\"></i>\n </button>\n }\n </div>\n </div>\n}\n", styles: [".i-message{background-color:var(--surface-section);border-left:4px solid transparent}.i-message .i-message-text{color:var(--color-text-primary)}.i-message .i-message-close{color:var(--color-text-secondary)}.i-message .i-message-close:hover{color:var(--color-text-primary);background-color:var(--surface-hover)}.i-message.i-message-success{border-left-color:var(--color-success)}.i-message.i-message-success .i-message-icon{color:var(--color-success)}.i-message.i-message-info{border-left-color:var(--color-info)}.i-message.i-message-info .i-message-icon{color:var(--color-info)}.i-message.i-message-warning{border-left-color:var(--color-warning)}.i-message.i-message-warning .i-message-icon{color:var(--color-warning)}.i-message.i-message-danger{border-left-color:var(--color-danger)}.i-message.i-message-danger .i-message-icon{color:var(--color-danger)}.i-message.i-message-primary{border-left-color:var(--color-primary)}.i-message.i-message-primary .i-message-icon{color:var(--color-primary)}.i-message.i-message-secondary{border-left-color:var(--color-secondary)}.i-message.i-message-secondary .i-message-icon{color:var(--color-secondary)}.i-message.i-message-tertiary{border-left-color:var(--color-text-tertiary)}.i-message.i-message-tertiary .i-message-icon{color:var(--color-text-tertiary)}.i-message.i-message-contrast{border-left-color:var(--color-contrast)}.i-message.i-message-contrast .i-message-icon{color:var(--color-contrast)}.i-message{display:flex;align-items:flex-start;border-radius:8px;margin-bottom:16px}.i-message:last-child{margin-bottom:0}.i-message--small .i-message-content{gap:8px;padding:8px 12px}.i-message--small .i-message-content .i-message-icon i{font-size:14px}.i-message--small .i-message-content .i-message-text{font-size:.95em}.i-message--small .i-message-content .i-message-close{padding:2px}.i-message--small .i-message-content .i-message-close i{font-size:10px}.i-message--medium .i-message-content{gap:12px;padding:16px}.i-message--medium .i-message-content .i-message-icon i{font-size:18px}.i-message--medium .i-message-content .i-message-text{font-size:1em}.i-message--medium .i-message-content .i-message-close i{font-size:12px}.i-message--large .i-message-content{gap:16px;padding:20px 24px}.i-message--large .i-message-content .i-message-icon i{font-size:24px}.i-message--large .i-message-content .i-message-text{font-size:1.1em}.i-message--large .i-message-content .i-message-close{padding:6px}.i-message--large .i-message-content .i-message-close i{font-size:14px}.i-message .i-message-content{display:flex;align-items:flex-start;width:100%}.i-message .i-message-content .i-message-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px}.i-message .i-message-content .i-message-text{flex:1;line-height:1.5;min-width:0;word-wrap:break-word}.i-message .i-message-content .i-message-close{background:none;border:none;cursor:pointer;padding:4px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;transition:background-color .2s,color .2s}\n"] }]
|
|
4877
|
-
}], propDecorators: { severity: [{
|
|
4878
|
-
type: Input
|
|
4879
|
-
}], size: [{
|
|
4880
|
-
type: Input
|
|
4881
|
-
}], icon: [{
|
|
4882
|
-
type: Input
|
|
4883
|
-
}], closable: [{
|
|
4884
|
-
type: Input
|
|
4885
|
-
}], visible: [{
|
|
4886
|
-
type: Input
|
|
4887
|
-
}], visibleChange: [{
|
|
4888
|
-
type: Output
|
|
4889
|
-
}] } });
|
|
4890
|
-
|
|
4891
5049
|
/**
|
|
4892
5050
|
* Multi-Select Component
|
|
4893
5051
|
*
|
|
@@ -10465,5 +10623,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
|
|
|
10465
10623
|
* Generated bundle index. Do not edit.
|
|
10466
10624
|
*/
|
|
10467
10625
|
|
|
10468
|
-
export { AbstractDialog, CLAIMS_CHECKER, ConfirmationDialogComponent, ConfirmationDialogService, DataUpdateEventService, DialogService, EmptyStateComponent, IAccordion, IAccordionList, IButton, ICalendar, ICard, IChart, ICheckbox, IChip, IChipsComponent, IDialog, IDialogActions, IDialogBase, IDivider, IFieldPicker, IInputText, IListbox, IMessage, IMultiSelect, IOrderedList, IOverlayPanel, IPanel, IPlaceholder, IProgressSpinner, IRadioButton, IRuleEditor, ISelect, IStep, IStepper, ITabPanel, ITable, ITabs, ITag, ITextarea, IToggle, ITreeView, IWhisper, LayoutComponent, LayoutService, LocalStorageColorSchemeKey, MenuComponent, NoContentComponent, SeoService, SidebarComponent, StructuredDataService, TooltipComponent, TooltipDirective, TopbarComponent, UniqueComponentId, WhisperService, ZIndexUtils, lastId, provideMenuClaimsChecker };
|
|
10626
|
+
export { AbstractDialog, CLAIMS_CHECKER, ConfirmationDialogComponent, ConfirmationDialogService, DataUpdateEventService, DialogService, EmptyStateComponent, IAccordion, IAccordionList, IButton, ICalendar, ICard, IChart, ICheckbox, IChip, IChipsComponent, IDialog, IDialogActions, IDialogBase, IDivider, IFieldPicker, IFileUpload, IInputText, IListbox, IMessage, IMultiSelect, IOrderedList, IOverlayPanel, IPanel, IPlaceholder, IProgressSpinner, IRadioButton, IRuleEditor, ISelect, IStep, IStepper, ITabPanel, ITable, ITabs, ITag, ITextarea, IToggle, ITreeView, IWhisper, LayoutComponent, LayoutService, LocalStorageColorSchemeKey, MenuComponent, NoContentComponent, SeoService, SidebarComponent, StructuredDataService, TooltipComponent, TooltipDirective, TopbarComponent, UniqueComponentId, WhisperService, ZIndexUtils, lastId, provideMenuClaimsChecker };
|
|
10469
10627
|
//# sourceMappingURL=invensys-ng.mjs.map
|