@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.
- package/lib/generators/projectGenerator.js +4 -1
- package/lib/generators/projectGenerator.js.map +1 -1
- package/lib/templates/project/angularextapp/.forceignore +15 -0
- package/lib/templates/project/angularextapp/.husky/pre-commit +4 -0
- package/lib/templates/project/angularextapp/.prettierignore +11 -0
- package/lib/templates/project/angularextapp/.prettierrc +17 -0
- package/lib/templates/project/angularextapp/CHANGELOG.md +4086 -0
- package/lib/templates/project/angularextapp/README.md +77 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_d_/_s_/angularextapp1/angularextapp1.digitalExperience-meta.xml +11 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_d_/_s_/angularextapp1/sfdc_cms__site/angularextapp1/_meta.json +5 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_d_/_s_/angularextapp1/sfdc_cms__site/angularextapp1/content.json +10 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_dc_/angularextapp1.digitalExperienceConfig-meta.xml +8 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/.forceignore +15 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/.postcssrc.json +5 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/.prettierignore +8 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/.prettierrc +12 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/CHANGELOG.md +4 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/README.md +85 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/angular.json +101 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/angularextapp.uibundle-meta.xml +8 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/e2e/app.spec.ts +15 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/esbuild/api-version.mjs +17 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/eslint.config.js +60 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/middleware/html.mjs +3 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/middleware/proxy.mjs +12 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/package-lock.json +13600 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/package.json +56 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/playwright.config.ts +25 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/public/favicon.ico +0 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/scripts/rewrite-e2e-assets.mjs +30 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/account/account-search.service.ts +196 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/account/distinctAccountIndustries.ts +26 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/account/distinctAccountTypes.ts +26 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/account/getAccountDetail.ts +128 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/account/searchAccounts.ts +58 -0
- 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
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/data-client.service.ts +74 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/api/user-profile.service.ts +126 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/app.config.ts +22 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/app.html +1 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/app.routes.ts +77 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/app.spec.ts +18 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/app.ts +15 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/layout/app-layout/app-layout.html +53 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/layout/app-layout/app-layout.spec.ts +89 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/layout/app-layout/app-layout.ts +81 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/_field-size.scss +42 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/alert/alert.html +31 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/alert/alert.ts +53 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/button/button.html +18 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/button/button.scss +112 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/button/button.ts +57 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/card/card.scss +34 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/card/card.ts +110 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/collapsible/collapsible.html +10 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/collapsible/collapsible.ts +26 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-picker/date-picker.html +25 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-picker/date-picker.scss +36 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-picker/date-picker.ts +41 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-range-picker/date-range-picker.html +34 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-range-picker/date-range-picker.scss +33 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-range-picker/date-range-picker.ts +66 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/dialog/dialog.html +37 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/dialog/dialog.ts +55 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/field/field.html +21 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/field/field.ts +36 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/field-size.ts +8 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/input/input.html +19 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/input/input.scss +35 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/input/input.ts +36 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/label/label.html +3 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/label/label.ts +17 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/paginator/paginator.html +10 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/paginator/paginator.ts +37 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/popover/popover.html +41 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/popover/popover.ts +40 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/select/select.html +24 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/select/select.scss +35 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/select/select.ts +72 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/separator/separator.html +1 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/separator/separator.scss +23 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/separator/separator.ts +56 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/skeleton/skeleton.html +1 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/skeleton/skeleton.scss +28 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/skeleton/skeleton.ts +24 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/components/ui/spinner/spinner.ts +35 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/auth/auth.guard.ts +50 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/auth/auth.service.ts +126 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/auth-form/auth-form.html +34 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/auth-form/auth-form.ts +94 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/auth-layout/auth-layout.html +2 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/auth-layout/auth-layout.ts +30 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/card-layout/card-layout.html +16 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/card-layout/card-layout.ts +40 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/config/authentication.config.ts +75 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/footer-link/footer-link.html +9 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/footer-link/footer-link.ts +26 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/menu/auth-menu/auth-menu.html +26 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/menu/auth-menu/auth-menu.ts +46 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/reactive-form-page.base.ts +50 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/session/session.html +55 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/session/session.ts +205 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/status-alert/status-alert.html +5 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/status-alert/status-alert.ts +52 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/submit-button/submit-button.html +5 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/submit-button/submit-button.scss +17 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/submit-button/submit-button.ts +35 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/utils/auth-helpers.ts +68 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/utils/auth-validators.ts +72 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/utils/helpers.ts +85 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/utils/session-time-servlet.ts +130 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/utils/session-timeout.config.ts +83 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/authentication/utils/session-timeout.service.ts +201 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/breadcrumb/breadcrumb.html +54 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/breadcrumb/breadcrumb.ts +40 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/active-filters.html +23 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/active-filters.ts +78 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-filter.html +18 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-filter.ts +137 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-range-filter.html +11 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-range-filter.ts +69 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/filter-field-wrapper.html +11 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/filter-field-wrapper.ts +36 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/multi-select-filter.html +10 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/multi-select-filter.ts +58 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/numeric-range-filter.html +22 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/numeric-range-filter.ts +146 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/search-filter.html +8 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/search-filter.ts +82 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/select-filter.html +12 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/select-filter.ts +65 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/text-filter.html +12 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/text-filter.ts +90 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/object-search-state.service.ts +232 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/pagination/pagination.html +8 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/pagination/pagination.ts +61 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/search-bar/search-bar.html +59 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/search-bar/search-bar.ts +108 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/sort-control/sort-control.html +50 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/sort-control/sort-control.ts +72 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/debounce.ts +31 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/field-utils.ts +54 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/filter-utils.ts +354 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/index.ts +12 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/sort-utils.ts +46 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/account-detail/account-detail-page.html +164 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/account-detail/account-detail-page.scss +7 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/account-detail/account-detail-page.ts +196 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/account-search/account-search-page.html +111 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/account-search/account-search-page.ts +217 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/change-password/change-password-page.html +68 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/change-password/change-password-page.ts +82 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/forgot-password/forgot-password-page.html +35 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/forgot-password/forgot-password-page.ts +87 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/home/home-page.html +18 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/home/home-page.ts +47 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/home/home.html +6 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/home/home.spec.ts +23 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/home/home.ts +13 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/login/login-page.html +47 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/login/login-page.ts +89 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/not-found/not-found.html +12 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/not-found/not-found.spec.ts +33 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/not-found/not-found.ts +15 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/profile/profile-page.html +116 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/profile/profile-page.ts +194 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/register/register-page.html +80 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/register/register-page.ts +93 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/reset-password/reset-password-page.html +60 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/pages/reset-password/reset-password-page.ts +96 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/app/utils/async-data.ts +99 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/index.html +14 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/main.ts +5 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/styles.scss +170 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/theme.scss +39 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/src/types/sf-globals.d.ts +9 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/tsconfig.app.json +11 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/tsconfig.json +33 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/tsconfig.spec.json +10 -0
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/ui-bundle.json +7 -0
- package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleAuthUtils.cls +68 -0
- package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleAuthUtils.cls-meta.xml +5 -0
- package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleChangePassword.cls +77 -0
- package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleChangePassword.cls-meta.xml +5 -0
- package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleForgotPassword.cls +71 -0
- package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleForgotPassword.cls-meta.xml +5 -0
- package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleLogin.cls +105 -0
- package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleLogin.cls-meta.xml +5 -0
- package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleRegistration.cls +162 -0
- package/lib/templates/project/angularextapp/_p_/_m_/classes/UIBundleRegistration.cls-meta.xml +5 -0
- package/lib/templates/project/angularextapp/_p_/_m_/networks/angularextapp.network-meta.xml +60 -0
- package/lib/templates/project/angularextapp/_p_/_m_/package.xml +24 -0
- package/lib/templates/project/angularextapp/_p_/_m_/permissionsets/angularextapp_Guest_User_Api_Access.permissionset-meta.xml +9 -0
- package/lib/templates/project/angularextapp/_p_/_m_/sites/angularextapp.site-meta.xml +31 -0
- package/lib/templates/project/angularextapp/config/project-scratch-def.json +13 -0
- package/lib/templates/project/angularextapp/eslint.config.js +7 -0
- package/lib/templates/project/angularextapp/jest.config.js +6 -0
- package/lib/templates/project/angularextapp/package.json +46 -0
- package/lib/templates/project/angularextapp/scripts/apex/hello.apex +10 -0
- package/lib/templates/project/angularextapp/scripts/gitignore-templates.json +4 -0
- package/lib/templates/project/angularextapp/scripts/graphql-search.sh +191 -0
- package/lib/templates/project/angularextapp/scripts/org-setup-config-schema.mjs +103 -0
- package/lib/templates/project/angularextapp/scripts/org-setup-dev.mjs +87 -0
- package/lib/templates/project/angularextapp/scripts/org-setup-utils.mjs +369 -0
- package/lib/templates/project/angularextapp/scripts/org-setup-xml.mjs +182 -0
- package/lib/templates/project/angularextapp/scripts/org-setup.config.json +9 -0
- package/lib/templates/project/angularextapp/scripts/org-setup.mjs +1702 -0
- package/lib/templates/project/angularextapp/scripts/sf-project-setup.mjs +103 -0
- package/lib/templates/project/angularextapp/scripts/soql/account.soql +6 -0
- package/lib/templates/project/angularextapp/scripts/validate-org-setup-config.mjs +38 -0
- package/lib/templates/project/angularextapp/sfdx-project.json +12 -0
- package/lib/templates/project/angularintapp/.forceignore +15 -0
- package/lib/templates/project/angularintapp/.husky/pre-commit +4 -0
- package/lib/templates/project/angularintapp/.prettierignore +11 -0
- package/lib/templates/project/angularintapp/.prettierrc +17 -0
- package/lib/templates/project/angularintapp/CHANGELOG.md +4086 -0
- package/lib/templates/project/angularintapp/README.md +77 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/.forceignore +15 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/.postcssrc.json +5 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/.prettierignore +8 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/.prettierrc +12 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/CHANGELOG.md +4 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/README.md +85 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/angular.json +101 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/angularintapp.uibundle-meta.xml +8 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/e2e/app.spec.ts +15 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/esbuild/api-version.mjs +17 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/eslint.config.js +60 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/middleware/html.mjs +3 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/middleware/proxy.mjs +12 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/package-lock.json +13619 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/package.json +57 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/playwright.config.ts +25 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/public/favicon.ico +0 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/scripts/rewrite-e2e-assets.mjs +30 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/account/account-search.service.ts +196 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/account/distinctAccountIndustries.ts +26 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/account/distinctAccountTypes.ts +26 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/account/getAccountDetail.ts +128 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/account/searchAccounts.ts +58 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/data-client.service.spec.ts +184 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/api/data-client.service.ts +74 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/app.config.ts +22 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/app.html +1 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/app.routes.ts +31 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/app.spec.ts +18 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/app.ts +15 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/layout/app-layout/app-layout.html +52 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/layout/app-layout/app-layout.spec.ts +90 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/layout/app-layout/app-layout.ts +67 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/_field-size.scss +42 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/alert/alert.html +31 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/alert/alert.ts +53 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/button/button.html +18 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/button/button.scss +112 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/button/button.ts +57 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/card/card.scss +34 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/card/card.ts +110 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/collapsible/collapsible.html +10 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/collapsible/collapsible.ts +26 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-picker/date-picker.html +25 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-picker/date-picker.scss +36 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-picker/date-picker.ts +41 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-range-picker/date-range-picker.html +34 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-range-picker/date-range-picker.scss +33 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/date-range-picker/date-range-picker.ts +66 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/dialog/dialog.html +37 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/dialog/dialog.ts +55 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/field/field.html +21 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/field/field.ts +36 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/field-size.ts +8 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/input/input.html +19 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/input/input.scss +35 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/input/input.ts +36 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/label/label.html +3 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/label/label.ts +17 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/paginator/paginator.html +10 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/paginator/paginator.ts +37 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/popover/popover.html +41 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/popover/popover.ts +40 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/select/select.html +24 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/select/select.scss +35 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/select/select.ts +72 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/separator/separator.html +1 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/separator/separator.scss +23 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/separator/separator.ts +56 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/skeleton/skeleton.html +1 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/skeleton/skeleton.scss +28 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/skeleton/skeleton.ts +24 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/components/ui/spinner/spinner.ts +35 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/agentforce/agentforce-embed.service.ts +177 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/agentforce/conversation.html +3 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/agentforce/conversation.ts +119 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/breadcrumb/breadcrumb.html +54 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/breadcrumb/breadcrumb.ts +40 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/active-filters.html +23 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/active-filters.ts +78 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-filter.html +18 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-filter.ts +137 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-range-filter.html +11 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/date-range-filter.ts +69 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/filter-field-wrapper.html +11 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/filter-field-wrapper.ts +36 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/multi-select-filter.html +10 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/multi-select-filter.ts +58 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/numeric-range-filter.html +22 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/numeric-range-filter.ts +146 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/search-filter.html +8 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/search-filter.ts +82 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/select-filter.html +12 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/select-filter.ts +65 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/text-filter.html +12 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/filters/text-filter.ts +90 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/object-search-state.service.ts +232 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/pagination/pagination.html +8 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/pagination/pagination.ts +61 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/search-bar/search-bar.html +59 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/search-bar/search-bar.ts +108 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/sort-control/sort-control.html +50 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/sort-control/sort-control.ts +72 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/debounce.ts +31 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/field-utils.ts +54 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/filter-utils.ts +354 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/index.ts +12 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/features/object-search/utils/sort-utils.ts +46 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/account-detail/account-detail-page.html +164 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/account-detail/account-detail-page.scss +7 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/account-detail/account-detail-page.ts +196 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/account-search/account-search-page.html +111 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/account-search/account-search-page.ts +217 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/home/home-page.html +18 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/home/home-page.ts +47 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/home/home.html +6 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/home/home.spec.ts +23 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/home/home.ts +13 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/not-found/not-found.html +12 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/not-found/not-found.spec.ts +33 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/pages/not-found/not-found.ts +15 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/types/conversation.ts +55 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/types/globals.d.ts +13 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/app/utils/async-data.ts +99 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/index.html +14 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/index.ts +15 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/main.ts +5 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/styles.scss +170 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/theme.scss +39 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/src/types/sf-globals.d.ts +9 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/tsconfig.app.json +11 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/tsconfig.json +33 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/tsconfig.spec.json +10 -0
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/ui-bundle.json +7 -0
- package/lib/templates/project/angularintapp/_p_/_m_/applications/angularintapp.app-meta.xml +17 -0
- package/lib/templates/project/angularintapp/_p_/_m_/permissionsets/angularintapp_Access.permissionset-meta.xml +13 -0
- package/lib/templates/project/angularintapp/config/project-scratch-def.json +13 -0
- package/lib/templates/project/angularintapp/eslint.config.js +7 -0
- package/lib/templates/project/angularintapp/jest.config.js +6 -0
- package/lib/templates/project/angularintapp/package.json +46 -0
- package/lib/templates/project/angularintapp/scripts/apex/hello.apex +10 -0
- package/lib/templates/project/angularintapp/scripts/gitignore-templates.json +4 -0
- package/lib/templates/project/angularintapp/scripts/graphql-search.sh +191 -0
- package/lib/templates/project/angularintapp/scripts/org-setup-config-schema.mjs +103 -0
- package/lib/templates/project/angularintapp/scripts/org-setup-dev.mjs +87 -0
- package/lib/templates/project/angularintapp/scripts/org-setup-utils.mjs +369 -0
- package/lib/templates/project/angularintapp/scripts/org-setup-xml.mjs +182 -0
- package/lib/templates/project/angularintapp/scripts/org-setup.config.json +9 -0
- package/lib/templates/project/angularintapp/scripts/org-setup.mjs +1702 -0
- package/lib/templates/project/angularintapp/scripts/sf-project-setup.mjs +103 -0
- package/lib/templates/project/angularintapp/scripts/soql/account.soql +6 -0
- package/lib/templates/project/angularintapp/scripts/validate-org-setup-config.mjs +38 -0
- package/lib/templates/project/angularintapp/sfdx-project.json +12 -0
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package-lock.json +864 -807
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package-lock.json +857 -800
- package/lib/templates/uiBundles/angularbasic/angular.json +11 -7
- package/lib/templates/uiBundles/angularbasic/eslint.config.js +4 -0
- package/lib/templates/uiBundles/angularbasic/package-lock.json +351 -319
- package/lib/templates/uiBundles/angularbasic/package.json +4 -0
- package/lib/templates/uiBundles/angularbasic/src/app/api/data-client.service.spec.ts +184 -0
- package/lib/templates/uiBundles/angularbasic/src/app/api/data-client.service.ts +74 -0
- package/lib/templates/uiBundles/angularbasic/src/app/app.config.ts +15 -1
- package/lib/templates/uiBundles/angularbasic/src/app/app.routes.ts +6 -1
- package/lib/templates/uiBundles/angularbasic/src/app/app.ts +7 -2
- package/lib/templates/uiBundles/angularbasic/src/app/{layout → components/layout/app-layout}/app-layout.component.html +2 -1
- package/lib/templates/uiBundles/angularbasic/src/app/{layout → components/layout/app-layout}/app-layout.component.ts +9 -3
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/_field-size.scss +42 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/alert/alert.component.html +31 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/alert/alert.component.ts +53 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/button/button.component.html +18 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/button/button.component.scss +112 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/button/button.component.ts +57 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/card/card.component.scss +34 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/card/card.component.ts +110 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/collapsible/collapsible.component.html +10 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/collapsible/collapsible.component.ts +26 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/date-picker/date-picker.component.html +25 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/date-picker/date-picker.component.scss +36 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/date-picker/date-picker.component.ts +41 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/date-range-picker/date-range-picker.component.html +34 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/date-range-picker/date-range-picker.component.scss +33 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/date-range-picker/date-range-picker.component.ts +66 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/dialog/dialog.component.html +37 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/dialog/dialog.component.ts +55 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/field/field.component.html +21 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/field/field.component.ts +36 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/field-size.ts +8 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/input/input.component.html +19 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/input/input.component.scss +35 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/input/input.component.ts +36 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/label/label.component.html +3 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/label/label.component.ts +17 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/paginator/paginator.component.html +10 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/paginator/paginator.component.ts +37 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/popover/popover.component.html +41 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/popover/popover.component.ts +40 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/select/select.component.html +24 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/select/select.component.scss +35 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/select/select.component.ts +72 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/separator/separator.component.html +1 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/separator/separator.component.scss +23 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/separator/separator.component.ts +56 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/skeleton/skeleton.component.html +1 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/skeleton/skeleton.component.scss +28 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/skeleton/skeleton.component.ts +24 -0
- package/lib/templates/uiBundles/angularbasic/src/app/components/ui/spinner/spinner.component.ts +35 -0
- package/lib/templates/uiBundles/angularbasic/src/app/pages/home/home.component.ts +7 -1
- package/lib/templates/uiBundles/angularbasic/src/app/pages/not-found/not-found.component.ts +7 -1
- package/lib/templates/uiBundles/angularbasic/src/app/utils/async-data.ts +99 -0
- package/lib/templates/uiBundles/angularbasic/src/index.html +1 -0
- package/lib/templates/uiBundles/angularbasic/src/styles.scss +170 -0
- package/lib/templates/uiBundles/angularbasic/src/theme.scss +39 -0
- package/lib/templates/uiBundles/reactbasic/package-lock.json +857 -800
- package/lib/utils/types.d.ts +1 -1
- package/lib/utils/uiBundleTemplateUtils.js +10 -0
- package/lib/utils/uiBundleTemplateUtils.js.map +1 -1
- package/package.json +5 -3
- package/lib/templates/uiBundles/angularbasic/src/app/api/graphql-client.service.ts +0 -48
- package/lib/templates/uiBundles/angularbasic/src/app/app.css +0 -0
- package/lib/templates/uiBundles/angularbasic/src/styles.css +0 -12
- /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,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,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
|
+
}
|