@salesforce/ui-bundle-template-app-angular-template-b2x 11.59.2 → 11.62.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/dist/CHANGELOG.md +24 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/angular.json +2 -7
- package/dist/force-app/main/default/uiBundles/angularextapp/components.json +6 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/eslint.config.js +9 -1
- package/dist/force-app/main/default/uiBundles/angularextapp/package.json +17 -12
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/app.config.ts +4 -6
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/app.routes.ts +2 -2
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/alert/alert.html +9 -13
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/alert/alert.ts +16 -28
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/button/button.html +19 -10
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/button/button.ts +34 -25
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/card/card.ts +40 -50
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/collapsible/collapsible.html +38 -10
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/collapsible/collapsible.ts +6 -11
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/date-picker/date-picker.html +17 -22
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/date-picker/date-picker.ts +29 -21
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/date-range-picker/date-range-picker.html +16 -30
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/date-range-picker/date-range-picker.ts +39 -36
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/dialog/dialog.html +13 -30
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/dialog/dialog.ts +6 -21
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/dropdown-menu/dropdown-menu.html +20 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/dropdown-menu/dropdown-menu.ts +100 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/field/field.html +5 -11
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/field/field.ts +10 -18
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/field-appearance.ts +8 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/icon/icon.ts +62 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/input/input.html +32 -17
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/input/input.ts +57 -14
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/label/label.ts +8 -4
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/paginator/paginator.html +74 -10
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/paginator/paginator.ts +74 -18
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/paginator/types.ts +13 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/popover/popover.html +10 -38
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/popover/popover.ts +12 -15
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/select/select.html +34 -22
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/select/select.ts +25 -34
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/separator/separator.ts +11 -36
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/skeleton/skeleton.ts +5 -9
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/spinner/spinner.ts +14 -21
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/authentication/auth-form/auth-form.html +2 -3
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/authentication/menu/auth-menu/auth-menu.html +31 -21
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/authentication/menu/auth-menu/auth-menu.ts +6 -18
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/authentication/session/session.html +2 -2
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/authentication/submit-button/submit-button.html +8 -4
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/authentication/submit-button/submit-button.ts +4 -16
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/breadcrumb/breadcrumb.html +4 -24
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/breadcrumb/breadcrumb.ts +3 -16
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/date-filter.ts +1 -1
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/date-range-filter.html +2 -1
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/date-range-filter.ts +6 -15
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/filter-field-wrapper.html +2 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/filter-field-wrapper.ts +2 -17
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/multi-select-filter.html +2 -1
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/numeric-range-filter.ts +3 -21
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/search-filter.html +3 -3
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/search-filter.ts +9 -13
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/select-filter.html +2 -5
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/select-filter.ts +1 -15
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/text-filter.html +2 -5
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/filters/text-filter.ts +3 -17
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/pagination/pagination.ts +4 -20
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/search-bar/search-bar.html +10 -59
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/search-bar/search-bar.ts +13 -93
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/sort-control/sort-control.html +3 -29
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/object-search/sort-control/sort-control.ts +5 -12
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/pages/account-detail/account-detail-page.html +1 -23
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/pages/account-detail/account-detail-page.ts +3 -23
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/pages/account-search/account-search-page.html +1 -19
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/pages/account-search/account-search-page.ts +8 -36
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/pages/home/home.html +15 -4
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/pages/home/home.spec.ts +8 -6
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/pages/home/home.ts +56 -4
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/alert/src/index.ts +16 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/alert/src/lib/hlm-alert-action.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/alert/src/lib/hlm-alert-description.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/alert/src/lib/hlm-alert-title.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/alert/src/lib/hlm-alert.ts +35 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/button/src/index.ts +6 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/button/src/lib/hlm-button.token.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/button/src/lib/hlm-button.ts +72 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/calendar/src/index.ts +16 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/calendar/src/lib/hlm-calendar-multi.ts +195 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/calendar/src/lib/hlm-calendar-range.ts +194 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/calendar/src/lib/hlm-calendar.ts +189 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/calendar/src/lib/hlm-month-year-calendar.ts +119 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/card/src/index.ts +28 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/card/src/lib/hlm-card-action.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/card/src/lib/hlm-card-avatar.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/card/src/lib/hlm-card-content.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/card/src/lib/hlm-card-description.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/card/src/lib/hlm-card-footer.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/card/src/lib/hlm-card-header.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/card/src/lib/hlm-card-title.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/card/src/lib/hlm-card.token.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/card/src/lib/hlm-card.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/collapsible/src/index.ts +13 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/collapsible/src/lib/hlm-collapsible-content.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/collapsible/src/lib/hlm-collapsible-trigger.ts +9 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/collapsible/src/lib/hlm-collapsible.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/index.ts +38 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-date-multi-input.ts +104 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-date-picker-anchor.ts +23 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-date-picker-input.ts +118 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-date-picker-multi.token.ts +109 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-date-picker-multi.ts +220 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-date-picker-trigger.ts +104 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-date-picker.token.ts +69 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-date-picker.ts +203 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-date-range-input.ts +120 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-date-range-picker.token.ts +86 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-date-range-picker.ts +252 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-month-year-input.ts +105 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-month-year-picker.token.ts +89 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/date-picker/src/lib/hlm-month-year-picker.ts +196 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dialog/src/index.ts +35 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dialog/src/lib/hlm-dialog-close.ts +9 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dialog/src/lib/hlm-dialog-content.ts +74 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dialog/src/lib/hlm-dialog-description.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dialog/src/lib/hlm-dialog-footer.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dialog/src/lib/hlm-dialog-header.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dialog/src/lib/hlm-dialog-overlay.ts +27 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dialog/src/lib/hlm-dialog-portal.ts +8 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dialog/src/lib/hlm-dialog-title.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dialog/src/lib/hlm-dialog-trigger.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dialog/src/lib/hlm-dialog.service.ts +46 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dialog/src/lib/hlm-dialog.ts +24 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/index.ts +49 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-checkbox-indicator.ts +21 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-checkbox.ts +54 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-focus-on-hover.ts +35 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-group.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-item-sub-indicator.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-item.ts +42 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-label.ts +20 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-radio-indicator.ts +21 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-radio.ts +49 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-separator.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-shortcut.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-sub-trigger.ts +52 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-sub.ts +53 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-token.ts +26 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu-trigger.ts +46 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/dropdown-menu/src/lib/hlm-dropdown-menu.ts +57 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/field/src/index.ts +34 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/field/src/lib/hlm-field-content.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/field/src/lib/hlm-field-description.ts +53 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/field/src/lib/hlm-field-error.ts +100 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/field/src/lib/hlm-field-group.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/field/src/lib/hlm-field-label.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/field/src/lib/hlm-field-legend.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/field/src/lib/hlm-field-separator.ts +24 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/field/src/lib/hlm-field-set.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/field/src/lib/hlm-field-title.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/field/src/lib/hlm-field.ts +47 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/input/src/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/input/src/lib/hlm-input.ts +21 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/input-group/src/index.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/input-group/src/lib/hlm-input-group-addon.ts +40 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/input-group/src/lib/hlm-input-group-button.ts +47 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/input-group/src/lib/hlm-input-group-input.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/input-group/src/lib/hlm-input-group-text.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/input-group/src/lib/hlm-input-group.ts +18 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/label/label.html +11 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/label/src/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/label/src/lib/hlm-label.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/pagination/src/index.ts +31 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/pagination/src/lib/hlm-numbered-pagination-query-params.ts +191 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/pagination/src/lib/hlm-numbered-pagination.ts +290 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/pagination/src/lib/hlm-pagination-content.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/pagination/src/lib/hlm-pagination-ellipsis.ts +27 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/pagination/src/lib/hlm-pagination-item.ts +7 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/pagination/src/lib/hlm-pagination-link.ts +51 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/pagination/src/lib/hlm-pagination-next.ts +65 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/pagination/src/lib/hlm-pagination-previous.ts +65 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/pagination/src/lib/hlm-pagination.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/popover/src/index.ts +25 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/popover/src/lib/hlm-popover-content.ts +25 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/popover/src/lib/hlm-popover-description.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/popover/src/lib/hlm-popover-header.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/popover/src/lib/hlm-popover-portal.ts +8 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/popover/src/lib/hlm-popover-title.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/popover/src/lib/hlm-popover-trigger.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/popover/src/lib/hlm-popover.ts +23 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/index.ts +52 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-content.ts +44 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-group.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-item.ts +36 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-label.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-multiple.ts +37 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-placeholder.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-portal.ts +8 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-scroll-down.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-scroll-up.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-separator.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-trigger.ts +59 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-value-template.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-value.ts +18 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-values-content.ts +9 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select-values.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/select/src/lib/hlm-select.ts +37 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/separator/src/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/separator/src/lib/hlm-separator.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/skeleton/src/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/skeleton/src/lib/hlm-skeleton.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/spinner/src/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/spinner/src/lib/hlm-spinner.ts +26 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/utils/src/index.ts +2 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/utils/src/lib/hlm.ts +313 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spartan/utils/src/lib/provide-spartan-hlm.ts +34 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/index.html +0 -1
- package/dist/force-app/main/default/uiBundles/angularextapp/src/{styles.scss → styles.css} +7 -38
- package/dist/force-app/main/default/uiBundles/angularextapp/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/angularextapp/src/app/components/ui/_field-size.scss +0 -42
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/button/button.scss +0 -112
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/card/card.scss +0 -34
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/date-picker/date-picker.scss +0 -36
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/date-range-picker/date-range-picker.scss +0 -33
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/input/input.scss +0 -35
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/label/label.html +0 -3
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/select/select.scss +0 -35
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/separator/separator.html +0 -1
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/separator/separator.scss +0 -23
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/skeleton/skeleton.html +0 -1
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/skeleton/skeleton.scss +0 -28
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/features/authentication/submit-button/submit-button.scss +0 -17
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/pages/account-detail/account-detail-page.scss +0 -7
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/pages/home/home-page.html +0 -18
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/pages/home/home-page.ts +0 -47
- package/dist/force-app/main/default/uiBundles/angularextapp/src/theme.scss +0 -39
|
@@ -3,54 +3,29 @@
|
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
computed,
|
|
11
|
-
input,
|
|
12
|
-
} from '@angular/core';
|
|
13
|
-
import { MatDivider } from '@angular/material/divider';
|
|
6
|
+
import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
7
|
+
import { BrnSeparator } from '@spartan-ng/brain/separator';
|
|
8
|
+
import { hlmSeparatorClass } from '@spartan-ng/styles/separator';
|
|
9
|
+
import { classes } from '@spartan-ng/styles/utils';
|
|
14
10
|
|
|
15
|
-
/** Layout axis of the separator line. */
|
|
16
11
|
export type AppSeparatorOrientation = 'horizontal' | 'vertical';
|
|
17
12
|
|
|
18
|
-
const BASE_CLASSES = 'shrink-0';
|
|
19
|
-
const ORIENTATION_CLASSES: Record<AppSeparatorOrientation, string> = {
|
|
20
|
-
horizontal: 'block w-full',
|
|
21
|
-
vertical: 'self-stretch',
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Divider built on Material's `mat-divider`. `decorative` (default) hides the
|
|
26
|
-
* host from assistive tech (`role="none"`); when false it exposes
|
|
27
|
-
* `role="separator"` + `aria-orientation`. The inner `mat-divider` is marked
|
|
28
|
-
* `role="presentation"` so it never announces a duplicate separator.
|
|
29
|
-
*/
|
|
30
13
|
@Component({
|
|
31
14
|
selector: 'app-separator',
|
|
32
15
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
33
|
-
|
|
34
|
-
templateUrl: './separator.html',
|
|
35
|
-
styleUrl: './separator.scss',
|
|
16
|
+
hostDirectives: [{ directive: BrnSeparator, inputs: ['orientation', 'decorative'] }],
|
|
36
17
|
host: {
|
|
37
18
|
'data-slot': 'separator',
|
|
38
|
-
'[attr.data-orientation]': 'orientation()',
|
|
39
|
-
'[attr.role]': "decorative() ? 'none' : 'separator'",
|
|
40
|
-
'[attr.aria-orientation]':
|
|
41
|
-
"decorative() ? null : (orientation() === 'vertical' ? 'vertical' : 'horizontal')",
|
|
42
|
-
'[class]': 'hostClass()',
|
|
43
19
|
},
|
|
20
|
+
template: '',
|
|
44
21
|
})
|
|
45
22
|
export class SeparatorComponent {
|
|
46
23
|
readonly orientation = input<AppSeparatorOrientation>('horizontal');
|
|
47
24
|
readonly decorative = input(true, { transform: booleanAttribute });
|
|
48
|
-
/** Adds Material's horizontal inset margin so the line doesn't run edge-to-edge. */
|
|
49
|
-
readonly inset = input(false, { transform: booleanAttribute });
|
|
50
25
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
() => `${BASE_CLASSES} ${ORIENTATION_CLASSES[this.orientation()]}`,
|
|
55
|
-
);
|
|
26
|
+
constructor() {
|
|
27
|
+
classes(() => hlmSeparatorClass);
|
|
28
|
+
}
|
|
56
29
|
}
|
|
30
|
+
|
|
31
|
+
export const SeparatorImports = [SeparatorComponent] as const;
|
|
@@ -4,21 +4,17 @@
|
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
6
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
7
|
+
import { HlmSkeleton } from '@spartan-ng/styles/skeleton';
|
|
7
8
|
|
|
8
|
-
/**
|
|
9
|
-
* Loading skeleton — a pulsing block sized by host `class` utilities (e.g.
|
|
10
|
-
* `class="h-4 w-32"`); it has no intrinsic size, so always set width/height.
|
|
11
|
-
* `aria-hidden`, so announce loading via the container's `aria-busy`.
|
|
12
|
-
*/
|
|
13
9
|
@Component({
|
|
14
10
|
selector: 'app-skeleton',
|
|
15
11
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
16
|
-
|
|
17
|
-
styleUrl: './skeleton.scss',
|
|
12
|
+
hostDirectives: [HlmSkeleton],
|
|
18
13
|
host: {
|
|
19
|
-
'data-slot': 'skeleton',
|
|
20
14
|
'aria-hidden': 'true',
|
|
21
|
-
class: 'bg-accent rounded-md',
|
|
22
15
|
},
|
|
16
|
+
template: '<ng-content />',
|
|
23
17
|
})
|
|
24
18
|
export class SkeletonComponent {}
|
|
19
|
+
|
|
20
|
+
export const SkeletonImports = [SkeletonComponent] as const;
|
package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/spinner/spinner.ts
CHANGED
|
@@ -4,32 +4,25 @@
|
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
6
|
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
7
|
-
import {
|
|
7
|
+
import { HlmSpinnerImports } from '@spartan-ng/styles/spinner';
|
|
8
|
+
import { classes } from '@spartan-ng/styles/utils';
|
|
8
9
|
|
|
9
|
-
/**
|
|
10
|
-
* Thin wrapper over Material's `mat-progress-spinner`. Defaults to an
|
|
11
|
-
* indeterminate 24px spinner. `ariaLabel` names the `role="progressbar"`.
|
|
12
|
-
*/
|
|
13
10
|
@Component({
|
|
14
11
|
selector: 'app-spinner',
|
|
12
|
+
imports: [HlmSpinnerImports],
|
|
15
13
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
[value]="value()"
|
|
22
|
-
[attr.aria-label]="ariaLabel()"
|
|
23
|
-
/>
|
|
24
|
-
`,
|
|
14
|
+
host: {
|
|
15
|
+
role: 'status',
|
|
16
|
+
'[attr.aria-label]': 'ariaLabel()',
|
|
17
|
+
},
|
|
18
|
+
template: `<hlm-spinner />`,
|
|
25
19
|
})
|
|
26
20
|
export class SpinnerComponent {
|
|
27
|
-
readonly
|
|
28
|
-
readonly mode = input<ProgressSpinnerMode>('indeterminate');
|
|
21
|
+
public readonly ariaLabel = input<string>('Loading', { alias: 'aria-label' });
|
|
29
22
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
/** Accessible name announced by assistive tech. */
|
|
34
|
-
readonly ariaLabel = input<string>('Loading', { alias: 'aria-label' });
|
|
23
|
+
constructor() {
|
|
24
|
+
classes(() => 'text-[length:--spacing(4)]');
|
|
25
|
+
}
|
|
35
26
|
}
|
|
27
|
+
|
|
28
|
+
export const SpinnerImports = [SpinnerComponent] as const;
|
|
@@ -14,8 +14,7 @@
|
|
|
14
14
|
</app-status-alert>
|
|
15
15
|
} } @if (success()) {
|
|
16
16
|
<app-status-alert variant="success" [message]="success()!" />
|
|
17
|
-
}
|
|
18
|
-
|
|
17
|
+
} @if (!showAuthAlert()) {
|
|
19
18
|
<form (ngSubmit)="onSubmit()">
|
|
20
19
|
<ng-content />
|
|
21
20
|
<app-submit-button
|
|
@@ -29,6 +28,6 @@
|
|
|
29
28
|
|
|
30
29
|
@if (footer(); as f) {
|
|
31
30
|
<app-footer-link [text]="f.text ?? ''" [to]="f.link" [linkText]="f.linkText" />
|
|
32
|
-
}
|
|
31
|
+
} }
|
|
33
32
|
</div>
|
|
34
33
|
</app-card-layout>
|
|
@@ -1,26 +1,36 @@
|
|
|
1
1
|
@if (loading()) {
|
|
2
2
|
<app-skeleton class="size-8 rounded-full" />
|
|
3
3
|
} @else {
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
<app-dropdown-menu
|
|
5
|
+
align="end"
|
|
6
|
+
aria-label="User menu"
|
|
7
|
+
triggerClass="inline-flex size-8 items-center justify-center rounded-full hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none"
|
|
8
|
+
>
|
|
9
|
+
<app-icon trigger name="person" size="24" />
|
|
7
10
|
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
<
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
</
|
|
11
|
+
<ng-template appDropdownMenuContent>
|
|
12
|
+
@if (isAuthenticated()) {
|
|
13
|
+
<app-dropdown-menu-label class="truncate">{{ user()?.name }}</app-dropdown-menu-label>
|
|
14
|
+
<app-dropdown-menu-separator />
|
|
15
|
+
<a appDropdownMenuItem [routerLink]="routes.PROFILE.PATH">
|
|
16
|
+
<app-icon name="editProfile" />
|
|
17
|
+
<span>Edit Profile</span>
|
|
18
|
+
</a>
|
|
19
|
+
<ng-content select="[menuItems]" />
|
|
20
|
+
<button appDropdownMenuItem type="button" (triggered)="onLogout()">
|
|
21
|
+
<app-icon name="logout" />
|
|
22
|
+
<span>Sign Out</span>
|
|
23
|
+
</button>
|
|
24
|
+
} @else {
|
|
25
|
+
<a appDropdownMenuItem [routerLink]="routes.LOGIN.PATH">
|
|
26
|
+
<app-icon name="login" />
|
|
27
|
+
<span>Log In</span>
|
|
28
|
+
</a>
|
|
29
|
+
<a appDropdownMenuItem [routerLink]="routes.REGISTER.PATH">
|
|
30
|
+
<app-icon name="personAdd" />
|
|
31
|
+
<span>Register</span>
|
|
32
|
+
</a>
|
|
33
|
+
}
|
|
34
|
+
</ng-template>
|
|
35
|
+
</app-dropdown-menu>
|
|
26
36
|
}
|
|
@@ -5,31 +5,19 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { ChangeDetectionStrategy, Component, inject } from "@angular/core";
|
|
7
7
|
import { RouterLink } from "@angular/router";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { MatMenuModule } from "@angular/material/menu";
|
|
8
|
+
import { DropdownMenuImports } from "../../../../components/ui/dropdown-menu/dropdown-menu";
|
|
9
|
+
import { IconComponent } from "../../../../components/ui/icon/icon";
|
|
11
10
|
import { SkeletonComponent } from "../../../../components/ui/skeleton/skeleton";
|
|
12
11
|
import { AuthService } from "../../auth/auth.service";
|
|
13
12
|
import { ROUTES } from "../../config/authentication.config";
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
* Register for guests. While auth state is loading it shows a skeleton avatar.
|
|
19
|
-
*
|
|
20
|
-
* Owns its own trigger and `mat-menu` (the canonical Material menu shape): an
|
|
21
|
-
* icon-only person button carries `matMenuTriggerFor`, so the trigger — with its
|
|
22
|
-
* `aria-haspopup` / `aria-expanded` / keyboard handling — sits on a real focusable
|
|
23
|
-
* `<button>`. Extra items can be inserted before Sign Out via `[menuItems]`
|
|
24
|
-
* projection.
|
|
25
|
-
*
|
|
26
|
-
* Reads `AuthService` directly (the `providedIn: 'root'` replacement for
|
|
27
|
-
* `useAuth`), so no inputs are needed for auth state.
|
|
28
|
-
*/
|
|
14
|
+
// Header dropdown: shows the user's name + Edit Profile / Sign Out, or Log In
|
|
15
|
+
// / Register for guests. Shows a skeleton avatar while auth state is loading.
|
|
16
|
+
// Extra items can be inserted before Sign Out via [menuItems] projection.
|
|
29
17
|
@Component({
|
|
30
18
|
selector: "app-auth-menu",
|
|
31
19
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
32
|
-
imports: [RouterLink,
|
|
20
|
+
imports: [RouterLink, IconComponent, SkeletonComponent, ...DropdownMenuImports],
|
|
33
21
|
templateUrl: "./auth-menu.html",
|
|
34
22
|
})
|
|
35
23
|
export class AuthMenuComponent {
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
</div>
|
|
28
28
|
|
|
29
29
|
<div class="flex gap-4 justify-end">
|
|
30
|
-
<app-button
|
|
30
|
+
<app-button appearance="outlined" (clicked)="onLogoutClick()">
|
|
31
31
|
{{ labels.logoutButton }}
|
|
32
32
|
</app-button>
|
|
33
|
-
<app-button
|
|
33
|
+
<app-button appearance="filled" (clicked)="onContinue()">
|
|
34
34
|
{{ labels.continueButton }}
|
|
35
35
|
</app-button>
|
|
36
36
|
</div>
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
<app-button
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
<app-button
|
|
2
|
+
type="submit"
|
|
3
|
+
class="w-full"
|
|
4
|
+
[loading]="submitting()"
|
|
5
|
+
[loadingLabel]="loadingLabel()"
|
|
6
|
+
[disabled]="disabled()"
|
|
7
|
+
>
|
|
8
|
+
{{ label() }}
|
|
5
9
|
</app-button>
|
|
@@ -5,31 +5,19 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { ChangeDetectionStrategy, Component, input } from "@angular/core";
|
|
7
7
|
import { ButtonComponent } from "../../../components/ui/button/button";
|
|
8
|
-
import { SpinnerComponent } from "../../../components/ui/spinner/spinner";
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
* Reactive Forms have no equivalent subscription; instead the parent passes the
|
|
15
|
-
* form's `pending`/submitting flag via `[submitting]` and the caller-provided
|
|
16
|
-
* `[disabled]`. While submitting the button is disabled and shows a spinner with
|
|
17
|
-
* the loading label — the same UX (prevents double-submit + gives feedback).
|
|
18
|
-
*/
|
|
9
|
+
// Submit button reflecting form submission state: the parent passes its
|
|
10
|
+
// submitting flag via [submitting]. While submitting the base button is
|
|
11
|
+
// disabled and shows a spinner with the loading label (prevents double-submit).
|
|
19
12
|
@Component({
|
|
20
13
|
selector: "app-submit-button",
|
|
21
14
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
22
|
-
imports: [ButtonComponent
|
|
15
|
+
imports: [ButtonComponent],
|
|
23
16
|
templateUrl: "./submit-button.html",
|
|
24
|
-
styleUrl: "./submit-button.scss",
|
|
25
17
|
})
|
|
26
18
|
export class SubmitButtonComponent {
|
|
27
|
-
/** Button text when not submitting. */
|
|
28
19
|
readonly label = input.required<string>();
|
|
29
|
-
/** Button text while submitting. */
|
|
30
20
|
readonly loadingLabel = input<string>("Submitting…");
|
|
31
|
-
/** True while the form submission is in flight. */
|
|
32
21
|
readonly submitting = input<boolean>(false);
|
|
33
|
-
/** Additional disabled condition from the caller (e.g. already authenticated). */
|
|
34
22
|
readonly disabled = input<boolean>(false);
|
|
35
23
|
}
|
|
@@ -6,18 +6,8 @@
|
|
|
6
6
|
<li class="inline-flex items-center gap-1.5">
|
|
7
7
|
<a [routerLink]="'/'" class="hover:text-foreground transition-colors">{{ homeLabel() }}</a>
|
|
8
8
|
</li>
|
|
9
|
-
<li aria-hidden="true"
|
|
10
|
-
<
|
|
11
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
12
|
-
viewBox="0 0 24 24"
|
|
13
|
-
fill="none"
|
|
14
|
-
stroke="currentColor"
|
|
15
|
-
stroke-width="2"
|
|
16
|
-
stroke-linecap="round"
|
|
17
|
-
stroke-linejoin="round"
|
|
18
|
-
>
|
|
19
|
-
<polyline points="9 18 15 12 9 6" />
|
|
20
|
-
</svg>
|
|
9
|
+
<li aria-hidden="true">
|
|
10
|
+
<app-icon name="chevronRight" size="14px" class="flex" />
|
|
21
11
|
</li>
|
|
22
12
|
} @if (isDetailView()) {
|
|
23
13
|
<li class="inline-flex items-center gap-1.5">
|
|
@@ -25,18 +15,8 @@
|
|
|
25
15
|
>{{ listLabel() }}</a
|
|
26
16
|
>
|
|
27
17
|
</li>
|
|
28
|
-
<li aria-hidden="true"
|
|
29
|
-
<
|
|
30
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
31
|
-
viewBox="0 0 24 24"
|
|
32
|
-
fill="none"
|
|
33
|
-
stroke="currentColor"
|
|
34
|
-
stroke-width="2"
|
|
35
|
-
stroke-linecap="round"
|
|
36
|
-
stroke-linejoin="round"
|
|
37
|
-
>
|
|
38
|
-
<polyline points="9 18 15 12 9 6" />
|
|
39
|
-
</svg>
|
|
18
|
+
<li aria-hidden="true">
|
|
19
|
+
<app-icon name="chevronRight" size="14px" class="flex" />
|
|
40
20
|
</li>
|
|
41
21
|
<li class="inline-flex items-center gap-1.5">
|
|
42
22
|
@if (loading() && !recordName()) {
|
|
@@ -5,36 +5,23 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { ChangeDetectionStrategy, Component, computed, input } from "@angular/core";
|
|
7
7
|
import { RouterLink } from "@angular/router";
|
|
8
|
+
import { IconComponent } from "../../../components/ui/icon/icon";
|
|
8
9
|
import { SkeletonComponent } from "../../../components/ui/skeleton/skeleton";
|
|
9
10
|
|
|
10
|
-
/**
|
|
11
|
-
* Object-search breadcrumb — Home > Records list > (optional) Record name.
|
|
12
|
-
*
|
|
13
|
-
* Mirrors the React `ObjectBreadcrumb`. Renders the list-only crumb by default
|
|
14
|
-
* and switches to the detail-view crumb (with record name + skeleton fallback)
|
|
15
|
-
* as soon as `loading` or `recordName` is set. Uses Angular `routerLink` where
|
|
16
|
-
* the React version uses `react-router`'s `Link`.
|
|
17
|
-
*/
|
|
11
|
+
/** Object-search breadcrumb — Home > Records list > (optional) Record name. */
|
|
18
12
|
@Component({
|
|
19
13
|
selector: "app-object-breadcrumb",
|
|
20
14
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
21
|
-
imports: [RouterLink, SkeletonComponent],
|
|
15
|
+
imports: [RouterLink, IconComponent, SkeletonComponent],
|
|
22
16
|
templateUrl: "./breadcrumb.html",
|
|
23
17
|
})
|
|
24
18
|
export class ObjectBreadcrumbComponent {
|
|
25
|
-
/** Router path for the object list view (e.g. `/accounts`). */
|
|
26
19
|
readonly listPath = input.required<string>();
|
|
27
|
-
/** Label for the list crumb (e.g. `Accounts`). */
|
|
28
20
|
readonly listLabel = input.required<string>();
|
|
29
|
-
/** Record name for the detail-view leaf crumb; omit for list-only view. */
|
|
30
21
|
readonly recordName = input<string | undefined>(undefined);
|
|
31
|
-
/** Show a skeleton in the leaf crumb while the record is loading. */
|
|
32
22
|
readonly loading = input<boolean>(false);
|
|
33
|
-
/** Prepend a Home crumb (default `true`). */
|
|
34
23
|
readonly includeHome = input<boolean>(true);
|
|
35
|
-
/** Label for the Home crumb (default `Home`). */
|
|
36
24
|
readonly homeLabel = input<string>("Home");
|
|
37
25
|
|
|
38
|
-
/** `true` when the crumb should render list + record leaves. */
|
|
39
26
|
protected readonly isDetailView = computed(() => this.loading() || !!this.recordName());
|
|
40
27
|
}
|
|
@@ -85,7 +85,7 @@ export class DateFilterComponent {
|
|
|
85
85
|
if (date) this.emit(op, date);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
protected onDateChange(date: Date | null): void {
|
|
88
|
+
protected onDateChange(date: Date | null | undefined): void {
|
|
89
89
|
const cfg = this.config();
|
|
90
90
|
if (!date) {
|
|
91
91
|
this.state.removeFilter(cfg.field);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
<app-filter-field-wrapper [
|
|
1
|
+
<app-filter-field-wrapper [helpText]="config().helpText">
|
|
2
2
|
<app-date-range-picker
|
|
3
3
|
class="w-full"
|
|
4
|
+
[label]="config().label"
|
|
4
5
|
startPlaceholder="Start"
|
|
5
6
|
endPlaceholder="End"
|
|
6
7
|
[readonly]="true"
|
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
6
|
import { ChangeDetectionStrategy, Component, computed, inject, input } from "@angular/core";
|
|
7
|
-
// Base-app UI wrapper, inherited (not recreated) by this feature. Post-compose
|
|
8
|
-
// it lands at uiBundles/<target>/src/app/components/ui/date-range-picker/..., three levels up.
|
|
9
7
|
import {
|
|
10
8
|
DateRange,
|
|
11
9
|
DateRangePickerComponent,
|
|
@@ -16,13 +14,8 @@ import { toDate, toDateString } from "./date-filter";
|
|
|
16
14
|
import { FilterFieldWrapperComponent } from "./filter-field-wrapper";
|
|
17
15
|
|
|
18
16
|
/**
|
|
19
|
-
* Date range filter — a
|
|
20
|
-
*
|
|
21
|
-
* filter builder wires each end into a `gte` / `lte` clause.
|
|
22
|
-
*
|
|
23
|
-
* Thin bridge over the base `app-date-range-picker` (Material's
|
|
24
|
-
* `mat-date-range-picker`): it maps the picker's `DateRange<Date>` value to and
|
|
25
|
-
* from the `min` / `max` string split the filter state stores.
|
|
17
|
+
* Date range filter — a two-ended range picker. Emits a `daterange` (or
|
|
18
|
+
* `datetimerange`) filter with `min` / `max` as `YYYY-MM-DD` strings.
|
|
26
19
|
*/
|
|
27
20
|
@Component({
|
|
28
21
|
selector: "app-date-range-filter",
|
|
@@ -33,17 +26,15 @@ import { FilterFieldWrapperComponent } from "./filter-field-wrapper";
|
|
|
33
26
|
export class DateRangeFilterComponent {
|
|
34
27
|
private readonly state = inject(ObjectSearchStateService);
|
|
35
28
|
|
|
36
|
-
/** Field config: `field`, `label`, `helpText`, ... */
|
|
37
29
|
readonly config = input.required<FilterFieldConfig>();
|
|
38
|
-
/** Underlying filter type — `'daterange'` (default) or `'datetimerange'`. */
|
|
39
30
|
readonly filterType = input<FilterFieldType>("daterange");
|
|
40
31
|
|
|
41
32
|
private readonly active = computed(() => this.state.filterFor(this.config().field));
|
|
42
33
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
);
|
|
34
|
+
protected readonly range = computed<DateRange<Date>>(() => ({
|
|
35
|
+
start: toDate(this.active()?.min),
|
|
36
|
+
end: toDate(this.active()?.max),
|
|
37
|
+
}));
|
|
47
38
|
|
|
48
39
|
/** Cap the picker at today when the field can't hold a future date. */
|
|
49
40
|
protected readonly maxDate = computed<Date | null>(() =>
|
|
@@ -4,20 +4,9 @@
|
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
6
|
import { ChangeDetectionStrategy, Component, input } from "@angular/core";
|
|
7
|
-
//
|
|
8
|
-
// it lands at uiBundles/<target>/src/app/components/ui/label/..., three levels up from this
|
|
9
|
-
// filter folder (app/object-search/filters/ -> app/components/ui/).
|
|
7
|
+
// Post-compose, this lands 3 levels up at app/components/ui/label/__inherit__label.
|
|
10
8
|
import { LabelComponent } from "../../../components/ui/label/label";
|
|
11
9
|
|
|
12
|
-
/**
|
|
13
|
-
* Standard label + control + help/error scaffold shared by every filter
|
|
14
|
-
* component (the Angular analogue of the React `FilterFieldWrapper`).
|
|
15
|
-
*
|
|
16
|
-
* The control itself is content-projected so each filter can supply the
|
|
17
|
-
* primitive that fits its data type (input, select, popover, date picker, ...)
|
|
18
|
-
* while the wrapper keeps the layout, label, and error/help affordances
|
|
19
|
-
* consistent across the search page.
|
|
20
|
-
*/
|
|
21
10
|
@Component({
|
|
22
11
|
selector: "app-filter-field-wrapper",
|
|
23
12
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
@@ -25,12 +14,8 @@ import { LabelComponent } from "../../../components/ui/label/label";
|
|
|
25
14
|
templateUrl: "./filter-field-wrapper.html",
|
|
26
15
|
})
|
|
27
16
|
export class FilterFieldWrapperComponent {
|
|
28
|
-
|
|
29
|
-
readonly label = input.required<string>();
|
|
30
|
-
/** Optional `for` attribute forwarded to the underlying `<label>`. */
|
|
17
|
+
readonly label = input<string>("");
|
|
31
18
|
readonly htmlFor = input<string | null>(null);
|
|
32
|
-
/** Advisory copy rendered below the control when there is no error. */
|
|
33
19
|
readonly helpText = input<string | undefined>(undefined);
|
|
34
|
-
/** Validation message; when set, replaces the help text. */
|
|
35
20
|
readonly error = input<string | undefined>(undefined);
|
|
36
21
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
<app-filter-field-wrapper [
|
|
1
|
+
<app-filter-field-wrapper [helpText]="config().helpText">
|
|
2
2
|
<app-select
|
|
3
3
|
multiple
|
|
4
|
+
[label]="config().label"
|
|
4
5
|
[size]="size()"
|
|
5
6
|
[options]="config().options ?? []"
|
|
6
7
|
[placeholder]="placeholder()"
|
|
@@ -16,11 +16,6 @@ import {
|
|
|
16
16
|
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
|
17
17
|
import { Subject } from "rxjs";
|
|
18
18
|
import { debounceTime } from "rxjs/operators";
|
|
19
|
-
import { MatInputModule } from "@angular/material/input";
|
|
20
|
-
import { MatFormFieldModule } from "@angular/material/form-field";
|
|
21
|
-
import { FormsModule } from "@angular/forms";
|
|
22
|
-
// Base-app UI wrapper, inherited (not recreated) by this feature. Post-compose
|
|
23
|
-
// it lands at uiBundles/<target>/src/app/components/ui/input/..., three levels up.
|
|
24
19
|
import { InputComponent } from "../../../components/ui/input/input";
|
|
25
20
|
import { ObjectSearchStateService } from "../object-search-state.service";
|
|
26
21
|
import { FILTER_DEBOUNCE_MS } from "../utils/debounce";
|
|
@@ -30,34 +25,21 @@ import { FilterFieldWrapperComponent } from "./filter-field-wrapper";
|
|
|
30
25
|
/**
|
|
31
26
|
* Numeric range filter — paired `min` / `max` inputs whose committed values are
|
|
32
27
|
* written as strings on a `type: 'numeric'` filter (numeric coercion happens
|
|
33
|
-
* in `buildSingleFilter`).
|
|
34
|
-
*
|
|
35
|
-
* Local signals drive the inputs immediately; a trailing debounce commits the
|
|
36
|
-
* pair, but only when the range is self-consistent (`min <= max`) and within
|
|
37
|
-
* `boundMin` / `boundMax` if provided — an inverted or out-of-bounds pair
|
|
38
|
-
* shows the same inline error the React reference renders and skips the write.
|
|
28
|
+
* in `buildSingleFilter`). A trailing debounce commits the pair, skipping
|
|
29
|
+
* writes when the range is inverted or out of `boundMin` / `boundMax`.
|
|
39
30
|
*/
|
|
40
31
|
@Component({
|
|
41
32
|
selector: "app-numeric-range-filter",
|
|
42
33
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
43
|
-
imports: [
|
|
44
|
-
InputComponent,
|
|
45
|
-
FilterFieldWrapperComponent,
|
|
46
|
-
FormsModule,
|
|
47
|
-
MatFormFieldModule,
|
|
48
|
-
MatInputModule,
|
|
49
|
-
],
|
|
34
|
+
imports: [InputComponent, FilterFieldWrapperComponent],
|
|
50
35
|
templateUrl: "./numeric-range-filter.html",
|
|
51
36
|
})
|
|
52
37
|
export class NumericRangeFilterComponent {
|
|
53
38
|
private readonly state = inject(ObjectSearchStateService);
|
|
54
39
|
private readonly destroyRef = inject(DestroyRef);
|
|
55
40
|
|
|
56
|
-
/** Field config: `field`, `label`, `helpText`, ... */
|
|
57
41
|
readonly config = input.required<FilterFieldConfig>();
|
|
58
|
-
/** Optional lower bound accepted by the field (used for validation only). */
|
|
59
42
|
readonly boundMin = input<number | undefined>(undefined);
|
|
60
|
-
/** Optional upper bound accepted by the field (used for validation only). */
|
|
61
43
|
readonly boundMax = input<number | undefined>(undefined);
|
|
62
44
|
|
|
63
45
|
protected readonly localMin = signal<string>("");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<app-filter-field-wrapper [label]="config().label" [htmlFor]="
|
|
2
|
-
<app-
|
|
3
|
-
|
|
1
|
+
<app-filter-field-wrapper [label]="config().label" [htmlFor]="fieldId()">
|
|
2
|
+
<app-search-bar
|
|
3
|
+
[inputId]="fieldId()"
|
|
4
4
|
[placeholder]="config().placeholder ?? 'Search...'"
|
|
5
5
|
[value]="localValue()"
|
|
6
6
|
(valueChange)="onValueChange($event)"
|