@salesforce/templates 66.11.0 → 66.12.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 (438) hide show
  1. package/lib/generators/projectGenerator.js +4 -1
  2. package/lib/generators/projectGenerator.js.map +1 -1
  3. package/lib/templates/project/angularextapp/.forceignore +15 -0
  4. package/lib/templates/project/angularextapp/.husky/pre-commit +4 -0
  5. package/lib/templates/project/angularextapp/.prettierignore +11 -0
  6. package/lib/templates/project/angularextapp/.prettierrc +17 -0
  7. package/lib/templates/project/angularextapp/CHANGELOG.md +4086 -0
  8. package/lib/templates/project/angularextapp/README.md +77 -0
  9. package/lib/templates/project/angularextapp/_p_/_m_/_d_/_s_/angularextapp1/angularextapp1.digitalExperience-meta.xml +11 -0
  10. package/lib/templates/project/angularextapp/_p_/_m_/_d_/_s_/angularextapp1/sfdc_cms__site/angularextapp1/_meta.json +5 -0
  11. package/lib/templates/project/angularextapp/_p_/_m_/_d_/_s_/angularextapp1/sfdc_cms__site/angularextapp1/content.json +10 -0
  12. package/lib/templates/project/angularextapp/_p_/_m_/_dc_/angularextapp1.digitalExperienceConfig-meta.xml +8 -0
  13. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/.forceignore +15 -0
  14. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/.postcssrc.json +5 -0
  15. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/.prettierignore +8 -0
  16. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/.prettierrc +12 -0
  17. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/CHANGELOG.md +4 -0
  18. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/README.md +85 -0
  19. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/angular.json +101 -0
  20. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/angularextapp.uibundle-meta.xml +8 -0
  21. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/e2e/app.spec.ts +15 -0
  22. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/esbuild/api-version.mjs +17 -0
  23. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/eslint.config.js +60 -0
  24. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/middleware/html.mjs +3 -0
  25. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/middleware/proxy.mjs +12 -0
  26. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/package-lock.json +13600 -0
  27. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/package.json +56 -0
  28. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/playwright.config.ts +25 -0
  29. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/public/favicon.ico +0 -0
  30. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/scripts/rewrite-e2e-assets.mjs +30 -0
  31. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/account/account-search.service.ts +196 -0
  32. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/account/distinctAccountIndustries.ts +26 -0
  33. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/account/distinctAccountTypes.ts +26 -0
  34. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/account/getAccountDetail.ts +128 -0
  35. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/account/searchAccounts.ts +58 -0
  36. package/lib/templates/{uiBundles/angularbasic/src/app/api/graphql-client.service.spec.ts → project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/data-client.service.spec.ts} +36 -6
  37. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/data-client.service.ts +74 -0
  38. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/user-profile.service.ts +126 -0
  39. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/app.config.ts +22 -0
  40. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/app.html +1 -0
  41. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/app.routes.ts +77 -0
  42. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/app.spec.ts +18 -0
  43. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/app.ts +15 -0
  44. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/layout/app-layout/app-layout.html +53 -0
  45. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/layout/app-layout/app-layout.spec.ts +89 -0
  46. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/layout/app-layout/app-layout.ts +81 -0
  47. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/_field-size.scss +42 -0
  48. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/alert/alert.html +31 -0
  49. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/alert/alert.ts +53 -0
  50. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/button/button.html +18 -0
  51. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/button/button.scss +112 -0
  52. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/button/button.ts +57 -0
  53. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/card/card.scss +34 -0
  54. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/card/card.ts +110 -0
  55. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/collapsible/collapsible.html +10 -0
  56. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/collapsible/collapsible.ts +26 -0
  57. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-picker/date-picker.html +25 -0
  58. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-picker/date-picker.scss +36 -0
  59. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-picker/date-picker.ts +41 -0
  60. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-range-picker/date-range-picker.html +34 -0
  61. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-range-picker/date-range-picker.scss +33 -0
  62. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-range-picker/date-range-picker.ts +66 -0
  63. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/dialog/dialog.html +37 -0
  64. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/dialog/dialog.ts +55 -0
  65. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/field/field.html +21 -0
  66. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/field/field.ts +36 -0
  67. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/field-size.ts +8 -0
  68. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/input/input.html +19 -0
  69. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/input/input.scss +35 -0
  70. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/input/input.ts +36 -0
  71. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/label/label.html +3 -0
  72. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/label/label.ts +17 -0
  73. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/paginator/paginator.html +10 -0
  74. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/paginator/paginator.ts +37 -0
  75. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/popover/popover.html +41 -0
  76. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/popover/popover.ts +40 -0
  77. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/select/select.html +24 -0
  78. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/select/select.scss +35 -0
  79. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/select/select.ts +72 -0
  80. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/separator/separator.html +1 -0
  81. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/separator/separator.scss +23 -0
  82. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/separator/separator.ts +56 -0
  83. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/skeleton/skeleton.html +1 -0
  84. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/skeleton/skeleton.scss +28 -0
  85. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/skeleton/skeleton.ts +24 -0
  86. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/spinner/spinner.ts +35 -0
  87. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/auth/auth.guard.ts +50 -0
  88. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/auth/auth.service.ts +126 -0
  89. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/auth-form/auth-form.html +34 -0
  90. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/auth-form/auth-form.ts +94 -0
  91. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/auth-layout/auth-layout.html +2 -0
  92. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/auth-layout/auth-layout.ts +30 -0
  93. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/card-layout/card-layout.html +16 -0
  94. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/card-layout/card-layout.ts +40 -0
  95. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/config/authentication.config.ts +75 -0
  96. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/footer-link/footer-link.html +9 -0
  97. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/footer-link/footer-link.ts +26 -0
  98. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/menu/auth-menu/auth-menu.html +26 -0
  99. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/menu/auth-menu/auth-menu.ts +46 -0
  100. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/reactive-form-page.base.ts +50 -0
  101. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/session/session.html +55 -0
  102. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/session/session.ts +205 -0
  103. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/status-alert/status-alert.html +5 -0
  104. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/status-alert/status-alert.ts +52 -0
  105. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/submit-button/submit-button.html +5 -0
  106. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/submit-button/submit-button.scss +17 -0
  107. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/submit-button/submit-button.ts +35 -0
  108. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/utils/auth-helpers.ts +68 -0
  109. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/utils/auth-validators.ts +72 -0
  110. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/utils/helpers.ts +85 -0
  111. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/utils/session-time-servlet.ts +130 -0
  112. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/utils/session-timeout.config.ts +83 -0
  113. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/utils/session-timeout.service.ts +201 -0
  114. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/breadcrumb/breadcrumb.html +54 -0
  115. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/breadcrumb/breadcrumb.ts +40 -0
  116. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/active-filters.html +23 -0
  117. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/active-filters.ts +78 -0
  118. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-filter.html +18 -0
  119. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-filter.ts +137 -0
  120. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-range-filter.html +11 -0
  121. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-range-filter.ts +69 -0
  122. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/filter-field-wrapper.html +11 -0
  123. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/filter-field-wrapper.ts +36 -0
  124. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/multi-select-filter.html +10 -0
  125. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/multi-select-filter.ts +58 -0
  126. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/numeric-range-filter.html +22 -0
  127. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/numeric-range-filter.ts +146 -0
  128. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/search-filter.html +8 -0
  129. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/search-filter.ts +82 -0
  130. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/select-filter.html +12 -0
  131. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/select-filter.ts +65 -0
  132. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/text-filter.html +12 -0
  133. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/text-filter.ts +90 -0
  134. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/object-search-state.service.ts +232 -0
  135. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/pagination/pagination.html +8 -0
  136. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/pagination/pagination.ts +61 -0
  137. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/search-bar/search-bar.html +59 -0
  138. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/search-bar/search-bar.ts +108 -0
  139. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/sort-control/sort-control.html +50 -0
  140. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/sort-control/sort-control.ts +72 -0
  141. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/debounce.ts +31 -0
  142. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/field-utils.ts +54 -0
  143. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/filter-utils.ts +354 -0
  144. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/index.ts +12 -0
  145. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/sort-utils.ts +46 -0
  146. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/account-detail/account-detail-page.html +164 -0
  147. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/account-detail/account-detail-page.scss +7 -0
  148. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/account-detail/account-detail-page.ts +196 -0
  149. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/account-search/account-search-page.html +111 -0
  150. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/account-search/account-search-page.ts +217 -0
  151. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/change-password/change-password-page.html +68 -0
  152. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/change-password/change-password-page.ts +82 -0
  153. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/forgot-password/forgot-password-page.html +35 -0
  154. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/forgot-password/forgot-password-page.ts +87 -0
  155. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/home/home-page.html +18 -0
  156. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/home/home-page.ts +47 -0
  157. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/home/home.html +6 -0
  158. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/home/home.spec.ts +23 -0
  159. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/home/home.ts +13 -0
  160. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/login/login-page.html +47 -0
  161. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/login/login-page.ts +89 -0
  162. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/not-found/not-found.html +12 -0
  163. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/not-found/not-found.spec.ts +33 -0
  164. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/not-found/not-found.ts +15 -0
  165. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/profile/profile-page.html +116 -0
  166. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/profile/profile-page.ts +194 -0
  167. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/register/register-page.html +80 -0
  168. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/register/register-page.ts +93 -0
  169. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/reset-password/reset-password-page.html +60 -0
  170. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/reset-password/reset-password-page.ts +96 -0
  171. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/utils/async-data.ts +99 -0
  172. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/index.html +14 -0
  173. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/main.ts +5 -0
  174. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/styles.scss +170 -0
  175. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/theme.scss +39 -0
  176. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/types/sf-globals.d.ts +9 -0
  177. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/tsconfig.app.json +11 -0
  178. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/tsconfig.json +33 -0
  179. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/tsconfig.spec.json +10 -0
  180. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/ui-bundle.json +7 -0
  181. package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleAuthUtils.cls +68 -0
  182. package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleAuthUtils.cls-meta.xml +5 -0
  183. package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleChangePassword.cls +77 -0
  184. package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleChangePassword.cls-meta.xml +5 -0
  185. package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleForgotPassword.cls +71 -0
  186. package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleForgotPassword.cls-meta.xml +5 -0
  187. package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleLogin.cls +105 -0
  188. package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleLogin.cls-meta.xml +5 -0
  189. package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleRegistration.cls +162 -0
  190. package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleRegistration.cls-meta.xml +5 -0
  191. package/lib/templates/project/angularextapp/_p_/_m_/networks/angularextapp.network-meta.xml +60 -0
  192. package/lib/templates/project/angularextapp/_p_/_m_/package.xml +24 -0
  193. package/lib/templates/project/angularextapp/_p_/_m_/permissionsets/angularextapp_Guest_User_Api_Access.permissionset-meta.xml +9 -0
  194. package/lib/templates/project/angularextapp/_p_/_m_/sites/angularextapp.site-meta.xml +31 -0
  195. package/lib/templates/project/angularextapp/config/project-scratch-def.json +13 -0
  196. package/lib/templates/project/angularextapp/eslint.config.js +7 -0
  197. package/lib/templates/project/angularextapp/jest.config.js +6 -0
  198. package/lib/templates/project/angularextapp/package.json +46 -0
  199. package/lib/templates/project/angularextapp/scripts/apex/hello.apex +10 -0
  200. package/lib/templates/project/angularextapp/scripts/gitignore-templates.json +4 -0
  201. package/lib/templates/project/angularextapp/scripts/graphql-search.sh +191 -0
  202. package/lib/templates/project/angularextapp/scripts/org-setup-config-schema.mjs +103 -0
  203. package/lib/templates/project/angularextapp/scripts/org-setup-dev.mjs +87 -0
  204. package/lib/templates/project/angularextapp/scripts/org-setup-utils.mjs +369 -0
  205. package/lib/templates/project/angularextapp/scripts/org-setup-xml.mjs +182 -0
  206. package/lib/templates/project/angularextapp/scripts/org-setup.config.json +9 -0
  207. package/lib/templates/project/angularextapp/scripts/org-setup.mjs +1702 -0
  208. package/lib/templates/project/angularextapp/scripts/sf-project-setup.mjs +103 -0
  209. package/lib/templates/project/angularextapp/scripts/soql/account.soql +6 -0
  210. package/lib/templates/project/angularextapp/scripts/validate-org-setup-config.mjs +38 -0
  211. package/lib/templates/project/angularextapp/sfdx-project.json +12 -0
  212. package/lib/templates/project/angularintapp/.forceignore +15 -0
  213. package/lib/templates/project/angularintapp/.husky/pre-commit +4 -0
  214. package/lib/templates/project/angularintapp/.prettierignore +11 -0
  215. package/lib/templates/project/angularintapp/.prettierrc +17 -0
  216. package/lib/templates/project/angularintapp/CHANGELOG.md +4086 -0
  217. package/lib/templates/project/angularintapp/README.md +77 -0
  218. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/.forceignore +15 -0
  219. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/.postcssrc.json +5 -0
  220. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/.prettierignore +8 -0
  221. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/.prettierrc +12 -0
  222. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/CHANGELOG.md +4 -0
  223. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/README.md +85 -0
  224. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/angular.json +101 -0
  225. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/angularintapp.uibundle-meta.xml +8 -0
  226. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/e2e/app.spec.ts +15 -0
  227. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/esbuild/api-version.mjs +17 -0
  228. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/eslint.config.js +60 -0
  229. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/middleware/html.mjs +3 -0
  230. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/middleware/proxy.mjs +12 -0
  231. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/package-lock.json +13619 -0
  232. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/package.json +57 -0
  233. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/playwright.config.ts +25 -0
  234. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/public/favicon.ico +0 -0
  235. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/scripts/rewrite-e2e-assets.mjs +30 -0
  236. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/account/account-search.service.ts +196 -0
  237. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/account/distinctAccountIndustries.ts +26 -0
  238. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/account/distinctAccountTypes.ts +26 -0
  239. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/account/getAccountDetail.ts +128 -0
  240. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/account/searchAccounts.ts +58 -0
  241. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/data-client.service.spec.ts +184 -0
  242. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/data-client.service.ts +74 -0
  243. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/app.config.ts +22 -0
  244. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/app.html +1 -0
  245. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/app.routes.ts +31 -0
  246. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/app.spec.ts +18 -0
  247. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/app.ts +15 -0
  248. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/layout/app-layout/app-layout.html +52 -0
  249. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/layout/app-layout/app-layout.spec.ts +90 -0
  250. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/layout/app-layout/app-layout.ts +67 -0
  251. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/_field-size.scss +42 -0
  252. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/alert/alert.html +31 -0
  253. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/alert/alert.ts +53 -0
  254. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/button/button.html +18 -0
  255. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/button/button.scss +112 -0
  256. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/button/button.ts +57 -0
  257. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/card/card.scss +34 -0
  258. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/card/card.ts +110 -0
  259. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/collapsible/collapsible.html +10 -0
  260. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/collapsible/collapsible.ts +26 -0
  261. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-picker/date-picker.html +25 -0
  262. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-picker/date-picker.scss +36 -0
  263. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-picker/date-picker.ts +41 -0
  264. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-range-picker/date-range-picker.html +34 -0
  265. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-range-picker/date-range-picker.scss +33 -0
  266. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-range-picker/date-range-picker.ts +66 -0
  267. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/dialog/dialog.html +37 -0
  268. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/dialog/dialog.ts +55 -0
  269. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/field/field.html +21 -0
  270. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/field/field.ts +36 -0
  271. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/field-size.ts +8 -0
  272. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/input/input.html +19 -0
  273. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/input/input.scss +35 -0
  274. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/input/input.ts +36 -0
  275. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/label/label.html +3 -0
  276. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/label/label.ts +17 -0
  277. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/paginator/paginator.html +10 -0
  278. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/paginator/paginator.ts +37 -0
  279. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/popover/popover.html +41 -0
  280. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/popover/popover.ts +40 -0
  281. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/select/select.html +24 -0
  282. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/select/select.scss +35 -0
  283. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/select/select.ts +72 -0
  284. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/separator/separator.html +1 -0
  285. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/separator/separator.scss +23 -0
  286. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/separator/separator.ts +56 -0
  287. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/skeleton/skeleton.html +1 -0
  288. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/skeleton/skeleton.scss +28 -0
  289. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/skeleton/skeleton.ts +24 -0
  290. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/spinner/spinner.ts +35 -0
  291. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/agentforce/agentforce-embed.service.ts +177 -0
  292. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/agentforce/conversation.html +3 -0
  293. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/agentforce/conversation.ts +119 -0
  294. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/breadcrumb/breadcrumb.html +54 -0
  295. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/breadcrumb/breadcrumb.ts +40 -0
  296. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/active-filters.html +23 -0
  297. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/active-filters.ts +78 -0
  298. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-filter.html +18 -0
  299. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-filter.ts +137 -0
  300. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-range-filter.html +11 -0
  301. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-range-filter.ts +69 -0
  302. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/filter-field-wrapper.html +11 -0
  303. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/filter-field-wrapper.ts +36 -0
  304. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/multi-select-filter.html +10 -0
  305. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/multi-select-filter.ts +58 -0
  306. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/numeric-range-filter.html +22 -0
  307. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/numeric-range-filter.ts +146 -0
  308. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/search-filter.html +8 -0
  309. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/search-filter.ts +82 -0
  310. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/select-filter.html +12 -0
  311. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/select-filter.ts +65 -0
  312. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/text-filter.html +12 -0
  313. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/text-filter.ts +90 -0
  314. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/object-search-state.service.ts +232 -0
  315. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/pagination/pagination.html +8 -0
  316. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/pagination/pagination.ts +61 -0
  317. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/search-bar/search-bar.html +59 -0
  318. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/search-bar/search-bar.ts +108 -0
  319. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/sort-control/sort-control.html +50 -0
  320. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/sort-control/sort-control.ts +72 -0
  321. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/debounce.ts +31 -0
  322. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/field-utils.ts +54 -0
  323. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/filter-utils.ts +354 -0
  324. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/index.ts +12 -0
  325. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/sort-utils.ts +46 -0
  326. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/account-detail/account-detail-page.html +164 -0
  327. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/account-detail/account-detail-page.scss +7 -0
  328. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/account-detail/account-detail-page.ts +196 -0
  329. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/account-search/account-search-page.html +111 -0
  330. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/account-search/account-search-page.ts +217 -0
  331. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/home/home-page.html +18 -0
  332. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/home/home-page.ts +47 -0
  333. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/home/home.html +6 -0
  334. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/home/home.spec.ts +23 -0
  335. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/home/home.ts +13 -0
  336. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/not-found/not-found.html +12 -0
  337. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/not-found/not-found.spec.ts +33 -0
  338. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/not-found/not-found.ts +15 -0
  339. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/types/conversation.ts +55 -0
  340. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/types/globals.d.ts +13 -0
  341. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/utils/async-data.ts +99 -0
  342. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/index.html +14 -0
  343. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/index.ts +15 -0
  344. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/main.ts +5 -0
  345. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/styles.scss +170 -0
  346. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/theme.scss +39 -0
  347. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/types/sf-globals.d.ts +9 -0
  348. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/tsconfig.app.json +11 -0
  349. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/tsconfig.json +33 -0
  350. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/tsconfig.spec.json +10 -0
  351. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/ui-bundle.json +7 -0
  352. package/lib/templates/project/angularintapp/_p_/_m_/applications/angularintapp.app-meta.xml +17 -0
  353. package/lib/templates/project/angularintapp/_p_/_m_/permissionsets/angularintapp_Access.permissionset-meta.xml +13 -0
  354. package/lib/templates/project/angularintapp/config/project-scratch-def.json +13 -0
  355. package/lib/templates/project/angularintapp/eslint.config.js +7 -0
  356. package/lib/templates/project/angularintapp/jest.config.js +6 -0
  357. package/lib/templates/project/angularintapp/package.json +46 -0
  358. package/lib/templates/project/angularintapp/scripts/apex/hello.apex +10 -0
  359. package/lib/templates/project/angularintapp/scripts/gitignore-templates.json +4 -0
  360. package/lib/templates/project/angularintapp/scripts/graphql-search.sh +191 -0
  361. package/lib/templates/project/angularintapp/scripts/org-setup-config-schema.mjs +103 -0
  362. package/lib/templates/project/angularintapp/scripts/org-setup-dev.mjs +87 -0
  363. package/lib/templates/project/angularintapp/scripts/org-setup-utils.mjs +369 -0
  364. package/lib/templates/project/angularintapp/scripts/org-setup-xml.mjs +182 -0
  365. package/lib/templates/project/angularintapp/scripts/org-setup.config.json +9 -0
  366. package/lib/templates/project/angularintapp/scripts/org-setup.mjs +1702 -0
  367. package/lib/templates/project/angularintapp/scripts/sf-project-setup.mjs +103 -0
  368. package/lib/templates/project/angularintapp/scripts/soql/account.soql +6 -0
  369. package/lib/templates/project/angularintapp/scripts/validate-org-setup-config.mjs +38 -0
  370. package/lib/templates/project/angularintapp/sfdx-project.json +12 -0
  371. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package-lock.json +864 -807
  372. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package-lock.json +857 -800
  373. package/lib/templates/uiBundles/angularbasic/angular.json +11 -7
  374. package/lib/templates/uiBundles/angularbasic/eslint.config.js +4 -0
  375. package/lib/templates/uiBundles/angularbasic/package-lock.json +351 -319
  376. package/lib/templates/uiBundles/angularbasic/package.json +4 -0
  377. package/lib/templates/uiBundles/angularbasic/src/app/api/data-client.service.spec.ts +184 -0
  378. package/lib/templates/uiBundles/angularbasic/src/app/api/data-client.service.ts +74 -0
  379. package/lib/templates/uiBundles/angularbasic/src/app/app.config.ts +15 -1
  380. package/lib/templates/uiBundles/angularbasic/src/app/app.routes.ts +6 -1
  381. package/lib/templates/uiBundles/angularbasic/src/app/app.ts +7 -2
  382. package/lib/templates/uiBundles/angularbasic/src/app/{layout → components/layout/app-layout}/app-layout.component.html +2 -1
  383. package/lib/templates/uiBundles/angularbasic/src/app/{layout → components/layout/app-layout}/app-layout.component.ts +9 -3
  384. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/_field-size.scss +42 -0
  385. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/alert/alert.component.html +31 -0
  386. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/alert/alert.component.ts +53 -0
  387. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/button/button.component.html +18 -0
  388. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/button/button.component.scss +112 -0
  389. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/button/button.component.ts +57 -0
  390. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/card/card.component.scss +34 -0
  391. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/card/card.component.ts +110 -0
  392. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/collapsible/collapsible.component.html +10 -0
  393. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/collapsible/collapsible.component.ts +26 -0
  394. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/date-picker/date-picker.component.html +25 -0
  395. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/date-picker/date-picker.component.scss +36 -0
  396. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/date-picker/date-picker.component.ts +41 -0
  397. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/date-range-picker/date-range-picker.component.html +34 -0
  398. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/date-range-picker/date-range-picker.component.scss +33 -0
  399. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/date-range-picker/date-range-picker.component.ts +66 -0
  400. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/dialog/dialog.component.html +37 -0
  401. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/dialog/dialog.component.ts +55 -0
  402. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/field/field.component.html +21 -0
  403. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/field/field.component.ts +36 -0
  404. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/field-size.ts +8 -0
  405. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/input/input.component.html +19 -0
  406. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/input/input.component.scss +35 -0
  407. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/input/input.component.ts +36 -0
  408. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/label/label.component.html +3 -0
  409. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/label/label.component.ts +17 -0
  410. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/paginator/paginator.component.html +10 -0
  411. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/paginator/paginator.component.ts +37 -0
  412. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/popover/popover.component.html +41 -0
  413. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/popover/popover.component.ts +40 -0
  414. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/select/select.component.html +24 -0
  415. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/select/select.component.scss +35 -0
  416. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/select/select.component.ts +72 -0
  417. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/separator/separator.component.html +1 -0
  418. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/separator/separator.component.scss +23 -0
  419. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/separator/separator.component.ts +56 -0
  420. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/skeleton/skeleton.component.html +1 -0
  421. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/skeleton/skeleton.component.scss +28 -0
  422. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/skeleton/skeleton.component.ts +24 -0
  423. package/lib/templates/uiBundles/angularbasic/src/app/components/ui/spinner/spinner.component.ts +35 -0
  424. package/lib/templates/uiBundles/angularbasic/src/app/pages/home/home.component.ts +7 -1
  425. package/lib/templates/uiBundles/angularbasic/src/app/pages/not-found/not-found.component.ts +7 -1
  426. package/lib/templates/uiBundles/angularbasic/src/app/utils/async-data.ts +99 -0
  427. package/lib/templates/uiBundles/angularbasic/src/index.html +1 -0
  428. package/lib/templates/uiBundles/angularbasic/src/styles.scss +170 -0
  429. package/lib/templates/uiBundles/angularbasic/src/theme.scss +39 -0
  430. package/lib/templates/uiBundles/reactbasic/package-lock.json +857 -800
  431. package/lib/utils/types.d.ts +1 -1
  432. package/lib/utils/uiBundleTemplateUtils.js +10 -0
  433. package/lib/utils/uiBundleTemplateUtils.js.map +1 -1
  434. package/package.json +5 -3
  435. package/lib/templates/uiBundles/angularbasic/src/app/api/graphql-client.service.ts +0 -48
  436. package/lib/templates/uiBundles/angularbasic/src/app/app.css +0 -0
  437. package/lib/templates/uiBundles/angularbasic/src/styles.css +0 -12
  438. /package/lib/templates/uiBundles/angularbasic/src/app/{layout → components/layout/app-layout}/app-layout.component.spec.ts +0 -0
@@ -0,0 +1,60 @@
1
+ <main class="flex min-h-svh w-full justify-center p-6 md:p-10 items-start">
2
+ <div class="w-full max-w-md">
3
+ @if (!token) {
4
+ <app-card-layout title="Reset Password">
5
+ <app-status-alert variant="error">
6
+ Reset token is invalid or expired.
7
+ <a [routerLink]="routes.FORGOT_PASSWORD.PATH" class="underline underline-offset-4">
8
+ Request a new password reset link.
9
+ </a>
10
+ </app-status-alert>
11
+ </app-card-layout>
12
+ } @else {
13
+ <app-auth-form
14
+ title="Reset Password"
15
+ description="Enter your new password below"
16
+ [error]="submitError()"
17
+ [success]="success() ? 'Password reset successfully! Use the link below to sign in.' : null"
18
+ submitText="Reset Password"
19
+ submitLoadingText="Resetting…"
20
+ [submitting]="submitting()"
21
+ [submitDisabled]="success()"
22
+ [footer]="{ text: 'Remember your password?', link: routes.LOGIN.PATH, linkText: 'Sign in' }"
23
+ (submitted)="onSubmit()"
24
+ >
25
+ <div class="mt-4 flex flex-col gap-4">
26
+ <app-field
27
+ label="New Password"
28
+ htmlFor="reset-new-password"
29
+ [error]="controlError('newPassword', 'password')"
30
+ >
31
+ <app-input
32
+ type="password"
33
+ [value]="form.controls.newPassword.value ?? ''"
34
+ (valueChange)="setControl('newPassword', $event)"
35
+ [placeholder]="placeholders.PASSWORD_NEW"
36
+ [disabled]="success()"
37
+ />
38
+ </app-field>
39
+
40
+ <app-field
41
+ label="Confirm Password"
42
+ htmlFor="reset-confirm-password"
43
+ [error]="
44
+ controlError('confirmPassword', 'passwordMismatch') ??
45
+ controlError('confirmPassword', 'required')
46
+ "
47
+ >
48
+ <app-input
49
+ type="password"
50
+ [value]="form.controls.confirmPassword.value ?? ''"
51
+ (valueChange)="setControl('confirmPassword', $event)"
52
+ [placeholder]="placeholders.PASSWORD_NEW_CONFIRM"
53
+ [disabled]="success()"
54
+ />
55
+ </app-field>
56
+ </div>
57
+ </app-auth-form>
58
+ }
59
+ </div>
60
+ </main>
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+ import { ChangeDetectionStrategy, Component, inject, signal } from "@angular/core";
7
+ import { FormBuilder } from "@angular/forms";
8
+ import { ActivatedRoute, RouterLink } from "@angular/router";
9
+ import { DataClient } from "../../api/data-client.service";
10
+ import { AuthFormComponent } from "../../features/authentication/auth-form/auth-form";
11
+ import { ReactiveFormPageBase } from "../../features/authentication/reactive-form-page.base";
12
+ import { CardLayoutComponent } from "../../features/authentication/card-layout/card-layout";
13
+ import { StatusAlertComponent } from "../../features/authentication/status-alert/status-alert";
14
+ import { FieldComponent } from "../../components/ui/field/field";
15
+ import { InputComponent } from "../../components/ui/input/input";
16
+ import {
17
+ API_ROUTES,
18
+ AUTH_PLACEHOLDERS,
19
+ ROUTES,
20
+ } from "../../features/authentication/config/authentication.config";
21
+ import { ApiError, handleApiResponse } from "../../features/authentication/utils/helpers";
22
+ import {
23
+ passwordMinValidator,
24
+ passwordsMatchValidator,
25
+ requiredWithMessage,
26
+ } from "../../features/authentication/utils/auth-validators";
27
+
28
+ /**
29
+ * Reset-password page — Angular port of the React `ResetPassword`.
30
+ *
31
+ * The reset `token` comes from the `?token=` query param; when absent the page
32
+ * shows the "invalid or expired" card (identical to React) instead of the form.
33
+ * The POST sends `{ token, newPassword }`; on success it shows a success alert
34
+ * with a Sign-in link and scrolls to top.
35
+ */
36
+ @Component({
37
+ selector: "app-reset-password-page",
38
+ changeDetection: ChangeDetectionStrategy.OnPush,
39
+ imports: [
40
+ RouterLink,
41
+ AuthFormComponent,
42
+ CardLayoutComponent,
43
+ StatusAlertComponent,
44
+ FieldComponent,
45
+ InputComponent,
46
+ ],
47
+ templateUrl: "./reset-password-page.html",
48
+ })
49
+ export class ResetPasswordPageComponent extends ReactiveFormPageBase {
50
+ private readonly fb = inject(FormBuilder);
51
+ private readonly route = inject(ActivatedRoute);
52
+ private readonly dataClient = inject(DataClient);
53
+
54
+ protected readonly placeholders = AUTH_PLACEHOLDERS;
55
+ protected readonly routes = ROUTES;
56
+ protected readonly token = this.route.snapshot.queryParamMap.get("token");
57
+
58
+ protected override readonly form = this.fb.group(
59
+ {
60
+ newPassword: ["", [passwordMinValidator]],
61
+ confirmPassword: ["", [requiredWithMessage("Please confirm your password")]],
62
+ },
63
+ { validators: [passwordsMatchValidator("newPassword", "confirmPassword")] },
64
+ );
65
+
66
+ protected readonly submitError = signal<string | string[] | null>(null);
67
+ protected readonly submitting = signal<boolean>(false);
68
+ protected readonly success = signal<boolean>(false);
69
+
70
+ protected async onSubmit(): Promise<void> {
71
+ this.form.markAllAsTouched();
72
+ if (this.form.invalid) {
73
+ return;
74
+ }
75
+ this.submitError.set(null);
76
+ this.success.set(false);
77
+ this.submitting.set(true);
78
+ try {
79
+ const newPassword = this.form.controls.newPassword.value ?? "";
80
+ const response = await this.dataClient.fetch(API_ROUTES.RESET_PASSWORD, {
81
+ method: "POST",
82
+ body: JSON.stringify({ token: this.token, newPassword }),
83
+ headers: { "Content-Type": "application/json", Accept: "application/json" },
84
+ });
85
+ await handleApiResponse(response);
86
+ this.success.set(true);
87
+ // Scroll to top of page after successful submission so user sees it.
88
+ window.scrollTo({ top: 0, behavior: "smooth" });
89
+ } catch (err) {
90
+ console.error("Password reset failed", err);
91
+ this.submitError.set(err instanceof ApiError ? err.errors : "Password reset failed");
92
+ } finally {
93
+ this.submitting.set(false);
94
+ }
95
+ }
96
+ }
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+ import { effect, Injector, signal, type Signal } from '@angular/core';
7
+ import { toObservable, toSignal } from '@angular/core/rxjs-interop';
8
+ import { from, of, switchMap } from 'rxjs';
9
+ import { catchError, map, tap } from 'rxjs/operators';
10
+
11
+ /** Reactive async-data snapshot: current data, loading, and error. */
12
+ export interface AsyncData<T> {
13
+ /** Latest successful result. Kept visible during a refetch. */
14
+ readonly data: Signal<T | null>;
15
+ /** True while a fetch for the current args is in flight. */
16
+ readonly loading: Signal<boolean>;
17
+ /** Error message from the most recent failed fetch, else null. */
18
+ readonly error: Signal<string | null>;
19
+ }
20
+
21
+ /**
22
+ * The Angular analogue of the React `useAsyncData` hook.
23
+ *
24
+ * Re-runs `fetcher(args)` whenever the `args` signal changes, using RxJS
25
+ * `switchMap` so an in-flight request is cancelled (ignored) when newer args
26
+ * arrive — the latest-wins guarantee, matching the React hook's cleanup flag.
27
+ *
28
+ * Behavioural parity notes:
29
+ * - `loading` flips true the instant args change and false when the matching
30
+ * response resolves.
31
+ * - `data` retains the previous result while a refetch is in flight (avoids a
32
+ * flash of empty state); it only resets to `null` on error.
33
+ * - Errors are surfaced as a message string and logged, mirroring the hook.
34
+ *
35
+ * Must be called within an injection context (component/service constructor or
36
+ * field initializer) unless an `injector` is supplied.
37
+ *
38
+ * @param argsSignal - Reactive inputs; a change triggers a refetch.
39
+ * @param fetcher - Async function producing the result for the given args.
40
+ * @param injector - Optional injector when called outside an injection context.
41
+ */
42
+ export function createAsyncData<TArgs, T>(
43
+ argsSignal: Signal<TArgs>,
44
+ fetcher: (args: TArgs) => Promise<T>,
45
+ injector?: Injector,
46
+ ): AsyncData<T> {
47
+ const data = signal<T | null>(null);
48
+ const error = signal<string | null>(null);
49
+ // A fetch is pending from the moment args change until its response lands.
50
+ const pending = signal(true);
51
+
52
+ const args$ = toObservable(argsSignal, injector ? { injector } : undefined);
53
+
54
+ const result = toSignal(
55
+ args$.pipe(
56
+ // Mark loading + clear stale error synchronously as new args arrive.
57
+ tap(() => {
58
+ pending.set(true);
59
+ error.set(null);
60
+ }),
61
+ switchMap((args) =>
62
+ from(fetcher(args)).pipe(
63
+ map((value) => ({ value, err: null as string | null })),
64
+ catchError((err: unknown) => {
65
+ console.error(err);
66
+ return of({
67
+ value: null as T | null,
68
+ err: err instanceof Error ? err.message : 'An error occurred',
69
+ });
70
+ }),
71
+ ),
72
+ ),
73
+ tap((outcome) => {
74
+ if (outcome.err !== null) {
75
+ error.set(outcome.err);
76
+ data.set(null);
77
+ } else {
78
+ data.set(outcome.value);
79
+ }
80
+ pending.set(false);
81
+ }),
82
+ ),
83
+ { initialValue: null, ...(injector ? { injector } : {}) },
84
+ );
85
+
86
+ // Keep `result` subscribed so the pipeline runs even if no template reads it.
87
+ effect(
88
+ () => {
89
+ result();
90
+ },
91
+ injector ? { injector } : undefined,
92
+ );
93
+
94
+ return {
95
+ data: data.asReadonly(),
96
+ loading: pending.asReadonly(),
97
+ error: error.asReadonly(),
98
+ };
99
+ }
@@ -0,0 +1,14 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>MyAngularApp</title>
6
+ <base href="/" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
8
+ <link rel="icon" type="image/x-icon" href="favicon.ico" />
9
+ <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />
10
+ </head>
11
+ <body>
12
+ <app-root></app-root>
13
+ </body>
14
+ </html>
@@ -0,0 +1,5 @@
1
+ import { bootstrapApplication } from '@angular/platform-browser';
2
+ import { appConfig } from './app/app.config';
3
+ import { App } from './app/app';
4
+
5
+ bootstrapApplication(App, appConfig).catch((err) => console.error(err));
@@ -0,0 +1,170 @@
1
+ @import 'tailwindcss';
2
+
3
+ @layer base {
4
+ html,
5
+ body {
6
+ @apply min-h-screen;
7
+ }
8
+
9
+ body {
10
+ @apply antialiased bg-white;
11
+ }
12
+ }
13
+
14
+ @custom-variant dark (&:is(.dark *));
15
+
16
+ /*
17
+ * shadcn design tokens, ported from the React base app's global.css so the
18
+ * shared object-search feature (bg-card, text-muted-foreground, border-border,
19
+ * rounded-* via --radius, etc.) renders identically in Angular. The React base
20
+ * also imports tw-animate-css and shadcn/tailwind.css (accordion keyframes +
21
+ * data-* variants) — omitted here as they are not installed for the Angular
22
+ * base and are not required for layout/color parity.
23
+ */
24
+ @theme inline {
25
+ --color-background: var(--background);
26
+ --color-foreground: var(--foreground);
27
+ --color-card: var(--card);
28
+ --color-card-foreground: var(--card-foreground);
29
+ --color-popover: var(--popover);
30
+ --color-popover-foreground: var(--popover-foreground);
31
+ --color-primary: var(--primary);
32
+ --color-primary-foreground: var(--primary-foreground);
33
+ --color-secondary: var(--secondary);
34
+ --color-secondary-foreground: var(--secondary-foreground);
35
+ --color-muted: var(--muted);
36
+ --color-muted-foreground: var(--muted-foreground);
37
+ --color-accent: var(--accent);
38
+ --color-accent-foreground: var(--accent-foreground);
39
+ --color-destructive: var(--destructive);
40
+ --color-destructive-foreground: var(--destructive-foreground);
41
+ --color-border: var(--border);
42
+ --color-input: var(--input);
43
+ --color-ring: var(--ring);
44
+ --color-chart-1: var(--chart-1);
45
+ --color-chart-2: var(--chart-2);
46
+ --color-chart-3: var(--chart-3);
47
+ --color-chart-4: var(--chart-4);
48
+ --color-chart-5: var(--chart-5);
49
+ --radius-sm: calc(var(--radius) - 4px);
50
+ --radius-md: calc(var(--radius) - 2px);
51
+ --radius-lg: var(--radius);
52
+ --radius-xl: calc(var(--radius) + 4px);
53
+ --color-sidebar: var(--sidebar);
54
+ --color-sidebar-foreground: var(--sidebar-foreground);
55
+ --color-sidebar-primary: var(--sidebar-primary);
56
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
57
+ --color-sidebar-accent: var(--sidebar-accent);
58
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
59
+ --color-sidebar-border: var(--sidebar-border);
60
+ --color-sidebar-ring: var(--sidebar-ring);
61
+ }
62
+
63
+ :root {
64
+ --radius: 0.625rem;
65
+ --background: oklch(1 0 0);
66
+ --foreground: oklch(0.145 0 0);
67
+ --card: oklch(1 0 0);
68
+ --card-foreground: oklch(0.145 0 0);
69
+ --popover: oklch(1 0 0);
70
+ --popover-foreground: oklch(0.145 0 0);
71
+ --primary: oklch(0.205 0 0);
72
+ --primary-foreground: oklch(0.985 0 0);
73
+ --secondary: oklch(0.97 0 0);
74
+ --secondary-foreground: oklch(0.205 0 0);
75
+ --muted: oklch(0.97 0 0);
76
+ --muted-foreground: oklch(0.556 0 0);
77
+ --accent: oklch(0.97 0 0);
78
+ --accent-foreground: oklch(0.205 0 0);
79
+ --destructive: oklch(0.577 0.245 27.325);
80
+ --border: oklch(0.922 0 0);
81
+ --input: oklch(0.922 0 0);
82
+ --ring: oklch(0.708 0 0);
83
+ --chart-1: oklch(0.646 0.222 41.116);
84
+ --chart-2: oklch(0.6 0.118 184.704);
85
+ --chart-3: oklch(0.398 0.07 227.392);
86
+ --chart-4: oklch(0.828 0.189 84.429);
87
+ --chart-5: oklch(0.769 0.188 70.08);
88
+ --sidebar: oklch(0.985 0 0);
89
+ --sidebar-foreground: oklch(0.145 0 0);
90
+ --sidebar-primary: oklch(0.205 0 0);
91
+ --sidebar-primary-foreground: oklch(0.985 0 0);
92
+ --sidebar-accent: oklch(0.97 0 0);
93
+ --sidebar-accent-foreground: oklch(0.205 0 0);
94
+ --sidebar-border: oklch(0.922 0 0);
95
+ --sidebar-ring: oklch(0.708 0 0);
96
+ }
97
+
98
+ .dark {
99
+ --background: oklch(0.145 0 0);
100
+ --foreground: oklch(0.985 0 0);
101
+ --card: oklch(0.205 0 0);
102
+ --card-foreground: oklch(0.985 0 0);
103
+ --popover: oklch(0.205 0 0);
104
+ --popover-foreground: oklch(0.985 0 0);
105
+ --primary: oklch(0.922 0 0);
106
+ --primary-foreground: oklch(0.205 0 0);
107
+ --secondary: oklch(0.269 0 0);
108
+ --secondary-foreground: oklch(0.985 0 0);
109
+ --muted: oklch(0.269 0 0);
110
+ --muted-foreground: oklch(0.708 0 0);
111
+ --accent: oklch(0.269 0 0);
112
+ --accent-foreground: oklch(0.985 0 0);
113
+ --destructive: oklch(0.704 0.191 22.216);
114
+ --border: oklch(1 0 0 / 10%);
115
+ --input: oklch(1 0 0 / 15%);
116
+ --ring: oklch(0.556 0 0);
117
+ --chart-1: oklch(0.488 0.243 264.376);
118
+ --chart-2: oklch(0.696 0.17 162.48);
119
+ --chart-3: oklch(0.769 0.188 70.08);
120
+ --chart-4: oklch(0.627 0.265 303.9);
121
+ --chart-5: oklch(0.645 0.246 16.439);
122
+ --sidebar: oklch(0.205 0 0);
123
+ --sidebar-foreground: oklch(0.985 0 0);
124
+ --sidebar-primary: oklch(0.488 0.243 264.376);
125
+ --sidebar-primary-foreground: oklch(0.985 0 0);
126
+ --sidebar-accent: oklch(0.269 0 0);
127
+ --sidebar-accent-foreground: oklch(0.985 0 0);
128
+ --sidebar-border: oklch(1 0 0 / 10%);
129
+ --sidebar-ring: oklch(0.556 0 0);
130
+ }
131
+
132
+ @layer base {
133
+ * {
134
+ @apply border-border outline-ring/50;
135
+ }
136
+ body {
137
+ @apply bg-background text-foreground;
138
+ }
139
+ }
140
+
141
+ /*
142
+ * Angular Material colour re-skin — layered on top of the custom M3 theme
143
+ * defined in theme.scss. The theme owns density (compact control heights) and
144
+ * seeds the base `--mat-sys-*` system variables; here we remap the colour and
145
+ * shape system variables to our shadcn design tokens so every Material
146
+ * component adopts the shadcn look without touching component code. This block
147
+ * loads after theme.scss, so these values win.
148
+ *
149
+ * Control sizing is NOT set here — density handles heights, and any remaining
150
+ * form-field-specific styling lives in the component's own scoped CSS.
151
+ */
152
+ :root {
153
+ --mat-sys-primary: var(--primary);
154
+ --mat-sys-on-primary: var(--primary-foreground);
155
+ --mat-sys-surface: var(--background);
156
+ --mat-sys-on-surface: var(--foreground);
157
+ --mat-sys-surface-variant: var(--muted);
158
+ --mat-sys-on-surface-variant: var(--muted-foreground);
159
+ --mat-sys-outline: var(--border);
160
+ --mat-sys-outline-variant: var(--border);
161
+ --mat-sys-error: var(--destructive);
162
+ --mat-sys-corner-small: var(--radius-sm);
163
+ --mat-sys-corner-medium: var(--radius-md);
164
+ --mat-sys-corner-large: var(--radius-lg);
165
+
166
+ // Card subtitle — Material defaults this to `--mat-sys-on-surface` (the same
167
+ // dark colour as the title). React renders the card description in muted
168
+ // grey (`text-muted-foreground`), so point the subtitle token there.
169
+ --mat-card-subtitle-text-color: var(--muted-foreground);
170
+ }
@@ -0,0 +1,39 @@
1
+ // Copyright (c) 2026, Salesforce, Inc.,
2
+ // All rights reserved.
3
+ // For full license text, see the LICENSE.txt file
4
+
5
+ // Angular Material M3 theme.
6
+ // See https://material.angular.dev/guide/theming.
7
+ //
8
+ // This replaces the prebuilt azure-blue theme so we can set a negative
9
+ // `density` — the standard, system-driven way to get the compact control
10
+ // heights the React reference uses (no hardcoded pixel heights anywhere).
11
+ //
12
+ // Colour is intentionally NOT finalised here: the shadcn design tokens are
13
+ // applied on top by remapping `--mat-sys-*` in styles.css, which loads after
14
+ // this file. The palette below only seeds Material's base system variables.
15
+ @use '@angular/material' as mat;
16
+
17
+ html {
18
+ @include mat.theme(
19
+ (
20
+ color: (
21
+ theme-type: light,
22
+ primary: mat.$azure-palette,
23
+ tertiary: mat.$blue-palette,
24
+ ),
25
+ // Font family reads Tailwind's system stack (`--font-sans`, the same
26
+ // default the React reference uses) instead of Material's Roboto, so
27
+ // Material components and Tailwind-styled text share one font. Tailwind
28
+ // is the single source of the family; the typescale sizes/weights stay
29
+ // Material's own.
30
+ typography: (
31
+ plain-family: var(--font-sans),
32
+ brand-family: var(--font-sans),
33
+ ),
34
+ // Compact density (scale 0 to -5). Drives control heights via
35
+ // Material's own tokens instead of hardcoded px.
36
+ density: -2,
37
+ )
38
+ );
39
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Build-time constants injected via esbuild `define`. Substituted by
3
+ * @salesforce/angular-plugin-ui-bundle during build (see esbuild/api-version.mjs
4
+ * and angular.json plugins[]).
5
+ *
6
+ * Without substitution, `@salesforce/platform-sdk` and `@salesforce/ui-bundle`
7
+ * fall back to "65.0" — the published packages contain the literal token.
8
+ */
9
+ declare const __SF_API_VERSION__: string;
@@ -0,0 +1,11 @@
1
+ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2
+ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3
+ {
4
+ "extends": "./tsconfig.json",
5
+ "compilerOptions": {
6
+ "outDir": "./out-tsc/app",
7
+ "types": []
8
+ },
9
+ "include": ["src/**/*.ts"],
10
+ "exclude": ["src/**/*.spec.ts"]
11
+ }
@@ -0,0 +1,33 @@
1
+ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2
+ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3
+ {
4
+ "compileOnSave": false,
5
+ "compilerOptions": {
6
+ "strict": true,
7
+ "noImplicitOverride": true,
8
+ "noPropertyAccessFromIndexSignature": true,
9
+ "noImplicitReturns": true,
10
+ "noFallthroughCasesInSwitch": true,
11
+ "skipLibCheck": true,
12
+ "isolatedModules": true,
13
+ "experimentalDecorators": true,
14
+ "importHelpers": true,
15
+ "target": "ES2022",
16
+ "module": "preserve"
17
+ },
18
+ "angularCompilerOptions": {
19
+ "enableI18nLegacyMessageIdFormat": false,
20
+ "strictInjectionParameters": true,
21
+ "strictInputAccessModifiers": true,
22
+ "strictTemplates": true
23
+ },
24
+ "files": [],
25
+ "references": [
26
+ {
27
+ "path": "./tsconfig.app.json"
28
+ },
29
+ {
30
+ "path": "./tsconfig.spec.json"
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,10 @@
1
+ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2
+ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3
+ {
4
+ "extends": "./tsconfig.json",
5
+ "compilerOptions": {
6
+ "outDir": "./out-tsc/spec",
7
+ "types": ["vitest/globals"]
8
+ },
9
+ "include": ["src/**/*.d.ts", "src/**/*.spec.ts"]
10
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "outputDir": "dist",
3
+ "routing": {
4
+ "trailingSlash": "never",
5
+ "fallback": "index.html"
6
+ }
7
+ }
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Utility class for Web Application authentication REST endpoints.
3
+ */
4
+ public without sharing class UIBundleAuthUtils {
5
+
6
+ /**
7
+ * Exception for authentication errors with HTTP status code support.
8
+ */
9
+ public class AuthException extends Exception {
10
+ public Integer statusCode { get; private set; } // HTTP status code (e.g. 400, 500)
11
+ public List<String> messages { get; private set; } // List of error messages
12
+
13
+ public AuthException(Integer statusCode, String message) {
14
+ this.statusCode = statusCode;
15
+ this.messages = new List<String>{ message };
16
+ }
17
+
18
+ public AuthException(Integer statusCode, List<String> messages) {
19
+ this.statusCode = statusCode;
20
+ this.messages = new List<String>(messages);
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Validates and sanitizes redirect URL to prevent open redirect vulnerabilities.
26
+ * @param url The URL to validate.
27
+ * @param defaultUrl Fallback URL if validation fails.
28
+ * @return Sanitized URL or defaultUrl if invalid.
29
+ */
30
+ public static String getSanitizedStartUrl(String url, String defaultUrl) {
31
+ if (String.isBlank(url) || url.equals('/')) { return defaultUrl; }
32
+
33
+ String decoded; // Decode URL to catch encoded bypasses (%2f%2f -> //)
34
+ try {
35
+ decoded = EncodingUtil.urlDecode(url, 'UTF-8');
36
+ } catch (Exception e) {
37
+ return defaultUrl;
38
+ }
39
+
40
+ // Must start with / but not // (protocol-relative)
41
+ if (!decoded.startsWith('/') || decoded.startsWith('//')) { return defaultUrl; }
42
+ // Reject backslashes (some browsers treat \ as /)
43
+ if (decoded.contains('\\')) { return defaultUrl; }
44
+ // Reject @ which can indicate user info in URL (//user@evil.com)
45
+ if (decoded.contains('@')) { return defaultUrl; }
46
+ // Reject : which could indicate protocol or port manipulation
47
+ if (decoded.contains(':')) { return defaultUrl; }
48
+ // Reject control characters (ASCII < 32) and DEL (127)
49
+ for (Integer i = 0; i < decoded.length(); i++) {
50
+ Integer charCode = decoded.charAt(i);
51
+ if (charCode < 32 || charCode == 127) { return defaultUrl; }
52
+ }
53
+
54
+ return defaultUrl + url;
55
+ }
56
+
57
+ /**
58
+ * Logs an error message and stack trace to the system debug log.
59
+ * It is only captured if a Trace Flag is active for the user.
60
+ *
61
+ * @param ex The exception to log.
62
+ * @param level The logging level to use.
63
+ */
64
+ public static void debugLog(Exception ex, LoggingLevel level) {
65
+ System.debug(level, 'Message: ' + ex.getMessage());
66
+ System.debug(level, 'Stack Trace: ' + ex.getStackTraceString());
67
+ }
68
+ }
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3
+ <apiVersion>67.0</apiVersion>
4
+ <status>Active</status>
5
+ </ApexClass>