@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
|
@@ -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/angularintapp/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;
|
|
@@ -97,9 +97,6 @@ export class AgentforceConversationClientComponent {
|
|
|
97
97
|
};
|
|
98
98
|
});
|
|
99
99
|
|
|
100
|
-
/** Whether the chat should render inline (drives the host `<div>`). */
|
|
101
|
-
protected readonly isInline = computed(() => this.config().renderingConfig?.mode === "inline");
|
|
102
|
-
|
|
103
100
|
constructor() {
|
|
104
101
|
// Embed after the view (and any inline host `<div>`) exists in the DOM —
|
|
105
102
|
// the analogue of the React `useEffect`. The service guards against
|
|
@@ -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)"
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import {
|
|
7
7
|
ChangeDetectionStrategy,
|
|
8
8
|
Component,
|
|
9
|
+
computed,
|
|
9
10
|
DestroyRef,
|
|
10
11
|
effect,
|
|
11
12
|
inject,
|
|
@@ -15,37 +16,33 @@ import {
|
|
|
15
16
|
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
|
16
17
|
import { Subject } from "rxjs";
|
|
17
18
|
import { debounceTime } from "rxjs/operators";
|
|
18
|
-
|
|
19
|
-
// it lands at uiBundles/<target>/src/app/components/ui/input/..., three levels up.
|
|
20
|
-
import { InputComponent } from "../../../components/ui/input/input";
|
|
19
|
+
import { SearchBarComponent } from "../search-bar/search-bar";
|
|
21
20
|
import { ObjectSearchStateService } from "../object-search-state.service";
|
|
22
21
|
import { FILTER_DEBOUNCE_MS } from "../utils/debounce";
|
|
23
22
|
import type { FilterFieldConfig } from "../utils/filter-utils";
|
|
24
23
|
import { FilterFieldWrapperComponent } from "./filter-field-wrapper";
|
|
25
24
|
|
|
26
25
|
/**
|
|
27
|
-
* Multi-field search filter — a debounced input
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* Shape mirrors {@link TextFilterComponent} but emits a `type: 'search'`
|
|
32
|
-
* {@link ActiveFilterValue} so `filter-utils` picks the multi-field path.
|
|
26
|
+
* Multi-field search filter — a debounced input applied via `like %value%`
|
|
27
|
+
* across every field named in `config.searchFields` (combined with a
|
|
28
|
+
* top-level `or`, see {@link buildFilter}).
|
|
33
29
|
*/
|
|
34
30
|
@Component({
|
|
35
31
|
selector: "app-search-filter",
|
|
36
32
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
37
|
-
imports: [
|
|
33
|
+
imports: [SearchBarComponent, FilterFieldWrapperComponent],
|
|
38
34
|
templateUrl: "./search-filter.html",
|
|
39
35
|
})
|
|
40
36
|
export class SearchFilterComponent {
|
|
41
37
|
private readonly state = inject(ObjectSearchStateService);
|
|
42
38
|
private readonly destroyRef = inject(DestroyRef);
|
|
43
39
|
|
|
44
|
-
/** Field config: `field`, `label`, `placeholder`, `searchFields`, ... */
|
|
45
40
|
readonly config = input.required<FilterFieldConfig>();
|
|
46
41
|
|
|
42
|
+
// Ties the wrapper's <label for> to the search input.
|
|
43
|
+
protected readonly fieldId = computed(() => `filter-${this.config().field}`);
|
|
44
|
+
|
|
47
45
|
protected readonly localValue = signal<string>("");
|
|
48
|
-
protected readonly inputId = signal<string>("");
|
|
49
46
|
private readonly commit$ = new Subject<string>();
|
|
50
47
|
|
|
51
48
|
constructor() {
|
|
@@ -55,7 +52,6 @@ export class SearchFilterComponent {
|
|
|
55
52
|
|
|
56
53
|
effect(() => {
|
|
57
54
|
const cfg = this.config();
|
|
58
|
-
this.inputId.set(`filter-${cfg.field}`);
|
|
59
55
|
const external = this.state.filterFor(cfg.field)?.value ?? "";
|
|
60
56
|
this.localValue.set(external);
|
|
61
57
|
});
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
<app-filter-field-wrapper
|
|
2
|
-
[label]="config().label"
|
|
3
|
-
[htmlFor]="inputId()"
|
|
4
|
-
[helpText]="config().helpText"
|
|
5
|
-
>
|
|
1
|
+
<app-filter-field-wrapper [helpText]="config().helpText">
|
|
6
2
|
<app-select
|
|
3
|
+
[label]="config().label"
|
|
7
4
|
[placeholder]="'Select ' + config().label.toLowerCase()"
|
|
8
5
|
[options]="options()"
|
|
9
6
|
[value]="currentValue()"
|
|
@@ -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/select/..., three levels up.
|
|
9
7
|
import {
|
|
10
8
|
SelectComponent,
|
|
11
9
|
type AppSelectOption,
|
|
@@ -14,13 +12,7 @@ import { ObjectSearchStateService } from "../object-search-state.service";
|
|
|
14
12
|
import type { FilterFieldConfig } from "../utils/filter-utils";
|
|
15
13
|
import { FilterFieldWrapperComponent } from "./filter-field-wrapper";
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
* Single-value picklist filter — a select rendered from `config.options` with
|
|
19
|
-
* a leading "All" entry (empty value) that clears the filter.
|
|
20
|
-
*
|
|
21
|
-
* Emits a `type: 'picklist'` filter which `buildSingleFilter` maps to
|
|
22
|
-
* `{ [field]: { eq: value } }`.
|
|
23
|
-
*/
|
|
15
|
+
// A leading "All" entry (empty value) clears the filter.
|
|
24
16
|
const ALL_VALUE = "";
|
|
25
17
|
|
|
26
18
|
@Component({
|
|
@@ -32,19 +24,13 @@ const ALL_VALUE = "";
|
|
|
32
24
|
export class SelectFilterComponent {
|
|
33
25
|
private readonly state = inject(ObjectSearchStateService);
|
|
34
26
|
|
|
35
|
-
/** Field config: `field`, `label`, `options`, `helpText`, ... */
|
|
36
27
|
readonly config = input.required<FilterFieldConfig>();
|
|
37
28
|
|
|
38
|
-
/** DOM id shared by the wrapper label and the underlying control. */
|
|
39
|
-
protected readonly inputId = computed(() => `filter-${this.config().field}`);
|
|
40
|
-
|
|
41
|
-
/** Options rendered in the select, with an "All" (clear) sentinel prepended. */
|
|
42
29
|
protected readonly options = computed<readonly AppSelectOption[]>(() => [
|
|
43
30
|
{ value: ALL_VALUE, label: "All" },
|
|
44
31
|
...(this.config().options ?? []),
|
|
45
32
|
]);
|
|
46
33
|
|
|
47
|
-
/** Current selection, reading through to shared state so URL changes reflect. */
|
|
48
34
|
protected readonly currentValue = computed(
|
|
49
35
|
() => this.state.filterFor(this.config().field)?.value ?? ALL_VALUE,
|
|
50
36
|
);
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
<app-filter-field-wrapper
|
|
2
|
-
[label]="config().label"
|
|
3
|
-
[htmlFor]="inputId()"
|
|
4
|
-
[helpText]="config().helpText"
|
|
5
|
-
>
|
|
1
|
+
<app-filter-field-wrapper [helpText]="config().helpText">
|
|
6
2
|
<app-input
|
|
7
3
|
type="text"
|
|
4
|
+
[label]="config().label"
|
|
8
5
|
[placeholder]="config().placeholder ?? 'Filter by ' + config().label.toLowerCase() + '...'"
|
|
9
6
|
[value]="localValue()"
|
|
10
7
|
(valueChange)="onValueChange($event)"
|
|
@@ -15,8 +15,6 @@ import {
|
|
|
15
15
|
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
|
16
16
|
import { Subject } from "rxjs";
|
|
17
17
|
import { debounceTime } from "rxjs/operators";
|
|
18
|
-
// Base-app UI wrapper, inherited (not recreated) by this feature. Post-compose
|
|
19
|
-
// it lands at uiBundles/<target>/src/app/components/ui/input/..., three levels up.
|
|
20
18
|
import { InputComponent } from "../../../components/ui/input/input";
|
|
21
19
|
import { ObjectSearchStateService } from "../object-search-state.service";
|
|
22
20
|
import { FILTER_DEBOUNCE_MS } from "../utils/debounce";
|
|
@@ -26,11 +24,8 @@ import { FilterFieldWrapperComponent } from "./filter-field-wrapper";
|
|
|
26
24
|
/**
|
|
27
25
|
* Text filter — free-text input that writes a `like %value%` clause via
|
|
28
26
|
* {@link ObjectSearchStateService.setFilter}. Keystrokes update the local
|
|
29
|
-
* signal immediately
|
|
30
|
-
* {@link FILTER_DEBOUNCE_MS}ms trailing debounce
|
|
31
|
-
*
|
|
32
|
-
* Reads the current value from `state.filterFor(config.field)` so URL /
|
|
33
|
-
* reset-all changes reflect back into the input.
|
|
27
|
+
* signal immediately and flush to shared state on a
|
|
28
|
+
* {@link FILTER_DEBOUNCE_MS}ms trailing debounce.
|
|
34
29
|
*/
|
|
35
30
|
@Component({
|
|
36
31
|
selector: "app-text-filter",
|
|
@@ -42,16 +37,9 @@ export class TextFilterComponent {
|
|
|
42
37
|
private readonly state = inject(ObjectSearchStateService);
|
|
43
38
|
private readonly destroyRef = inject(DestroyRef);
|
|
44
39
|
|
|
45
|
-
/** Field config: `field`, `label`, `placeholder`, `helpText`, ... */
|
|
46
40
|
readonly config = input.required<FilterFieldConfig>();
|
|
47
41
|
|
|
48
|
-
/** Local (uncommitted) value that drives the input while the user is typing. */
|
|
49
42
|
protected readonly localValue = signal<string>("");
|
|
50
|
-
|
|
51
|
-
/** DOM id shared by the wrapper label and the underlying input. */
|
|
52
|
-
protected readonly inputId = signal<string>("");
|
|
53
|
-
|
|
54
|
-
/** Coalesces rapid keystrokes into one shared-state write. */
|
|
55
43
|
private readonly commit$ = new Subject<string>();
|
|
56
44
|
|
|
57
45
|
constructor() {
|
|
@@ -59,11 +47,9 @@ export class TextFilterComponent {
|
|
|
59
47
|
.pipe(debounceTime(FILTER_DEBOUNCE_MS), takeUntilDestroyed(this.destroyRef))
|
|
60
48
|
.subscribe((v) => this.commit(v));
|
|
61
49
|
|
|
62
|
-
// Sync the input with
|
|
63
|
-
// Mirrors the React "reset local when external changes" pattern.
|
|
50
|
+
// Sync the input with shared state (URL restore, reset-all, ...).
|
|
64
51
|
effect(() => {
|
|
65
52
|
const cfg = this.config();
|
|
66
|
-
this.inputId.set(`filter-${cfg.field}`);
|
|
67
53
|
const external = this.state.filterFor(cfg.field)?.value ?? "";
|
|
68
54
|
this.localValue.set(external);
|
|
69
55
|
});
|