@salesforce/ui-bundle-template-app-angular-template-b2e 11.60.0 → 11.62.1
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/dist/CHANGELOG.md +24 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/angular.json +2 -7
- package/dist/force-app/main/default/uiBundles/angularintapp/components.json +6 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/eslint.config.js +9 -1
- package/dist/force-app/main/default/uiBundles/angularintapp/package.json +16 -11
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/app.config.ts +4 -6
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/app.routes.ts +3 -2
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/alert/alert.html +9 -13
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/alert/alert.ts +16 -28
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/button/button.html +19 -10
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/button/button.ts +34 -25
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/card/card.ts +40 -50
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/collapsible/collapsible.html +38 -10
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/collapsible/collapsible.ts +6 -11
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/date-picker/date-picker.html +17 -22
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/date-picker/date-picker.ts +29 -21
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/date-range-picker/date-range-picker.html +16 -30
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/date-range-picker/date-range-picker.ts +39 -36
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/dialog/dialog.html +13 -30
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/dialog/dialog.ts +6 -21
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/dropdown-menu/dropdown-menu.html +20 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/dropdown-menu/dropdown-menu.ts +100 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/field/field.html +5 -11
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/field/field.ts +10 -18
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/field-appearance.ts +8 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/icon/icon.ts +62 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/input/input.html +32 -17
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/input/input.ts +57 -14
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/label/label.ts +8 -4
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/paginator/paginator.html +74 -10
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/paginator/paginator.ts +74 -18
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/paginator/types.ts +13 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/popover/popover.html +10 -38
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/popover/popover.ts +12 -15
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/select/select.html +34 -22
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/select/select.ts +25 -34
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/separator/separator.ts +11 -36
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/skeleton/skeleton.ts +5 -9
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/spinner/spinner.ts +14 -21
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/agentforce/conversation.html +1 -1
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/agentforce/conversation.ts +0 -3
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/breadcrumb/breadcrumb.html +4 -24
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/breadcrumb/breadcrumb.ts +3 -16
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/date-filter.ts +1 -1
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/date-range-filter.html +2 -1
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/date-range-filter.ts +6 -15
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/filter-field-wrapper.html +2 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/filter-field-wrapper.ts +2 -17
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/multi-select-filter.html +2 -1
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/numeric-range-filter.ts +3 -21
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/search-filter.html +3 -3
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/search-filter.ts +9 -13
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/select-filter.html +2 -5
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/select-filter.ts +1 -15
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/text-filter.html +2 -5
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/filters/text-filter.ts +3 -17
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/pagination/pagination.ts +4 -20
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/search-bar/search-bar.html +10 -59
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/search-bar/search-bar.ts +13 -93
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/sort-control/sort-control.html +3 -29
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/features/object-search/sort-control/sort-control.ts +5 -12
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/pages/account-detail/account-detail-page.html +1 -23
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/pages/account-detail/account-detail-page.ts +3 -23
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/pages/account-search/account-search-page.html +1 -19
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/pages/account-search/account-search-page.ts +8 -36
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/pages/home/home.html +15 -4
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/pages/home/home.spec.ts +8 -6
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/pages/home/home.ts +56 -4
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/alert/hlm-alert-action.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/alert/hlm-alert-description.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/alert/hlm-alert-title.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/alert/hlm-alert.ts +35 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/alert/index.ts +16 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/button/hlm-button.token.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/button/hlm-button.ts +72 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/button/index.ts +6 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/calendar/hlm-calendar-multi.ts +195 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/calendar/hlm-calendar-range.ts +194 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/calendar/hlm-calendar.ts +189 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/calendar/hlm-month-year-calendar.ts +119 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/calendar/index.ts +16 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/card/hlm-card-action.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/card/hlm-card-avatar.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/card/hlm-card-content.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/card/hlm-card-description.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/card/hlm-card-footer.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/card/hlm-card-header.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/card/hlm-card-title.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/card/hlm-card.token.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/card/hlm-card.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/card/index.ts +28 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/collapsible/hlm-collapsible-content.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/collapsible/hlm-collapsible-trigger.ts +9 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/collapsible/hlm-collapsible.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/collapsible/index.ts +13 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-date-multi-input.ts +104 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-date-picker-anchor.ts +23 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-date-picker-input.ts +118 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-date-picker-multi.token.ts +109 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-date-picker-multi.ts +220 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-date-picker-trigger.ts +104 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-date-picker.token.ts +69 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-date-picker.ts +203 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-date-range-input.ts +120 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-date-range-picker.token.ts +86 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-date-range-picker.ts +252 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-month-year-input.ts +105 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-month-year-picker.token.ts +89 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/hlm-month-year-picker.ts +196 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/date-picker/index.ts +38 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dialog/hlm-dialog-close.ts +9 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dialog/hlm-dialog-content.ts +74 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dialog/hlm-dialog-description.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dialog/hlm-dialog-footer.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dialog/hlm-dialog-header.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dialog/hlm-dialog-overlay.ts +27 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dialog/hlm-dialog-portal.ts +8 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dialog/hlm-dialog-title.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dialog/hlm-dialog-trigger.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dialog/hlm-dialog.service.ts +46 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dialog/hlm-dialog.ts +24 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dialog/index.ts +35 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-checkbox-indicator.ts +21 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-checkbox.ts +54 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-focus-on-hover.ts +35 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-group.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-item-sub-indicator.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-item.ts +42 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-label.ts +20 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-radio-indicator.ts +21 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-radio.ts +49 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-separator.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-shortcut.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-sub-trigger.ts +52 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-sub.ts +53 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-token.ts +26 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-trigger.ts +46 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/hlm-dropdown-menu.ts +57 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/dropdown-menu/index.ts +49 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/field/hlm-field-content.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/field/hlm-field-description.ts +53 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/field/hlm-field-error.ts +100 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/field/hlm-field-group.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/field/hlm-field-label.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/field/hlm-field-legend.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/field/hlm-field-separator.ts +24 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/field/hlm-field-set.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/field/hlm-field-title.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/field/hlm-field.ts +47 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/field/index.ts +34 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/input/hlm-input.ts +21 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/input/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/input-group/hlm-input-group-addon.ts +40 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/input-group/hlm-input-group-button.ts +47 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/input-group/hlm-input-group-input.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/input-group/hlm-input-group-text.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/input-group/hlm-input-group.ts +18 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/input-group/index.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/label/hlm-label.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/label/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/label/label.html +11 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/pagination/hlm-numbered-pagination-query-params.ts +191 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/pagination/hlm-numbered-pagination.ts +290 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/pagination/hlm-pagination-content.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/pagination/hlm-pagination-ellipsis.ts +27 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/pagination/hlm-pagination-item.ts +7 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/pagination/hlm-pagination-link.ts +51 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/pagination/hlm-pagination-next.ts +65 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/pagination/hlm-pagination-previous.ts +65 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/pagination/hlm-pagination.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/pagination/index.ts +31 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/popover/hlm-popover-content.ts +25 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/popover/hlm-popover-description.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/popover/hlm-popover-header.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/popover/hlm-popover-portal.ts +8 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/popover/hlm-popover-title.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/popover/hlm-popover-trigger.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/popover/hlm-popover.ts +23 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/popover/index.ts +25 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-content.ts +44 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-group.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-item.ts +36 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-label.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-multiple.ts +37 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-placeholder.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-portal.ts +8 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-scroll-down.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-scroll-up.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-separator.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-trigger.ts +59 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-value-template.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-value.ts +18 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-values-content.ts +9 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select-values.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/hlm-select.ts +37 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/select/index.ts +52 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/separator/hlm-separator.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/separator/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/skeleton/hlm-skeleton.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/skeleton/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/spinner/hlm-spinner.ts +26 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/spinner/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/utils/hlm.ts +313 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/utils/index.ts +2 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/shared/utils/provide-spartan-hlm.ts +34 -0
- package/dist/force-app/main/default/uiBundles/angularintapp/src/index.html +0 -1
- package/dist/force-app/main/default/uiBundles/angularintapp/src/{styles.scss → styles.css} +7 -38
- package/dist/force-app/main/default/uiBundles/angularintapp/tsconfig.json +4 -1
- package/dist/package-lock.json +2 -2
- package/dist/package.json +1 -1
- package/package.json +1 -1
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/_field-size.scss +0 -42
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/button/button.scss +0 -112
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/card/card.scss +0 -34
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/date-picker/date-picker.scss +0 -36
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/date-range-picker/date-range-picker.scss +0 -33
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/input/input.scss +0 -35
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/label/label.html +0 -3
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/select/select.scss +0 -35
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/separator/separator.html +0 -1
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/separator/separator.scss +0 -23
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/skeleton/skeleton.html +0 -1
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/components/ui/skeleton/skeleton.scss +0 -28
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/pages/account-detail/account-detail-page.scss +0 -7
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/pages/home/home-page.html +0 -18
- package/dist/force-app/main/default/uiBundles/angularintapp/src/app/pages/home/home-page.ts +0 -47
- package/dist/force-app/main/default/uiBundles/angularintapp/src/theme.scss +0 -39
|
@@ -4,20 +4,14 @@
|
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
6
|
import { ChangeDetectionStrategy, Component, inject, input } from "@angular/core";
|
|
7
|
-
import type { PageEvent } from "@angular/material/paginator";
|
|
8
7
|
import { PaginatorComponent } from "../../../components/ui/paginator/paginator";
|
|
8
|
+
import type { PageEvent } from "../../../components/ui/paginator/types";
|
|
9
9
|
import { ObjectSearchStateService } from "../object-search-state.service";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Cursor-pagination bridge. Feeds
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* State comes from the shared {@link ObjectSearchStateService} (`pageIndex`,
|
|
17
|
-
* `pageSize`); the hosting page supplies the cursor-derived inputs
|
|
18
|
-
* (`totalCount`, `hasNextPage`, `endCursor`) after each fetch. A next-page step
|
|
19
|
-
* needs the current `endCursor`; a previous step and page-size changes are
|
|
20
|
-
* handled entirely by the state service's cursor stack.
|
|
12
|
+
* Cursor-pagination bridge. Feeds shared cursor state into {@link PaginatorComponent}
|
|
13
|
+
* and translates its offset-style `(page)` event back into the cursor walk the
|
|
14
|
+
* state service understands.
|
|
21
15
|
*/
|
|
22
16
|
@Component({
|
|
23
17
|
selector: "app-pagination-controls",
|
|
@@ -26,26 +20,16 @@ import { ObjectSearchStateService } from "../object-search-state.service";
|
|
|
26
20
|
templateUrl: "./pagination.html",
|
|
27
21
|
})
|
|
28
22
|
export class PaginationControlsComponent {
|
|
29
|
-
/** Total row count from the latest fetch; drives the paginator's range label. */
|
|
30
23
|
readonly totalCount = input<number | undefined>(undefined);
|
|
31
|
-
/** Whether the API reports another page after the current one. */
|
|
32
24
|
readonly hasNextPage = input<boolean>(false);
|
|
33
|
-
/** `endCursor` from the latest page-info; forwarded to `goToNextPage`. */
|
|
34
25
|
readonly endCursor = input<string | undefined>(undefined);
|
|
35
|
-
/** Allowed page-size choices. */
|
|
36
26
|
readonly pageSizeOptions = input.required<readonly number[]>();
|
|
37
|
-
/** Disable navigation and the size select (e.g. while loading). */
|
|
38
27
|
readonly disabled = input<boolean>(false);
|
|
39
28
|
|
|
40
29
|
private readonly state = inject(ObjectSearchStateService);
|
|
41
30
|
protected readonly pageIndex = this.state.pageIndex;
|
|
42
31
|
protected readonly pageSize = this.state.pageSize;
|
|
43
32
|
|
|
44
|
-
/**
|
|
45
|
-
* Route Material's offset-style page event onto the cursor model: a page-size
|
|
46
|
-
* change resets pagination; a forward step walks the `endCursor`; a backward
|
|
47
|
-
* step pops the cursor stack.
|
|
48
|
-
*/
|
|
49
33
|
protected onPage(event: PageEvent): void {
|
|
50
34
|
if (event.pageSize !== this.pageSize()) {
|
|
51
35
|
this.state.setPageSize(event.pageSize);
|
|
@@ -1,59 +1,10 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
stroke-linejoin="round"
|
|
12
|
-
aria-hidden="true"
|
|
13
|
-
>
|
|
14
|
-
<circle cx="11" cy="11" r="8" />
|
|
15
|
-
<path d="m21 21-4.3-4.3" />
|
|
16
|
-
</svg>
|
|
17
|
-
<app-input
|
|
18
|
-
class="pl-9 block"
|
|
19
|
-
type="text"
|
|
20
|
-
[placeholder]="searchConfig().placeholder ?? ''"
|
|
21
|
-
[label]="searchConfig().label"
|
|
22
|
-
[(value)]="term"
|
|
23
|
-
/>
|
|
24
|
-
</div>
|
|
25
|
-
<app-popover [(open)]="popoverOpen" align="end">
|
|
26
|
-
<app-button
|
|
27
|
-
trigger
|
|
28
|
-
appearance="outlined"
|
|
29
|
-
[attr.aria-expanded]="popoverOpen()"
|
|
30
|
-
aria-label="Toggle filters"
|
|
31
|
-
class="gap-2"
|
|
32
|
-
>
|
|
33
|
-
<svg
|
|
34
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
35
|
-
class="h-4 w-4"
|
|
36
|
-
viewBox="0 0 24 24"
|
|
37
|
-
fill="none"
|
|
38
|
-
stroke="currentColor"
|
|
39
|
-
stroke-width="2"
|
|
40
|
-
stroke-linecap="round"
|
|
41
|
-
stroke-linejoin="round"
|
|
42
|
-
aria-hidden="true"
|
|
43
|
-
>
|
|
44
|
-
<path d="M3 6h18M7 12h10M10 18h4" />
|
|
45
|
-
</svg>
|
|
46
|
-
<span>Filters</span>
|
|
47
|
-
@if (nonSearchFilterCount() > 0) {
|
|
48
|
-
<span
|
|
49
|
-
class="inline-flex items-center justify-center h-5 min-w-5 rounded-full bg-primary text-primary-foreground text-xs px-1"
|
|
50
|
-
>
|
|
51
|
-
{{ nonSearchFilterCount() }}
|
|
52
|
-
</span>
|
|
53
|
-
}
|
|
54
|
-
</app-button>
|
|
55
|
-
<div class="p-3 min-w-72 max-w-96 space-y-3">
|
|
56
|
-
<ng-content select="[filters]" />
|
|
57
|
-
</div>
|
|
58
|
-
</app-popover>
|
|
59
|
-
</div>
|
|
1
|
+
<app-input
|
|
2
|
+
class="block"
|
|
3
|
+
type="search"
|
|
4
|
+
icon="search"
|
|
5
|
+
[label]="label()"
|
|
6
|
+
[placeholder]="placeholder()"
|
|
7
|
+
[ariaLabel]="ariaLabel()"
|
|
8
|
+
[id]="inputId()"
|
|
9
|
+
[(value)]="value"
|
|
10
|
+
/>
|
|
@@ -3,106 +3,26 @@
|
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
ChangeDetectionStrategy,
|
|
8
|
-
Component,
|
|
9
|
-
computed,
|
|
10
|
-
DestroyRef,
|
|
11
|
-
inject,
|
|
12
|
-
input,
|
|
13
|
-
type OnInit,
|
|
14
|
-
signal,
|
|
15
|
-
} from "@angular/core";
|
|
16
|
-
import { takeUntilDestroyed, toObservable } from "@angular/core/rxjs-interop";
|
|
17
|
-
import { debounceTime } from "rxjs/operators";
|
|
18
|
-
import { ButtonComponent } from "../../../components/ui/button/button";
|
|
6
|
+
import { ChangeDetectionStrategy, Component, input, model } from "@angular/core";
|
|
19
7
|
import { InputComponent } from "../../../components/ui/input/input";
|
|
20
|
-
import { PopoverComponent } from "../../../components/ui/popover/popover";
|
|
21
|
-
import { ObjectSearchStateService } from "../object-search-state.service";
|
|
22
|
-
import type { FilterFieldConfig } from "../utils/filter-utils";
|
|
23
|
-
|
|
24
|
-
/** How long to wait after the last keystroke before writing to state. */
|
|
25
|
-
const SEARCH_DEBOUNCE_MS = 300;
|
|
26
8
|
|
|
27
9
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* the
|
|
31
|
-
*
|
|
32
|
-
* Mirrors the React `SearchBar`, with the composed additions from the ground-
|
|
33
|
-
* truth example page (filter panel toggle). Filter components are NOT imported
|
|
34
|
-
* here — the hosting page projects them via the `[filters]` slot so the
|
|
35
|
-
* feature can pick which filters it renders.
|
|
36
|
-
*
|
|
37
|
-
* ## Usage
|
|
38
|
-
* ```html
|
|
39
|
-
* <app-search-bar [searchConfig]="searchCfg" [filterConfigs]="filterCfgs">
|
|
40
|
-
* <div filters>
|
|
41
|
-
* <app-text-filter .../>
|
|
42
|
-
* <app-select-filter .../>
|
|
43
|
-
* </div>
|
|
44
|
-
* </app-search-bar>
|
|
45
|
-
* ```
|
|
10
|
+
* Presentational search box: a text input with a leading search icon inside
|
|
11
|
+
* its border, purely controlled via `value` with no search state of its own.
|
|
12
|
+
* Reused by the Home landing form and by `app-search-filter` (which adds the
|
|
13
|
+
* debounce + shared-state wiring around it).
|
|
46
14
|
*/
|
|
47
15
|
@Component({
|
|
48
16
|
selector: "app-search-bar",
|
|
49
17
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
50
|
-
imports: [
|
|
18
|
+
imports: [InputComponent],
|
|
19
|
+
host: { class: "flex-1 block" },
|
|
51
20
|
templateUrl: "./search-bar.html",
|
|
52
21
|
})
|
|
53
|
-
export class SearchBarComponent
|
|
54
|
-
|
|
55
|
-
readonly
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
* filters exist, and reserved for a future filter-count badge.
|
|
60
|
-
*/
|
|
61
|
-
readonly filterConfigs = input<FilterFieldConfig[]>([]);
|
|
62
|
-
|
|
63
|
-
private readonly state = inject(ObjectSearchStateService);
|
|
64
|
-
private readonly destroyRef = inject(DestroyRef);
|
|
65
|
-
|
|
66
|
-
/** Local, debounced mirror of the search filter's `value`. */
|
|
67
|
-
protected readonly term = signal<string>("");
|
|
68
|
-
protected readonly popoverOpen = signal<boolean>(false);
|
|
69
|
-
|
|
70
|
-
/** Count of currently active filters minus the search itself (for the badge). */
|
|
71
|
-
protected readonly nonSearchFilterCount = computed(
|
|
72
|
-
() => this.state.filters().filter((f) => f.type !== "search").length,
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
constructor() {
|
|
76
|
-
// Required inputs are not yet resolved in the constructor, so the search
|
|
77
|
-
// config is read lazily inside the subscription (which emits after init).
|
|
78
|
-
toObservable(this.term)
|
|
79
|
-
.pipe(debounceTime(SEARCH_DEBOUNCE_MS), takeUntilDestroyed(this.destroyRef))
|
|
80
|
-
.subscribe((value) => {
|
|
81
|
-
const cfg = this.searchConfig();
|
|
82
|
-
if (value) {
|
|
83
|
-
this.state.setFilter(cfg.field, {
|
|
84
|
-
field: cfg.field,
|
|
85
|
-
label: cfg.label,
|
|
86
|
-
type: cfg.type,
|
|
87
|
-
value,
|
|
88
|
-
});
|
|
89
|
-
} else {
|
|
90
|
-
this.state.removeFilter(cfg.field);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
ngOnInit(): void {
|
|
96
|
-
// Seed the local term from any existing search filter (deep-link support).
|
|
97
|
-
// Done here (not the constructor) so the required `searchConfig` input is
|
|
98
|
-
// resolved before it is read.
|
|
99
|
-
const existing = this.state.filterFor(this.searchConfig().field);
|
|
100
|
-
if (existing?.value) {
|
|
101
|
-
this.term.set(existing.value);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
protected togglePopover(): void {
|
|
106
|
-
this.popoverOpen.set(!this.popoverOpen());
|
|
107
|
-
}
|
|
22
|
+
export class SearchBarComponent {
|
|
23
|
+
readonly value = model<string>("");
|
|
24
|
+
readonly placeholder = input<string>("");
|
|
25
|
+
readonly label = input<string>("");
|
|
26
|
+
readonly ariaLabel = input<string>("");
|
|
27
|
+
readonly inputId = input<string>("");
|
|
108
28
|
}
|
|
@@ -11,39 +11,13 @@
|
|
|
11
11
|
<app-button
|
|
12
12
|
appearance="text"
|
|
13
13
|
size="icon-sm"
|
|
14
|
-
[
|
|
14
|
+
[ariaLabel]="'Sort ' + (active.direction === 'ASC' ? 'descending' : 'ascending')"
|
|
15
15
|
(clicked)="toggleDirection()"
|
|
16
16
|
>
|
|
17
17
|
@if (active.direction === "ASC") {
|
|
18
|
-
<
|
|
19
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
20
|
-
class="h-4 w-4"
|
|
21
|
-
viewBox="0 0 24 24"
|
|
22
|
-
fill="none"
|
|
23
|
-
stroke="currentColor"
|
|
24
|
-
stroke-width="2"
|
|
25
|
-
stroke-linecap="round"
|
|
26
|
-
stroke-linejoin="round"
|
|
27
|
-
aria-hidden="true"
|
|
28
|
-
>
|
|
29
|
-
<path d="m5 12 7-7 7 7" />
|
|
30
|
-
<path d="M12 19V5" />
|
|
31
|
-
</svg>
|
|
18
|
+
<app-icon name="arrowUp" />
|
|
32
19
|
} @else {
|
|
33
|
-
<
|
|
34
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
35
|
-
class="h-4 w-4"
|
|
36
|
-
viewBox="0 0 24 24"
|
|
37
|
-
fill="none"
|
|
38
|
-
stroke="currentColor"
|
|
39
|
-
stroke-width="2"
|
|
40
|
-
stroke-linecap="round"
|
|
41
|
-
stroke-linejoin="round"
|
|
42
|
-
aria-hidden="true"
|
|
43
|
-
>
|
|
44
|
-
<path d="M12 5v14" />
|
|
45
|
-
<path d="m19 12-7 7-7-7" />
|
|
46
|
-
</svg>
|
|
20
|
+
<app-icon name="arrowDown" />
|
|
47
21
|
}
|
|
48
22
|
</app-button>
|
|
49
23
|
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { ChangeDetectionStrategy, Component, computed, inject, input } from "@angular/core";
|
|
7
7
|
import { ButtonComponent } from "../../../components/ui/button/button";
|
|
8
|
+
import { IconComponent } from "../../../components/ui/icon/icon";
|
|
8
9
|
import {
|
|
9
10
|
SelectComponent,
|
|
10
11
|
type AppSelectOption,
|
|
@@ -16,36 +17,28 @@ import type { SortFieldConfig, SortState } from "../utils/sort-utils";
|
|
|
16
17
|
const NONE_VALUE = "__none__";
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
|
-
* Sort field + direction toggle.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* via `setSort`. Choosing a field applies ASC by default; the direction button
|
|
23
|
-
* flips ASC/DESC and only appears while a sort is active. Selecting `Default`
|
|
24
|
-
* clears the sort (`setSort(null)`).
|
|
20
|
+
* Sort field + direction toggle. Choosing a field applies ASC by default; the
|
|
21
|
+
* direction button flips ASC/DESC and only appears while a sort is active.
|
|
22
|
+
* Selecting `Default` clears the sort (`setSort(null)`).
|
|
25
23
|
*/
|
|
26
24
|
@Component({
|
|
27
25
|
selector: "app-sort-control",
|
|
28
26
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
29
|
-
imports: [ButtonComponent, SelectComponent],
|
|
27
|
+
imports: [ButtonComponent, IconComponent, SelectComponent],
|
|
30
28
|
templateUrl: "./sort-control.html",
|
|
31
29
|
})
|
|
32
30
|
export class SortControlComponent {
|
|
33
|
-
/** Sortable fields to expose in the select. */
|
|
34
31
|
readonly sortFields = input.required<SortFieldConfig[]>();
|
|
35
|
-
/** Override for the leading label (default `Sort by`). */
|
|
36
32
|
readonly label = input<string>("Sort by");
|
|
37
33
|
|
|
38
34
|
private readonly state = inject(ObjectSearchStateService);
|
|
39
|
-
/** Current sort state from the shared state service. */
|
|
40
35
|
protected readonly sort = this.state.sort;
|
|
41
36
|
|
|
42
|
-
/** Select options — the `Default` sentinel plus one per sortable field. */
|
|
43
37
|
protected readonly options = computed<AppSelectOption[]>(() => [
|
|
44
38
|
{ value: NONE_VALUE, label: "Default" },
|
|
45
39
|
...this.sortFields().map((c) => ({ value: c.field, label: c.label })),
|
|
46
40
|
]);
|
|
47
41
|
|
|
48
|
-
/** Value shown in the select — either the current field or the sentinel. */
|
|
49
42
|
protected readonly selectedValue = computed(() => this.sort()?.field ?? NONE_VALUE);
|
|
50
43
|
|
|
51
44
|
protected onFieldChange(field: string): void {
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
/>
|
|
8
8
|
|
|
9
9
|
@if (loading()) {
|
|
10
|
-
<!-- Loading state -->
|
|
11
10
|
<app-skeleton class="h-8 w-56 mb-4" />
|
|
12
11
|
<app-card>
|
|
13
12
|
<app-card-content class="space-y-8">
|
|
@@ -36,7 +35,6 @@
|
|
|
36
35
|
</app-card-content>
|
|
37
36
|
</app-card>
|
|
38
37
|
} @else if (error()) {
|
|
39
|
-
<!-- Error state -->
|
|
40
38
|
<app-alert
|
|
41
39
|
variant="destructive"
|
|
42
40
|
icon="error"
|
|
@@ -48,25 +46,9 @@
|
|
|
48
46
|
<app-button appearance="outlined" (clicked)="reload()">Retry</app-button>
|
|
49
47
|
</div>
|
|
50
48
|
} @else if (notFound()) {
|
|
51
|
-
<!-- Not found state -->
|
|
52
49
|
<app-card>
|
|
53
50
|
<app-card-content class="flex flex-col items-center justify-center py-16 text-center">
|
|
54
|
-
<
|
|
55
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
56
|
-
class="size-12 text-muted-foreground mb-4"
|
|
57
|
-
viewBox="0 0 24 24"
|
|
58
|
-
fill="none"
|
|
59
|
-
stroke="currentColor"
|
|
60
|
-
stroke-width="2"
|
|
61
|
-
stroke-linecap="round"
|
|
62
|
-
stroke-linejoin="round"
|
|
63
|
-
aria-hidden="true"
|
|
64
|
-
>
|
|
65
|
-
<path d="M12 17h.01" />
|
|
66
|
-
<path d="M10.1 9a2.4 2.4 0 0 1 3.9 1.9c0 1.5-2 2-2 3" />
|
|
67
|
-
<path d="M14.5 4.5 20 10l-2 2" />
|
|
68
|
-
<path d="M4 4h9l7 7v9a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1Z" />
|
|
69
|
-
</svg>
|
|
51
|
+
<app-icon name="notFound" size="3rem" class="text-muted-foreground mb-4" />
|
|
70
52
|
<h2 class="text-lg font-semibold mb-1">Account not found</h2>
|
|
71
53
|
<p class="text-sm text-muted-foreground mb-6">
|
|
72
54
|
The account you're looking for doesn't exist or may have been deleted.
|
|
@@ -75,7 +57,6 @@
|
|
|
75
57
|
</app-card-content>
|
|
76
58
|
</app-card>
|
|
77
59
|
} @else if (account()) {
|
|
78
|
-
<!-- Content -->
|
|
79
60
|
<h1 class="text-2xl font-bold mb-4">Account: {{ title() }}</h1>
|
|
80
61
|
|
|
81
62
|
<app-card>
|
|
@@ -100,7 +81,6 @@
|
|
|
100
81
|
|
|
101
82
|
<app-separator />
|
|
102
83
|
|
|
103
|
-
<!-- Additional Information -->
|
|
104
84
|
<app-collapsible title="Additional Information" [(open)]="additionalOpen">
|
|
105
85
|
<div class="space-y-4">
|
|
106
86
|
@for (row of additionalRows(); track $index) {
|
|
@@ -122,7 +102,6 @@
|
|
|
122
102
|
<div class="space-y-4"></div>
|
|
123
103
|
<app-separator />
|
|
124
104
|
|
|
125
|
-
<!-- Address Information -->
|
|
126
105
|
<app-collapsible title="Address Information" [(open)]="addressOpen">
|
|
127
106
|
<div class="grid grid-cols-2 gap-x-8 gap-y-4">
|
|
128
107
|
<div>
|
|
@@ -145,7 +124,6 @@
|
|
|
145
124
|
</app-collapsible>
|
|
146
125
|
<div class="space-y-4"></div>
|
|
147
126
|
<app-separator />
|
|
148
|
-
<!-- System Information -->
|
|
149
127
|
<app-collapsible title="System Information" [(open)]="systemOpen">
|
|
150
128
|
<div class="grid grid-cols-2 gap-x-8 gap-y-4">
|
|
151
129
|
<div>
|
|
@@ -7,16 +7,13 @@ import { ChangeDetectionStrategy, Component, computed, inject, signal } from "@a
|
|
|
7
7
|
import { ActivatedRoute, Router } from "@angular/router";
|
|
8
8
|
import { toSignal } from "@angular/core/rxjs-interop";
|
|
9
9
|
import { map } from "rxjs/operators";
|
|
10
|
-
// Base-app UI wrappers, inherited (not recreated) by this feature. Post-compose
|
|
11
|
-
// they land at uiBundles/<target>/src/app/components/ui/..., three levels up from this
|
|
12
|
-
// page folder (app/features/account-search/ -> app/components/ui/).
|
|
13
10
|
import { AlertComponent } from "../../components/ui/alert/alert";
|
|
11
|
+
import { IconComponent } from "../../components/ui/icon/icon";
|
|
14
12
|
import { ButtonComponent } from "../../components/ui/button/button";
|
|
15
13
|
import { CardComponent, CardContentComponent } from "../../components/ui/card/card";
|
|
16
14
|
import { CollapsibleComponent } from "../../components/ui/collapsible/collapsible";
|
|
17
15
|
import { SeparatorComponent } from "../../components/ui/separator/separator";
|
|
18
16
|
import { SkeletonComponent } from "../../components/ui/skeleton/skeleton";
|
|
19
|
-
// Object-search feature building blocks (Waves 1-2), two levels up.
|
|
20
17
|
import { ObjectBreadcrumbComponent } from "../../features/object-search/breadcrumb/breadcrumb";
|
|
21
18
|
import { createAsyncData } from "../../utils/async-data";
|
|
22
19
|
import {
|
|
@@ -26,13 +23,11 @@ import {
|
|
|
26
23
|
} from "../../features/object-search/utils/field-utils";
|
|
27
24
|
import { AccountSearchService } from "../../api/account/account-search.service";
|
|
28
25
|
|
|
29
|
-
/** `Intl` options for the created / last-modified timestamps (matches React). */
|
|
30
26
|
const DATE_TIME_OPTIONS: Intl.DateTimeFormatOptions = {
|
|
31
27
|
dateStyle: "medium",
|
|
32
28
|
timeStyle: "short",
|
|
33
29
|
};
|
|
34
30
|
|
|
35
|
-
/** A `{ label, value }` pair rendered in a field grid. */
|
|
36
31
|
interface Field {
|
|
37
32
|
label: string;
|
|
38
33
|
value: string | null;
|
|
@@ -40,21 +35,12 @@ interface Field {
|
|
|
40
35
|
telephone?: boolean;
|
|
41
36
|
}
|
|
42
37
|
|
|
43
|
-
/**
|
|
44
|
-
* Account detail page. The Angular analogue of the React
|
|
45
|
-
* `AccountObjectDetailPage`: a breadcrumb plus a card of collapsible sections
|
|
46
|
-
* (top fields, Additional / Address / System information), with loading,
|
|
47
|
-
* error, and not-found states.
|
|
48
|
-
*
|
|
49
|
-
* The record id comes from the `:recordId` route param (reactively, so a
|
|
50
|
-
* client-side nav between two detail routes refetches). Data flows through
|
|
51
|
-
* {@link createAsyncData} for latest-wins fetching.
|
|
52
|
-
*/
|
|
53
38
|
@Component({
|
|
54
39
|
selector: "app-account-detail-page",
|
|
55
40
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
56
41
|
imports: [
|
|
57
42
|
AlertComponent,
|
|
43
|
+
IconComponent,
|
|
58
44
|
ButtonComponent,
|
|
59
45
|
CardComponent,
|
|
60
46
|
CardContentComponent,
|
|
@@ -64,14 +50,13 @@ interface Field {
|
|
|
64
50
|
ObjectBreadcrumbComponent,
|
|
65
51
|
],
|
|
66
52
|
templateUrl: "./account-detail-page.html",
|
|
67
|
-
styleUrl: "./account-detail-page.scss",
|
|
68
53
|
})
|
|
69
54
|
export class AccountDetailPageComponent {
|
|
70
55
|
private readonly service = inject(AccountSearchService);
|
|
71
56
|
private readonly route = inject(ActivatedRoute);
|
|
72
57
|
private readonly router = inject(Router);
|
|
73
58
|
|
|
74
|
-
|
|
59
|
+
// Reactive param so a client-side nav between two detail routes refetches.
|
|
75
60
|
private readonly recordId = toSignal(
|
|
76
61
|
this.route.paramMap.pipe(map((p) => p.get("recordId") ?? "")),
|
|
77
62
|
{ initialValue: this.route.snapshot.paramMap.get("recordId") ?? "" },
|
|
@@ -84,15 +69,12 @@ export class AccountDetailPageComponent {
|
|
|
84
69
|
protected readonly account = this.result.data;
|
|
85
70
|
protected readonly loading = this.result.loading;
|
|
86
71
|
protected readonly error = this.result.error;
|
|
87
|
-
/** True once a resolved fetch returned no record (distinct from loading). */
|
|
88
72
|
protected readonly notFound = computed(() => !this.loading() && !this.error() && !this.account());
|
|
89
73
|
|
|
90
|
-
/** Per-section collapsible open state (all default open, matching React). */
|
|
91
74
|
protected readonly additionalOpen = signal<boolean>(true);
|
|
92
75
|
protected readonly addressOpen = signal<boolean>(true);
|
|
93
76
|
protected readonly systemOpen = signal<boolean>(true);
|
|
94
77
|
|
|
95
|
-
/** Placeholder rows for skeleton field grids. */
|
|
96
78
|
protected readonly skeletonRows = [0, 1, 2];
|
|
97
79
|
|
|
98
80
|
// -- Breadcrumb leaf label -------------------------------------------------
|
|
@@ -184,12 +166,10 @@ export class AccountDetailPageComponent {
|
|
|
184
166
|
return [fieldValue(name ?? null), formatted].filter(Boolean).join(" ") || null;
|
|
185
167
|
}
|
|
186
168
|
|
|
187
|
-
/** Navigate back to the previous view (mirrors the React `navigate(-1)`). */
|
|
188
169
|
protected goBack(): void {
|
|
189
170
|
void this.router.navigate(["/accounts"]);
|
|
190
171
|
}
|
|
191
172
|
|
|
192
|
-
/** Full page reload retry, matching the React "Retry" affordance. */
|
|
193
173
|
protected reload(): void {
|
|
194
174
|
window.location.reload();
|
|
195
175
|
}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
<h1 class="text-2xl font-bold mb-4">Search Accounts</h1>
|
|
5
5
|
|
|
6
6
|
<div class="flex flex-col lg:flex-row gap-6">
|
|
7
|
-
<!-- Sidebar — Filter Panel -->
|
|
8
7
|
<aside class="w-full lg:w-80 shrink-0">
|
|
9
8
|
<app-collapsible title="Filters" [(open)]="filtersOpen">
|
|
10
9
|
<div class="space-y-1">
|
|
@@ -19,7 +18,6 @@
|
|
|
19
18
|
</app-collapsible>
|
|
20
19
|
</aside>
|
|
21
20
|
|
|
22
|
-
<!-- Main area — Sort + Results -->
|
|
23
21
|
<div class="flex-1 min-w-0">
|
|
24
22
|
<div class="flex flex-wrap items-center gap-2 mb-4">
|
|
25
23
|
<app-sort-control [sortFields]="sortConfigs" />
|
|
@@ -74,22 +72,7 @@
|
|
|
74
72
|
</ul>
|
|
75
73
|
} @else {
|
|
76
74
|
<div class="flex flex-col items-center justify-center py-16 text-center">
|
|
77
|
-
<
|
|
78
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
79
|
-
class="size-12 text-muted-foreground mb-4"
|
|
80
|
-
viewBox="0 0 24 24"
|
|
81
|
-
fill="none"
|
|
82
|
-
stroke="currentColor"
|
|
83
|
-
stroke-width="2"
|
|
84
|
-
stroke-linecap="round"
|
|
85
|
-
stroke-linejoin="round"
|
|
86
|
-
aria-hidden="true"
|
|
87
|
-
>
|
|
88
|
-
<path d="m13.5 8.5-5 5" />
|
|
89
|
-
<path d="m8.5 8.5 5 5" />
|
|
90
|
-
<circle cx="11" cy="11" r="8" />
|
|
91
|
-
<path d="m21 21-4.3-4.3" />
|
|
92
|
-
</svg>
|
|
75
|
+
<app-icon name="noResults" size="3rem" class="text-muted-foreground mb-4" />
|
|
93
76
|
<h2 class="text-lg font-semibold mb-1">No accounts found</h2>
|
|
94
77
|
<p class="text-sm text-muted-foreground">
|
|
95
78
|
Try adjusting your filters or search criteria.
|
|
@@ -98,7 +81,6 @@
|
|
|
98
81
|
}
|
|
99
82
|
</div>
|
|
100
83
|
|
|
101
|
-
<!-- Pagination — always visible, disabled while loading or on error -->
|
|
102
84
|
<app-pagination-controls
|
|
103
85
|
[totalCount]="totalCount()"
|
|
104
86
|
[hasNextPage]="hasNextPage()"
|