@dereekb/dbx-form 9.15.6 → 9.15.8
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/esm2020/lib/form/form.mjs +1 -1
- package/esm2020/lib/form/io/form.input.directive.mjs +49 -10
- package/esm2020/lib/form/io/form.loading.directive.mjs +3 -3
- package/esm2020/lib/formly/field/checklist/checklist.item.field.mjs +3 -3
- package/esm2020/lib/formly/field/field.mjs +19 -3
- package/esm2020/lib/formly/field/selection/pickable/pickable.field.mjs +4 -4
- package/esm2020/lib/formly/field/selection/searchable/searchable.field.mjs +4 -4
- package/esm2020/lib/formly/field/selection/selection.field.mjs +3 -3
- package/esm2020/lib/formly/field/texteditor/texteditor.field.mjs +3 -3
- package/esm2020/lib/formly/field/value/array/array.field.mjs +3 -3
- package/esm2020/lib/formly/field/value/boolean/boolean.field.mjs +4 -4
- package/esm2020/lib/formly/field/value/date/datetime.field.component.mjs +110 -15
- package/esm2020/lib/formly/field/value/date/datetime.field.mjs +32 -6
- package/esm2020/lib/formly/field/value/number/number.field.mjs +19 -4
- package/esm2020/lib/formly/field/value/phone/phone.field.mjs +3 -3
- package/esm2020/lib/formly/field/value/text/text.additional.field.mjs +5 -2
- package/esm2020/lib/formly/field/value/text/text.field.mjs +24 -7
- package/esm2020/lib/formly/field/wrapper/section.wrapper.component.mjs +1 -1
- package/esm2020/lib/formly/field/wrapper/subsection.wrapper.component.mjs +1 -1
- package/esm2020/lib/validator/number.mjs +7 -1
- package/esm2020/mapbox/lib/field/latlng/latlng.field.mjs +3 -3
- package/esm2020/mapbox/lib/field/zoom/zoom.field.mjs +3 -3
- package/fesm2015/dereekb-dbx-form-mapbox.mjs +3 -3
- package/fesm2015/dereekb-dbx-form-mapbox.mjs.map +1 -1
- package/fesm2015/dereekb-dbx-form.mjs +243 -48
- package/fesm2015/dereekb-dbx-form.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-form-mapbox.mjs +3 -3
- package/fesm2020/dereekb-dbx-form-mapbox.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-form.mjs +262 -47
- package/fesm2020/dereekb-dbx-form.mjs.map +1 -1
- package/lib/form/form.d.ts +4 -2
- package/lib/form/io/form.input.directive.d.ts +2 -1
- package/lib/formly/field/field.d.ts +29 -3
- package/lib/formly/field/value/array/array.field.d.ts +6 -0
- package/lib/formly/field/value/date/datetime.field.component.d.ts +45 -3
- package/lib/formly/field/value/date/datetime.field.d.ts +5 -0
- package/lib/formly/field/value/number/number.field.d.ts +4 -2
- package/lib/formly/field/value/text/text.additional.field.d.ts +3 -6
- package/lib/formly/field/value/text/text.field.d.ts +6 -3
- package/lib/formly/field/wrapper/section.wrapper.component.d.ts +1 -2
- package/lib/formly/field/wrapper/subsection.wrapper.component.d.ts +1 -2
- package/lib/formly/field/wrapper/wrapper.d.ts +2 -2
- package/lib/validator/number.d.ts +6 -0
- package/mapbox/esm2020/lib/field/latlng/latlng.field.mjs +3 -3
- package/mapbox/esm2020/lib/field/zoom/zoom.field.mjs +3 -3
- package/mapbox/fesm2015/dereekb-dbx-form-mapbox.mjs +3 -3
- package/mapbox/fesm2015/dereekb-dbx-form-mapbox.mjs.map +1 -1
- package/mapbox/fesm2020/dereekb-dbx-form-mapbox.mjs +3 -3
- package/mapbox/fesm2020/dereekb-dbx-form-mapbox.mjs.map +1 -1
- package/mapbox/package.json +4 -4
- package/package.json +4 -4
|
@@ -9,9 +9,9 @@ import * as i2 from '@dereekb/dbx-core';
|
|
|
9
9
|
import { AbstractSubscriptionDirective, safeDetectChanges, DbxInjectionComponentModule, DbxDatePipeModule, mergeDbxInjectionComponentConfigs, tapDetectChanges } from '@dereekb/dbx-core';
|
|
10
10
|
import * as i1$1 from '@dereekb/dbx-web';
|
|
11
11
|
import { DbxActionTransitionSafetyDirective, DbxTextModule, DbxLoadingModule, DbxFlexLayoutModule, DbxSectionLayoutModule, DbxRouterAnchorModule, AbstractDbxSelectionListWrapperDirective, DEFAULT_LIST_WRAPPER_DIRECTIVE_TEMPLATE, AbstractDbxSelectionListViewDirective, addConfigToValueListItems, provideDbxListView, AbstractDbxValueListViewItemComponent, DbxButtonModule, DbxListLayoutModule, mapCompactModeObs, DbxBarLayoutModule } from '@dereekb/dbx-web';
|
|
12
|
-
import { isPast, addSeconds, isSameMinute, startOfDay, isSameDay, addMinutes } from 'date-fns';
|
|
13
|
-
import { BehaviorSubject, switchMap, first, exhaustMap, of, catchError, delay, filter, combineLatest, map, distinctUntilChanged,
|
|
14
|
-
import { LockSet, SubscriptionObject, asObservable, loadingStateHasFinishedLoading, switchMapMaybeObs, filterMaybe, switchMapMaybeDefault, SimpleLoadingContext, startWithBeginLoading, mapLoadingStateResults, successResult, ListLoadingStateContextInstance, isListLoadingStateEmpty, LoadingStateContextInstance,
|
|
12
|
+
import { isPast, addSeconds, isSameMinute, startOfDay, isSameDay, addMinutes, addDays } from 'date-fns';
|
|
13
|
+
import { BehaviorSubject, switchMap, first, exhaustMap, of, catchError, delay, filter, combineLatest, map, distinctUntilChanged, shareReplay, Subject, tap, takeUntil, EMPTY, mergeMap, startWith, debounceTime, skipWhile, interval, merge, throttleTime, scan, timer } from 'rxjs';
|
|
14
|
+
import { LockSet, SubscriptionObject, asObservable, cleanup, loadingStateHasFinishedLoading, switchMapMaybeObs, filterMaybe, switchMapMaybeDefault, SimpleLoadingContext, startWithBeginLoading, mapLoadingStateResults, successResult, ListLoadingStateContextInstance, isListLoadingStateEmpty, LoadingStateContextInstance, skipFirstMaybe, asyncPusherCache, scanCount } from '@dereekb/rxjs';
|
|
15
15
|
import * as i1$3 from '@ngx-formly/core';
|
|
16
16
|
import { FieldType, FieldWrapper, FormlyModule, FieldArrayType } from '@ngx-formly/core';
|
|
17
17
|
import * as i3$1 from '@angular/forms';
|
|
@@ -26,7 +26,7 @@ import * as i1$2 from '@angular/material/button';
|
|
|
26
26
|
import { MatButtonModule } from '@angular/material/button';
|
|
27
27
|
import * as i3$3 from '@angular/flex-layout/flex';
|
|
28
28
|
import { FlexLayoutModule } from '@angular/flex-layout';
|
|
29
|
-
import { objectIsEmpty, mergeObjectsFunction, filterFromPOJOFunction, mergeObjects, filterFromPOJO, asArray, objectHasNoKeys, addPlusPrefixToNumber, convertMaybeToArray, makeValuesGroupMap, findUnique, searchStringFilterFunction, caseInsensitiveFilterByIndexOfDecisionFactory, mergeIntoArray, lastValue, separateValues, arrayToMap, getValueFromGetter, dateFromLogicalDate, WEBSITE_DOMAIN_NAME_REGEX, KeyValueTypleValueFilter, valuesFromPOJO, allObjectsAreEqual, isNumberDivisibleBy, nearestDivisibleValues, US_STATE_CODE_STRING_REGEX, ZIP_CODE_STRING_REGEX, LAT_LNG_PATTERN, capitalizeFirstLetter, BooleanStringKeyArrayUtilityInstance } from '@dereekb/util';
|
|
29
|
+
import { objectIsEmpty, mergeObjectsFunction, filterFromPOJOFunction, mergeObjects, filterFromPOJO, asArray, objectHasNoKeys, addPlusPrefixToNumber, convertMaybeToArray, makeValuesGroupMap, findUnique, searchStringFilterFunction, caseInsensitiveFilterByIndexOfDecisionFactory, mergeIntoArray, lastValue, separateValues, arrayToMap, getValueFromGetter, filterMaybeValues, dateFromLogicalDate, WEBSITE_DOMAIN_NAME_REGEX, KeyValueTypleValueFilter, valuesFromPOJO, allObjectsAreEqual, isNumberDivisibleBy, nearestDivisibleValues, transformNumberFunction, concatArrays, transformStringFunction, US_STATE_CODE_STRING_REGEX, ZIP_CODE_STRING_REGEX, LAT_LNG_PATTERN, capitalizeFirstLetter, BooleanStringKeyArrayUtilityInstance } from '@dereekb/util';
|
|
30
30
|
import * as i2$1 from '@angular/material/slide-toggle';
|
|
31
31
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
32
32
|
import * as i2$2 from '@angular/flex-layout/extended';
|
|
@@ -44,7 +44,7 @@ import { MatListModule } from '@angular/material/list';
|
|
|
44
44
|
import * as i3$4 from '@angular/material/form-field';
|
|
45
45
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
46
46
|
import { ENTER, COMMA } from '@angular/cdk/keycodes';
|
|
47
|
-
import { skipUntilTimeElapsedAfterLastEmission, toJsDate, parseISO8601DayStringToDate, formatToISO8601DayString, formatToISO8601DateString, guessCurrentTimezone, toReadableTimeString, utcDayForDate, readableTimeStringToDate, DateTimeMinuteInstance, toLocalReadableTimeString, allTimezoneInfos, timezoneInfoForSystem, searchTimezoneInfos } from '@dereekb/date';
|
|
47
|
+
import { skipUntilTimeElapsedAfterLastEmission, toJsDate, parseISO8601DayStringToDate, formatToISO8601DayString, formatToISO8601DateString, safeToJsDate, guessCurrentTimezone, toReadableTimeString, utcDayForDate, readableTimeStringToDate, findMinDate, findMaxDate, DateTimeMinuteInstance, toLocalReadableTimeString, allTimezoneInfos, timezoneInfoForSystem, searchTimezoneInfos } from '@dereekb/date';
|
|
48
48
|
import * as i4$4 from 'ngx-editor';
|
|
49
49
|
import { Editor, NgxEditorModule } from 'ngx-editor';
|
|
50
50
|
import * as i4$5 from '@angular/cdk/drag-drop';
|
|
@@ -290,12 +290,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
|
|
|
290
290
|
}] });
|
|
291
291
|
|
|
292
292
|
function dbxFormSourceObservable(form, inputObs, mode$) {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
293
|
+
return dbxFormSourceObservableFromStream(form.stream$, inputObs, mode$);
|
|
294
|
+
}
|
|
295
|
+
function dbxFormSourceObservableFromStream(stream$, inputObs, mode$) {
|
|
296
|
+
const value$ = asObservable(inputObs).pipe(shareReplay(1)); // catch/share the latest emission
|
|
297
|
+
const state$ = stream$.pipe(map((x) => x.state), distinctUntilChanged());
|
|
298
|
+
return combineLatest([mode$, value$]).pipe(map((x) => x[0]), distinctUntilChanged(), switchMap((mode) => {
|
|
299
|
+
if (mode === 'reset') {
|
|
300
|
+
// reset only
|
|
301
|
+
return state$.pipe(exhaustMap((state) => {
|
|
302
|
+
if (state === DbxFormState.RESET) {
|
|
303
|
+
let firstValueSent = false;
|
|
304
|
+
const doneSubject = new Subject();
|
|
305
|
+
return combineLatest([value$, state$]).pipe(map(([value, state]) => {
|
|
306
|
+
if (!firstValueSent || state === DbxFormState.RESET) {
|
|
307
|
+
return [value, true]; // always forward the first value.
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
return [value, false];
|
|
311
|
+
}
|
|
312
|
+
}), tap(([value, send]) => {
|
|
313
|
+
firstValueSent = true;
|
|
314
|
+
if (!send) {
|
|
315
|
+
doneSubject.next(undefined);
|
|
316
|
+
}
|
|
317
|
+
}), filter(([value, send]) => send), map((x) => x[0]), takeUntil(doneSubject), cleanup(() => {
|
|
318
|
+
doneSubject.complete();
|
|
319
|
+
}));
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
return EMPTY;
|
|
323
|
+
}
|
|
324
|
+
}));
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
// pass any updated value while not initializing.
|
|
328
|
+
return state$.pipe(map((x) => x === DbxFormState.INITIALIZING), switchMap((initializing) => {
|
|
329
|
+
if (initializing) {
|
|
330
|
+
return EMPTY;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
return value$;
|
|
334
|
+
}
|
|
335
|
+
}));
|
|
336
|
+
}
|
|
337
|
+
}));
|
|
299
338
|
}
|
|
300
339
|
/**
|
|
301
340
|
* Used with a FormComponent to set the value based on the input value.
|
|
@@ -318,7 +357,7 @@ class DbxFormSourceDirective extends AbstractSubscriptionDirective {
|
|
|
318
357
|
setObs(inputObs) {
|
|
319
358
|
let subscription;
|
|
320
359
|
if (inputObs) {
|
|
321
|
-
subscription =
|
|
360
|
+
subscription = dbxFormSourceObservableFromStream(this.form.stream$, inputObs, this._mode).subscribe((x) => {
|
|
322
361
|
this.form.setValue(x);
|
|
323
362
|
});
|
|
324
363
|
}
|
|
@@ -370,7 +409,7 @@ class DbxFormLoadingSourceDirective extends AbstractSubscriptionDirective {
|
|
|
370
409
|
_setObs(inputObs) {
|
|
371
410
|
let subscription;
|
|
372
411
|
if (inputObs) {
|
|
373
|
-
subscription =
|
|
412
|
+
subscription = dbxFormSourceObservableFromStream(this.form.stream$, inputObs, this._mode).subscribe((x) => {
|
|
374
413
|
if (loadingStateHasFinishedLoading(x)) {
|
|
375
414
|
this.form.setValue(x.value);
|
|
376
415
|
}
|
|
@@ -1163,10 +1202,20 @@ function formlyField(fieldConfig) {
|
|
|
1163
1202
|
}
|
|
1164
1203
|
return fieldConfig;
|
|
1165
1204
|
}
|
|
1166
|
-
|
|
1205
|
+
/**
|
|
1206
|
+
* Creates an object with propers, expressions, and parsers properly configured from the input FieldConfig.
|
|
1207
|
+
*
|
|
1208
|
+
* @param fieldConfig
|
|
1209
|
+
* @param override
|
|
1210
|
+
* @returns
|
|
1211
|
+
*/
|
|
1212
|
+
function propsAndConfigForFieldConfig(fieldConfig, override) {
|
|
1213
|
+
const { expressions, parsers } = fieldConfig;
|
|
1167
1214
|
const props = propsValueForFieldConfig(fieldConfig, override);
|
|
1168
1215
|
return {
|
|
1169
|
-
props
|
|
1216
|
+
props,
|
|
1217
|
+
expressions,
|
|
1218
|
+
parsers
|
|
1170
1219
|
};
|
|
1171
1220
|
}
|
|
1172
1221
|
const partialPotentialFieldConfigKeys = ['label', 'placeholder', 'required', 'readonly', 'description', 'autocomplete'];
|
|
@@ -1238,13 +1287,19 @@ function validatorsForFieldConfig(input) {
|
|
|
1238
1287
|
}
|
|
1239
1288
|
return config;
|
|
1240
1289
|
}
|
|
1290
|
+
/**
|
|
1291
|
+
* MARK: Compat
|
|
1292
|
+
*
|
|
1293
|
+
* @deprecated use propsAndConfigForFieldConfig instead.
|
|
1294
|
+
*/
|
|
1295
|
+
const propsForFieldConfig = propsAndConfigForFieldConfig;
|
|
1241
1296
|
|
|
1242
1297
|
function checklistItemField(config) {
|
|
1243
1298
|
const { key, displayContentObs, componentClass } = config;
|
|
1244
1299
|
const fieldConfig = formlyField({
|
|
1245
1300
|
key,
|
|
1246
1301
|
type: 'checklistitem',
|
|
1247
|
-
...
|
|
1302
|
+
...propsAndConfigForFieldConfig(config, {
|
|
1248
1303
|
displayContentObs,
|
|
1249
1304
|
componentClass
|
|
1250
1305
|
})
|
|
@@ -1867,7 +1922,7 @@ function pickableItemChipField(config) {
|
|
|
1867
1922
|
return formlyField({
|
|
1868
1923
|
key,
|
|
1869
1924
|
type: 'pickablechipfield',
|
|
1870
|
-
...
|
|
1925
|
+
...propsAndConfigForFieldConfig(config, {
|
|
1871
1926
|
...config,
|
|
1872
1927
|
autocomplete: false
|
|
1873
1928
|
})
|
|
@@ -1878,7 +1933,7 @@ function pickableItemListField(config) {
|
|
|
1878
1933
|
return formlyField({
|
|
1879
1934
|
key,
|
|
1880
1935
|
type: 'pickablelistfield',
|
|
1881
|
-
...
|
|
1936
|
+
...propsAndConfigForFieldConfig(config, {
|
|
1882
1937
|
...config,
|
|
1883
1938
|
autocomplete: false
|
|
1884
1939
|
})
|
|
@@ -2300,7 +2355,7 @@ function searchableChipField(config) {
|
|
|
2300
2355
|
return formlyField({
|
|
2301
2356
|
key,
|
|
2302
2357
|
type: 'searchablechipfield',
|
|
2303
|
-
...
|
|
2358
|
+
...propsAndConfigForFieldConfig(config, {
|
|
2304
2359
|
...config,
|
|
2305
2360
|
placeholder: placeholder ?? 'Add...',
|
|
2306
2361
|
autocomplete: false
|
|
@@ -2312,7 +2367,7 @@ function searchableTextField(config) {
|
|
|
2312
2367
|
return formlyField({
|
|
2313
2368
|
key,
|
|
2314
2369
|
type: 'searchabletextfield',
|
|
2315
|
-
...
|
|
2370
|
+
...propsAndConfigForFieldConfig(config, {
|
|
2316
2371
|
...config,
|
|
2317
2372
|
autocomplete: false
|
|
2318
2373
|
})
|
|
@@ -2457,7 +2512,7 @@ function valueSelectionField(config) {
|
|
|
2457
2512
|
return formlyField({
|
|
2458
2513
|
key,
|
|
2459
2514
|
type: native ? 'native-select' : 'select',
|
|
2460
|
-
...
|
|
2515
|
+
...propsAndConfigForFieldConfig(config, {
|
|
2461
2516
|
options: config.options,
|
|
2462
2517
|
multiple: config.multiple ?? false,
|
|
2463
2518
|
...selectAllOptionConfig
|
|
@@ -2610,7 +2665,7 @@ function textEditorField(config) {
|
|
|
2610
2665
|
// Set to trigger value update on blurs with the form. However, the value is set internally too.
|
|
2611
2666
|
updateOn: 'blur'
|
|
2612
2667
|
},
|
|
2613
|
-
...
|
|
2668
|
+
...propsAndConfigForFieldConfig(config, {
|
|
2614
2669
|
minLength,
|
|
2615
2670
|
maxLength
|
|
2616
2671
|
})
|
|
@@ -2792,7 +2847,7 @@ function repeatArrayField(config) {
|
|
|
2792
2847
|
return formlyField({
|
|
2793
2848
|
key,
|
|
2794
2849
|
type: 'repeatarray',
|
|
2795
|
-
...
|
|
2850
|
+
...propsAndConfigForFieldConfig(config, {
|
|
2796
2851
|
maxLength,
|
|
2797
2852
|
labelForField,
|
|
2798
2853
|
addText,
|
|
@@ -2825,7 +2880,7 @@ function toggleField(config) {
|
|
|
2825
2880
|
type: 'toggle',
|
|
2826
2881
|
wrappers: ['autotouch', 'form-field'],
|
|
2827
2882
|
defaultValue: defaultValue ?? false,
|
|
2828
|
-
...
|
|
2883
|
+
...propsAndConfigForFieldConfig(config)
|
|
2829
2884
|
});
|
|
2830
2885
|
}
|
|
2831
2886
|
function checkboxField(config) {
|
|
@@ -2834,7 +2889,7 @@ function checkboxField(config) {
|
|
|
2834
2889
|
key,
|
|
2835
2890
|
type: 'checkbox',
|
|
2836
2891
|
defaultValue: defaultValue ?? false,
|
|
2837
|
-
...
|
|
2892
|
+
...propsAndConfigForFieldConfig(config)
|
|
2838
2893
|
});
|
|
2839
2894
|
}
|
|
2840
2895
|
/*
|
|
@@ -2918,6 +2973,20 @@ function dbxDateTimeOutputValueFactory(mode) {
|
|
|
2918
2973
|
}
|
|
2919
2974
|
return factory;
|
|
2920
2975
|
}
|
|
2976
|
+
function syncConfigValueObs(parseConfigsObs, type) {
|
|
2977
|
+
return parseConfigsObs.pipe(switchMap((x) => {
|
|
2978
|
+
const config = x.find((y) => y.syncType === type);
|
|
2979
|
+
let result;
|
|
2980
|
+
if (config) {
|
|
2981
|
+
const { control } = config;
|
|
2982
|
+
result = control.valueChanges.pipe(startWith(control.value), map(safeToJsDate));
|
|
2983
|
+
}
|
|
2984
|
+
else {
|
|
2985
|
+
result = of(undefined);
|
|
2986
|
+
}
|
|
2987
|
+
return result;
|
|
2988
|
+
}), distinctUntilChanged(), shareReplay(1));
|
|
2989
|
+
}
|
|
2921
2990
|
class DbxDateTimeFieldComponent extends FieldType$1 {
|
|
2922
2991
|
constructor(cdRef) {
|
|
2923
2992
|
super();
|
|
@@ -2947,13 +3016,40 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
|
|
|
2947
3016
|
validators: [Validators.pattern(/^(now)$|^([0-9]|(0[0-9])|(1[0-9])|(2[0-3]))(:)?([0-5][0-9])?(\s)?([apAP][Mm])?(\\s)*$/)]
|
|
2948
3017
|
});
|
|
2949
3018
|
this._config = new BehaviorSubject(undefined);
|
|
3019
|
+
this._syncConfigObs = new BehaviorSubject(undefined);
|
|
2950
3020
|
this.fullDay$ = this.fullDayControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value))));
|
|
2951
3021
|
this.showTimeInput$ = this.fullDay$.pipe(map((x) => !x && this.timeMode !== DbxDateTimeFieldTimeMode.NONE));
|
|
2952
3022
|
this.showAddTime$ = this.showTimeInput$.pipe(map((x) => !x && this.timeMode === DbxDateTimeFieldTimeMode.OPTIONAL), shareReplay(1));
|
|
2953
3023
|
this.date$ = this.dateInputCtrl.valueChanges.pipe(startWith(this.dateInputCtrl.value), filterMaybe(), shareReplay(1));
|
|
2954
|
-
this.dateValue$ = merge(this.date
|
|
3024
|
+
this.dateValue$ = merge(this.date$, this.value$.pipe(skipFirstMaybe())).pipe(map((x) => (x ? startOfDay(x) : x)), distinctUntilChanged((a, b) => a != null && b != null && isSameDay(a, b)), shareReplay(1));
|
|
2955
3025
|
this.timeInput$ = this._updateTime.pipe(debounceTime(5), map(() => this.timeInputCtrl.value || ''), distinctUntilChanged());
|
|
2956
|
-
this.
|
|
3026
|
+
this.syncConfigObs$ = this._syncConfigObs.pipe(switchMapMaybeDefault(), shareReplay(1));
|
|
3027
|
+
this.parsedSyncConfigs$ = this.syncConfigObs$.pipe(map((x) => {
|
|
3028
|
+
let parsed;
|
|
3029
|
+
if (x) {
|
|
3030
|
+
parsed = filterMaybeValues(asArray(x).map((y) => {
|
|
3031
|
+
const control = this.form.get(y.syncWith);
|
|
3032
|
+
if (control) {
|
|
3033
|
+
return {
|
|
3034
|
+
control,
|
|
3035
|
+
...y
|
|
3036
|
+
};
|
|
3037
|
+
}
|
|
3038
|
+
else {
|
|
3039
|
+
return undefined;
|
|
3040
|
+
}
|
|
3041
|
+
}));
|
|
3042
|
+
}
|
|
3043
|
+
else {
|
|
3044
|
+
parsed = [];
|
|
3045
|
+
}
|
|
3046
|
+
return parsed;
|
|
3047
|
+
}), shareReplay(1));
|
|
3048
|
+
this.syncConfigBeforeValue$ = syncConfigValueObs(this.parsedSyncConfigs$, 'before');
|
|
3049
|
+
this.syncConfigAfterValue$ = syncConfigValueObs(this.parsedSyncConfigs$, 'after');
|
|
3050
|
+
// TODO: Get min/max using the DateTimePickerConfiguration too
|
|
3051
|
+
this.dateInputMin$ = this.syncConfigBeforeValue$;
|
|
3052
|
+
this.dateInputMax$ = this.syncConfigAfterValue$;
|
|
2957
3053
|
this.rawDateTime$ = combineLatest([this.dateValue$, this.timeInput$.pipe(startWith(null)), this.fullDay$]).pipe(map(([date, timeString, fullDay]) => {
|
|
2958
3054
|
let result;
|
|
2959
3055
|
if (date) {
|
|
@@ -2978,7 +3074,24 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
|
|
|
2978
3074
|
}
|
|
2979
3075
|
return result;
|
|
2980
3076
|
}), distinctUntilChanged((a, b) => a != null && b != null && isSameMinute(a, b)), shareReplay(1));
|
|
2981
|
-
this.
|
|
3077
|
+
this.config$ = combineLatest([this._config.pipe(switchMapMaybeDefault(), shareReplay(1)), this.dateInputMin$, this.dateInputMax$]).pipe(map(([x, dateInputMin, dateInputMax]) => {
|
|
3078
|
+
let result = x;
|
|
3079
|
+
if (dateInputMin != null || dateInputMax != null) {
|
|
3080
|
+
const { min: limitMin, max: limitMax } = x?.limits ?? {};
|
|
3081
|
+
const min = findMinDate([dateInputMin, limitMin]);
|
|
3082
|
+
const max = findMaxDate([dateInputMax, limitMax]);
|
|
3083
|
+
result = {
|
|
3084
|
+
...x,
|
|
3085
|
+
limits: {
|
|
3086
|
+
...x?.limits,
|
|
3087
|
+
min,
|
|
3088
|
+
max
|
|
3089
|
+
}
|
|
3090
|
+
};
|
|
3091
|
+
}
|
|
3092
|
+
return result;
|
|
3093
|
+
}), distinctUntilChanged(), shareReplay(1));
|
|
3094
|
+
this.timeOutput$ = combineLatest([this.rawDateTime$, this._offset, this.config$]).pipe(throttleTime(40, undefined, { leading: false, trailing: true }), distinctUntilChanged((current, next) => current[0] === next[0] && next[1] === 0), tap(([, stepsOffset]) => (stepsOffset ? this._offset.next(0) : 0)), map(([date, stepsOffset, config]) => {
|
|
2982
3095
|
if (date != null) {
|
|
2983
3096
|
const instance = new DateTimeMinuteInstance({
|
|
2984
3097
|
date,
|
|
@@ -2992,6 +3105,12 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
|
|
|
2992
3105
|
return date;
|
|
2993
3106
|
}), distinctUntilChanged((a, b) => a != null && b != null && isSameMinute(a, b)), shareReplay(1));
|
|
2994
3107
|
}
|
|
3108
|
+
get dateLabel() {
|
|
3109
|
+
return this.props.dateLabel ?? 'Date';
|
|
3110
|
+
}
|
|
3111
|
+
get timeLabel() {
|
|
3112
|
+
return this.props.timeLabel ?? 'Time';
|
|
3113
|
+
}
|
|
2995
3114
|
get dateOnly() {
|
|
2996
3115
|
return this.timeMode === DbxDateTimeFieldTimeMode.NONE;
|
|
2997
3116
|
}
|
|
@@ -3019,6 +3138,7 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
|
|
|
3019
3138
|
ngOnInit() {
|
|
3020
3139
|
this._formControlObs.next(this.formControl);
|
|
3021
3140
|
this._config.next(this.dateTimeField.getConfigObs?.());
|
|
3141
|
+
this._syncConfigObs.next(this.dateTimeField.getSyncFieldsObs?.());
|
|
3022
3142
|
const valueFactory = dbxDateTimeOutputValueFactory(this.valueMode);
|
|
3023
3143
|
this._sub.subscription = this.timeOutput$.pipe(skipFirstMaybe()).subscribe((dateValue) => {
|
|
3024
3144
|
const value = valueFactory(dateValue);
|
|
@@ -3076,15 +3196,14 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
|
|
|
3076
3196
|
this._formControlObs.complete();
|
|
3077
3197
|
this._config.complete();
|
|
3078
3198
|
this._updateTime.complete();
|
|
3199
|
+
this._syncConfigObs.complete();
|
|
3079
3200
|
this._sub.destroy();
|
|
3080
3201
|
this._valueSub.destroy();
|
|
3081
3202
|
}
|
|
3082
3203
|
datePicked(event) {
|
|
3083
3204
|
const date = event.value;
|
|
3084
|
-
console.log('date picked?', event);
|
|
3085
3205
|
if (date) {
|
|
3086
|
-
this.
|
|
3087
|
-
this._updateTime.next();
|
|
3206
|
+
this.setDateInputValue(date);
|
|
3088
3207
|
}
|
|
3089
3208
|
}
|
|
3090
3209
|
setLogicalTime(time) {
|
|
@@ -3094,12 +3213,43 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
|
|
|
3094
3213
|
this.setTime(timeString);
|
|
3095
3214
|
}
|
|
3096
3215
|
}
|
|
3216
|
+
setDateInputValue(date) {
|
|
3217
|
+
this.dateInputCtrl.setValue(date);
|
|
3218
|
+
this._updateTime.next();
|
|
3219
|
+
}
|
|
3097
3220
|
setTime(time) {
|
|
3098
3221
|
this.timeInputCtrl.setValue(time);
|
|
3099
3222
|
this._offset.next(0);
|
|
3100
3223
|
this._updateTime.next();
|
|
3101
3224
|
}
|
|
3102
|
-
|
|
3225
|
+
keydownOnDateInput(event) {
|
|
3226
|
+
let direction = 0;
|
|
3227
|
+
switch (event.key?.toLowerCase()) {
|
|
3228
|
+
case 'arrowup':
|
|
3229
|
+
direction = 1;
|
|
3230
|
+
break;
|
|
3231
|
+
case 'arrowdown':
|
|
3232
|
+
direction = -1;
|
|
3233
|
+
break;
|
|
3234
|
+
}
|
|
3235
|
+
let offset = 1;
|
|
3236
|
+
if (event.ctrlKey && event.shiftKey) {
|
|
3237
|
+
offset = 365;
|
|
3238
|
+
}
|
|
3239
|
+
else if (event.ctrlKey) {
|
|
3240
|
+
offset = 30;
|
|
3241
|
+
}
|
|
3242
|
+
else if (event.shiftKey) {
|
|
3243
|
+
offset = 7;
|
|
3244
|
+
}
|
|
3245
|
+
if (direction !== 0) {
|
|
3246
|
+
this.date$.pipe(first()).subscribe((date) => {
|
|
3247
|
+
const newDate = addDays(date, offset * direction);
|
|
3248
|
+
this.setDateInputValue(newDate);
|
|
3249
|
+
});
|
|
3250
|
+
}
|
|
3251
|
+
}
|
|
3252
|
+
keydownOnTimeInput(event) {
|
|
3103
3253
|
let direction = 0;
|
|
3104
3254
|
switch (event.key?.toLowerCase()) {
|
|
3105
3255
|
case 'arrowup':
|
|
@@ -3143,10 +3293,10 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
|
|
|
3143
3293
|
}
|
|
3144
3294
|
}
|
|
3145
3295
|
DbxDateTimeFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxDateTimeFieldComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
3146
|
-
DbxDateTimeFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: DbxDateTimeFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\" *ngIf=\"showDateInput\">\n <ng-container *ngTemplateOutlet=\"dateInputTemplate\"></ng-container>\n </div>\n <!-- Time -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"showDateInput ? '50' : '100'\">\n <ng-container *ngIf=\"showTimeInput$ | async\">\n <ng-container *ngTemplateOutlet=\"timeMenuAndInputTemplate\"></ng-container>\n </ng-container>\n <div class=\"add-time-button-wrapper\" *ngIf=\"showAddTime$ | async\">\n <button mat-button class=\"add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n </div>\n <div *ngIf=\"!hideDateHint\" class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\" [ngSwitch]=\"fullDay$ | async\">\n <small *ngSwitchCase=\"true\">\n <b class=\"dbx-ok\">All Day</b>\n {{
|
|
3296
|
+
DbxDateTimeFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: DbxDateTimeFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\" *ngIf=\"showDateInput\">\n <ng-container *ngTemplateOutlet=\"dateInputTemplate\"></ng-container>\n </div>\n <!-- Time -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"showDateInput ? '50' : '100'\">\n <ng-container *ngIf=\"showTimeInput$ | async\">\n <ng-container *ngTemplateOutlet=\"timeMenuAndInputTemplate\"></ng-container>\n </ng-container>\n <div class=\"add-time-button-wrapper\" *ngIf=\"showAddTime$ | async\">\n <button mat-button class=\"add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n </div>\n <div *ngIf=\"!hideDateHint\" class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\" [ngSwitch]=\"fullDay$ | async\">\n <small *ngSwitchCase=\"true\">\n <b class=\"dbx-ok\">All Day</b>\n {{ displayValue$ | async | date: 'fullDate' }} ({{ displayValue$ | async | dateDistance }})\n </small>\n <small *ngSwitchCase=\"false\">\n <ng-container *ngIf=\"value$ | async\">\n <b class=\"dbx-ok\">At</b>\n {{ displayValue$ | async | date: 'medium' }} ({{ displayValue$ | async | timeDistance }})\n </ng-container>\n </small>\n </div>\n </div>\n</div>\n\n<!-- Date Input Template -->\n<ng-template #dateInputTemplate>\n <button mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ dateLabel }}</mat-label>\n <input #dateInput matInput [min]=\"dateInputMin$ | async\" [max]=\"dateInputMax$ | async\" [matDatepicker]=\"picker\" (dateChange)=\"datePicked($event)\" [value]=\"dateValue$ | async\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <button mat-icon-button [matMenuTriggerFor]=\"timemenu\" aria-label=\"opens the time menu\" [disabled]=\"disabled\">\n <mat-icon>timer</mat-icon>\n </button>\n <mat-menu #timemenu=\"matMenu\">\n <ng-container *ngIf=\"timeMode === 'optional'\">\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n </ng-container>\n <button mat-menu-item (click)=\"setLogicalTime('now')\">\n <span>Now</span>\n </button>\n <button mat-menu-item (click)=\"setTime('12:00AM')\">\n <span>Midnight</span>\n </button>\n <button mat-menu-item (click)=\"setTime('6:00AM')\">\n <span>6:00AM</span>\n </button>\n <button mat-menu-item (click)=\"setTime('8:00AM')\">\n <span>8:00AM</span>\n </button>\n <button mat-menu-item (click)=\"setTime('10:00AM')\">\n <span>10:00AM</span>\n </button>\n <button mat-menu-item (click)=\"setTime('12:00PM')\">\n <span>Noon</span>\n </button>\n <button mat-menu-item (click)=\"setTime('2:00PM')\">\n <span>2:00PM</span>\n </button>\n <button mat-menu-item (click)=\"setTime('5:00PM')\">\n <span>5:00PM</span>\n </button>\n </mat-menu>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ timeLabel }}</mat-label>\n <input #timeInput matInput [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnTimeInput($event)\" />\n </mat-form-field>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3$4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.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: i5$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i1$2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i3$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3$3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3$3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3$3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2$2.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i2.TimeDistancePipe, name: "timeDistance" }, { kind: "pipe", type: i2.DateDistancePipe, name: "dateDistance" }] });
|
|
3147
3297
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxDateTimeFieldComponent, decorators: [{
|
|
3148
3298
|
type: Component,
|
|
3149
|
-
args: [{ template: "<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\" *ngIf=\"showDateInput\">\n <ng-container *ngTemplateOutlet=\"dateInputTemplate\"></ng-container>\n </div>\n <!-- Time -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"showDateInput ? '50' : '100'\">\n <ng-container *ngIf=\"showTimeInput$ | async\">\n <ng-container *ngTemplateOutlet=\"timeMenuAndInputTemplate\"></ng-container>\n </ng-container>\n <div class=\"add-time-button-wrapper\" *ngIf=\"showAddTime$ | async\">\n <button mat-button class=\"add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n </div>\n <div *ngIf=\"!hideDateHint\" class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\" [ngSwitch]=\"fullDay$ | async\">\n <small *ngSwitchCase=\"true\">\n <b class=\"dbx-ok\">All Day</b>\n {{
|
|
3299
|
+
args: [{ template: "<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\" *ngIf=\"showDateInput\">\n <ng-container *ngTemplateOutlet=\"dateInputTemplate\"></ng-container>\n </div>\n <!-- Time -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"showDateInput ? '50' : '100'\">\n <ng-container *ngIf=\"showTimeInput$ | async\">\n <ng-container *ngTemplateOutlet=\"timeMenuAndInputTemplate\"></ng-container>\n </ng-container>\n <div class=\"add-time-button-wrapper\" *ngIf=\"showAddTime$ | async\">\n <button mat-button class=\"add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n </div>\n <div *ngIf=\"!hideDateHint\" class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\" [ngSwitch]=\"fullDay$ | async\">\n <small *ngSwitchCase=\"true\">\n <b class=\"dbx-ok\">All Day</b>\n {{ displayValue$ | async | date: 'fullDate' }} ({{ displayValue$ | async | dateDistance }})\n </small>\n <small *ngSwitchCase=\"false\">\n <ng-container *ngIf=\"value$ | async\">\n <b class=\"dbx-ok\">At</b>\n {{ displayValue$ | async | date: 'medium' }} ({{ displayValue$ | async | timeDistance }})\n </ng-container>\n </small>\n </div>\n </div>\n</div>\n\n<!-- Date Input Template -->\n<ng-template #dateInputTemplate>\n <button mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ dateLabel }}</mat-label>\n <input #dateInput matInput [min]=\"dateInputMin$ | async\" [max]=\"dateInputMax$ | async\" [matDatepicker]=\"picker\" (dateChange)=\"datePicked($event)\" [value]=\"dateValue$ | async\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <button mat-icon-button [matMenuTriggerFor]=\"timemenu\" aria-label=\"opens the time menu\" [disabled]=\"disabled\">\n <mat-icon>timer</mat-icon>\n </button>\n <mat-menu #timemenu=\"matMenu\">\n <ng-container *ngIf=\"timeMode === 'optional'\">\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n </ng-container>\n <button mat-menu-item (click)=\"setLogicalTime('now')\">\n <span>Now</span>\n </button>\n <button mat-menu-item (click)=\"setTime('12:00AM')\">\n <span>Midnight</span>\n </button>\n <button mat-menu-item (click)=\"setTime('6:00AM')\">\n <span>6:00AM</span>\n </button>\n <button mat-menu-item (click)=\"setTime('8:00AM')\">\n <span>8:00AM</span>\n </button>\n <button mat-menu-item (click)=\"setTime('10:00AM')\">\n <span>10:00AM</span>\n </button>\n <button mat-menu-item (click)=\"setTime('12:00PM')\">\n <span>Noon</span>\n </button>\n <button mat-menu-item (click)=\"setTime('2:00PM')\">\n <span>2:00PM</span>\n </button>\n <button mat-menu-item (click)=\"setTime('5:00PM')\">\n <span>5:00PM</span>\n </button>\n </mat-menu>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ timeLabel }}</mat-label>\n <input #timeInput matInput [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnTimeInput($event)\" />\n </mat-form-field>\n</ng-template>\n" }]
|
|
3150
3300
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; } });
|
|
3151
3301
|
|
|
3152
3302
|
class DbxFormFormlyDateFieldModule {
|
|
@@ -3225,24 +3375,50 @@ function timeOnlyField(config = {}) {
|
|
|
3225
3375
|
});
|
|
3226
3376
|
}
|
|
3227
3377
|
function dateTimeField(config = {}) {
|
|
3228
|
-
const { key = 'date', timeMode = DbxDateTimeFieldTimeMode.REQUIRED, valueMode, fullDayInUTC, fullDayFieldName, getConfigObs, hideDateHint, timeOnly = false } = config;
|
|
3378
|
+
const { key = 'date', dateLabel, timeLabel, timeMode = DbxDateTimeFieldTimeMode.REQUIRED, valueMode, fullDayInUTC, fullDayFieldName, getConfigObs, getSyncFieldsObs, hideDateHint, timeOnly = false } = config;
|
|
3229
3379
|
const fieldConfig = formlyField({
|
|
3230
3380
|
key,
|
|
3231
3381
|
type: 'datetime',
|
|
3232
|
-
...
|
|
3382
|
+
...propsAndConfigForFieldConfig(config, {
|
|
3383
|
+
dateLabel,
|
|
3384
|
+
timeLabel,
|
|
3233
3385
|
valueMode,
|
|
3234
3386
|
timeOnly,
|
|
3235
3387
|
timeMode: timeOnly ? DbxDateTimeFieldTimeMode.REQUIRED : timeMode,
|
|
3236
3388
|
fullDayFieldName,
|
|
3237
3389
|
fullDayInUTC,
|
|
3238
3390
|
hideDateHint,
|
|
3239
|
-
getConfigObs
|
|
3391
|
+
getConfigObs,
|
|
3392
|
+
getSyncFieldsObs
|
|
3240
3393
|
})
|
|
3241
3394
|
});
|
|
3242
3395
|
return styleWrapper(fieldConfig, {
|
|
3243
3396
|
classGetter: 'dbx-mat-form-field-disable-underline'
|
|
3244
3397
|
});
|
|
3245
3398
|
}
|
|
3399
|
+
function dateRangeField(config = {}) {
|
|
3400
|
+
const { start, end } = config;
|
|
3401
|
+
const startFieldKey = start?.key ?? 'start';
|
|
3402
|
+
const endFieldKey = end?.key ?? 'end';
|
|
3403
|
+
const startField = dateTimeField({
|
|
3404
|
+
dateLabel: 'Start',
|
|
3405
|
+
timeMode: DbxDateTimeFieldTimeMode.NONE,
|
|
3406
|
+
getSyncFieldsObs: () => of([{ syncWith: endFieldKey, syncType: 'after' }]),
|
|
3407
|
+
...start,
|
|
3408
|
+
key: startFieldKey
|
|
3409
|
+
});
|
|
3410
|
+
const endField = dateTimeField({
|
|
3411
|
+
dateLabel: 'End',
|
|
3412
|
+
timeMode: DbxDateTimeFieldTimeMode.NONE,
|
|
3413
|
+
getSyncFieldsObs: () => of([{ syncWith: startFieldKey, syncType: 'before' }]),
|
|
3414
|
+
...end,
|
|
3415
|
+
key: endFieldKey
|
|
3416
|
+
});
|
|
3417
|
+
return {
|
|
3418
|
+
key: undefined,
|
|
3419
|
+
fieldGroup: [flexLayoutWrapper([startField, endField], { size: 1, relative: true })]
|
|
3420
|
+
};
|
|
3421
|
+
}
|
|
3246
3422
|
|
|
3247
3423
|
function isTruthy() {
|
|
3248
3424
|
return (control) => {
|
|
@@ -3314,6 +3490,12 @@ function isInRange(min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER)
|
|
|
3314
3490
|
};
|
|
3315
3491
|
}
|
|
3316
3492
|
const IS_DIVISIBLE_BY_VALIDATION_KEY = 'isDivisibleBy';
|
|
3493
|
+
/**
|
|
3494
|
+
* Angular Form ValidationFn for checking isDivisibleBy the input divisor.
|
|
3495
|
+
*
|
|
3496
|
+
* @param divisor
|
|
3497
|
+
* @returns
|
|
3498
|
+
*/
|
|
3317
3499
|
function isDivisibleBy(divisor) {
|
|
3318
3500
|
if (divisor === 0) {
|
|
3319
3501
|
throw new Error('Divisior must be greater than zero.');
|
|
@@ -3364,8 +3546,21 @@ function fieldValueIsAvailableValidator(config) {
|
|
|
3364
3546
|
})), first());
|
|
3365
3547
|
}
|
|
3366
3548
|
|
|
3549
|
+
function numberFieldTransformParser(config) {
|
|
3550
|
+
const { parsers: inputParsers, transform } = config;
|
|
3551
|
+
let parsers;
|
|
3552
|
+
if (inputParsers) {
|
|
3553
|
+
parsers = inputParsers;
|
|
3554
|
+
}
|
|
3555
|
+
if (transform) {
|
|
3556
|
+
const transformParser = transformNumberFunction(transform);
|
|
3557
|
+
parsers = concatArrays([transformParser], parsers);
|
|
3558
|
+
}
|
|
3559
|
+
return parsers;
|
|
3560
|
+
}
|
|
3367
3561
|
function numberField(config) {
|
|
3368
3562
|
const { key, min, max, step, enforceStep, inputType: type = 'number' } = config;
|
|
3563
|
+
const parsers = numberFieldTransformParser(config);
|
|
3369
3564
|
const validators = [];
|
|
3370
3565
|
if (step && enforceStep) {
|
|
3371
3566
|
validators.push(isDivisibleBy(step));
|
|
@@ -3373,7 +3568,7 @@ function numberField(config) {
|
|
|
3373
3568
|
return formlyField({
|
|
3374
3569
|
key,
|
|
3375
3570
|
type: 'input',
|
|
3376
|
-
...
|
|
3571
|
+
...propsAndConfigForFieldConfig(config, {
|
|
3377
3572
|
type,
|
|
3378
3573
|
min,
|
|
3379
3574
|
max,
|
|
@@ -3381,7 +3576,8 @@ function numberField(config) {
|
|
|
3381
3576
|
}),
|
|
3382
3577
|
...validatorsForFieldConfig({
|
|
3383
3578
|
validators
|
|
3384
|
-
})
|
|
3579
|
+
}),
|
|
3580
|
+
parsers
|
|
3385
3581
|
});
|
|
3386
3582
|
}
|
|
3387
3583
|
|
|
@@ -3466,30 +3662,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
|
|
|
3466
3662
|
}]
|
|
3467
3663
|
}] });
|
|
3468
3664
|
|
|
3665
|
+
function textFieldTransformParser(config) {
|
|
3666
|
+
const { parsers: inputParsers, transform } = config;
|
|
3667
|
+
let parsers;
|
|
3668
|
+
if (inputParsers) {
|
|
3669
|
+
parsers = inputParsers;
|
|
3670
|
+
}
|
|
3671
|
+
if (transform) {
|
|
3672
|
+
const transformParser = transformStringFunction(transform);
|
|
3673
|
+
parsers = concatArrays([transformParser], parsers);
|
|
3674
|
+
}
|
|
3675
|
+
return parsers;
|
|
3676
|
+
}
|
|
3469
3677
|
function textField(config) {
|
|
3470
|
-
const { key, pattern, minLength, maxLength, inputType: type = 'text' } = config;
|
|
3678
|
+
const { transform, key, pattern, minLength, maxLength, inputType: type = 'text' } = config;
|
|
3679
|
+
const parsers = textFieldTransformParser(config);
|
|
3471
3680
|
return formlyField({
|
|
3472
3681
|
key,
|
|
3473
3682
|
type: 'input',
|
|
3474
|
-
...
|
|
3683
|
+
...propsAndConfigForFieldConfig(config, {
|
|
3475
3684
|
type,
|
|
3476
3685
|
minLength,
|
|
3477
3686
|
maxLength,
|
|
3478
3687
|
pattern
|
|
3479
|
-
})
|
|
3688
|
+
}),
|
|
3689
|
+
parsers
|
|
3480
3690
|
});
|
|
3481
3691
|
}
|
|
3482
3692
|
function textAreaField(config) {
|
|
3483
3693
|
const { key, rows = 3, pattern, minLength, maxLength } = config;
|
|
3694
|
+
const parsers = textFieldTransformParser(config);
|
|
3484
3695
|
return formlyField({
|
|
3485
3696
|
key,
|
|
3486
3697
|
type: 'textarea',
|
|
3487
|
-
...
|
|
3698
|
+
...propsAndConfigForFieldConfig(config, {
|
|
3488
3699
|
rows,
|
|
3489
3700
|
minLength,
|
|
3490
3701
|
maxLength,
|
|
3491
3702
|
pattern
|
|
3492
|
-
})
|
|
3703
|
+
}),
|
|
3704
|
+
parsers
|
|
3493
3705
|
});
|
|
3494
3706
|
}
|
|
3495
3707
|
|
|
@@ -3498,7 +3710,7 @@ function phoneField(config = {}) {
|
|
|
3498
3710
|
const fieldConfig = formlyField({
|
|
3499
3711
|
key,
|
|
3500
3712
|
type: 'intphone',
|
|
3501
|
-
...
|
|
3713
|
+
...propsAndConfigForFieldConfig(config, {
|
|
3502
3714
|
preferredCountries,
|
|
3503
3715
|
onlyCountries
|
|
3504
3716
|
})
|
|
@@ -3601,7 +3813,10 @@ function stateField(config = {}) {
|
|
|
3601
3813
|
pattern,
|
|
3602
3814
|
autocomplete,
|
|
3603
3815
|
required,
|
|
3604
|
-
maxLength
|
|
3816
|
+
maxLength,
|
|
3817
|
+
transform: {
|
|
3818
|
+
toUppercase: true
|
|
3819
|
+
}
|
|
3605
3820
|
});
|
|
3606
3821
|
}
|
|
3607
3822
|
function countryField(config = {}) {
|
|
@@ -4380,5 +4595,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
|
|
|
4380
4595
|
* Generated bundle index. Do not edit.
|
|
4381
4596
|
*/
|
|
4382
4597
|
|
|
4383
|
-
export { APP_ACTION_FORM_DISABLED_KEY, AUTO_TOUCH_WRAPPER_KEY, AbstractAsyncFormlyFormDirective, AbstractConfigAsyncFormlyFormDirective, AbstractDbxPickableItemFieldDirective, AbstractDbxSearchableFieldDisplayDirective, AbstractDbxSearchableValueFieldDirective, AbstractFormExpandableSectionWrapperDirective, AbstractFormlyFormDirective, AbstractSyncFormlyFormDirective, AutoTouchFieldWrapperComponent, ChecklistItemFieldDataSetBuilder, DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN, DEFAULT_FORM_DISABLED_KEY, DEFAULT_HAS_VALUE_FN, DEFAULT_LAT_LNG_TEXT_FIELD_PATTERN_MESSAGE, DEFAULT_LAT_LNG_TEXT_FIELD_PLACEHOLDER, DEFAULT_PREFERRED_COUNTRIES, DISPLAY_FOR_TIMEZONE_STRING_VALUE, DbxActionFormDirective, DbxActionFormSafetyDirective, DbxChecklistItemContentComponent, DbxChecklistItemFieldComponent, DbxDateTimeFieldComponent, DbxDateTimeFieldTimeMode, DbxDateTimeValueMode, DbxDefaultChecklistItemFieldDisplayComponent, DbxDefaultSearchableFieldDisplayComponent, DbxForm, DbxFormActionModule, DbxFormActionTransitionModule, DbxFormComponentFieldComponent, DbxFormExpandWrapperComponent, DbxFormExtensionModule, DbxFormFlexWrapperComponent, DbxFormFormlyArrayFieldModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlyChecklistItemFieldModule, DbxFormFormlyComponentFieldModule, DbxFormFormlyDateFieldModule, DbxFormFormlyFieldModule, DbxFormFormlyNumberFieldModule, DbxFormFormlyPhoneFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySelectionModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyTextFieldModule, DbxFormFormlyValueModule, DbxFormFormlyWrapperModule, DbxFormInfoWrapperComponent, DbxFormIoModule, DbxFormLayoutModule, DbxFormLoadingSourceDirective, DbxFormModule, DbxFormRepeatArrayTypeComponent, DbxFormSectionWrapperComponent, DbxFormSourceDirective, DbxFormSpacerComponent, DbxFormState, DbxFormSubsectionWrapperComponent, DbxFormToggleWrapperComponent, DbxFormValueChangesDirective, DbxFormWorkingWrapperComponent, DbxFormlyContext, DbxFormlyFieldsContextDirective, DbxFormlyFormComponent, DbxFormlyModule, DbxMutableForm, DbxPhoneFieldComponent, DbxPickableChipListFieldComponent, DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent, DbxSearchableChipFieldComponent, DbxSearchableFieldAutocompleteItemComponent, DbxSearchableTextFieldComponent, DbxTextEditorFieldComponent, EXPANDABLE_WRAPPER_KEY, FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY, FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY, FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY, FLEX_WRAPPER_KEY, INFO_WRAPPER_KEY, INVALID_PHONE_NUMBER_MESSAGE, IS_DIVISIBLE_BY_VALIDATION_KEY, LABEL_STRING_MAX_LENGTH, MAX_LENGTH_VALIDATION_MESSAGE, MAX_VALIDATION_MESSAGE, MIN_LENGTH_VALIDATION_MESSAGE, MIN_VALIDATION_MESSAGE, PHONE_LABEL_MAX_LENGTH, REQUIRED_VALIDATION_MESSAGE, SEARCH_STRING_MAX_LENGTH, SECTION_WRAPPER_KEY, STYLE_WRAPPER_KEY, SUBSECTION_WRAPPER_KEY, TAKE_NEXT_UPCOMING_TIME_CONFIG_OBS, TOGGLE_WRAPPER_KEY, WORKING_WRAPPER_KEY, addWrapperToFormlyFieldConfig, addressField, addressFormlyFields, addressLineField, addressListField, autoTouchWrapper, checkIsFieldFlexLayoutGroupFieldConfig, checkboxField, checklistItemField, chipTextField, cityField, componentField, countryField, dateTimeField, dbxDateTimeInputValueParseFactory, dbxDateTimeOutputValueFactory, dbxFormSourceObservable, defaultValidationMessages, disableFormlyFieldAutofillAttributes, emailField, expandWrapper, fieldValueIsAvailableValidator, fieldValuesAreEqualValidator, filterPartialPotentialFieldConfigValuesFromObject, filterPickableItemFieldValuesByLabel, filterPickableItemFieldValuesByLabelFilterFunction, flexLayoutWrapper, formlyField, hiddenField, infoWrapper, isDivisibleBy, isDomain, isInRange, isTruthy, latLngTextField, makeMetaFilterSearchableFieldValueDisplayFn, maxLengthValidationMessage, maxValidationMessage, mergePropsValueObjects, minLengthValidationMessage, minValidationMessage, nameField, numberField, partialPotentialFieldConfigKeys, partialPotentialFieldConfigKeysFilter, phoneAndLabelSectionField, phoneField, phoneListField, pickableItemChipField, pickableItemListField, propsForFieldConfig, propsValueForFieldConfig, provideDbxForm, provideDbxMutableForm, provideFormlyContext, repeatArrayField, searchableChipField, searchableStringChipField, searchableTextField, sectionWrapper, sortPickableItemsByLabel, stateField, styleWrapper, subsectionWrapper, textAreaField, textEditorField, textField, textIsAvailableField, textPasswordField, textPasswordWithVerifyFieldGroup, textVerifyPasswordField, timeOnlyField, timezoneStringField, timezoneStringSearchFunction, toggleField, toggleWrapper, usernamePasswordLoginFields, validatorsForFieldConfig, valueSelectionField, workingWrapper, wrappedPhoneAndLabelField, zipCodeField };
|
|
4598
|
+
export { APP_ACTION_FORM_DISABLED_KEY, AUTO_TOUCH_WRAPPER_KEY, AbstractAsyncFormlyFormDirective, AbstractConfigAsyncFormlyFormDirective, AbstractDbxPickableItemFieldDirective, AbstractDbxSearchableFieldDisplayDirective, AbstractDbxSearchableValueFieldDirective, AbstractFormExpandableSectionWrapperDirective, AbstractFormlyFormDirective, AbstractSyncFormlyFormDirective, AutoTouchFieldWrapperComponent, ChecklistItemFieldDataSetBuilder, DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN, DEFAULT_FORM_DISABLED_KEY, DEFAULT_HAS_VALUE_FN, DEFAULT_LAT_LNG_TEXT_FIELD_PATTERN_MESSAGE, DEFAULT_LAT_LNG_TEXT_FIELD_PLACEHOLDER, DEFAULT_PREFERRED_COUNTRIES, DISPLAY_FOR_TIMEZONE_STRING_VALUE, DbxActionFormDirective, DbxActionFormSafetyDirective, DbxChecklistItemContentComponent, DbxChecklistItemFieldComponent, DbxDateTimeFieldComponent, DbxDateTimeFieldTimeMode, DbxDateTimeValueMode, DbxDefaultChecklistItemFieldDisplayComponent, DbxDefaultSearchableFieldDisplayComponent, DbxForm, DbxFormActionModule, DbxFormActionTransitionModule, DbxFormComponentFieldComponent, DbxFormExpandWrapperComponent, DbxFormExtensionModule, DbxFormFlexWrapperComponent, DbxFormFormlyArrayFieldModule, DbxFormFormlyBooleanFieldModule, DbxFormFormlyChecklistItemFieldModule, DbxFormFormlyComponentFieldModule, DbxFormFormlyDateFieldModule, DbxFormFormlyFieldModule, DbxFormFormlyNumberFieldModule, DbxFormFormlyPhoneFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySelectionModule, DbxFormFormlyTextEditorFieldModule, DbxFormFormlyTextFieldModule, DbxFormFormlyValueModule, DbxFormFormlyWrapperModule, DbxFormInfoWrapperComponent, DbxFormIoModule, DbxFormLayoutModule, DbxFormLoadingSourceDirective, DbxFormModule, DbxFormRepeatArrayTypeComponent, DbxFormSectionWrapperComponent, DbxFormSourceDirective, DbxFormSpacerComponent, DbxFormState, DbxFormSubsectionWrapperComponent, DbxFormToggleWrapperComponent, DbxFormValueChangesDirective, DbxFormWorkingWrapperComponent, DbxFormlyContext, DbxFormlyFieldsContextDirective, DbxFormlyFormComponent, DbxFormlyModule, DbxMutableForm, DbxPhoneFieldComponent, DbxPickableChipListFieldComponent, DbxPickableListFieldComponent, DbxPickableListFieldItemListComponent, DbxPickableListFieldItemListViewComponent, DbxPickableListFieldItemListViewItemComponent, DbxSearchableChipFieldComponent, DbxSearchableFieldAutocompleteItemComponent, DbxSearchableTextFieldComponent, DbxTextEditorFieldComponent, EXPANDABLE_WRAPPER_KEY, FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY, FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY, FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY, FLEX_WRAPPER_KEY, INFO_WRAPPER_KEY, INVALID_PHONE_NUMBER_MESSAGE, IS_DIVISIBLE_BY_VALIDATION_KEY, LABEL_STRING_MAX_LENGTH, MAX_LENGTH_VALIDATION_MESSAGE, MAX_VALIDATION_MESSAGE, MIN_LENGTH_VALIDATION_MESSAGE, MIN_VALIDATION_MESSAGE, PHONE_LABEL_MAX_LENGTH, REQUIRED_VALIDATION_MESSAGE, SEARCH_STRING_MAX_LENGTH, SECTION_WRAPPER_KEY, STYLE_WRAPPER_KEY, SUBSECTION_WRAPPER_KEY, TAKE_NEXT_UPCOMING_TIME_CONFIG_OBS, TOGGLE_WRAPPER_KEY, WORKING_WRAPPER_KEY, addWrapperToFormlyFieldConfig, addressField, addressFormlyFields, addressLineField, addressListField, autoTouchWrapper, checkIsFieldFlexLayoutGroupFieldConfig, checkboxField, checklistItemField, chipTextField, cityField, componentField, countryField, dateRangeField, dateTimeField, dbxDateTimeInputValueParseFactory, dbxDateTimeOutputValueFactory, dbxFormSourceObservable, dbxFormSourceObservableFromStream, defaultValidationMessages, disableFormlyFieldAutofillAttributes, emailField, expandWrapper, fieldValueIsAvailableValidator, fieldValuesAreEqualValidator, filterPartialPotentialFieldConfigValuesFromObject, filterPickableItemFieldValuesByLabel, filterPickableItemFieldValuesByLabelFilterFunction, flexLayoutWrapper, formlyField, hiddenField, infoWrapper, isDivisibleBy, isDomain, isInRange, isTruthy, latLngTextField, makeMetaFilterSearchableFieldValueDisplayFn, maxLengthValidationMessage, maxValidationMessage, mergePropsValueObjects, minLengthValidationMessage, minValidationMessage, nameField, numberField, numberFieldTransformParser, partialPotentialFieldConfigKeys, partialPotentialFieldConfigKeysFilter, phoneAndLabelSectionField, phoneField, phoneListField, pickableItemChipField, pickableItemListField, propsAndConfigForFieldConfig, propsForFieldConfig, propsValueForFieldConfig, provideDbxForm, provideDbxMutableForm, provideFormlyContext, repeatArrayField, searchableChipField, searchableStringChipField, searchableTextField, sectionWrapper, sortPickableItemsByLabel, stateField, styleWrapper, subsectionWrapper, syncConfigValueObs, textAreaField, textEditorField, textField, textFieldTransformParser, textIsAvailableField, textPasswordField, textPasswordWithVerifyFieldGroup, textVerifyPasswordField, timeOnlyField, timezoneStringField, timezoneStringSearchFunction, toggleField, toggleWrapper, usernamePasswordLoginFields, validatorsForFieldConfig, valueSelectionField, workingWrapper, wrappedPhoneAndLabelField, zipCodeField };
|
|
4384
4599
|
//# sourceMappingURL=dereekb-dbx-form.mjs.map
|