@sumaris-net/ngx-components 18.16.4 → 18.16.6
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/doc/changelog.md +8 -0
- package/esm2022/public_api.mjs +3 -1
- package/esm2022/src/app/core/form/array/form-array.mjs +32 -32
- package/esm2022/src/app/shared/base64.utils.mjs +59 -0
- package/esm2022/src/app/shared/forms.mjs +30 -30
- package/esm2022/src/app/shared/functions.mjs +1 -10
- package/esm2022/src/app/shared/html.utils.mjs +35 -0
- package/esm2022/src/app/shared/pipes/html.pipes.mjs +36 -3
- package/esm2022/src/app/shared/pipes/pipes.module.mjs +5 -2
- package/esm2022/src/app/social/feed/feed.component.mjs +13 -11
- package/esm2022/src/app/social/feed/feed.model.mjs +4 -12
- package/esm2022/src/app/social/feed/feed.module.mjs +5 -4
- package/fesm2022/sumaris-net.ngx-components.mjs +199 -87
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +2 -0
- package/src/app/core/form/array/form-array.d.ts +25 -15
- package/src/app/shared/base64.utils.d.ts +7 -0
- package/src/app/shared/forms.d.ts +14 -8
- package/src/app/shared/functions.d.ts +0 -1
- package/src/app/shared/html.utils.d.ts +17 -0
- package/src/app/shared/pipes/html.pipes.d.ts +28 -0
- package/src/app/shared/pipes/pipes.module.d.ts +1 -1
- package/src/app/social/feed/feed.model.d.ts +2 -3
- package/src/app/social/feed/feed.module.d.ts +2 -1
- package/src/assets/manifest.json +1 -1
|
@@ -944,15 +944,6 @@ function intersectArrays(values) {
|
|
|
944
944
|
// Utilise la méthode reduce pour obtenir l'intersection des tableaux
|
|
945
945
|
return values.reduce((acc, curr) => acc.filter((x) => curr.includes(x)), values[0].slice());
|
|
946
946
|
}
|
|
947
|
-
function noHtml(value) {
|
|
948
|
-
if (value && typeof value === 'string') {
|
|
949
|
-
// Use regular expression to remove all HTML tags
|
|
950
|
-
return value.replace(/<[^>]*>.*?<\/[^>]*>|<[^>]+>/g, '');
|
|
951
|
-
}
|
|
952
|
-
else {
|
|
953
|
-
return value;
|
|
954
|
-
}
|
|
955
|
-
}
|
|
956
947
|
/**
|
|
957
948
|
* Interpolates a string by replacing placeholders with corresponding values from the provided object.
|
|
958
949
|
*
|
|
@@ -3469,37 +3460,37 @@ class FormArrayHelper {
|
|
|
3469
3460
|
}
|
|
3470
3461
|
/**
|
|
3471
3462
|
* @param value
|
|
3472
|
-
* @param
|
|
3463
|
+
* @param opts
|
|
3473
3464
|
*/
|
|
3474
|
-
add(value,
|
|
3465
|
+
add(value, opts) {
|
|
3475
3466
|
return addValueInArray(this._formArray, this.createControl, this.equals, this.isEmpty, value, {
|
|
3476
3467
|
allowManyNullValues: this.allowManyNullValues,
|
|
3477
3468
|
allowDuplicateValue: this.allowDuplicatedValues,
|
|
3478
|
-
...
|
|
3469
|
+
...opts,
|
|
3479
3470
|
});
|
|
3480
3471
|
}
|
|
3481
|
-
removeAt(index) {
|
|
3472
|
+
removeAt(index, opts) {
|
|
3482
3473
|
// Do not remove if last criterion
|
|
3483
3474
|
if (!this._allowEmptyArray && this._formArray.length === 1) {
|
|
3484
|
-
return clearValueInArray(this._formArray, this.isEmpty, index);
|
|
3475
|
+
return clearValueInArray(this._formArray, this.isEmpty, index, opts);
|
|
3485
3476
|
}
|
|
3486
3477
|
else {
|
|
3487
|
-
return removeValueInArray(this._formArray,
|
|
3478
|
+
return removeValueInArray(this._formArray, index, opts);
|
|
3488
3479
|
}
|
|
3489
3480
|
}
|
|
3490
|
-
resize(length,
|
|
3491
|
-
return resizeArray(this._formArray, this.createControl, length,
|
|
3481
|
+
resize(length, opts) {
|
|
3482
|
+
return resizeArray(this._formArray, this.createControl, length, opts);
|
|
3492
3483
|
}
|
|
3493
|
-
clearAt(index) {
|
|
3494
|
-
return clearValueInArray(this._formArray, this.isEmpty, index);
|
|
3484
|
+
clearAt(index, opts) {
|
|
3485
|
+
return clearValueInArray(this._formArray, this.isEmpty, index, opts);
|
|
3495
3486
|
}
|
|
3496
3487
|
isLast(index) {
|
|
3497
3488
|
return this._formArray.length - 1 === index;
|
|
3498
3489
|
}
|
|
3499
|
-
removeAllEmpty() {
|
|
3490
|
+
removeAllEmpty(opts) {
|
|
3500
3491
|
let index = this._formArray.controls.findIndex((c) => this.isEmpty(c.value));
|
|
3501
3492
|
while (index !== -1) {
|
|
3502
|
-
this.removeAt(index);
|
|
3493
|
+
this.removeAt(index, opts);
|
|
3503
3494
|
index = this._formArray.controls.findIndex((c) => this.isEmpty(c.value));
|
|
3504
3495
|
}
|
|
3505
3496
|
}
|
|
@@ -3523,11 +3514,11 @@ class FormArrayHelper {
|
|
|
3523
3514
|
* Resize the FormArray, then patch values
|
|
3524
3515
|
*
|
|
3525
3516
|
* @param values
|
|
3526
|
-
* @param
|
|
3517
|
+
* @param opts
|
|
3527
3518
|
*/
|
|
3528
|
-
patchValue(values,
|
|
3519
|
+
patchValue(values, opts) {
|
|
3529
3520
|
this.resize(values?.length || 0);
|
|
3530
|
-
this._formArray.patchValue(values,
|
|
3521
|
+
this._formArray.patchValue(values, opts);
|
|
3531
3522
|
}
|
|
3532
3523
|
disable(opts) {
|
|
3533
3524
|
this._formArray.controls.forEach((c) => c.disable(opts));
|
|
@@ -3608,8 +3599,8 @@ class AppFormArray extends UntypedFormArray {
|
|
|
3608
3599
|
// Clean all
|
|
3609
3600
|
this.resize(0, { emitEvent: options?.emitEvent });
|
|
3610
3601
|
// Recreate each control, with a default value
|
|
3611
|
-
(values || []).forEach((value) => {
|
|
3612
|
-
const control = this.createControl(value);
|
|
3602
|
+
(values || []).forEach((value, index) => {
|
|
3603
|
+
const control = this.createControl(value, index);
|
|
3613
3604
|
// Apply parent disabled state, before to push it into the array
|
|
3614
3605
|
// This is need to avoid parent form to be enabled, after calling AppFormArray.patchValue() (e.g. in table's row validator)
|
|
3615
3606
|
if (disabled && control.enabled)
|
|
@@ -3638,8 +3629,8 @@ class AppFormArray extends UntypedFormArray {
|
|
|
3638
3629
|
// Clean all
|
|
3639
3630
|
this.resize(0, { emitEvent: options?.emitEvent });
|
|
3640
3631
|
// Recreate each control, with a default value
|
|
3641
|
-
(values || []).forEach((value) => {
|
|
3642
|
-
const control = this.createControl(value);
|
|
3632
|
+
(values || []).forEach((value, index) => {
|
|
3633
|
+
const control = this.createControl(value, index);
|
|
3643
3634
|
// Apply parent disabled state, before to push it into the array
|
|
3644
3635
|
// This is need to avoid parent form to be enabled, after calling AppFormArray.patchValue() (e.g. in table's row validator)
|
|
3645
3636
|
if (disabled && control.enabled)
|
|
@@ -3675,38 +3666,38 @@ class AppFormArray extends UntypedFormArray {
|
|
|
3675
3666
|
}
|
|
3676
3667
|
/**
|
|
3677
3668
|
* @param value
|
|
3678
|
-
* @param
|
|
3669
|
+
* @param opts
|
|
3679
3670
|
*/
|
|
3680
|
-
add(value,
|
|
3681
|
-
addValueInArray(this, this.createControl, this.equals, this.isEmpty, value, { ...this.options, ...
|
|
3671
|
+
add(value, opts) {
|
|
3672
|
+
addValueInArray(this, this.createControl, this.equals, this.isEmpty, value, { ...this.options, ...opts });
|
|
3682
3673
|
}
|
|
3683
|
-
removeAt(index,
|
|
3674
|
+
removeAt(index, opts) {
|
|
3684
3675
|
// Do not remove if last criterion
|
|
3685
3676
|
if (this.options.allowEmptyArray === false && this.length === 1) {
|
|
3686
|
-
this.clearAt(index,
|
|
3677
|
+
this.clearAt(index, opts);
|
|
3687
3678
|
return false;
|
|
3688
3679
|
}
|
|
3689
3680
|
else if (index < this.length) {
|
|
3690
|
-
super.removeAt(index,
|
|
3691
|
-
this.markAsDirty();
|
|
3681
|
+
super.removeAt(index, opts);
|
|
3682
|
+
this.markAsDirty(opts);
|
|
3692
3683
|
return true;
|
|
3693
3684
|
}
|
|
3694
3685
|
return false;
|
|
3695
3686
|
}
|
|
3696
|
-
clearAt(index,
|
|
3687
|
+
clearAt(index, opts) {
|
|
3697
3688
|
const control = this.at(index);
|
|
3698
3689
|
if (this.isEmpty(control.value))
|
|
3699
3690
|
return; // skip (not need to clear)
|
|
3700
3691
|
if (control instanceof UntypedFormGroup) {
|
|
3701
|
-
copyEntity2Form({}, control,
|
|
3692
|
+
copyEntity2Form({}, control, opts);
|
|
3702
3693
|
}
|
|
3703
3694
|
else if (control instanceof UntypedFormArray) {
|
|
3704
|
-
control.setValue([],
|
|
3695
|
+
control.setValue([], opts);
|
|
3705
3696
|
}
|
|
3706
3697
|
else {
|
|
3707
|
-
control.setValue(null,
|
|
3698
|
+
control.setValue(null, opts);
|
|
3708
3699
|
}
|
|
3709
|
-
this.markAsDirty();
|
|
3700
|
+
this.markAsDirty(opts);
|
|
3710
3701
|
}
|
|
3711
3702
|
isLast(index) {
|
|
3712
3703
|
return this.length - 1 === index;
|
|
@@ -3781,7 +3772,7 @@ function adaptValueToControl(source, control, path) {
|
|
|
3781
3772
|
}
|
|
3782
3773
|
// Resizable array
|
|
3783
3774
|
if (control instanceof AppFormArray) {
|
|
3784
|
-
const exampleControl = control.createControl();
|
|
3775
|
+
const exampleControl = control.createControl(undefined, control.length);
|
|
3785
3776
|
return source.map((item, index) => adaptValueToControl(item, exampleControl, pathPrefix + '#' + index));
|
|
3786
3777
|
}
|
|
3787
3778
|
// Legacy array
|
|
@@ -4074,17 +4065,17 @@ function setControlEnabled(control, enabled, opts) {
|
|
|
4074
4065
|
}
|
|
4075
4066
|
}
|
|
4076
4067
|
}
|
|
4077
|
-
function addValueInArray(arrayControl, createControl, equals, isEmpty, value,
|
|
4068
|
+
function addValueInArray(arrayControl, createControl, equals, isEmpty, value, opts) {
|
|
4078
4069
|
const disabled = arrayControl.disabled;
|
|
4079
4070
|
let hasChanged = false;
|
|
4080
4071
|
let index = -1;
|
|
4081
4072
|
let isEmptyValue = isEmpty(value);
|
|
4082
4073
|
// Search if value already exists
|
|
4083
|
-
if (!isEmptyValue &&
|
|
4074
|
+
if (!isEmptyValue && opts?.allowDuplicateValue !== true) {
|
|
4084
4075
|
index = (arrayControl.value || []).findIndex((v) => equals(value, v));
|
|
4085
4076
|
}
|
|
4086
4077
|
// If value not exists, but last value is empty: reuse last value
|
|
4087
|
-
if (index === -1 &&
|
|
4078
|
+
if (index === -1 && opts?.allowManyNullValues !== true && arrayControl.length > 0) {
|
|
4088
4079
|
const lastValue = arrayControl.at(arrayControl.length - 1).value;
|
|
4089
4080
|
if (isEmpty(lastValue)) {
|
|
4090
4081
|
index = arrayControl.length - 1;
|
|
@@ -4093,31 +4084,31 @@ function addValueInArray(arrayControl, createControl, equals, isEmpty, value, op
|
|
|
4093
4084
|
// Replace the existing value
|
|
4094
4085
|
if (index !== -1) {
|
|
4095
4086
|
if (!isEmptyValue) {
|
|
4096
|
-
arrayControl.at(index).patchValue(value,
|
|
4087
|
+
arrayControl.at(index).patchValue(value, opts);
|
|
4097
4088
|
hasChanged = true;
|
|
4098
4089
|
}
|
|
4099
4090
|
}
|
|
4100
4091
|
else {
|
|
4101
|
-
const control = createControl(value);
|
|
4092
|
+
const control = createControl(value, arrayControl.length);
|
|
4102
4093
|
// Apply parent disabled state, before to push it into the array
|
|
4103
4094
|
// This is need to avoid parent form to be enabled
|
|
4104
4095
|
if (disabled && control.enabled)
|
|
4105
4096
|
control.disable({ emitEvent: false });
|
|
4106
4097
|
else if (!disabled && control.disabled)
|
|
4107
4098
|
control.enable({ emitEvent: false });
|
|
4108
|
-
if (isNotNilOrNaN(
|
|
4109
|
-
arrayControl.insert(
|
|
4099
|
+
if (isNotNilOrNaN(opts?.insertAt)) {
|
|
4100
|
+
arrayControl.insert(opts.insertAt, control, opts);
|
|
4110
4101
|
}
|
|
4111
4102
|
else {
|
|
4112
|
-
arrayControl.push(control,
|
|
4103
|
+
arrayControl.push(control, opts);
|
|
4113
4104
|
}
|
|
4114
4105
|
hasChanged = true;
|
|
4115
4106
|
}
|
|
4116
4107
|
if (hasChanged) {
|
|
4117
|
-
if (!
|
|
4108
|
+
if (!opts || opts.emitEvent !== false) {
|
|
4118
4109
|
// Mark array control dirty
|
|
4119
4110
|
if (!isEmptyValue) {
|
|
4120
|
-
arrayControl.markAsDirty();
|
|
4111
|
+
arrayControl.markAsDirty(opts);
|
|
4121
4112
|
}
|
|
4122
4113
|
}
|
|
4123
4114
|
}
|
|
@@ -4129,67 +4120,67 @@ function addValueInArray(arrayControl, createControl, equals, isEmpty, value, op
|
|
|
4129
4120
|
* @param arrayControl
|
|
4130
4121
|
* @param createControl
|
|
4131
4122
|
* @param defaultValues
|
|
4132
|
-
* @param
|
|
4123
|
+
* @param opts
|
|
4133
4124
|
*/
|
|
4134
|
-
function initArrayControlsFromValues(arrayControl, createControl, defaultValues,
|
|
4125
|
+
function initArrayControlsFromValues(arrayControl, createControl, defaultValues, opts) {
|
|
4135
4126
|
if (arrayControl.length === 0 && (!defaultValues || defaultValues.length === 0))
|
|
4136
4127
|
return false; // No changes need
|
|
4137
4128
|
const disabled = arrayControl.disabled;
|
|
4138
4129
|
while (arrayControl.length > 0) {
|
|
4139
|
-
arrayControl.removeAt(arrayControl.length - 1,
|
|
4130
|
+
arrayControl.removeAt(arrayControl.length - 1, opts);
|
|
4140
4131
|
}
|
|
4141
|
-
(defaultValues || []).forEach((value) => {
|
|
4142
|
-
const control = createControl(value);
|
|
4132
|
+
(defaultValues || []).forEach((value, index) => {
|
|
4133
|
+
const control = createControl(value, index);
|
|
4143
4134
|
// Apply parent disabled state, before to push it into the array
|
|
4144
4135
|
// This is need to avoid parent form to be enabled
|
|
4145
4136
|
if (disabled && control.enabled)
|
|
4146
4137
|
control.disable({ emitEvent: false });
|
|
4147
4138
|
else if (!disabled && control.disabled)
|
|
4148
4139
|
control.enable({ emitEvent: false });
|
|
4149
|
-
arrayControl.push(control,
|
|
4140
|
+
arrayControl.push(control, opts);
|
|
4150
4141
|
});
|
|
4151
4142
|
return true; // Has some changes
|
|
4152
4143
|
}
|
|
4153
|
-
function resizeArray(arrayControl, createControl, length,
|
|
4144
|
+
function resizeArray(arrayControl, createControl, length, opts) {
|
|
4154
4145
|
if (arrayControl.length === length)
|
|
4155
4146
|
return false; // No changes need
|
|
4156
4147
|
const disabled = arrayControl.disabled;
|
|
4157
4148
|
// Reduce size
|
|
4158
4149
|
while (arrayControl.length > length) {
|
|
4159
|
-
arrayControl.removeAt(arrayControl.length - 1,
|
|
4150
|
+
arrayControl.removeAt(arrayControl.length - 1, opts);
|
|
4160
4151
|
}
|
|
4161
4152
|
// Increase size
|
|
4162
4153
|
while (arrayControl.length < length) {
|
|
4163
|
-
const control = createControl();
|
|
4154
|
+
const control = createControl(undefined, arrayControl.length);
|
|
4164
4155
|
// Apply parent disabled state, before to push it into the array
|
|
4165
4156
|
// This is need to avoid parent form to be enabled, after calling resizeArray()
|
|
4166
4157
|
if (disabled && control.enabled)
|
|
4167
4158
|
control.disable({ emitEvent: false });
|
|
4168
4159
|
else if (!disabled && control.disabled)
|
|
4169
4160
|
control.enable({ emitEvent: false });
|
|
4170
|
-
arrayControl.push(control,
|
|
4161
|
+
arrayControl.push(control, opts);
|
|
4171
4162
|
}
|
|
4172
4163
|
return true; // Has some changes
|
|
4173
4164
|
}
|
|
4174
|
-
function removeValueInArray(arrayControl,
|
|
4175
|
-
arrayControl.removeAt(index);
|
|
4176
|
-
arrayControl.markAsDirty();
|
|
4165
|
+
function removeValueInArray(arrayControl, index, opts) {
|
|
4166
|
+
arrayControl.removeAt(index, opts);
|
|
4167
|
+
arrayControl.markAsDirty(opts);
|
|
4177
4168
|
return true;
|
|
4178
4169
|
}
|
|
4179
|
-
function clearValueInArray(arrayControl, isEmpty, index) {
|
|
4170
|
+
function clearValueInArray(arrayControl, isEmpty, index, opts) {
|
|
4180
4171
|
const control = arrayControl.at(index);
|
|
4181
4172
|
if (isEmpty(control.value))
|
|
4182
4173
|
return false; // skip (not need to clear)
|
|
4183
4174
|
if (control instanceof UntypedFormGroup) {
|
|
4184
|
-
copyEntity2Form({}, control);
|
|
4175
|
+
copyEntity2Form({}, control, opts);
|
|
4185
4176
|
}
|
|
4186
4177
|
else if (control instanceof UntypedFormArray) {
|
|
4187
|
-
control.setValue([]);
|
|
4178
|
+
control.setValue([], opts);
|
|
4188
4179
|
}
|
|
4189
4180
|
else {
|
|
4190
|
-
control.setValue(null);
|
|
4181
|
+
control.setValue(null, opts);
|
|
4191
4182
|
}
|
|
4192
|
-
arrayControl.markAsDirty();
|
|
4183
|
+
arrayControl.markAsDirty(opts);
|
|
4193
4184
|
return true;
|
|
4194
4185
|
}
|
|
4195
4186
|
function markAllAsTouched(control, opts) {
|
|
@@ -5534,7 +5525,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
5534
5525
|
}] });
|
|
5535
5526
|
|
|
5536
5527
|
/**
|
|
5537
|
-
*
|
|
5528
|
+
* Removes all HTML tags from a given string.
|
|
5529
|
+
*
|
|
5530
|
+
* @param {string} value - The input string potentially containing HTML tags.
|
|
5531
|
+
* @return {string} A string with all HTML tags removed.
|
|
5532
|
+
*/
|
|
5533
|
+
function noHtml(value) {
|
|
5534
|
+
if (value && typeof value === 'string') {
|
|
5535
|
+
// Use regular expression to remove all HTML tags
|
|
5536
|
+
return value.replace(/<[^>]*>.*?<\/[^>]*>|<[^>]+>/g, '');
|
|
5537
|
+
}
|
|
5538
|
+
else {
|
|
5539
|
+
return value;
|
|
5540
|
+
}
|
|
5541
|
+
}
|
|
5542
|
+
/**
|
|
5543
|
+
* Truncates the given HTML string to the specified maximum length, ensuring that the truncation
|
|
5544
|
+
* does not break HTML structure and attempts to truncate at word or tag boundaries when possible.
|
|
5545
|
+
* Appends an ellipsis (" (...)") to indicate truncation if the content exceeds the maximum length.
|
|
5546
|
+
*
|
|
5547
|
+
* @param {string} html - The HTML string to be truncated.
|
|
5548
|
+
* @param {number} maxLength - The maximum length for the truncated string, including the ellipsis.
|
|
5549
|
+
* @return {string} The truncated HTML string, or the original HTML string if its length is within the maximum length.
|
|
5550
|
+
*/
|
|
5551
|
+
function truncateHtml(html, maxLength) {
|
|
5552
|
+
maxLength = maxLength ?? 0;
|
|
5553
|
+
if (!html || maxLength <= 0)
|
|
5554
|
+
return html;
|
|
5555
|
+
if (html?.length > maxLength) {
|
|
5556
|
+
const endIndex = Math.max(html.lastIndexOf(' ', maxLength), html.lastIndexOf('<', maxLength));
|
|
5557
|
+
return html.substring(0, endIndex) + ' (...)';
|
|
5558
|
+
}
|
|
5559
|
+
return html;
|
|
5560
|
+
}
|
|
5561
|
+
|
|
5562
|
+
/**
|
|
5563
|
+
* A custom Angular pipe that removes all HTML tags from a provided string.
|
|
5564
|
+
* This is useful for cases where HTML content needs to be sanitized or plain text is required.
|
|
5565
|
+
* Applies a function to strip HTML tags from the input value.
|
|
5566
|
+
*
|
|
5567
|
+
* It implements the `PipeTransform` interface provided by Angular to define its transformation logic.
|
|
5538
5568
|
*/
|
|
5539
5569
|
class NoHtmlPipe {
|
|
5540
5570
|
transform(value) {
|
|
@@ -5597,6 +5627,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
5597
5627
|
name: 'safeStyle',
|
|
5598
5628
|
}]
|
|
5599
5629
|
}], ctorParameters: () => [{ type: i1$2.DomSanitizer }] });
|
|
5630
|
+
/**
|
|
5631
|
+
* A custom Angular pipe that truncates an HTML string to a specified maximum length.
|
|
5632
|
+
* This pipe ensures that the HTML structure remains valid and properly closed,
|
|
5633
|
+
* even after truncation.
|
|
5634
|
+
*
|
|
5635
|
+
* It uses the `truncateHtml` function internally to handle the truncation logic.
|
|
5636
|
+
* This can be useful when there is a need to display a shortened version of an HTML
|
|
5637
|
+
* formatted string while preserving its structure.
|
|
5638
|
+
*
|
|
5639
|
+
* @pipe TruncateHtmlPipe
|
|
5640
|
+
* @member {string} name - The name to use for this pipe in Angular templates.
|
|
5641
|
+
* @method transform - Takes an HTML string input and truncates it to the specified length.
|
|
5642
|
+
* @param value - The HTML string to be truncated.
|
|
5643
|
+
* @param maxLength - The maximum length for the truncated string.
|
|
5644
|
+
* @returns The truncated HTML string with valid structure.
|
|
5645
|
+
*/
|
|
5646
|
+
class TruncateHtmlPipe {
|
|
5647
|
+
transform(value, maxLength) {
|
|
5648
|
+
return truncateHtml(value, maxLength);
|
|
5649
|
+
}
|
|
5650
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TruncateHtmlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
5651
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TruncateHtmlPipe, name: "truncateHtml" });
|
|
5652
|
+
}
|
|
5653
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TruncateHtmlPipe, decorators: [{
|
|
5654
|
+
type: Pipe,
|
|
5655
|
+
args: [{
|
|
5656
|
+
name: 'truncateHtml',
|
|
5657
|
+
}]
|
|
5658
|
+
}] });
|
|
5600
5659
|
|
|
5601
5660
|
class DisplayWithPipe {
|
|
5602
5661
|
transform(value, displayFn) {
|
|
@@ -5997,6 +6056,7 @@ const components$1 = [
|
|
|
5997
6056
|
SafeHtmlPipe,
|
|
5998
6057
|
SafeStylePipe,
|
|
5999
6058
|
NoHtmlPipe,
|
|
6059
|
+
TruncateHtmlPipe,
|
|
6000
6060
|
DisplayWithPipe,
|
|
6001
6061
|
FirstTruePipe,
|
|
6002
6062
|
FirstFalsePipe,
|
|
@@ -6082,6 +6142,7 @@ class SharedPipesModule {
|
|
|
6082
6142
|
SafeHtmlPipe,
|
|
6083
6143
|
SafeStylePipe,
|
|
6084
6144
|
NoHtmlPipe,
|
|
6145
|
+
TruncateHtmlPipe,
|
|
6085
6146
|
DisplayWithPipe,
|
|
6086
6147
|
FirstTruePipe,
|
|
6087
6148
|
FirstFalsePipe,
|
|
@@ -6163,6 +6224,7 @@ class SharedPipesModule {
|
|
|
6163
6224
|
SafeHtmlPipe,
|
|
6164
6225
|
SafeStylePipe,
|
|
6165
6226
|
NoHtmlPipe,
|
|
6227
|
+
TruncateHtmlPipe,
|
|
6166
6228
|
DisplayWithPipe,
|
|
6167
6229
|
FirstTruePipe,
|
|
6168
6230
|
FirstFalsePipe,
|
|
@@ -28272,6 +28334,65 @@ class JobUtils {
|
|
|
28272
28334
|
}
|
|
28273
28335
|
}
|
|
28274
28336
|
|
|
28337
|
+
// Converts an ArrayBuffer directly to base64, without any intermediate 'convert to string then
|
|
28338
|
+
// use window.btoa' step. According to my tests, this appears to be a faster approach:
|
|
28339
|
+
// http://jsperf.com/encoding-xhr-image-data/5
|
|
28340
|
+
/*
|
|
28341
|
+
MIT LICENSE
|
|
28342
|
+
Copyright 2011 Jon Leighton
|
|
28343
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
28344
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
28345
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
28346
|
+
*/
|
|
28347
|
+
/**
|
|
28348
|
+
* Converts an ArrayBuffer into a Base64 encoded string.
|
|
28349
|
+
*
|
|
28350
|
+
* @param {ArrayBuffer} arrayBuffer - The buffer to be converted into a Base64 string.
|
|
28351
|
+
* @return {string} The Base64 encoded string representation of the provided ArrayBuffer.
|
|
28352
|
+
*/
|
|
28353
|
+
function base64ArrayBuffer(arrayBuffer) {
|
|
28354
|
+
let base64 = '';
|
|
28355
|
+
const encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
28356
|
+
const bytes = new Uint8Array(arrayBuffer);
|
|
28357
|
+
const byteLength = bytes.byteLength;
|
|
28358
|
+
const byteRemainder = byteLength % 3;
|
|
28359
|
+
const mainLength = byteLength - byteRemainder;
|
|
28360
|
+
let a;
|
|
28361
|
+
let b;
|
|
28362
|
+
let c;
|
|
28363
|
+
let d;
|
|
28364
|
+
let chunk;
|
|
28365
|
+
// Main loop deals with bytes in chunks of 3
|
|
28366
|
+
for (let i = 0; i < mainLength; i += 3) {
|
|
28367
|
+
// Combine the three bytes into a single integer
|
|
28368
|
+
chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];
|
|
28369
|
+
// Use bitmasks to extract 6-bit segments from the triplet
|
|
28370
|
+
a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18
|
|
28371
|
+
b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12
|
|
28372
|
+
c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6
|
|
28373
|
+
d = chunk & 63; // 63 = 2^6 - 1
|
|
28374
|
+
// Convert the raw binary segments to the appropriate ASCII encoding
|
|
28375
|
+
base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];
|
|
28376
|
+
}
|
|
28377
|
+
// Deal with the remaining bytes and padding
|
|
28378
|
+
if (byteRemainder === 1) {
|
|
28379
|
+
chunk = bytes[mainLength];
|
|
28380
|
+
a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2
|
|
28381
|
+
// Set the 4 least significant bits to zero
|
|
28382
|
+
b = (chunk & 3) << 4; // 3 = 2^2 - 1
|
|
28383
|
+
base64 += `${encodings[a]}${encodings[b]}==`;
|
|
28384
|
+
}
|
|
28385
|
+
else if (byteRemainder === 2) {
|
|
28386
|
+
chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];
|
|
28387
|
+
a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10
|
|
28388
|
+
b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4
|
|
28389
|
+
// Set the 2 least significant bits to zero
|
|
28390
|
+
c = (chunk & 15) << 2; // 15 = 2^4 - 1
|
|
28391
|
+
base64 += `${encodings[a]}${encodings[b]}${encodings[c]}=`;
|
|
28392
|
+
}
|
|
28393
|
+
return base64;
|
|
28394
|
+
}
|
|
28395
|
+
|
|
28275
28396
|
class IPosition {
|
|
28276
28397
|
latitude;
|
|
28277
28398
|
longitude;
|
|
@@ -33570,23 +33691,14 @@ class JsonFeedUtils {
|
|
|
33570
33691
|
feed.items.forEach((item) => {
|
|
33571
33692
|
// Truncate items html
|
|
33572
33693
|
if (item.content_html) {
|
|
33573
|
-
const html =
|
|
33694
|
+
const html = truncateHtml(item.content_html, opts?.maxContentLength);
|
|
33574
33695
|
item.truncated = html.length !== item.content_html.length;
|
|
33575
33696
|
item.content_html = html;
|
|
33576
33697
|
}
|
|
33577
33698
|
});
|
|
33578
33699
|
return feed;
|
|
33579
33700
|
}
|
|
33580
|
-
static truncateHtml
|
|
33581
|
-
if (!html)
|
|
33582
|
-
return html;
|
|
33583
|
-
const maxContentLength = opts?.maxContentLength ?? 0;
|
|
33584
|
-
if (maxContentLength > 0 && html?.length > maxContentLength) {
|
|
33585
|
-
const endIndex = Math.max(html.lastIndexOf(' ', maxContentLength), html.lastIndexOf('<', maxContentLength));
|
|
33586
|
-
return html.substring(0, endIndex) + ' (...)';
|
|
33587
|
-
}
|
|
33588
|
-
return html;
|
|
33589
|
-
}
|
|
33701
|
+
static truncateHtml = truncateHtml;
|
|
33590
33702
|
/**
|
|
33591
33703
|
* Migrate from old version 1.0 to 1.1
|
|
33592
33704
|
* @param feed
|
|
@@ -34009,11 +34121,11 @@ class FeedsComponent {
|
|
|
34009
34121
|
return [];
|
|
34010
34122
|
}
|
|
34011
34123
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeedsComponent, deps: [{ token: ENVIRONMENT }, { token: APP_FEED_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
34012
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FeedsComponent, selector: "app-feed", inputs: { debug: "debug", showHeader: "showHeader", headerColor: "headerColor", cardColor: "cardColor", shape: "shape", class: "class", feeds: "feeds", feedUrls: "feedUrls", maxAgeInMonths: "maxAgeInMonths", maxContentLength: "maxContentLength" }, host: { properties: { "class": "this.hostClass" } }, providers: [RxState], ngImport: i0, template: "@let feeds = feeds$ | async;\n\n@if (debug) {\n <app-debug [title]=\"'Feed'\">\n <p>\n hasFeeds?: {{ hasFeeds$ | async }}\n <br />\n feedUrls: {{ feedUrls$ | async | json }}\n <br />\n shape: {{ shape }}\n </p>\n </app-debug>\n}\n\n@if (feeds | isNotEmptyArray) {\n <!-- top header -->\n @if (showHeader && (feeds | arrayFirst); as feed) {\n <ion-item lines=\"none\" [color]=\"headerColor\" class=\"feed-header shape-{{ shape }}\">\n <ion-icon slot=\"start\" name=\"megaphone\"></ion-icon>\n <ion-label>\n <b>{{ feed.title || ('SOCIAL.FEED.NEWS' | translate) }}</b>\n </ion-label>\n <ion-button slot=\"end\" fill=\"clear\" (click)=\"openFeedHome()\" shape=\"\">\n <ion-label translate>SOCIAL.FEED.SHOW_ALL_FEED</ion-label>\n <ion-icon slot=\"end\" name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-item>\n }\n\n <div class=\"feed-content shape-{{ shape }} ion-no-padding\" [class.has-header]=\"showHeader\">\n <!-- feeds -->\n @for (feed of feeds; track feed.feed_url; let firstFeed = $first; let lastFeed = $last) {\n <!-- items -->\n @for (item of feed.items; track item.id; let firstItem = $first; let lastItem = $last) {\n <ion-card\n [class.first]=\"firstFeed && firstItem\"\n [class.last]=\"lastFeed && lastItem\"\n [color]=\"cardColor !== 'light-transparent' ? cardColor : undefined\"\n >\n <ion-card-header>\n <ion-card-subtitle style=\"vertical-align: middle\">\n <!-- Authors -->\n @for (author of item.authors || feed.authors; track author) {\n @if (author.name || author.avatar) {\n <ion-chip (click)=\"openUrl(author.url)\" tappable>\n @if (author.avatar) {\n <ion-avatar>\n <ion-img [src]=\"author.avatar\" [alt]=\"author.name\"></ion-img>\n </ion-avatar>\n }\n @if (author.name) {\n <ion-label class=\"author\">{{ author.name }}</ion-label>\n }\n </ion-chip>\n }\n }\n <ion-note class=\"ion-float-end\">\n <small>{{ item.date_published | dateFromNow }}</small>\n </ion-note>\n </ion-card-subtitle>\n\n <!-- title -->\n <ion-card-title (click)=\"openUrl(item.url || feed.feed_url)\" tappable>{{ item?.title }}</ion-card-title>\n\n <!-- tags -->\n @let tags = item | map: getTags;\n @if (tags | isNotEmptyArray) {\n <ion-text class=\"tags\">\n @for (tag of tags; track tag; let last = $last) {\n <a (click)=\"openTag(feed, tag)\" tappable>\n <ion-text>#{{ tag }}</ion-text>\n </a>\n @if (!last) {\n \n }\n }\n </ion-text>\n }\n </ion-card-header>\n\n <!-- Feed content -->\n <ion-card-content>\n <ion-text [feed]=\"item.url || feed.feed_url\">\n @if (item.content_html) {\n <p [innerHTML]=\"item.content_html\"></p>\n } @else if (item.content_text) {\n <p [innerText]=\"item.content_text\"></p>\n }\n </ion-text>\n </ion-card-content>\n\n <ion-button (click)=\"openUrl(item.url)\" class=\"ion-float-end\" fill=\"clear\">\n <ion-label>{{ (item.truncated ? 'SOCIAL.FEED.READ_MORE' : 'COMMON.BTN_SHOW') | translate }}</ion-label>\n <ion-icon slot=\"end\" name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-card>\n }\n }\n </div>\n}\n", styles: [":host{display:block;height:calc(100% - 10px);max-height:fit-content;overflow:hidden;--feed-header-height: 48px;-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 1px 5px rgba(0,0,0,.12);-webkit-margin-start:10px;margin-inline-start:10px;-webkit-margin-end:10px;margin-inline-end:10px;margin-top:0;margin-bottom:10px;--feed-border-radius: 4px;border-radius:var(--feed-border-radius);--ion-card-background: rgba(var(--ion-background-color-rgb), .6)}:host.shape-round{--feed-border-radius: 12px}ion-button{text-transform:unset;--color: rgba(var(--ion-color-contrast-rgb), .7)}ion-item.feed-header{height:var(--feed-header-height);margin:0;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border-radius:var(--feed-border-radius) var(--feed-border-radius) 0 0}ion-item.feed-header ion-icon[slot=start]{-webkit-margin-end:8px;margin-inline-end:8px}.feed-content{height:auto;overflow-y:auto;--margin-bottom: 8px}.feed-content.has-header{height:calc(100% - var(--feed-header-height, 0))}.feed-content ion-card{--top-radius: 4px;--bottom-radius: 4px;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);margin:0 0 var(--margin-bottom) 0;border-radius:var(--top-radius) var(--top-radius) var(--bottom-radius) var(--bottom-radius);--ion-card-color-contrast-rgb: var(--ion-color-contrast-rgb, var(--ion-color-dark-rgb, 0, 0, 0));--color: rgba(var(--ion-card-color-contrast-rgb), .87)}.feed-content ion-card.first{--top-radius: 0}.feed-content ion-card.last{--margin-bottom: 0;--bottom-radius: 0}.feed-content ion-card ion-card-header ion-card-title{--color: rgba(var(--ion-card-color-contrast-rgb), .87)}.feed-content ion-card ion-card-header ion-card-subtitle ion-chip{--background: transparent;--border-color: transparent;--border-width: 0}.feed-content ion-card ion-card-header ion-card-subtitle ion-chip ion-avatar{--color: rgba(var(--ion-card-color-contrast-rgb), .6);border:1px solid var(--color)}.feed-content ion-card ion-card-header ion-card-subtitle ion-chip ion-label{--color: rgba(var(--ion-card-color-contrast-rgb), .8);color:var(--color)}.feed-content ion-card ion-card-header ion-card-subtitle ion-note{--color: rgba(var(--ion-card-color-contrast-rgb), .6);color:var(--color)}.feed-content ion-card ion-card-header .tags{display:inline}.feed-content ion-card ion-card-header .tags a{color:rgba(var(--ion-card-color-contrast-rgb),.6)!important}.feed-content ion-card ion-card-content ion-text ::ng-deep img{max-width:100%;height:auto!important}\n"], dependencies: [{ kind: "component", type: i2$1.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i2$1.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$1.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2$1.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2$1.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2$1.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i2$1.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2$1.IonChip, selector: "ion-chip", inputs: ["color", "disabled", "mode", "outline"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i2$1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2$1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2$1.IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: i2$1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DebugComponent, selector: "app-debug", inputs: ["titlePrefix", "title", "enable", "expanded"] }, { kind: "directive", type: FeedDirective, selector: "feed,[feed]", inputs: ["feed"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.JsonPipe, name: "json" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: DateFromNowPipe, name: "dateFromNow" }, { kind: "pipe", type: NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: ArrayFirstPipe, name: "arrayFirst" }, { kind: "pipe", type: MapPipe, name: "map" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
34124
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FeedsComponent, selector: "app-feed", inputs: { debug: "debug", showHeader: "showHeader", headerColor: "headerColor", cardColor: "cardColor", shape: "shape", class: "class", feeds: "feeds", feedUrls: "feedUrls", maxAgeInMonths: "maxAgeInMonths", maxContentLength: "maxContentLength" }, host: { properties: { "class": "this.hostClass" } }, providers: [RxState], ngImport: i0, template: "<!-- debug -->\n@if (debug) {\n <app-debug [title]=\"'Feed'\">\n <p>\n hasFeeds?: {{ hasFeeds$ | async }}\n <br />\n feedUrls: {{ feedUrls$ | async | json }}\n <br />\n shape: {{ shape }}\n </p>\n </app-debug>\n}\n\n@let feeds = feeds$ | async;\n@if (feeds | isNotEmptyArray) {\n <!-- top header -->\n @if (showHeader && (feeds | arrayFirst); as feed) {\n <ion-item lines=\"none\" [color]=\"headerColor\" class=\"feed-header shape-{{ shape }}\">\n <ion-icon slot=\"start\" name=\"megaphone\"></ion-icon>\n <ion-label>\n <b>{{ feed.title || ('SOCIAL.FEED.NEWS' | translate) }}</b>\n </ion-label>\n <ion-button slot=\"end\" fill=\"clear\" (click)=\"openFeedHome()\" shape=\"\">\n <ion-label translate>SOCIAL.FEED.SHOW_ALL_FEED</ion-label>\n <ion-icon slot=\"end\" name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-item>\n }\n\n <div class=\"feed-content shape-{{ shape }} ion-no-padding\" [class.has-header]=\"showHeader\">\n <!-- feeds -->\n @for (feed of feeds; track feed.feed_url; let firstFeed = $first; let lastFeed = $last) {\n <!-- items -->\n @for (item of feed.items; track item.id; let firstItem = $first; let lastItem = $last) {\n <ion-card\n [class.first]=\"firstFeed && firstItem\"\n [class.last]=\"lastFeed && lastItem\"\n [color]=\"cardColor !== 'light-transparent' ? cardColor : undefined\"\n >\n <ion-card-header>\n <ion-card-subtitle style=\"vertical-align: middle\">\n <!-- Authors -->\n @for (author of item.authors || feed.authors; track author) {\n @if (author.name || author.avatar) {\n <ion-chip (click)=\"openUrl(author.url)\" tappable>\n @if (author.avatar) {\n <ion-avatar>\n <ion-img [src]=\"author.avatar\" [alt]=\"author.name\"></ion-img>\n </ion-avatar>\n }\n @if (author.name) {\n <ion-label class=\"author\">{{ author.name }}</ion-label>\n }\n </ion-chip>\n }\n }\n <ion-note class=\"ion-float-end\">\n <small>{{ item.date_published | dateFromNow }}</small>\n </ion-note>\n </ion-card-subtitle>\n\n <!-- title -->\n <ion-card-title (click)=\"openUrl(item.url || feed.feed_url)\" tappable>{{ item?.title }}</ion-card-title>\n\n <!-- tags -->\n @let tags = item | map: getTags;\n @if (tags | isNotEmptyArray) {\n <ion-text class=\"tags\">\n @for (tag of tags; track tag; let last = $last) {\n <a (click)=\"openTag(feed, tag)\" tappable>\n <ion-text>#{{ tag }}</ion-text>\n </a>\n @if (!last) {\n \n }\n }\n </ion-text>\n }\n </ion-card-header>\n\n <!-- Feed content -->\n <ion-card-content>\n <ion-text [feed]=\"item.url || feed.feed_url\">\n @if (item.content_html) {\n <p [innerHTML]=\"item.content_html\"></p>\n } @else if (item.content_text) {\n <p>\n <markdown [data]=\"item.content_text\" emoji></markdown>\n </p>\n }\n </ion-text>\n </ion-card-content>\n\n <ion-button (click)=\"openUrl(item.url)\" class=\"ion-float-end\" fill=\"clear\">\n <ion-label>{{ (item.truncated ? 'SOCIAL.FEED.READ_MORE' : 'COMMON.BTN_SHOW') | translate }}</ion-label>\n <ion-icon slot=\"end\" name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-card>\n }\n }\n </div>\n}\n", styles: [":host{display:block;height:calc(100% - 10px);max-height:fit-content;overflow:hidden;--feed-header-height: 48px;-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 1px 5px rgba(0,0,0,.12);-webkit-margin-start:10px;margin-inline-start:10px;-webkit-margin-end:10px;margin-inline-end:10px;margin-top:0;margin-bottom:10px;--feed-border-radius: 4px;border-radius:var(--feed-border-radius);--ion-card-background: rgba(var(--ion-background-color-rgb), .6)}:host.shape-round{--feed-border-radius: 12px}ion-button{text-transform:unset;--color: rgba(var(--ion-color-contrast-rgb), .7)}ion-item.feed-header{height:var(--feed-header-height);margin:0;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border-radius:var(--feed-border-radius) var(--feed-border-radius) 0 0}ion-item.feed-header ion-icon[slot=start]{-webkit-margin-end:8px;margin-inline-end:8px}.feed-content{height:auto;overflow-y:auto;--margin-bottom: 8px}.feed-content.has-header{height:calc(100% - var(--feed-header-height, 0))}.feed-content ion-card{--top-radius: 4px;--bottom-radius: 4px;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);margin:0 0 var(--margin-bottom) 0;border-radius:var(--top-radius) var(--top-radius) var(--bottom-radius) var(--bottom-radius);--ion-card-color-contrast-rgb: var(--ion-color-contrast-rgb, var(--ion-color-dark-rgb, 0, 0, 0));--color: rgba(var(--ion-card-color-contrast-rgb), .87)}.feed-content ion-card.first{--top-radius: 0}.feed-content ion-card.last{--margin-bottom: 0;--bottom-radius: 0}.feed-content ion-card ion-card-header ion-card-title{--color: rgba(var(--ion-card-color-contrast-rgb), .87)}.feed-content ion-card ion-card-header ion-card-subtitle ion-chip{--background: transparent;--border-color: transparent;--border-width: 0}.feed-content ion-card ion-card-header ion-card-subtitle ion-chip ion-avatar{--color: rgba(var(--ion-card-color-contrast-rgb), .6);border:1px solid var(--color)}.feed-content ion-card ion-card-header ion-card-subtitle ion-chip ion-label{--color: rgba(var(--ion-card-color-contrast-rgb), .8);color:var(--color)}.feed-content ion-card ion-card-header ion-card-subtitle ion-note{--color: rgba(var(--ion-card-color-contrast-rgb), .6);color:var(--color)}.feed-content ion-card ion-card-header .tags{display:inline}.feed-content ion-card ion-card-header .tags a{color:rgba(var(--ion-card-color-contrast-rgb),.6)!important}.feed-content ion-card ion-card-content ion-text ::ng-deep img{max-width:100%;height:auto!important}\n"], dependencies: [{ kind: "component", type: i2$1.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i2$1.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$1.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2$1.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2$1.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2$1.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i2$1.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2$1.IonChip, selector: "ion-chip", inputs: ["color", "disabled", "mode", "outline"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i2$1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2$1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2$1.IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: i2$1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i4$2.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: DebugComponent, selector: "app-debug", inputs: ["titlePrefix", "title", "enable", "expanded"] }, { kind: "directive", type: MarkdownDirective, selector: "markdown,[markdown]" }, { kind: "directive", type: FeedDirective, selector: "feed,[feed]", inputs: ["feed"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.JsonPipe, name: "json" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: DateFromNowPipe, name: "dateFromNow" }, { kind: "pipe", type: NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: ArrayFirstPipe, name: "arrayFirst" }, { kind: "pipe", type: MapPipe, name: "map" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
34013
34125
|
}
|
|
34014
34126
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeedsComponent, decorators: [{
|
|
34015
34127
|
type: Component,
|
|
34016
|
-
args: [{ selector: 'app-feed', providers: [RxState], changeDetection: ChangeDetectionStrategy.OnPush, template: "
|
|
34128
|
+
args: [{ selector: 'app-feed', providers: [RxState], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- debug -->\n@if (debug) {\n <app-debug [title]=\"'Feed'\">\n <p>\n hasFeeds?: {{ hasFeeds$ | async }}\n <br />\n feedUrls: {{ feedUrls$ | async | json }}\n <br />\n shape: {{ shape }}\n </p>\n </app-debug>\n}\n\n@let feeds = feeds$ | async;\n@if (feeds | isNotEmptyArray) {\n <!-- top header -->\n @if (showHeader && (feeds | arrayFirst); as feed) {\n <ion-item lines=\"none\" [color]=\"headerColor\" class=\"feed-header shape-{{ shape }}\">\n <ion-icon slot=\"start\" name=\"megaphone\"></ion-icon>\n <ion-label>\n <b>{{ feed.title || ('SOCIAL.FEED.NEWS' | translate) }}</b>\n </ion-label>\n <ion-button slot=\"end\" fill=\"clear\" (click)=\"openFeedHome()\" shape=\"\">\n <ion-label translate>SOCIAL.FEED.SHOW_ALL_FEED</ion-label>\n <ion-icon slot=\"end\" name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-item>\n }\n\n <div class=\"feed-content shape-{{ shape }} ion-no-padding\" [class.has-header]=\"showHeader\">\n <!-- feeds -->\n @for (feed of feeds; track feed.feed_url; let firstFeed = $first; let lastFeed = $last) {\n <!-- items -->\n @for (item of feed.items; track item.id; let firstItem = $first; let lastItem = $last) {\n <ion-card\n [class.first]=\"firstFeed && firstItem\"\n [class.last]=\"lastFeed && lastItem\"\n [color]=\"cardColor !== 'light-transparent' ? cardColor : undefined\"\n >\n <ion-card-header>\n <ion-card-subtitle style=\"vertical-align: middle\">\n <!-- Authors -->\n @for (author of item.authors || feed.authors; track author) {\n @if (author.name || author.avatar) {\n <ion-chip (click)=\"openUrl(author.url)\" tappable>\n @if (author.avatar) {\n <ion-avatar>\n <ion-img [src]=\"author.avatar\" [alt]=\"author.name\"></ion-img>\n </ion-avatar>\n }\n @if (author.name) {\n <ion-label class=\"author\">{{ author.name }}</ion-label>\n }\n </ion-chip>\n }\n }\n <ion-note class=\"ion-float-end\">\n <small>{{ item.date_published | dateFromNow }}</small>\n </ion-note>\n </ion-card-subtitle>\n\n <!-- title -->\n <ion-card-title (click)=\"openUrl(item.url || feed.feed_url)\" tappable>{{ item?.title }}</ion-card-title>\n\n <!-- tags -->\n @let tags = item | map: getTags;\n @if (tags | isNotEmptyArray) {\n <ion-text class=\"tags\">\n @for (tag of tags; track tag; let last = $last) {\n <a (click)=\"openTag(feed, tag)\" tappable>\n <ion-text>#{{ tag }}</ion-text>\n </a>\n @if (!last) {\n \n }\n }\n </ion-text>\n }\n </ion-card-header>\n\n <!-- Feed content -->\n <ion-card-content>\n <ion-text [feed]=\"item.url || feed.feed_url\">\n @if (item.content_html) {\n <p [innerHTML]=\"item.content_html\"></p>\n } @else if (item.content_text) {\n <p>\n <markdown [data]=\"item.content_text\" emoji></markdown>\n </p>\n }\n </ion-text>\n </ion-card-content>\n\n <ion-button (click)=\"openUrl(item.url)\" class=\"ion-float-end\" fill=\"clear\">\n <ion-label>{{ (item.truncated ? 'SOCIAL.FEED.READ_MORE' : 'COMMON.BTN_SHOW') | translate }}</ion-label>\n <ion-icon slot=\"end\" name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-card>\n }\n }\n </div>\n}\n", styles: [":host{display:block;height:calc(100% - 10px);max-height:fit-content;overflow:hidden;--feed-header-height: 48px;-webkit-box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 1px 5px rgba(0,0,0,.12);-webkit-margin-start:10px;margin-inline-start:10px;-webkit-margin-end:10px;margin-inline-end:10px;margin-top:0;margin-bottom:10px;--feed-border-radius: 4px;border-radius:var(--feed-border-radius);--ion-card-background: rgba(var(--ion-background-color-rgb), .6)}:host.shape-round{--feed-border-radius: 12px}ion-button{text-transform:unset;--color: rgba(var(--ion-color-contrast-rgb), .7)}ion-item.feed-header{height:var(--feed-header-height);margin:0;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border-radius:var(--feed-border-radius) var(--feed-border-radius) 0 0}ion-item.feed-header ion-icon[slot=start]{-webkit-margin-end:8px;margin-inline-end:8px}.feed-content{height:auto;overflow-y:auto;--margin-bottom: 8px}.feed-content.has-header{height:calc(100% - var(--feed-header-height, 0))}.feed-content ion-card{--top-radius: 4px;--bottom-radius: 4px;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);margin:0 0 var(--margin-bottom) 0;border-radius:var(--top-radius) var(--top-radius) var(--bottom-radius) var(--bottom-radius);--ion-card-color-contrast-rgb: var(--ion-color-contrast-rgb, var(--ion-color-dark-rgb, 0, 0, 0));--color: rgba(var(--ion-card-color-contrast-rgb), .87)}.feed-content ion-card.first{--top-radius: 0}.feed-content ion-card.last{--margin-bottom: 0;--bottom-radius: 0}.feed-content ion-card ion-card-header ion-card-title{--color: rgba(var(--ion-card-color-contrast-rgb), .87)}.feed-content ion-card ion-card-header ion-card-subtitle ion-chip{--background: transparent;--border-color: transparent;--border-width: 0}.feed-content ion-card ion-card-header ion-card-subtitle ion-chip ion-avatar{--color: rgba(var(--ion-card-color-contrast-rgb), .6);border:1px solid var(--color)}.feed-content ion-card ion-card-header ion-card-subtitle ion-chip ion-label{--color: rgba(var(--ion-card-color-contrast-rgb), .8);color:var(--color)}.feed-content ion-card ion-card-header ion-card-subtitle ion-note{--color: rgba(var(--ion-card-color-contrast-rgb), .6);color:var(--color)}.feed-content ion-card ion-card-header .tags{display:inline}.feed-content ion-card ion-card-header .tags a{color:rgba(var(--ion-card-color-contrast-rgb),.6)!important}.feed-content ion-card ion-card-content ion-text ::ng-deep img{max-width:100%;height:auto!important}\n"] }]
|
|
34017
34129
|
}], ctorParameters: () => [{ type: Environment, decorators: [{
|
|
34018
34130
|
type: Inject,
|
|
34019
34131
|
args: [ENVIRONMENT]
|
|
@@ -34613,13 +34725,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
34613
34725
|
|
|
34614
34726
|
class FeedModule {
|
|
34615
34727
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
34616
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: FeedModule, declarations: [FeedsComponent, FeedDirective], imports: [SharedModule, i1$1.TranslateModule, SharedDebugModule], exports: [TranslateModule, FeedsComponent, FeedDirective] });
|
|
34617
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeedModule, imports: [SharedModule, TranslateModule.forChild(), SharedDebugModule, TranslateModule] });
|
|
34728
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: FeedModule, declarations: [FeedsComponent, FeedDirective], imports: [SharedModule, i1$1.TranslateModule, SharedDebugModule, SharedMarkdownModule], exports: [TranslateModule, FeedsComponent, FeedDirective] });
|
|
34729
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeedModule, imports: [SharedModule, TranslateModule.forChild(), SharedDebugModule, SharedMarkdownModule, TranslateModule] });
|
|
34618
34730
|
}
|
|
34619
34731
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeedModule, decorators: [{
|
|
34620
34732
|
type: NgModule,
|
|
34621
34733
|
args: [{
|
|
34622
|
-
imports: [SharedModule, TranslateModule.forChild(), SharedDebugModule],
|
|
34734
|
+
imports: [SharedModule, TranslateModule.forChild(), SharedDebugModule, SharedMarkdownModule],
|
|
34623
34735
|
declarations: [FeedsComponent, FeedDirective],
|
|
34624
34736
|
exports: [TranslateModule, FeedsComponent, FeedDirective],
|
|
34625
34737
|
}]
|
|
@@ -49985,5 +50097,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
49985
50097
|
* Generated bundle index. Do not edit.
|
|
49986
50098
|
*/
|
|
49987
50099
|
|
|
49988
|
-
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_DEBUG_DATA_SERVICE, APP_FEED_SERVICE, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_FRAGMENTS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_HOME_CONFIG, APP_HOTKEYS_CONFIG, APP_JOB_PROGRESSION_SERVICE, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_LOGGING_SERVICE, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_NAMED_FILTER_SERVICE, APP_PROGRESS_BAR_SERVICE, APP_SETTINGS_MENU_ITEMS, APP_STORAGE, APP_STORAGE_EXPLORER_PROTECTED_KEYS, APP_TESTING_PAGES, APP_USER_EVENT_LIST_INFINITE_SCROLL_THRESHOLD, APP_USER_EVENT_SERVICE, APP_USER_SETTINGS_OPTIONS, APP_USER_TOKEN_SCOPES, AboutModal, AbstractNamedFilterService, AbstractSelectionModelPipe, AbstractTableSelectionPipe, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, AccountUtils, ActionsColumnComponent, AdminModule, AdminRoutingModule, AdminUsersModule, Alerts, AndroidOsEnvironment, AppAboutModalModule, AppAccountModule, AppAsyncTable, AppAuthForm, AppAuthModal, AppAuthModule, AppChangePasswordModule, AppChangePasswordPage, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppEntityFormModule, AppForm, AppFormArray, AppFormButtonsBarModule, AppFormContainer, AppFormField, AppFormModule, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHomePageModule, AppIconComponent, AppIconModule, AppImageGalleryComponent, AppInMemoryTable, AppInstallUpgradeCard, AppInstallUpgradeCardModule, AppListForm, AppListFormModule, AppLoadingSpinner, AppMarkdownContent, AppMarkdownModal, AppMenuModule, AppNullForm, AppPropertiesForm, AppPropertiesFormModule, AppPropertiesTable, AppPropertiesUtils, AppPropertyUtils, AppRegisterModule, AppResetPasswordModal, AppRowField, AppSelectPeerModule, AppSettingsPageModule, AppTabEditor, AppTabEditorOptions, AppTable, AppTableModule, AppTableUtils, AppTextPopoverModule, AppUpdateOfflineModeCard, AppUpdateOfflineModeCardModule, AppValidatorService, AppendQueryParamsPipePipe, ArrayDistinctPipe, ArrayFilterPipe, ArrayFindByPropertyPipe, ArrayFirstPipe, ArrayFormTestPage, ArrayIncludesPipe, ArrayJoinPipe, ArrayLastPipe, ArrayLengthPipe, ArrayMapPipe, ArrayPluckPipe, ArraySortPipe, AsAnyPipe, AsArrayPipe, AsBooleanPipe, AsFloatLabelTypePipe, AsObservablePipe, AudioProvider, AudioTestingModule, AudioTestingPage, AuthGuardService, AutoResizeDirective, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, BadgeDirective, BadgeNumberPipe, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, BooleanFormatPipe, BooleanTestPage, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CapitalizePipe, CellValueChangeListener, ChangePasswordForm, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigFragments, ConfigService, Configuration, CoreModule, CorePipesModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_MATCH_REGEXP, DATE_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_JOIN_ARRAY_VALUES_SEPARATOR, DEFAULT_JOIN_PROPERTIES_SEPARATOR, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFormatService, DateFromNowPipe, DateShortTestPage, DateTestPage, DateTimeTestPage, DateUtils, DebugComponent, Department, DepartmentToStringPipe, DisplayWithPipe, DragAndDropDirective, DurationPipe, DurationTestPage, ED25519_SEED_LENGTH, EMPTY_PLACEHOLDER_CHAR, EMPTY_PLACEHOLDER_CHAR_REGEXP_GLOBAL, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesAsyncTableDataSource, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, EnvironmentHttpLoader, EnvironmentLoader, ErrorCodes, EvenPipe, FeedDirective, FeedModule, FeedService, FeedsComponent, FileResponse, FileService, FileSizePipe, FilesUtils, FirstFalsePipe, FirstPipe, FirstTruePipe, FormArrayHelper, FormArrayTestModule, FormButtonsBarComponent, FormButtonsBarToken, FormErrorPipe, FormErrorTranslatePipe, FormErrorTranslator, FormFieldDefinitionUtils, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, GalleryTestPage, GeolocationUtils, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, IMAGE_DEFAULTS, IPosition, ImageAttachment, ImageAttachmentFilter, ImageAttachmentService, ImageGalleryModule, ImageGalleryTestingModule, ImageModule, ImageService, ImagesUtils, InMemoryEntitiesService, IsAllSelectedPipe, IsEmptySelectionPipe, IsLoginAccountPipe, IsMultipleSelectionPipe, IsNilOrBlankPipe, IsNilOrNaNPipe, IsNilPipe, IsNotAllSelectedPipe, IsNotEmptySelectionPipe, IsNotNilOrBlankPipe, IsNotNilOrNaNPipe, IsNotNilPipe, IsOnDeskPipe, IsOnFieldPipe, IsSelectedPipe, IsSingleSelectionPipe, IsValidDatePipe, JobModule, JobProgression, JobProgressionComponent, JobProgressionIcon, JobProgressionList, JobProgressionService, JobProgressionTestService, JobProgressionTestingPage, JobTestingModule, JobUtils, JsonFeedUtils, JsonUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_PATTERNS, LAT_LONG_PATTERN_MAX_DECIMALS, LAT_LONG_VALUE_MAX_DECIMALS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LogLevel, LogUtils, Logger, LoggingService, LoggingServiceModule, LongitudeFormatPipe, MASKS, MASK_RANGES, MAT_FORM_FIELD_DEFAULT_APPEARANCE, MAT_FORM_FIELD_DEFAULT_SUBSCRIPT_SIZING, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MOMENT_NO_TIME_PROPERTY, MapGetPipe, MapKeysPipe, MapPipe, MapToPipe, MapValuesPipe, MarkdownDirective, MarkdownService, MarkdownTestPage, MarkdownTestingModule, MarkdownUtils, MaskitoPlaceholderPipe, MaskitoTestPage, MatAutocompleteConfigHolder, MatAutocompleteField, MatAutocompleteFieldUtils, MatBadgeTestPage, MatBooleanField, MatChipsField, MatColorPipe, MatCommonTestPage, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatLatLongFieldInput, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItem, MenuItems, MenuOptions, MenuService, MenuTestingModule, MenuTestingPage, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NETWORK_DEFAULT_CONNECTION_TIMEOUT, NamedFilter, NamedFilterFilter, NamedFilterSelector, NamedFilterSelectorTestingModule, NamedFilterSelectorTestingPage, NavActionsColumnComponent, NetworkService, NetworkUtils, NewTokenForm, NewTokenModal, NgInitDirective, NgVarDirective, NoHtmlPipe, NotEmptyArrayPipe, NumberFormatPipe, ObservableTestPage, OddPipe, OtherMenuTestingPage, PEER_URL_REGEXP, PLUS_PLACEHOLDER_CHAR_REGEXP_GLOBAL, PRINT_ID_QUERY_PARAM, PRINT_LOADING_STORAGE_KEY_PREFIX, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, PrintService, ProgressBarService, ProgressInterceptor, PropertiesFormTestPage, PropertiesFormTestingModule, PropertyEntity, PropertyEntityFilter, PropertyEntityValidator, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialToStringPipe, ReferentialUtils, ReferentialValidatorService, RegExpUtils, RegisterConfirmPage, RegisterForm, RegisterModal, ResizableComponent, ResizableDirective, ResizableModule, RoundPipe, RxStateComputed, RxStateModule, RxStateProperty, RxStateRegister, RxStateSelect, SCRYPT_PARAMS, SETTINGS_COMPACT_ROWS, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_STORAGE_TESTING_PAGES, SHARED_TESTING_PAGES, SOCIAL_CONFIG_OPTIONS, SOCIAL_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SPACE_PLACEHOLDER_CHAR_REGEXP_GLOBAL, SafeHtmlPipe, SafeStylePipe, SelectPeerModal, SelectionLengthPipe, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedBadgeModule, SharedDebugModule, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMarkdownModule, SharedMatAutocompleteModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedNamedFilterModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedTextFormModule, SharedToolbarModule, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, SocialTestingModule, Software, SplitArrayInChunksPipe, StartableService, StatusById, StatusIds, StatusList, StorageDrivers, StorageExplorerComponent, StorageExplorerModule, StorageExplorerTestingModule, StorageExplorerTestingRoutingModule, StorageService, StrIncludesPipe, StrLengthPipe, StrReplacePipe, SubMenuTabDirective, SwipeTestPage, TABLE_SETTINGS_ENUM, TOOLBAR_HEADER_ID, Table2TestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TableValidatorService, TextForm, TextFormTestingPage, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ThrottledClickDirective, ToStringPipe, ToastTestingModule, ToastTestingPage, Toasts, TokenScope, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, TreeItemEntityUtils, TruncHtmlPipe, TruncTextPipe, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UrlUtils, UserEventModule, UserEventNotificationIcon, UserEventNotificationList, UserEventNotificationModal, UserEventTestService, UserEventTestingModule, UserEventTestingPage, UserSettings, UserToken, UserTokenTable, UsersPage, ValueFormatPipe, VersionUtils, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayResize, arraySize, asInputElement, booleanToString, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, collectByProperty, compareVersionNumbers, computeDecimalDegrees, computeDecimalPart, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableAndClearControl, disableAndClearControls, disableControl, disableControls, emitPromiseEvent, enableControl, enableControls, enableRxStateProdMode, entityToString, equals, equalsOrNil, escapeRegExp, expansionAnimation, fadeInAnimation, fadeInOutAnimation, fadeInSlowAnimation, filterFalse, filterFormErrors, filterFormErrorsByPath, filterFormErrorsByPrefix, filterNotNil, filterNumberInput, filterTrue, findParentWithClass, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatLong, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getInputRangeFromCaretIndex, getInputSelectionRangesFromMask, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, getRandomImageWithCredit, getUserAgent, hexToRgb, hexToRgbArray, initArrayControlsFromValues, interpolateString, intersectArrays, isAndroid, isBlankString, isCapacitor, isChrome, isControlHasInput, isEdge, isEmptyArray, isEntityService, isFirefox, isIOS, isInputElement, isInstanceOf, isInt, isIpad, isMacOS, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilObject, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isOnFieldMode, isPrint, isProgressEvent, isPromise, isResponseEvent, isSafari, isSameVersion, isStartableService, isTouchUi, isVersionCompatible, isWindows, joinProperties, joinPropertiesPath, lastArrayValue, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, maskitoAutoSelectByMaskPattern, maskitoPrefixPlugin, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moveInputCaretToSeparator, newArray, noHtml, noTrailingSlash, notNilOrDefault, nullIfNilOrBlank, nullIfUndefined, numberOrNilAttribute, numberToString, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputContentFromEvent, selectInputRange, setCalculatedValue, setControlEnabled, setControlsEnabled, setFormErrors, setPropertyByPath, setTabIndex, sleep, slideDownAnimation, slideInAnimation, slideInOutAnimation, slideUpDownAnimation, sort, splitArrayInChunks, splitById, splitByProperty, splitDegreesToDDArray, splitDegreesToDDMMArray, splitDegreesToDDMMSSArray, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, uncapitalizeFirstLetter, undefinedIfNull, underscoreToChangeCase, updateValueAndValidity, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending };
|
|
50100
|
+
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_DEBUG_DATA_SERVICE, APP_FEED_SERVICE, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_FRAGMENTS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_HOME_CONFIG, APP_HOTKEYS_CONFIG, APP_JOB_PROGRESSION_SERVICE, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_LOGGING_SERVICE, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_NAMED_FILTER_SERVICE, APP_PROGRESS_BAR_SERVICE, APP_SETTINGS_MENU_ITEMS, APP_STORAGE, APP_STORAGE_EXPLORER_PROTECTED_KEYS, APP_TESTING_PAGES, APP_USER_EVENT_LIST_INFINITE_SCROLL_THRESHOLD, APP_USER_EVENT_SERVICE, APP_USER_SETTINGS_OPTIONS, APP_USER_TOKEN_SCOPES, AboutModal, AbstractNamedFilterService, AbstractSelectionModelPipe, AbstractTableSelectionPipe, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, AccountUtils, ActionsColumnComponent, AdminModule, AdminRoutingModule, AdminUsersModule, Alerts, AndroidOsEnvironment, AppAboutModalModule, AppAccountModule, AppAsyncTable, AppAuthForm, AppAuthModal, AppAuthModule, AppChangePasswordModule, AppChangePasswordPage, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppEntityFormModule, AppForm, AppFormArray, AppFormButtonsBarModule, AppFormContainer, AppFormField, AppFormModule, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHomePageModule, AppIconComponent, AppIconModule, AppImageGalleryComponent, AppInMemoryTable, AppInstallUpgradeCard, AppInstallUpgradeCardModule, AppListForm, AppListFormModule, AppLoadingSpinner, AppMarkdownContent, AppMarkdownModal, AppMenuModule, AppNullForm, AppPropertiesForm, AppPropertiesFormModule, AppPropertiesTable, AppPropertiesUtils, AppPropertyUtils, AppRegisterModule, AppResetPasswordModal, AppRowField, AppSelectPeerModule, AppSettingsPageModule, AppTabEditor, AppTabEditorOptions, AppTable, AppTableModule, AppTableUtils, AppTextPopoverModule, AppUpdateOfflineModeCard, AppUpdateOfflineModeCardModule, AppValidatorService, AppendQueryParamsPipePipe, ArrayDistinctPipe, ArrayFilterPipe, ArrayFindByPropertyPipe, ArrayFirstPipe, ArrayFormTestPage, ArrayIncludesPipe, ArrayJoinPipe, ArrayLastPipe, ArrayLengthPipe, ArrayMapPipe, ArrayPluckPipe, ArraySortPipe, AsAnyPipe, AsArrayPipe, AsBooleanPipe, AsFloatLabelTypePipe, AsObservablePipe, AudioProvider, AudioTestingModule, AudioTestingPage, AuthGuardService, AutoResizeDirective, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, BadgeDirective, BadgeNumberPipe, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, BooleanFormatPipe, BooleanTestPage, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CapitalizePipe, CellValueChangeListener, ChangePasswordForm, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigFragments, ConfigService, Configuration, CoreModule, CorePipesModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_MATCH_REGEXP, DATE_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_JOIN_ARRAY_VALUES_SEPARATOR, DEFAULT_JOIN_PROPERTIES_SEPARATOR, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFormatService, DateFromNowPipe, DateShortTestPage, DateTestPage, DateTimeTestPage, DateUtils, DebugComponent, Department, DepartmentToStringPipe, DisplayWithPipe, DragAndDropDirective, DurationPipe, DurationTestPage, ED25519_SEED_LENGTH, EMPTY_PLACEHOLDER_CHAR, EMPTY_PLACEHOLDER_CHAR_REGEXP_GLOBAL, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesAsyncTableDataSource, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, EnvironmentHttpLoader, EnvironmentLoader, ErrorCodes, EvenPipe, FeedDirective, FeedModule, FeedService, FeedsComponent, FileResponse, FileService, FileSizePipe, FilesUtils, FirstFalsePipe, FirstPipe, FirstTruePipe, FormArrayHelper, FormArrayTestModule, FormButtonsBarComponent, FormButtonsBarToken, FormErrorPipe, FormErrorTranslatePipe, FormErrorTranslator, FormFieldDefinitionUtils, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, GalleryTestPage, GeolocationUtils, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, IMAGE_DEFAULTS, IPosition, ImageAttachment, ImageAttachmentFilter, ImageAttachmentService, ImageGalleryModule, ImageGalleryTestingModule, ImageModule, ImageService, ImagesUtils, InMemoryEntitiesService, IsAllSelectedPipe, IsEmptySelectionPipe, IsLoginAccountPipe, IsMultipleSelectionPipe, IsNilOrBlankPipe, IsNilOrNaNPipe, IsNilPipe, IsNotAllSelectedPipe, IsNotEmptySelectionPipe, IsNotNilOrBlankPipe, IsNotNilOrNaNPipe, IsNotNilPipe, IsOnDeskPipe, IsOnFieldPipe, IsSelectedPipe, IsSingleSelectionPipe, IsValidDatePipe, JobModule, JobProgression, JobProgressionComponent, JobProgressionIcon, JobProgressionList, JobProgressionService, JobProgressionTestService, JobProgressionTestingPage, JobTestingModule, JobUtils, JsonFeedUtils, JsonUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_PATTERNS, LAT_LONG_PATTERN_MAX_DECIMALS, LAT_LONG_VALUE_MAX_DECIMALS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LogLevel, LogUtils, Logger, LoggingService, LoggingServiceModule, LongitudeFormatPipe, MASKS, MASK_RANGES, MAT_FORM_FIELD_DEFAULT_APPEARANCE, MAT_FORM_FIELD_DEFAULT_SUBSCRIPT_SIZING, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MOMENT_NO_TIME_PROPERTY, MapGetPipe, MapKeysPipe, MapPipe, MapToPipe, MapValuesPipe, MarkdownDirective, MarkdownService, MarkdownTestPage, MarkdownTestingModule, MarkdownUtils, MaskitoPlaceholderPipe, MaskitoTestPage, MatAutocompleteConfigHolder, MatAutocompleteField, MatAutocompleteFieldUtils, MatBadgeTestPage, MatBooleanField, MatChipsField, MatColorPipe, MatCommonTestPage, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatLatLongFieldInput, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItem, MenuItems, MenuOptions, MenuService, MenuTestingModule, MenuTestingPage, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NETWORK_DEFAULT_CONNECTION_TIMEOUT, NamedFilter, NamedFilterFilter, NamedFilterSelector, NamedFilterSelectorTestingModule, NamedFilterSelectorTestingPage, NavActionsColumnComponent, NetworkService, NetworkUtils, NewTokenForm, NewTokenModal, NgInitDirective, NgVarDirective, NoHtmlPipe, NotEmptyArrayPipe, NumberFormatPipe, ObservableTestPage, OddPipe, OtherMenuTestingPage, PEER_URL_REGEXP, PLUS_PLACEHOLDER_CHAR_REGEXP_GLOBAL, PRINT_ID_QUERY_PARAM, PRINT_LOADING_STORAGE_KEY_PREFIX, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, PrintService, ProgressBarService, ProgressInterceptor, PropertiesFormTestPage, PropertiesFormTestingModule, PropertyEntity, PropertyEntityFilter, PropertyEntityValidator, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialToStringPipe, ReferentialUtils, ReferentialValidatorService, RegExpUtils, RegisterConfirmPage, RegisterForm, RegisterModal, ResizableComponent, ResizableDirective, ResizableModule, RoundPipe, RxStateComputed, RxStateModule, RxStateProperty, RxStateRegister, RxStateSelect, SCRYPT_PARAMS, SETTINGS_COMPACT_ROWS, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_STORAGE_TESTING_PAGES, SHARED_TESTING_PAGES, SOCIAL_CONFIG_OPTIONS, SOCIAL_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SPACE_PLACEHOLDER_CHAR_REGEXP_GLOBAL, SafeHtmlPipe, SafeStylePipe, SelectPeerModal, SelectionLengthPipe, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedBadgeModule, SharedDebugModule, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMarkdownModule, SharedMatAutocompleteModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedNamedFilterModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedTextFormModule, SharedToolbarModule, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, SocialTestingModule, Software, SplitArrayInChunksPipe, StartableService, StatusById, StatusIds, StatusList, StorageDrivers, StorageExplorerComponent, StorageExplorerModule, StorageExplorerTestingModule, StorageExplorerTestingRoutingModule, StorageService, StrIncludesPipe, StrLengthPipe, StrReplacePipe, SubMenuTabDirective, SwipeTestPage, TABLE_SETTINGS_ENUM, TOOLBAR_HEADER_ID, Table2TestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TableValidatorService, TextForm, TextFormTestingPage, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ThrottledClickDirective, ToStringPipe, ToastTestingModule, ToastTestingPage, Toasts, TokenScope, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, TreeItemEntityUtils, TruncHtmlPipe, TruncTextPipe, TruncateHtmlPipe, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UrlUtils, UserEventModule, UserEventNotificationIcon, UserEventNotificationList, UserEventNotificationModal, UserEventTestService, UserEventTestingModule, UserEventTestingPage, UserSettings, UserToken, UserTokenTable, UsersPage, ValueFormatPipe, VersionUtils, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayResize, arraySize, asInputElement, base64ArrayBuffer, booleanToString, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, collectByProperty, compareVersionNumbers, computeDecimalDegrees, computeDecimalPart, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableAndClearControl, disableAndClearControls, disableControl, disableControls, emitPromiseEvent, enableControl, enableControls, enableRxStateProdMode, entityToString, equals, equalsOrNil, escapeRegExp, expansionAnimation, fadeInAnimation, fadeInOutAnimation, fadeInSlowAnimation, filterFalse, filterFormErrors, filterFormErrorsByPath, filterFormErrorsByPrefix, filterNotNil, filterNumberInput, filterTrue, findParentWithClass, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatLong, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getInputRangeFromCaretIndex, getInputSelectionRangesFromMask, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, getRandomImageWithCredit, getUserAgent, hexToRgb, hexToRgbArray, initArrayControlsFromValues, interpolateString, intersectArrays, isAndroid, isBlankString, isCapacitor, isChrome, isControlHasInput, isEdge, isEmptyArray, isEntityService, isFirefox, isIOS, isInputElement, isInstanceOf, isInt, isIpad, isMacOS, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilObject, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isOnFieldMode, isPrint, isProgressEvent, isPromise, isResponseEvent, isSafari, isSameVersion, isStartableService, isTouchUi, isVersionCompatible, isWindows, joinProperties, joinPropertiesPath, lastArrayValue, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, maskitoAutoSelectByMaskPattern, maskitoPrefixPlugin, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moveInputCaretToSeparator, newArray, noHtml, noTrailingSlash, notNilOrDefault, nullIfNilOrBlank, nullIfUndefined, numberOrNilAttribute, numberToString, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputContentFromEvent, selectInputRange, setCalculatedValue, setControlEnabled, setControlsEnabled, setFormErrors, setPropertyByPath, setTabIndex, sleep, slideDownAnimation, slideInAnimation, slideInOutAnimation, slideUpDownAnimation, sort, splitArrayInChunks, splitById, splitByProperty, splitDegreesToDDArray, splitDegreesToDDMMArray, splitDegreesToDDMMSSArray, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, truncateHtml, uncapitalizeFirstLetter, undefinedIfNull, underscoreToChangeCase, updateValueAndValidity, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending };
|
|
49989
50101
|
//# sourceMappingURL=sumaris-net.ngx-components.mjs.map
|