@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
package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/input/input.html
CHANGED
|
@@ -1,19 +1,34 @@
|
|
|
1
|
-
<
|
|
2
|
-
class="w-full"
|
|
3
|
-
[class]="'size-' + size()"
|
|
4
|
-
[appearance]="appearance()"
|
|
5
|
-
subscriptSizing="dynamic"
|
|
6
|
-
>
|
|
1
|
+
<div class="w-full space-y-1.5">
|
|
7
2
|
@if (label()) {
|
|
8
|
-
<
|
|
3
|
+
<label hlmLabel [for]="resolvedId()">{{ label() }}</label>
|
|
9
4
|
}
|
|
10
|
-
<input
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
5
|
+
<hlm-input-group [class]="groupClasses()">
|
|
6
|
+
@if (icon(); as leadingIcon) {
|
|
7
|
+
<hlm-input-group-addon>
|
|
8
|
+
<app-icon [name]="leadingIcon" class="flex items-end" aria-hidden="true" />
|
|
9
|
+
</hlm-input-group-addon>
|
|
10
|
+
}
|
|
11
|
+
<input
|
|
12
|
+
hlmInputGroupInput
|
|
13
|
+
[type]="type()"
|
|
14
|
+
[placeholder]="placeholder()"
|
|
15
|
+
[disabled]="disabled()"
|
|
16
|
+
[id]="resolvedId()"
|
|
17
|
+
[attr.aria-label]="ariaLabel() || null"
|
|
18
|
+
[attr.aria-describedby]="describedBy()"
|
|
19
|
+
[attr.aria-invalid]="error() || null"
|
|
20
|
+
[attr.data-matches-spartan-invalid]="error() || null"
|
|
21
|
+
[(ngModel)]="value"
|
|
22
|
+
/>
|
|
23
|
+
@if (iconEnd(); as trailingIcon) {
|
|
24
|
+
<hlm-input-group-addon align="inline-end">
|
|
25
|
+
<app-icon [name]="trailingIcon" class="flex items-end" aria-hidden="true" />
|
|
26
|
+
</hlm-input-group-addon>
|
|
27
|
+
}
|
|
28
|
+
</hlm-input-group>
|
|
29
|
+
@if (error() && errorMessage()) {
|
|
30
|
+
<p [id]="errorId()" class="text-sm text-destructive" role="alert" aria-live="polite">
|
|
31
|
+
{{ errorMessage() }}
|
|
32
|
+
</p>
|
|
33
|
+
}
|
|
34
|
+
</div>
|
package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/input/input.ts
CHANGED
|
@@ -3,34 +3,77 @@
|
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
ChangeDetectionStrategy,
|
|
8
|
+
Component,
|
|
9
|
+
booleanAttribute,
|
|
10
|
+
computed,
|
|
11
|
+
input,
|
|
12
|
+
model,
|
|
13
|
+
} from '@angular/core';
|
|
7
14
|
import { FormsModule } from '@angular/forms';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
15
|
+
import { HlmInputGroupImports } from '@spartan-ng/styles/input-group';
|
|
16
|
+
import { HlmLabelImports } from '@spartan-ng/styles/label';
|
|
10
17
|
import type { AppFieldSize } from '../field-size';
|
|
18
|
+
import type { AppFieldAppearance } from '../field-appearance';
|
|
19
|
+
import { IconComponent, type AppIconName } from '../icon/icon';
|
|
20
|
+
|
|
21
|
+
const SIZE_CLASSES: Record<AppFieldSize, string> = {
|
|
22
|
+
sm: 'h-6 text-xs',
|
|
23
|
+
default: 'h-8',
|
|
24
|
+
lg: 'h-10',
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const APPEARANCE_CLASSES: Record<AppFieldAppearance, string> = {
|
|
28
|
+
outline: '',
|
|
29
|
+
fill: 'border-transparent bg-muted',
|
|
30
|
+
};
|
|
11
31
|
|
|
12
|
-
/** Thin wrapper over Material's `mat-form-field` + `matInput`. */
|
|
13
32
|
@Component({
|
|
14
33
|
selector: 'app-input',
|
|
15
34
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
16
|
-
imports: [FormsModule,
|
|
35
|
+
imports: [FormsModule, HlmInputGroupImports, HlmLabelImports, IconComponent],
|
|
36
|
+
host: { class: 'block min-w-0' },
|
|
17
37
|
templateUrl: './input.html',
|
|
18
|
-
styleUrl: './input.scss',
|
|
19
38
|
})
|
|
20
39
|
export class InputComponent {
|
|
21
|
-
/** Two-way bindable value. Supports `[(value)]`. */
|
|
22
40
|
readonly value = model<string>('');
|
|
23
|
-
|
|
24
41
|
readonly placeholder = input<string>('');
|
|
25
42
|
readonly label = input<string>('');
|
|
26
43
|
readonly type = input<string>('text');
|
|
27
|
-
readonly disabled = input
|
|
28
|
-
readonly appearance = input<
|
|
29
|
-
|
|
44
|
+
readonly disabled = input(false, { transform: booleanAttribute });
|
|
45
|
+
readonly appearance = input<AppFieldAppearance>('outline');
|
|
46
|
+
readonly error = input(false, { transform: booleanAttribute });
|
|
47
|
+
readonly errorMessage = input<string>('');
|
|
30
48
|
readonly size = input<AppFieldSize>('default');
|
|
31
|
-
|
|
32
|
-
/** `id` on the inner control, so an outer `app-field` label's `for` resolves. */
|
|
33
49
|
readonly id = input<string>('');
|
|
34
|
-
|
|
35
50
|
readonly ariaDescribedby = input<string>('');
|
|
51
|
+
// Accessible name for inputs with no visible <label> (e.g. an icon-only
|
|
52
|
+
// search box); harmless when a label is present.
|
|
53
|
+
readonly ariaLabel = input<string>('');
|
|
54
|
+
// Optional leading/trailing icons. When set the input renders inside an
|
|
55
|
+
// input-group so the icon sits inside the shared border.
|
|
56
|
+
readonly icon = input<AppIconName | ''>('');
|
|
57
|
+
readonly iconEnd = input<AppIconName | ''>('');
|
|
58
|
+
|
|
59
|
+
private static _uid = 0;
|
|
60
|
+
private readonly _autoId = `app-input-${InputComponent._uid++}`;
|
|
61
|
+
protected readonly resolvedId = computed(() => this.id() || this._autoId);
|
|
62
|
+
protected readonly errorId = computed(() => `${this.resolvedId()}-error`);
|
|
63
|
+
|
|
64
|
+
// Link the error message to the input via aria-describedby (merged with any
|
|
65
|
+
// caller-supplied ids) so screen readers announce it; null when absent.
|
|
66
|
+
protected readonly describedBy = computed(() => {
|
|
67
|
+
const ids = [this.ariaDescribedby(), this.error() && this.errorMessage() ? this.errorId() : '']
|
|
68
|
+
.filter(Boolean)
|
|
69
|
+
.join(' ');
|
|
70
|
+
return ids || null;
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Size + appearance apply to the input-group wrapper, which owns the border.
|
|
74
|
+
protected readonly groupClasses = computed(() =>
|
|
75
|
+
[SIZE_CLASSES[this.size()], APPEARANCE_CLASSES[this.appearance()]].filter(Boolean).join(' '),
|
|
76
|
+
);
|
|
36
77
|
}
|
|
78
|
+
|
|
79
|
+
export const InputImports = [InputComponent] as const;
|
package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/label/label.ts
CHANGED
|
@@ -4,14 +4,18 @@
|
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
6
|
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
7
|
+
import { HlmLabelImports } from '@spartan-ng/styles/label';
|
|
7
8
|
|
|
8
|
-
/** Thin wrapper over the native `<label>` element. */
|
|
9
9
|
@Component({
|
|
10
10
|
selector: 'app-label',
|
|
11
11
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
12
|
-
|
|
12
|
+
imports: [HlmLabelImports],
|
|
13
|
+
template: `
|
|
14
|
+
<label hlmLabel [for]="for() ?? undefined" class="mb-1.5 block"><ng-content /></label>
|
|
15
|
+
`,
|
|
13
16
|
})
|
|
14
17
|
export class LabelComponent {
|
|
15
|
-
|
|
16
|
-
readonly for = input<string | null>(null);
|
|
18
|
+
readonly for = input<string | null | undefined>(undefined);
|
|
17
19
|
}
|
|
20
|
+
|
|
21
|
+
export const LabelImports = [LabelComponent] as const;
|
|
@@ -1,10 +1,74 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
@if (!hidePageSize()) {
|
|
2
|
+
<div class="flex items-center gap-2">
|
|
3
|
+
<span [id]="pageSizeLabelId" class="text-muted-foreground text-nowrap">Items per page:</span>
|
|
4
|
+
@if (pageSizeOptions().length > 0) {
|
|
5
|
+
<select
|
|
6
|
+
class="h-8 rounded-md border border-input bg-background px-2 text-sm"
|
|
7
|
+
[attr.aria-labelledby]="pageSizeLabelId"
|
|
8
|
+
[disabled]="disabled()"
|
|
9
|
+
(change)="onPageSizeChange($event)"
|
|
10
|
+
>
|
|
11
|
+
@for (opt of pageSizeOptions(); track opt) {
|
|
12
|
+
<option [value]="opt" [selected]="opt === pageSize()">{{ opt }}</option>
|
|
13
|
+
}
|
|
14
|
+
</select>
|
|
15
|
+
} @else {
|
|
16
|
+
<span class="text-muted-foreground">{{ pageSize() }}</span>
|
|
17
|
+
}
|
|
18
|
+
</div>
|
|
19
|
+
}
|
|
20
|
+
<div class="text-muted-foreground text-nowrap">
|
|
21
|
+
{{ rangeLabel() }}
|
|
22
|
+
</div>
|
|
23
|
+
<nav hlmPagination class="w-auto mx-0">
|
|
24
|
+
<ul hlmPaginationContent>
|
|
25
|
+
@if (showFirstLastButtons()) {
|
|
26
|
+
<li hlmPaginationItem>
|
|
27
|
+
<button
|
|
28
|
+
type="button"
|
|
29
|
+
class="inline-flex items-center justify-center size-8 rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:pointer-events-none"
|
|
30
|
+
[disabled]="disabled() || clampedPageIndex() === 0"
|
|
31
|
+
(click)="goToPage(0)"
|
|
32
|
+
aria-label="First page"
|
|
33
|
+
>
|
|
34
|
+
<ng-icon name="lucideChevronFirst" size="16" />
|
|
35
|
+
</button>
|
|
36
|
+
</li>
|
|
37
|
+
}
|
|
38
|
+
<li hlmPaginationItem>
|
|
39
|
+
<button
|
|
40
|
+
type="button"
|
|
41
|
+
class="inline-flex items-center justify-center size-8 rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:pointer-events-none"
|
|
42
|
+
[disabled]="disabled() || clampedPageIndex() === 0"
|
|
43
|
+
(click)="goToPage(clampedPageIndex() - 1)"
|
|
44
|
+
aria-label="Previous page"
|
|
45
|
+
>
|
|
46
|
+
<ng-icon name="lucideChevronLeft" size="16" />
|
|
47
|
+
</button>
|
|
48
|
+
</li>
|
|
49
|
+
<li hlmPaginationItem>
|
|
50
|
+
<button
|
|
51
|
+
type="button"
|
|
52
|
+
class="inline-flex items-center justify-center size-8 rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:pointer-events-none"
|
|
53
|
+
[disabled]="disabled() || clampedPageIndex() >= lastPage()"
|
|
54
|
+
(click)="goToPage(clampedPageIndex() + 1)"
|
|
55
|
+
aria-label="Next page"
|
|
56
|
+
>
|
|
57
|
+
<ng-icon name="lucideChevronRight" size="16" />
|
|
58
|
+
</button>
|
|
59
|
+
</li>
|
|
60
|
+
@if (showFirstLastButtons()) {
|
|
61
|
+
<li hlmPaginationItem>
|
|
62
|
+
<button
|
|
63
|
+
type="button"
|
|
64
|
+
class="inline-flex items-center justify-center size-8 rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:pointer-events-none"
|
|
65
|
+
[disabled]="disabled() || clampedPageIndex() >= lastPage()"
|
|
66
|
+
(click)="goToPage(lastPage())"
|
|
67
|
+
aria-label="Last page"
|
|
68
|
+
>
|
|
69
|
+
<ng-icon name="lucideChevronLast" size="16" />
|
|
70
|
+
</button>
|
|
71
|
+
</li>
|
|
72
|
+
}
|
|
73
|
+
</ul>
|
|
74
|
+
</nav>
|
|
@@ -3,35 +3,91 @@
|
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
|
|
6
|
+
import {
|
|
7
|
+
ChangeDetectionStrategy,
|
|
8
|
+
Component,
|
|
9
|
+
booleanAttribute,
|
|
10
|
+
computed,
|
|
11
|
+
input,
|
|
12
|
+
model,
|
|
13
|
+
output,
|
|
14
|
+
} from '@angular/core';
|
|
15
|
+
import { NgIcon, provideIcons } from '@ng-icons/core';
|
|
16
|
+
import {
|
|
17
|
+
lucideChevronFirst,
|
|
18
|
+
lucideChevronLast,
|
|
19
|
+
lucideChevronLeft,
|
|
20
|
+
lucideChevronRight,
|
|
21
|
+
} from '@ng-icons/lucide';
|
|
22
|
+
import { HlmPaginationImports } from '@spartan-ng/styles/pagination';
|
|
23
|
+
import type { PageEvent } from './types';
|
|
24
|
+
|
|
25
|
+
export type { PageEvent } from './types';
|
|
8
26
|
|
|
9
|
-
/**
|
|
10
|
-
* Thin wrapper over Material's `mat-paginator`. Presentation only — the host
|
|
11
|
-
* decides what each page change means by listening to `(page)`.
|
|
12
|
-
*/
|
|
13
27
|
@Component({
|
|
14
28
|
selector: 'app-paginator',
|
|
15
29
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
16
|
-
imports: [
|
|
30
|
+
imports: [HlmPaginationImports, NgIcon],
|
|
31
|
+
providers: [
|
|
32
|
+
provideIcons({ lucideChevronFirst, lucideChevronLast, lucideChevronLeft, lucideChevronRight }),
|
|
33
|
+
],
|
|
34
|
+
host: { class: 'flex items-center justify-end gap-4 text-sm' },
|
|
17
35
|
templateUrl: './paginator.html',
|
|
18
36
|
})
|
|
19
37
|
export class PaginatorComponent {
|
|
20
|
-
/** Total item count; Material derives the page count as `ceil(length / pageSize)`. */
|
|
21
38
|
readonly length = input<number>(0);
|
|
22
|
-
|
|
23
|
-
readonly
|
|
24
|
-
/** Items shown per page. */
|
|
25
|
-
readonly pageSize = input<number>(10);
|
|
26
|
-
/** Selectable page sizes; omit/empty to hide the size selector. */
|
|
39
|
+
readonly pageIndex = model<number>(0);
|
|
40
|
+
readonly pageSize = model<number>(10);
|
|
27
41
|
readonly pageSizeOptions = input<readonly number[]>([]);
|
|
28
|
-
/** Disable navigation buttons and the size select (e.g. while loading). */
|
|
29
42
|
readonly disabled = input(false, { transform: booleanAttribute });
|
|
30
|
-
/** Hide the "Items per page" selector. */
|
|
31
43
|
readonly hidePageSize = input(false, { transform: booleanAttribute });
|
|
32
|
-
/** Show the first / last page jump buttons. */
|
|
33
44
|
readonly showFirstLastButtons = input(false, { transform: booleanAttribute });
|
|
34
|
-
|
|
35
|
-
/** Emitted when the user changes page or page size. */
|
|
36
45
|
readonly page = output<PageEvent>();
|
|
46
|
+
|
|
47
|
+
private static _uid = 0;
|
|
48
|
+
// Unique so the label→select association survives multiple paginators on a page.
|
|
49
|
+
protected readonly pageSizeLabelId = `app-paginator-page-size-${PaginatorComponent._uid++}`;
|
|
50
|
+
|
|
51
|
+
protected readonly lastPage = computed(() =>
|
|
52
|
+
Math.max(0, Math.ceil(this.length() / this.pageSize()) - 1),
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
protected readonly clampedPageIndex = computed(() =>
|
|
56
|
+
Math.max(0, Math.min(this.pageIndex(), this.lastPage())),
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
protected readonly rangeLabel = computed(() => {
|
|
60
|
+
const len = this.length();
|
|
61
|
+
if (len === 0) return '0 of 0';
|
|
62
|
+
const idx = this.clampedPageIndex();
|
|
63
|
+
const start = idx * this.pageSize() + 1;
|
|
64
|
+
const end = Math.min((idx + 1) * this.pageSize(), len);
|
|
65
|
+
return `${start} – ${end} of ${len}`;
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
protected goToPage(index: number): void {
|
|
69
|
+
const previousPageIndex = this.pageIndex();
|
|
70
|
+
this.pageIndex.set(index);
|
|
71
|
+
this.page.emit({
|
|
72
|
+
pageIndex: index,
|
|
73
|
+
previousPageIndex,
|
|
74
|
+
pageSize: this.pageSize(),
|
|
75
|
+
length: this.length(),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
protected onPageSizeChange(event: Event): void {
|
|
80
|
+
const newSize = Number((event.target as HTMLSelectElement).value);
|
|
81
|
+
const previousPageIndex = this.pageIndex();
|
|
82
|
+
this.pageSize.set(newSize);
|
|
83
|
+
this.pageIndex.set(0);
|
|
84
|
+
this.page.emit({
|
|
85
|
+
pageIndex: 0,
|
|
86
|
+
previousPageIndex,
|
|
87
|
+
pageSize: newSize,
|
|
88
|
+
length: this.length(),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
37
91
|
}
|
|
92
|
+
|
|
93
|
+
export const PaginatorImports = [PaginatorComponent] as const;
|
package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/paginator/types.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/** Payload emitted by PaginatorComponent's `(page)` output. */
|
|
8
|
+
export interface PageEvent {
|
|
9
|
+
pageIndex: number;
|
|
10
|
+
previousPageIndex: number;
|
|
11
|
+
pageSize: number;
|
|
12
|
+
length: number;
|
|
13
|
+
}
|
|
@@ -1,41 +1,13 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
[attr.aria-expanded]="open()"
|
|
7
|
-
(click)="toggle()"
|
|
8
|
-
(keydown.enter)="toggle()"
|
|
9
|
-
(keydown.space)="$event.preventDefault(); toggle()"
|
|
1
|
+
<hlm-popover
|
|
2
|
+
[align]="align()"
|
|
3
|
+
[sideOffset]="sideOffset()"
|
|
4
|
+
[state]="open() ? 'open' : 'closed'"
|
|
5
|
+
(stateChanged)="onStateChanged($event)"
|
|
10
6
|
>
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
<
|
|
15
|
-
cdkConnectedOverlay
|
|
16
|
-
[cdkConnectedOverlayOrigin]="origin"
|
|
17
|
-
[cdkConnectedOverlayOpen]="open()"
|
|
18
|
-
[cdkConnectedOverlayHasBackdrop]="true"
|
|
19
|
-
cdkConnectedOverlayBackdropClass="cdk-overlay-transparent-backdrop"
|
|
20
|
-
[cdkConnectedOverlayOffsetY]="sideOffset()"
|
|
21
|
-
[cdkConnectedOverlayPositions]="[
|
|
22
|
-
{
|
|
23
|
-
originX: align(),
|
|
24
|
-
originY: 'bottom',
|
|
25
|
-
overlayX: align(),
|
|
26
|
-
overlayY: 'top',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
originX: align(),
|
|
30
|
-
originY: 'top',
|
|
31
|
-
overlayX: align(),
|
|
32
|
-
overlayY: 'bottom',
|
|
33
|
-
},
|
|
34
|
-
]"
|
|
35
|
-
(backdropClick)="close()"
|
|
36
|
-
(detach)="close()"
|
|
37
|
-
>
|
|
38
|
-
<div class="bg-white text-sm rounded-lg shadow-md ring-1 ring-black/10 outline-none">
|
|
7
|
+
<button hlmPopoverTrigger type="button" [class]="triggerClass()" [attr.aria-label]="ariaLabel()">
|
|
8
|
+
<ng-content select="[trigger]" />
|
|
9
|
+
</button>
|
|
10
|
+
<div hlmPopoverContent *hlmPopoverPortal>
|
|
39
11
|
<ng-content />
|
|
40
12
|
</div>
|
|
41
|
-
</
|
|
13
|
+
</hlm-popover>
|
package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/popover/popover.ts
CHANGED
|
@@ -3,32 +3,23 @@
|
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
|
-
import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
|
|
7
6
|
import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';
|
|
7
|
+
import { HlmPopoverImports } from '@spartan-ng/styles/popover';
|
|
8
8
|
|
|
9
|
-
/**
|
|
10
|
-
* Popover backed by CDK Overlay. Slots: `[trigger]` (anchor, toggles the
|
|
11
|
-
* popover) and default (body). `open` is a two-way model; a backdrop click
|
|
12
|
-
* closes it.
|
|
13
|
-
*/
|
|
14
9
|
@Component({
|
|
15
10
|
selector: 'app-popover',
|
|
16
11
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
17
|
-
imports: [
|
|
12
|
+
imports: [HlmPopoverImports],
|
|
18
13
|
templateUrl: './popover.html',
|
|
19
14
|
})
|
|
20
15
|
export class PopoverComponent {
|
|
21
|
-
/**
|
|
22
|
-
* Two-way bindable open state. Supports `[(open)]`, a plain `[open]`
|
|
23
|
-
* input, or listening to the auto-generated `(openChange)` event.
|
|
24
|
-
*/
|
|
25
16
|
readonly open = model<boolean>(false);
|
|
26
|
-
|
|
27
|
-
/** Panel alignment relative to the trigger. Defaults to below-start. */
|
|
28
17
|
readonly align = input<'start' | 'center' | 'end'>('start');
|
|
29
|
-
|
|
30
|
-
/** Vertical gap between the trigger and the panel, in px. */
|
|
31
18
|
readonly sideOffset = input<number>(4);
|
|
19
|
+
// The wrapper owns the single real trigger `<button>` (so callers project
|
|
20
|
+
// plain content, never a nested button); these style/label it.
|
|
21
|
+
readonly triggerClass = input<string>('');
|
|
22
|
+
readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });
|
|
32
23
|
|
|
33
24
|
toggle(): void {
|
|
34
25
|
this.open.set(!this.open());
|
|
@@ -37,4 +28,10 @@ export class PopoverComponent {
|
|
|
37
28
|
close(): void {
|
|
38
29
|
this.open.set(false);
|
|
39
30
|
}
|
|
31
|
+
|
|
32
|
+
protected onStateChanged(state: 'open' | 'closed'): void {
|
|
33
|
+
this.open.set(state === 'open');
|
|
34
|
+
}
|
|
40
35
|
}
|
|
36
|
+
|
|
37
|
+
export const PopoverImports = [PopoverComponent] as const;
|
package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/select/select.html
CHANGED
|
@@ -1,24 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
class="
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<mat-label>{{ label() }}</mat-label>
|
|
9
|
-
}
|
|
10
|
-
<mat-select
|
|
11
|
-
[multiple]="multiple()"
|
|
12
|
-
[placeholder]="placeholder()"
|
|
1
|
+
@if (label()) {
|
|
2
|
+
<label hlmLabel [for]="labelId" class="mb-1.5 block">{{ label() }}</label>
|
|
3
|
+
}
|
|
4
|
+
@if (!multiple()) {
|
|
5
|
+
<hlm-select
|
|
6
|
+
[value]="value()"
|
|
7
|
+
(valueChange)="onSingleChange($event)"
|
|
13
8
|
[disabled]="disabled()"
|
|
14
|
-
[
|
|
15
|
-
(ngModelChange)="onSelectionChange($event)"
|
|
9
|
+
[itemToString]="itemToString"
|
|
16
10
|
>
|
|
17
|
-
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
</
|
|
11
|
+
<hlm-select-trigger [buttonId]="labelId" [size]="size()" [class]="triggerClasses()">
|
|
12
|
+
<hlm-select-value [placeholder]="placeholder()" />
|
|
13
|
+
</hlm-select-trigger>
|
|
14
|
+
<hlm-select-content *hlmSelectPortal>
|
|
15
|
+
@for (option of options(); track option.value) {
|
|
16
|
+
<hlm-select-item [value]="option.value">{{ option.label }}</hlm-select-item>
|
|
17
|
+
}
|
|
18
|
+
</hlm-select-content>
|
|
19
|
+
</hlm-select>
|
|
20
|
+
} @else {
|
|
21
|
+
<hlm-select-multiple
|
|
22
|
+
[value]="$any(values())"
|
|
23
|
+
(valueChange)="onMultiChange($event)"
|
|
24
|
+
[disabled]="disabled()"
|
|
25
|
+
[itemToString]="itemToString"
|
|
26
|
+
>
|
|
27
|
+
<hlm-select-trigger [buttonId]="labelId" [size]="size()" [class]="triggerClasses()">
|
|
28
|
+
<hlm-select-value [placeholder]="placeholder()" />
|
|
29
|
+
</hlm-select-trigger>
|
|
30
|
+
<hlm-select-content *hlmSelectPortal>
|
|
31
|
+
@for (option of options(); track option.value) {
|
|
32
|
+
<hlm-select-item [value]="option.value">{{ option.label }}</hlm-select-item>
|
|
33
|
+
}
|
|
34
|
+
</hlm-select-content>
|
|
35
|
+
</hlm-select-multiple>
|
|
36
|
+
}
|
package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/select/select.ts
CHANGED
|
@@ -4,69 +4,60 @@
|
|
|
4
4
|
* For full license text, see the LICENSE.txt file
|
|
5
5
|
*/
|
|
6
6
|
import {
|
|
7
|
-
booleanAttribute,
|
|
8
7
|
ChangeDetectionStrategy,
|
|
9
8
|
Component,
|
|
9
|
+
booleanAttribute,
|
|
10
10
|
computed,
|
|
11
11
|
input,
|
|
12
12
|
model,
|
|
13
13
|
} from '@angular/core';
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { MatSelectModule } from '@angular/material/select';
|
|
14
|
+
import { HlmSelectImports } from '@spartan-ng/styles/select';
|
|
15
|
+
import { HlmLabelImports } from '@spartan-ng/styles/label';
|
|
17
16
|
import type { AppFieldSize } from '../field-size';
|
|
17
|
+
import type { AppFieldAppearance } from '../field-appearance';
|
|
18
18
|
|
|
19
|
-
/** Shape of an option rendered in the dropdown. */
|
|
20
19
|
export interface AppSelectOption {
|
|
21
20
|
value: string;
|
|
22
21
|
label: string;
|
|
23
22
|
}
|
|
24
23
|
|
|
25
|
-
/** Thin wrapper over Material's `mat-form-field` + `mat-select`. */
|
|
26
24
|
@Component({
|
|
27
25
|
selector: 'app-select',
|
|
28
26
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
29
|
-
imports: [
|
|
27
|
+
imports: [HlmSelectImports, HlmLabelImports],
|
|
28
|
+
host: { class: 'block min-w-0' },
|
|
30
29
|
templateUrl: './select.html',
|
|
31
|
-
styleUrl: './select.scss',
|
|
32
30
|
})
|
|
33
31
|
export class SelectComponent {
|
|
34
|
-
/** Two-way bindable single-select value. Ignored when `multiple` is set. */
|
|
35
32
|
readonly value = model<string>('');
|
|
36
|
-
|
|
37
|
-
/** Two-way bindable multi-select values. Used only when `multiple` is `true`. */
|
|
38
33
|
readonly values = model<readonly string[]>([]);
|
|
39
|
-
|
|
40
|
-
/** Render checkbox options and allow more than one selection. */
|
|
41
34
|
readonly multiple = input(false, { transform: booleanAttribute });
|
|
42
|
-
|
|
43
35
|
readonly options = input<readonly AppSelectOption[]>([]);
|
|
44
36
|
readonly placeholder = input<string>('');
|
|
45
37
|
readonly label = input<string>('');
|
|
46
|
-
readonly disabled = input
|
|
47
|
-
readonly appearance = input<
|
|
48
|
-
/** Field height: `sm` = 24px, `default` = 32px, `lg` = 40px. */
|
|
38
|
+
readonly disabled = input(false, { transform: booleanAttribute });
|
|
39
|
+
readonly appearance = input<AppFieldAppearance>('outline');
|
|
49
40
|
readonly size = input<AppFieldSize>('default');
|
|
50
41
|
|
|
51
|
-
|
|
52
|
-
protected readonly
|
|
42
|
+
private static _uid = 0;
|
|
43
|
+
protected readonly labelId = `app-select-${SelectComponent._uid++}`;
|
|
53
44
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return `${selected.length} selected`;
|
|
45
|
+
protected readonly itemToString = (value: string): string => {
|
|
46
|
+
return this.options().find((o) => o.value === value)?.label ?? value;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
protected readonly triggerClasses = computed(() => {
|
|
50
|
+
if (this.appearance() === 'fill') return 'border-transparent bg-muted';
|
|
51
|
+
return '';
|
|
62
52
|
});
|
|
63
53
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
54
|
+
protected onSingleChange(event: string | null | undefined): void {
|
|
55
|
+
this.value.set(event ?? '');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
protected onMultiChange(event: string[] | readonly string[] | null | undefined): void {
|
|
59
|
+
this.values.set(event ?? []);
|
|
71
60
|
}
|
|
72
61
|
}
|
|
62
|
+
|
|
63
|
+
export const SelectImports = [SelectComponent] as const;
|