@dereekb/dbx-form 9.15.5 → 9.15.7

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.
Files changed (46) hide show
  1. package/esm2020/lib/formly/field/checklist/checklist.item.field.mjs +3 -3
  2. package/esm2020/lib/formly/field/field.mjs +19 -3
  3. package/esm2020/lib/formly/field/selection/pickable/pickable.field.mjs +4 -4
  4. package/esm2020/lib/formly/field/selection/searchable/searchable.field.mjs +4 -4
  5. package/esm2020/lib/formly/field/selection/selection.field.mjs +3 -3
  6. package/esm2020/lib/formly/field/texteditor/texteditor.field.mjs +3 -3
  7. package/esm2020/lib/formly/field/value/array/array.field.mjs +3 -3
  8. package/esm2020/lib/formly/field/value/boolean/boolean.field.mjs +4 -4
  9. package/esm2020/lib/formly/field/value/date/datetime.field.component.mjs +111 -12
  10. package/esm2020/lib/formly/field/value/date/datetime.field.mjs +35 -7
  11. package/esm2020/lib/formly/field/value/number/number.field.mjs +19 -4
  12. package/esm2020/lib/formly/field/value/phone/phone.field.mjs +3 -3
  13. package/esm2020/lib/formly/field/value/text/text.additional.field.mjs +5 -2
  14. package/esm2020/lib/formly/field/value/text/text.field.mjs +24 -7
  15. package/esm2020/lib/formly/field/wrapper/section.wrapper.component.mjs +5 -8
  16. package/esm2020/lib/formly/field/wrapper/subsection.wrapper.component.mjs +5 -8
  17. package/esm2020/lib/validator/number.mjs +7 -1
  18. package/esm2020/mapbox/lib/field/latlng/latlng.field.mjs +3 -3
  19. package/esm2020/mapbox/lib/field/zoom/zoom.field.mjs +3 -3
  20. package/fesm2015/dereekb-dbx-form-mapbox.mjs +3 -3
  21. package/fesm2015/dereekb-dbx-form-mapbox.mjs.map +1 -1
  22. package/fesm2015/dereekb-dbx-form.mjs +208 -51
  23. package/fesm2015/dereekb-dbx-form.mjs.map +1 -1
  24. package/fesm2020/dereekb-dbx-form-mapbox.mjs +3 -3
  25. package/fesm2020/dereekb-dbx-form-mapbox.mjs.map +1 -1
  26. package/fesm2020/dereekb-dbx-form.mjs +226 -50
  27. package/fesm2020/dereekb-dbx-form.mjs.map +1 -1
  28. package/lib/formly/field/field.d.ts +29 -3
  29. package/lib/formly/field/value/array/array.field.d.ts +6 -0
  30. package/lib/formly/field/value/date/datetime.field.component.d.ts +52 -3
  31. package/lib/formly/field/value/date/datetime.field.d.ts +5 -0
  32. package/lib/formly/field/value/number/number.field.d.ts +4 -2
  33. package/lib/formly/field/value/text/text.additional.field.d.ts +3 -6
  34. package/lib/formly/field/value/text/text.field.d.ts +6 -3
  35. package/lib/formly/field/wrapper/section.wrapper.component.d.ts +3 -6
  36. package/lib/formly/field/wrapper/subsection.wrapper.component.d.ts +3 -6
  37. package/lib/formly/field/wrapper/wrapper.d.ts +2 -2
  38. package/lib/validator/number.d.ts +6 -0
  39. package/mapbox/esm2020/lib/field/latlng/latlng.field.mjs +3 -3
  40. package/mapbox/esm2020/lib/field/zoom/zoom.field.mjs +3 -3
  41. package/mapbox/fesm2015/dereekb-dbx-form-mapbox.mjs +3 -3
  42. package/mapbox/fesm2015/dereekb-dbx-form-mapbox.mjs.map +1 -1
  43. package/mapbox/fesm2020/dereekb-dbx-form-mapbox.mjs +3 -3
  44. package/mapbox/fesm2020/dereekb-dbx-form-mapbox.mjs.map +1 -1
  45. package/mapbox/package.json +4 -4
  46. package/package.json +4 -4
@@ -4,7 +4,7 @@ import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i1$1 from '@dereekb/dbx-web';
6
6
  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';
7
- import { isPast, addSeconds, isSameMinute, startOfDay, isSameDay, addMinutes } from 'date-fns';
7
+ import { isPast, addSeconds, isSameMinute, startOfDay, isSameDay, addMinutes, addDays } from 'date-fns';
8
8
  import { BehaviorSubject, switchMap, first, exhaustMap, of, catchError, delay, filter, combineLatest, map, distinctUntilChanged, mergeMap, shareReplay, startWith, debounceTime, Subject, skipWhile, interval, tap, merge, throttleTime, scan, timer } from 'rxjs';
9
9
  import { LockSet, SubscriptionObject, asObservable, loadingStateHasFinishedLoading, switchMapMaybeObs, filterMaybe, switchMapMaybeDefault, SimpleLoadingContext, startWithBeginLoading, mapLoadingStateResults, successResult, ListLoadingStateContextInstance, isListLoadingStateEmpty, LoadingStateContextInstance, skipFirstMaybe, asyncPusherCache, scanCount } from '@dereekb/rxjs';
10
10
  import * as i2 from '@dereekb/dbx-core';
@@ -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';
@@ -657,16 +657,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
657
657
  }] });
658
658
 
659
659
  class DbxFormSectionWrapperComponent extends FieldWrapper {
660
- get header() {
661
- return this.props.header;
662
- }
663
- get hint() {
664
- return this.props.hint;
660
+ get headerConfig() {
661
+ return this.props;
665
662
  }
666
663
  }
667
664
  DbxFormSectionWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxFormSectionWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
668
665
  DbxFormSectionWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: DbxFormSectionWrapperComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
669
- <dbx-section [header]="header" [hint]="hint">
666
+ <dbx-section [headerConfig]="headerConfig">
670
667
  <ng-container #fieldComponent></ng-container>
671
668
  </dbx-section>
672
669
  `, isInline: true, dependencies: [{ kind: "component", type: i1$1.DbxSectionComponent, selector: "dbx-section", inputs: ["elevate"] }] });
@@ -674,7 +671,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
674
671
  type: Component,
675
672
  args: [{
676
673
  template: `
677
- <dbx-section [header]="header" [hint]="hint">
674
+ <dbx-section [headerConfig]="headerConfig">
678
675
  <ng-container #fieldComponent></ng-container>
679
676
  </dbx-section>
680
677
  `
@@ -711,16 +708,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
711
708
  }] });
712
709
 
713
710
  class DbxFormSubsectionWrapperComponent extends FieldWrapper {
714
- get header() {
715
- return this.props.header;
716
- }
717
- get hint() {
718
- return this.props.hint;
711
+ get headerConfig() {
712
+ return this.props;
719
713
  }
720
714
  }
721
715
  DbxFormSubsectionWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxFormSubsectionWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
722
716
  DbxFormSubsectionWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: DbxFormSubsectionWrapperComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
723
- <dbx-subsection [header]="header" [hint]="hint">
717
+ <dbx-subsection [headerConfig]="headerConfig">
724
718
  <ng-container #fieldComponent></ng-container>
725
719
  </dbx-subsection>
726
720
  `, isInline: true, dependencies: [{ kind: "component", type: i1$1.DbxSubSectionComponent, selector: "dbx-subsection" }] });
@@ -728,7 +722,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
728
722
  type: Component,
729
723
  args: [{
730
724
  template: `
731
- <dbx-subsection [header]="header" [hint]="hint">
725
+ <dbx-subsection [headerConfig]="headerConfig">
732
726
  <ng-container #fieldComponent></ng-container>
733
727
  </dbx-subsection>
734
728
  `
@@ -1185,10 +1179,20 @@ function formlyField(fieldConfig) {
1185
1179
  }
1186
1180
  return fieldConfig;
1187
1181
  }
1188
- function propsForFieldConfig(fieldConfig, override) {
1182
+ /**
1183
+ * Creates an object with propers, expressions, and parsers properly configured from the input FieldConfig.
1184
+ *
1185
+ * @param fieldConfig
1186
+ * @param override
1187
+ * @returns
1188
+ */
1189
+ function propsAndConfigForFieldConfig(fieldConfig, override) {
1190
+ const { expressions, parsers } = fieldConfig;
1189
1191
  const props = propsValueForFieldConfig(fieldConfig, override);
1190
1192
  return {
1191
- props
1193
+ props,
1194
+ expressions,
1195
+ parsers
1192
1196
  };
1193
1197
  }
1194
1198
  const partialPotentialFieldConfigKeys = ['label', 'placeholder', 'required', 'readonly', 'description', 'autocomplete'];
@@ -1254,10 +1258,16 @@ function validatorsForFieldConfig(input) {
1254
1258
  }
1255
1259
  return config;
1256
1260
  }
1261
+ /**
1262
+ * MARK: Compat
1263
+ *
1264
+ * @deprecated use propsAndConfigForFieldConfig instead.
1265
+ */
1266
+ const propsForFieldConfig = propsAndConfigForFieldConfig;
1257
1267
 
1258
1268
  function checklistItemField(config) {
1259
1269
  const { key, displayContentObs, componentClass } = config;
1260
- const fieldConfig = formlyField(Object.assign({ key, type: 'checklistitem' }, propsForFieldConfig(config, {
1270
+ const fieldConfig = formlyField(Object.assign({ key, type: 'checklistitem' }, propsAndConfigForFieldConfig(config, {
1261
1271
  displayContentObs,
1262
1272
  componentClass
1263
1273
  })));
@@ -1866,11 +1876,11 @@ function sortPickableItemsByLabel(chips) {
1866
1876
  }
1867
1877
  function pickableItemChipField(config) {
1868
1878
  const { key } = config;
1869
- return formlyField(Object.assign({ key, type: 'pickablechipfield' }, propsForFieldConfig(config, Object.assign(Object.assign({}, config), { autocomplete: false }))));
1879
+ return formlyField(Object.assign({ key, type: 'pickablechipfield' }, propsAndConfigForFieldConfig(config, Object.assign(Object.assign({}, config), { autocomplete: false }))));
1870
1880
  }
1871
1881
  function pickableItemListField(config) {
1872
1882
  const { key } = config;
1873
- return formlyField(Object.assign({ key, type: 'pickablelistfield' }, propsForFieldConfig(config, Object.assign(Object.assign({}, config), { autocomplete: false }))));
1883
+ return formlyField(Object.assign({ key, type: 'pickablelistfield' }, propsAndConfigForFieldConfig(config, Object.assign(Object.assign({}, config), { autocomplete: false }))));
1874
1884
  }
1875
1885
 
1876
1886
  const DBX_SEARCHABLE_FIELD_COMPONENT_DATA_TOKEN = new InjectionToken('DbxSearchableField');
@@ -2286,11 +2296,11 @@ function searchableStringChipField(config) {
2286
2296
  }
2287
2297
  function searchableChipField(config) {
2288
2298
  const { key, placeholder } = config;
2289
- return formlyField(Object.assign({ key, type: 'searchablechipfield' }, propsForFieldConfig(config, Object.assign(Object.assign({}, config), { placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : 'Add...', autocomplete: false }))));
2299
+ return formlyField(Object.assign({ key, type: 'searchablechipfield' }, propsAndConfigForFieldConfig(config, Object.assign(Object.assign({}, config), { placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : 'Add...', autocomplete: false }))));
2290
2300
  }
2291
2301
  function searchableTextField(config) {
2292
2302
  const { key } = config;
2293
- return formlyField(Object.assign({ key, type: 'searchabletextfield' }, propsForFieldConfig(config, Object.assign(Object.assign({}, config), { autocomplete: false }))));
2303
+ return formlyField(Object.assign({ key, type: 'searchabletextfield' }, propsAndConfigForFieldConfig(config, Object.assign(Object.assign({}, config), { autocomplete: false }))));
2294
2304
  }
2295
2305
 
2296
2306
  /**
@@ -2424,7 +2434,7 @@ function valueSelectionField(config) {
2424
2434
  selectAllOption: typeof inputSelectAllOption === 'boolean' ? 'Select All' : inputSelectAllOption
2425
2435
  };
2426
2436
  }
2427
- return formlyField(Object.assign({ key, type: native ? 'native-select' : 'select' }, propsForFieldConfig(config, Object.assign({ options: config.options, multiple: (_a = config.multiple) !== null && _a !== void 0 ? _a : false }, selectAllOptionConfig))));
2437
+ return formlyField(Object.assign({ key, type: native ? 'native-select' : 'select' }, propsAndConfigForFieldConfig(config, Object.assign({ options: config.options, multiple: (_a = config.multiple) !== null && _a !== void 0 ? _a : false }, selectAllOptionConfig))));
2428
2438
  }
2429
2439
 
2430
2440
  class DbxFormFormlySelectionModule {
@@ -2571,7 +2581,7 @@ function textEditorField(config) {
2571
2581
  // https://formly.dev/examples/validation/async-validation-update-on
2572
2582
  // Set to trigger value update on blurs with the form. However, the value is set internally too.
2573
2583
  updateOn: 'blur'
2574
- } }, propsForFieldConfig(config, {
2584
+ } }, propsAndConfigForFieldConfig(config, {
2575
2585
  minLength,
2576
2586
  maxLength
2577
2587
  })));
@@ -2754,7 +2764,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
2754
2764
 
2755
2765
  function repeatArrayField(config) {
2756
2766
  const { key, repeatFieldGroup, maxLength, addText, removeText, labelForField } = config;
2757
- return formlyField(Object.assign(Object.assign({ key, type: 'repeatarray' }, propsForFieldConfig(config, {
2767
+ return formlyField(Object.assign(Object.assign({ key, type: 'repeatarray' }, propsAndConfigForFieldConfig(config, {
2758
2768
  maxLength,
2759
2769
  labelForField,
2760
2770
  addText,
@@ -2780,11 +2790,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
2780
2790
 
2781
2791
  function toggleField(config) {
2782
2792
  const { key, defaultValue } = config;
2783
- return formlyField(Object.assign({ key, type: 'toggle', wrappers: ['autotouch', 'form-field'], defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : false }, propsForFieldConfig(config)));
2793
+ return formlyField(Object.assign({ key, type: 'toggle', wrappers: ['autotouch', 'form-field'], defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : false }, propsAndConfigForFieldConfig(config)));
2784
2794
  }
2785
2795
  function checkboxField(config) {
2786
2796
  const { key, defaultValue } = config;
2787
- return formlyField(Object.assign({ key, type: 'checkbox', defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : false }, propsForFieldConfig(config)));
2797
+ return formlyField(Object.assign({ key, type: 'checkbox', defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : false }, propsAndConfigForFieldConfig(config)));
2788
2798
  }
2789
2799
  /*
2790
2800
  export function acceptTermsField({ key = 'accept', label = 'Accept Terms', description = 'In order to proceed, please accept terms', required = true }
@@ -2867,6 +2877,20 @@ function dbxDateTimeOutputValueFactory(mode) {
2867
2877
  }
2868
2878
  return factory;
2869
2879
  }
2880
+ function syncConfigValueObs(parseConfigsObs, type) {
2881
+ return parseConfigsObs.pipe(switchMap((x) => {
2882
+ const config = x.find((y) => y.syncType === type);
2883
+ let result;
2884
+ if (config) {
2885
+ const { control } = config;
2886
+ result = control.valueChanges.pipe(startWith(control.value), map(safeToJsDate));
2887
+ }
2888
+ else {
2889
+ result = of(undefined);
2890
+ }
2891
+ return result;
2892
+ }), distinctUntilChanged(), shareReplay(1));
2893
+ }
2870
2894
  class DbxDateTimeFieldComponent extends FieldType$1 {
2871
2895
  constructor(cdRef) {
2872
2896
  super();
@@ -2896,13 +2920,37 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
2896
2920
  validators: [Validators.pattern(/^(now)$|^([0-9]|(0[0-9])|(1[0-9])|(2[0-3]))(:)?([0-5][0-9])?(\s)?([apAP][Mm])?(\\s)*$/)]
2897
2921
  });
2898
2922
  this._config = new BehaviorSubject(undefined);
2923
+ this._syncConfigObs = new BehaviorSubject(undefined);
2899
2924
  this.fullDay$ = this.fullDayControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value))));
2900
2925
  this.showTimeInput$ = this.fullDay$.pipe(map((x) => !x && this.timeMode !== DbxDateTimeFieldTimeMode.NONE));
2901
2926
  this.showAddTime$ = this.showTimeInput$.pipe(map((x) => !x && this.timeMode === DbxDateTimeFieldTimeMode.OPTIONAL), shareReplay(1));
2902
2927
  this.date$ = this.dateInputCtrl.valueChanges.pipe(startWith(this.dateInputCtrl.value), filterMaybe(), shareReplay(1));
2903
2928
  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));
2904
2929
  this.timeInput$ = this._updateTime.pipe(debounceTime(5), map(() => this.timeInputCtrl.value || ''), distinctUntilChanged());
2905
- this.config$ = this._config.pipe(switchMapMaybeDefault(), shareReplay(1));
2930
+ this.syncConfigObs$ = this._syncConfigObs.pipe(switchMapMaybeDefault(), shareReplay(1));
2931
+ this.parsedSyncConfigs$ = this.syncConfigObs$.pipe(map((x) => {
2932
+ let parsed;
2933
+ if (x) {
2934
+ parsed = filterMaybeValues(asArray(x).map((y) => {
2935
+ const control = this.form.get(y.syncWith);
2936
+ if (control) {
2937
+ return Object.assign({ control }, y);
2938
+ }
2939
+ else {
2940
+ return undefined;
2941
+ }
2942
+ }));
2943
+ }
2944
+ else {
2945
+ parsed = [];
2946
+ }
2947
+ return parsed;
2948
+ }), shareReplay(1));
2949
+ this.syncConfigBeforeValue$ = syncConfigValueObs(this.parsedSyncConfigs$, 'before');
2950
+ this.syncConfigAfterValue$ = syncConfigValueObs(this.parsedSyncConfigs$, 'after');
2951
+ // TODO: Get min/max using the DateTimePickerConfiguration too
2952
+ this.dateInputMin$ = this.syncConfigBeforeValue$;
2953
+ this.dateInputMax$ = this.syncConfigAfterValue$;
2906
2954
  this.rawDateTime$ = combineLatest([this.dateValue$, this.timeInput$.pipe(startWith(null)), this.fullDay$]).pipe(map(([date, timeString, fullDay]) => {
2907
2955
  var _a;
2908
2956
  let result;
@@ -2928,7 +2976,19 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
2928
2976
  }
2929
2977
  return result;
2930
2978
  }), distinctUntilChanged((a, b) => a != null && b != null && isSameMinute(a, b)), shareReplay(1));
2931
- this.timeOutput$ = combineLatest([this.rawDateTime$, this._offset, this.config$.pipe(distinctUntilChanged())]).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]) => {
2979
+ this.config$ = combineLatest([this._config.pipe(switchMapMaybeDefault(), shareReplay(1)), this.dateInputMin$, this.dateInputMax$]).pipe(map(([x, dateInputMin, dateInputMax]) => {
2980
+ var _a;
2981
+ let result = x;
2982
+ if (dateInputMin != null || dateInputMax != null) {
2983
+ const { min: limitMin, max: limitMax } = (_a = x === null || x === void 0 ? void 0 : x.limits) !== null && _a !== void 0 ? _a : {};
2984
+ const min = findMinDate([dateInputMin, limitMin]);
2985
+ const max = findMaxDate([dateInputMax, limitMax]);
2986
+ result = Object.assign(Object.assign({}, x), { limits: Object.assign(Object.assign({}, x === null || x === void 0 ? void 0 : x.limits), { min,
2987
+ max }) });
2988
+ }
2989
+ return result;
2990
+ }), distinctUntilChanged(), shareReplay(1));
2991
+ 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]) => {
2932
2992
  if (date != null) {
2933
2993
  const instance = new DateTimeMinuteInstance(Object.assign(Object.assign({ date }, config), { roundDownToMinute: true }));
2934
2994
  date = instance.limit(date);
@@ -2938,6 +2998,14 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
2938
2998
  return date;
2939
2999
  }), distinctUntilChanged((a, b) => a != null && b != null && isSameMinute(a, b)), shareReplay(1));
2940
3000
  }
3001
+ get dateLabel() {
3002
+ var _a;
3003
+ return (_a = this.props.dateLabel) !== null && _a !== void 0 ? _a : 'Date';
3004
+ }
3005
+ get timeLabel() {
3006
+ var _a;
3007
+ return (_a = this.props.timeLabel) !== null && _a !== void 0 ? _a : 'Time';
3008
+ }
2941
3009
  get dateOnly() {
2942
3010
  return this.timeMode === DbxDateTimeFieldTimeMode.NONE;
2943
3011
  }
@@ -2961,10 +3029,15 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
2961
3029
  get description() {
2962
3030
  return this.field.props.description;
2963
3031
  }
3032
+ get hideDateHint() {
3033
+ var _a;
3034
+ return (_a = this.field.props.hideDateHint) !== null && _a !== void 0 ? _a : false;
3035
+ }
2964
3036
  ngOnInit() {
2965
- var _a, _b;
3037
+ var _a, _b, _c, _d;
2966
3038
  this._formControlObs.next(this.formControl);
2967
3039
  this._config.next((_b = (_a = this.dateTimeField).getConfigObs) === null || _b === void 0 ? void 0 : _b.call(_a));
3040
+ this._syncConfigObs.next((_d = (_c = this.dateTimeField).getSyncFieldsObs) === null || _d === void 0 ? void 0 : _d.call(_c));
2968
3041
  const valueFactory = dbxDateTimeOutputValueFactory(this.valueMode);
2969
3042
  this._sub.subscription = this.timeOutput$.pipe(skipFirstMaybe()).subscribe((dateValue) => {
2970
3043
  const value = valueFactory(dateValue);
@@ -3022,14 +3095,14 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
3022
3095
  this._formControlObs.complete();
3023
3096
  this._config.complete();
3024
3097
  this._updateTime.complete();
3098
+ this._syncConfigObs.complete();
3025
3099
  this._sub.destroy();
3026
3100
  this._valueSub.destroy();
3027
3101
  }
3028
3102
  datePicked(event) {
3029
3103
  const date = event.value;
3030
3104
  if (date) {
3031
- this.dateInputCtrl.setValue(date);
3032
- this._updateTime.next();
3105
+ this.setDateInputValue(date);
3033
3106
  }
3034
3107
  }
3035
3108
  setLogicalTime(time) {
@@ -3039,12 +3112,44 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
3039
3112
  this.setTime(timeString);
3040
3113
  }
3041
3114
  }
3115
+ setDateInputValue(date) {
3116
+ this.dateInputCtrl.setValue(date);
3117
+ this._updateTime.next();
3118
+ }
3042
3119
  setTime(time) {
3043
3120
  this.timeInputCtrl.setValue(time);
3044
3121
  this._offset.next(0);
3045
3122
  this._updateTime.next();
3046
3123
  }
3047
- keydownOnInput(event) {
3124
+ keydownOnDateInput(event) {
3125
+ var _a;
3126
+ let direction = 0;
3127
+ switch ((_a = event.key) === null || _a === void 0 ? void 0 : _a.toLowerCase()) {
3128
+ case 'arrowup':
3129
+ direction = 1;
3130
+ break;
3131
+ case 'arrowdown':
3132
+ direction = -1;
3133
+ break;
3134
+ }
3135
+ let offset = 1;
3136
+ if (event.ctrlKey && event.shiftKey) {
3137
+ offset = 365;
3138
+ }
3139
+ else if (event.ctrlKey) {
3140
+ offset = 30;
3141
+ }
3142
+ else if (event.shiftKey) {
3143
+ offset = 7;
3144
+ }
3145
+ if (direction !== 0) {
3146
+ this.date$.pipe(first()).subscribe((date) => {
3147
+ const newDate = addDays(date, offset * direction);
3148
+ this.setDateInputValue(newDate);
3149
+ });
3150
+ }
3151
+ }
3152
+ keydownOnTimeInput(event) {
3048
3153
  var _a;
3049
3154
  let direction = 0;
3050
3155
  switch ((_a = event.key) === null || _a === void 0 ? void 0 : _a.toLowerCase()) {
@@ -3089,10 +3194,10 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
3089
3194
  }
3090
3195
  }
3091
3196
  DbxDateTimeFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxDateTimeFieldComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
3092
- 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 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 {{ dateValue$ | async | date: 'fullDate' }} ({{ dateValue$ | 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>Date</mat-label>\n <input #dateInput matInput [formControl]=\"dateInputCtrl\" [matDatepicker]=\"picker\" (dateChange)=\"datePicked($event)\" [value]=\"dateValue$ | async\" />\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>Time</mat-label>\n <input #timeInput matInput [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnInput($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" }] });
3197
+ 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" }] });
3093
3198
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxDateTimeFieldComponent, decorators: [{
3094
3199
  type: Component,
3095
- 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 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 {{ dateValue$ | async | date: 'fullDate' }} ({{ dateValue$ | 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>Date</mat-label>\n <input #dateInput matInput [formControl]=\"dateInputCtrl\" [matDatepicker]=\"picker\" (dateChange)=\"datePicked($event)\" [value]=\"dateValue$ | async\" />\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>Time</mat-label>\n <input #timeInput matInput [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnInput($event)\" />\n </mat-form-field>\n</ng-template>\n" }]
3200
+ 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" }]
3096
3201
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; } });
3097
3202
 
3098
3203
  class DbxFormFormlyDateFieldModule {
@@ -3167,18 +3272,35 @@ function timeOnlyField(config = {}) {
3167
3272
  return dateTimeField(Object.assign(Object.assign({}, config), { timeMode: DbxDateTimeFieldTimeMode.REQUIRED, timeOnly: true }));
3168
3273
  }
3169
3274
  function dateTimeField(config = {}) {
3170
- const { key = 'date', timeMode = DbxDateTimeFieldTimeMode.REQUIRED, valueMode, fullDayFieldName, getConfigObs, timeOnly = false } = config;
3171
- const fieldConfig = formlyField(Object.assign({ key, type: 'datetime' }, propsForFieldConfig(config, {
3275
+ const { key = 'date', dateLabel, timeLabel, timeMode = DbxDateTimeFieldTimeMode.REQUIRED, valueMode, fullDayInUTC, fullDayFieldName, getConfigObs, getSyncFieldsObs, hideDateHint, timeOnly = false } = config;
3276
+ const fieldConfig = formlyField(Object.assign({ key, type: 'datetime' }, propsAndConfigForFieldConfig(config, {
3277
+ dateLabel,
3278
+ timeLabel,
3279
+ valueMode,
3280
+ timeOnly,
3172
3281
  timeMode: timeOnly ? DbxDateTimeFieldTimeMode.REQUIRED : timeMode,
3173
3282
  fullDayFieldName,
3283
+ fullDayInUTC,
3284
+ hideDateHint,
3174
3285
  getConfigObs,
3175
- valueMode,
3176
- timeOnly
3286
+ getSyncFieldsObs
3177
3287
  })));
3178
3288
  return styleWrapper(fieldConfig, {
3179
3289
  classGetter: 'dbx-mat-form-field-disable-underline'
3180
3290
  });
3181
3291
  }
3292
+ function dateRangeField(config = {}) {
3293
+ var _a, _b;
3294
+ const { start, end } = config;
3295
+ const startFieldKey = (_a = start === null || start === void 0 ? void 0 : start.key) !== null && _a !== void 0 ? _a : 'start';
3296
+ const endFieldKey = (_b = end === null || end === void 0 ? void 0 : end.key) !== null && _b !== void 0 ? _b : 'end';
3297
+ const startField = dateTimeField(Object.assign(Object.assign({ dateLabel: 'Start', timeMode: DbxDateTimeFieldTimeMode.NONE, getSyncFieldsObs: () => of([{ syncWith: endFieldKey, syncType: 'after' }]) }, start), { key: startFieldKey }));
3298
+ const endField = dateTimeField(Object.assign(Object.assign({ dateLabel: 'End', timeMode: DbxDateTimeFieldTimeMode.NONE, getSyncFieldsObs: () => of([{ syncWith: startFieldKey, syncType: 'before' }]) }, end), { key: endFieldKey }));
3299
+ return {
3300
+ key: undefined,
3301
+ fieldGroup: [flexLayoutWrapper([startField, endField], { size: 1, relative: true })]
3302
+ };
3303
+ }
3182
3304
 
3183
3305
  function isTruthy() {
3184
3306
  return (control) => {
@@ -3247,6 +3369,12 @@ function isInRange(min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER)
3247
3369
  };
3248
3370
  }
3249
3371
  const IS_DIVISIBLE_BY_VALIDATION_KEY = 'isDivisibleBy';
3372
+ /**
3373
+ * Angular Form ValidationFn for checking isDivisibleBy the input divisor.
3374
+ *
3375
+ * @param divisor
3376
+ * @returns
3377
+ */
3250
3378
  function isDivisibleBy(divisor) {
3251
3379
  if (divisor === 0) {
3252
3380
  throw new Error('Divisior must be greater than zero.');
@@ -3297,20 +3425,33 @@ function fieldValueIsAvailableValidator(config) {
3297
3425
  })), first());
3298
3426
  }
3299
3427
 
3428
+ function numberFieldTransformParser(config) {
3429
+ const { parsers: inputParsers, transform } = config;
3430
+ let parsers;
3431
+ if (inputParsers) {
3432
+ parsers = inputParsers;
3433
+ }
3434
+ if (transform) {
3435
+ const transformParser = transformNumberFunction(transform);
3436
+ parsers = concatArrays([transformParser], parsers);
3437
+ }
3438
+ return parsers;
3439
+ }
3300
3440
  function numberField(config) {
3301
3441
  const { key, min, max, step, enforceStep, inputType: type = 'number' } = config;
3442
+ const parsers = numberFieldTransformParser(config);
3302
3443
  const validators = [];
3303
3444
  if (step && enforceStep) {
3304
3445
  validators.push(isDivisibleBy(step));
3305
3446
  }
3306
- return formlyField(Object.assign(Object.assign({ key, type: 'input' }, propsForFieldConfig(config, {
3447
+ return formlyField(Object.assign(Object.assign(Object.assign({ key, type: 'input' }, propsAndConfigForFieldConfig(config, {
3307
3448
  type,
3308
3449
  min,
3309
3450
  max,
3310
3451
  step
3311
3452
  })), validatorsForFieldConfig({
3312
3453
  validators
3313
- })));
3454
+ })), { parsers }));
3314
3455
  }
3315
3456
 
3316
3457
  class DbxFormFormlyNumberFieldModule {
@@ -3396,28 +3537,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
3396
3537
  }]
3397
3538
  }] });
3398
3539
 
3540
+ function textFieldTransformParser(config) {
3541
+ const { parsers: inputParsers, transform } = config;
3542
+ let parsers;
3543
+ if (inputParsers) {
3544
+ parsers = inputParsers;
3545
+ }
3546
+ if (transform) {
3547
+ const transformParser = transformStringFunction(transform);
3548
+ parsers = concatArrays([transformParser], parsers);
3549
+ }
3550
+ return parsers;
3551
+ }
3399
3552
  function textField(config) {
3400
- const { key, pattern, minLength, maxLength, inputType: type = 'text' } = config;
3401
- return formlyField(Object.assign({ key, type: 'input' }, propsForFieldConfig(config, {
3553
+ const { transform, key, pattern, minLength, maxLength, inputType: type = 'text' } = config;
3554
+ const parsers = textFieldTransformParser(config);
3555
+ return formlyField(Object.assign(Object.assign({ key, type: 'input' }, propsAndConfigForFieldConfig(config, {
3402
3556
  type,
3403
3557
  minLength,
3404
3558
  maxLength,
3405
3559
  pattern
3406
- })));
3560
+ })), { parsers }));
3407
3561
  }
3408
3562
  function textAreaField(config) {
3409
3563
  const { key, rows = 3, pattern, minLength, maxLength } = config;
3410
- return formlyField(Object.assign({ key, type: 'textarea' }, propsForFieldConfig(config, {
3564
+ const parsers = textFieldTransformParser(config);
3565
+ return formlyField(Object.assign(Object.assign({ key, type: 'textarea' }, propsAndConfigForFieldConfig(config, {
3411
3566
  rows,
3412
3567
  minLength,
3413
3568
  maxLength,
3414
3569
  pattern
3415
- })));
3570
+ })), { parsers }));
3416
3571
  }
3417
3572
 
3418
3573
  function phoneField(config = {}) {
3419
3574
  const { key = 'phone', preferredCountries, onlyCountries } = config;
3420
- const fieldConfig = formlyField(Object.assign({ key, type: 'intphone' }, propsForFieldConfig(config, {
3575
+ const fieldConfig = formlyField(Object.assign({ key, type: 'intphone' }, propsAndConfigForFieldConfig(config, {
3421
3576
  preferredCountries,
3422
3577
  onlyCountries
3423
3578
  })));
@@ -3501,7 +3656,9 @@ function stateField(config = {}) {
3501
3656
  pattern,
3502
3657
  autocomplete,
3503
3658
  required,
3504
- maxLength }));
3659
+ maxLength, transform: {
3660
+ toUppercase: true
3661
+ } }));
3505
3662
  }
3506
3663
  function countryField(config = {}) {
3507
3664
  const { key = 'country', placeholder = '', label = 'Country', autocomplete = 'country', maxLength = ADDRESS_COUNTRY_MAX_LENGTH, required = false } = config;
@@ -4236,5 +4393,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
4236
4393
  * Generated bundle index. Do not edit.
4237
4394
  */
4238
4395
 
4239
- 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 };
4396
+ 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, 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 };
4240
4397
  //# sourceMappingURL=dereekb-dbx-form.mjs.map