@mj-biz-apps/common-ng 5.33.2 → 5.35.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 (214) hide show
  1. package/LICENSE +183 -0
  2. package/README.md +12 -2
  3. package/dist/lib/components/address-editor/address-editor.component.d.ts +23 -0
  4. package/dist/lib/components/address-editor/address-editor.component.d.ts.map +1 -1
  5. package/dist/lib/components/address-editor/address-editor.component.js +207 -140
  6. package/dist/lib/components/address-editor/address-editor.component.js.map +1 -1
  7. package/dist/lib/components/contact-method-list/contact-method-list.component.d.ts +17 -10
  8. package/dist/lib/components/contact-method-list/contact-method-list.component.d.ts.map +1 -1
  9. package/dist/lib/components/contact-method-list/contact-method-list.component.js +104 -39
  10. package/dist/lib/components/contact-method-list/contact-method-list.component.js.map +1 -1
  11. package/dist/lib/components/identity-header/activity-identity.component.d.ts +36 -0
  12. package/dist/lib/components/identity-header/activity-identity.component.d.ts.map +1 -0
  13. package/dist/lib/components/identity-header/activity-identity.component.js +387 -0
  14. package/dist/lib/components/identity-header/activity-identity.component.js.map +1 -0
  15. package/dist/lib/components/identity-header/organization-identity.component.d.ts +26 -0
  16. package/dist/lib/components/identity-header/organization-identity.component.d.ts.map +1 -0
  17. package/dist/lib/components/identity-header/organization-identity.component.js +304 -0
  18. package/dist/lib/components/identity-header/organization-identity.component.js.map +1 -0
  19. package/dist/lib/components/identity-header/person-identity.component.d.ts +27 -0
  20. package/dist/lib/components/identity-header/person-identity.component.d.ts.map +1 -0
  21. package/dist/lib/components/identity-header/person-identity.component.js +330 -0
  22. package/dist/lib/components/identity-header/person-identity.component.js.map +1 -0
  23. package/dist/lib/components/org-hierarchy-tree/org-hierarchy-tree.component.d.ts +14 -82
  24. package/dist/lib/components/org-hierarchy-tree/org-hierarchy-tree.component.d.ts.map +1 -1
  25. package/dist/lib/components/org-hierarchy-tree/org-hierarchy-tree.component.js +138 -151
  26. package/dist/lib/components/org-hierarchy-tree/org-hierarchy-tree.component.js.map +1 -1
  27. package/dist/lib/components/relationship-graph/common-relationship-graph.component.d.ts +40 -0
  28. package/dist/lib/components/relationship-graph/common-relationship-graph.component.d.ts.map +1 -0
  29. package/dist/lib/components/relationship-graph/common-relationship-graph.component.js +403 -0
  30. package/dist/lib/components/relationship-graph/common-relationship-graph.component.js.map +1 -0
  31. package/dist/lib/components/relationship-list/relationship-list.component.d.ts +25 -55
  32. package/dist/lib/components/relationship-list/relationship-list.component.d.ts.map +1 -1
  33. package/dist/lib/components/relationship-list/relationship-list.component.js +509 -483
  34. package/dist/lib/components/relationship-list/relationship-list.component.js.map +1 -1
  35. package/dist/lib/custom/custom-forms.module.d.ts +29 -11
  36. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  37. package/dist/lib/custom/custom-forms.module.js +101 -29
  38. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  39. package/dist/lib/custom/panels/__tests__/activity-header.panel.test.d.ts +3 -0
  40. package/dist/lib/custom/panels/__tests__/activity-header.panel.test.d.ts.map +1 -0
  41. package/dist/lib/custom/panels/__tests__/activity-header.panel.test.js +123 -0
  42. package/dist/lib/custom/panels/__tests__/activity-header.panel.test.js.map +1 -0
  43. package/dist/lib/custom/panels/activity-content.panel.d.ts +30 -0
  44. package/dist/lib/custom/panels/activity-content.panel.d.ts.map +1 -0
  45. package/dist/lib/custom/panels/activity-content.panel.js +309 -0
  46. package/dist/lib/custom/panels/activity-content.panel.js.map +1 -0
  47. package/dist/lib/custom/panels/activity-files.panel.d.ts +33 -0
  48. package/dist/lib/custom/panels/activity-files.panel.d.ts.map +1 -0
  49. package/dist/lib/custom/panels/activity-files.panel.js +222 -0
  50. package/dist/lib/custom/panels/activity-files.panel.js.map +1 -0
  51. package/dist/lib/custom/panels/activity-header.panel.d.ts +11 -0
  52. package/dist/lib/custom/panels/activity-header.panel.d.ts.map +1 -0
  53. package/dist/lib/custom/panels/activity-header.panel.js +54 -0
  54. package/dist/lib/custom/panels/activity-header.panel.js.map +1 -0
  55. package/dist/lib/custom/panels/activity-hierarchy.panel.d.ts +22 -0
  56. package/dist/lib/custom/panels/activity-hierarchy.panel.d.ts.map +1 -0
  57. package/dist/lib/custom/panels/activity-hierarchy.panel.js +120 -0
  58. package/dist/lib/custom/panels/activity-hierarchy.panel.js.map +1 -0
  59. package/dist/lib/custom/panels/activity-links.panel.d.ts +33 -0
  60. package/dist/lib/custom/panels/activity-links.panel.d.ts.map +1 -0
  61. package/dist/lib/custom/panels/activity-links.panel.js +210 -0
  62. package/dist/lib/custom/panels/activity-links.panel.js.map +1 -0
  63. package/dist/lib/custom/panels/activity-type-hierarchy.panel.d.ts +22 -0
  64. package/dist/lib/custom/panels/activity-type-hierarchy.panel.d.ts.map +1 -0
  65. package/dist/lib/custom/panels/activity-type-hierarchy.panel.js +113 -0
  66. package/dist/lib/custom/panels/activity-type-hierarchy.panel.js.map +1 -0
  67. package/dist/lib/custom/panels/bizapps-form-panel.d.ts +19 -0
  68. package/dist/lib/custom/panels/bizapps-form-panel.d.ts.map +1 -0
  69. package/dist/lib/custom/panels/bizapps-form-panel.js +29 -0
  70. package/dist/lib/custom/panels/bizapps-form-panel.js.map +1 -0
  71. package/dist/lib/custom/panels/organization-addresses.panel.d.ts +12 -0
  72. package/dist/lib/custom/panels/organization-addresses.panel.d.ts.map +1 -0
  73. package/dist/lib/custom/panels/organization-addresses.panel.js +57 -0
  74. package/dist/lib/custom/panels/organization-addresses.panel.js.map +1 -0
  75. package/dist/lib/custom/panels/organization-contact-methods.panel.d.ts +11 -0
  76. package/dist/lib/custom/panels/organization-contact-methods.panel.d.ts.map +1 -0
  77. package/dist/lib/custom/panels/organization-contact-methods.panel.js +56 -0
  78. package/dist/lib/custom/panels/organization-contact-methods.panel.js.map +1 -0
  79. package/dist/lib/custom/panels/organization-header.panel.d.ts +11 -0
  80. package/dist/lib/custom/panels/organization-header.panel.d.ts.map +1 -0
  81. package/dist/lib/custom/panels/organization-header.panel.js +54 -0
  82. package/dist/lib/custom/panels/organization-header.panel.js.map +1 -0
  83. package/dist/lib/custom/panels/organization-hierarchy.panel.d.ts +12 -0
  84. package/dist/lib/custom/panels/organization-hierarchy.panel.d.ts.map +1 -0
  85. package/dist/lib/custom/panels/organization-hierarchy.panel.js +57 -0
  86. package/dist/lib/custom/panels/organization-hierarchy.panel.js.map +1 -0
  87. package/dist/lib/custom/panels/organization-relationships.panel.d.ts +17 -0
  88. package/dist/lib/custom/panels/organization-relationships.panel.d.ts.map +1 -0
  89. package/dist/lib/custom/panels/organization-relationships.panel.js +163 -0
  90. package/dist/lib/custom/panels/organization-relationships.panel.js.map +1 -0
  91. package/dist/lib/custom/panels/person-addresses.panel.d.ts +12 -0
  92. package/dist/lib/custom/panels/person-addresses.panel.d.ts.map +1 -0
  93. package/dist/lib/custom/panels/person-addresses.panel.js +57 -0
  94. package/dist/lib/custom/panels/person-addresses.panel.js.map +1 -0
  95. package/dist/lib/custom/panels/person-contact-methods.panel.d.ts +11 -0
  96. package/dist/lib/custom/panels/person-contact-methods.panel.d.ts.map +1 -0
  97. package/dist/lib/custom/panels/person-contact-methods.panel.js +56 -0
  98. package/dist/lib/custom/panels/person-contact-methods.panel.js.map +1 -0
  99. package/dist/lib/custom/panels/person-header.panel.d.ts +12 -0
  100. package/dist/lib/custom/panels/person-header.panel.d.ts.map +1 -0
  101. package/dist/lib/custom/panels/person-header.panel.js +55 -0
  102. package/dist/lib/custom/panels/person-header.panel.js.map +1 -0
  103. package/dist/lib/custom/panels/person-relationships.panel.d.ts +17 -0
  104. package/dist/lib/custom/panels/person-relationships.panel.d.ts.map +1 -0
  105. package/dist/lib/custom/panels/person-relationships.panel.js +163 -0
  106. package/dist/lib/custom/panels/person-relationships.panel.js.map +1 -0
  107. package/dist/lib/data/__tests__/directory-stats.test.d.ts +2 -0
  108. package/dist/lib/data/__tests__/directory-stats.test.d.ts.map +1 -0
  109. package/dist/lib/data/__tests__/directory-stats.test.js +79 -0
  110. package/dist/lib/data/__tests__/directory-stats.test.js.map +1 -0
  111. package/dist/lib/data/directory-queries.d.ts +10 -0
  112. package/dist/lib/data/directory-queries.d.ts.map +1 -0
  113. package/dist/lib/data/directory-queries.js +104 -0
  114. package/dist/lib/data/directory-queries.js.map +1 -0
  115. package/dist/lib/data/directory-stats.d.ts +24 -0
  116. package/dist/lib/data/directory-stats.d.ts.map +1 -0
  117. package/dist/lib/data/directory-stats.js +137 -0
  118. package/dist/lib/data/directory-stats.js.map +1 -0
  119. package/dist/lib/data/directory-types.d.ts +33 -0
  120. package/dist/lib/data/directory-types.d.ts.map +1 -0
  121. package/dist/lib/data/directory-types.js +2 -0
  122. package/dist/lib/data/directory-types.js.map +1 -0
  123. package/dist/lib/data/entity-names.d.ts +21 -0
  124. package/dist/lib/data/entity-names.d.ts.map +1 -0
  125. package/dist/lib/data/entity-names.js +21 -0
  126. package/dist/lib/data/entity-names.js.map +1 -0
  127. package/dist/lib/generated/Entities/mjBizAppsCommonActivity/mjbizappscommonactivity.form.component.d.ts +10 -0
  128. package/dist/lib/generated/Entities/mjBizAppsCommonActivity/mjbizappscommonactivity.form.component.d.ts.map +1 -0
  129. package/dist/lib/generated/Entities/mjBizAppsCommonActivity/mjbizappscommonactivity.form.component.js +210 -0
  130. package/dist/lib/generated/Entities/mjBizAppsCommonActivity/mjbizappscommonactivity.form.component.js.map +1 -0
  131. package/dist/lib/generated/Entities/mjBizAppsCommonActivityFile/mjbizappscommonactivityfile.form.component.d.ts +10 -0
  132. package/dist/lib/generated/Entities/mjBizAppsCommonActivityFile/mjbizappscommonactivityfile.form.component.d.ts.map +1 -0
  133. package/dist/lib/generated/Entities/mjBizAppsCommonActivityFile/mjbizappscommonactivityfile.form.component.js +63 -0
  134. package/dist/lib/generated/Entities/mjBizAppsCommonActivityFile/mjbizappscommonactivityfile.form.component.js.map +1 -0
  135. package/dist/lib/generated/Entities/mjBizAppsCommonActivityLink/mjbizappscommonactivitylink.form.component.d.ts +10 -0
  136. package/dist/lib/generated/Entities/mjBizAppsCommonActivityLink/mjbizappscommonactivitylink.form.component.d.ts.map +1 -0
  137. package/dist/lib/generated/Entities/mjBizAppsCommonActivityLink/mjbizappscommonactivitylink.form.component.js +69 -0
  138. package/dist/lib/generated/Entities/mjBizAppsCommonActivityLink/mjbizappscommonactivitylink.form.component.js.map +1 -0
  139. package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncConnection/mjbizappscommonactivitysyncconnection.form.component.d.ts +10 -0
  140. package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncConnection/mjbizappscommonactivitysyncconnection.form.component.d.ts.map +1 -0
  141. package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncConnection/mjbizappscommonactivitysyncconnection.form.component.js +112 -0
  142. package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncConnection/mjbizappscommonactivitysyncconnection.form.component.js.map +1 -0
  143. package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncRule/mjbizappscommonactivitysyncrule.form.component.d.ts +10 -0
  144. package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncRule/mjbizappscommonactivitysyncrule.form.component.d.ts.map +1 -0
  145. package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncRule/mjbizappscommonactivitysyncrule.form.component.js +77 -0
  146. package/dist/lib/generated/Entities/mjBizAppsCommonActivitySyncRule/mjbizappscommonactivitysyncrule.form.component.js.map +1 -0
  147. package/dist/lib/generated/Entities/mjBizAppsCommonActivityType/mjbizappscommonactivitytype.form.component.d.ts +10 -0
  148. package/dist/lib/generated/Entities/mjBizAppsCommonActivityType/mjbizappscommonactivitytype.form.component.d.ts.map +1 -0
  149. package/dist/lib/generated/Entities/mjBizAppsCommonActivityType/mjbizappscommonactivitytype.form.component.js +156 -0
  150. package/dist/lib/generated/Entities/mjBizAppsCommonActivityType/mjbizappscommonactivitytype.form.component.js.map +1 -0
  151. package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.d.ts.map +1 -1
  152. package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.js +24 -6
  153. package/dist/lib/generated/Entities/mjBizAppsCommonAddress/mjbizappscommonaddress.form.component.js.map +1 -1
  154. package/dist/lib/generated/Entities/mjBizAppsCommonAddressType/mjbizappscommonaddresstype.form.component.js +2 -2
  155. package/dist/lib/generated/Entities/mjBizAppsCommonAddressType/mjbizappscommonaddresstype.form.component.js.map +1 -1
  156. package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.d.ts.map +1 -1
  157. package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.js +5 -9
  158. package/dist/lib/generated/Entities/mjBizAppsCommonContactMethod/mjbizappscommoncontactmethod.form.component.js.map +1 -1
  159. package/dist/lib/generated/Entities/mjBizAppsCommonContactType/mjbizappscommoncontacttype.form.component.js +2 -2
  160. package/dist/lib/generated/Entities/mjBizAppsCommonContactType/mjbizappscommoncontacttype.form.component.js.map +1 -1
  161. package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.d.ts.map +1 -1
  162. package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.js +83 -37
  163. package/dist/lib/generated/Entities/mjBizAppsCommonOrganization/mjbizappscommonorganization.form.component.js.map +1 -1
  164. package/dist/lib/generated/Entities/mjBizAppsCommonOrganizationType/mjbizappscommonorganizationtype.form.component.js +2 -2
  165. package/dist/lib/generated/Entities/mjBizAppsCommonOrganizationType/mjbizappscommonorganizationtype.form.component.js.map +1 -1
  166. package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.d.ts.map +1 -1
  167. package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.js +73 -35
  168. package/dist/lib/generated/Entities/mjBizAppsCommonPerson/mjbizappscommonperson.form.component.js.map +1 -1
  169. package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.d.ts.map +1 -1
  170. package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.js +5 -9
  171. package/dist/lib/generated/Entities/mjBizAppsCommonRelationship/mjbizappscommonrelationship.form.component.js.map +1 -1
  172. package/dist/lib/generated/Entities/mjBizAppsCommonRelationshipType/mjbizappscommonrelationshiptype.form.component.js +2 -2
  173. package/dist/lib/generated/Entities/mjBizAppsCommonRelationshipType/mjbizappscommonrelationshiptype.form.component.js.map +1 -1
  174. package/dist/lib/generated/generated-forms.module.d.ts +22 -16
  175. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  176. package/dist/lib/generated/generated-forms.module.js +19 -1
  177. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  178. package/dist/lib/open-record.d.ts +5 -0
  179. package/dist/lib/open-record.d.ts.map +1 -0
  180. package/dist/lib/open-record.js +15 -0
  181. package/dist/lib/open-record.js.map +1 -0
  182. package/dist/lib/pages/activities-dashboard.page.d.ts +53 -0
  183. package/dist/lib/pages/activities-dashboard.page.d.ts.map +1 -0
  184. package/dist/lib/pages/activities-dashboard.page.js +663 -0
  185. package/dist/lib/pages/activities-dashboard.page.js.map +1 -0
  186. package/dist/lib/pages/common-dashboard.page.d.ts +42 -0
  187. package/dist/lib/pages/common-dashboard.page.d.ts.map +1 -0
  188. package/dist/lib/pages/common-dashboard.page.js +662 -0
  189. package/dist/lib/pages/common-dashboard.page.js.map +1 -0
  190. package/dist/lib/pages/organizations-list.page.d.ts +19 -0
  191. package/dist/lib/pages/organizations-list.page.d.ts.map +1 -0
  192. package/dist/lib/pages/organizations-list.page.js +202 -0
  193. package/dist/lib/pages/organizations-list.page.js.map +1 -0
  194. package/dist/lib/pages/people-list.page.d.ts +21 -0
  195. package/dist/lib/pages/people-list.page.d.ts.map +1 -0
  196. package/dist/lib/pages/people-list.page.js +209 -0
  197. package/dist/lib/pages/people-list.page.js.map +1 -0
  198. package/dist/lib/sections/common-sections.component.d.ts +43 -0
  199. package/dist/lib/sections/common-sections.component.d.ts.map +1 -0
  200. package/dist/lib/sections/common-sections.component.js +167 -0
  201. package/dist/lib/sections/common-sections.component.js.map +1 -0
  202. package/dist/public-api.d.ts +16 -0
  203. package/dist/public-api.d.ts.map +1 -1
  204. package/dist/public-api.js +20 -2
  205. package/dist/public-api.js.map +1 -1
  206. package/package.json +19 -12
  207. package/dist/lib/custom/Organization/organization-form.component.d.ts +0 -24
  208. package/dist/lib/custom/Organization/organization-form.component.d.ts.map +0 -1
  209. package/dist/lib/custom/Organization/organization-form.component.js +0 -244
  210. package/dist/lib/custom/Organization/organization-form.component.js.map +0 -1
  211. package/dist/lib/custom/Person/person-form.component.d.ts +0 -24
  212. package/dist/lib/custom/Person/person-form.component.d.ts.map +0 -1
  213. package/dist/lib/custom/Person/person-form.component.js +0 -229
  214. package/dist/lib/custom/Person/person-form.component.js.map +0 -1
@@ -21,47 +21,57 @@ function AddressEditorComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
21
21
  function AddressEditorComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
22
22
  i0.ɵɵelementStart(0, "div", 4)(1, "div", 5);
23
23
  i0.ɵɵelement(2, "i", 6);
24
+ i0.ɵɵtext(3);
25
+ i0.ɵɵelementEnd()();
26
+ } if (rf & 2) {
27
+ const ctx_r0 = i0.ɵɵnextContext();
28
+ i0.ɵɵadvance(3);
29
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.LoadError, " ");
30
+ } }
31
+ function AddressEditorComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementStart(0, "div", 4)(1, "div", 7);
33
+ i0.ɵɵelement(2, "i", 8);
24
34
  i0.ɵɵtext(3, " Loading addresses... ");
25
35
  i0.ɵɵelementEnd()();
26
36
  } }
27
- function AddressEditorComponent_Conditional_6_Conditional_1_Template(rf, ctx) { if (rf & 1) {
28
- i0.ɵɵelementStart(0, "div", 7);
37
+ function AddressEditorComponent_Conditional_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
38
+ i0.ɵɵelementStart(0, "div", 9);
29
39
  i0.ɵɵelement(1, "i", 2);
30
40
  i0.ɵɵtext(2, " No addresses linked yet ");
31
41
  i0.ɵɵelementEnd();
32
42
  } }
33
- function AddressEditorComponent_Conditional_6_For_3_Conditional_11_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵelementStart(0, "span", 17);
35
- i0.ɵɵelement(1, "i", 19);
43
+ function AddressEditorComponent_Conditional_7_For_3_Conditional_11_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelementStart(0, "span", 19);
45
+ i0.ɵɵelement(1, "i", 21);
36
46
  i0.ɵɵtext(2, " Primary");
37
47
  i0.ɵɵelementEnd();
38
48
  } }
39
- function AddressEditorComponent_Conditional_6_For_3_Conditional_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
49
+ function AddressEditorComponent_Conditional_7_For_3_Conditional_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
40
50
  const _r3 = i0.ɵɵgetCurrentView();
41
- i0.ɵɵelementStart(0, "button", 25);
42
- i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_6_For_3_Conditional_12_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ɵ$index_29_r4 = i0.ɵɵnextContext(2).$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSetPrimary(ɵ$index_29_r4)); });
43
- i0.ɵɵelement(1, "i", 26);
51
+ i0.ɵɵelementStart(0, "button", 27);
52
+ i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_For_3_Conditional_12_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ɵ$index_37_r4 = i0.ɵɵnextContext(2).$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSetPrimary(ɵ$index_37_r4)); });
53
+ i0.ɵɵelement(1, "i", 28);
44
54
  i0.ɵɵelementEnd();
45
55
  } }
46
- function AddressEditorComponent_Conditional_6_For_3_Conditional_12_Template(rf, ctx) { if (rf & 1) {
56
+ function AddressEditorComponent_Conditional_7_For_3_Conditional_12_Template(rf, ctx) { if (rf & 1) {
47
57
  const _r2 = i0.ɵɵgetCurrentView();
48
- i0.ɵɵelementStart(0, "div", 18);
49
- i0.ɵɵconditionalCreate(1, AddressEditorComponent_Conditional_6_For_3_Conditional_12_Conditional_1_Template, 2, 0, "button", 20);
50
- i0.ɵɵelementStart(2, "button", 21);
51
- i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_6_For_3_Conditional_12_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r2); const ɵ$index_29_r4 = i0.ɵɵnextContext().$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onEdit(ɵ$index_29_r4)); });
52
- i0.ɵɵelement(3, "i", 22);
53
- i0.ɵɵelementEnd();
54
- i0.ɵɵelementStart(4, "button", 23);
55
- i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_6_For_3_Conditional_12_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r2); const ɵ$index_29_r4 = i0.ɵɵnextContext().$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onDelete(ɵ$index_29_r4)); });
56
- i0.ɵɵelement(5, "i", 24);
58
+ i0.ɵɵelementStart(0, "div", 20);
59
+ i0.ɵɵconditionalCreate(1, AddressEditorComponent_Conditional_7_For_3_Conditional_12_Conditional_1_Template, 2, 0, "button", 22);
60
+ i0.ɵɵelementStart(2, "button", 23);
61
+ i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_For_3_Conditional_12_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r2); const ɵ$index_37_r4 = i0.ɵɵnextContext().$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onEdit(ɵ$index_37_r4)); });
62
+ i0.ɵɵelement(3, "i", 24);
63
+ i0.ɵɵelementEnd();
64
+ i0.ɵɵelementStart(4, "button", 25);
65
+ i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_For_3_Conditional_12_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r2); const ɵ$index_37_r4 = i0.ɵɵnextContext().$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onDelete(ɵ$index_37_r4)); });
66
+ i0.ɵɵelement(5, "i", 26);
57
67
  i0.ɵɵelementEnd()();
58
68
  } if (rf & 2) {
59
69
  const item_r5 = i0.ɵɵnextContext().$implicit;
60
70
  i0.ɵɵadvance();
61
71
  i0.ɵɵconditional(!item_r5.Link.IsPrimary ? 1 : -1);
62
72
  } }
63
- function AddressEditorComponent_Conditional_6_For_3_Conditional_13_For_7_Template(rf, ctx) { if (rf & 1) {
64
- i0.ɵɵelementStart(0, "option", 30);
73
+ function AddressEditorComponent_Conditional_7_For_3_Conditional_13_For_7_Template(rf, ctx) { if (rf & 1) {
74
+ i0.ɵɵelementStart(0, "option", 32);
65
75
  i0.ɵɵtext(1);
66
76
  i0.ɵɵelementEnd();
67
77
  } if (rf & 2) {
@@ -70,16 +80,16 @@ function AddressEditorComponent_Conditional_6_For_3_Conditional_13_For_7_Templat
70
80
  i0.ɵɵadvance();
71
81
  i0.ɵɵtextInterpolate(t_r7.Name);
72
82
  } }
73
- function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Conditional_20_Template(rf, ctx) { if (rf & 1) {
74
- i0.ɵɵelement(0, "i", 35);
83
+ function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Conditional_20_Template(rf, ctx) { if (rf & 1) {
84
+ i0.ɵɵelement(0, "i", 37);
75
85
  } }
76
- function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Conditional_21_Template(rf, ctx) { if (rf & 1) {
77
- i0.ɵɵelementStart(0, "span", 36);
86
+ function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Conditional_21_Template(rf, ctx) { if (rf & 1) {
87
+ i0.ɵɵelementStart(0, "span", 38);
78
88
  i0.ɵɵtext(1, "not found");
79
89
  i0.ɵɵelementEnd();
80
90
  } }
81
- function AddressEditorComponent_Conditional_6_For_3_Conditional_13_For_36_Template(rf, ctx) { if (rf & 1) {
82
- i0.ɵɵelementStart(0, "option", 30);
91
+ function AddressEditorComponent_Conditional_7_For_3_Conditional_13_For_36_Template(rf, ctx) { if (rf & 1) {
92
+ i0.ɵɵelementStart(0, "option", 32);
83
93
  i0.ɵɵtext(1);
84
94
  i0.ɵɵelementEnd();
85
95
  } if (rf & 2) {
@@ -88,75 +98,75 @@ function AddressEditorComponent_Conditional_6_For_3_Conditional_13_For_36_Templa
88
98
  i0.ɵɵadvance();
89
99
  i0.ɵɵtextInterpolate2("", c_r8.Code, " - ", c_r8.Name);
90
100
  } }
91
- function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Conditional_43_Template(rf, ctx) { if (rf & 1) {
92
- i0.ɵɵelement(0, "i", 48);
101
+ function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Conditional_43_Template(rf, ctx) { if (rf & 1) {
102
+ i0.ɵɵelement(0, "i", 50);
93
103
  } }
94
- function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template(rf, ctx) { if (rf & 1) {
104
+ function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template(rf, ctx) { if (rf & 1) {
95
105
  const _r6 = i0.ɵɵgetCurrentView();
96
- i0.ɵɵelementStart(0, "div", 8)(1, "div", 27)(2, "div", 28)(3, "label");
106
+ i0.ɵɵelementStart(0, "div", 10)(1, "div", 29)(2, "div", 30)(3, "label");
97
107
  i0.ɵɵtext(4, "Type");
98
108
  i0.ɵɵelementEnd();
99
- i0.ɵɵelementStart(5, "select", 29);
100
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template_select_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.TypeID, $event) || (ctx_r0.EditForm.TypeID = $event); return i0.ɵɵresetView($event); });
101
- i0.ɵɵrepeaterCreate(6, AddressEditorComponent_Conditional_6_For_3_Conditional_13_For_7_Template, 2, 2, "option", 30, _forTrack1);
109
+ i0.ɵɵelementStart(5, "select", 31);
110
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_select_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.TypeID, $event) || (ctx_r0.EditForm.TypeID = $event); return i0.ɵɵresetView($event); });
111
+ i0.ɵɵrepeaterCreate(6, AddressEditorComponent_Conditional_7_For_3_Conditional_13_For_7_Template, 2, 2, "option", 32, _forTrack1);
102
112
  i0.ɵɵelementEnd()();
103
- i0.ɵɵelementStart(8, "div", 31)(9, "label");
113
+ i0.ɵɵelementStart(8, "div", 33)(9, "label");
104
114
  i0.ɵɵtext(10, "Line 1");
105
115
  i0.ɵɵelementEnd();
106
- i0.ɵɵelementStart(11, "input", 32);
107
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template_input_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Line1, $event) || (ctx_r0.EditForm.Line1 = $event); return i0.ɵɵresetView($event); });
116
+ i0.ɵɵelementStart(11, "input", 34);
117
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Line1, $event) || (ctx_r0.EditForm.Line1 = $event); return i0.ɵɵresetView($event); });
108
118
  i0.ɵɵelementEnd()();
109
- i0.ɵɵelementStart(12, "div", 33)(13, "label");
119
+ i0.ɵɵelementStart(12, "div", 35)(13, "label");
110
120
  i0.ɵɵtext(14, "Line 2");
111
121
  i0.ɵɵelementEnd();
112
- i0.ɵɵelementStart(15, "input", 34);
113
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template_input_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Line2, $event) || (ctx_r0.EditForm.Line2 = $event); return i0.ɵɵresetView($event); });
122
+ i0.ɵɵelementStart(15, "input", 36);
123
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Line2, $event) || (ctx_r0.EditForm.Line2 = $event); return i0.ɵɵresetView($event); });
114
124
  i0.ɵɵelementEnd()()();
115
- i0.ɵɵelementStart(16, "div", 27)(17, "div", 31)(18, "label");
125
+ i0.ɵɵelementStart(16, "div", 29)(17, "div", 33)(18, "label");
116
126
  i0.ɵɵtext(19, " City ");
117
- i0.ɵɵconditionalCreate(20, AddressEditorComponent_Conditional_6_For_3_Conditional_13_Conditional_20_Template, 1, 0, "i", 35);
118
- i0.ɵɵconditionalCreate(21, AddressEditorComponent_Conditional_6_For_3_Conditional_13_Conditional_21_Template, 2, 0, "span", 36);
127
+ i0.ɵɵconditionalCreate(20, AddressEditorComponent_Conditional_7_For_3_Conditional_13_Conditional_20_Template, 1, 0, "i", 37);
128
+ i0.ɵɵconditionalCreate(21, AddressEditorComponent_Conditional_7_For_3_Conditional_13_Conditional_21_Template, 2, 0, "span", 38);
119
129
  i0.ɵɵelementEnd();
120
- i0.ɵɵelementStart(22, "input", 37);
121
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template_input_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.City, $event) || (ctx_r0.EditForm.City = $event); return i0.ɵɵresetView($event); });
130
+ i0.ɵɵelementStart(22, "input", 39);
131
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.City, $event) || (ctx_r0.EditForm.City = $event); return i0.ɵɵresetView($event); });
122
132
  i0.ɵɵelementEnd()();
123
- i0.ɵɵelementStart(23, "div", 38)(24, "label");
133
+ i0.ɵɵelementStart(23, "div", 40)(24, "label");
124
134
  i0.ɵɵtext(25, "State");
125
135
  i0.ɵɵelementEnd();
126
- i0.ɵɵelementStart(26, "input", 39);
127
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template_input_ngModelChange_26_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.StateProvince, $event) || (ctx_r0.EditForm.StateProvince = $event); return i0.ɵɵresetView($event); });
136
+ i0.ɵɵelementStart(26, "input", 41);
137
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_ngModelChange_26_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.StateProvince, $event) || (ctx_r0.EditForm.StateProvince = $event); return i0.ɵɵresetView($event); });
128
138
  i0.ɵɵelementEnd()();
129
- i0.ɵɵelementStart(27, "div", 40)(28, "label");
139
+ i0.ɵɵelementStart(27, "div", 42)(28, "label");
130
140
  i0.ɵɵtext(29, "Postal");
131
141
  i0.ɵɵelementEnd();
132
- i0.ɵɵelementStart(30, "input", 41);
133
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template_input_ngModelChange_30_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.PostalCode, $event) || (ctx_r0.EditForm.PostalCode = $event); return i0.ɵɵresetView($event); });
134
- i0.ɵɵlistener("blur", function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template_input_blur_30_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onPostalCodeBlur()); });
142
+ i0.ɵɵelementStart(30, "input", 43);
143
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_ngModelChange_30_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.PostalCode, $event) || (ctx_r0.EditForm.PostalCode = $event); return i0.ɵɵresetView($event); });
144
+ i0.ɵɵlistener("blur", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_blur_30_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onPostalCodeBlur()); });
135
145
  i0.ɵɵelementEnd()();
136
- i0.ɵɵelementStart(31, "div", 42)(32, "label");
146
+ i0.ɵɵelementStart(31, "div", 44)(32, "label");
137
147
  i0.ɵɵtext(33, "Country");
138
148
  i0.ɵɵelementEnd();
139
- i0.ɵɵelementStart(34, "select", 29);
140
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template_select_ngModelChange_34_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Country, $event) || (ctx_r0.EditForm.Country = $event); return i0.ɵɵresetView($event); });
141
- i0.ɵɵrepeaterCreate(35, AddressEditorComponent_Conditional_6_For_3_Conditional_13_For_36_Template, 2, 3, "option", 30, _forTrack2);
149
+ i0.ɵɵelementStart(34, "select", 31);
150
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_select_ngModelChange_34_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Country, $event) || (ctx_r0.EditForm.Country = $event); return i0.ɵɵresetView($event); });
151
+ i0.ɵɵrepeaterCreate(35, AddressEditorComponent_Conditional_7_For_3_Conditional_13_For_36_Template, 2, 3, "option", 32, _forTrack2);
142
152
  i0.ɵɵelementEnd()();
143
- i0.ɵɵelementStart(37, "div", 43)(38, "input", 44);
144
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template_input_ngModelChange_38_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.IsPrimary, $event) || (ctx_r0.EditForm.IsPrimary = $event); return i0.ɵɵresetView($event); });
153
+ i0.ɵɵelementStart(37, "div", 45)(38, "input", 46);
154
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_input_ngModelChange_38_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.IsPrimary, $event) || (ctx_r0.EditForm.IsPrimary = $event); return i0.ɵɵresetView($event); });
145
155
  i0.ɵɵelementEnd();
146
- i0.ɵɵelementStart(39, "label", 45);
156
+ i0.ɵɵelementStart(39, "label", 47);
147
157
  i0.ɵɵtext(40, "Primary");
148
158
  i0.ɵɵelementEnd()()();
149
- i0.ɵɵelementStart(41, "div", 46)(42, "button", 47);
150
- i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template_button_click_42_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onSave()); });
151
- i0.ɵɵconditionalCreate(43, AddressEditorComponent_Conditional_6_For_3_Conditional_13_Conditional_43_Template, 1, 0, "i", 48);
159
+ i0.ɵɵelementStart(41, "div", 48)(42, "button", 49);
160
+ i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_button_click_42_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onSave()); });
161
+ i0.ɵɵconditionalCreate(43, AddressEditorComponent_Conditional_7_For_3_Conditional_13_Conditional_43_Template, 1, 0, "i", 50);
152
162
  i0.ɵɵtext(44, " Save ");
153
163
  i0.ɵɵelementEnd();
154
- i0.ɵɵelementStart(45, "button", 49);
155
- i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onCancelEdit()); });
164
+ i0.ɵɵelementStart(45, "button", 51);
165
+ i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onCancelEdit()); });
156
166
  i0.ɵɵtext(46, "Cancel");
157
167
  i0.ɵɵelementEnd()()();
158
168
  } if (rf & 2) {
159
- const ɵ$index_29_r4 = i0.ɵɵnextContext().$index;
169
+ const ɵ$index_37_r4 = i0.ɵɵnextContext().$index;
160
170
  const ctx_r0 = i0.ɵɵnextContext(2);
161
171
  i0.ɵɵadvance(5);
162
172
  i0.ɵɵtwoWayProperty("ngModel", ctx_r0.EditForm.TypeID);
@@ -181,36 +191,36 @@ function AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template(rf,
181
191
  i0.ɵɵadvance();
182
192
  i0.ɵɵrepeater(ctx_r0.Countries);
183
193
  i0.ɵɵadvance(3);
184
- i0.ɵɵproperty("id", "primary-edit-" + ɵ$index_29_r4);
194
+ i0.ɵɵproperty("id", "primary-edit-" + ɵ$index_37_r4);
185
195
  i0.ɵɵtwoWayProperty("ngModel", ctx_r0.EditForm.IsPrimary);
186
196
  i0.ɵɵadvance();
187
- i0.ɵɵproperty("for", "primary-edit-" + ɵ$index_29_r4);
197
+ i0.ɵɵproperty("for", "primary-edit-" + ɵ$index_37_r4);
188
198
  i0.ɵɵadvance(3);
189
199
  i0.ɵɵproperty("disabled", ctx_r0.Saving);
190
200
  i0.ɵɵadvance();
191
201
  i0.ɵɵconditional(ctx_r0.Saving ? 43 : -1);
192
202
  } }
193
- function AddressEditorComponent_Conditional_6_For_3_Template(rf, ctx) { if (rf & 1) {
194
- i0.ɵɵelementStart(0, "div", 10)(1, "div", 11);
203
+ function AddressEditorComponent_Conditional_7_For_3_Template(rf, ctx) { if (rf & 1) {
204
+ i0.ɵɵelementStart(0, "div", 12)(1, "div", 13);
195
205
  i0.ɵɵelement(2, "i");
196
206
  i0.ɵɵelementEnd();
197
- i0.ɵɵelementStart(3, "div", 12)(4, "div", 13);
207
+ i0.ɵɵelementStart(3, "div", 14)(4, "div", 15);
198
208
  i0.ɵɵtext(5);
199
209
  i0.ɵɵelementEnd();
200
- i0.ɵɵelementStart(6, "div", 14);
210
+ i0.ɵɵelementStart(6, "div", 16);
201
211
  i0.ɵɵtext(7);
202
212
  i0.ɵɵelementEnd()();
203
- i0.ɵɵelementStart(8, "div", 15)(9, "span", 16);
213
+ i0.ɵɵelementStart(8, "div", 17)(9, "span", 18);
204
214
  i0.ɵɵtext(10);
205
215
  i0.ɵɵelementEnd();
206
- i0.ɵɵconditionalCreate(11, AddressEditorComponent_Conditional_6_For_3_Conditional_11_Template, 3, 0, "span", 17);
216
+ i0.ɵɵconditionalCreate(11, AddressEditorComponent_Conditional_7_For_3_Conditional_11_Template, 3, 0, "span", 19);
207
217
  i0.ɵɵelementEnd();
208
- i0.ɵɵconditionalCreate(12, AddressEditorComponent_Conditional_6_For_3_Conditional_12_Template, 6, 1, "div", 18);
218
+ i0.ɵɵconditionalCreate(12, AddressEditorComponent_Conditional_7_For_3_Conditional_12_Template, 6, 1, "div", 20);
209
219
  i0.ɵɵelementEnd();
210
- i0.ɵɵconditionalCreate(13, AddressEditorComponent_Conditional_6_For_3_Conditional_13_Template, 47, 14, "div", 8);
220
+ i0.ɵɵconditionalCreate(13, AddressEditorComponent_Conditional_7_For_3_Conditional_13_Template, 47, 14, "div", 10);
211
221
  } if (rf & 2) {
212
222
  const item_r5 = ctx.$implicit;
213
- const ɵ$index_29_r4 = ctx.$index;
223
+ const ɵ$index_37_r4 = ctx.$index;
214
224
  const ctx_r0 = i0.ɵɵnextContext(2);
215
225
  i0.ɵɵclassProp("primary", item_r5.Link.IsPrimary);
216
226
  i0.ɵɵadvance(2);
@@ -226,10 +236,10 @@ function AddressEditorComponent_Conditional_6_For_3_Template(rf, ctx) { if (rf &
226
236
  i0.ɵɵadvance();
227
237
  i0.ɵɵconditional(ctx_r0.EditMode ? 12 : -1);
228
238
  i0.ɵɵadvance();
229
- i0.ɵɵconditional(ctx_r0.EditingIndex === ɵ$index_29_r4 ? 13 : -1);
239
+ i0.ɵɵconditional(ctx_r0.EditingIndex === ɵ$index_37_r4 ? 13 : -1);
230
240
  } }
231
- function AddressEditorComponent_Conditional_6_Conditional_4_For_7_Template(rf, ctx) { if (rf & 1) {
232
- i0.ɵɵelementStart(0, "option", 30);
241
+ function AddressEditorComponent_Conditional_7_Conditional_4_For_7_Template(rf, ctx) { if (rf & 1) {
242
+ i0.ɵɵelementStart(0, "option", 32);
233
243
  i0.ɵɵtext(1);
234
244
  i0.ɵɵelementEnd();
235
245
  } if (rf & 2) {
@@ -238,16 +248,16 @@ function AddressEditorComponent_Conditional_6_Conditional_4_For_7_Template(rf, c
238
248
  i0.ɵɵadvance();
239
249
  i0.ɵɵtextInterpolate(t_r10.Name);
240
250
  } }
241
- function AddressEditorComponent_Conditional_6_Conditional_4_Conditional_20_Template(rf, ctx) { if (rf & 1) {
242
- i0.ɵɵelement(0, "i", 35);
251
+ function AddressEditorComponent_Conditional_7_Conditional_4_Conditional_20_Template(rf, ctx) { if (rf & 1) {
252
+ i0.ɵɵelement(0, "i", 37);
243
253
  } }
244
- function AddressEditorComponent_Conditional_6_Conditional_4_Conditional_21_Template(rf, ctx) { if (rf & 1) {
245
- i0.ɵɵelementStart(0, "span", 36);
254
+ function AddressEditorComponent_Conditional_7_Conditional_4_Conditional_21_Template(rf, ctx) { if (rf & 1) {
255
+ i0.ɵɵelementStart(0, "span", 38);
246
256
  i0.ɵɵtext(1, "not found");
247
257
  i0.ɵɵelementEnd();
248
258
  } }
249
- function AddressEditorComponent_Conditional_6_Conditional_4_For_36_Template(rf, ctx) { if (rf & 1) {
250
- i0.ɵɵelementStart(0, "option", 30);
259
+ function AddressEditorComponent_Conditional_7_Conditional_4_For_36_Template(rf, ctx) { if (rf & 1) {
260
+ i0.ɵɵelementStart(0, "option", 32);
251
261
  i0.ɵɵtext(1);
252
262
  i0.ɵɵelementEnd();
253
263
  } if (rf & 2) {
@@ -256,71 +266,71 @@ function AddressEditorComponent_Conditional_6_Conditional_4_For_36_Template(rf,
256
266
  i0.ɵɵadvance();
257
267
  i0.ɵɵtextInterpolate2("", c_r11.Code, " - ", c_r11.Name);
258
268
  } }
259
- function AddressEditorComponent_Conditional_6_Conditional_4_Conditional_43_Template(rf, ctx) { if (rf & 1) {
260
- i0.ɵɵelement(0, "i", 48);
269
+ function AddressEditorComponent_Conditional_7_Conditional_4_Conditional_43_Template(rf, ctx) { if (rf & 1) {
270
+ i0.ɵɵelement(0, "i", 50);
261
271
  } }
262
- function AddressEditorComponent_Conditional_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
272
+ function AddressEditorComponent_Conditional_7_Conditional_4_Template(rf, ctx) { if (rf & 1) {
263
273
  const _r9 = i0.ɵɵgetCurrentView();
264
- i0.ɵɵelementStart(0, "div", 8)(1, "div", 27)(2, "div", 28)(3, "label");
274
+ i0.ɵɵelementStart(0, "div", 10)(1, "div", 29)(2, "div", 30)(3, "label");
265
275
  i0.ɵɵtext(4, "Type");
266
276
  i0.ɵɵelementEnd();
267
- i0.ɵɵelementStart(5, "select", 29);
268
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_Conditional_4_Template_select_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.TypeID, $event) || (ctx_r0.EditForm.TypeID = $event); return i0.ɵɵresetView($event); });
269
- i0.ɵɵrepeaterCreate(6, AddressEditorComponent_Conditional_6_Conditional_4_For_7_Template, 2, 2, "option", 30, _forTrack1);
277
+ i0.ɵɵelementStart(5, "select", 31);
278
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_select_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.TypeID, $event) || (ctx_r0.EditForm.TypeID = $event); return i0.ɵɵresetView($event); });
279
+ i0.ɵɵrepeaterCreate(6, AddressEditorComponent_Conditional_7_Conditional_4_For_7_Template, 2, 2, "option", 32, _forTrack1);
270
280
  i0.ɵɵelementEnd()();
271
- i0.ɵɵelementStart(8, "div", 31)(9, "label");
281
+ i0.ɵɵelementStart(8, "div", 33)(9, "label");
272
282
  i0.ɵɵtext(10, "Line 1");
273
283
  i0.ɵɵelementEnd();
274
- i0.ɵɵelementStart(11, "input", 32);
275
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_Conditional_4_Template_input_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Line1, $event) || (ctx_r0.EditForm.Line1 = $event); return i0.ɵɵresetView($event); });
284
+ i0.ɵɵelementStart(11, "input", 34);
285
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Line1, $event) || (ctx_r0.EditForm.Line1 = $event); return i0.ɵɵresetView($event); });
276
286
  i0.ɵɵelementEnd()();
277
- i0.ɵɵelementStart(12, "div", 33)(13, "label");
287
+ i0.ɵɵelementStart(12, "div", 35)(13, "label");
278
288
  i0.ɵɵtext(14, "Line 2");
279
289
  i0.ɵɵelementEnd();
280
- i0.ɵɵelementStart(15, "input", 34);
281
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_Conditional_4_Template_input_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Line2, $event) || (ctx_r0.EditForm.Line2 = $event); return i0.ɵɵresetView($event); });
290
+ i0.ɵɵelementStart(15, "input", 36);
291
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Line2, $event) || (ctx_r0.EditForm.Line2 = $event); return i0.ɵɵresetView($event); });
282
292
  i0.ɵɵelementEnd()()();
283
- i0.ɵɵelementStart(16, "div", 27)(17, "div", 31)(18, "label");
293
+ i0.ɵɵelementStart(16, "div", 29)(17, "div", 33)(18, "label");
284
294
  i0.ɵɵtext(19, " City ");
285
- i0.ɵɵconditionalCreate(20, AddressEditorComponent_Conditional_6_Conditional_4_Conditional_20_Template, 1, 0, "i", 35);
286
- i0.ɵɵconditionalCreate(21, AddressEditorComponent_Conditional_6_Conditional_4_Conditional_21_Template, 2, 0, "span", 36);
295
+ i0.ɵɵconditionalCreate(20, AddressEditorComponent_Conditional_7_Conditional_4_Conditional_20_Template, 1, 0, "i", 37);
296
+ i0.ɵɵconditionalCreate(21, AddressEditorComponent_Conditional_7_Conditional_4_Conditional_21_Template, 2, 0, "span", 38);
287
297
  i0.ɵɵelementEnd();
288
- i0.ɵɵelementStart(22, "input", 37);
289
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_Conditional_4_Template_input_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.City, $event) || (ctx_r0.EditForm.City = $event); return i0.ɵɵresetView($event); });
298
+ i0.ɵɵelementStart(22, "input", 39);
299
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.City, $event) || (ctx_r0.EditForm.City = $event); return i0.ɵɵresetView($event); });
290
300
  i0.ɵɵelementEnd()();
291
- i0.ɵɵelementStart(23, "div", 38)(24, "label");
301
+ i0.ɵɵelementStart(23, "div", 40)(24, "label");
292
302
  i0.ɵɵtext(25, "State");
293
303
  i0.ɵɵelementEnd();
294
- i0.ɵɵelementStart(26, "input", 39);
295
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_Conditional_4_Template_input_ngModelChange_26_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.StateProvince, $event) || (ctx_r0.EditForm.StateProvince = $event); return i0.ɵɵresetView($event); });
304
+ i0.ɵɵelementStart(26, "input", 41);
305
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_ngModelChange_26_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.StateProvince, $event) || (ctx_r0.EditForm.StateProvince = $event); return i0.ɵɵresetView($event); });
296
306
  i0.ɵɵelementEnd()();
297
- i0.ɵɵelementStart(27, "div", 40)(28, "label");
307
+ i0.ɵɵelementStart(27, "div", 42)(28, "label");
298
308
  i0.ɵɵtext(29, "Postal");
299
309
  i0.ɵɵelementEnd();
300
- i0.ɵɵelementStart(30, "input", 41);
301
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_Conditional_4_Template_input_ngModelChange_30_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.PostalCode, $event) || (ctx_r0.EditForm.PostalCode = $event); return i0.ɵɵresetView($event); });
302
- i0.ɵɵlistener("blur", function AddressEditorComponent_Conditional_6_Conditional_4_Template_input_blur_30_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onPostalCodeBlur()); });
310
+ i0.ɵɵelementStart(30, "input", 43);
311
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_ngModelChange_30_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.PostalCode, $event) || (ctx_r0.EditForm.PostalCode = $event); return i0.ɵɵresetView($event); });
312
+ i0.ɵɵlistener("blur", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_blur_30_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onPostalCodeBlur()); });
303
313
  i0.ɵɵelementEnd()();
304
- i0.ɵɵelementStart(31, "div", 42)(32, "label");
314
+ i0.ɵɵelementStart(31, "div", 44)(32, "label");
305
315
  i0.ɵɵtext(33, "Country");
306
316
  i0.ɵɵelementEnd();
307
- i0.ɵɵelementStart(34, "select", 29);
308
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_Conditional_4_Template_select_ngModelChange_34_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Country, $event) || (ctx_r0.EditForm.Country = $event); return i0.ɵɵresetView($event); });
309
- i0.ɵɵrepeaterCreate(35, AddressEditorComponent_Conditional_6_Conditional_4_For_36_Template, 2, 3, "option", 30, _forTrack2);
317
+ i0.ɵɵelementStart(34, "select", 31);
318
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_select_ngModelChange_34_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.Country, $event) || (ctx_r0.EditForm.Country = $event); return i0.ɵɵresetView($event); });
319
+ i0.ɵɵrepeaterCreate(35, AddressEditorComponent_Conditional_7_Conditional_4_For_36_Template, 2, 3, "option", 32, _forTrack2);
310
320
  i0.ɵɵelementEnd()();
311
- i0.ɵɵelementStart(37, "div", 43)(38, "input", 50);
312
- i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_6_Conditional_4_Template_input_ngModelChange_38_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.IsPrimary, $event) || (ctx_r0.EditForm.IsPrimary = $event); return i0.ɵɵresetView($event); });
321
+ i0.ɵɵelementStart(37, "div", 45)(38, "input", 52);
322
+ i0.ɵɵtwoWayListener("ngModelChange", function AddressEditorComponent_Conditional_7_Conditional_4_Template_input_ngModelChange_38_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditForm.IsPrimary, $event) || (ctx_r0.EditForm.IsPrimary = $event); return i0.ɵɵresetView($event); });
313
323
  i0.ɵɵelementEnd();
314
- i0.ɵɵelementStart(39, "label", 51);
324
+ i0.ɵɵelementStart(39, "label", 53);
315
325
  i0.ɵɵtext(40, "Primary");
316
326
  i0.ɵɵelementEnd()()();
317
- i0.ɵɵelementStart(41, "div", 46)(42, "button", 47);
318
- i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_6_Conditional_4_Template_button_click_42_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSave()); });
319
- i0.ɵɵconditionalCreate(43, AddressEditorComponent_Conditional_6_Conditional_4_Conditional_43_Template, 1, 0, "i", 48);
327
+ i0.ɵɵelementStart(41, "div", 48)(42, "button", 49);
328
+ i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_Conditional_4_Template_button_click_42_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSave()); });
329
+ i0.ɵɵconditionalCreate(43, AddressEditorComponent_Conditional_7_Conditional_4_Conditional_43_Template, 1, 0, "i", 50);
320
330
  i0.ɵɵtext(44, " Save ");
321
331
  i0.ɵɵelementEnd();
322
- i0.ɵɵelementStart(45, "button", 49);
323
- i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_6_Conditional_4_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onCancelEdit()); });
332
+ i0.ɵɵelementStart(45, "button", 51);
333
+ i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_Conditional_4_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onCancelEdit()); });
324
334
  i0.ɵɵtext(46, "Cancel");
325
335
  i0.ɵɵelementEnd()()();
326
336
  } if (rf & 2) {
@@ -354,20 +364,20 @@ function AddressEditorComponent_Conditional_6_Conditional_4_Template(rf, ctx) {
354
364
  i0.ɵɵadvance();
355
365
  i0.ɵɵconditional(ctx_r0.Saving ? 43 : -1);
356
366
  } }
357
- function AddressEditorComponent_Conditional_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
367
+ function AddressEditorComponent_Conditional_7_Conditional_5_Template(rf, ctx) { if (rf & 1) {
358
368
  const _r12 = i0.ɵɵgetCurrentView();
359
- i0.ɵɵelementStart(0, "div", 9)(1, "button", 52);
360
- i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_6_Conditional_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onAdd()); });
361
- i0.ɵɵelement(2, "i", 53);
369
+ i0.ɵɵelementStart(0, "div", 11)(1, "button", 54);
370
+ i0.ɵɵlistener("click", function AddressEditorComponent_Conditional_7_Conditional_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onAdd()); });
371
+ i0.ɵɵelement(2, "i", 55);
362
372
  i0.ɵɵtext(3, " Add Address ");
363
373
  i0.ɵɵelementEnd()();
364
374
  } }
365
- function AddressEditorComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
375
+ function AddressEditorComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
366
376
  i0.ɵɵelementStart(0, "div", 4);
367
- i0.ɵɵconditionalCreate(1, AddressEditorComponent_Conditional_6_Conditional_1_Template, 3, 0, "div", 7);
368
- i0.ɵɵrepeaterCreate(2, AddressEditorComponent_Conditional_6_For_3_Template, 14, 10, null, null, _forTrack0);
369
- i0.ɵɵconditionalCreate(4, AddressEditorComponent_Conditional_6_Conditional_4_Template, 47, 12, "div", 8);
370
- i0.ɵɵconditionalCreate(5, AddressEditorComponent_Conditional_6_Conditional_5_Template, 4, 0, "div", 9);
377
+ i0.ɵɵconditionalCreate(1, AddressEditorComponent_Conditional_7_Conditional_1_Template, 3, 0, "div", 9);
378
+ i0.ɵɵrepeaterCreate(2, AddressEditorComponent_Conditional_7_For_3_Template, 14, 10, null, null, _forTrack0);
379
+ i0.ɵɵconditionalCreate(4, AddressEditorComponent_Conditional_7_Conditional_4_Template, 47, 12, "div", 10);
380
+ i0.ɵɵconditionalCreate(5, AddressEditorComponent_Conditional_7_Conditional_5_Template, 4, 0, "div", 11);
371
381
  i0.ɵɵelementEnd();
372
382
  } if (rf & 2) {
373
383
  const ctx_r0 = i0.ɵɵnextContext();
@@ -520,6 +530,12 @@ export class AddressEditorComponent {
520
530
  Saving = false;
521
531
  /** The resolved MJ EntityID for the current {@link EntityName}. */
522
532
  resolvedEntityID = '';
533
+ /**
534
+ * Set when the component cannot operate — currently only when {@link EntityName}
535
+ * does not resolve to an entity. Rendered in the template and used to block saving,
536
+ * so a misconfiguration surfaces as a visible message instead of a failed INSERT.
537
+ */
538
+ LoadError = null;
523
539
  /** Cached action ID for the Postal Code Lookup action. */
524
540
  postalCodeLookupActionID = null;
525
541
  /** Whether a postal code lookup is currently in progress. */
@@ -576,7 +592,11 @@ export class AddressEditorComponent {
576
592
  // The action returns JSON-stringified address in Message
577
593
  const address = JSON.parse(result.Message);
578
594
  const city = address.City || '';
579
- const state = address.State || '';
595
+ // The action's Message is the RAW ProviderGeocodeResult, which names the field
596
+ // StateProvinceCode/StateProvinceName — there is no `State` on it. (`State` exists
597
+ // only as a separate Output param.) Reading `address.State` was always undefined,
598
+ // which is why the postal lookup filled City but never the state box.
599
+ const state = address.StateProvinceCode || address.StateProvinceName || address.State || '';
580
600
  if (!city && !state) {
581
601
  // Google resolved the country but not a specific city/state for this postal code
582
602
  this.PostalCodeNotFound = true;
@@ -627,12 +647,17 @@ export class AddressEditorComponent {
627
647
  this.cdr.detectChanges();
628
648
  try {
629
649
  const md = new Metadata();
630
- // Resolve EntityName -> EntityID
631
- const entity = md.Entities.find(e => e.Name === this._entityName);
650
+ // Resolve EntityName -> EntityID. EntityByName is case- and whitespace-insensitive and
651
+ // O(1); `Entities.find(e => e.Name === ...)` is neither, and its miss used to leave
652
+ // resolvedEntityID empty while still rendering an editable form — which then wrote
653
+ // empty-string GUIDs into AddressLink.EntityID and failed at the database.
654
+ const entity = md.EntityByName(this._entityName);
632
655
  if (!entity) {
656
+ this.LoadError = `Address editor misconfigured: entity "${this._entityName}" is not in metadata.`;
633
657
  console.error(`AddressEditor: Entity "${this._entityName}" not found`);
634
658
  return;
635
659
  }
660
+ this.LoadError = null;
636
661
  this.resolvedEntityID = entity.ID;
637
662
  const rv = new RunView();
638
663
  // Load address links and address types in parallel
@@ -707,7 +732,39 @@ export class AddressEditorComponent {
707
732
  */
708
733
  getAddressTypeIcon(typeID) {
709
734
  const addrType = this.AddressTypes.find(t => t.ID === typeID);
710
- return addrType?.IconClass || 'fa-solid fa-location-dot';
735
+ return AddressEditorComponent.resolveIconClass(addrType?.IconClass);
736
+ }
737
+ /**
738
+ * Resolves an IconClass to something that will actually render, falling back to a
739
+ * generic location pin.
740
+ *
741
+ * A `?? fallback` is not enough on its own: the failure seen in the field was
742
+ * `fa-solid fa-mailbox`, a NON-EMPTY class that is Font Awesome **Pro**-only, so it
743
+ * passed every emptiness check and then rendered as a blank square (the browser
744
+ * reports `content: none` for its ::before — no rule matched). Since a component
745
+ * cannot ask the font whether a glyph exists, this verifies the icon is one the
746
+ * bundled Free set provides and substitutes the pin otherwise. Blank, whitespace-only
747
+ * and modifier-only values fall back too.
748
+ *
749
+ * The Pro list is deliberately small and explicit — only icons this app's seed data
750
+ * has actually used. It is a safety net; the real fix is correcting the seed
751
+ * (`metadata/address-types/.address-types.json`), which this change also does.
752
+ */
753
+ static resolveIconClass(iconClass) {
754
+ const FALLBACK = 'fa-solid fa-location-dot';
755
+ const cls = (iconClass ?? '').trim();
756
+ if (!cls)
757
+ return FALLBACK;
758
+ // Must name an actual icon, not just a style/modifier such as `fa-solid`.
759
+ const STYLE_ONLY = new Set(['fa-solid', 'fa-regular', 'fa-light', 'fa-thin', 'fa-duotone', 'fa-brands', 'fa', 'fas', 'far', 'fab']);
760
+ const names = cls.split(/\s+/).filter(t => t.startsWith('fa-') && !STYLE_ONLY.has(t));
761
+ if (names.length === 0)
762
+ return FALLBACK;
763
+ // Font Awesome Pro-only icons seen in this app's seed data — they render blank on Free.
764
+ const PRO_ONLY = new Set(['fa-mailbox']);
765
+ if (names.some(n => PRO_ONLY.has(n)))
766
+ return FALLBACK;
767
+ return cls;
711
768
  }
712
769
  /**
713
770
  * Formats the first line of an address display string.
@@ -804,6 +861,16 @@ export class AddressEditorComponent {
804
861
  async onSave() {
805
862
  if (!this.EditForm.Line1 || !this.EditForm.City)
806
863
  return;
864
+ // Both are NOT NULL uniqueidentifier columns on AddressLink; saving without them
865
+ // produced "Conversion failed when converting from a character string to
866
+ // uniqueidentifier" at the database instead of anything actionable.
867
+ if (!this.resolvedEntityID || !this.EditForm.TypeID) {
868
+ this.LoadError = !this.resolvedEntityID
869
+ ? `Cannot save: entity "${this._entityName}" is not in metadata.`
870
+ : 'Cannot save: no address type is selected.';
871
+ this.cdr.detectChanges();
872
+ return;
873
+ }
807
874
  this.Saving = true;
808
875
  this.cdr.detectChanges();
809
876
  try {
@@ -951,23 +1018,23 @@ export class AddressEditorComponent {
951
1018
  }
952
1019
  }
953
1020
  static ɵfac = function AddressEditorComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AddressEditorComponent)(); };
954
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AddressEditorComponent, selectors: [["bizapps-address-editor"]], inputs: { EditMode: "EditMode", EntityName: "EntityName", RecordID: "RecordID" }, outputs: { DataChanged: "DataChanged" }, decls: 7, vars: 2, consts: [[1, "section-header"], [1, "section-label"], [1, "fa-solid", "fa-map-marker-alt"], [1, "count"], [1, "addr-table"], [1, "loading-row"], [1, "fa-solid", "fa-spinner"], [1, "empty-state"], [1, "addr-table-edit-panel"], [1, "addr-table-footer"], [1, "addr-table-row"], [1, "addr-table-icon"], [1, "addr-table-content"], [1, "addr-table-main"], [1, "addr-table-sub"], [1, "addr-table-badges"], [1, "badge", "badge-type"], [1, "badge", "badge-primary"], [1, "addr-table-actions"], [1, "fa-solid", "fa-star"], ["title", "Set as Primary", 1, "btn-ghost"], ["title", "Edit", 1, "btn-ghost", 3, "click"], [1, "fa-solid", "fa-pen"], ["title", "Remove", 1, "btn-ghost", "danger", 3, "click"], [1, "fa-solid", "fa-trash"], ["title", "Set as Primary", 1, "btn-ghost", 3, "click"], [1, "fa-regular", "fa-star"], [1, "form-row"], [1, "form-field", "type-field"], [3, "ngModelChange", "ngModel"], [3, "value"], [1, "form-field"], ["type", "text", "placeholder", "Street address", 3, "ngModelChange", "ngModel"], [1, "form-field", "line2-field"], ["type", "text", "placeholder", "Apt, suite", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-spinner", "fa-spin", "lookup-spinner"], [1, "lookup-not-found"], ["type", "text", "placeholder", "City", 3, "ngModelChange", "ngModel"], [1, "form-field", "state-field"], ["type", "text", "placeholder", "ST", 3, "ngModelChange", "ngModel"], [1, "form-field", "postal-field"], ["type", "text", "placeholder", "Zip", 3, "ngModelChange", "blur", "ngModel"], [1, "form-field", "country-field"], [1, "checkbox-field"], ["type", "checkbox", 3, "ngModelChange", "id", "ngModel"], [3, "for"], [1, "form-actions"], [1, "btn", "btn-primary", "btn-sm", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "btn", "btn-cancel", "btn-sm", 3, "click"], ["type", "checkbox", "id", "primary-add", 3, "ngModelChange", "ngModel"], ["for", "primary-add"], [1, "btn", "btn-outline", "full-width", 3, "click"], [1, "fa-solid", "fa-plus"]], template: function AddressEditorComponent_Template(rf, ctx) { if (rf & 1) {
1021
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AddressEditorComponent, selectors: [["bizapps-address-editor"]], inputs: { EditMode: "EditMode", EntityName: "EntityName", RecordID: "RecordID" }, outputs: { DataChanged: "DataChanged" }, decls: 8, vars: 2, consts: [[1, "section-header"], [1, "section-label"], [1, "fa-solid", "fa-map-marker-alt"], [1, "count"], [1, "addr-table"], [1, "load-error-row"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "loading-row"], [1, "fa-solid", "fa-spinner"], [1, "empty-state"], [1, "addr-table-edit-panel"], [1, "addr-table-footer"], [1, "addr-table-row"], [1, "addr-table-icon"], [1, "addr-table-content"], [1, "addr-table-main"], [1, "addr-table-sub"], [1, "addr-table-badges"], [1, "badge", "badge-type"], [1, "badge", "badge-primary"], [1, "addr-table-actions"], [1, "fa-solid", "fa-star"], ["title", "Set as Primary", 1, "btn-ghost"], ["title", "Edit", 1, "btn-ghost", 3, "click"], [1, "fa-solid", "fa-pen"], ["title", "Remove", 1, "btn-ghost", "danger", 3, "click"], [1, "fa-solid", "fa-trash"], ["title", "Set as Primary", 1, "btn-ghost", 3, "click"], [1, "fa-regular", "fa-star"], [1, "form-row"], [1, "form-field", "type-field"], [3, "ngModelChange", "ngModel"], [3, "value"], [1, "form-field"], ["type", "text", "placeholder", "Street address", 3, "ngModelChange", "ngModel"], [1, "form-field", "line2-field"], ["type", "text", "placeholder", "Apt, suite", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-spinner", "fa-spin", "lookup-spinner"], [1, "lookup-not-found"], ["type", "text", "placeholder", "City", 3, "ngModelChange", "ngModel"], [1, "form-field", "state-field"], ["type", "text", "placeholder", "ST", 3, "ngModelChange", "ngModel"], [1, "form-field", "postal-field"], ["type", "text", "placeholder", "Zip", 3, "ngModelChange", "blur", "ngModel"], [1, "form-field", "country-field"], [1, "checkbox-field"], ["type", "checkbox", 3, "ngModelChange", "id", "ngModel"], [3, "for"], [1, "form-actions"], [1, "btn", "btn-primary", "btn-sm", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "btn", "btn-cancel", "btn-sm", 3, "click"], ["type", "checkbox", "id", "primary-add", 3, "ngModelChange", "ngModel"], ["for", "primary-add"], [1, "btn", "btn-outline", "full-width", 3, "click"], [1, "fa-solid", "fa-plus"]], template: function AddressEditorComponent_Template(rf, ctx) { if (rf & 1) {
955
1022
  i0.ɵɵelementStart(0, "div", 0)(1, "span", 1);
956
1023
  i0.ɵɵelement(2, "i", 2);
957
1024
  i0.ɵɵtext(3, " Addresses ");
958
1025
  i0.ɵɵconditionalCreate(4, AddressEditorComponent_Conditional_4_Template, 2, 1, "span", 3);
959
1026
  i0.ɵɵelementEnd()();
960
- i0.ɵɵconditionalCreate(5, AddressEditorComponent_Conditional_5_Template, 4, 0, "div", 4)(6, AddressEditorComponent_Conditional_6_Template, 6, 3, "div", 4);
1027
+ i0.ɵɵconditionalCreate(5, AddressEditorComponent_Conditional_5_Template, 4, 1, "div", 4)(6, AddressEditorComponent_Conditional_6_Template, 4, 0, "div", 4)(7, AddressEditorComponent_Conditional_7_Template, 6, 3, "div", 4);
961
1028
  } if (rf & 2) {
962
1029
  i0.ɵɵadvance(4);
963
1030
  i0.ɵɵconditional(!ctx.Loading && ctx.AddressItems.length > 0 ? 4 : -1);
964
1031
  i0.ɵɵadvance();
965
- i0.ɵɵconditional(ctx.Loading ? 5 : 6);
966
- } }, dependencies: [CommonModule, FormsModule, i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel], styles: ["\n\n\n\n\n\n[_nghost-%COMP%] {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n color: #333;\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.section-label[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #1976d2;\n}\n\n.count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #888;\n font-weight: 400;\n}\n\n\n\n.addr-table[_ngcontent-%COMP%] {\n width: 100%;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n\n.addr-table-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid #f0f0f0;\n gap: 12px;\n transition: background 0.1s ease;\n}\n\n.addr-table-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.addr-table-row[_ngcontent-%COMP%]:hover {\n background: #fafafa;\n}\n\n.addr-table-row.primary[_ngcontent-%COMP%] {\n background: #f1f8e9;\n}\n\n\n\n.addr-table-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n background: #e3f2fd;\n color: #1565c0;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n\n\n.addr-table-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.addr-table-main[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #333;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.addr-table-sub[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #888;\n margin-top: 2px;\n}\n\n\n\n.addr-table-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.badge-type[_ngcontent-%COMP%] {\n background: #e3f2fd;\n color: #1565c0;\n}\n\n.badge-primary[_ngcontent-%COMP%] {\n background: #e8f5e9;\n color: #2e7d32;\n}\n\n\n\n.addr-table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.addr-table-row[_ngcontent-%COMP%]:hover .addr-table-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n\n\n.btn-ghost[_ngcontent-%COMP%] {\n background: transparent;\n color: #999;\n padding: 6px 8px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 13px;\n transition: all 0.15s ease;\n}\n\n.btn-ghost[_ngcontent-%COMP%]:hover {\n color: #333;\n background: #f5f5f5;\n}\n\n.btn-ghost.danger[_ngcontent-%COMP%]:hover {\n color: #c62828;\n background: #ffebee;\n}\n\n\n\n.addr-table-edit-panel[_ngcontent-%COMP%] {\n padding: 16px;\n background: #f8f9ff;\n border-bottom: 2px solid #1976d2;\n}\n\n\n\n.addr-table-footer[_ngcontent-%COMP%] {\n padding: 10px 16px;\n border-top: 1px solid #e0e0e0;\n background: #fafafa;\n}\n\n\n\n.btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: none;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: #1976d2;\n color: white;\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover {\n background: #1565c0;\n}\n\n.btn-outline[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px dashed #ccc;\n color: #666;\n}\n\n.btn-outline[_ngcontent-%COMP%]:hover {\n border-color: #1976d2;\n color: #1976d2;\n background: #f5f9ff;\n}\n\n.btn-outline.full-width[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: center;\n}\n\n.btn-cancel[_ngcontent-%COMP%] {\n background: #f5f5f5;\n color: #666;\n border: 1px solid #e0e0e0;\n}\n\n.btn-cancel[_ngcontent-%COMP%]:hover {\n background: #eeeeee;\n}\n\n.btn-sm[_ngcontent-%COMP%] {\n padding: 6px 14px;\n font-size: 12px;\n}\n\n\n\n.form-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.form-field[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.form-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: #666;\n margin-bottom: 4px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%], \n.form-field[_ngcontent-%COMP%] select[_ngcontent-%COMP%] {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n font-size: 14px;\n font-family: inherit;\n background: white;\n}\n\n.form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, \n.form-field[_ngcontent-%COMP%] select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #1976d2;\n box-shadow: 0 0 0 3px rgba(25, 118, 210, 0.1);\n}\n\n.form-field.type-field[_ngcontent-%COMP%] {\n max-width: 150px;\n}\n\n.form-field.line2-field[_ngcontent-%COMP%] {\n max-width: 150px;\n}\n\n.form-field.state-field[_ngcontent-%COMP%] {\n max-width: 80px;\n}\n\n.form-field.postal-field[_ngcontent-%COMP%] {\n max-width: 130px;\n}\n\n.form-field.country-field[_ngcontent-%COMP%] {\n max-width: 180px;\n}\n\n.checkbox-field[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding-top: 22px;\n}\n\n.checkbox-field[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.checkbox-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #555;\n cursor: pointer;\n}\n\n.form-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 32px 16px;\n color: #888;\n font-size: 14px;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: #ccc;\n margin-bottom: 8px;\n display: block;\n}\n\n\n\n.loading-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n color: #888;\n font-size: 13px;\n gap: 8px;\n}\n\n.loading-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_spin 1s linear infinite;\n}\n\n@keyframes _ngcontent-%COMP%_spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n.lookup-spinner[_ngcontent-%COMP%] {\n font-size: 10px;\n color: #1976d2;\n margin-left: 4px;\n}\n\n.lookup-not-found[_ngcontent-%COMP%] {\n font-size: 10px;\n color: #e65100;\n margin-left: 4px;\n font-weight: 600;\n}"] });
1032
+ i0.ɵɵconditional(ctx.LoadError ? 5 : ctx.Loading ? 6 : 7);
1033
+ } }, dependencies: [CommonModule, FormsModule, i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel], styles: ["\n\n\n\n\n\n[_nghost-%COMP%] {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n color: var(--mj-text-primary);\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.section-label[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n\n\n.addr-table[_ngcontent-%COMP%] {\n width: 100%;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n\n\n.addr-table-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n gap: 12px;\n transition: background 0.1s ease;\n}\n\n.addr-table-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.addr-table-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.addr-table-row.primary[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n}\n\n\n\n.addr-table-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n font-size: 14px;\n flex-shrink: 0;\n}\n\n\n\n.addr-table-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.addr-table-main[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.addr-table-sub[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n\n\n.addr-table-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.badge-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.badge-primary[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n\n\n.addr-table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.addr-table-row[_ngcontent-%COMP%]:hover .addr-table-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n\n\n.btn-ghost[_ngcontent-%COMP%] {\n background: transparent;\n color: var(--mj-text-disabled);\n padding: 6px 8px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 13px;\n transition: all 0.15s ease;\n}\n\n.btn-ghost[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-card);\n}\n\n.btn-ghost.danger[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error-text);\n background: var(--mj-status-error-bg);\n}\n\n\n\n.addr-table-edit-panel[_ngcontent-%COMP%] {\n padding: 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n\n\n.addr-table-footer[_ngcontent-%COMP%] {\n padding: 10px 16px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n\n\n.btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: none;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.btn-outline[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px dashed var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n.btn-outline[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.btn-outline.full-width[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: center;\n}\n\n.btn-cancel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.btn-cancel[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-subtle);\n}\n\n.btn-sm[_ngcontent-%COMP%] {\n padding: 6px 14px;\n font-size: 12px;\n}\n\n\n\n.form-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.form-field[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.form-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%], \n.form-field[_ngcontent-%COMP%] select[_ngcontent-%COMP%] {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n font-family: inherit;\n background: var(--mj-bg-surface);\n}\n\n.form-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, \n.form-field[_ngcontent-%COMP%] select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-field.type-field[_ngcontent-%COMP%] {\n max-width: 150px;\n}\n\n.form-field.line2-field[_ngcontent-%COMP%] {\n max-width: 150px;\n}\n\n.form-field.state-field[_ngcontent-%COMP%] {\n max-width: 80px;\n}\n\n.form-field.postal-field[_ngcontent-%COMP%] {\n max-width: 130px;\n}\n\n.form-field.country-field[_ngcontent-%COMP%] {\n max-width: 180px;\n}\n\n.checkbox-field[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding-top: 22px;\n}\n\n.checkbox-field[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.checkbox-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.form-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 32px 16px;\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--mj-border-strong);\n margin-bottom: 8px;\n display: block;\n}\n\n\n\n.loading-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n color: var(--mj-text-muted);\n font-size: 13px;\n gap: 8px;\n}\n\n.loading-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_spin 1s linear infinite;\n}\n\n\n\n\n.load-error-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 24px;\n color: var(--mj-status-error-text);\n font-size: 13px;\n gap: 8px;\n}\n\n@keyframes _ngcontent-%COMP%_spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n.lookup-spinner[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-brand-primary);\n margin-left: 4px;\n}\n\n.lookup-not-found[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-status-warning-text);\n margin-left: 4px;\n font-weight: 600;\n}"] });
967
1034
  }
968
1035
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AddressEditorComponent, [{
969
1036
  type: Component,
970
- args: [{ standalone: true, imports: [CommonModule, FormsModule], selector: 'bizapps-address-editor', template: "<!-- AddressEditor - Compact Table Design (Option B) -->\n\n<div class=\"section-header\">\n <span class=\"section-label\">\n <i class=\"fa-solid fa-map-marker-alt\"></i>\n Addresses\n @if (!Loading && AddressItems.length > 0) {\n <span class=\"count\">({{ AddressItems.length }})</span>\n }\n </span>\n</div>\n\n@if (Loading) {\n <div class=\"addr-table\">\n <div class=\"loading-row\">\n <i class=\"fa-solid fa-spinner\"></i> Loading addresses...\n </div>\n </div>\n} @else {\n <div class=\"addr-table\">\n @if (AddressItems.length === 0 && EditingIndex !== -1) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-map-marker-alt\"></i>\n No addresses linked yet\n </div>\n }\n\n @for (item of AddressItems; track item.Link.ID; let i = $index) {\n <!-- Address Row -->\n <div class=\"addr-table-row\" [class.primary]=\"item.Link.IsPrimary\">\n <div class=\"addr-table-icon\">\n <i [class]=\"getAddressTypeIcon(item.Link.AddressTypeID)\"></i>\n </div>\n <div class=\"addr-table-content\">\n <div class=\"addr-table-main\">{{ formatAddressLine1(item.Address) }}</div>\n <div class=\"addr-table-sub\">{{ formatAddressLine2(item.Address) }}</div>\n </div>\n <div class=\"addr-table-badges\">\n <span class=\"badge badge-type\">{{ item.Link.AddressType }}</span>\n @if (item.Link.IsPrimary) {\n <span class=\"badge badge-primary\"><i class=\"fa-solid fa-star\"></i> Primary</span>\n }\n </div>\n @if (EditMode) {\n <div class=\"addr-table-actions\">\n @if (!item.Link.IsPrimary) {\n <button class=\"btn-ghost\" title=\"Set as Primary\" (click)=\"onSetPrimary(i)\">\n <i class=\"fa-regular fa-star\"></i>\n </button>\n }\n <button class=\"btn-ghost\" title=\"Edit\" (click)=\"onEdit(i)\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button class=\"btn-ghost danger\" title=\"Remove\" (click)=\"onDelete(i)\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n\n <!-- Inline Edit Panel (shown when editing this row) -->\n @if (EditingIndex === i) {\n <div class=\"addr-table-edit-panel\">\n <div class=\"form-row\">\n <div class=\"form-field type-field\">\n <label>Type</label>\n <select [(ngModel)]=\"EditForm.TypeID\">\n @for (t of AddressTypes; track t.ID) {\n <option [value]=\"t.ID\">{{ t.Name }}</option>\n }\n </select>\n </div>\n <div class=\"form-field\">\n <label>Line 1</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line1\" placeholder=\"Street address\">\n </div>\n <div class=\"form-field line2-field\">\n <label>Line 2</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line2\" placeholder=\"Apt, suite\">\n </div>\n </div>\n <div class=\"form-row\">\n <div class=\"form-field\">\n <label>\n City\n @if (LookingUpPostalCode) { <i class=\"fa-solid fa-spinner fa-spin lookup-spinner\"></i> }\n @if (PostalCodeNotFound) { <span class=\"lookup-not-found\">not found</span> }\n </label>\n <input type=\"text\" [(ngModel)]=\"EditForm.City\" placeholder=\"City\">\n </div>\n <div class=\"form-field state-field\">\n <label>State</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.StateProvince\" placeholder=\"ST\">\n </div>\n <div class=\"form-field postal-field\">\n <label>Postal</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.PostalCode\" placeholder=\"Zip\" (blur)=\"onPostalCodeBlur()\">\n </div>\n <div class=\"form-field country-field\">\n <label>Country</label>\n <select [(ngModel)]=\"EditForm.Country\">\n @for (c of Countries; track c.Code) {\n <option [value]=\"c.Code\">{{ c.Code }} - {{ c.Name }}</option>\n }\n </select>\n </div>\n <div class=\"checkbox-field\">\n <input type=\"checkbox\" [id]=\"'primary-edit-' + i\" [(ngModel)]=\"EditForm.IsPrimary\">\n <label [for]=\"'primary-edit-' + i\">Primary</label>\n </div>\n </div>\n <div class=\"form-actions\">\n <button class=\"btn btn-primary btn-sm\" (click)=\"onSave()\" [disabled]=\"Saving\">\n @if (Saving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n Save\n </button>\n <button class=\"btn btn-cancel btn-sm\" (click)=\"onCancelEdit()\">Cancel</button>\n </div>\n </div>\n }\n }\n\n <!-- Add New Panel (shown when EditingIndex === -1) -->\n @if (EditingIndex === -1) {\n <div class=\"addr-table-edit-panel\">\n <div class=\"form-row\">\n <div class=\"form-field type-field\">\n <label>Type</label>\n <select [(ngModel)]=\"EditForm.TypeID\">\n @for (t of AddressTypes; track t.ID) {\n <option [value]=\"t.ID\">{{ t.Name }}</option>\n }\n </select>\n </div>\n <div class=\"form-field\">\n <label>Line 1</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line1\" placeholder=\"Street address\">\n </div>\n <div class=\"form-field line2-field\">\n <label>Line 2</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line2\" placeholder=\"Apt, suite\">\n </div>\n </div>\n <div class=\"form-row\">\n <div class=\"form-field\">\n <label>\n City\n @if (LookingUpPostalCode) { <i class=\"fa-solid fa-spinner fa-spin lookup-spinner\"></i> }\n @if (PostalCodeNotFound) { <span class=\"lookup-not-found\">not found</span> }\n </label>\n <input type=\"text\" [(ngModel)]=\"EditForm.City\" placeholder=\"City\">\n </div>\n <div class=\"form-field state-field\">\n <label>State</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.StateProvince\" placeholder=\"ST\">\n </div>\n <div class=\"form-field postal-field\">\n <label>Postal</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.PostalCode\" placeholder=\"Zip\" (blur)=\"onPostalCodeBlur()\">\n </div>\n <div class=\"form-field country-field\">\n <label>Country</label>\n <select [(ngModel)]=\"EditForm.Country\">\n @for (c of Countries; track c.Code) {\n <option [value]=\"c.Code\">{{ c.Code }} - {{ c.Name }}</option>\n }\n </select>\n </div>\n <div class=\"checkbox-field\">\n <input type=\"checkbox\" id=\"primary-add\" [(ngModel)]=\"EditForm.IsPrimary\">\n <label for=\"primary-add\">Primary</label>\n </div>\n </div>\n <div class=\"form-actions\">\n <button class=\"btn btn-primary btn-sm\" (click)=\"onSave()\" [disabled]=\"Saving\">\n @if (Saving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n Save\n </button>\n <button class=\"btn btn-cancel btn-sm\" (click)=\"onCancelEdit()\">Cancel</button>\n </div>\n </div>\n }\n\n <!-- Add Button Footer -->\n @if (EditingIndex === null && EditMode) {\n <div class=\"addr-table-footer\">\n <button class=\"btn btn-outline full-width\" (click)=\"onAdd()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Address\n </button>\n </div>\n }\n </div>\n}\n", styles: ["/* ============================================\n AddressEditor - Compact Table Design\n Pixel-perfect match to Option B mockup\n ============================================ */\n\n:host {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n color: #333;\n}\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.section-label {\n font-size: 15px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-label i {\n color: #1976d2;\n}\n\n.count {\n font-size: 12px;\n color: #888;\n font-weight: 400;\n}\n\n/* Table container */\n.addr-table {\n width: 100%;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Table rows */\n.addr-table-row {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid #f0f0f0;\n gap: 12px;\n transition: background 0.1s ease;\n}\n\n.addr-table-row:last-child {\n border-bottom: none;\n}\n\n.addr-table-row:hover {\n background: #fafafa;\n}\n\n.addr-table-row.primary {\n background: #f1f8e9;\n}\n\n/* Icon */\n.addr-table-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n background: #e3f2fd;\n color: #1565c0;\n font-size: 14px;\n flex-shrink: 0;\n}\n\n/* Content */\n.addr-table-content {\n flex: 1;\n min-width: 0;\n}\n\n.addr-table-main {\n font-size: 14px;\n color: #333;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.addr-table-sub {\n font-size: 12px;\n color: #888;\n margin-top: 2px;\n}\n\n/* Badges */\n.addr-table-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.badge-type {\n background: #e3f2fd;\n color: #1565c0;\n}\n\n.badge-primary {\n background: #e8f5e9;\n color: #2e7d32;\n}\n\n/* Actions */\n.addr-table-actions {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.addr-table-row:hover .addr-table-actions {\n opacity: 1;\n}\n\n/* Ghost buttons */\n.btn-ghost {\n background: transparent;\n color: #999;\n padding: 6px 8px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 13px;\n transition: all 0.15s ease;\n}\n\n.btn-ghost:hover {\n color: #333;\n background: #f5f5f5;\n}\n\n.btn-ghost.danger:hover {\n color: #c62828;\n background: #ffebee;\n}\n\n/* Edit panel */\n.addr-table-edit-panel {\n padding: 16px;\n background: #f8f9ff;\n border-bottom: 2px solid #1976d2;\n}\n\n/* Footer */\n.addr-table-footer {\n padding: 10px 16px;\n border-top: 1px solid #e0e0e0;\n background: #fafafa;\n}\n\n/* Buttons */\n.btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: none;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-primary {\n background: #1976d2;\n color: white;\n}\n\n.btn-primary:hover {\n background: #1565c0;\n}\n\n.btn-outline {\n background: transparent;\n border: 1px dashed #ccc;\n color: #666;\n}\n\n.btn-outline:hover {\n border-color: #1976d2;\n color: #1976d2;\n background: #f5f9ff;\n}\n\n.btn-outline.full-width {\n width: 100%;\n justify-content: center;\n}\n\n.btn-cancel {\n background: #f5f5f5;\n color: #666;\n border: 1px solid #e0e0e0;\n}\n\n.btn-cancel:hover {\n background: #eeeeee;\n}\n\n.btn-sm {\n padding: 6px 14px;\n font-size: 12px;\n}\n\n/* Form */\n.form-row {\n display: flex;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.form-field {\n flex: 1;\n}\n\n.form-field label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: #666;\n margin-bottom: 4px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.form-field input,\n.form-field select {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n font-size: 14px;\n font-family: inherit;\n background: white;\n}\n\n.form-field input:focus,\n.form-field select:focus {\n outline: none;\n border-color: #1976d2;\n box-shadow: 0 0 0 3px rgba(25, 118, 210, 0.1);\n}\n\n.form-field.type-field {\n max-width: 150px;\n}\n\n.form-field.line2-field {\n max-width: 150px;\n}\n\n.form-field.state-field {\n max-width: 80px;\n}\n\n.form-field.postal-field {\n max-width: 130px;\n}\n\n.form-field.country-field {\n max-width: 180px;\n}\n\n.checkbox-field {\n display: flex;\n align-items: center;\n gap: 8px;\n padding-top: 22px;\n}\n\n.checkbox-field input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.checkbox-field label {\n font-size: 13px;\n color: #555;\n cursor: pointer;\n}\n\n.form-actions {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n\n/* Empty state */\n.empty-state {\n text-align: center;\n padding: 32px 16px;\n color: #888;\n font-size: 14px;\n}\n\n.empty-state i {\n font-size: 24px;\n color: #ccc;\n margin-bottom: 8px;\n display: block;\n}\n\n/* Loading */\n.loading-row {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n color: #888;\n font-size: 13px;\n gap: 8px;\n}\n\n.loading-row i {\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n.lookup-spinner {\n font-size: 10px;\n color: #1976d2;\n margin-left: 4px;\n}\n\n.lookup-not-found {\n font-size: 10px;\n color: #e65100;\n margin-left: 4px;\n font-weight: 600;\n}\n"] }]
1037
+ args: [{ standalone: true, imports: [CommonModule, FormsModule], selector: 'bizapps-address-editor', template: "<!-- AddressEditor - Compact Table Design (Option B) -->\n\n<div class=\"section-header\">\n <span class=\"section-label\">\n <i class=\"fa-solid fa-map-marker-alt\"></i>\n Addresses\n @if (!Loading && AddressItems.length > 0) {\n <span class=\"count\">({{ AddressItems.length }})</span>\n }\n </span>\n</div>\n\n@if (LoadError) {\n <div class=\"addr-table\">\n <div class=\"load-error-row\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ LoadError }}\n </div>\n </div>\n} @else if (Loading) {\n <div class=\"addr-table\">\n <div class=\"loading-row\">\n <i class=\"fa-solid fa-spinner\"></i> Loading addresses...\n </div>\n </div>\n} @else {\n <div class=\"addr-table\">\n @if (AddressItems.length === 0 && EditingIndex !== -1) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-map-marker-alt\"></i>\n No addresses linked yet\n </div>\n }\n\n @for (item of AddressItems; track item.Link.ID; let i = $index) {\n <!-- Address Row -->\n <div class=\"addr-table-row\" [class.primary]=\"item.Link.IsPrimary\">\n <div class=\"addr-table-icon\">\n <i [class]=\"getAddressTypeIcon(item.Link.AddressTypeID)\"></i>\n </div>\n <div class=\"addr-table-content\">\n <div class=\"addr-table-main\">{{ formatAddressLine1(item.Address) }}</div>\n <div class=\"addr-table-sub\">{{ formatAddressLine2(item.Address) }}</div>\n </div>\n <div class=\"addr-table-badges\">\n <span class=\"badge badge-type\">{{ item.Link.AddressType }}</span>\n @if (item.Link.IsPrimary) {\n <span class=\"badge badge-primary\"><i class=\"fa-solid fa-star\"></i> Primary</span>\n }\n </div>\n @if (EditMode) {\n <div class=\"addr-table-actions\">\n @if (!item.Link.IsPrimary) {\n <button class=\"btn-ghost\" title=\"Set as Primary\" (click)=\"onSetPrimary(i)\">\n <i class=\"fa-regular fa-star\"></i>\n </button>\n }\n <button class=\"btn-ghost\" title=\"Edit\" (click)=\"onEdit(i)\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button class=\"btn-ghost danger\" title=\"Remove\" (click)=\"onDelete(i)\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n\n <!-- Inline Edit Panel (shown when editing this row) -->\n @if (EditingIndex === i) {\n <div class=\"addr-table-edit-panel\">\n <div class=\"form-row\">\n <div class=\"form-field type-field\">\n <label>Type</label>\n <select [(ngModel)]=\"EditForm.TypeID\">\n @for (t of AddressTypes; track t.ID) {\n <option [value]=\"t.ID\">{{ t.Name }}</option>\n }\n </select>\n </div>\n <div class=\"form-field\">\n <label>Line 1</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line1\" placeholder=\"Street address\">\n </div>\n <div class=\"form-field line2-field\">\n <label>Line 2</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line2\" placeholder=\"Apt, suite\">\n </div>\n </div>\n <div class=\"form-row\">\n <div class=\"form-field\">\n <label>\n City\n @if (LookingUpPostalCode) { <i class=\"fa-solid fa-spinner fa-spin lookup-spinner\"></i> }\n @if (PostalCodeNotFound) { <span class=\"lookup-not-found\">not found</span> }\n </label>\n <input type=\"text\" [(ngModel)]=\"EditForm.City\" placeholder=\"City\">\n </div>\n <div class=\"form-field state-field\">\n <label>State</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.StateProvince\" placeholder=\"ST\">\n </div>\n <div class=\"form-field postal-field\">\n <label>Postal</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.PostalCode\" placeholder=\"Zip\" (blur)=\"onPostalCodeBlur()\">\n </div>\n <div class=\"form-field country-field\">\n <label>Country</label>\n <select [(ngModel)]=\"EditForm.Country\">\n @for (c of Countries; track c.Code) {\n <option [value]=\"c.Code\">{{ c.Code }} - {{ c.Name }}</option>\n }\n </select>\n </div>\n <div class=\"checkbox-field\">\n <input type=\"checkbox\" [id]=\"'primary-edit-' + i\" [(ngModel)]=\"EditForm.IsPrimary\">\n <label [for]=\"'primary-edit-' + i\">Primary</label>\n </div>\n </div>\n <div class=\"form-actions\">\n <button class=\"btn btn-primary btn-sm\" (click)=\"onSave()\" [disabled]=\"Saving\">\n @if (Saving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n Save\n </button>\n <button class=\"btn btn-cancel btn-sm\" (click)=\"onCancelEdit()\">Cancel</button>\n </div>\n </div>\n }\n }\n\n <!-- Add New Panel (shown when EditingIndex === -1) -->\n @if (EditingIndex === -1) {\n <div class=\"addr-table-edit-panel\">\n <div class=\"form-row\">\n <div class=\"form-field type-field\">\n <label>Type</label>\n <select [(ngModel)]=\"EditForm.TypeID\">\n @for (t of AddressTypes; track t.ID) {\n <option [value]=\"t.ID\">{{ t.Name }}</option>\n }\n </select>\n </div>\n <div class=\"form-field\">\n <label>Line 1</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line1\" placeholder=\"Street address\">\n </div>\n <div class=\"form-field line2-field\">\n <label>Line 2</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.Line2\" placeholder=\"Apt, suite\">\n </div>\n </div>\n <div class=\"form-row\">\n <div class=\"form-field\">\n <label>\n City\n @if (LookingUpPostalCode) { <i class=\"fa-solid fa-spinner fa-spin lookup-spinner\"></i> }\n @if (PostalCodeNotFound) { <span class=\"lookup-not-found\">not found</span> }\n </label>\n <input type=\"text\" [(ngModel)]=\"EditForm.City\" placeholder=\"City\">\n </div>\n <div class=\"form-field state-field\">\n <label>State</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.StateProvince\" placeholder=\"ST\">\n </div>\n <div class=\"form-field postal-field\">\n <label>Postal</label>\n <input type=\"text\" [(ngModel)]=\"EditForm.PostalCode\" placeholder=\"Zip\" (blur)=\"onPostalCodeBlur()\">\n </div>\n <div class=\"form-field country-field\">\n <label>Country</label>\n <select [(ngModel)]=\"EditForm.Country\">\n @for (c of Countries; track c.Code) {\n <option [value]=\"c.Code\">{{ c.Code }} - {{ c.Name }}</option>\n }\n </select>\n </div>\n <div class=\"checkbox-field\">\n <input type=\"checkbox\" id=\"primary-add\" [(ngModel)]=\"EditForm.IsPrimary\">\n <label for=\"primary-add\">Primary</label>\n </div>\n </div>\n <div class=\"form-actions\">\n <button class=\"btn btn-primary btn-sm\" (click)=\"onSave()\" [disabled]=\"Saving\">\n @if (Saving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n Save\n </button>\n <button class=\"btn btn-cancel btn-sm\" (click)=\"onCancelEdit()\">Cancel</button>\n </div>\n </div>\n }\n\n <!-- Add Button Footer -->\n @if (EditingIndex === null && EditMode) {\n <div class=\"addr-table-footer\">\n <button class=\"btn btn-outline full-width\" (click)=\"onAdd()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Address\n </button>\n </div>\n }\n </div>\n}\n", styles: ["/* ============================================\n AddressEditor - Compact Table Design\n Pixel-perfect match to Option B mockup\n ============================================ */\n\n:host {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n color: var(--mj-text-primary);\n}\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.section-label {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-label i {\n color: var(--mj-brand-primary);\n}\n\n.count {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-weight: 400;\n}\n\n/* Table container */\n.addr-table {\n width: 100%;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n/* Table rows */\n.addr-table-row {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n gap: 12px;\n transition: background 0.1s ease;\n}\n\n.addr-table-row:last-child {\n border-bottom: none;\n}\n\n.addr-table-row:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.addr-table-row.primary {\n background: var(--mj-status-success-bg);\n}\n\n/* Icon */\n.addr-table-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n font-size: 14px;\n flex-shrink: 0;\n}\n\n/* Content */\n.addr-table-content {\n flex: 1;\n min-width: 0;\n}\n\n.addr-table-main {\n font-size: 14px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.addr-table-sub {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* Badges */\n.addr-table-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.badge-type {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.badge-primary {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n\n/* Actions */\n.addr-table-actions {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.addr-table-row:hover .addr-table-actions {\n opacity: 1;\n}\n\n/* Ghost buttons */\n.btn-ghost {\n background: transparent;\n color: var(--mj-text-disabled);\n padding: 6px 8px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 13px;\n transition: all 0.15s ease;\n}\n\n.btn-ghost:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-card);\n}\n\n.btn-ghost.danger:hover {\n color: var(--mj-status-error-text);\n background: var(--mj-status-error-bg);\n}\n\n/* Edit panel */\n.addr-table-edit-panel {\n padding: 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n/* Footer */\n.addr-table-footer {\n padding: 10px 16px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n/* Buttons */\n.btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: none;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.btn-outline {\n background: transparent;\n border: 1px dashed var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n.btn-outline:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.btn-outline.full-width {\n width: 100%;\n justify-content: center;\n}\n\n.btn-cancel {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.btn-cancel:hover {\n background: var(--mj-border-subtle);\n}\n\n.btn-sm {\n padding: 6px 14px;\n font-size: 12px;\n}\n\n/* Form */\n.form-row {\n display: flex;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.form-field {\n flex: 1;\n}\n\n.form-field label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.form-field input,\n.form-field select {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n font-family: inherit;\n background: var(--mj-bg-surface);\n}\n\n.form-field input:focus,\n.form-field select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-field.type-field {\n max-width: 150px;\n}\n\n.form-field.line2-field {\n max-width: 150px;\n}\n\n.form-field.state-field {\n max-width: 80px;\n}\n\n.form-field.postal-field {\n max-width: 130px;\n}\n\n.form-field.country-field {\n max-width: 180px;\n}\n\n.checkbox-field {\n display: flex;\n align-items: center;\n gap: 8px;\n padding-top: 22px;\n}\n\n.checkbox-field input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n\n.checkbox-field label {\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.form-actions {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n\n/* Empty state */\n.empty-state {\n text-align: center;\n padding: 32px 16px;\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.empty-state i {\n font-size: 24px;\n color: var(--mj-border-strong);\n margin-bottom: 8px;\n display: block;\n}\n\n/* Loading */\n.loading-row {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n color: var(--mj-text-muted);\n font-size: 13px;\n gap: 8px;\n}\n\n.loading-row i {\n animation: spin 1s linear infinite;\n}\n\n/* Misconfiguration (e.g. an EntityName that is not in metadata). Styled like .loading-row\n so it sits in the same slot, but in the danger colour and left-aligned for readability. */\n.load-error-row {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 24px;\n color: var(--mj-status-error-text);\n font-size: 13px;\n gap: 8px;\n}\n\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n.lookup-spinner {\n font-size: 10px;\n color: var(--mj-brand-primary);\n margin-left: 4px;\n}\n\n.lookup-not-found {\n font-size: 10px;\n color: var(--mj-status-warning-text);\n margin-left: 4px;\n font-weight: 600;\n}\n"] }]
971
1038
  }], () => [], { EditMode: [{
972
1039
  type: Input
973
1040
  }], DataChanged: [{