@elliemae/loan-field-renderers 26.2.2

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 (225) hide show
  1. package/dist/cjs/ARCHITECTURE.md +434 -0
  2. package/dist/cjs/OVERVIEW.md +229 -0
  3. package/dist/cjs/bll/constants.js +86 -0
  4. package/dist/cjs/bll/formatters/booleanFormatter.js +51 -0
  5. package/dist/cjs/bll/formatters/dateFormatter.js +78 -0
  6. package/dist/cjs/bll/formatters/dropdownFormatter.js +34 -0
  7. package/dist/cjs/bll/formatters/factory/index.js +115 -0
  8. package/dist/cjs/bll/formatters/index.js +24 -0
  9. package/dist/cjs/bll/formatters/numberFormatter.js +70 -0
  10. package/dist/cjs/bll/formatters/phoneFormatter.js +57 -0
  11. package/dist/cjs/bll/formatters/regexFormatter.js +52 -0
  12. package/dist/cjs/bll/formatters/ssnFormatter.js +50 -0
  13. package/dist/cjs/bll/formatters/textFormatter.js +43 -0
  14. package/dist/cjs/bll/formatters/zipFormatter.js +48 -0
  15. package/dist/cjs/bll/index.js +62 -0
  16. package/dist/cjs/bll/ssf/index.js +48 -0
  17. package/dist/cjs/bll/ssf/loan.js +81 -0
  18. package/dist/cjs/bll/ssf/loconnect.js +70 -0
  19. package/dist/cjs/bll/ssf/ssfBase.js +97 -0
  20. package/dist/cjs/bll/ssf/types.js +16 -0
  21. package/dist/cjs/bll/types.js +16 -0
  22. package/dist/cjs/bll/validators/dateValidator.js +60 -0
  23. package/dist/cjs/bll/validators/emailValidator.js +47 -0
  24. package/dist/cjs/bll/validators/factory/index.js +81 -0
  25. package/dist/cjs/bll/validators/index.js +24 -0
  26. package/dist/cjs/bll/validators/maxCharValidator.js +49 -0
  27. package/dist/cjs/bll/validators/requiredValidator.js +44 -0
  28. package/dist/cjs/bll/validators/zipValidator.js +53 -0
  29. package/dist/cjs/core/index.js +52 -0
  30. package/dist/cjs/demo/config.js +391 -0
  31. package/dist/cjs/demo/index.js +31 -0
  32. package/dist/cjs/package.json +7 -0
  33. package/dist/cjs/renderer/FieldRenderer.js +45 -0
  34. package/dist/cjs/renderer/base/hooks/fieldDescription.js +39 -0
  35. package/dist/cjs/renderer/base/hooks/fieldDisabled.js +53 -0
  36. package/dist/cjs/renderer/base/hooks/fieldGoTo.js +50 -0
  37. package/dist/cjs/renderer/base/hooks/fieldLocked.js +42 -0
  38. package/dist/cjs/renderer/base/hooks/fieldMeta.js +150 -0
  39. package/dist/cjs/renderer/base/hooks/fieldSubscribers.js +66 -0
  40. package/dist/cjs/renderer/base/hooks/fieldValidation.js +45 -0
  41. package/dist/cjs/renderer/base/hooks/fieldValue.js +215 -0
  42. package/dist/cjs/renderer/base/hooks/hookBase.js +29 -0
  43. package/dist/cjs/renderer/base/hooks/index.js +139 -0
  44. package/dist/cjs/renderer/base/renderer.js +198 -0
  45. package/dist/cjs/renderer/base/rendererValidator.js +97 -0
  46. package/dist/cjs/renderer/factory/index.js +58 -0
  47. package/dist/cjs/renderer/field-renderers/AddonRenderer.js +75 -0
  48. package/dist/cjs/renderer/field-renderers/CheckboxRenderer.js +123 -0
  49. package/dist/cjs/renderer/field-renderers/DateRenderer.js +206 -0
  50. package/dist/cjs/renderer/field-renderers/DropdownRenderer/hook.js +99 -0
  51. package/dist/cjs/renderer/field-renderers/DropdownRenderer/index.js +216 -0
  52. package/dist/cjs/renderer/field-renderers/LargeTextRenderer.js +209 -0
  53. package/dist/cjs/renderer/field-renderers/NumberRenderer.js +216 -0
  54. package/dist/cjs/renderer/field-renderers/RadioGroupRenderer.js +128 -0
  55. package/dist/cjs/renderer/field-renderers/RadioRenderer.js +121 -0
  56. package/dist/cjs/renderer/field-renderers/TextRenderer.js +223 -0
  57. package/dist/cjs/renderer/field-renderers/ToggleRenderer.js +121 -0
  58. package/dist/cjs/renderer/field-renderers/ZipCodeRenderer/helper.js +132 -0
  59. package/dist/cjs/renderer/field-renderers/ZipCodeRenderer/hook.js +128 -0
  60. package/dist/cjs/renderer/field-renderers/ZipCodeRenderer/index.js +273 -0
  61. package/dist/cjs/renderer/index.js +24 -0
  62. package/dist/cjs/renderer/styles.js +51 -0
  63. package/dist/cjs/renderer/types.js +16 -0
  64. package/dist/cjs/tests/base/flowBase.js +125 -0
  65. package/dist/cjs/tests/base/index.js +52 -0
  66. package/dist/cjs/tests/flows/checkboxRendererFlows.js +85 -0
  67. package/dist/cjs/tests/flows/dateRendererFlows.js +870 -0
  68. package/dist/cjs/tests/flows/dropdownRendererFlows.js +591 -0
  69. package/dist/cjs/tests/flows/largeTextRendererFlows.js +99 -0
  70. package/dist/cjs/tests/flows/numberRendererFlows.js +175 -0
  71. package/dist/cjs/tests/flows/radioRendererFlows.js +115 -0
  72. package/dist/cjs/tests/flows/textRendererFlows.js +349 -0
  73. package/dist/cjs/tests/flows/toggleRendererFlows.js +106 -0
  74. package/dist/cjs/tests/flows/zipCodeRendererFlows.js +1163 -0
  75. package/dist/cjs/utils/dateHelper.js +65 -0
  76. package/dist/esm/ARCHITECTURE.md +434 -0
  77. package/dist/esm/OVERVIEW.md +229 -0
  78. package/dist/esm/bll/constants.js +66 -0
  79. package/dist/esm/bll/formatters/booleanFormatter.js +33 -0
  80. package/dist/esm/bll/formatters/dateFormatter.js +48 -0
  81. package/dist/esm/bll/formatters/dropdownFormatter.js +14 -0
  82. package/dist/esm/bll/formatters/factory/index.js +97 -0
  83. package/dist/esm/bll/formatters/index.js +4 -0
  84. package/dist/esm/bll/formatters/numberFormatter.js +54 -0
  85. package/dist/esm/bll/formatters/phoneFormatter.js +41 -0
  86. package/dist/esm/bll/formatters/regexFormatter.js +34 -0
  87. package/dist/esm/bll/formatters/ssnFormatter.js +32 -0
  88. package/dist/esm/bll/formatters/textFormatter.js +25 -0
  89. package/dist/esm/bll/formatters/zipFormatter.js +30 -0
  90. package/dist/esm/bll/index.js +44 -0
  91. package/dist/esm/bll/ssf/index.js +30 -0
  92. package/dist/esm/bll/ssf/loan.js +63 -0
  93. package/dist/esm/bll/ssf/loconnect.js +52 -0
  94. package/dist/esm/bll/ssf/ssfBase.js +67 -0
  95. package/dist/esm/bll/ssf/types.js +0 -0
  96. package/dist/esm/bll/types.js +0 -0
  97. package/dist/esm/bll/validators/dateValidator.js +30 -0
  98. package/dist/esm/bll/validators/emailValidator.js +29 -0
  99. package/dist/esm/bll/validators/factory/index.js +63 -0
  100. package/dist/esm/bll/validators/index.js +4 -0
  101. package/dist/esm/bll/validators/maxCharValidator.js +31 -0
  102. package/dist/esm/bll/validators/requiredValidator.js +26 -0
  103. package/dist/esm/bll/validators/zipValidator.js +35 -0
  104. package/dist/esm/core/index.js +34 -0
  105. package/dist/esm/demo/config.js +371 -0
  106. package/dist/esm/demo/index.js +11 -0
  107. package/dist/esm/package.json +7 -0
  108. package/dist/esm/renderer/FieldRenderer.js +15 -0
  109. package/dist/esm/renderer/base/hooks/fieldDescription.js +19 -0
  110. package/dist/esm/renderer/base/hooks/fieldDisabled.js +33 -0
  111. package/dist/esm/renderer/base/hooks/fieldGoTo.js +30 -0
  112. package/dist/esm/renderer/base/hooks/fieldLocked.js +22 -0
  113. package/dist/esm/renderer/base/hooks/fieldMeta.js +132 -0
  114. package/dist/esm/renderer/base/hooks/fieldSubscribers.js +36 -0
  115. package/dist/esm/renderer/base/hooks/fieldValidation.js +25 -0
  116. package/dist/esm/renderer/base/hooks/fieldValue.js +195 -0
  117. package/dist/esm/renderer/base/hooks/hookBase.js +9 -0
  118. package/dist/esm/renderer/base/hooks/index.js +121 -0
  119. package/dist/esm/renderer/base/renderer.js +178 -0
  120. package/dist/esm/renderer/base/rendererValidator.js +77 -0
  121. package/dist/esm/renderer/factory/index.js +38 -0
  122. package/dist/esm/renderer/field-renderers/AddonRenderer.js +55 -0
  123. package/dist/esm/renderer/field-renderers/CheckboxRenderer.js +93 -0
  124. package/dist/esm/renderer/field-renderers/DateRenderer.js +176 -0
  125. package/dist/esm/renderer/field-renderers/DropdownRenderer/hook.js +79 -0
  126. package/dist/esm/renderer/field-renderers/DropdownRenderer/index.js +186 -0
  127. package/dist/esm/renderer/field-renderers/LargeTextRenderer.js +179 -0
  128. package/dist/esm/renderer/field-renderers/NumberRenderer.js +188 -0
  129. package/dist/esm/renderer/field-renderers/RadioGroupRenderer.js +108 -0
  130. package/dist/esm/renderer/field-renderers/RadioRenderer.js +91 -0
  131. package/dist/esm/renderer/field-renderers/TextRenderer.js +197 -0
  132. package/dist/esm/renderer/field-renderers/ToggleRenderer.js +91 -0
  133. package/dist/esm/renderer/field-renderers/ZipCodeRenderer/helper.js +112 -0
  134. package/dist/esm/renderer/field-renderers/ZipCodeRenderer/hook.js +108 -0
  135. package/dist/esm/renderer/field-renderers/ZipCodeRenderer/index.js +247 -0
  136. package/dist/esm/renderer/index.js +4 -0
  137. package/dist/esm/renderer/styles.js +21 -0
  138. package/dist/esm/renderer/types.js +0 -0
  139. package/dist/esm/tests/base/flowBase.js +105 -0
  140. package/dist/esm/tests/base/index.js +22 -0
  141. package/dist/esm/tests/flows/checkboxRendererFlows.js +65 -0
  142. package/dist/esm/tests/flows/dateRendererFlows.js +850 -0
  143. package/dist/esm/tests/flows/dropdownRendererFlows.js +571 -0
  144. package/dist/esm/tests/flows/largeTextRendererFlows.js +79 -0
  145. package/dist/esm/tests/flows/numberRendererFlows.js +155 -0
  146. package/dist/esm/tests/flows/radioRendererFlows.js +95 -0
  147. package/dist/esm/tests/flows/textRendererFlows.js +329 -0
  148. package/dist/esm/tests/flows/toggleRendererFlows.js +86 -0
  149. package/dist/esm/tests/flows/zipCodeRendererFlows.js +1143 -0
  150. package/dist/esm/utils/dateHelper.js +35 -0
  151. package/dist/types/lib/bll/constants.d.ts +9 -0
  152. package/dist/types/lib/bll/formatters/booleanFormatter.d.ts +5 -0
  153. package/dist/types/lib/bll/formatters/dateFormatter.d.ts +28 -0
  154. package/dist/types/lib/bll/formatters/dropdownFormatter.d.ts +6 -0
  155. package/dist/types/lib/bll/formatters/factory/index.d.ts +71 -0
  156. package/dist/types/lib/bll/formatters/index.d.ts +2 -0
  157. package/dist/types/lib/bll/formatters/numberFormatter.d.ts +6 -0
  158. package/dist/types/lib/bll/formatters/phoneFormatter.d.ts +7 -0
  159. package/dist/types/lib/bll/formatters/regexFormatter.d.ts +5 -0
  160. package/dist/types/lib/bll/formatters/ssnFormatter.d.ts +5 -0
  161. package/dist/types/lib/bll/formatters/textFormatter.d.ts +6 -0
  162. package/dist/types/lib/bll/formatters/zipFormatter.d.ts +5 -0
  163. package/dist/types/lib/bll/index.d.ts +20 -0
  164. package/dist/types/lib/bll/ssf/index.d.ts +25 -0
  165. package/dist/types/lib/bll/ssf/loan.d.ts +16 -0
  166. package/dist/types/lib/bll/ssf/loconnect.d.ts +15 -0
  167. package/dist/types/lib/bll/ssf/ssfBase.d.ts +23 -0
  168. package/dist/types/lib/bll/ssf/types.d.ts +99 -0
  169. package/dist/types/lib/bll/types.d.ts +47 -0
  170. package/dist/types/lib/bll/validators/dateValidator.d.ts +16 -0
  171. package/dist/types/lib/bll/validators/emailValidator.d.ts +4 -0
  172. package/dist/types/lib/bll/validators/factory/index.d.ts +15 -0
  173. package/dist/types/lib/bll/validators/index.d.ts +2 -0
  174. package/dist/types/lib/bll/validators/maxCharValidator.d.ts +4 -0
  175. package/dist/types/lib/bll/validators/requiredValidator.d.ts +4 -0
  176. package/dist/types/lib/bll/validators/zipValidator.d.ts +5 -0
  177. package/dist/types/lib/core/index.d.ts +29 -0
  178. package/dist/types/lib/demo/config.d.ts +11 -0
  179. package/dist/types/lib/demo/index.d.ts +1 -0
  180. package/dist/types/lib/renderer/FieldRenderer.d.ts +5 -0
  181. package/dist/types/lib/renderer/base/hooks/fieldDescription.d.ts +5 -0
  182. package/dist/types/lib/renderer/base/hooks/fieldDisabled.d.ts +10 -0
  183. package/dist/types/lib/renderer/base/hooks/fieldGoTo.d.ts +4 -0
  184. package/dist/types/lib/renderer/base/hooks/fieldLocked.d.ts +4 -0
  185. package/dist/types/lib/renderer/base/hooks/fieldMeta.d.ts +10 -0
  186. package/dist/types/lib/renderer/base/hooks/fieldSubscribers.d.ts +6 -0
  187. package/dist/types/lib/renderer/base/hooks/fieldValidation.d.ts +9 -0
  188. package/dist/types/lib/renderer/base/hooks/fieldValue.d.ts +31 -0
  189. package/dist/types/lib/renderer/base/hooks/hookBase.d.ts +9 -0
  190. package/dist/types/lib/renderer/base/hooks/index.d.ts +19 -0
  191. package/dist/types/lib/renderer/base/renderer.d.ts +43 -0
  192. package/dist/types/lib/renderer/base/rendererValidator.d.ts +15 -0
  193. package/dist/types/lib/renderer/factory/index.d.ts +5 -0
  194. package/dist/types/lib/renderer/field-renderers/AddonRenderer.d.ts +12 -0
  195. package/dist/types/lib/renderer/field-renderers/CheckboxRenderer.d.ts +7 -0
  196. package/dist/types/lib/renderer/field-renderers/DateRenderer.d.ts +13 -0
  197. package/dist/types/lib/renderer/field-renderers/DropdownRenderer/hook.d.ts +23 -0
  198. package/dist/types/lib/renderer/field-renderers/DropdownRenderer/index.d.ts +12 -0
  199. package/dist/types/lib/renderer/field-renderers/LargeTextRenderer.d.ts +17 -0
  200. package/dist/types/lib/renderer/field-renderers/NumberRenderer.d.ts +12 -0
  201. package/dist/types/lib/renderer/field-renderers/RadioGroupRenderer.d.ts +8 -0
  202. package/dist/types/lib/renderer/field-renderers/RadioRenderer.d.ts +8 -0
  203. package/dist/types/lib/renderer/field-renderers/TextRenderer.d.ts +8 -0
  204. package/dist/types/lib/renderer/field-renderers/ToggleRenderer.d.ts +24 -0
  205. package/dist/types/lib/renderer/field-renderers/ZipCodeRenderer/helper.d.ts +48 -0
  206. package/dist/types/lib/renderer/field-renderers/ZipCodeRenderer/hook.d.ts +17 -0
  207. package/dist/types/lib/renderer/field-renderers/ZipCodeRenderer/index.d.ts +9 -0
  208. package/dist/types/lib/renderer/index.d.ts +2 -0
  209. package/dist/types/lib/renderer/styles.d.ts +7 -0
  210. package/dist/types/lib/renderer/types.d.ts +325 -0
  211. package/dist/types/lib/tests/base/flowBase.d.ts +13 -0
  212. package/dist/types/lib/tests/base/index.d.ts +6 -0
  213. package/dist/types/lib/tests/flows/checkboxRendererFlows.d.ts +9 -0
  214. package/dist/types/lib/tests/flows/dateRendererFlows.d.ts +120 -0
  215. package/dist/types/lib/tests/flows/dropdownRendererFlows.d.ts +92 -0
  216. package/dist/types/lib/tests/flows/largeTextRendererFlows.d.ts +9 -0
  217. package/dist/types/lib/tests/flows/numberRendererFlows.d.ts +11 -0
  218. package/dist/types/lib/tests/flows/radioRendererFlows.d.ts +10 -0
  219. package/dist/types/lib/tests/flows/textRendererFlows.d.ts +16 -0
  220. package/dist/types/lib/tests/flows/toggleRendererFlows.d.ts +10 -0
  221. package/dist/types/lib/tests/flows/zipCodeRendererFlows.d.ts +169 -0
  222. package/dist/types/lib/tests/loan-field-renderer-flows.test.d.ts +1 -0
  223. package/dist/types/lib/utils/dateHelper.d.ts +8 -0
  224. package/dist/types/tsconfig.tsbuildinfo +1 -0
  225. package/package.json +103 -0
@@ -0,0 +1,870 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var dateRendererFlows_exports = {};
20
+ __export(dateRendererFlows_exports, {
21
+ DateRendererFlows: () => DateRendererFlows
22
+ });
23
+ module.exports = __toCommonJS(dateRendererFlows_exports);
24
+ var import_flow_driven_testing = require("@elliemae/flow-driven-testing");
25
+ var import_flowBase = require("../base/flowBase");
26
+ class DateRendererFlows extends import_flowBase.FlowBase {
27
+ constructor(flowParams) {
28
+ super(flowParams);
29
+ this.flowParams = flowParams;
30
+ }
31
+ flowParams;
32
+ /**
33
+ * Test 1: Verify date field renders correctly
34
+ */
35
+ CheckDateRendering() {
36
+ return {
37
+ [`${this.flowParams.inboundFlow}`]: {
38
+ name: this.getFlowName(
39
+ "DateRenderer",
40
+ "check date field renders correctly"
41
+ ),
42
+ asserts: [
43
+ {
44
+ selector: '[data-testid="748"]',
45
+ isExists: true
46
+ }
47
+ ],
48
+ transitions: [
49
+ {
50
+ to: "checkDateInputValue"
51
+ }
52
+ ]
53
+ }
54
+ };
55
+ }
56
+ /**
57
+ * Test 2: Enter a date value and verify it persists
58
+ */
59
+ CheckDateInputValue() {
60
+ return {
61
+ checkDateInputValue: {
62
+ name: this.getFlowName(
63
+ "DateRenderer",
64
+ "check date input value persists"
65
+ ),
66
+ startFlow: [
67
+ {
68
+ selector: '[data-testid="748"] input',
69
+ value: "01/15/2026",
70
+ action: import_flow_driven_testing.TTriggerActions.BLUR
71
+ }
72
+ ],
73
+ asserts: [
74
+ {
75
+ ssfFunctionsCalled: ["setFields"]
76
+ },
77
+ {
78
+ assertFn: () => {
79
+ const inputElement = document.querySelector(
80
+ '[data-testid="748"] input'
81
+ );
82
+ return inputElement && inputElement.value === "01/15/2026";
83
+ }
84
+ }
85
+ ],
86
+ transitions: [
87
+ {
88
+ to: "checkDateOnBlur"
89
+ }
90
+ ]
91
+ }
92
+ };
93
+ }
94
+ /**
95
+ * Test 3: Verify onBlur triggers SSF setFields
96
+ */
97
+ CheckDateOnBlur() {
98
+ return {
99
+ checkDateOnBlur: {
100
+ name: this.getFlowName(
101
+ "DateRenderer",
102
+ "check onBlur callback triggers"
103
+ ),
104
+ startFlow: [
105
+ {
106
+ selector: '[data-testid="748"] input',
107
+ value: "06/30/2025",
108
+ action: import_flow_driven_testing.TTriggerActions.BLUR
109
+ }
110
+ ],
111
+ asserts: [
112
+ {
113
+ ssfFunctionsCalled: ["setFields"]
114
+ },
115
+ {
116
+ assertFn: () => {
117
+ const inputElement = document.querySelector(
118
+ '[data-testid="748"] input'
119
+ );
120
+ return inputElement && inputElement.value === "06/30/2025";
121
+ }
122
+ }
123
+ ],
124
+ transitions: [
125
+ {
126
+ to: "checkDateEmptyValue"
127
+ }
128
+ ]
129
+ }
130
+ };
131
+ }
132
+ /**
133
+ * Test 4: Verify empty date value handling
134
+ */
135
+ CheckDateEmptyValue() {
136
+ return {
137
+ checkDateEmptyValue: {
138
+ name: this.getFlowName("DateRenderer", "check empty date handling"),
139
+ startFlow: [
140
+ {
141
+ selector: '[data-testid="748"] input',
142
+ value: "",
143
+ action: import_flow_driven_testing.TTriggerActions.BLUR
144
+ }
145
+ ],
146
+ asserts: [
147
+ {
148
+ ssfFunctionsCalled: ["setFields"]
149
+ },
150
+ {
151
+ assertFn: () => {
152
+ const inputElement = document.querySelector(
153
+ '[data-testid="748"] input'
154
+ );
155
+ return inputElement && inputElement.value === "";
156
+ }
157
+ }
158
+ ],
159
+ transitions: [
160
+ {
161
+ to: "checkSecondDateField"
162
+ }
163
+ ]
164
+ }
165
+ };
166
+ }
167
+ /**
168
+ * Test 5: Verify second date field exists and works
169
+ */
170
+ CheckSecondDateField() {
171
+ return {
172
+ checkSecondDateField: {
173
+ name: this.getFlowName("DateRenderer", "check second date field"),
174
+ asserts: [
175
+ {
176
+ selector: '[data-testid="763"]',
177
+ isExists: true
178
+ }
179
+ ],
180
+ transitions: [
181
+ {
182
+ to: "checkSecondDateValue"
183
+ }
184
+ ]
185
+ }
186
+ };
187
+ }
188
+ /**
189
+ * Test 6: Enter value in second date field
190
+ */
191
+ CheckSecondDateValue() {
192
+ return {
193
+ checkSecondDateValue: {
194
+ name: this.getFlowName(
195
+ "DateRenderer",
196
+ "check second date field value entry"
197
+ ),
198
+ startFlow: [
199
+ {
200
+ selector: '[data-testid="763"] input',
201
+ value: "11/15/2025",
202
+ action: import_flow_driven_testing.TTriggerActions.BLUR
203
+ }
204
+ ],
205
+ asserts: [
206
+ {
207
+ ssfFunctionsCalled: ["setFields"]
208
+ },
209
+ {
210
+ assertFn: () => {
211
+ const inputElement = document.querySelector(
212
+ '[data-testid="763"] input'
213
+ );
214
+ return inputElement && inputElement.value === "11/15/2025";
215
+ }
216
+ }
217
+ ],
218
+ transitions: [
219
+ {
220
+ to: "checkDateClearValue"
221
+ }
222
+ ]
223
+ }
224
+ };
225
+ }
226
+ /**
227
+ * Test 7: Verify date field can be cleared
228
+ */
229
+ CheckDateClearValue() {
230
+ return {
231
+ checkDateClearValue: {
232
+ name: this.getFlowName("DateRenderer", "check date clear value"),
233
+ startFlow: [
234
+ {
235
+ selector: '[data-testid="763"] input',
236
+ value: "",
237
+ action: import_flow_driven_testing.TTriggerActions.BLUR
238
+ }
239
+ ],
240
+ asserts: [
241
+ {
242
+ ssfFunctionsCalled: ["setFields"]
243
+ },
244
+ {
245
+ assertFn: () => {
246
+ const inputElement = document.querySelector(
247
+ '[data-testid="763"] input'
248
+ );
249
+ return inputElement && inputElement.value === "";
250
+ }
251
+ }
252
+ ],
253
+ transitions: [
254
+ {
255
+ to: "checkDateMultipleChanges"
256
+ }
257
+ ]
258
+ }
259
+ };
260
+ }
261
+ /**
262
+ * Test 8: Multiple date value changes - use individual inputs to trigger onDateChange
263
+ */
264
+ CheckDateMultipleChanges() {
265
+ return {
266
+ checkDateMultipleChanges: {
267
+ name: this.getFlowName(
268
+ "DateRenderer",
269
+ "check multiple date value changes"
270
+ ),
271
+ startFlow: [
272
+ {
273
+ selector: '[data-testid="748"] [data-testid="ds-controlled-date-time-picker-month-input"]',
274
+ value: "03",
275
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
276
+ },
277
+ {
278
+ selector: '[data-testid="748"] [data-testid="ds-controlled-date-time-picker-day-input"]',
279
+ value: "15",
280
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
281
+ },
282
+ {
283
+ selector: '[data-testid="748"] [data-testid="ds-controlled-date-time-picker-year-input"]',
284
+ value: "2025",
285
+ action: import_flow_driven_testing.TTriggerActions.BLUR
286
+ }
287
+ ],
288
+ asserts: [
289
+ {
290
+ assertFn: () => {
291
+ const inputElement = document.querySelector(
292
+ '[data-testid="748"] input'
293
+ );
294
+ return inputElement !== null;
295
+ }
296
+ }
297
+ ],
298
+ transitions: [
299
+ {
300
+ to: "checkDateFinalState"
301
+ }
302
+ ]
303
+ }
304
+ };
305
+ }
306
+ /**
307
+ * Test 9: Final state verification
308
+ */
309
+ CheckDateFinalState() {
310
+ return {
311
+ checkDateFinalState: {
312
+ name: this.getFlowName(
313
+ "DateRenderer",
314
+ "check date fields final state is valid"
315
+ ),
316
+ asserts: [
317
+ {
318
+ assertFn: () => {
319
+ const date1 = document.querySelector('[data-testid="748"]');
320
+ const date2 = document.querySelector('[data-testid="763"]');
321
+ return date1 !== null && date2 !== null;
322
+ }
323
+ }
324
+ ],
325
+ transitions: [
326
+ {
327
+ to: "checkInvalidDateResetsField"
328
+ }
329
+ ]
330
+ }
331
+ };
332
+ }
333
+ /**
334
+ * Test 10: Invalid/partial date input resets field and sends null to SSF
335
+ */
336
+ CheckInvalidDateResetsField() {
337
+ return {
338
+ checkInvalidDateResetsField: {
339
+ name: this.getFlowName(
340
+ "DateRenderer",
341
+ "check invalid/partial date resets field and sends null"
342
+ ),
343
+ startFlow: [
344
+ {
345
+ selector: '[data-testid="748"] input',
346
+ value: "13/45/2026",
347
+ // Invalid date (month 13, day 45)
348
+ action: import_flow_driven_testing.TTriggerActions.BLUR
349
+ }
350
+ ],
351
+ asserts: [
352
+ {
353
+ ssfFunctionsCalled: ["setFields"]
354
+ },
355
+ {
356
+ assertFn: () => {
357
+ const inputElement = document.querySelector(
358
+ '[data-testid="748"] input'
359
+ );
360
+ return inputElement && inputElement.value === "";
361
+ }
362
+ }
363
+ ],
364
+ transitions: [
365
+ {
366
+ to: "checkPartialDateResetsField"
367
+ }
368
+ ]
369
+ }
370
+ };
371
+ }
372
+ /**
373
+ * Test 11: Partial date input resets field
374
+ */
375
+ CheckPartialDateResetsField() {
376
+ return {
377
+ checkPartialDateResetsField: {
378
+ name: this.getFlowName(
379
+ "DateRenderer",
380
+ "check partial date input resets field"
381
+ ),
382
+ startFlow: [
383
+ {
384
+ selector: '[data-testid="748"] input',
385
+ value: "01/15",
386
+ // Partial date (missing year)
387
+ action: import_flow_driven_testing.TTriggerActions.BLUR
388
+ }
389
+ ],
390
+ asserts: [
391
+ {
392
+ ssfFunctionsCalled: ["setFields"]
393
+ },
394
+ {
395
+ assertFn: () => {
396
+ const inputElement = document.querySelector(
397
+ '[data-testid="748"] input'
398
+ );
399
+ return inputElement && inputElement.value === "";
400
+ }
401
+ }
402
+ ],
403
+ transitions: [
404
+ {
405
+ to: "checkInvalidDateNoErrorMessage"
406
+ }
407
+ ]
408
+ }
409
+ };
410
+ }
411
+ /**
412
+ * Test 12: Invalid date input does not show validation error message
413
+ */
414
+ CheckInvalidDateNoErrorMessage() {
415
+ return {
416
+ checkInvalidDateNoErrorMessage: {
417
+ name: this.getFlowName(
418
+ "DateRenderer",
419
+ "check invalid date does not show error message"
420
+ ),
421
+ startFlow: [
422
+ {
423
+ selector: '[data-testid="763"] input',
424
+ value: "abc/de/fghi",
425
+ // Completely invalid date
426
+ action: import_flow_driven_testing.TTriggerActions.BLUR
427
+ }
428
+ ],
429
+ asserts: [
430
+ {
431
+ ssfFunctionsCalled: ["setFields"]
432
+ },
433
+ {
434
+ assertFn: () => {
435
+ const inputElement = document.querySelector(
436
+ '[data-testid="763"] input'
437
+ );
438
+ if (!inputElement || inputElement.value !== "") {
439
+ return false;
440
+ }
441
+ const fieldWrapper = document.querySelector(
442
+ '[data-testid="763"]'
443
+ );
444
+ const hasErrorState = fieldWrapper?.querySelector('[class*="error"]') || inputElement.getAttribute("aria-invalid") === "true";
445
+ return !hasErrorState;
446
+ }
447
+ }
448
+ ],
449
+ transitions: [
450
+ {
451
+ to: "checkDateFormatOptionDefault"
452
+ }
453
+ ]
454
+ }
455
+ };
456
+ }
457
+ /**
458
+ * Test 13: Date format option - default MM/DD/YYYY format
459
+ */
460
+ CheckDateFormatOptionDefault() {
461
+ return {
462
+ checkDateFormatOptionDefault: {
463
+ name: this.getFlowName(
464
+ "DateRenderer",
465
+ "check default date format MM/DD/YYYY"
466
+ ),
467
+ startFlow: [
468
+ {
469
+ selector: '[data-testid="748"] input',
470
+ value: "12/25/2025",
471
+ action: import_flow_driven_testing.TTriggerActions.BLUR
472
+ }
473
+ ],
474
+ asserts: [
475
+ {
476
+ ssfFunctionsCalled: ["setFields"]
477
+ },
478
+ {
479
+ assertFn: () => {
480
+ const inputElement = document.querySelector(
481
+ '[data-testid="748"] input'
482
+ );
483
+ const value = inputElement?.value || "";
484
+ const mmddyyyyPattern = /^\d{2}\/\d{2}\/\d{4}$/;
485
+ return mmddyyyyPattern.test(value);
486
+ }
487
+ }
488
+ ],
489
+ transitions: [
490
+ {
491
+ to: "checkValidDateAfterInvalid"
492
+ }
493
+ ]
494
+ }
495
+ };
496
+ }
497
+ /**
498
+ * Test 14: Valid date entry after invalid - ensures field recovers correctly
499
+ */
500
+ CheckValidDateAfterInvalid() {
501
+ return {
502
+ checkValidDateAfterInvalid: {
503
+ name: this.getFlowName(
504
+ "DateRenderer",
505
+ "check valid date entry after invalid recovers field"
506
+ ),
507
+ startFlow: [
508
+ {
509
+ selector: '[data-testid="763"] input',
510
+ value: "invalid",
511
+ action: import_flow_driven_testing.TTriggerActions.BLUR
512
+ },
513
+ {
514
+ selector: '[data-testid="763"] input',
515
+ value: "07/04/2025",
516
+ action: import_flow_driven_testing.TTriggerActions.BLUR
517
+ }
518
+ ],
519
+ asserts: [
520
+ {
521
+ ssfFunctionsCalled: ["setFields"]
522
+ },
523
+ {
524
+ assertFn: () => {
525
+ const inputElement = document.querySelector(
526
+ '[data-testid="763"] input'
527
+ );
528
+ return inputElement && inputElement.value === "07/04/2025";
529
+ }
530
+ }
531
+ ],
532
+ transitions: [
533
+ {
534
+ to: "checkDateFinalStateComplete"
535
+ }
536
+ ]
537
+ }
538
+ };
539
+ }
540
+ /**
541
+ * Test 15: Final complete state verification
542
+ */
543
+ CheckDateFinalStateComplete() {
544
+ return {
545
+ checkDateFinalStateComplete: {
546
+ name: this.getFlowName(
547
+ "DateRenderer",
548
+ "check all date scenarios completed successfully"
549
+ ),
550
+ asserts: [
551
+ {
552
+ assertFn: () => {
553
+ const date1 = document.querySelector('[data-testid="748"]');
554
+ const date2 = document.querySelector('[data-testid="763"]');
555
+ return date1 !== null && date2 !== null;
556
+ }
557
+ }
558
+ ],
559
+ transitions: [
560
+ {
561
+ to: "checkDisabledDateField"
562
+ }
563
+ ]
564
+ }
565
+ };
566
+ }
567
+ /**
568
+ * Test 16: Disabled date field - input should be blocked
569
+ */
570
+ CheckDisabledDateField() {
571
+ return {
572
+ checkDisabledDateField: {
573
+ name: this.getFlowName(
574
+ "DateRenderer",
575
+ "check disabled date field blocks input"
576
+ ),
577
+ asserts: [
578
+ {
579
+ selector: '[data-testid="762"]',
580
+ isExists: true
581
+ },
582
+ {
583
+ assertFn: () => {
584
+ const inputElement = document.querySelector(
585
+ '[data-testid="762"] input'
586
+ );
587
+ return inputElement && inputElement.disabled === true;
588
+ }
589
+ }
590
+ ],
591
+ transitions: [
592
+ {
593
+ to: "checkDisabledDateNoUpdate"
594
+ }
595
+ ]
596
+ }
597
+ };
598
+ }
599
+ /**
600
+ * Test 17: Disabled date field - blur should not trigger update
601
+ */
602
+ CheckDisabledDateNoUpdate() {
603
+ return {
604
+ checkDisabledDateNoUpdate: {
605
+ name: this.getFlowName(
606
+ "DateRenderer",
607
+ "check disabled date field blur does not update"
608
+ ),
609
+ startFlow: [
610
+ {
611
+ selector: '[data-testid="762"] input',
612
+ value: "05/05/2025",
613
+ action: import_flow_driven_testing.TTriggerActions.BLUR
614
+ }
615
+ ],
616
+ asserts: [
617
+ {
618
+ assertFn: () => {
619
+ const inputElement = document.querySelector(
620
+ '[data-testid="762"] input'
621
+ );
622
+ return inputElement && inputElement.value === "";
623
+ }
624
+ }
625
+ ],
626
+ transitions: [
627
+ {
628
+ to: "checkAutoFieldSetFalse"
629
+ }
630
+ ]
631
+ }
632
+ };
633
+ }
634
+ /**
635
+ * Test 18: autoFieldSet=false - onBlur fires but SSF setFields skipped
636
+ */
637
+ CheckAutoFieldSetFalse() {
638
+ return {
639
+ checkAutoFieldSetFalse: {
640
+ name: this.getFlowName(
641
+ "DateRenderer",
642
+ "check autoFieldSet=false skips SSF call"
643
+ ),
644
+ asserts: [
645
+ {
646
+ selector: '[data-testid="761"]',
647
+ isExists: true
648
+ }
649
+ ],
650
+ transitions: [
651
+ {
652
+ to: "checkAutoFieldSetFalseBlur"
653
+ }
654
+ ]
655
+ }
656
+ };
657
+ }
658
+ /**
659
+ * Test 19: autoFieldSet=false - valid date entry with manual handling
660
+ */
661
+ CheckAutoFieldSetFalseBlur() {
662
+ return {
663
+ checkAutoFieldSetFalseBlur: {
664
+ name: this.getFlowName(
665
+ "DateRenderer",
666
+ "check autoFieldSet=false blur with valid date"
667
+ ),
668
+ startFlow: [
669
+ {
670
+ selector: '[data-testid="761"] input',
671
+ value: "09/15/2025",
672
+ action: import_flow_driven_testing.TTriggerActions.BLUR
673
+ }
674
+ ],
675
+ asserts: [
676
+ {
677
+ assertFn: () => {
678
+ const inputElement = document.querySelector(
679
+ '[data-testid="761"] input'
680
+ );
681
+ return inputElement && inputElement.value === "09/15/2025";
682
+ }
683
+ }
684
+ ],
685
+ transitions: [
686
+ {
687
+ to: "checkOnDateChangeEvent"
688
+ }
689
+ ]
690
+ }
691
+ };
692
+ }
693
+ /**
694
+ * Test 20: onDateChange event - value changes via individual date inputs
695
+ */
696
+ CheckOnDateChangeEvent() {
697
+ return {
698
+ checkOnDateChangeEvent: {
699
+ name: this.getFlowName(
700
+ "DateRenderer",
701
+ "check onDateChange event fires on input change"
702
+ ),
703
+ startFlow: [
704
+ {
705
+ selector: '[data-testid="763"] [data-testid="ds-controlled-date-time-picker-month-input"]',
706
+ value: "08",
707
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
708
+ },
709
+ {
710
+ selector: '[data-testid="763"] [data-testid="ds-controlled-date-time-picker-day-input"]',
711
+ value: "20",
712
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
713
+ },
714
+ {
715
+ selector: '[data-testid="763"] [data-testid="ds-controlled-date-time-picker-year-input"]',
716
+ value: "2026",
717
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
718
+ }
719
+ ],
720
+ asserts: [
721
+ {
722
+ assertFn: () => {
723
+ const field = document.querySelector('[data-testid="763"]');
724
+ return field !== null;
725
+ }
726
+ }
727
+ ],
728
+ transitions: [
729
+ {
730
+ to: "checkDateChangeWithoutOnChange"
731
+ }
732
+ ]
733
+ }
734
+ };
735
+ }
736
+ /**
737
+ * Test 21: Date change without onChange callback (field 763 has no onChange)
738
+ */
739
+ CheckDateChangeWithoutOnChange() {
740
+ return {
741
+ checkDateChangeWithoutOnChange: {
742
+ name: this.getFlowName(
743
+ "DateRenderer",
744
+ "check date change without onChange callback"
745
+ ),
746
+ startFlow: [
747
+ {
748
+ selector: '[data-testid="763"] input',
749
+ value: "10/31/2025",
750
+ action: import_flow_driven_testing.TTriggerActions.BLUR
751
+ }
752
+ ],
753
+ asserts: [
754
+ {
755
+ ssfFunctionsCalled: ["setFields"]
756
+ },
757
+ {
758
+ assertFn: () => {
759
+ const inputElement = document.querySelector(
760
+ '[data-testid="763"] input'
761
+ );
762
+ return inputElement && inputElement.value === "10/31/2025";
763
+ }
764
+ }
765
+ ],
766
+ transitions: [
767
+ {
768
+ to: "checkDateWithOnChangeCallback"
769
+ }
770
+ ]
771
+ }
772
+ };
773
+ }
774
+ /**
775
+ * Test 22: Date change with onChange callback (field 748 has onChange)
776
+ */
777
+ CheckDateWithOnChangeCallback() {
778
+ return {
779
+ checkDateWithOnChangeCallback: {
780
+ name: this.getFlowName(
781
+ "DateRenderer",
782
+ "check date change with onChange callback fires"
783
+ ),
784
+ startFlow: [
785
+ {
786
+ selector: '[data-testid="748"] [data-testid="ds-controlled-date-time-picker-month-input"]',
787
+ value: "04",
788
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
789
+ },
790
+ {
791
+ selector: '[data-testid="748"] [data-testid="ds-controlled-date-time-picker-day-input"]',
792
+ value: "01",
793
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
794
+ },
795
+ {
796
+ selector: '[data-testid="748"] [data-testid="ds-controlled-date-time-picker-year-input"]',
797
+ value: "2025",
798
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
799
+ }
800
+ ],
801
+ asserts: [
802
+ {
803
+ assertFn: () => {
804
+ const field = document.querySelector('[data-testid="748"]');
805
+ return field !== null;
806
+ }
807
+ }
808
+ ],
809
+ transitions: [
810
+ {
811
+ to: "checkAllDateFieldsFinalState"
812
+ }
813
+ ]
814
+ }
815
+ };
816
+ }
817
+ /**
818
+ * Test 23: All date fields final state verification
819
+ */
820
+ CheckAllDateFieldsFinalState() {
821
+ const transitions = this.flowParams.outboundFlow ? [{ to: this.flowParams.outboundFlow }] : [];
822
+ return {
823
+ checkAllDateFieldsFinalState: {
824
+ name: this.getFlowName(
825
+ "DateRenderer",
826
+ "check all date fields exist in final state"
827
+ ),
828
+ asserts: [
829
+ {
830
+ assertFn: () => {
831
+ const date748 = document.querySelector('[data-testid="748"]');
832
+ const date763 = document.querySelector('[data-testid="763"]');
833
+ const date762 = document.querySelector('[data-testid="762"]');
834
+ const date761 = document.querySelector('[data-testid="761"]');
835
+ return date748 !== null && date763 !== null && date762 !== null && date761 !== null;
836
+ }
837
+ }
838
+ ],
839
+ ...transitions.length > 0 && { transitions }
840
+ }
841
+ };
842
+ }
843
+ get Flows() {
844
+ return {
845
+ ...this.CheckDateRendering(),
846
+ ...this.CheckDateInputValue(),
847
+ ...this.CheckDateOnBlur(),
848
+ ...this.CheckDateEmptyValue(),
849
+ ...this.CheckSecondDateField(),
850
+ ...this.CheckSecondDateValue(),
851
+ ...this.CheckDateClearValue(),
852
+ ...this.CheckDateMultipleChanges(),
853
+ ...this.CheckDateFinalState(),
854
+ ...this.CheckInvalidDateResetsField(),
855
+ ...this.CheckPartialDateResetsField(),
856
+ ...this.CheckInvalidDateNoErrorMessage(),
857
+ ...this.CheckDateFormatOptionDefault(),
858
+ ...this.CheckValidDateAfterInvalid(),
859
+ ...this.CheckDateFinalStateComplete(),
860
+ ...this.CheckDisabledDateField(),
861
+ ...this.CheckDisabledDateNoUpdate(),
862
+ ...this.CheckAutoFieldSetFalse(),
863
+ ...this.CheckAutoFieldSetFalseBlur(),
864
+ ...this.CheckOnDateChangeEvent(),
865
+ ...this.CheckDateChangeWithoutOnChange(),
866
+ ...this.CheckDateWithOnChangeCallback(),
867
+ ...this.CheckAllDateFieldsFinalState()
868
+ };
869
+ }
870
+ }