@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,35 @@
1
+ import moment from "moment";
2
+ const isSunday = (momentDateObj) => moment(momentDateObj).format("dddd") === "Sunday";
3
+ const isHoliday = (momentDateObj, holidays) => holidays.includes(moment(momentDateObj).format("YYYY-MM-DD"));
4
+ const calNextBusinessDay = (dayCound, momentDateObj, holidays) => {
5
+ const nextDateObj = momentDateObj.add(dayCound, "d");
6
+ if (isSunday(nextDateObj) || isHoliday(nextDateObj, holidays)) {
7
+ calNextBusinessDay(dayCound, nextDateObj, holidays);
8
+ }
9
+ return nextDateObj;
10
+ };
11
+ const calNextPresumedRecievedDay = (dayCount, momentDateObj, holidays) => {
12
+ const nextPresumedRecievedDay = isSunday(momentDateObj) || isHoliday(momentDateObj, holidays) ? calNextBusinessDay(1, momentDateObj, holidays) : momentDateObj;
13
+ for (let index = 0; index < dayCount; index += 1) {
14
+ calNextBusinessDay(1, nextPresumedRecievedDay, holidays);
15
+ }
16
+ return nextPresumedRecievedDay;
17
+ };
18
+ const formatISODate = (date) => moment(date).utc().format("MM/DD/YYYY");
19
+ const formatDateForBr = (date, format) => {
20
+ if (!date) return date;
21
+ if (format === "ISO") {
22
+ return moment(date).format("YYYY-MM-DD");
23
+ }
24
+ return moment(date).format("MM/DD/YYYY");
25
+ };
26
+ const convertToLocalDateTime = (date) => date ? moment.utc(date).local().format("MM/DD/YYYY [at] hh:mm A") : date;
27
+ export {
28
+ calNextBusinessDay,
29
+ calNextPresumedRecievedDay,
30
+ convertToLocalDateTime,
31
+ formatDateForBr,
32
+ formatISODate,
33
+ isHoliday,
34
+ isSunday
35
+ };
@@ -0,0 +1,9 @@
1
+ export declare const ACRONYM_FORMAT_MAP: Record<string, string>;
2
+ export declare const FORMATTER_ACRONYMS: string[];
3
+ export declare const FORMATTER_TYPE_MAP: Record<string, string>;
4
+ export declare const DECIMAL_POINTS_MAP: Record<string, number>;
5
+ /**
6
+ * Mapping of renderer-controlled props that should be filtered from extra props.
7
+ * These props are managed internally by each renderer and should not be overridden.
8
+ */
9
+ export declare const RENDERER_CONTROLLED_PROPS: Readonly<Record<string, ReadonlyArray<string>>>;
@@ -0,0 +1,5 @@
1
+ import { IFormatter } from '../types';
2
+ export declare class BooleanFormatter implements IFormatter {
3
+ format(input: unknown): boolean;
4
+ parse(input: boolean): boolean | undefined;
5
+ }
@@ -0,0 +1,28 @@
1
+ import { IFormatter } from '../types';
2
+ /**
3
+ * DateFormatter handles conversion between storage format (YYYY-MM-DD)
4
+ * and display format (configurable, default MM/DD/YYYY).
5
+ */
6
+ declare class DateFormatter implements IFormatter {
7
+ /**
8
+ * Format date from storage format to display format
9
+ * @param {unknown} input - Date value from loan (typically YYYY-MM-DD or ISO format)
10
+ * @param {object} [options] - Formatting options
11
+ * @param {string} [options.dateFormat] - Target display format (default: MM/DD/YYYY)
12
+ * @returns {string} Formatted date string for UI display
13
+ */
14
+ format(input: unknown, options?: {
15
+ dateFormat?: string;
16
+ }): string;
17
+ /**
18
+ * Parse date from display format to storage format
19
+ * @param {string} input - Date string from UI (in display format)
20
+ * @param {object} [options] - Parsing options
21
+ * @param {string} [options.dateFormat] - Source display format (default: MM/DD/YYYY)
22
+ * @returns {unknown} Date in storage format (YYYY-MM-DD)
23
+ */
24
+ parse(input: string, options?: {
25
+ dateFormat?: string;
26
+ }): unknown;
27
+ }
28
+ export { DateFormatter };
@@ -0,0 +1,6 @@
1
+ import { IFormatter } from '../types';
2
+ declare class DropdownFormatter implements IFormatter {
3
+ format(input: unknown): string;
4
+ parse(input: string): unknown;
5
+ }
6
+ export { DropdownFormatter };
@@ -0,0 +1,71 @@
1
+ import { PhoneFormatter } from '../phoneFormatter';
2
+ import { RegexFormatter } from '../regexFormatter';
3
+ import { SSNFormatter } from '../ssnFormatter';
4
+ import { ZipFormatter } from '../zipFormatter';
5
+ import { BooleanFormatter } from '../booleanFormatter';
6
+ import { TextFormatter } from '../textFormatter';
7
+ import { NumberFormatter } from '../numberFormatter';
8
+ import { DateFormatter } from '../dateFormatter';
9
+ import { DropdownFormatter } from '../dropdownFormatter';
10
+ export type FormatterAcronymMap = {
11
+ SS: SSNFormatter;
12
+ T: DateFormatter;
13
+ TD: DateFormatter;
14
+ S: TextFormatter;
15
+ ST: DropdownFormatter;
16
+ I: NumberFormatter;
17
+ D2: NumberFormatter;
18
+ D3: NumberFormatter;
19
+ D4: NumberFormatter;
20
+ D5: NumberFormatter;
21
+ D6: NumberFormatter;
22
+ RI: NumberFormatter;
23
+ RD2: NumberFormatter;
24
+ RD3: NumberFormatter;
25
+ RD4: NumberFormatter;
26
+ RD5: NumberFormatter;
27
+ RD6: NumberFormatter;
28
+ Y: BooleanFormatter;
29
+ P: PhoneFormatter;
30
+ Z: ZipFormatter;
31
+ RS: RegexFormatter;
32
+ DD: DropdownFormatter;
33
+ DT: DateFormatter;
34
+ };
35
+ type FormatterAcronym = keyof FormatterAcronymMap;
36
+ export interface IFormatterFactory {
37
+ createFormatter<T extends FormatterAcronym>(acronym: T): FormatterAcronymMap[T];
38
+ }
39
+ declare class FormatterFactory implements IFormatterFactory {
40
+ /**
41
+ * Cache for formatter instances by acronym
42
+ * Since formatters are stateless, we can safely reuse instances
43
+ */
44
+ private formatterCache;
45
+ /**
46
+ * Helper to check if acronym is for number formatter
47
+ * @param {string} acronym - Acronym to check
48
+ * @returns {boolean} True if number formatter
49
+ */
50
+ private isNumberAcronym;
51
+ /**
52
+ * Helper to check if acronym is for text formatter
53
+ * @param {string} acronym - Acronym to check
54
+ * @returns {boolean} True if text formatter
55
+ */
56
+ private isTextAcronym;
57
+ /**
58
+ * Create specific formatter based on acronym
59
+ * @param {string} upperAcronym - Uppercase acronym
60
+ * @returns Specific formatter instance
61
+ */
62
+ private createSpecificFormatter;
63
+ /**
64
+ * Create formatter from acronym with type safety
65
+ * @param {FormatterAcronym} acronym - Acronym identifier (e.g., 'SS', 'I', 'D2')
66
+ * @returns {FormatterAcronymMap[T]} Specific formatter instance based on acronym
67
+ */
68
+ createFormatter<T extends FormatterAcronym>(acronym: T): FormatterAcronymMap[T];
69
+ }
70
+ declare const factoryInstance: FormatterFactory;
71
+ export { factoryInstance };
@@ -0,0 +1,2 @@
1
+ import { factoryInstance } from './factory';
2
+ export { factoryInstance };
@@ -0,0 +1,6 @@
1
+ import { IFormatter, INumberFormatOptions, INumberParseOptions } from '../types';
2
+ export declare class NumberFormatter implements IFormatter<INumberFormatOptions, INumberParseOptions> {
3
+ private getMaskOptions;
4
+ format(input: unknown, { fieldFormat, numberOptions }: INumberFormatOptions): string;
5
+ parse(input: string, { fieldFormat, unmaskPattern }: INumberParseOptions): number | undefined;
6
+ }
@@ -0,0 +1,7 @@
1
+ import { UsePhoneMaskT } from '@elliemae/ds-form-helpers-mask-hooks';
2
+ import { IFormatter, IPhoneParseOptions, IPhoneFormatOptions } from '../types';
3
+ export declare class PhoneFormatter implements IFormatter<IPhoneFormatOptions, IPhoneParseOptions> {
4
+ format(input: unknown, { isInternational }: IPhoneFormatOptions): string;
5
+ parse(input: string, { unmaskPattern }?: IPhoneParseOptions): string | undefined;
6
+ static getPhoneFormatOptions({ isInternational, }: Omit<UsePhoneMaskT.Props, 'valueSetter'>): Omit<UsePhoneMaskT.Props, 'valueSetter'>;
7
+ }
@@ -0,0 +1,5 @@
1
+ import { IFormatter } from '../types';
2
+ export declare class RegexFormatter implements IFormatter {
3
+ format(input: string, patterns?: (string | RegExp)[]): string;
4
+ parse(input: string, patterns?: (string | RegExp)[]): string;
5
+ }
@@ -0,0 +1,5 @@
1
+ import { IFormatter } from '../types';
2
+ export declare class SSNFormatter implements IFormatter {
3
+ format(input: unknown): string;
4
+ parse(input: string): string | undefined;
5
+ }
@@ -0,0 +1,6 @@
1
+ import { IFormatter } from '../types';
2
+ declare class TextFormatter implements IFormatter {
3
+ format(input: unknown): string;
4
+ parse(input: string): unknown;
5
+ }
6
+ export { TextFormatter };
@@ -0,0 +1,5 @@
1
+ import { IFormatter } from '../types';
2
+ export declare class ZipFormatter implements IFormatter {
3
+ format(input: string): string;
4
+ parse(input: string): string;
5
+ }
@@ -0,0 +1,20 @@
1
+ import { coreInstance } from '../core';
2
+ import { IFormatterFactory } from './formatters/factory';
3
+ import { ValidatorFactory } from './validators/factory';
4
+ import { SSF } from './ssf';
5
+ import { IValidatorFactory } from './types';
6
+ export interface IBLL {
7
+ get SSF(): SSF;
8
+ get Core(): typeof coreInstance;
9
+ get Formatter(): IFormatterFactory;
10
+ get Validator(): IValidatorFactory;
11
+ }
12
+ export declare class BLL implements IBLL {
13
+ get Core(): import("../core").Core;
14
+ private ssf;
15
+ get Formatter(): IFormatterFactory;
16
+ get Validator(): ValidatorFactory;
17
+ get SSF(): SSF;
18
+ set SSF(service: SSF);
19
+ }
20
+ export declare const bllInstance: BLL;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * SSF Module Barrel Export
3
+ * Architecture follows HookBase pattern:
4
+ * - SSFBase: Base class with shared SSF initialization
5
+ * - Loan: Groups loan object operations
6
+ * - LoConnect: Groups loconnect host operations
7
+ * - SSF: Combined class with all operations via Mixins
8
+ *
9
+ * Usage:
10
+ * import { ssfAdapterInstance } from './ssf';
11
+ * await ssfAdapterInstance.getFieldValue('FR0104');
12
+ * await ssfAdapterInstance.getStateDropDownList();
13
+ */
14
+ import { SSFBase } from './ssfBase';
15
+ import { Loan } from './loan';
16
+ import { LoConnect } from './loconnect';
17
+ export { SSFBase } from './ssfBase';
18
+ export type { FieldValueResolverFn } from './ssfBase';
19
+ export { Loan } from './loan';
20
+ export { LoConnect } from './loconnect';
21
+ export interface SSF extends Loan, LoConnect {
22
+ }
23
+ export declare class SSF extends SSFBase {
24
+ }
25
+ export declare const ssfInstance: SSF;
@@ -0,0 +1,16 @@
1
+ import { SSFBase } from './ssfBase';
2
+ import { ModelPathT } from './types';
3
+ /**
4
+ * Loan operations - Groups loan object related SSF methods
5
+ * Similar to how FieldValue, FieldMeta etc. extend HookBase
6
+ * Reference: ssf-wrapper-base.js loan methods
7
+ */
8
+ export declare class Loan extends SSFBase {
9
+ getFieldValue(fieldId: string): Promise<unknown>;
10
+ setFieldValue(fieldId: string, value: unknown): Promise<void>;
11
+ setFieldsValues(setFieldsValuesObject: Record<string, unknown>, doCalc?: boolean): Promise<void>;
12
+ getFieldContractPaths(): Promise<Record<string, ModelPathT>>;
13
+ isReadOnlyLoan(): Promise<boolean>;
14
+ resolveBaseCollectionId(fieldId: string): Promise<string>;
15
+ getCollectionRowIndex(fieldId: string): Promise<number>;
16
+ }
@@ -0,0 +1,15 @@
1
+ import { SSFBase } from './ssfBase';
2
+ import { IGoToFieldDetails, StateOptionT } from './types';
3
+ /**
4
+ * LoConnect operations - Groups loconnect host related SSF methods
5
+ * Similar to how FieldDisabled, FieldLocked etc. extend HookBase
6
+ * Reference: ssf-wrapper-base.js loconnect methods
7
+ */
8
+ export declare class LoConnect extends SSFBase {
9
+ getStateDropDownList(): Promise<StateOptionT[]>;
10
+ getLockStatus(fieldId: string): Promise<boolean>;
11
+ callCalcForLock(fieldId: string, isLocked: boolean): Promise<void>;
12
+ getZipCodeOptions(zip: string): Promise<Record<string, string>[] | undefined>;
13
+ getZipCodeOptionsWithLatLong(zip: string): Promise<Record<string, string>[] | undefined>;
14
+ getGTFSelectedFormDetails(): Promise<IGoToFieldDetails | null>;
15
+ }
@@ -0,0 +1,23 @@
1
+ import { IGoToFieldDetails, SSFLoanObjectT } from './types';
2
+ /**
3
+ * Base class for SSF operations
4
+ * Follows the HookBase pattern - provides shared SSF initialization
5
+ * Reference: ssf-wrapper-base.js
6
+ */
7
+ export type FieldValueResolverFn = (fieldId: string) => unknown;
8
+ export declare class SSFBase {
9
+ protected ssfEnabled: boolean;
10
+ protected initDone: boolean;
11
+ protected hostInstance: unknown;
12
+ private gtfFormDetailsCache;
13
+ private fieldValueResolverFn;
14
+ setFieldValueResolver(resolver: FieldValueResolverFn | null): void;
15
+ get fieldValueResolver(): FieldValueResolverFn | null;
16
+ constructor();
17
+ protected get IsLocalhost(): boolean;
18
+ protected get SSFLoanObject(): Promise<SSFLoanObjectT>;
19
+ protected initSSF(): Promise<void>;
20
+ protected genericCall(funcName: string, ...rest: unknown[]): Promise<unknown>;
21
+ getCachedGTFFormDetails(): IGoToFieldDetails | null;
22
+ setCachedGTFFormDetails(formDetails: IGoToFieldDetails | null): void;
23
+ }
@@ -0,0 +1,99 @@
1
+ export interface IGoToFieldDetails {
2
+ formId: string;
3
+ fieldId: string;
4
+ formName: string;
5
+ fileName: string;
6
+ fieldOcc: number;
7
+ }
8
+ export type ModelPathT = [
9
+ string,
10
+ 1 | 0,
11
+ string,
12
+ string?,
13
+ (1 | 0)?,
14
+ number?,
15
+ [
16
+ string,
17
+ string
18
+ ][]?,
19
+ (1 | 0)?
20
+ ];
21
+ export type StateOptionT = {
22
+ name: string;
23
+ value: string;
24
+ };
25
+ export interface SSFLoanObjectT {
26
+ getField(fieldId: string): unknown;
27
+ setFields(fields: Record<string, unknown>): Promise<void>;
28
+ calculate(): Promise<void>;
29
+ fieldDefinitions(): Record<string, ModelPathT>;
30
+ isReadOnly(): Promise<boolean>;
31
+ resolveBaseCollectionId(fieldId: string): Promise<string>;
32
+ getCollectionRowIndex(fieldId: string): Promise<number>;
33
+ }
34
+ export interface ISSFAdapter {
35
+ /**
36
+ * Retrieves a single field value from the loan
37
+ * @param fieldId - The field identifier
38
+ * @returns Promise resolving to the field value
39
+ */
40
+ getFieldValue(fieldId: string): Promise<unknown>;
41
+ /**
42
+ * Sets a single field value in the loan
43
+ * @param fieldId - The field identifier
44
+ * @param value - The value to set
45
+ * @returns Promise that resolves when the operation completes
46
+ */
47
+ setFieldValue(fieldId: string, value: unknown): Promise<void>;
48
+ /**
49
+ * Sets multiple field values in the loan (batch operation)
50
+ * More efficient than calling setFieldValue multiple times
51
+ * @param setFieldsValuesObject - Map of field IDs to their values
52
+ * @returns Promise that resolves when the operation completes
53
+ */
54
+ setFieldsValues(setFieldsValuesObject: Record<string, unknown>): Promise<void>;
55
+ /**
56
+ * Retrieves field metadata including contract paths, formats, and options
57
+ * @returns Promise resolving to a map of field IDs to their metadata
58
+ */
59
+ getFieldContractPaths(): Promise<Record<string, ModelPathT>>;
60
+ /**
61
+ * Retrieves the list of US states for state dropdown fields
62
+ * @returns Promise resolving to an array of state options
63
+ */
64
+ getStateDropDownList(): Promise<StateOptionT[]>;
65
+ /**
66
+ * Checks if the current loan is in read-only mode
67
+ * @returns Promise resolving to true if loan is read-only
68
+ */
69
+ isReadOnlyLoan(): Promise<boolean>;
70
+ /**
71
+ * Retrieves the lock status of a specific field
72
+ * @param fieldId - The field identifier
73
+ * @returns Promise resolving to true if field is locked
74
+ */
75
+ getLockStatus(fieldId: string): Promise<boolean>;
76
+ /**
77
+ * Triggers calculation for a locked field
78
+ * @param fieldId - The field identifier
79
+ * @param isLocked - Whether the field is locked
80
+ * @returns Promise that resolves when calculation completes
81
+ */
82
+ callCalcForLock(fieldId: string, isLocked: boolean): Promise<void>;
83
+ /**
84
+ * Retrieves Go-To-Field (GTF) selected form details
85
+ * Used for field navigation and context
86
+ * @returns Promise resolving to form details or null
87
+ */
88
+ getGTFSelectedFormDetails(): Promise<IGoToFieldDetails | null>;
89
+ /**
90
+ * Gets cached GTF selected form details
91
+ * @returns Cached form details or null if not cached
92
+ */
93
+ getCachedGTFFormDetails(): IGoToFieldDetails | null;
94
+ /**
95
+ * Sets cached GTF selected form details
96
+ * @param formDetails - Form details to cache, or null to clear cache
97
+ */
98
+ setCachedGTFFormDetails(formDetails: IGoToFieldDetails | null): void;
99
+ }
@@ -0,0 +1,47 @@
1
+ import { UseNumberMaskT } from '@elliemae/ds-form-helpers-mask-hooks';
2
+ export interface IFormatter<T = unknown, U = unknown> {
3
+ format(input: unknown, formatOptions?: T): unknown;
4
+ parse(input: unknown, parseOptions?: U): unknown;
5
+ }
6
+ export interface IValidationResult {
7
+ isValid: boolean;
8
+ message?: string;
9
+ }
10
+ /**
11
+ * Conditional type that provides specific validation options based on validator type
12
+ */
13
+ export type ValidationOptionsT<T extends string> = T extends 'date' ? {
14
+ dateFormat: string;
15
+ } : T extends 'maxChar' ? {
16
+ charsLimit: number;
17
+ } : Record<string, unknown>;
18
+ export interface IValidator {
19
+ validate(value: unknown, message?: string, options?: ValidationOptionsT<string>): IValidationResult;
20
+ }
21
+ export interface IValidationRule {
22
+ type: string;
23
+ message?: string;
24
+ options?: ValidationOptionsT<string>;
25
+ }
26
+ export interface IValidatePayload {
27
+ fieldValue: unknown;
28
+ validationRules: Array<IValidationRule>;
29
+ }
30
+ export interface IValidatorFactory {
31
+ createValidator(type: string): IValidator;
32
+ runValidators(rules: Array<IValidationRule>, value: unknown): IValidationResult;
33
+ }
34
+ export interface INumberFormatOptions {
35
+ fieldFormat: string;
36
+ numberOptions?: Omit<UseNumberMaskT.Props, 'valueSetter' | 'decimalPlaces' | 'decimalRequired'>;
37
+ }
38
+ export interface INumberParseOptions {
39
+ fieldFormat: string;
40
+ unmaskPattern?: RegExp;
41
+ }
42
+ export interface IPhoneFormatOptions {
43
+ isInternational?: boolean;
44
+ }
45
+ export interface IPhoneParseOptions {
46
+ unmaskPattern?: RegExp;
47
+ }
@@ -0,0 +1,16 @@
1
+ import { IValidator, IValidationResult, ValidationOptionsT } from '../types';
2
+ /**
3
+ * DateValidator validates date values using moment.js
4
+ * Supports custom date formats and provides meaningful error messages
5
+ */
6
+ declare class DateValidator implements IValidator {
7
+ /**
8
+ * Validate if the given value is a valid date
9
+ * @param {unknown} value - The date value to validate
10
+ * @param {string} [message] - Custom error message
11
+ * @param {ValidationOptionsT<'date'>} [options] - Validation options including dateFormat for strict checking
12
+ * @returns {IValidationResult} Validation result with isValid flag and optional message
13
+ */
14
+ validate(value: unknown, message?: string, options?: ValidationOptionsT<'date'>): IValidationResult;
15
+ }
16
+ export { DateValidator };
@@ -0,0 +1,4 @@
1
+ import { IValidator, IValidationResult } from '../types';
2
+ export declare class EmailValidator implements IValidator {
3
+ validate(value?: string, message?: string): IValidationResult;
4
+ }
@@ -0,0 +1,15 @@
1
+ import { IValidator, IValidatorFactory, IValidationResult, IValidationRule } from '../../types';
2
+ declare class ValidatorFactory implements IValidatorFactory {
3
+ private registry;
4
+ /**
5
+ * Cache for validator instances by type
6
+ * Since validators are stateless, we can safely reuse instances
7
+ */
8
+ private validatorCache;
9
+ constructor();
10
+ private initBuiltInValidators;
11
+ createValidator(type: string): IValidator;
12
+ registerValidator(type: string, validatorClass: new () => IValidator): void;
13
+ runValidators(rules: Array<IValidationRule>, value: unknown): IValidationResult;
14
+ }
15
+ export { ValidatorFactory };
@@ -0,0 +1,2 @@
1
+ import { ValidatorFactory } from './factory';
2
+ export { ValidatorFactory };
@@ -0,0 +1,4 @@
1
+ import { IValidator, IValidationResult, ValidationOptionsT } from '../types';
2
+ export declare class MaxCharValidator implements IValidator {
3
+ validate(value: unknown, message?: string, options?: ValidationOptionsT<'maxChar'>): IValidationResult;
4
+ }
@@ -0,0 +1,4 @@
1
+ import { IValidator, IValidationResult } from '../types';
2
+ export declare class RequiredValidator implements IValidator {
3
+ validate(value: string, message?: string): IValidationResult;
4
+ }
@@ -0,0 +1,5 @@
1
+ import { IValidator, IValidationResult } from '../types';
2
+ export declare const validZipCode: (zip?: string | null) => boolean;
3
+ export declare class ZipValidator implements IValidator {
4
+ validate(zip?: string, message?: string): IValidationResult;
5
+ }
@@ -0,0 +1,29 @@
1
+ import { Base } from '@elliemae/encw-core';
2
+ declare class Core extends Base {
3
+ get CoreUtils(): {
4
+ Functions: import("@elliemae/encw-core/dist/types/lib/Utilities/Functions").Functions;
5
+ Objects: import("@elliemae/encw-core/dist/types/lib/Utilities/Objects").Objects;
6
+ Random: import("@elliemae/encw-core/dist/types/lib/Utilities/Random").Random;
7
+ Strings: import("@elliemae/encw-core/dist/types/lib/Utilities/Strings").Strings;
8
+ Validate: import("@elliemae/encw-core/dist/types/lib/Utilities/Validate").Validate;
9
+ };
10
+ get ExceptionUtils(): {
11
+ businessException: <T extends Record<string, unknown> | string>(message: string, cause?: T | undefined) => {
12
+ type: "AuthenticationException" | "AuthorizationException" | "BusinessException" | "DatabaseException" | "NetworkException" | "RuntimeException" | "ValidationException" | "CustomException";
13
+ name: string;
14
+ message: string;
15
+ stack?: string;
16
+ cause?: unknown;
17
+ };
18
+ runtimeException: <T extends Record<string, unknown> | string>(message: string, cause?: T | undefined) => {
19
+ type: "AuthenticationException" | "AuthorizationException" | "BusinessException" | "DatabaseException" | "NetworkException" | "RuntimeException" | "ValidationException" | "CustomException";
20
+ name: string;
21
+ message: string;
22
+ stack?: string;
23
+ cause?: unknown;
24
+ };
25
+ };
26
+ Log<T extends object | Error>(type: 'log' | 'warn' | 'error', message: string, additionalData?: T): void | (() => void);
27
+ }
28
+ declare const coreInstance: Core;
29
+ export { coreInstance, Core };
@@ -0,0 +1,11 @@
1
+ import { NumberRendererPropsT, RendererPropsT, DateRendererPropsT } from '../renderer/types';
2
+ export declare class Config {
3
+ static getTextFields(): RendererPropsT[];
4
+ static getNumberFields(): NumberRendererPropsT[];
5
+ static getCheckboxFields(): RendererPropsT[];
6
+ static getRadioButtonFields(): RendererPropsT[];
7
+ static getDateFields(): DateRendererPropsT[];
8
+ static getLargeTextField(): RendererPropsT[];
9
+ static getToggleFields(): RendererPropsT[];
10
+ static getRendererConfigs(): RendererPropsT[];
11
+ }
@@ -0,0 +1 @@
1
+ export declare const Demo: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { RendererPropsT } from './types';
3
+ export declare const FieldRenderer: React.FC<RendererPropsT>;
4
+ declare const _default: React.NamedExoticComponent<RendererPropsT>;
5
+ export default _default;
@@ -0,0 +1,5 @@
1
+ import { HookBase } from './hookBase';
2
+ import { AriaDescT } from '../../types';
3
+ export declare class FieldDescription extends HookBase {
4
+ protected getFieldAriaDescProps(label: string, description: string): AriaDescT;
5
+ }
@@ -0,0 +1,10 @@
1
+ import { FieldMetadataT } from '../../types';
2
+ import { HookBase } from './hookBase';
3
+ export declare class FieldDisabled extends HookBase {
4
+ protected isLoanReadonly(): Promise<boolean>;
5
+ useFieldDisabled({ fieldId, metadata, isLockedState, }: {
6
+ fieldId: string;
7
+ metadata: FieldMetadataT;
8
+ isLockedState?: boolean;
9
+ }): boolean;
10
+ }
@@ -0,0 +1,4 @@
1
+ import { HookBase } from './hookBase';
2
+ export declare class FieldGoTo extends HookBase {
3
+ protected isGoToField(fieldId: string): Promise<boolean>;
4
+ }
@@ -0,0 +1,4 @@
1
+ import { HookBase } from './hookBase';
2
+ export declare class FieldLocked extends HookBase {
3
+ protected getFieldLockStatus(fieldId: string): Promise<boolean>;
4
+ }
@@ -0,0 +1,10 @@
1
+ import { FieldMetadataT } from '../../types';
2
+ import { HookBase } from './hookBase';
3
+ export declare class FieldMeta extends HookBase {
4
+ protected getMetadata(fieldId: string): Promise<FieldMetadataT>;
5
+ private lookupFieldData;
6
+ private transformContractPath;
7
+ private buildFieldMetadata;
8
+ private handleMetadataError;
9
+ private fetchStateOptions;
10
+ }
@@ -0,0 +1,6 @@
1
+ import { HookBase } from './hookBase';
2
+ export declare class FieldSubscribers extends HookBase {
3
+ private useSubscribeEffect;
4
+ useLoanUpdatedCB(callback: (...args: unknown[]) => void): void;
5
+ useLoanChangeCB(callback: (...args: unknown[]) => void): void;
6
+ }
@@ -0,0 +1,9 @@
1
+ import { IValidationResult, IValidationRule } from '../../../bll/types';
2
+ import { HookBase } from './hookBase';
3
+ export declare class FieldValidation extends HookBase {
4
+ runValidationsOnValue(value: unknown, validationRules: Array<IValidationRule>, customValidation?: (value: unknown) => void): IValidationResult;
5
+ protected useFieldValidation(): {
6
+ validationResult: IValidationResult | null;
7
+ setValidationResult: import("react").Dispatch<import("react").SetStateAction<IValidationResult | null>>;
8
+ };
9
+ }