@sumaris-net/ngx-components 18.18.9 → 18.18.10
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/esm2022/public_api.mjs +5 -4
- package/esm2022/src/app/core/core.testing.module.mjs +15 -1
- package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +13 -9
- package/esm2022/src/app/{shared/material → core/form}/text/testing/text-form.testing.mjs +4 -4
- package/esm2022/src/app/core/form/text/testing/text-form.testing.module.mjs +25 -0
- package/esm2022/src/app/core/form/text/text-form.component.mjs +205 -0
- package/esm2022/src/app/core/form/text/text-form.module.mjs +31 -0
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +4 -12
- package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +4 -4
- package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +5 -4
- package/esm2022/src/app/core/services/base-entity-service.class.mjs +1 -1
- package/esm2022/src/app/core/table/column/row-field.component.mjs +1 -1
- package/esm2022/src/app/shared/file/csv.utils.mjs +1 -1
- package/esm2022/src/app/shared/form/field.component.mjs +1 -1
- package/esm2022/src/app/shared/form/field.model.mjs +1 -1
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +1 -1
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +1 -1
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +1 -1
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +1 -1
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +1 -1
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +1 -1
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +1 -1
- package/esm2022/src/app/shared/material/datetime/material.date.mjs +1 -1
- package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +1 -1
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +1 -1
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +1 -1
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +1 -1
- package/esm2022/src/app/shared/material/material.module.mjs +4 -9
- package/esm2022/src/app/shared/material/material.testing.module.mjs +1 -12
- package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +1 -1
- package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +1 -1
- package/esm2022/src/app/shared/pipes/string.pipes.mjs +1 -1
- package/esm2022/src/app/shared/pipes/types.pipes.mjs +1 -1
- package/esm2022/src/app/shared/services/entity-service.class.mjs +1 -1
- package/esm2022/src/app/shared/types.mjs +1 -1
- package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +1 -1
- package/esm2022/src/app/social/user-event/user-event.service.mjs +1 -1
- package/esm2022/src/environments/environment.class.mjs +1 -1
- package/fesm2022/sumaris-net.ngx-components.mjs +4302 -4318
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +4 -3
- package/src/app/core/core.testing.module.d.ts +5 -4
- package/src/app/core/form/entity/entity-editor.class.d.ts +12 -12
- package/src/app/core/form/text/testing/text-form.testing.module.d.ts +14 -0
- package/src/app/{shared/material → core/form}/text/text-form.component.d.ts +2 -2
- package/src/app/core/form/text/text-form.module.d.ts +9 -0
- package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +1 -1
- package/src/app/core/form/text-popover/text-popover.component.d.ts +1 -1
- package/src/app/core/form/text-popover/text-popover.module.d.ts +3 -2
- package/src/app/core/services/base-entity-service.class.d.ts +11 -19
- package/src/app/core/table/column/row-field.component.d.ts +2 -1
- package/src/app/shared/file/csv.utils.d.ts +1 -1
- package/src/app/shared/form/field.component.d.ts +2 -2
- package/src/app/shared/form/field.model.d.ts +1 -6
- package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +1 -1
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -1
- package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +1 -1
- package/src/app/shared/material/boolean/material.boolean.d.ts +1 -1
- package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +1 -1
- package/src/app/shared/material/chips/material.chips.d.ts +1 -1
- package/src/app/shared/material/datetime/material.date.d.ts +1 -1
- package/src/app/shared/material/datetime/material.dateshort.d.ts +1 -1
- package/src/app/shared/material/datetime/material.datetime.d.ts +1 -1
- package/src/app/shared/material/duration/material.duration.d.ts +1 -1
- package/src/app/shared/material/latlong/material.latlong.d.ts +1 -1
- package/src/app/shared/material/material.module.d.ts +1 -2
- package/src/app/shared/material/material.testing.module.d.ts +16 -17
- package/src/app/shared/material/swipe/material.swipe.d.ts +1 -1
- package/src/app/shared/material/swipe/testing/swipe.test.d.ts +1 -1
- package/src/app/shared/pipes/string.pipes.d.ts +1 -2
- package/src/app/shared/pipes/types.pipes.d.ts +1 -1
- package/src/app/shared/services/entity-service.class.d.ts +21 -4
- package/src/app/shared/types.d.ts +5 -0
- package/src/app/social/user-event/testing/user-event.testing.service.d.ts +2 -3
- package/src/app/social/user-event/user-event.service.d.ts +5 -5
- package/src/assets/manifest.json +1 -1
- package/esm2022/src/app/shared/material/text/text-form.component.mjs +0 -205
- package/esm2022/src/app/shared/material/text/text-form.module.mjs +0 -63
- package/src/app/shared/material/text/text-form.module.d.ts +0 -16
- /package/src/app/{shared/material → core/form}/text/testing/text-form.testing.d.ts +0 -0
|
@@ -79,4 +79,4 @@ export class FormFieldValuesHolder {
|
|
|
79
79
|
return isNotNil(data[definition.key]) ? data[definition.key] : definition.defaultValue || undefined;
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQW9FekQsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQzs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsUUFBa0IsRUFBRSxJQUEyQjtRQUN2RSxPQUFPLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsUUFBa0IsRUFBRSxHQUF3QjtRQUNuRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDaEQsT0FBTztnQkFDTCxHQUFHLEdBQUc7Z0JBQ04sTUFBTSxFQUFFLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQzthQUNyRSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBa0IsRUFBRSxVQUF5RTtRQUNoSCxnQkFBZ0I7UUFDaEIsSUFBSSxVQUFVLFlBQVksY0FBYyxFQUFFLENBQUM7WUFDekMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QyxPQUFPLEtBQUss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QUN6QyxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDbEQsQ0FBQztJQUVELEdBQUcsQ0FBYSxJQUFTLEVBQUUsVUFBK0I7UUFDeEQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQztJQUN0RyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYmplY3RNYXAsIFByb3BlcnR5IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNOb3ROaWwsIGpvaW5Qcm9wZXJ0aWVzUGF0aCB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5jb25maWcnO1xuaW1wb3J0IHsgVXNlclByb2ZpbGVMYWJlbCB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvcGVyc29uLm1vZGVsJztcbmltcG9ydCB7IEZsb2F0TGFiZWxUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRGlzcGxheUZuID0gKG9iajogYW55KSA9PiBzdHJpbmc7XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRXF1YWxzRm4gPSAobzE6IGFueSwgbzI6IGFueSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBDb21wYXJlRm4gPSAobzE6IGFueSwgbzI6IGFueSkgPT4gbnVtYmVyO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIEZvcm1GaWVsZFR5cGUgPVxuICB8ICdpbnRlZ2VyJ1xuICB8ICdkb3VibGUnXG4gIHwgJ2Jvb2xlYW4nXG4gIHwgJ3N0cmluZydcbiAgfCAnZW51bSdcbiAgfCAnZW51bXMnXG4gIHwgJ2NvbG9yJ1xuICB8ICdwZWVyJ1xuICB8ICdlbnRpdHknXG4gIHwgJ2VudGl0aWVzJ1xuICB8ICdkYXRlJ1xuICB8ICdkYXRlVGltZSc7XG5leHBvcnQgZGVjbGFyZSB0eXBlIEFwcEZsb2F0TGFiZWxUeXBlID0gRmxvYXRMYWJlbFR5cGUgfCAnbmV2ZXInO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRm9ybUZpZWxkRGVmaW5pdGlvbjxLID0gc3RyaW5nLCBUID0gRm9ybUZpZWxkVHlwZSwgRSA9IGFueT4ge1xuICBrZXk6IEs7XG4gIHR5cGU6IFQ7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG1pblZhbHVlPzogbnVtYmVyO1xuICBtYXhWYWx1ZT86IG51bWJlcjtcbiAgbWF4aW11bU51bWJlckRlY2ltYWxzPzogbnVtYmVyO1xuICBkZWZhdWx0VmFsdWU/OiBhbnk7XG4gIGlzVHJhbnNpZW50PzogYm9vbGVhbjsgLy8gVXNlZnVsIG9ubHkgZm9yIHJlbW90ZSBjb25maWd1cmF0aW9uXG4gIHZhbHVlcz86IChzdHJpbmcgfCBQcm9wZXJ0eSlbXSB8IEluamVjdGlvblRva2VuPChzdHJpbmcgfCBQcm9wZXJ0eSlbXT47XG4gIGF1dG9jb21wbGV0ZT86IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnPEU+O1xuXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBleHRyYT86IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgICByZXF1aXJlZDogYm9vbGVhbjtcbiAgICB9O1xuICB9O1xuICBtaW5Qcm9maWxlPzogVXNlclByb2ZpbGVMYWJlbDtcblxuICAvKipcbiAgICogVXNlIGZvciBhdXRvbWF0aWMgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gdG8vZnJvbSBzdHJpbmcgKGVnLiB1c2luZyB0aGUgYXV0b2NvbXBsZXRlIHN1Z2dlc3RGbikuXG4gICAqIERlZmF1bHQgdmFsdWU6ICdpZCdcbiAgICovXG4gIHNlcmlhbGl6ZUF0dHJpYnV0ZT86IHN0cmluZztcblxuICAvKipcbiAgICogVXNlIHRvIHNlcmlhbGl6ZSBhbiBlbnRpdHkgaW50byBzdHJpbmcgKHNlZSBBcHBQcm9wZXJ0aWVzVXRpbHMuKioqYXNPYmplY3QoKSlcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBzZXJpYWxpemU/OiAodmFsdWU6IEUpID0+IHN0cmluZztcblxuICAvKipcbiAgICogVXNlIHRvIGRlc2VyaWFsaXplIGEgc3RyaW5nIGludG8gYW4gZW50aXR5IChzZWUgQXBwUHJvcGVydGllc1V0aWxzLioqKmZyb21PYmplY3QoKSlcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBkZXNlcmlhbGl6ZT86ICh2YWx1ZTogc3RyaW5nKSA9PiBFIHwgUHJvbWlzZTxFPjtcbn1cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRm9ybUZpZWxkRGVmaW5pdGlvbk1hcCA9IE9iamVjdE1hcDxGb3JtRmllbGREZWZpbml0aW9uPjtcblxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZERlZmluaXRpb25VdGlscyB7XG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhbiBhcnJheSBvZiBmb3JtIGZpZWxkIGRlZmluaXRpb25zIGJ5IHVzaW5nIHRoZSBzcGVjaWZpZWQgaW5qZWN0b3IgdG8gcHJvY2VzcyBlYWNoIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yIC0gVGhlIGluamVjdG9yIHVzZWQgdG8gcHJvY2VzcyBlYWNoIGZvcm0gZmllbGQgZGVmaW5pdGlvbi5cbiAgICogQHBhcmFtIHtGb3JtRmllbGREZWZpbml0aW9uW119IGRlZnMgLSBBbiBhcnJheSBvZiBmb3JtIGZpZWxkIGRlZmluaXRpb25zIHRvIGJlIHByZXBhcmVkLlxuICAgKiBAcmV0dXJuIHtGb3JtRmllbGREZWZpbml0aW9uW119IEFuIGFycmF5IG9mIHByZXBhcmVkIGZvcm0gZmllbGQgZGVmaW5pdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgcHJlcGFyZURlZmluaXRpb25zKGluamVjdG9yOiBJbmplY3RvciwgZGVmczogRm9ybUZpZWxkRGVmaW5pdGlvbltdKTogRm9ybUZpZWxkRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gZGVmcz8ubWFwKChkZWYpID0+IEZvcm1GaWVsZERlZmluaXRpb25VdGlscy5wcmVwYXJlRGVmaW5pdGlvbihpbmplY3RvciwgZGVmKSk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgdGhlIGRlZmluaXRpb24gYnkgcHJvY2Vzc2luZyBpdHMgdHlwZSBhbmQgb3B0aW9uYWxseSBzZXR0aW5nIHRoZSB2YWx1ZXMgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yIC0gVGhlIGluamVjdG9yIHVzZWQgdG8gZ2V0IHRoZSBuZWNlc3Nhcnkgc2VydmljZXMuXG4gICAqIEBwYXJhbSB7Rm9ybUZpZWxkRGVmaW5pdGlvbn0gZGVmIC0gVGhlIGZvcm0gZmllbGQgZGVmaW5pdGlvbiB0byBiZSBwcmVwYXJlZC5cbiAgICogQHJldHVybiB7Rm9ybUZpZWxkRGVmaW5pdGlvbn0gLSBUaGUgcHJlcGFyZWQgZm9ybSBmaWVsZCBkZWZpbml0aW9uIHdpdGggdXBkYXRlZCB2YWx1ZXMgaWYgdGhlIHR5cGUgaXMgJ2VudW0nIG9yICdlbnVtcycuXG4gICAqL1xuICBzdGF0aWMgcHJlcGFyZURlZmluaXRpb24oaW5qZWN0b3I6IEluamVjdG9yLCBkZWY6IEZvcm1GaWVsZERlZmluaXRpb24pOiBGb3JtRmllbGREZWZpbml0aW9uIHtcbiAgICBpZiAoZGVmLnR5cGUgPT09ICdlbnVtJyB8fCBkZWYudHlwZSA9PT0gJ2VudW1zJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICB2YWx1ZXM6IEZvcm1GaWVsZERlZmluaXRpb25VdGlscy5nZXRFbnVtVmFsdWVzKGluamVjdG9yLCBkZWYudmFsdWVzKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBkZWY7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFuIGFycmF5IG9mIFByb3BlcnR5IG9iamVjdHMgZnJvbSB0aGUgcHJvdmlkZWQgZW51bSB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yIC0gVGhlIEFuZ3VsYXIgaW5qZWN0b3IgdG8gcmVzb2x2ZSB0aGUgSW5qZWN0aW9uVG9rZW4uXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IFByb3BlcnR5KVtdIHwgSW5qZWN0aW9uVG9rZW48KHN0cmluZyB8IFByb3BlcnR5KVtdPn0gZW51bVZhbHVlcyAtIFRoZSBlbnVtIHZhbHVlcywgd2hpY2ggY2FuIGJlIGFuIGFycmF5IG9mIHN0cmluZ3MsIGFycmF5IG9mIFByb3BlcnR5IG9iamVjdHMsIG9yIGFuIEluamVjdGlvblRva2VuIHRoYXQgcmVzb2x2ZXMgdG8gc3VjaCBhbiBhcnJheS5cbiAgICogQHJldHVybiB7UHJvcGVydHlbXX0gQW4gYXJyYXkgb2YgUHJvcGVydHkgb2JqZWN0cy5cbiAgICovXG4gIHN0YXRpYyBnZXRFbnVtVmFsdWVzKGluamVjdG9yOiBJbmplY3RvciwgZW51bVZhbHVlczogKHN0cmluZyB8IFByb3BlcnR5KVtdIHwgSW5qZWN0aW9uVG9rZW48KHN0cmluZyB8IFByb3BlcnR5KVtdPik6IFByb3BlcnR5W10ge1xuICAgIC8vIFJlc29sdmUgdG9rZW5cbiAgICBpZiAoZW51bVZhbHVlcyBpbnN0YW5jZW9mIEluamVjdGlvblRva2VuKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBpbmplY3Rvci5nZXQoZW51bVZhbHVlcyk7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gRm9ybUZpZWxkRGVmaW5pdGlvblV0aWxzLmFzUHJvcGVydHlBcnJheSh2YWx1ZXMpIDogW107XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsaXplIHN0cmluZ1tdID0+IFByb3BlcnR5W11cbiAgICByZXR1cm4gRm9ybUZpZWxkRGVmaW5pdGlvblV0aWxzLmFzUHJvcGVydHlBcnJheShlbnVtVmFsdWVzIGFzIChzdHJpbmcgfCBQcm9wZXJ0eSlbXSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RGlzcGxheVZhbHVlRm4oZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbik6IERpc3BsYXlGbiB7XG4gICAgaWYgKGRlZmluaXRpb24uYXV0b2NvbXBsZXRlICYmIGRlZmluaXRpb24uYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKSB7XG4gICAgICByZXR1cm4gKG9iajogYW55KSA9PiBkZWZpbml0aW9uLmF1dG9jb21wbGV0ZS5kaXNwbGF5V2l0aChvYmopO1xuICAgIH1cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gKGRlZmluaXRpb24uYXV0b2NvbXBsZXRlICYmIGRlZmluaXRpb24uYXV0b2NvbXBsZXRlLmF0dHJpYnV0ZXMpIHx8IFsnbGFiZWwnLCAnbmFtZSddO1xuICAgIHJldHVybiAob2JqOiBhbnkpID0+IG9iaiAmJiBqb2luUHJvcGVydGllc1BhdGgob2JqLCBhdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzUHJvcGVydHlBcnJheSh2YWx1ZXM6IChzdHJpbmcgfCBQcm9wZXJ0eSlbXSk6IFByb3BlcnR5W10ge1xuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW10pXG4gICAgICAubWFwKCh2KSA9PiAodHlwZW9mIHYgPT09ICdzdHJpbmcnID8gPFByb3BlcnR5Pnsga2V5OiB2LCB2YWx1ZTogdiB9IDogdHlwZW9mIHYgPT09ICdvYmplY3QnID8gKHYgYXMgUHJvcGVydHkpIDogbnVsbCkpXG4gICAgICAuZmlsdGVyKGlzTm90TmlsKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRm9ybUZpZWxkVmFsdWVzSG9sZGVyIHtcbiAgZ2V0QXNCb29sZWFuKGRhdGE6IE9iamVjdE1hcCwgZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoZGF0YSwgZGVmaW5pdGlvbik7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IHZhbHVlICYmIHZhbHVlICE9PSAnZmFsc2UnIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0QXNJbnQoZGF0YTogYW55LCBkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KGRhdGEsIGRlZmluaXRpb24pO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBwYXJzZUludCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBc051bWJlcnMoZGF0YTogYW55LCBkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoZGF0YSwgZGVmaW5pdGlvbik7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpLm1hcChwYXJzZUZsb2F0KSB8fCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IFtwYXJzZUZsb2F0KHZhbHVlKV0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBc1N0cmluZ3MoZGF0YTogYW55LCBkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoZGF0YSwgZGVmaW5pdGlvbik7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZS5zcGxpdCgnLCcpKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQ8VCA9IHN0cmluZz4oZGF0YTogYW55LCBkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uKTogVCB7XG4gICAgcmV0dXJuIGlzTm90TmlsKGRhdGFbZGVmaW5pdGlvbi5rZXldKSA/IGRhdGFbZGVmaW5pdGlvbi5rZXldIDogZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgfHwgdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQTREekQsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQzs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsUUFBa0IsRUFBRSxJQUEyQjtRQUN2RSxPQUFPLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsUUFBa0IsRUFBRSxHQUF3QjtRQUNuRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDaEQsT0FBTztnQkFDTCxHQUFHLEdBQUc7Z0JBQ04sTUFBTSxFQUFFLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQzthQUNyRSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBa0IsRUFBRSxVQUF5RTtRQUNoSCxnQkFBZ0I7UUFDaEIsSUFBSSxVQUFVLFlBQVksY0FBYyxFQUFFLENBQUM7WUFDekMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QyxPQUFPLEtBQUss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QUN6QyxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDbEQsQ0FBQztJQUVELEdBQUcsQ0FBYSxJQUFTLEVBQUUsVUFBK0I7UUFDeEQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQztJQUN0RyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNwbGF5Rm4sIE9iamVjdE1hcCwgUHJvcGVydHkgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpc05vdE5pbCwgam9pblByb3BlcnRpZXNQYXRoIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IEluamVjdGlvblRva2VuLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWcgfSBmcm9tICcuLi9tYXRlcmlhbC9hdXRvY29tcGxldGUvbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmNvbmZpZyc7XG5pbXBvcnQgeyBVc2VyUHJvZmlsZUxhYmVsIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9wZXJzb24ubW9kZWwnO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIEZvcm1GaWVsZFR5cGUgPVxuICB8ICdpbnRlZ2VyJ1xuICB8ICdkb3VibGUnXG4gIHwgJ2Jvb2xlYW4nXG4gIHwgJ3N0cmluZydcbiAgfCAnZW51bSdcbiAgfCAnZW51bXMnXG4gIHwgJ2NvbG9yJ1xuICB8ICdwZWVyJ1xuICB8ICdlbnRpdHknXG4gIHwgJ2VudGl0aWVzJ1xuICB8ICdkYXRlJ1xuICB8ICdkYXRlVGltZSc7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBGb3JtRmllbGREZWZpbml0aW9uPEsgPSBzdHJpbmcsIFQgPSBGb3JtRmllbGRUeXBlLCBFID0gYW55PiB7XG4gIGtleTogSztcbiAgdHlwZTogVDtcbiAgbGFiZWw6IHN0cmluZztcbiAgbWluVmFsdWU/OiBudW1iZXI7XG4gIG1heFZhbHVlPzogbnVtYmVyO1xuICBtYXhpbXVtTnVtYmVyRGVjaW1hbHM/OiBudW1iZXI7XG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcbiAgaXNUcmFuc2llbnQ/OiBib29sZWFuOyAvLyBVc2VmdWwgb25seSBmb3IgcmVtb3RlIGNvbmZpZ3VyYXRpb25cbiAgdmFsdWVzPzogKHN0cmluZyB8IFByb3BlcnR5KVtdIHwgSW5qZWN0aW9uVG9rZW48KHN0cmluZyB8IFByb3BlcnR5KVtdPjtcbiAgYXV0b2NvbXBsZXRlPzogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc8RT47XG5cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGV4dHJhPzoge1xuICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgIHJlcXVpcmVkOiBib29sZWFuO1xuICAgIH07XG4gIH07XG4gIG1pblByb2ZpbGU/OiBVc2VyUHJvZmlsZUxhYmVsO1xuXG4gIC8qKlxuICAgKiBVc2UgZm9yIGF1dG9tYXRpYyBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiB0by9mcm9tIHN0cmluZyAoZWcuIHVzaW5nIHRoZSBhdXRvY29tcGxldGUgc3VnZ2VzdEZuKS5cbiAgICogRGVmYXVsdCB2YWx1ZTogJ2lkJ1xuICAgKi9cbiAgc2VyaWFsaXplQXR0cmlidXRlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgdG8gc2VyaWFsaXplIGFuIGVudGl0eSBpbnRvIHN0cmluZyAoc2VlIEFwcFByb3BlcnRpZXNVdGlscy4qKiphc09iamVjdCgpKVxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHNlcmlhbGl6ZT86ICh2YWx1ZTogRSkgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgdG8gZGVzZXJpYWxpemUgYSBzdHJpbmcgaW50byBhbiBlbnRpdHkgKHNlZSBBcHBQcm9wZXJ0aWVzVXRpbHMuKioqZnJvbU9iamVjdCgpKVxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIGRlc2VyaWFsaXplPzogKHZhbHVlOiBzdHJpbmcpID0+IEUgfCBQcm9taXNlPEU+O1xufVxuZXhwb3J0IGRlY2xhcmUgdHlwZSBGb3JtRmllbGREZWZpbml0aW9uTWFwID0gT2JqZWN0TWFwPEZvcm1GaWVsZERlZmluaXRpb24+O1xuXG5leHBvcnQgY2xhc3MgRm9ybUZpZWxkRGVmaW5pdGlvblV0aWxzIHtcbiAgLyoqXG4gICAqIFByZXBhcmVzIGFuIGFycmF5IG9mIGZvcm0gZmllbGQgZGVmaW5pdGlvbnMgYnkgdXNpbmcgdGhlIHNwZWNpZmllZCBpbmplY3RvciB0byBwcm9jZXNzIGVhY2ggZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBUaGUgaW5qZWN0b3IgdXNlZCB0byBwcm9jZXNzIGVhY2ggZm9ybSBmaWVsZCBkZWZpbml0aW9uLlxuICAgKiBAcGFyYW0ge0Zvcm1GaWVsZERlZmluaXRpb25bXX0gZGVmcyAtIEFuIGFycmF5IG9mIGZvcm0gZmllbGQgZGVmaW5pdGlvbnMgdG8gYmUgcHJlcGFyZWQuXG4gICAqIEByZXR1cm4ge0Zvcm1GaWVsZERlZmluaXRpb25bXX0gQW4gYXJyYXkgb2YgcHJlcGFyZWQgZm9ybSBmaWVsZCBkZWZpbml0aW9ucy5cbiAgICovXG4gIHN0YXRpYyBwcmVwYXJlRGVmaW5pdGlvbnMoaW5qZWN0b3I6IEluamVjdG9yLCBkZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW10pOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiBkZWZzPy5tYXAoKGRlZikgPT4gRm9ybUZpZWxkRGVmaW5pdGlvblV0aWxzLnByZXBhcmVEZWZpbml0aW9uKGluamVjdG9yLCBkZWYpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyB0aGUgZGVmaW5pdGlvbiBieSBwcm9jZXNzaW5nIGl0cyB0eXBlIGFuZCBvcHRpb25hbGx5IHNldHRpbmcgdGhlIHZhbHVlcyBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBUaGUgaW5qZWN0b3IgdXNlZCB0byBnZXQgdGhlIG5lY2Vzc2FyeSBzZXJ2aWNlcy5cbiAgICogQHBhcmFtIHtGb3JtRmllbGREZWZpbml0aW9ufSBkZWYgLSBUaGUgZm9ybSBmaWVsZCBkZWZpbml0aW9uIHRvIGJlIHByZXBhcmVkLlxuICAgKiBAcmV0dXJuIHtGb3JtRmllbGREZWZpbml0aW9ufSAtIFRoZSBwcmVwYXJlZCBmb3JtIGZpZWxkIGRlZmluaXRpb24gd2l0aCB1cGRhdGVkIHZhbHVlcyBpZiB0aGUgdHlwZSBpcyAnZW51bScgb3IgJ2VudW1zJy5cbiAgICovXG4gIHN0YXRpYyBwcmVwYXJlRGVmaW5pdGlvbihpbmplY3RvcjogSW5qZWN0b3IsIGRlZjogRm9ybUZpZWxkRGVmaW5pdGlvbik6IEZvcm1GaWVsZERlZmluaXRpb24ge1xuICAgIGlmIChkZWYudHlwZSA9PT0gJ2VudW0nIHx8IGRlZi50eXBlID09PSAnZW51bXMnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kZWYsXG4gICAgICAgIHZhbHVlczogRm9ybUZpZWxkRGVmaW5pdGlvblV0aWxzLmdldEVudW1WYWx1ZXMoaW5qZWN0b3IsIGRlZi52YWx1ZXMpLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgUHJvcGVydHkgb2JqZWN0cyBmcm9tIHRoZSBwcm92aWRlZCBlbnVtIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBUaGUgQW5ndWxhciBpbmplY3RvciB0byByZXNvbHZlIHRoZSBJbmplY3Rpb25Ub2tlbi5cbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgUHJvcGVydHkpW10gfCBJbmplY3Rpb25Ub2tlbjwoc3RyaW5nIHwgUHJvcGVydHkpW10+fSBlbnVtVmFsdWVzIC0gVGhlIGVudW0gdmFsdWVzLCB3aGljaCBjYW4gYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncywgYXJyYXkgb2YgUHJvcGVydHkgb2JqZWN0cywgb3IgYW4gSW5qZWN0aW9uVG9rZW4gdGhhdCByZXNvbHZlcyB0byBzdWNoIGFuIGFycmF5LlxuICAgKiBAcmV0dXJuIHtQcm9wZXJ0eVtdfSBBbiBhcnJheSBvZiBQcm9wZXJ0eSBvYmplY3RzLlxuICAgKi9cbiAgc3RhdGljIGdldEVudW1WYWx1ZXMoaW5qZWN0b3I6IEluamVjdG9yLCBlbnVtVmFsdWVzOiAoc3RyaW5nIHwgUHJvcGVydHkpW10gfCBJbmplY3Rpb25Ub2tlbjwoc3RyaW5nIHwgUHJvcGVydHkpW10+KTogUHJvcGVydHlbXSB7XG4gICAgLy8gUmVzb2x2ZSB0b2tlblxuICAgIGlmIChlbnVtVmFsdWVzIGluc3RhbmNlb2YgSW5qZWN0aW9uVG9rZW4pIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGluamVjdG9yLmdldChlbnVtVmFsdWVzKTtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlcykgPyBGb3JtRmllbGREZWZpbml0aW9uVXRpbHMuYXNQcm9wZXJ0eUFycmF5KHZhbHVlcykgOiBbXTtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWxpemUgc3RyaW5nW10gPT4gUHJvcGVydHlbXVxuICAgIHJldHVybiBGb3JtRmllbGREZWZpbml0aW9uVXRpbHMuYXNQcm9wZXJ0eUFycmF5KGVudW1WYWx1ZXMgYXMgKHN0cmluZyB8IFByb3BlcnR5KVtdKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREaXNwbGF5VmFsdWVGbihkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uKTogRGlzcGxheUZuIHtcbiAgICBpZiAoZGVmaW5pdGlvbi5hdXRvY29tcGxldGUgJiYgZGVmaW5pdGlvbi5hdXRvY29tcGxldGUuZGlzcGxheVdpdGgpIHtcbiAgICAgIHJldHVybiAob2JqOiBhbnkpID0+IGRlZmluaXRpb24uYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKG9iaik7XG4gICAgfVxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSAoZGVmaW5pdGlvbi5hdXRvY29tcGxldGUgJiYgZGVmaW5pdGlvbi5hdXRvY29tcGxldGUuYXR0cmlidXRlcykgfHwgWydsYWJlbCcsICduYW1lJ107XG4gICAgcmV0dXJuIChvYmo6IGFueSkgPT4gb2JqICYmIGpvaW5Qcm9wZXJ0aWVzUGF0aChvYmosIGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXNQcm9wZXJ0eUFycmF5KHZhbHVlczogKHN0cmluZyB8IFByb3BlcnR5KVtdKTogUHJvcGVydHlbXSB7XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHZhbHVlcykgPyB2YWx1ZXMgOiBbXSlcbiAgICAgIC5tYXAoKHYpID0+ICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyA8UHJvcGVydHk+eyBrZXk6IHYsIHZhbHVlOiB2IH0gOiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgPyAodiBhcyBQcm9wZXJ0eSkgOiBudWxsKSlcbiAgICAgIC5maWx0ZXIoaXNOb3ROaWwpO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGb3JtRmllbGRWYWx1ZXNIb2xkZXIge1xuICBnZXRBc0Jvb2xlYW4oZGF0YTogT2JqZWN0TWFwLCBkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldChkYXRhLCBkZWZpbml0aW9uKTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gdmFsdWUgJiYgdmFsdWUgIT09ICdmYWxzZScgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBc0ludChkYXRhOiBhbnksIGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24pOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoZGF0YSwgZGVmaW5pdGlvbik7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IHBhcnNlSW50KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEFzTnVtYmVycyhkYXRhOiBhbnksIGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldChkYXRhLCBkZWZpbml0aW9uKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKHBhcnNlRmxvYXQpIHx8IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gW3BhcnNlRmxvYXQodmFsdWUpXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEFzU3RyaW5ncyhkYXRhOiBhbnksIGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldChkYXRhLCBkZWZpbml0aW9uKTtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlLnNwbGl0KCcsJykpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldDxUID0gc3RyaW5nPihkYXRhOiBhbnksIGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24pOiBUIHtcbiAgICByZXR1cm4gaXNOb3ROaWwoZGF0YVtkZWZpbml0aW9uLmtleV0pID8gZGF0YVtkZWZpbml0aW9uLmtleV0gOiBkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSB8fCB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -362,7 +362,7 @@ export class AppImageGalleryComponent {
|
|
|
362
362
|
this.cd.markForCheck();
|
|
363
363
|
}
|
|
364
364
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppImageGalleryComponent, deps: [{ token: i1.ImageService }, { token: i2.Platform }, { token: i2.AlertController }, { token: i3.TranslateService }, { token: i0.ChangeDetectorRef }, { token: ENVIRONMENT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
365
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppImageGalleryComponent, selector: "app-image-gallery", inputs: { cardColor: "cardColor", debug: ["debug", "debug", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], readOnly: ["readOnly", "readOnly", booleanAttribute], mobile: ["mobile", "mobile", booleanAttribute], mode: "mode", confirmBeforeDelete: "confirmBeforeDelete", showToolbar: ["showToolbar", "showToolbar", booleanAttribute], showFabButton: ["showFabButton", "showFabButton", booleanAttribute], showTitle: ["showTitle", "showTitle", booleanAttribute], showAddToolbarButton: ["showAddToolbarButton", "showAddToolbarButton", booleanAttribute], showAddTextButton: ["showAddTextButton", "showAddTextButton", booleanAttribute], showAddCardButton: ["showAddCardButton", "showAddCardButton", booleanAttribute], showCardToolbar: ["showCardToolbar", "showCardToolbar", booleanAttribute], addButtonColor: "addButtonColor", addButtonText: "addButtonText", cardTemplate: "cardTemplate", imageSizes: "imageSizes", imageSizeQueryParam: "imageSizeQueryParam", dataSource: "dataSource" }, outputs: { onBeforeDeleteRows: "onBeforeDeleteRows", onAfterAddRows: "onAfterAddRows", onAfterEditRow: "onAfterEditRow", click: "click" }, viewQueries: [{ propertyName: "zoomModal", first: true, predicate: ["zoomModal"], descendants: true }, { propertyName: "titlePopover", first: true, predicate: ["titlePopover"], descendants: true }, { propertyName: "swiperRef", first: true, predicate: ["modalSwiper"], descendants: true }], ngImport: i0, template: "<ion-toolbar color=\"light\" *ngIf=\"showToolbar\">\n <ng-content select=\"ion-buttons[slot=start]\"></ng-content>\n\n <!-- Add -->\n @if (!readOnly && showAddToolbarButton && enabled) {\n <button mat-icon-button [title]=\"'COMMON.BTN_ADD' | translate\" (click)=\"add()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\">\n <!-- Toggle view mode -->\n <ion-segment (ionChange)=\"toggleViewMode($event)\" color=\"accent\" [value]=\"_colSize\">\n <ion-segment-button [value]=\"4\">\n <mat-icon>view_module</mat-icon>\n </ion-segment-button>\n <ion-segment-button [value]=\"12\">\n <mat-icon>view_list</mat-icon>\n </ion-segment-button>\n </ion-segment>\n </ion-buttons>\n</ion-toolbar>\n\n<div class=\"gallery-container ion-padding-bottom {{ this.mode }}\">\n <div *ngIf=\"mobile && zoomActive\" class=\"backdrop\" [style.opacity]=\"zoomScale\"></div>\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col *rxFor=\"let row of _data$; index as index; trackBy: trackByFn\" [size]=\"_colSize\">\n @let image = row | propertyGet: 'currentData';\n @if (cardTemplate) {\n <ng-container\n *ngTemplateOutlet=\"cardTemplate; context: { $implicit: row, mode: mode, image: image }\"\n ></ng-container>\n } @else {\n <ion-card\n #card\n class=\"image-card\"\n [class.zoom-hover]=\"!mobile\"\n [color]=\"cardColor\"\n (click)=\"clickRow(row, index)\"\n tappable\n @fadeInAnimation\n >\n <figure class=\"card-thumbnail\">\n @if (image.url) {\n <ion-img [src]=\"image.url | appendQueryParams: getImageSizeQueryParams()\" />\n } @else {\n <ion-img [src]=\"image.dataUrl\" />\n }\n </figure>\n\n <!-- toolbar for title (when not hover) -->\n @if (showTitle && image.title) {\n <ion-toolbar color=\"transparent\" class=\"title\">\n <ion-label class=\"card-title\">{{ image.title }}</ion-label>\n </ion-toolbar>\n }\n\n <!-- action toolbar shown when hover image -->\n @if (!readOnly && !mobile && showCardToolbar) {\n <ion-toolbar #cardToolbar color=\"light\" class=\"buttons\">\n <!-- edit title button -->\n @if (showTitle) {\n <button\n mat-button\n slot=\"start\"\n [disabled]=\"disabled\"\n (click)=\"editTitle($event, row, cardToolbar)\"\n (focusin)=\"focusCardToolbar(cardToolbar)\"\n >\n <mat-icon>edit</mat-icon>\n <mat-label>\n <span *ngIf=\"row.currentData.title | isNotNilOrBlank; else editLabel\" translate>\n IMAGE.GALLERY.BTN_EDIT_TITLE\n </span>\n <ng-template #editLabel>\n <span translate>IMAGE.GALLERY.BTN_ADD_TITLE</span>\n </ng-template>\n </mat-label>\n </button>\n }\n\n <div class=\"flex-spacer\"></div>\n\n <!-- delete button -->\n <button\n mat-icon-button\n slot=\"end\"\n class=\"ion-float-end\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n [disabled]=\"disabled\"\n (click)=\"delete($event, row)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </ion-toolbar>\n }\n </ion-card>\n }\n </ion-col>\n\n <!-- add button -->\n @if ((showAddTextButton || showAddCardButton) && !readOnly) {\n <ion-col [size]=\"_colSize\" @fadeInAnimation>\n @if (showAddTextButton) {\n <ion-button (click)=\"add($event)\" [disabled]=\"disabled\" [color]=\"addButtonColor\">\n <mat-label translate>{{ addButtonText }}</mat-label>\n <ion-icon slot=\"end\" name=\"camera\"></ion-icon>\n </ion-button>\n } @else if (showAddCardButton) {\n <ion-card\n class=\"image-card-button\"\n color=\"light\"\n (click)=\"add($event)\"\n [disabled]=\"disabled\"\n [title]=\"addButtonText\"\n tappable\n >\n <ion-card-content>\n <div class=\"icon-container\">\n <ion-icon name=\"camera\" [color]=\"addButtonColor\"></ion-icon>\n <ion-icon name=\"add\" [color]=\"addButtonColor\" class=\"icon-secondary\"></ion-icon>\n </div>\n </ion-card-content>\n </ion-card>\n }\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n</div>\n\n<!-- FAB button: add -->\n<ion-fab\n slot=\"fixed\"\n vertical=\"bottom\"\n horizontal=\"end\"\n *ngIf=\"showFabButton && !readOnly\"\n [class.cdk-visually-hidden]=\"disabled\"\n @fadeInOutAnimation\n>\n <ion-fab-button color=\"tertiary\" (click)=\"add($event)\">\n <ion-icon name=\"camera\"></ion-icon>\n <ion-icon name=\"add\" class=\"icon-secondary\" style=\"left: 33px; top: 9px; font-size: 20px\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n\n<!-- Zoom modal -->\n<ion-modal #zoomModal class=\"stack-modal zoom-modal\" [class.modal-fullscreen]=\"mobile\" [class.modal-large]=\"!mobile\">\n <ng-template>\n <ion-content class=\"ion-no-padding ion-no-margin\">\n @let count = rows?.length || 0;\n <!-- Counter -->\n <div class=\"top-left\">\n <ion-label color=\"light\">{{ activeSlideIndex + 1 }} / {{ count }}</ion-label>\n </div>\n\n <!-- zoom button -->\n <div class=\"top-right\">\n @if (!mobile) {\n <ion-fab-button size=\"small\" (click)=\"zoom(modalSwiper, true)\" color=\"light\">\n <ion-icon name=\"search\"></ion-icon>\n <ion-icon class=\"icon-secondary\" name=\"add\"></ion-icon>\n </ion-fab-button>\n <ion-fab-button size=\"small\" (click)=\"zoom(modalSwiper, false)\" color=\"light\">\n <ion-icon name=\"search\"></ion-icon>\n <ion-icon class=\"icon-secondary\" name=\"remove\"></ion-icon>\n </ion-fab-button>\n }\n </div>\n\n <!-- navigation side buttons next/back -->\n <ng-container *ngIf=\"!mobile && (rows | isArrayLength: { greaterThan: 1 })\">\n <div class=\"side-buttons prev\" (click)=\"slidePrev(modalSwiper)\">\n <ion-icon name=\"chevron-back\"></ion-icon>\n </div>\n <div class=\"side-buttons next\" (click)=\"slideNext(modalSwiper)\">\n <ion-icon name=\"chevron-forward\"></ion-icon>\n </div>\n </ng-container>\n\n <!-- image slides -->\n <swiper-container\n #modalSwiper\n [modules]=\"swiperModules\"\n [zoom]=\"true\"\n (swiperslidechange)=\"onSlideChange(modalSwiper)\"\n (swiperinit)=\"initModalSlides(modalSwiper)\"\n >\n @for (row of rows; track row.id; let last = $last) {\n <swiper-slide>\n @let image = row | propertyGet: 'currentData';\n <div class=\"swiper-zoom-container\">\n @if (image.url) {\n <ion-img [src]=\"image.url | appendQueryParams: getImageSizeQueryParams('modal')\" />\n } @else {\n <img [src]=\"image.dataUrl\" [alt]=\"image.title\" />\n }\n </div>\n </swiper-slide>\n }\n </swiper-container>\n </ion-content>\n\n <ion-footer>\n <ion-toolbar color=\"light\">\n <ion-row>\n <ion-col size=\"4\" class=\"ion-text-start\">\n <ion-button\n *ngIf=\"!readOnly\"\n (click)=\"deleteFromModal($event, modalSwiper)\"\n [disabled]=\"disabled\"\n fill=\"clear\"\n color=\"danger\"\n >\n <mat-icon slot=\"start\">delete</mat-icon>\n {{ 'COMMON.BTN_DELETE' | translate }}\n </ion-button>\n </ion-col>\n <ion-col size=\"4\"></ion-col>\n <ion-col size=\"4\" class=\"ion-text-end\">\n <ion-button (click)=\"zoomModal.dismiss()\" color=\"tertiary\" fill=\"clear\" *ngIf=\"mobile; else desktop\">\n <ion-icon slot=\"start\" name=\"close\"></ion-icon>\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n <ng-template #desktop>\n <ion-button (click)=\"zoomModal.dismiss()\" color=\"tertiary\">\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n </ng-template>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n</ion-modal>\n\n<ion-popover #titlePopover>\n <ng-template>\n <ion-content class=\"ion-padding\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <form [formGroup]=\"_titleForm\">\n <mat-form-field floatLabel=\"auto\">\n <mat-label translate>IMAGE.GALLERY.TITLE</mat-label>\n <input\n matInput\n formControlName=\"title\"\n [readonly]=\"disabled\"\n [appAutofocus]=\"_titleAutofocus\"\n (keydown.control.enter)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n />\n </mat-form-field>\n </form>\n </ion-content>\n\n <ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"titlePopover.dismiss(null, 'CANCEL')\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n (keyup.enter)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP' | translate\"\n >\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n</ion-popover>\n", styles: [":host{--image-margin-inline: 10px;--image-margin-safe-area: var(--image-margin-inline, 0px) * 2 - 3px;--segment-max-width: 150px}ion-toolbar ion-segment{max-width:var(--segment-max-width)}mat-toolbar,.mat-toolbar-single-row{padding:0;height:42px}ion-card{margin-left:unset;margin-right:unset;margin-inline:var(--image-margin-inline, 10px)}.image-slide{overflow:visible}.image-card{background-color:var(--ion-color-base);z-index:9;--img-scale: 1}.image-card .card-thumbnail{position:relative;overflow:hidden;display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:100%;height:100%;max-height:var(--img-max-height, calc(100% - var(--image-margin-safe-area, 0px)))}.image-card .card-thumbnail>ion-img{min-height:100%;height:100%;object-fit:cover;object-position:center;transition:scale .2s ease-in-out;scale:var(--img-scale)}.image-card .card-thumbnail>ion-img img{max-height:var(--img-max-height)}.image-card.zoom-hover:hover{--img-scale: 1.2}.image-card ion-toolbar{--top-offset: calc(-1 * var(--ion-toolbar-height));position:absolute}.image-card ion-toolbar.title{--padding-start: 16px;--padding-end: 16px;--ion-color-base: rgba(0, 0, 0, .45) !important;position:absolute;top:calc(100% + var(--top-offset));transition:opacity .2s ease-in-out}.image-card ion-toolbar.title ion-label{color:#fff}.image-card ion-toolbar.buttons{--padding-start: 4px;--padding-end: 4px;--ion-color-base: var(--ion-color-light) !important;position:absolute;top:100%;transition:transform .2s ease-in-out}.image-card:hover ion-toolbar.buttons,.image-card ion-toolbar.buttons.focused{transform:translateY(var(--top-offset))}.image-card-button{height:calc(100% - var(--image-margin-safe-area, 0px));max-height:max(min(30vh,200px),var(--img-max-height, 0px));transition:.2s ease-in-out;max-width:250px}.image-card-button ion-card-content{height:100%}.image-card-button .icon-container{height:auto;position:relative;top:calc(50% - 75px);display:flex;align-items:center;justify-content:center}.image-card-button ion-icon:first-of-type{font-size:150px;height:150px;position:relative;top:0}.image-card-button ion-icon.icon-secondary{font-size:50px;position:absolute;top:0;left:max(min(50% + 25px,100% - 50px),0px)}.image-card-button ion-button{float:right}.image-card-button:hover{--ion-color-base: var(--ion-color-shade) !important}.image-card-button:hover ion-icon{--ion-color-base: var(--ion-color-shade) !important}.backdrop{height:100vh;width:100vw;background:#000;position:absolute;z-index:10}.zoom-modal{-webkit-user-select:none;user-select:none}.zoom-modal .top-left{z-index:14;position:absolute;display:inline-grid;left:var(--ion-padding-start, 8px);top:var(--ion-padding-start, 8px)}.zoom-modal .top-right{z-index:14;position:absolute;display:inline-grid;right:var(--ion-padding-start, 8px);top:var(--ion-padding-start, 8px)}.zoom-modal .side-buttons{--side-buttons-width: 120px;--side-buttons-margin: calc(var(--side-buttons-width) / 3);z-index:13;position:absolute;top:0;bottom:0;width:var(--side-buttons-width)}.zoom-modal .side-buttons ion-icon{top:50%;color:#fff;font-size:2.5rem;position:absolute;opacity:0;transition-duration:.15s;transition-timing-function:ease-in}.zoom-modal .side-buttons:hover{cursor:pointer}.zoom-modal .side-buttons:hover ion-icon{opacity:1}.zoom-modal .side-buttons.prev{left:0}.zoom-modal .side-buttons.prev ion-icon{left:var(--side-buttons-margin)}.zoom-modal .side-buttons.next{right:0}.zoom-modal .side-buttons.next ion-icon{right:var(--side-buttons-margin)}.zoom-modal swiper-container{height:100%;background:#000}.zoom-modal ion-fab-button .icon-secondary{top:11px;left:6px;height:14px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonFab, selector: "ion-fab", inputs: ["activated", "edge", "horizontal", "vertical"] }, { kind: "component", type: i2.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i2.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "selectOnFocus", "swipeGesture", "value"] }, { kind: "component", type: i2.IonSegmentButton, selector: "ion-segment-button", inputs: ["disabled", "layout", "mode", "type", "value"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonModal, selector: "ion-modal" }, { kind: "component", type: i2.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i2.SelectValueAccessor, selector: "ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i10.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i11.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "directive", type: i12.RxFor, selector: "[rxFor][rxForOf]", inputs: ["rxForOf", "rxForTemplate", "rxForStrategy", "rxForParent", "rxForPatchZone", "rxForTrackBy", "rxForRenderCallback"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i13.PropertyGetPipe, name: "propertyGet" }, { kind: "pipe", type: i14.ArrayLengthPipe, name: "isArrayLength" }, { kind: "pipe", type: i15.IsNotNilOrBlankPipe, name: "isNotNilOrBlank" }, { kind: "pipe", type: i16.AppendQueryParamsPipePipe, name: "appendQueryParams" }], animations: [fadeInAnimation, fadeInOutAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
365
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppImageGalleryComponent, selector: "app-image-gallery", inputs: { cardColor: "cardColor", debug: ["debug", "debug", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], readOnly: ["readOnly", "readOnly", booleanAttribute], mobile: ["mobile", "mobile", booleanAttribute], mode: "mode", confirmBeforeDelete: "confirmBeforeDelete", showToolbar: ["showToolbar", "showToolbar", booleanAttribute], showFabButton: ["showFabButton", "showFabButton", booleanAttribute], showTitle: ["showTitle", "showTitle", booleanAttribute], showAddToolbarButton: ["showAddToolbarButton", "showAddToolbarButton", booleanAttribute], showAddTextButton: ["showAddTextButton", "showAddTextButton", booleanAttribute], showAddCardButton: ["showAddCardButton", "showAddCardButton", booleanAttribute], showCardToolbar: ["showCardToolbar", "showCardToolbar", booleanAttribute], addButtonColor: "addButtonColor", addButtonText: "addButtonText", cardTemplate: "cardTemplate", imageSizes: "imageSizes", imageSizeQueryParam: "imageSizeQueryParam", dataSource: "dataSource" }, outputs: { onBeforeDeleteRows: "onBeforeDeleteRows", onAfterAddRows: "onAfterAddRows", onAfterEditRow: "onAfterEditRow", click: "click" }, viewQueries: [{ propertyName: "zoomModal", first: true, predicate: ["zoomModal"], descendants: true }, { propertyName: "titlePopover", first: true, predicate: ["titlePopover"], descendants: true }, { propertyName: "swiperRef", first: true, predicate: ["modalSwiper"], descendants: true }], ngImport: i0, template: "<ion-toolbar color=\"light\" *ngIf=\"showToolbar\">\n <ng-content select=\"ion-buttons[slot=start]\"></ng-content>\n\n <!-- Add -->\n @if (!readOnly && showAddToolbarButton && enabled) {\n <button mat-icon-button [title]=\"'COMMON.BTN_ADD' | translate\" (click)=\"add()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\">\n <!-- Toggle view mode -->\n <ion-segment (ionChange)=\"toggleViewMode($event)\" color=\"accent\" [value]=\"_colSize\">\n <ion-segment-button [value]=\"4\">\n <mat-icon>view_module</mat-icon>\n </ion-segment-button>\n <ion-segment-button [value]=\"12\">\n <mat-icon>view_list</mat-icon>\n </ion-segment-button>\n </ion-segment>\n </ion-buttons>\n</ion-toolbar>\n\n<div class=\"gallery-container ion-padding-bottom {{ this.mode }}\">\n <div *ngIf=\"mobile && zoomActive\" class=\"backdrop\" [style.opacity]=\"zoomScale\"></div>\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col *rxFor=\"let row of _data$; index as index; trackBy: trackByFn\" [size]=\"_colSize\">\n @let image = row | propertyGet: 'currentData';\n @if (cardTemplate) {\n <ng-container\n *ngTemplateOutlet=\"cardTemplate; context: { $implicit: row, mode: mode, image: image }\"\n ></ng-container>\n } @else {\n <ion-card\n #card\n class=\"image-card\"\n [class.zoom-hover]=\"!mobile\"\n [color]=\"cardColor\"\n (click)=\"clickRow(row, index)\"\n tappable\n @fadeInAnimation\n >\n <figure class=\"card-thumbnail\">\n @if (image.url) {\n <ion-img [src]=\"image.url | appendQueryParams: getImageSizeQueryParams()\" />\n } @else {\n <ion-img [src]=\"image.dataUrl\" />\n }\n </figure>\n\n <!-- toolbar for title (when not hover) -->\n @if (showTitle && image.title) {\n <ion-toolbar color=\"transparent\" class=\"title\">\n <ion-label class=\"card-title\">{{ image.title }}</ion-label>\n </ion-toolbar>\n }\n\n <!-- action toolbar shown when hover image -->\n @if (!readOnly && !mobile && showCardToolbar) {\n <ion-toolbar #cardToolbar color=\"light\" class=\"buttons\">\n <!-- edit title button -->\n @if (showTitle) {\n <button\n mat-button\n slot=\"start\"\n [disabled]=\"disabled\"\n (click)=\"editTitle($event, row, cardToolbar)\"\n (focusin)=\"focusCardToolbar(cardToolbar)\"\n >\n <mat-icon>edit</mat-icon>\n <mat-label>\n <span *ngIf=\"row.currentData.title | isNotNilOrBlank; else editLabel\" translate>\n IMAGE.GALLERY.BTN_EDIT_TITLE\n </span>\n <ng-template #editLabel>\n <span translate>IMAGE.GALLERY.BTN_ADD_TITLE</span>\n </ng-template>\n </mat-label>\n </button>\n }\n\n <div class=\"flex-spacer\"></div>\n\n <!-- delete button -->\n <button\n mat-icon-button\n slot=\"end\"\n class=\"ion-float-end\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n [disabled]=\"disabled\"\n (click)=\"delete($event, row)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </ion-toolbar>\n }\n </ion-card>\n }\n </ion-col>\n\n <!-- add button -->\n @if ((showAddTextButton || showAddCardButton) && !readOnly) {\n <ion-col [size]=\"_colSize\" @fadeInAnimation>\n @if (showAddTextButton) {\n <ion-button (click)=\"add($event)\" [disabled]=\"disabled\" [color]=\"addButtonColor\">\n <mat-label translate>{{ addButtonText }}</mat-label>\n <ion-icon slot=\"end\" name=\"camera\"></ion-icon>\n </ion-button>\n } @else if (showAddCardButton) {\n <ion-card\n class=\"image-card-button\"\n color=\"light\"\n (click)=\"add($event)\"\n [disabled]=\"disabled\"\n [title]=\"addButtonText\"\n tappable\n >\n <ion-card-content>\n <div class=\"icon-container\">\n <ion-icon name=\"camera\" [color]=\"addButtonColor\"></ion-icon>\n <ion-icon name=\"add\" [color]=\"addButtonColor\" class=\"icon-secondary\"></ion-icon>\n </div>\n </ion-card-content>\n </ion-card>\n }\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n</div>\n\n<!-- FAB button: add -->\n<ion-fab\n slot=\"fixed\"\n vertical=\"bottom\"\n horizontal=\"end\"\n *ngIf=\"showFabButton && !readOnly\"\n [class.cdk-visually-hidden]=\"disabled\"\n @fadeInOutAnimation\n>\n <ion-fab-button color=\"tertiary\" (click)=\"add($event)\">\n <ion-icon name=\"camera\"></ion-icon>\n <ion-icon name=\"add\" class=\"icon-secondary\" style=\"left: 33px; top: 9px; font-size: 20px\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n\n<!-- Zoom modal -->\n<ion-modal #zoomModal class=\"stack-modal zoom-modal\" [class.modal-fullscreen]=\"mobile\" [class.modal-large]=\"!mobile\">\n <ng-template>\n <ion-content class=\"ion-no-padding ion-no-margin\">\n @let count = rows?.length || 0;\n <!-- Counter -->\n <div class=\"top-left\">\n <ion-label color=\"light\">{{ activeSlideIndex + 1 }} / {{ count }}</ion-label>\n </div>\n\n <!-- zoom button -->\n <div class=\"top-right\">\n @if (!mobile) {\n <ion-fab-button size=\"small\" (click)=\"zoom(modalSwiper, true)\" color=\"light\">\n <ion-icon name=\"search\"></ion-icon>\n <ion-icon class=\"icon-secondary\" name=\"add\"></ion-icon>\n </ion-fab-button>\n <ion-fab-button size=\"small\" (click)=\"zoom(modalSwiper, false)\" color=\"light\">\n <ion-icon name=\"search\"></ion-icon>\n <ion-icon class=\"icon-secondary\" name=\"remove\"></ion-icon>\n </ion-fab-button>\n }\n </div>\n\n <!-- navigation side buttons next/back -->\n <ng-container *ngIf=\"!mobile && (rows | isArrayLength: { greaterThan: 1 })\">\n <div class=\"side-buttons prev\" (click)=\"slidePrev(modalSwiper)\">\n <ion-icon name=\"chevron-back\"></ion-icon>\n </div>\n <div class=\"side-buttons next\" (click)=\"slideNext(modalSwiper)\">\n <ion-icon name=\"chevron-forward\"></ion-icon>\n </div>\n </ng-container>\n\n <!-- image slides -->\n <swiper-container\n #modalSwiper\n [modules]=\"swiperModules\"\n [zoom]=\"true\"\n (swiperslidechange)=\"onSlideChange(modalSwiper)\"\n (swiperinit)=\"initModalSlides(modalSwiper)\"\n >\n @for (row of rows; track row.id; let last = $last) {\n <swiper-slide>\n @let image = row | propertyGet: 'currentData';\n <div class=\"swiper-zoom-container\">\n @if (image.url) {\n <ion-img [src]=\"image.url | appendQueryParams: getImageSizeQueryParams('modal')\" />\n } @else {\n <img [src]=\"image.dataUrl\" [alt]=\"image.title\" />\n }\n </div>\n </swiper-slide>\n }\n </swiper-container>\n </ion-content>\n\n <ion-footer>\n <ion-toolbar color=\"light\">\n <ion-row>\n <ion-col size=\"4\" class=\"ion-text-start\">\n <ion-button\n *ngIf=\"!readOnly\"\n (click)=\"deleteFromModal($event, modalSwiper)\"\n [disabled]=\"disabled\"\n fill=\"clear\"\n color=\"danger\"\n >\n <mat-icon slot=\"start\">delete</mat-icon>\n {{ 'COMMON.BTN_DELETE' | translate }}\n </ion-button>\n </ion-col>\n <ion-col size=\"4\"></ion-col>\n <ion-col size=\"4\" class=\"ion-text-end\">\n <ion-button (click)=\"zoomModal.dismiss()\" color=\"tertiary\" fill=\"clear\" *ngIf=\"mobile; else desktop\">\n <ion-icon slot=\"start\" name=\"close\"></ion-icon>\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n <ng-template #desktop>\n <ion-button (click)=\"zoomModal.dismiss()\" color=\"tertiary\">\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n </ng-template>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n</ion-modal>\n\n<ion-popover #titlePopover>\n <ng-template>\n <ion-content class=\"ion-padding\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <form [formGroup]=\"_titleForm\">\n <mat-form-field floatLabel=\"auto\">\n <mat-label translate>IMAGE.GALLERY.TITLE</mat-label>\n <input\n matInput\n formControlName=\"title\"\n [readonly]=\"disabled\"\n [appAutofocus]=\"_titleAutofocus\"\n (keydown.control.enter)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n />\n </mat-form-field>\n </form>\n </ion-content>\n\n <ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"titlePopover.dismiss(null, 'CANCEL')\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n (keyup.enter)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP' | translate\"\n >\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n</ion-popover>\n", styles: [":host{--image-margin-inline: 10px;--image-margin-safe-area: var(--image-margin-inline, 0px) * 2 - 3px;--segment-max-width: 150px}ion-toolbar ion-segment{max-width:var(--segment-max-width)}mat-toolbar,.mat-toolbar-single-row{padding:0;height:42px}ion-card{margin-left:unset;margin-right:unset;margin-inline:var(--image-margin-inline, 10px)}.image-slide{overflow:visible}.image-card{background-color:var(--ion-color-base);z-index:9;--img-scale: 1}.image-card .card-thumbnail{position:relative;overflow:hidden;display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:100%;height:100%;max-height:var(--img-max-height, calc(100% - var(--image-margin-safe-area, 0px)))}.image-card .card-thumbnail>ion-img{min-height:100%;height:100%;object-fit:cover;object-position:center;transition:scale .2s ease-in-out;scale:var(--img-scale)}.image-card .card-thumbnail>ion-img img{max-height:var(--img-max-height)}.image-card.zoom-hover:hover{--img-scale: 1.2}.image-card ion-toolbar{--top-offset: calc(-1 * var(--ion-toolbar-height));position:absolute}.image-card ion-toolbar.title{--padding-start: 16px;--padding-end: 16px;--ion-color-base: rgba(0, 0, 0, .45) !important;position:absolute;top:calc(100% + var(--top-offset));transition:opacity .2s ease-in-out}.image-card ion-toolbar.title ion-label{color:#fff}.image-card ion-toolbar.buttons{--padding-start: 4px;--padding-end: 4px;--ion-color-base: var(--ion-color-light) !important;position:absolute;top:100%;transition:transform .2s ease-in-out}.image-card:hover ion-toolbar.buttons,.image-card ion-toolbar.buttons.focused{transform:translateY(var(--top-offset))}.image-card-button{height:calc(100% - var(--image-margin-safe-area, 0px));max-height:max(min(30vh,200px),var(--img-max-height, 0px));transition:.2s ease-in-out;max-width:250px}.image-card-button ion-card-content{height:100%}.image-card-button .icon-container{height:auto;position:relative;top:calc(50% - 75px);display:flex;align-items:center;justify-content:center}.image-card-button ion-icon:first-of-type{font-size:150px;height:150px;position:relative;top:0}.image-card-button ion-icon.icon-secondary{font-size:50px;position:absolute;top:0;left:max(min(50% + 25px,100% - 50px),0px)}.image-card-button ion-button{float:right}.image-card-button:hover{--ion-color-base: var(--ion-color-shade) !important}.image-card-button:hover ion-icon{--ion-color-base: var(--ion-color-shade) !important}.backdrop{height:100vh;width:100vw;background:#000;position:absolute;z-index:10}.zoom-modal{-webkit-user-select:none;user-select:none}.zoom-modal .top-left{z-index:14;position:absolute;display:inline-grid;left:var(--ion-padding-start, 8px);top:var(--ion-padding-start, 8px)}.zoom-modal .top-right{z-index:14;position:absolute;display:inline-grid;right:var(--ion-padding-start, 8px);top:var(--ion-padding-start, 8px)}.zoom-modal .side-buttons{--side-buttons-width: 120px;--side-buttons-margin: calc(var(--side-buttons-width) / 3);z-index:13;position:absolute;top:0;bottom:0;width:var(--side-buttons-width)}.zoom-modal .side-buttons ion-icon{top:50%;color:#fff;font-size:2.5rem;position:absolute;opacity:0;transition-duration:.15s;transition-timing-function:ease-in}.zoom-modal .side-buttons:hover{cursor:pointer}.zoom-modal .side-buttons:hover ion-icon{opacity:1}.zoom-modal .side-buttons.prev{left:0}.zoom-modal .side-buttons.prev ion-icon{left:var(--side-buttons-margin)}.zoom-modal .side-buttons.next{right:0}.zoom-modal .side-buttons.next ion-icon{right:var(--side-buttons-margin)}.zoom-modal swiper-container{height:100%;background:#000}.zoom-modal ion-fab-button .icon-secondary{top:11px;left:6px;height:14px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonFab, selector: "ion-fab", inputs: ["activated", "edge", "horizontal", "vertical"] }, { kind: "component", type: i2.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i2.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "selectOnFocus", "swipeGesture", "value"] }, { kind: "component", type: i2.IonSegmentButton, selector: "ion-segment-button", inputs: ["disabled", "layout", "mode", "type", "value"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonModal, selector: "ion-modal" }, { kind: "component", type: i2.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i2.SelectValueAccessor, selector: "ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i10.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i11.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i12.RxFor, selector: "[rxFor][rxForOf]", inputs: ["rxForOf", "rxForTemplate", "rxForStrategy", "rxForParent", "rxForPatchZone", "rxForTrackBy", "rxForRenderCallback"] }, { kind: "pipe", type: i13.PropertyGetPipe, name: "propertyGet" }, { kind: "pipe", type: i14.ArrayLengthPipe, name: "isArrayLength" }, { kind: "pipe", type: i15.IsNotNilOrBlankPipe, name: "isNotNilOrBlank" }, { kind: "pipe", type: i16.AppendQueryParamsPipePipe, name: "appendQueryParams" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], animations: [fadeInAnimation, fadeInOutAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
366
366
|
}
|
|
367
367
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppImageGalleryComponent, decorators: [{
|
|
368
368
|
type: Component,
|
|
@@ -43,4 +43,4 @@ export class MatAutocompleteConfigHolder {
|
|
|
43
43
|
return this.fields[fieldName] || this.add(fieldName);
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBd0UxRSxNQUFNLE9BQU8sMkJBQTJCO0lBUTVCO0lBUFYsTUFBTSxHQUVGLEVBQUUsQ0FBQztJQUVQLGlCQUFpQixDQUFnRTtJQUVqRixZQUNVLE9BRVA7UUFGTyxZQUFPLEdBQVAsT0FBTyxDQUVkO1FBRUQsZ0VBQWdFO1FBQ2hFLCtCQUErQjtRQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxFQUFFLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDcEksQ0FBQztJQUVELEdBQUcsQ0FBbUIsU0FBaUIsRUFBRSxPQUE4QztRQUNyRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxHQUFHLENBQUMsU0FBUyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUNELE9BQU8sR0FBRyxPQUFPLElBQW9DLEVBQUUsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBb0IsT0FBTyxDQUFDLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1FBQ3BJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlGLHVEQUF1RDtRQUN2RCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pILE1BQU0sTUFBTSxHQUFlO1lBQ3pCLGVBQWUsRUFBRSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ3BFLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDaEUsR0FBRyxPQUFPLENBQUMsTUFBTTtTQUNsQixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuSCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLHlCQUF5QixDQUFDLGFBQWEsQ0FBQztRQUV6RSxNQUFNLE1BQU0sR0FBK0I7WUFDekMsR0FBRyxPQUFPO1lBQ1YsVUFBVSxFQUFFLGNBQWM7WUFDMUIsU0FBUztZQUNULE1BQU07WUFDTixXQUFXO1lBQ1gsTUFBTTtTQUNQLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNoQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsR0FBRyxDQUFVLFNBQWlCO1FBQzVCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLEdBQUcsQ0FBQyxTQUFTLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFtQyxDQUFDO0lBQzFGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1Z2dlc3RGbiwgU3VnZ2VzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVGaWVsZFV0aWxzIH0gZnJvbSAnLi9tYXRlcmlhbC5hdXRvY29tcGxldGUudXRpbHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGlzcGxheUZuLCBFcXVhbHNGbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnPFQgPSBhbnksIEYgPSBhbnk+IHtcbiAgYXR0cmlidXRlcz86IHN0cmluZ1tdO1xuICBzdWdnZXN0Rm4/OiBTdWdnZXN0Rm48VCwgRj47XG4gIGZpbHRlcj86IFBhcnRpYWw8Rj47XG4gIGl0ZW1zPzogT2JzZXJ2YWJsZTxUW10+IHwgVFtdO1xuICBjb2x1bW5TaXplcz86IChudW1iZXIgfCAnYXV0bycgfCB1bmRlZmluZWQpW107XG4gIGNvbHVtbk5hbWVzPzogKHN0cmluZyB8IHVuZGVmaW5lZClbXTtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNwbGF5V2l0aD86IERpc3BsYXlGbjtcbiAgZGlzcGxheVdpdGhTZXBhcmF0b3I/OiBzdHJpbmc7IC8vIFVzZSB0byBzcGxpdCBzZWFyY2hUZXh0IGJlZm9yZSBzZWFyY2hpbmdcbiAgc3BsaXRTZWFyY2hUZXh0PzogYm9vbGVhbjsgLy8gU3BsaXQgc2VhcmNoVGV4dCBiZWZvcmUgc2VhcmNoaW5nPyAod2lsbCB1c2UgdGhlIGZpcnN0IHZhbHVlKVxuICB0cmltU2VhcmNoVGV4dD86IGJvb2xlYW47IC8vIFRyaW0gc2VhcmNoVGV4dCBiZWZvcmUgc2VhcmNoaW5nP1xuICBjbGVhckludmFsaWRTZWFyY2hUZXh0T25CbHVyPzogYm9vbGVhbjsgLy8gQ2xlYXIgaW52YWxpZCB0ZXh0LCBvbiBibHVyIChmYWxzZSBieSBkZWZhdWx0KVxuICBlcXVhbHM/OiBFcXVhbHNGbjsgLy8gVXNlZCBieSA8bWF0LWNoaXBzLWZpZWxkPlxuICBzaG93QWxsT25Gb2N1cz86IGJvb2xlYW47XG4gIHNob3dQYW5lbE9uRm9jdXM/OiBib29sZWFuO1xuICByZWxvYWRJdGVtc09uRm9jdXM/OiBib29sZWFuO1xuICBtb2JpbGU/OiBib29sZWFuO1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG4gIHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIGhpZ2hsaWdodEFjY2VudD86IGJvb2xlYW47XG4gIGFwcGx5SW1wbGljaXRWYWx1ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNob3VsZCBzZWxlY3QgaW5wdXQgY29udGVudCAoZGVza3RvcCBvbmx5KVxuICAgKi9cbiAgc2VsZWN0SW5wdXRDb250ZW50T25Gb2N1cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZCBhIGRlbGF5IChtcykgYmVmb3JlIHRyeWluZyB0byBzZWxlY3QgaW5wdXQgY29udGVudCAoZGVza3RvcCBvbmx5KVxuICAgKi9cbiAgc2VsZWN0SW5wdXRDb250ZW50T25Gb2N1c0RlbGF5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBhbnkgaW52YWxpZCB2YWx1ZSBlbnRlcmVkIGluIHRoZSBpbnB1dCBmaWVsZCB3aWxsIGJlIGNsZWFyZWQgd2hlbiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuXG4gICAqIFRoaXMgaGVscHMgaW4gcHJldmVudGluZyBpbnZhbGlkIGRhdGEgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSBmaWVsZFxuICAgKi9cbiAgY2xlYXJJbnZhbGlkVmFsdWVPbkJsdXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGltcGxpY2l0IHZhbHVlIGlzIHByZXZpZXcgaW4gdGhlIGlucHV0IHRleHQgZmllbGQgb3Igbm90IChkZXNrdG9wIG9ubHkpLlxuICAgKlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBub3QgcHJldmlldyBpbXBsaWNpdCB2YWx1ZXMgKGBmYWxzZWApLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHByZXZpZXdJbXBsaWNpdFZhbHVlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2xhc3MgdG8gYXBwbHkgdG8gdGhlIGBkaXYubWF0LW1kYy1zZWxlY3QtcGFuZWxgXG4gICAqL1xuICBwYW5lbENsYXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBmaXggcGFuZWwgd2lkdGggKGUuZy4gJzUwMHB4JyBvciAnMTAwdncnKVxuICAgKi9cbiAgcGFuZWxXaWR0aD86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBwYW5lbENsYXNzYCBpbnN0ZWFkXG4gICAqL1xuICBjbGFzcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE1hdEF1dG9jb21wbGV0ZUZpZWxkQWRkT3B0aW9uczxUID0gYW55LCBGID0gYW55PiBleHRlbmRzIFBhcnRpYWw8TWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc8VCwgRj4+IHtcbiAgc2VydmljZT86IFN1Z2dlc3RTZXJ2aWNlPFQsIEY+O1xufVxuXG5leHBvcnQgY2xhc3MgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyIHtcbiAgZmllbGRzOiB7XG4gICAgW2tleTogc3RyaW5nXTogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc7XG4gIH0gPSB7fTtcblxuICBnZXRVc2VyQXR0cmlidXRlczogKGZpZWxkTmFtZTogc3RyaW5nLCBkZWZhdWx0QXR0cmlidXRlcz86IHN0cmluZ1tdKSA9PiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG9wdGlvbnM/OiB7XG4gICAgICBnZXRVc2VyQXR0cmlidXRlczogKGZpZWxkTmFtZTogc3RyaW5nLCBkZWZhdWx0QXR0cmlidXRlcz86IHN0cmluZ1tdKSA9PiBzdHJpbmdbXTtcbiAgICB9XG4gICkge1xuICAgIC8vIFN0b3JlIHRoZSBmdW5jdGlvbiBmcm9tIG9wdGlvbnMgKGUuZy4gZ2V0IGZyb20gdXNlciBzZXR0aW5ncylcbiAgICAvLyBvciBjcmVhdGUgYSBkZWZhdWx0IGZ1bmN0aW9uXG4gICAgdGhpcy5nZXRVc2VyQXR0cmlidXRlcyA9IG9wdGlvbnM/LmdldFVzZXJBdHRyaWJ1dGVzIHx8ICgoZmllbGROYW1lLCBkZWZhdWx0QXR0cmlidXRlcykgPT4gZGVmYXVsdEF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ10pO1xuICB9XG5cbiAgYWRkPFQgPSBhbnksIEYgPSBhbnk+KGZpZWxkTmFtZTogc3RyaW5nLCBvcHRpb25zPzogTWF0QXV0b2NvbXBsZXRlRmllbGRBZGRPcHRpb25zPFQsIEY+KTogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc8VCwgRj4ge1xuICAgIGlmICghZmllbGROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBhZGQgY29uZmlnLCB3aXRoIG5hbWU6ICcgKyAoZmllbGROYW1lIHx8ICd1bmRlZmluZWQnKSk7XG4gICAgfVxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IDxNYXRBdXRvY29tcGxldGVGaWVsZEFkZE9wdGlvbnM+e307XG4gICAgY29uc3Qgc3VnZ2VzdEZuOiBTdWdnZXN0Rm48VCwgRj4gPSBvcHRpb25zLnN1Z2dlc3RGbiB8fCAob3B0aW9ucy5zZXJ2aWNlICYmICgodiwgZikgPT4gb3B0aW9ucy5zZXJ2aWNlLnN1Z2dlc3QodiwgZikpKSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMuZ2V0VXNlckF0dHJpYnV0ZXMoZmllbGROYW1lLCBvcHRpb25zLmF0dHJpYnV0ZXMpIHx8IFsnbGFiZWwnLCAnbmFtZSddO1xuICAgIC8vIEtlZXAgb3JpZ2luYWwgdGhlIGZ1bmN0aW9uIGZyb20gb3B0aW9ucywgd2hlbiBleGlzdHNcbiAgICBjb25zdCBhdHRyaWJ1dGVzT3JGbiA9IGF0dHJpYnV0ZXMubWFwKChhLCBpbmRleCkgPT4gKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMuYXR0cmlidXRlc1tpbmRleF0pIHx8IGEpO1xuICAgIGNvbnN0IGZpbHRlcjogUGFydGlhbDxGPiA9IHtcbiAgICAgIHNlYXJjaEF0dHJpYnV0ZTogYXR0cmlidXRlcy5sZW5ndGggPT09IDEgPyBhdHRyaWJ1dGVzWzBdIDogdW5kZWZpbmVkLFxuICAgICAgc2VhcmNoQXR0cmlidXRlczogYXR0cmlidXRlcy5sZW5ndGggPiAxID8gYXR0cmlidXRlcyA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLm9wdGlvbnMuZmlsdGVyLFxuICAgIH07XG4gICAgY29uc3QgZGlzcGxheVdpdGggPSBvcHRpb25zLmRpc3BsYXlXaXRoIHx8IE1hdEF1dG9jb21wbGV0ZUZpZWxkVXRpbHMuY3JlYXRlRGlzcGxheUZuKGF0dHJpYnV0ZXMsIG9wdGlvbnMubXVsdGlwbGUpO1xuICAgIGNvbnN0IGVxdWFscyA9IG9wdGlvbnMuZXF1YWxzIHx8IE1hdEF1dG9jb21wbGV0ZUZpZWxkVXRpbHMuZGVmYXVsdEVxdWFscztcblxuICAgIGNvbnN0IGNvbmZpZzogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWcgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc09yRm4sXG4gICAgICBzdWdnZXN0Rm4sXG4gICAgICBmaWx0ZXIsXG4gICAgICBkaXNwbGF5V2l0aCxcbiAgICAgIGVxdWFscyxcbiAgICB9O1xuXG4gICAgdGhpcy5maWVsZHNbZmllbGROYW1lXSA9IGNvbmZpZztcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgZ2V0PFQgPSBhbnk+KGZpZWxkTmFtZTogc3RyaW5nKTogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc8VD4ge1xuICAgIGlmICghZmllbGROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBhZGQgY29uZmlnLCB3aXRoIG5hbWU6ICcgKyAoZmllbGROYW1lIHx8ICd1bmRlZmluZWQnKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpZWxkc1tmaWVsZE5hbWVdIHx8ICh0aGlzLmFkZChmaWVsZE5hbWUpIGFzIE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnPFQ+KTtcbiAgfVxufVxuIl19
|