@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,37 @@
1
+ <ng-template
2
+ cdkConnectedOverlay
3
+ [cdkConnectedOverlayOpen]="open()"
4
+ [cdkConnectedOverlayHasBackdrop]="true"
5
+ cdkConnectedOverlayBackdropClass="cdk-overlay-dark-backdrop"
6
+ [cdkConnectedOverlayPositions]="[
7
+ {
8
+ originX: 'center',
9
+ originY: 'center',
10
+ overlayX: 'center',
11
+ overlayY: 'center',
12
+ },
13
+ ]"
14
+ (backdropClick)="onBackdropClick()"
15
+ (overlayKeydown)="$event.key === 'Escape' && close()"
16
+ (detach)="close()"
17
+ >
18
+ <div
19
+ role="dialog"
20
+ aria-modal="true"
21
+ [attr.aria-label]="ariaLabel()"
22
+ [attr.aria-labelledby]="ariaLabelledby()"
23
+ cdkTrapFocus
24
+ [cdkTrapFocusAutoCapture]="true"
25
+ class="bg-card text-card-foreground flex w-full max-w-md flex-col gap-4 rounded-xl p-6 shadow-lg ring-1 ring-black/10 outline-none"
26
+ >
27
+ <div data-slot="dialog-header" class="flex flex-col gap-1">
28
+ <ng-content select="[header]" />
29
+ </div>
30
+ <div data-slot="dialog-body" class="text-sm">
31
+ <ng-content />
32
+ </div>
33
+ <div data-slot="dialog-footer" class="flex items-center justify-end gap-2">
34
+ <ng-content select="[footer]" />
35
+ </div>
36
+ </div>
37
+ </ng-template>
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+ import { CdkTrapFocus } from '@angular/cdk/a11y';
7
+ import { CdkConnectedOverlay } from '@angular/cdk/overlay';
8
+ import { ChangeDetectionStrategy, Component, input, model, output } from '@angular/core';
9
+
10
+ /**
11
+ * Modal dialog backed by CDK Overlay. Slots: `[header]`, default (body),
12
+ * `[footer]`. `open` is a two-way model; a backdrop click or Escape closes it
13
+ * and emits `(closed)`. `cdkTrapFocus` keeps focus inside the panel while open.
14
+ */
15
+ @Component({
16
+ selector: 'app-dialog',
17
+ changeDetection: ChangeDetectionStrategy.OnPush,
18
+ imports: [CdkConnectedOverlay, CdkTrapFocus],
19
+ templateUrl: './dialog.html',
20
+ })
21
+ export class DialogComponent {
22
+ /** Two-way bindable open state. Supports `[(open)]`. */
23
+ readonly open = model<boolean>(false);
24
+
25
+ /** When true a backdrop click closes the dialog. */
26
+ readonly closeOnBackdrop = input<boolean>(true);
27
+
28
+ /** Accessible name for the dialog (or use `ariaLabelledby`). */
29
+ readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });
30
+
31
+ /** `id` of an element (e.g. the projected header) that names the dialog. */
32
+ readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });
33
+
34
+ /** Emitted whenever the dialog transitions to closed. */
35
+ readonly closed = output<void>();
36
+
37
+ /** Imperatively open the dialog. */
38
+ show(): void {
39
+ this.open.set(true);
40
+ }
41
+
42
+ /** Imperatively close the dialog and notify listeners. */
43
+ close(): void {
44
+ if (this.open()) {
45
+ this.open.set(false);
46
+ this.closed.emit();
47
+ }
48
+ }
49
+
50
+ protected onBackdropClick(): void {
51
+ if (this.closeOnBackdrop()) {
52
+ this.close();
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,21 @@
1
+ @if (label()) {
2
+ <label [attr.for]="htmlFor()" class="text-sm leading-none font-medium select-none">
3
+ {{ label() }}
4
+ @if (required()) {
5
+ <span aria-hidden="true" class="text-destructive">*</span>
6
+ }
7
+ </label>
8
+ }
9
+
10
+ <ng-content />
11
+
12
+ @if (error()) {
13
+ <p
14
+ [id]="htmlFor() ? htmlFor() + '-error' : null"
15
+ data-slot="field-error"
16
+ role="alert"
17
+ class="text-destructive text-sm"
18
+ >
19
+ {{ error() }}
20
+ </p>
21
+ }
@@ -0,0 +1,36 @@
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, input } from '@angular/core';
7
+
8
+ /**
9
+ * Form-field wrapper: renders a `<label>`, the projected control, and an error
10
+ * message when present. Composes around `app-input` and other controls.
11
+ */
12
+ @Component({
13
+ selector: 'app-field',
14
+ changeDetection: ChangeDetectionStrategy.OnPush,
15
+ templateUrl: './field.html',
16
+ host: {
17
+ 'data-slot': 'field',
18
+ class: 'flex flex-col gap-1.5',
19
+ },
20
+ })
21
+ export class FieldComponent {
22
+ /** Optional label text rendered above the control. */
23
+ readonly label = input<string>('');
24
+
25
+ /**
26
+ * Error message; renders in a `role="alert"` region. When `htmlFor` is set
27
+ * the region gets id `<htmlFor>-error` for the control's `aria-describedby`.
28
+ */
29
+ readonly error = input<string | null>(null);
30
+
31
+ /** Marks the field required and renders an asterisk next to the label. */
32
+ readonly required = input<boolean>(false);
33
+
34
+ /** `id` of the projected control; forwarded to the label's `for`. */
35
+ readonly htmlFor = input<string | null>(null);
36
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+
7
+ /** Form-field height scale: `sm` = 24px, `default` = 32px, `lg` = 40px. */
8
+ export type AppFieldSize = 'sm' | 'default' | 'lg';
@@ -0,0 +1,19 @@
1
+ <mat-form-field
2
+ class="w-full"
3
+ [class]="'size-' + size()"
4
+ [appearance]="appearance()"
5
+ subscriptSizing="dynamic"
6
+ >
7
+ @if (label()) {
8
+ <mat-label>{{ label() }}</mat-label>
9
+ }
10
+ <input
11
+ matInput
12
+ [type]="type()"
13
+ [placeholder]="placeholder()"
14
+ [disabled]="disabled()"
15
+ [attr.id]="id() || null"
16
+ [attr.aria-describedby]="ariaDescribedby() || null"
17
+ [(ngModel)]="value"
18
+ />
19
+ </mat-form-field>
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+
7
+ @use '../field-size' as field-size;
8
+
9
+ /*
10
+ * Form-field-specific structural styling. Height comes from the `size` input
11
+ * (see field-size.scss); colour comes from the --mat-sys-* remap (styles.css).
12
+ * Here we only: give the outline our design-token radius, emit the size
13
+ * classes, and collapse the empty hint/error subscript row.
14
+ */
15
+ @include field-size.sizes;
16
+
17
+ :host {
18
+ display: block;
19
+ /*
20
+ * Allow the host to shrink below the mat-form-field's intrinsic width when
21
+ * used as a flex item (e.g. two side-by-side inputs in a numeric/date
22
+ * range). Without this, the default `min-width: auto` on a flex item keeps
23
+ * each field at its content width and the row overflows its container.
24
+ */
25
+ min-width: 0;
26
+ }
27
+
28
+ .mat-mdc-form-field {
29
+ --mdc-outlined-text-field-container-shape: var(--radius-md);
30
+ font-size: 0.875rem; /* text-sm, matches the React inputs */
31
+ }
32
+
33
+ .mat-mdc-form-field-subscript-wrapper {
34
+ display: none;
35
+ }
@@ -0,0 +1,36 @@
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, input, model } from '@angular/core';
7
+ import { FormsModule } from '@angular/forms';
8
+ import { MatFormFieldModule, type MatFormFieldAppearance } from '@angular/material/form-field';
9
+ import { MatInputModule } from '@angular/material/input';
10
+ import type { AppFieldSize } from '../field-size';
11
+
12
+ /** Thin wrapper over Material's `mat-form-field` + `matInput`. */
13
+ @Component({
14
+ selector: 'app-input',
15
+ changeDetection: ChangeDetectionStrategy.OnPush,
16
+ imports: [FormsModule, MatFormFieldModule, MatInputModule],
17
+ templateUrl: './input.html',
18
+ styleUrl: './input.scss',
19
+ })
20
+ export class InputComponent {
21
+ /** Two-way bindable value. Supports `[(value)]`. */
22
+ readonly value = model<string>('');
23
+
24
+ readonly placeholder = input<string>('');
25
+ readonly label = input<string>('');
26
+ readonly type = input<string>('text');
27
+ readonly disabled = input<boolean>(false);
28
+ readonly appearance = input<MatFormFieldAppearance>('outline');
29
+ /** Field height: `sm` = 24px, `default` = 32px, `lg` = 40px. */
30
+ readonly size = input<AppFieldSize>('default');
31
+
32
+ /** `id` on the inner control, so an outer `app-field` label's `for` resolves. */
33
+ readonly id = input<string>('');
34
+
35
+ readonly ariaDescribedby = input<string>('');
36
+ }
@@ -0,0 +1,3 @@
1
+ <label [attr.for]="for()" class="text-sm leading-none font-medium select-none">
2
+ <ng-content />
3
+ </label>
@@ -0,0 +1,17 @@
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, input } from '@angular/core';
7
+
8
+ /** Thin wrapper over the native `<label>` element. */
9
+ @Component({
10
+ selector: 'app-label',
11
+ changeDetection: ChangeDetectionStrategy.OnPush,
12
+ templateUrl: './label.html',
13
+ })
14
+ export class LabelComponent {
15
+ /** Optional `for` attribute forwarded to the underlying `<label>`. */
16
+ readonly for = input<string | null>(null);
17
+ }
@@ -0,0 +1,10 @@
1
+ <mat-paginator
2
+ [length]="length()"
3
+ [pageIndex]="pageIndex()"
4
+ [pageSize]="pageSize()"
5
+ [pageSizeOptions]="pageSizeOptions()"
6
+ [hidePageSize]="hidePageSize()"
7
+ [showFirstLastButtons]="showFirstLastButtons()"
8
+ [disabled]="disabled()"
9
+ (page)="page.emit($event)"
10
+ />
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+ import { booleanAttribute, ChangeDetectionStrategy, Component, input, output } from '@angular/core';
7
+ import { MatPaginator, type PageEvent } from '@angular/material/paginator';
8
+
9
+ /**
10
+ * Thin wrapper over Material's `mat-paginator`. Presentation only — the host
11
+ * decides what each page change means by listening to `(page)`.
12
+ */
13
+ @Component({
14
+ selector: 'app-paginator',
15
+ changeDetection: ChangeDetectionStrategy.OnPush,
16
+ imports: [MatPaginator],
17
+ templateUrl: './paginator.html',
18
+ })
19
+ export class PaginatorComponent {
20
+ /** Total item count; Material derives the page count as `ceil(length / pageSize)`. */
21
+ readonly length = input<number>(0);
22
+ /** Zero-based index of the current page. */
23
+ readonly pageIndex = input<number>(0);
24
+ /** Items shown per page. */
25
+ readonly pageSize = input<number>(10);
26
+ /** Selectable page sizes; omit/empty to hide the size selector. */
27
+ readonly pageSizeOptions = input<readonly number[]>([]);
28
+ /** Disable navigation buttons and the size select (e.g. while loading). */
29
+ readonly disabled = input(false, { transform: booleanAttribute });
30
+ /** Hide the "Items per page" selector. */
31
+ readonly hidePageSize = input(false, { transform: booleanAttribute });
32
+ /** Show the first / last page jump buttons. */
33
+ readonly showFirstLastButtons = input(false, { transform: booleanAttribute });
34
+
35
+ /** Emitted when the user changes page or page size. */
36
+ readonly page = output<PageEvent>();
37
+ }
@@ -0,0 +1,41 @@
1
+ <span
2
+ cdkOverlayOrigin
3
+ #origin="cdkOverlayOrigin"
4
+ role="button"
5
+ tabindex="0"
6
+ [attr.aria-expanded]="open()"
7
+ (click)="toggle()"
8
+ (keydown.enter)="toggle()"
9
+ (keydown.space)="$event.preventDefault(); toggle()"
10
+ >
11
+ <ng-content select="[trigger]" />
12
+ </span>
13
+
14
+ <ng-template
15
+ cdkConnectedOverlay
16
+ [cdkConnectedOverlayOrigin]="origin"
17
+ [cdkConnectedOverlayOpen]="open()"
18
+ [cdkConnectedOverlayHasBackdrop]="true"
19
+ cdkConnectedOverlayBackdropClass="cdk-overlay-transparent-backdrop"
20
+ [cdkConnectedOverlayOffsetY]="sideOffset()"
21
+ [cdkConnectedOverlayPositions]="[
22
+ {
23
+ originX: align(),
24
+ originY: 'bottom',
25
+ overlayX: align(),
26
+ overlayY: 'top',
27
+ },
28
+ {
29
+ originX: align(),
30
+ originY: 'top',
31
+ overlayX: align(),
32
+ overlayY: 'bottom',
33
+ },
34
+ ]"
35
+ (backdropClick)="close()"
36
+ (detach)="close()"
37
+ >
38
+ <div class="bg-white text-sm rounded-lg shadow-md ring-1 ring-black/10 outline-none">
39
+ <ng-content />
40
+ </div>
41
+ </ng-template>
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+ import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
7
+ import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';
8
+
9
+ /**
10
+ * Popover backed by CDK Overlay. Slots: `[trigger]` (anchor, toggles the
11
+ * popover) and default (body). `open` is a two-way model; a backdrop click
12
+ * closes it.
13
+ */
14
+ @Component({
15
+ selector: 'app-popover',
16
+ changeDetection: ChangeDetectionStrategy.OnPush,
17
+ imports: [CdkConnectedOverlay, CdkOverlayOrigin],
18
+ templateUrl: './popover.html',
19
+ })
20
+ export class PopoverComponent {
21
+ /**
22
+ * Two-way bindable open state. Supports `[(open)]`, a plain `[open]`
23
+ * input, or listening to the auto-generated `(openChange)` event.
24
+ */
25
+ readonly open = model<boolean>(false);
26
+
27
+ /** Panel alignment relative to the trigger. Defaults to below-start. */
28
+ readonly align = input<'start' | 'center' | 'end'>('start');
29
+
30
+ /** Vertical gap between the trigger and the panel, in px. */
31
+ readonly sideOffset = input<number>(4);
32
+
33
+ toggle(): void {
34
+ this.open.set(!this.open());
35
+ }
36
+
37
+ close(): void {
38
+ this.open.set(false);
39
+ }
40
+ }
@@ -0,0 +1,24 @@
1
+ <mat-form-field
2
+ class="w-full"
3
+ [class]="'size-' + size()"
4
+ [appearance]="appearance()"
5
+ subscriptSizing="dynamic"
6
+ >
7
+ @if (label()) {
8
+ <mat-label>{{ label() }}</mat-label>
9
+ }
10
+ <mat-select
11
+ [multiple]="multiple()"
12
+ [placeholder]="placeholder()"
13
+ [disabled]="disabled()"
14
+ [ngModel]="selection()"
15
+ (ngModelChange)="onSelectionChange($event)"
16
+ >
17
+ @if (multiple()) {
18
+ <mat-select-trigger>{{ multiTriggerLabel() }}</mat-select-trigger>
19
+ }
20
+ @for (option of options(); track option.value) {
21
+ <mat-option [value]="option.value">{{ option.label }}</mat-option>
22
+ }
23
+ </mat-select>
24
+ </mat-form-field>
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+
7
+ @use '../field-size' as field-size;
8
+
9
+ /*
10
+ * Form-field-specific structural styling. Height comes from the `size` input
11
+ * (see field-size.scss); colour comes from the --mat-sys-* remap (styles.css).
12
+ * Here we only: give the outline our design-token radius, emit the size
13
+ * classes, and collapse the empty hint/error subscript row.
14
+ */
15
+ @include field-size.sizes;
16
+
17
+ :host {
18
+ display: block;
19
+ /*
20
+ * Allow the host to shrink below the mat-form-field's intrinsic width when
21
+ * used as a flex item (e.g. the operator select beside a date picker in a
22
+ * date filter row). Without this, the default `min-width: auto` on a flex
23
+ * item keeps each field at its content width and the row overflows.
24
+ */
25
+ min-width: 0;
26
+ }
27
+
28
+ .mat-mdc-form-field {
29
+ --mdc-outlined-text-field-container-shape: var(--radius-md);
30
+ font-size: 0.875rem; /* text-sm, matches the React inputs */
31
+ }
32
+
33
+ .mat-mdc-form-field-subscript-wrapper {
34
+ display: none;
35
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+ import {
7
+ booleanAttribute,
8
+ ChangeDetectionStrategy,
9
+ Component,
10
+ computed,
11
+ input,
12
+ model,
13
+ } from '@angular/core';
14
+ import { FormsModule } from '@angular/forms';
15
+ import { MatFormFieldModule, type MatFormFieldAppearance } from '@angular/material/form-field';
16
+ import { MatSelectModule } from '@angular/material/select';
17
+ import type { AppFieldSize } from '../field-size';
18
+
19
+ /** Shape of an option rendered in the dropdown. */
20
+ export interface AppSelectOption {
21
+ value: string;
22
+ label: string;
23
+ }
24
+
25
+ /** Thin wrapper over Material's `mat-form-field` + `mat-select`. */
26
+ @Component({
27
+ selector: 'app-select',
28
+ changeDetection: ChangeDetectionStrategy.OnPush,
29
+ imports: [FormsModule, MatFormFieldModule, MatSelectModule],
30
+ templateUrl: './select.html',
31
+ styleUrl: './select.scss',
32
+ })
33
+ export class SelectComponent {
34
+ /** Two-way bindable single-select value. Ignored when `multiple` is set. */
35
+ readonly value = model<string>('');
36
+
37
+ /** Two-way bindable multi-select values. Used only when `multiple` is `true`. */
38
+ readonly values = model<readonly string[]>([]);
39
+
40
+ /** Render checkbox options and allow more than one selection. */
41
+ readonly multiple = input(false, { transform: booleanAttribute });
42
+
43
+ readonly options = input<readonly AppSelectOption[]>([]);
44
+ readonly placeholder = input<string>('');
45
+ readonly label = input<string>('');
46
+ readonly disabled = input<boolean>(false);
47
+ readonly appearance = input<MatFormFieldAppearance>('outline');
48
+ /** Field height: `sm` = 24px, `default` = 32px, `lg` = 40px. */
49
+ readonly size = input<AppFieldSize>('default');
50
+
51
+ /** Value handed to `mat-select`: the `values` array when `multiple`, else `value`. */
52
+ protected readonly selection = computed(() => (this.multiple() ? this.values() : this.value()));
53
+
54
+ /** Multi-select trigger summary: the sole option's label, else "N selected". */
55
+ protected readonly multiTriggerLabel = computed(() => {
56
+ const selected = this.values();
57
+ if (selected.length === 1) {
58
+ const only = selected[0];
59
+ return this.options().find((o) => o.value === only)?.label ?? only;
60
+ }
61
+ return `${selected.length} selected`;
62
+ });
63
+
64
+ /** Single change handler — routes to the right model based on `multiple`. */
65
+ protected onSelectionChange(next: string | string[]): void {
66
+ if (this.multiple()) {
67
+ this.values.set((next as string[]) ?? []);
68
+ } else {
69
+ this.value.set((next as string) ?? '');
70
+ }
71
+ }
72
+ }
@@ -0,0 +1 @@
1
+ <mat-divider role="presentation" [vertical]="isVertical()" [inset]="inset()" />
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+
7
+ /*
8
+ * Material's `mat-divider` draws a full-height border for the vertical variant,
9
+ * so its element must fill the host. The host itself carries `self-stretch`
10
+ * (see component `hostClass`) to take the flex row's height; here we make the
11
+ * inner divider fill that height. Horizontal needs nothing extra — the divider
12
+ * is already `display:block; width:100%`.
13
+ */
14
+ :host {
15
+ // A vertical divider is a zero-width line; keep it out of flex growth math.
16
+ &[data-orientation='vertical'] {
17
+ display: flex;
18
+ }
19
+ }
20
+
21
+ .mat-divider-vertical {
22
+ height: 100%;
23
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+ import {
7
+ booleanAttribute,
8
+ ChangeDetectionStrategy,
9
+ Component,
10
+ computed,
11
+ input,
12
+ } from '@angular/core';
13
+ import { MatDivider } from '@angular/material/divider';
14
+
15
+ /** Layout axis of the separator line. */
16
+ export type AppSeparatorOrientation = 'horizontal' | 'vertical';
17
+
18
+ const BASE_CLASSES = 'shrink-0';
19
+ const ORIENTATION_CLASSES: Record<AppSeparatorOrientation, string> = {
20
+ horizontal: 'block w-full',
21
+ vertical: 'self-stretch',
22
+ };
23
+
24
+ /**
25
+ * Divider built on Material's `mat-divider`. `decorative` (default) hides the
26
+ * host from assistive tech (`role="none"`); when false it exposes
27
+ * `role="separator"` + `aria-orientation`. The inner `mat-divider` is marked
28
+ * `role="presentation"` so it never announces a duplicate separator.
29
+ */
30
+ @Component({
31
+ selector: 'app-separator',
32
+ changeDetection: ChangeDetectionStrategy.OnPush,
33
+ imports: [MatDivider],
34
+ templateUrl: './separator.html',
35
+ styleUrl: './separator.scss',
36
+ host: {
37
+ 'data-slot': 'separator',
38
+ '[attr.data-orientation]': 'orientation()',
39
+ '[attr.role]': "decorative() ? 'none' : 'separator'",
40
+ '[attr.aria-orientation]':
41
+ "decorative() ? null : (orientation() === 'vertical' ? 'vertical' : 'horizontal')",
42
+ '[class]': 'hostClass()',
43
+ },
44
+ })
45
+ export class SeparatorComponent {
46
+ readonly orientation = input<AppSeparatorOrientation>('horizontal');
47
+ readonly decorative = input(true, { transform: booleanAttribute });
48
+ /** Adds Material's horizontal inset margin so the line doesn't run edge-to-edge. */
49
+ readonly inset = input(false, { transform: booleanAttribute });
50
+
51
+ protected readonly isVertical = computed(() => this.orientation() === 'vertical');
52
+
53
+ protected readonly hostClass = computed(
54
+ () => `${BASE_CLASSES} ${ORIENTATION_CLASSES[this.orientation()]}`,
55
+ );
56
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+
7
+ /*
8
+ * The skeleton is a block by default so call sites only need to supply a width
9
+ * and height (`h-4 w-32`) — no `block` utility to repeat. The pulse lives here
10
+ * (rather than Tailwind's `animate-pulse`) so it can be switched off for users
11
+ * who ask for reduced motion.
12
+ */
13
+ :host {
14
+ display: block;
15
+ animation: app-skeleton-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
16
+ }
17
+
18
+ @keyframes app-skeleton-pulse {
19
+ 50% {
20
+ opacity: 0.5;
21
+ }
22
+ }
23
+
24
+ @media (prefers-reduced-motion: reduce) {
25
+ :host {
26
+ animation: none;
27
+ }
28
+ }