@dereekb/dbx-form 2.0.0 → 4.0.0

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 (115) hide show
  1. package/esm2020/lib/form/action/form.action.directive.mjs +8 -8
  2. package/esm2020/lib/form/action/form.action.module.mjs +4 -4
  3. package/esm2020/lib/form/action/transition/form.action.transition.module.mjs +4 -4
  4. package/esm2020/lib/form/action/transition/form.action.transition.safety.directive.mjs +3 -3
  5. package/esm2020/lib/form/form.mjs +10 -1
  6. package/esm2020/lib/form/form.module.mjs +4 -4
  7. package/esm2020/lib/form/io/form.changes.directive.mjs +18 -7
  8. package/esm2020/lib/form/io/form.input.directive.mjs +36 -18
  9. package/esm2020/lib/form/io/form.io.module.mjs +4 -4
  10. package/esm2020/lib/form/io/form.loading.directive.mjs +27 -17
  11. package/esm2020/lib/form.module.mjs +4 -4
  12. package/esm2020/lib/formly/config/validation.mjs +3 -3
  13. package/esm2020/lib/formly/field/checklist/checklist.item.field.component.mjs +8 -8
  14. package/esm2020/lib/formly/field/checklist/checklist.item.field.content.default.component.mjs +3 -3
  15. package/esm2020/lib/formly/field/checklist/checklist.item.field.module.mjs +13 -13
  16. package/esm2020/lib/formly/field/component/component.field.component.mjs +7 -7
  17. package/esm2020/lib/formly/field/component/component.field.module.mjs +9 -9
  18. package/esm2020/lib/formly/field/form.field.module.mjs +4 -4
  19. package/esm2020/lib/formly/field/selection/pickable/pickable.chip.field.component.mjs +7 -7
  20. package/esm2020/lib/formly/field/selection/pickable/pickable.field.directive.mjs +8 -6
  21. package/esm2020/lib/formly/field/selection/pickable/pickable.field.mjs +2 -2
  22. package/esm2020/lib/formly/field/selection/pickable/pickable.field.module.mjs +13 -13
  23. package/esm2020/lib/formly/field/selection/pickable/pickable.list.field.component.mjs +28 -21
  24. package/esm2020/lib/formly/field/selection/searchable/searchable.chip.field.component.mjs +4 -4
  25. package/esm2020/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.mjs +13 -13
  26. package/esm2020/lib/formly/field/selection/searchable/searchable.field.directive.mjs +7 -8
  27. package/esm2020/lib/formly/field/selection/searchable/searchable.field.module.mjs +13 -13
  28. package/esm2020/lib/formly/field/selection/searchable/searchable.mjs +1 -1
  29. package/esm2020/lib/formly/field/selection/searchable/searchable.text.field.component.mjs +3 -3
  30. package/esm2020/lib/formly/field/selection/selection.module.mjs +4 -4
  31. package/esm2020/lib/formly/field/texteditor/texteditor.field.component.mjs +4 -5
  32. package/esm2020/lib/formly/field/texteditor/texteditor.field.module.mjs +4 -4
  33. package/esm2020/lib/formly/field/value/array/array.field.component.mjs +6 -6
  34. package/esm2020/lib/formly/field/value/array/array.field.module.mjs +4 -4
  35. package/esm2020/lib/formly/field/value/boolean/boolean.field.module.mjs +4 -4
  36. package/esm2020/lib/formly/field/value/date/date.field.module.mjs +4 -4
  37. package/esm2020/lib/formly/field/value/date/datetime.field.component.mjs +21 -20
  38. package/esm2020/lib/formly/field/value/date/datetime.field.mjs +5 -5
  39. package/esm2020/lib/formly/field/value/enum/enum.field.module.mjs +4 -4
  40. package/esm2020/lib/formly/field/value/phone/phone.field.component.mjs +3 -3
  41. package/esm2020/lib/formly/field/value/phone/phone.field.module.mjs +4 -4
  42. package/esm2020/lib/formly/field/value/text/text.additional.field.mjs +15 -18
  43. package/esm2020/lib/formly/field/value/text/text.address.field.mjs +2 -2
  44. package/esm2020/lib/formly/field/value/text/text.field.mjs +3 -2
  45. package/esm2020/lib/formly/field/value/text/text.field.module.mjs +4 -4
  46. package/esm2020/lib/formly/field/value/value.module.mjs +4 -4
  47. package/esm2020/lib/formly/field/wrapper/autotouch.wrapper.component.mjs +3 -3
  48. package/esm2020/lib/formly/field/wrapper/expandable.wrapper.component.mjs +3 -3
  49. package/esm2020/lib/formly/field/wrapper/expandable.wrapper.delegate.mjs +3 -3
  50. package/esm2020/lib/formly/field/wrapper/flex.wrapper.component.mjs +3 -3
  51. package/esm2020/lib/formly/field/wrapper/form.wrapper.module.mjs +18 -10
  52. package/esm2020/lib/formly/field/wrapper/index.mjs +2 -1
  53. package/esm2020/lib/formly/field/wrapper/info.wrapper.component.mjs +3 -3
  54. package/esm2020/lib/formly/field/wrapper/section.wrapper.component.mjs +3 -3
  55. package/esm2020/lib/formly/field/wrapper/style.wrapper.component.mjs +4 -4
  56. package/esm2020/lib/formly/field/wrapper/subsection.wrapper.component.mjs +3 -3
  57. package/esm2020/lib/formly/field/wrapper/toggle.wrapper.component.mjs +3 -3
  58. package/esm2020/lib/formly/field/wrapper/working.wrapper.component.mjs +45 -0
  59. package/esm2020/lib/formly/field/wrapper/wrapper.mjs +7 -1
  60. package/esm2020/lib/formly/formly.context.directive.mjs +3 -3
  61. package/esm2020/lib/formly/formly.context.mjs +2 -2
  62. package/esm2020/lib/formly/formly.directive.mjs +12 -12
  63. package/esm2020/lib/formly/formly.form.component.mjs +15 -8
  64. package/esm2020/lib/formly/formly.module.mjs +9 -6
  65. package/esm2020/lib/formly/index.mjs +2 -1
  66. package/esm2020/lib/formly/template/available.mjs +16 -0
  67. package/esm2020/lib/formly/template/index.mjs +3 -0
  68. package/esm2020/lib/formly/template/login.mjs +90 -0
  69. package/esm2020/lib/layout/form.layout.module.mjs +4 -4
  70. package/esm2020/lib/layout/form.spacer.component.mjs +3 -3
  71. package/esm2020/lib/validator/available.mjs +32 -0
  72. package/esm2020/lib/validator/field.mjs +31 -0
  73. package/esm2020/lib/validator/index.mjs +3 -1
  74. package/fesm2015/dereekb-dbx-form.mjs +624 -369
  75. package/fesm2015/dereekb-dbx-form.mjs.map +1 -1
  76. package/fesm2020/dereekb-dbx-form.mjs +641 -366
  77. package/fesm2020/dereekb-dbx-form.mjs.map +1 -1
  78. package/lib/form/action/form.action.directive.d.ts +8 -13
  79. package/lib/form/form.d.ts +11 -0
  80. package/lib/form/io/form.changes.directive.d.ts +7 -3
  81. package/lib/form/io/form.input.directive.d.ts +18 -7
  82. package/lib/form/io/form.loading.directive.d.ts +8 -2
  83. package/lib/formly/field/checklist/checklist.item.field.component.d.ts +2 -2
  84. package/lib/formly/field/checklist/checklist.item.field.module.d.ts +1 -1
  85. package/lib/formly/field/component/component.field.component.d.ts +3 -3
  86. package/lib/formly/field/component/component.field.module.d.ts +1 -1
  87. package/lib/formly/field/selection/pickable/pickable.field.directive.d.ts +8 -3
  88. package/lib/formly/field/selection/pickable/pickable.field.module.d.ts +1 -1
  89. package/lib/formly/field/selection/pickable/pickable.list.field.component.d.ts +8 -6
  90. package/lib/formly/field/selection/searchable/searchable.chip.field.component.d.ts +2 -1
  91. package/lib/formly/field/selection/searchable/searchable.d.ts +3 -3
  92. package/lib/formly/field/selection/searchable/searchable.field.autocomplete.item.component.d.ts +2 -2
  93. package/lib/formly/field/selection/searchable/searchable.field.directive.d.ts +4 -4
  94. package/lib/formly/field/selection/searchable/searchable.field.module.d.ts +1 -1
  95. package/lib/formly/field/value/array/array.field.component.d.ts +2 -2
  96. package/lib/formly/field/value/date/datetime.field.component.d.ts +4 -4
  97. package/lib/formly/field/value/phone/_phone.scss +4 -0
  98. package/lib/formly/field/value/text/text.additional.field.d.ts +1 -1
  99. package/lib/formly/field/value/text/text.field.d.ts +2 -0
  100. package/lib/formly/field/wrapper/form.wrapper.module.d.ts +9 -8
  101. package/lib/formly/field/wrapper/index.d.ts +1 -0
  102. package/lib/formly/field/wrapper/style.wrapper.component.d.ts +3 -3
  103. package/lib/formly/field/wrapper/working.wrapper.component.d.ts +22 -0
  104. package/lib/formly/field/wrapper/wrapper.d.ts +3 -0
  105. package/lib/formly/formly.context.d.ts +1 -1
  106. package/lib/formly/index.d.ts +1 -0
  107. package/lib/formly/template/available.d.ts +7 -0
  108. package/lib/formly/template/index.d.ts +2 -0
  109. package/lib/formly/template/login.d.ts +59 -0
  110. package/lib/validator/available.d.ts +30 -0
  111. package/lib/validator/field.d.ts +32 -0
  112. package/lib/validator/index.d.ts +2 -0
  113. package/package.json +17 -45
  114. package/lib/formly/field/fields_TODO.scss +0 -4
  115. package/lib/formly/form_TODO.scss +0 -153
@@ -0,0 +1,90 @@
1
+ import { textField } from '../field/value/text/text.field';
2
+ import { emailField } from '../field/value/text/text.additional.field';
3
+ import { fieldValuesAreEqualValidator } from '../../validator/field';
4
+ import { capitalizeFirstLetter } from '@dereekb/util';
5
+ ;
6
+ /**
7
+ * Configured simple text password field.
8
+ *
9
+ * @param config
10
+ * @returns
11
+ */
12
+ export function textPasswordField(config) {
13
+ return textField({
14
+ key: 'password',
15
+ ...config,
16
+ label: config?.label ?? 'Password',
17
+ inputType: 'password',
18
+ required: true
19
+ });
20
+ }
21
+ /**
22
+ * Configured verify field for a password.
23
+ * @param config
24
+ * @returns
25
+ */
26
+ export function textVerifyPasswordField(config) {
27
+ return textPasswordField({
28
+ key: 'verifyPassword',
29
+ label: 'Verify Password',
30
+ ...config,
31
+ required: true
32
+ });
33
+ }
34
+ export function textPasswordWithVerifyFieldGroup(config) {
35
+ const passwordFieldConfig = textPasswordField(config.password);
36
+ const verifyPasswordFieldKey = config.verifyPassword?.key ?? `verify${capitalizeFirstLetter(String(passwordFieldConfig.key))}`;
37
+ const verifyPasswordField = textVerifyPasswordField({
38
+ ...config.password,
39
+ ...config.verifyPassword,
40
+ label: (config.verifyPassword?.label) ?? `Verify ${passwordFieldConfig.templateOptions?.label}`,
41
+ key: verifyPasswordFieldKey
42
+ });
43
+ const validators = {
44
+ validation: [{
45
+ errorPath: verifyPasswordFieldKey,
46
+ expression: fieldValuesAreEqualValidator({ keysFilter: [passwordFieldConfig.key, verifyPasswordField.key], message: 'The passwords do not match.' })
47
+ }]
48
+ };
49
+ const groupFieldConfig = {
50
+ validators,
51
+ fieldGroup: [passwordFieldConfig, verifyPasswordField]
52
+ };
53
+ return groupFieldConfig;
54
+ }
55
+ ;
56
+ /**
57
+ * Template for login field that takes in a username and password.
58
+ *
59
+ * @param param0
60
+ * @returns
61
+ */
62
+ export function usernamePasswordLoginFields({ username, password, verifyPassword }) {
63
+ let usernameField;
64
+ let usernameFieldConfig = username;
65
+ const defaultUsernameFieldConfig = { key: 'username', required: true };
66
+ if (typeof username === 'string') {
67
+ if (username === 'email') {
68
+ usernameFieldConfig = {
69
+ email: defaultUsernameFieldConfig
70
+ };
71
+ }
72
+ else {
73
+ usernameFieldConfig = {
74
+ username: defaultUsernameFieldConfig
75
+ };
76
+ }
77
+ }
78
+ if (usernameFieldConfig.email) {
79
+ usernameField = emailField({ ...usernameFieldConfig.username, ...defaultUsernameFieldConfig });
80
+ }
81
+ else {
82
+ usernameField = textField({ ...usernameFieldConfig.username, ...defaultUsernameFieldConfig });
83
+ }
84
+ const passwordField = (verifyPassword) ? (textPasswordWithVerifyFieldGroup({ password, verifyPassword: (verifyPassword === true) ? undefined : verifyPassword })) : textPasswordField(password);
85
+ return [
86
+ usernameField,
87
+ passwordField
88
+ ];
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS90ZW1wbGF0ZS9sb2dpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVFLE9BQU8sRUFBb0IsVUFBVSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckUsT0FBTyxFQUFFLHFCQUFxQixFQUFTLE1BQU0sZUFBZSxDQUFDO0FBS3lFLENBQUM7QUFPdkk7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBZ0M7SUFDaEUsT0FBTyxTQUFTLENBQUM7UUFDZixHQUFHLEVBQUUsVUFBVTtRQUNmLEdBQUcsTUFBTTtRQUNULEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFJLFVBQVU7UUFDbEMsU0FBUyxFQUFFLFVBQVU7UUFDckIsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxNQUFnQztJQUN0RSxPQUFPLGlCQUFpQixDQUFDO1FBQ3ZCLEdBQUcsRUFBRSxnQkFBZ0I7UUFDckIsS0FBSyxFQUFFLGlCQUFpQjtRQUN4QixHQUFHLE1BQU07UUFDVCxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztBQUNMLENBQUM7QUFPRCxNQUFNLFVBQVUsZ0NBQWdDLENBQUMsTUFBeUM7SUFDeEYsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0QsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxTQUFTLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0gsTUFBTSxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQztRQUNsRCxHQUFHLE1BQU0sQ0FBQyxRQUFRO1FBQ2xCLEdBQUcsTUFBTSxDQUFDLGNBQWM7UUFDeEIsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxVQUFVLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUU7UUFDL0YsR0FBRyxFQUFFLHNCQUFzQjtLQUM1QixDQUFDLENBQUM7SUFFSCxNQUFNLFVBQVUsR0FBUTtRQUN0QixVQUFVLEVBQUUsQ0FBQztnQkFDWCxTQUFTLEVBQUUsc0JBQXNCO2dCQUNqQyxVQUFVLEVBQUUsNEJBQTRCLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxDQUFhLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLENBQUM7YUFDakssQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLGdCQUFnQixHQUFzQjtRQUMxQyxVQUFVO1FBQ1YsVUFBVSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUM7S0FDdkQsQ0FBQztJQUVGLE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQUtBLENBQUM7QUFvQkY7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBNkI7SUFDM0csSUFBSSxhQUFnQyxDQUFDO0lBQ3JDLElBQUksbUJBQW1CLEdBQXFDLFFBQTRDLENBQUM7SUFDekcsTUFBTSwwQkFBMEIsR0FBUSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBRTVFLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ2hDLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRTtZQUN4QixtQkFBbUIsR0FBRztnQkFDcEIsS0FBSyxFQUFFLDBCQUEwQjthQUNsQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLG1CQUFtQixHQUFHO2dCQUNwQixRQUFRLEVBQUUsMEJBQTBCO2FBQ3JDLENBQUM7U0FDSDtLQUNGO0lBRUQsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUU7UUFDN0IsYUFBYSxHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEdBQUcsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO0tBQ2hHO1NBQU07UUFDTCxhQUFhLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsR0FBRywwQkFBMEIsRUFBRSxDQUFDLENBQUM7S0FDL0Y7SUFFRCxNQUFNLGFBQWEsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWhNLE9BQU87UUFDTCxhQUFhO1FBQ2IsYUFBYTtLQUNkLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpZWxkQ29uZmlnLCB0ZXh0RmllbGQgfSBmcm9tICcuLi9maWVsZC92YWx1ZS90ZXh0L3RleHQuZmllbGQnO1xuaW1wb3J0IHsgRW1haWxGaWVsZENvbmZpZywgZW1haWxGaWVsZCB9IGZyb20gJy4uL2ZpZWxkL3ZhbHVlL3RleHQvdGV4dC5hZGRpdGlvbmFsLmZpZWxkJztcbmltcG9ydCB7IGZpZWxkVmFsdWVzQXJlRXF1YWxWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi92YWxpZGF0b3IvZmllbGQnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tIFwiQG5neC1mb3JtbHkvY29yZVwiO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyLCBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGludGVyZmFjZSBmb3IgdGhlIHBhc3N3b3JkIHBhcmFtZXRlcnMgY29uZmlndXJhdGlvbiBmb3IgYSBUZXh0UGFzc3dvcmRGaWVsZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXh0UGFzc3dvcmRGaWVsZFBhc3N3b3JkUGFyYW1ldGVycyBleHRlbmRzIFBhcnRpYWw8UGljazxUZXh0RmllbGRDb25maWcsICdtYXhMZW5ndGgnIHwgJ21pbkxlbmd0aCcgfCAncGF0dGVybic+PiB7IH07XG5cbi8qKlxuICogdGV4dFBhc3N3b3JkRmllbGQoKSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRleHRQYXNzd29yZEZpZWxkQ29uZmlnIGV4dGVuZHMgT21pdDxUZXh0RmllbGRDb25maWcsICdpbnB1dFR5cGUnIHwgJ2tleSc+LCBQYXJ0aWFsPFBpY2s8VGV4dEZpZWxkQ29uZmlnLCAna2V5Jz4+IHsgfVxuXG4vKipcbiAqIENvbmZpZ3VyZWQgc2ltcGxlIHRleHQgcGFzc3dvcmQgZmllbGQuXG4gKiBcbiAqIEBwYXJhbSBjb25maWcgXG4gKiBAcmV0dXJucyBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRleHRQYXNzd29yZEZpZWxkKGNvbmZpZz86IFRleHRQYXNzd29yZEZpZWxkQ29uZmlnKTogRm9ybWx5RmllbGRDb25maWcge1xuICByZXR1cm4gdGV4dEZpZWxkKHtcbiAgICBrZXk6ICdwYXNzd29yZCcsXG4gICAgLi4uY29uZmlnLFxuICAgIGxhYmVsOiBjb25maWc/LmxhYmVsID8/ICdQYXNzd29yZCcsXG4gICAgaW5wdXRUeXBlOiAncGFzc3dvcmQnLFxuICAgIHJlcXVpcmVkOiB0cnVlXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyZWQgdmVyaWZ5IGZpZWxkIGZvciBhIHBhc3N3b3JkLlxuICogQHBhcmFtIGNvbmZpZyBcbiAqIEByZXR1cm5zIFxuICovXG5leHBvcnQgZnVuY3Rpb24gdGV4dFZlcmlmeVBhc3N3b3JkRmllbGQoY29uZmlnPzogVGV4dFBhc3N3b3JkRmllbGRDb25maWcpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gIHJldHVybiB0ZXh0UGFzc3dvcmRGaWVsZCh7XG4gICAga2V5OiAndmVyaWZ5UGFzc3dvcmQnLFxuICAgIGxhYmVsOiAnVmVyaWZ5IFBhc3N3b3JkJyxcbiAgICAuLi5jb25maWcsXG4gICAgcmVxdWlyZWQ6IHRydWVcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dFBhc3N3b3JkV2l0aFZlcmlmeUZpZWxkQ29uZmlnIHtcbiAgcGFzc3dvcmQ/OiBUZXh0UGFzc3dvcmRGaWVsZENvbmZpZztcbiAgdmVyaWZ5UGFzc3dvcmQ/OiBUZXh0UGFzc3dvcmRGaWVsZENvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRleHRQYXNzd29yZFdpdGhWZXJpZnlGaWVsZEdyb3VwKGNvbmZpZzogVGV4dFBhc3N3b3JkV2l0aFZlcmlmeUZpZWxkQ29uZmlnKTogRm9ybWx5RmllbGRDb25maWcge1xuICBjb25zdCBwYXNzd29yZEZpZWxkQ29uZmlnID0gdGV4dFBhc3N3b3JkRmllbGQoY29uZmlnLnBhc3N3b3JkKTtcbiAgY29uc3QgdmVyaWZ5UGFzc3dvcmRGaWVsZEtleSA9IGNvbmZpZy52ZXJpZnlQYXNzd29yZD8ua2V5ID8/IGB2ZXJpZnkke2NhcGl0YWxpemVGaXJzdExldHRlcihTdHJpbmcocGFzc3dvcmRGaWVsZENvbmZpZy5rZXkpKX1gO1xuICBjb25zdCB2ZXJpZnlQYXNzd29yZEZpZWxkID0gdGV4dFZlcmlmeVBhc3N3b3JkRmllbGQoe1xuICAgIC4uLmNvbmZpZy5wYXNzd29yZCxcbiAgICAuLi5jb25maWcudmVyaWZ5UGFzc3dvcmQsXG4gICAgbGFiZWw6IChjb25maWcudmVyaWZ5UGFzc3dvcmQ/LmxhYmVsKSA/PyBgVmVyaWZ5ICR7cGFzc3dvcmRGaWVsZENvbmZpZy50ZW1wbGF0ZU9wdGlvbnM/LmxhYmVsfWAsXG4gICAga2V5OiB2ZXJpZnlQYXNzd29yZEZpZWxkS2V5XG4gIH0pO1xuXG4gIGNvbnN0IHZhbGlkYXRvcnM6IGFueSA9IHtcbiAgICB2YWxpZGF0aW9uOiBbe1xuICAgICAgZXJyb3JQYXRoOiB2ZXJpZnlQYXNzd29yZEZpZWxkS2V5LFxuICAgICAgZXhwcmVzc2lvbjogZmllbGRWYWx1ZXNBcmVFcXVhbFZhbGlkYXRvcih7IGtleXNGaWx0ZXI6IFtwYXNzd29yZEZpZWxkQ29uZmlnLmtleSwgdmVyaWZ5UGFzc3dvcmRGaWVsZC5rZXldIGFzIHN0cmluZ1tdLCBtZXNzYWdlOiAnVGhlIHBhc3N3b3JkcyBkbyBub3QgbWF0Y2guJyB9KVxuICAgIH1dXG4gIH07XG5cbiAgY29uc3QgZ3JvdXBGaWVsZENvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgdmFsaWRhdG9ycyxcbiAgICBmaWVsZEdyb3VwOiBbcGFzc3dvcmRGaWVsZENvbmZpZywgdmVyaWZ5UGFzc3dvcmRGaWVsZF1cbiAgfTtcblxuICByZXR1cm4gZ3JvdXBGaWVsZENvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VybmFtZUxvZ2luRmllbGRVc2VybmFtZUNvbmZpZyB7XG4gIGVtYWlsPzogT21pdDxFbWFpbEZpZWxkQ29uZmlnLCAna2V5Jz47XG4gIHVzZXJuYW1lPzogT21pdDxUZXh0RmllbGRDb25maWcsICdrZXknPjtcbn07XG5cbi8qKlxuICogdXNlcm5hbWVQYXNzd29yZExvZ2luRmllbGRzKCkgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VybmFtZUxvZ2luRmllbGRzQ29uZmlnIHtcbiAgdXNlcm5hbWU6ICdlbWFpbCcgfCAndXNlcm5hbWUnIHwgVXNlcm5hbWVMb2dpbkZpZWxkVXNlcm5hbWVDb25maWc7XG4gIHBhc3N3b3JkPzogVGV4dFBhc3N3b3JkRmllbGRDb25maWc7XG4gIHZlcmlmeVBhc3N3b3JkPzogTWF5YmU8Ym9vbGVhbiB8IFRleHRQYXNzd29yZEZpZWxkQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBWYWx1ZSB0eXBlIGV4cG9ydGVkIGJ5IHVzZXJuYW1lTG9naW5GaWVsZHMoKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHRVc2VybmFtZUxvZ2luRmllbGRzVmFsdWUge1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICB2ZXJpZnlQYXNzd29yZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUZW1wbGF0ZSBmb3IgbG9naW4gZmllbGQgdGhhdCB0YWtlcyBpbiBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAqIFxuICogQHBhcmFtIHBhcmFtMCBcbiAqIEByZXR1cm5zIFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlcm5hbWVQYXNzd29yZExvZ2luRmllbGRzKHsgdXNlcm5hbWUsIHBhc3N3b3JkLCB2ZXJpZnlQYXNzd29yZCB9OiBVc2VybmFtZUxvZ2luRmllbGRzQ29uZmlnKTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gIGxldCB1c2VybmFtZUZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZztcbiAgbGV0IHVzZXJuYW1lRmllbGRDb25maWc6IFVzZXJuYW1lTG9naW5GaWVsZFVzZXJuYW1lQ29uZmlnID0gdXNlcm5hbWUgYXMgVXNlcm5hbWVMb2dpbkZpZWxkVXNlcm5hbWVDb25maWc7XG4gIGNvbnN0IGRlZmF1bHRVc2VybmFtZUZpZWxkQ29uZmlnOiBhbnkgPSB7IGtleTogJ3VzZXJuYW1lJywgcmVxdWlyZWQ6IHRydWUgfTtcblxuICBpZiAodHlwZW9mIHVzZXJuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGlmICh1c2VybmFtZSA9PT0gJ2VtYWlsJykge1xuICAgICAgdXNlcm5hbWVGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgZW1haWw6IGRlZmF1bHRVc2VybmFtZUZpZWxkQ29uZmlnXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB1c2VybmFtZUZpZWxkQ29uZmlnID0ge1xuICAgICAgICB1c2VybmFtZTogZGVmYXVsdFVzZXJuYW1lRmllbGRDb25maWdcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKHVzZXJuYW1lRmllbGRDb25maWcuZW1haWwpIHtcbiAgICB1c2VybmFtZUZpZWxkID0gZW1haWxGaWVsZCh7IC4uLnVzZXJuYW1lRmllbGRDb25maWcudXNlcm5hbWUsIC4uLmRlZmF1bHRVc2VybmFtZUZpZWxkQ29uZmlnIH0pO1xuICB9IGVsc2Uge1xuICAgIHVzZXJuYW1lRmllbGQgPSB0ZXh0RmllbGQoeyAuLi51c2VybmFtZUZpZWxkQ29uZmlnLnVzZXJuYW1lLCAuLi5kZWZhdWx0VXNlcm5hbWVGaWVsZENvbmZpZyB9KTtcbiAgfVxuXG4gIGNvbnN0IHBhc3N3b3JkRmllbGQgPSAodmVyaWZ5UGFzc3dvcmQpID8gKHRleHRQYXNzd29yZFdpdGhWZXJpZnlGaWVsZEdyb3VwKHsgcGFzc3dvcmQsIHZlcmlmeVBhc3N3b3JkOiAodmVyaWZ5UGFzc3dvcmQgPT09IHRydWUpID8gdW5kZWZpbmVkIDogdmVyaWZ5UGFzc3dvcmQgfSkpIDogdGV4dFBhc3N3b3JkRmllbGQocGFzc3dvcmQpO1xuXG4gIHJldHVybiBbXG4gICAgdXNlcm5hbWVGaWVsZCxcbiAgICBwYXNzd29yZEZpZWxkXG4gIF07XG59XG4iXX0=
@@ -4,12 +4,12 @@ import { DbxFormSpacerComponent } from './form.spacer.component';
4
4
  import * as i0 from "@angular/core";
5
5
  export class DbxFormLayoutModule {
6
6
  }
7
- DbxFormLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
- DbxFormLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormLayoutModule, declarations: [DbxFormSpacerComponent], imports: [CommonModule], exports: [DbxFormSpacerComponent] });
9
- DbxFormLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormLayoutModule, imports: [[
7
+ DbxFormLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxFormLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ DbxFormLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxFormLayoutModule, declarations: [DbxFormSpacerComponent], imports: [CommonModule], exports: [DbxFormSpacerComponent] });
9
+ DbxFormLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxFormLayoutModule, imports: [[
10
10
  CommonModule
11
11
  ]] });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormLayoutModule, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxFormLayoutModule, decorators: [{
13
13
  type: NgModule,
14
14
  args: [{
15
15
  imports: [
@@ -5,9 +5,9 @@ import * as i0 from "@angular/core";
5
5
  */
6
6
  export class DbxFormSpacerComponent {
7
7
  }
8
- DbxFormSpacerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormSpacerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
- DbxFormSpacerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: DbxFormSpacerComponent, selector: "dbx-form-spacer", ngImport: i0, template: `<div class="dbx-form-spacer"></div>`, isInline: true });
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: DbxFormSpacerComponent, decorators: [{
8
+ DbxFormSpacerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxFormSpacerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
+ DbxFormSpacerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: DbxFormSpacerComponent, selector: "dbx-form-spacer", ngImport: i0, template: `<div class="dbx-form-spacer"></div>`, isInline: true });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxFormSpacerComponent, decorators: [{
11
11
  type: Component,
12
12
  args: [{
13
13
  selector: 'dbx-form-spacer',
@@ -0,0 +1,32 @@
1
+ import { first, switchMap } from 'rxjs/operators';
2
+ import { map, of, catchError } from 'rxjs';
3
+ import { asyncPusherCache } from '@dereekb/rxjs';
4
+ export const FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY = 'fieldValueIsAvailable';
5
+ export const FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY = 'fieldValueIsAvailableError';
6
+ /**
7
+ * Validator for validating all values within an object.
8
+ *
9
+ * This is useful for validating a control group where two or more values are expected to be the same, such as a password and a password verification field.
10
+ *
11
+ * @param config
12
+ * @returns
13
+ */
14
+ export function fieldValueIsAvailableValidator(config) {
15
+ const { throttle = 400, checkValueIsAvailable, message = 'This value is not available.' } = config;
16
+ const pusher = asyncPusherCache({
17
+ throttle
18
+ });
19
+ return (control) => pusher(control.valueChanges)(control.value).pipe(switchMap((x) => checkValueIsAvailable(x)), map((isAvailable) => {
20
+ if (isAvailable) {
21
+ return null;
22
+ }
23
+ else {
24
+ return {
25
+ [FIELD_VALUE_IS_AVAILABLE_VALIDATION_KEY]: { message }
26
+ };
27
+ }
28
+ }), catchError(() => of({
29
+ [FIELD_VALUE_IS_AVAILABLE_ERROR_VALIDATION_KEY]: { message: 'An error occured.' }
30
+ })), first());
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhaWxhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi92YWxpZGF0b3IvYXZhaWxhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRyx1QkFBdUIsQ0FBQztBQUMvRSxNQUFNLENBQUMsTUFBTSw2Q0FBNkMsR0FBRyw0QkFBNEIsQ0FBQztBQXlCMUY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FBSSxNQUErQztJQUMvRixNQUFNLEVBQ0osUUFBUSxHQUFHLEdBQUcsRUFDZCxxQkFBcUIsRUFDckIsT0FBTyxHQUFHLDhCQUE4QixFQUN6QyxHQUFHLE1BQU0sQ0FBQztJQUVYLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFJO1FBQ2pDLFFBQVE7S0FDVCxDQUFDLENBQUM7SUFFSCxPQUFPLENBQUMsT0FBd0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBVSxDQUFDLENBQUMsSUFBSSxDQUN4RixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQ2xCLElBQUksV0FBVyxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNO1lBQ0wsT0FBTztnQkFDTCxDQUFDLHVDQUF1QyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUU7YUFDdkQsQ0FBQztTQUNIO0lBQ0gsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNsQixDQUFDLDZDQUE2QyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7S0FDbEYsQ0FBQyxDQUFDLEVBQ0gsS0FBSyxFQUFFLENBQ1IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJzdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBvZiwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBhc3luY1B1c2hlckNhY2hlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5cbmV4cG9ydCBjb25zdCBGSUVMRF9WQUxVRV9JU19BVkFJTEFCTEVfVkFMSURBVElPTl9LRVkgPSAnZmllbGRWYWx1ZUlzQXZhaWxhYmxlJztcbmV4cG9ydCBjb25zdCBGSUVMRF9WQUxVRV9JU19BVkFJTEFCTEVfRVJST1JfVkFMSURBVElPTl9LRVkgPSAnZmllbGRWYWx1ZUlzQXZhaWxhYmxlRXJyb3InO1xuXG5leHBvcnQgdHlwZSBGaWVsZFZhbHVlSXNBdmFpbGFibGVWYWxpZGF0b3JGdW5jdGlvbjxUPiA9ICh2YWx1ZTogVCkgPT4gT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuZXhwb3J0IGludGVyZmFjZSBGaWVsZFZhbHVlSXNBdmFpbGFibGVWYWxpZGF0b3JDb25maWc8VD4ge1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byB3YWl0IGluIGJldHdlZW4gdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIHRocm90dGxlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCBjaGVja3Mgd2hldGhlciBvciBub3QgdGhlIHZhbHVlIGlzIGN1cnJlbnRseSBhdmFpbGFibGUuXG4gICAqIFxuICAgKiBAcGFyYW0gdmFsdWUgXG4gICAqL1xuICByZWFkb25seSBjaGVja1ZhbHVlSXNBdmFpbGFibGU6IEZpZWxkVmFsdWVJc0F2YWlsYWJsZVZhbGlkYXRvckZ1bmN0aW9uPFQ+O1xuXG4gIC8qKlxuICAgKiBDdXN0b20gbWVzc2FnZSBmb3IgdGhpcyB2YWxpZGF0b3IuXG4gICAqL1xuICBtZXNzYWdlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogVmFsaWRhdG9yIGZvciB2YWxpZGF0aW5nIGFsbCB2YWx1ZXMgd2l0aGluIGFuIG9iamVjdC4gXG4gKiBcbiAqIFRoaXMgaXMgdXNlZnVsIGZvciB2YWxpZGF0aW5nIGEgY29udHJvbCBncm91cCB3aGVyZSB0d28gb3IgbW9yZSB2YWx1ZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHRoZSBzYW1lLCBzdWNoIGFzIGEgcGFzc3dvcmQgYW5kIGEgcGFzc3dvcmQgdmVyaWZpY2F0aW9uIGZpZWxkLlxuICogXG4gKiBAcGFyYW0gY29uZmlnIFxuICogQHJldHVybnMgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZFZhbHVlSXNBdmFpbGFibGVWYWxpZGF0b3I8VD4oY29uZmlnOiBGaWVsZFZhbHVlSXNBdmFpbGFibGVWYWxpZGF0b3JDb25maWc8VD4pOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgY29uc3Qge1xuICAgIHRocm90dGxlID0gNDAwLFxuICAgIGNoZWNrVmFsdWVJc0F2YWlsYWJsZSxcbiAgICBtZXNzYWdlID0gJ1RoaXMgdmFsdWUgaXMgbm90IGF2YWlsYWJsZS4nXG4gIH0gPSBjb25maWc7XG5cbiAgY29uc3QgcHVzaGVyID0gYXN5bmNQdXNoZXJDYWNoZTxUPih7XG4gICAgdGhyb3R0bGVcbiAgfSk7XG5cbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHB1c2hlcihjb250cm9sLnZhbHVlQ2hhbmdlcykoY29udHJvbC52YWx1ZSBhcyBUKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4gY2hlY2tWYWx1ZUlzQXZhaWxhYmxlKHgpKSxcbiAgICBtYXAoKGlzQXZhaWxhYmxlKSA9PiB7XG4gICAgICBpZiAoaXNBdmFpbGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFtGSUVMRF9WQUxVRV9JU19BVkFJTEFCTEVfVkFMSURBVElPTl9LRVldOiB7IG1lc3NhZ2UgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pLFxuICAgIGNhdGNoRXJyb3IoKCkgPT4gb2Yoe1xuICAgICAgW0ZJRUxEX1ZBTFVFX0lTX0FWQUlMQUJMRV9FUlJPUl9WQUxJREFUSU9OX0tFWV06IHsgbWVzc2FnZTogJ0FuIGVycm9yIG9jY3VyZWQuJyB9XG4gICAgfSkpLFxuICAgIGZpcnN0KClcbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,31 @@
1
+ import { allObjectsAreEqual, KeyValueTypleValueFilter, valuesFromPOJO } from "@dereekb/util";
2
+ export const FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY = 'fieldValuesAreEqual';
3
+ /**
4
+ * Validator for validating all values within an object.
5
+ *
6
+ * This is useful for validating a control group where two or more values are expected to be the same, such as a password and a password verification field.
7
+ *
8
+ * @param config
9
+ * @returns
10
+ */
11
+ export function fieldValuesAreEqualValidator(config = {}) {
12
+ const { keysFilter, valuesFilter: inputValuesFilter, isEqual = ((a, b) => a === b), message = 'Field values are not equal.' } = config;
13
+ const valuesFilter = inputValuesFilter ?? {
14
+ valueFilter: KeyValueTypleValueFilter.NONE,
15
+ keysFilter
16
+ };
17
+ return (control) => {
18
+ const object = control.value;
19
+ const values = valuesFromPOJO(object, valuesFilter);
20
+ const isValid = allObjectsAreEqual(values, isEqual);
21
+ if (isValid) {
22
+ return null;
23
+ }
24
+ else {
25
+ return {
26
+ [FIELD_VALUES_ARE_EQUAL_VALIDATION_KEY]: { message }
27
+ };
28
+ }
29
+ };
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL3ZhbGlkYXRvci9maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXVCLGtCQUFrQixFQUFtQix3QkFBd0IsRUFBYSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUksTUFBTSxDQUFDLE1BQU0scUNBQXFDLEdBQUcscUJBQXFCLENBQUM7QUE0QjNFOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQXlCLFNBQWdELEVBQUU7SUFDckgsTUFBTSxFQUNKLFVBQVUsRUFDVixZQUFZLEVBQUUsaUJBQWlCLEVBQy9CLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM3QixPQUFPLEdBQUcsNkJBQTZCLEVBQ3hDLEdBQUcsTUFBTSxDQUFDO0lBRVgsTUFBTSxZQUFZLEdBQWdDLGlCQUFpQixJQUFJO1FBQ3JFLFdBQVcsRUFBRSx3QkFBd0IsQ0FBQyxJQUFJO1FBQzFDLFVBQVU7S0FDWCxDQUFDO0lBRUYsT0FBTyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtRQUNsQyxNQUFNLE1BQU0sR0FBaUIsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUMzQyxNQUFNLE1BQU0sR0FBUSxjQUFjLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVwRCxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTTtZQUNMLE9BQU87Z0JBQ0wsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFO2FBQ3JELENBQUM7U0FDSDtJQUNILENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZVR1cGxlRmlsdGVyLCBhbGxPYmplY3RzQXJlRXF1YWwsIElzRXF1YWxGdW5jdGlvbiwgS2V5VmFsdWVUeXBsZVZhbHVlRmlsdGVyLCBPYmplY3RNYXAsIHZhbHVlc0Zyb21QT0pPIH0gZnJvbSBcIkBkZXJlZWtiL3V0aWxcIjtcblxuZXhwb3J0IGNvbnN0IEZJRUxEX1ZBTFVFU19BUkVfRVFVQUxfVkFMSURBVElPTl9LRVkgPSAnZmllbGRWYWx1ZXNBcmVFcXVhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRWYWx1ZXNBcmVFcXVhbFZhbGlkYXRvckNvbmZpZzxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG5cbiAgLyoqXG4gICAqIEtleXMgb2YgdGhlIHZhbHVlIHRvIG1hdGNoIG9uLiBcbiAgICogXG4gICAqIElmIG5vbmUgYXJlIGRlZmluZWQsIHRoZW4gYWxsIGZpZWxkcyBmcm9tIHRoZSBjb250cm9sIGFyZSBtYXRjaGVkLlxuICAgKi9cbiAga2V5c0ZpbHRlcj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGdWxsIGZpbHRlciB0byB1c2UsIGlmIGRlZmluZWQuXG4gICAqL1xuICB2YWx1ZXNGaWx0ZXI/OiBLZXlWYWx1ZVR1cGxlRmlsdGVyPFQsIGFueT47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGVxdWl2YWxlbmNlIGNvbXBhcmF0b3IuXG4gICAqL1xuICBpc0VxdWFsPzogSXNFcXVhbEZ1bmN0aW9uPFQ+O1xuXG4gIC8qKlxuICAgKiBDdXN0b20gbWVzc2FnZSBmb3IgdGhpcyB2YWxpZGF0b3IuXG4gICAqL1xuICBtZXNzYWdlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogVmFsaWRhdG9yIGZvciB2YWxpZGF0aW5nIGFsbCB2YWx1ZXMgd2l0aGluIGFuIG9iamVjdC4gXG4gKiBcbiAqIFRoaXMgaXMgdXNlZnVsIGZvciB2YWxpZGF0aW5nIGEgY29udHJvbCBncm91cCB3aGVyZSB0d28gb3IgbW9yZSB2YWx1ZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHRoZSBzYW1lLCBzdWNoIGFzIGEgcGFzc3dvcmQgYW5kIGEgcGFzc3dvcmQgdmVyaWZpY2F0aW9uIGZpZWxkLlxuICogXG4gKiBAcGFyYW0gY29uZmlnIFxuICogQHJldHVybnMgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZFZhbHVlc0FyZUVxdWFsVmFsaWRhdG9yPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+KGNvbmZpZzogRmllbGRWYWx1ZXNBcmVFcXVhbFZhbGlkYXRvckNvbmZpZzxUPiA9IHt9KTogVmFsaWRhdG9yRm4ge1xuICBjb25zdCB7XG4gICAga2V5c0ZpbHRlcixcbiAgICB2YWx1ZXNGaWx0ZXI6IGlucHV0VmFsdWVzRmlsdGVyLFxuICAgIGlzRXF1YWwgPSAoKGEsIGIpID0+IGEgPT09IGIpLFxuICAgIG1lc3NhZ2UgPSAnRmllbGQgdmFsdWVzIGFyZSBub3QgZXF1YWwuJ1xuICB9ID0gY29uZmlnO1xuXG4gIGNvbnN0IHZhbHVlc0ZpbHRlcjogS2V5VmFsdWVUdXBsZUZpbHRlcjxULCBhbnk+ID0gaW5wdXRWYWx1ZXNGaWx0ZXIgPz8ge1xuICAgIHZhbHVlRmlsdGVyOiBLZXlWYWx1ZVR5cGxlVmFsdWVGaWx0ZXIuTk9ORSwgLy8ga2VlcCBhbGwgdmFsdWVzLiBOdWxsL3VuZGVmaW5lZCBzaG91bGQgYmUgcHJvY2Vzc2VkLlxuICAgIGtleXNGaWx0ZXJcbiAgfTtcblxuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgIGNvbnN0IG9iamVjdDogT2JqZWN0TWFwPFQ+ID0gY29udHJvbC52YWx1ZTtcbiAgICBjb25zdCB2YWx1ZXM6IFRbXSA9IHZhbHVlc0Zyb21QT0pPKG9iamVjdCwgdmFsdWVzRmlsdGVyKTtcbiAgICBjb25zdCBpc1ZhbGlkID0gYWxsT2JqZWN0c0FyZUVxdWFsKHZhbHVlcywgaXNFcXVhbCk7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtGSUVMRF9WQUxVRVNfQVJFX0VRVUFMX1ZBTElEQVRJT05fS0VZXTogeyBtZXNzYWdlIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufVxuIl19
@@ -1,4 +1,6 @@
1
1
  export * from './boolean';
2
2
  export * from './email';
3
+ export * from './field';
3
4
  export * from './number';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL3ZhbGlkYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9vbGVhbic7XG5leHBvcnQgKiBmcm9tICcuL2VtYWlsJztcbmV4cG9ydCAqIGZyb20gJy4vbnVtYmVyJztcbiJdfQ==
5
+ export * from './available';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL3ZhbGlkYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9vbGVhbic7XG5leHBvcnQgKiBmcm9tICcuL2VtYWlsJztcbmV4cG9ydCAqIGZyb20gJy4vZmllbGQnO1xuZXhwb3J0ICogZnJvbSAnLi9udW1iZXInO1xuZXhwb3J0ICogZnJvbSAnLi9hdmFpbGFibGUnO1xuIl19