@salesforce/ui-bundle-template-app-angular-template-b2x 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/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 +16 -11
- 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/alert/hlm-alert-action.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/alert/hlm-alert-description.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/alert/hlm-alert-title.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/alert/hlm-alert.ts +35 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/alert/index.ts +16 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/button/hlm-button.token.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/button/hlm-button.ts +72 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/button/index.ts +6 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/calendar/hlm-calendar-multi.ts +195 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/calendar/hlm-calendar-range.ts +194 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/calendar/hlm-calendar.ts +189 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/calendar/hlm-month-year-calendar.ts +119 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/calendar/index.ts +16 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/card/hlm-card-action.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/card/hlm-card-avatar.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/card/hlm-card-content.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/card/hlm-card-description.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/card/hlm-card-footer.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/card/hlm-card-header.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/card/hlm-card-title.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/card/hlm-card.token.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/card/hlm-card.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/card/index.ts +28 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/collapsible/hlm-collapsible-content.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/collapsible/hlm-collapsible-trigger.ts +9 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/collapsible/hlm-collapsible.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/collapsible/index.ts +13 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-date-multi-input.ts +104 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-date-picker-anchor.ts +23 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-date-picker-input.ts +118 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-date-picker-multi.token.ts +109 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-date-picker-multi.ts +220 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-date-picker-trigger.ts +104 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-date-picker.token.ts +69 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-date-picker.ts +203 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-date-range-input.ts +120 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-date-range-picker.token.ts +86 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-date-range-picker.ts +252 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-month-year-input.ts +105 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-month-year-picker.token.ts +89 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/hlm-month-year-picker.ts +196 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/date-picker/index.ts +38 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dialog/hlm-dialog-close.ts +9 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dialog/hlm-dialog-content.ts +74 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dialog/hlm-dialog-description.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dialog/hlm-dialog-footer.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dialog/hlm-dialog-header.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dialog/hlm-dialog-overlay.ts +27 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dialog/hlm-dialog-portal.ts +8 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dialog/hlm-dialog-title.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dialog/hlm-dialog-trigger.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dialog/hlm-dialog.service.ts +46 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dialog/hlm-dialog.ts +24 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dialog/index.ts +35 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-checkbox-indicator.ts +21 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-checkbox.ts +54 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-focus-on-hover.ts +35 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-group.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-item-sub-indicator.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-item.ts +42 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-label.ts +20 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-radio-indicator.ts +21 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-radio.ts +49 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-separator.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-shortcut.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-sub-trigger.ts +52 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-sub.ts +53 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-token.ts +26 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu-trigger.ts +46 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/hlm-dropdown-menu.ts +57 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/dropdown-menu/index.ts +49 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/field/hlm-field-content.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/field/hlm-field-description.ts +53 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/field/hlm-field-error.ts +100 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/field/hlm-field-group.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/field/hlm-field-label.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/field/hlm-field-legend.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/field/hlm-field-separator.ts +24 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/field/hlm-field-set.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/field/hlm-field-title.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/field/hlm-field.ts +47 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/field/index.ts +34 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/input/hlm-input.ts +21 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/input/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/input-group/hlm-input-group-addon.ts +40 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/input-group/hlm-input-group-button.ts +47 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/input-group/hlm-input-group-input.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/input-group/hlm-input-group-text.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/input-group/hlm-input-group.ts +18 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/input-group/index.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/label/hlm-label.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/label/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/label/label.html +11 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/pagination/hlm-numbered-pagination-query-params.ts +191 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/pagination/hlm-numbered-pagination.ts +290 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/pagination/hlm-pagination-content.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/pagination/hlm-pagination-ellipsis.ts +27 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/pagination/hlm-pagination-item.ts +7 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/pagination/hlm-pagination-link.ts +51 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/pagination/hlm-pagination-next.ts +65 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/pagination/hlm-pagination-previous.ts +65 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/pagination/hlm-pagination.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/pagination/index.ts +31 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/popover/hlm-popover-content.ts +25 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/popover/hlm-popover-description.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/popover/hlm-popover-header.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/popover/hlm-popover-portal.ts +8 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/popover/hlm-popover-title.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/popover/hlm-popover-trigger.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/popover/hlm-popover.ts +23 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/popover/index.ts +25 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-content.ts +44 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-group.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-item.ts +36 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-label.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-multiple.ts +37 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-placeholder.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-portal.ts +8 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-scroll-down.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-scroll-up.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-separator.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-trigger.ts +59 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-value-template.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-value.ts +18 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-values-content.ts +9 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select-values.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/hlm-select.ts +37 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/select/index.ts +52 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/separator/hlm-separator.ts +19 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/separator/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/skeleton/hlm-skeleton.ts +14 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/skeleton/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spinner/hlm-spinner.ts +26 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/spinner/index.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/utils/hlm.ts +313 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/utils/index.ts +2 -0
- package/dist/force-app/main/default/uiBundles/angularextapp/src/app/shared/utils/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
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
2
|
+
import {
|
|
3
|
+
DestroyRef,
|
|
4
|
+
effect,
|
|
5
|
+
ElementRef,
|
|
6
|
+
HostAttributeToken,
|
|
7
|
+
inject,
|
|
8
|
+
Injector,
|
|
9
|
+
PLATFORM_ID,
|
|
10
|
+
runInInjectionContext,
|
|
11
|
+
} from '@angular/core';
|
|
12
|
+
import { type ClassValue, clsx } from 'clsx';
|
|
13
|
+
import { twMerge } from 'tailwind-merge';
|
|
14
|
+
|
|
15
|
+
export function hlm(...inputs: ClassValue[]) {
|
|
16
|
+
return twMerge(clsx(inputs));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Global map to track class managers per element
|
|
20
|
+
const elementClassManagers = new WeakMap<HTMLElement, ElementClassManager>();
|
|
21
|
+
// Global mutation observer for all elements
|
|
22
|
+
let globalObserver: MutationObserver | null = null;
|
|
23
|
+
const observedElements = new Set<HTMLElement>();
|
|
24
|
+
|
|
25
|
+
interface ElementClassManager {
|
|
26
|
+
element: HTMLElement;
|
|
27
|
+
sources: Map<number, { classes: Set<string>; order: number }>;
|
|
28
|
+
baseClasses: Set<string>;
|
|
29
|
+
isUpdating: boolean;
|
|
30
|
+
nextOrder: number;
|
|
31
|
+
hasInitialized: boolean;
|
|
32
|
+
restoreRafId: number | null;
|
|
33
|
+
/** Transitions are suppressed until the first effect writes correct classes */
|
|
34
|
+
transitionsSuppressed: boolean;
|
|
35
|
+
/** Original inline transition value to restore after suppression (empty string = none was set) */
|
|
36
|
+
previousTransition: string;
|
|
37
|
+
/** Original inline transition priority to preserve !important when restoring */
|
|
38
|
+
previousTransitionPriority: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
let sourceCounter = 0;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* This function dynamically adds and removes classes for a given element without requiring
|
|
45
|
+
* the a class binding (e.g. `[class]="..."`) which may interfere with other class bindings.
|
|
46
|
+
*
|
|
47
|
+
* 1. This will merge the existing classes on the element with the new classes.
|
|
48
|
+
* 2. It will also remove any classes that were previously added by this function but are no longer present in the new classes.
|
|
49
|
+
* 3. Multiple calls to this function on the same element will be merged efficiently.
|
|
50
|
+
*/
|
|
51
|
+
export function classes(computed: () => ClassValue[] | string, options: ClassesOptions = {}) {
|
|
52
|
+
runInInjectionContext(options.injector ?? inject(Injector), () => {
|
|
53
|
+
const elementRef = options.elementRef ?? inject(ElementRef);
|
|
54
|
+
const platformId = inject(PLATFORM_ID);
|
|
55
|
+
const destroyRef = inject(DestroyRef);
|
|
56
|
+
const baseClasses = inject(new HostAttributeToken('class'), { optional: true });
|
|
57
|
+
|
|
58
|
+
const element = elementRef.nativeElement;
|
|
59
|
+
|
|
60
|
+
// Create unique identifier for this source
|
|
61
|
+
const sourceId = sourceCounter++;
|
|
62
|
+
|
|
63
|
+
// Get or create the class manager for this element
|
|
64
|
+
let manager = elementClassManagers.get(element);
|
|
65
|
+
|
|
66
|
+
if (!manager) {
|
|
67
|
+
// Initialize base classes from variation (host attribute 'class')
|
|
68
|
+
const initialBaseClasses = new Set<string>();
|
|
69
|
+
|
|
70
|
+
if (baseClasses) {
|
|
71
|
+
toClassList(baseClasses).forEach((cls) => initialBaseClasses.add(cls));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
manager = {
|
|
75
|
+
element,
|
|
76
|
+
sources: new Map(),
|
|
77
|
+
baseClasses: initialBaseClasses,
|
|
78
|
+
isUpdating: false,
|
|
79
|
+
nextOrder: 0,
|
|
80
|
+
hasInitialized: false,
|
|
81
|
+
restoreRafId: null,
|
|
82
|
+
transitionsSuppressed: false,
|
|
83
|
+
previousTransition: '',
|
|
84
|
+
previousTransitionPriority: '',
|
|
85
|
+
};
|
|
86
|
+
elementClassManagers.set(element, manager);
|
|
87
|
+
|
|
88
|
+
// Setup global observer if needed and register this element
|
|
89
|
+
setupGlobalObserver(platformId);
|
|
90
|
+
observedElements.add(element);
|
|
91
|
+
|
|
92
|
+
// Suppress transitions until the first effect writes correct classes and
|
|
93
|
+
// the browser has painted them. This prevents CSS transition animations
|
|
94
|
+
// during hydration when classes change from SSR state to client state.
|
|
95
|
+
if (isPlatformBrowser(platformId)) {
|
|
96
|
+
manager.previousTransition = element.style.getPropertyValue('transition');
|
|
97
|
+
manager.previousTransitionPriority = element.style.getPropertyPriority('transition');
|
|
98
|
+
element.style.setProperty('transition', 'none', 'important');
|
|
99
|
+
manager.transitionsSuppressed = true;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Assign order once at registration time
|
|
104
|
+
const sourceOrder = manager.nextOrder++;
|
|
105
|
+
|
|
106
|
+
function updateClasses(): void {
|
|
107
|
+
// Get the new classes from the computed function
|
|
108
|
+
const newClasses = toClassList(computed());
|
|
109
|
+
|
|
110
|
+
// Update this source's classes, keeping the original order
|
|
111
|
+
manager!.sources.set(sourceId, {
|
|
112
|
+
classes: new Set(newClasses),
|
|
113
|
+
order: sourceOrder,
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// Update the element
|
|
117
|
+
updateElement(manager!);
|
|
118
|
+
|
|
119
|
+
// Re-enable transitions after the first effect writes correct classes.
|
|
120
|
+
// Deferred to next animation frame so the browser paints the class change
|
|
121
|
+
// with transitions disabled first, then re-enables them.
|
|
122
|
+
if (manager!.transitionsSuppressed) {
|
|
123
|
+
manager!.transitionsSuppressed = false;
|
|
124
|
+
manager!.restoreRafId = requestAnimationFrame(() => {
|
|
125
|
+
manager!.restoreRafId = null;
|
|
126
|
+
restoreTransitionSuppression(manager!);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Register cleanup with DestroyRef
|
|
132
|
+
destroyRef.onDestroy(() => {
|
|
133
|
+
if (manager!.restoreRafId !== null) {
|
|
134
|
+
cancelAnimationFrame(manager!.restoreRafId);
|
|
135
|
+
manager!.restoreRafId = null;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (manager!.transitionsSuppressed) {
|
|
139
|
+
manager!.transitionsSuppressed = false;
|
|
140
|
+
restoreTransitionSuppression(manager!);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Remove this source from the manager
|
|
144
|
+
manager!.sources.delete(sourceId);
|
|
145
|
+
|
|
146
|
+
// If no more sources, clean up the manager
|
|
147
|
+
if (manager!.sources.size === 0) {
|
|
148
|
+
cleanupManager(element);
|
|
149
|
+
} else {
|
|
150
|
+
// Update element without this source's classes
|
|
151
|
+
updateElement(manager!);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* We need this effect to track changes to the computed classes. Ideally, we would use
|
|
157
|
+
* afterRenderEffect here, but that doesn't run in SSR contexts, so we use a standard
|
|
158
|
+
* effect which works in both browser and SSR.
|
|
159
|
+
*/
|
|
160
|
+
effect(updateClasses);
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function restoreTransitionSuppression(manager: ElementClassManager): void {
|
|
165
|
+
const prev = manager.previousTransition;
|
|
166
|
+
if (prev) {
|
|
167
|
+
manager.element.style.setProperty(
|
|
168
|
+
'transition',
|
|
169
|
+
prev,
|
|
170
|
+
manager.previousTransitionPriority || undefined,
|
|
171
|
+
);
|
|
172
|
+
} else {
|
|
173
|
+
manager.element.style.removeProperty('transition');
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types
|
|
178
|
+
function setupGlobalObserver(platformId: Object): void {
|
|
179
|
+
if (isPlatformBrowser(platformId) && !globalObserver) {
|
|
180
|
+
// Create single global observer that watches the entire document
|
|
181
|
+
globalObserver = new MutationObserver((mutations) => {
|
|
182
|
+
for (const mutation of mutations) {
|
|
183
|
+
if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
|
|
184
|
+
const element = mutation.target as HTMLElement;
|
|
185
|
+
const manager = elementClassManagers.get(element);
|
|
186
|
+
|
|
187
|
+
// Only process elements we're managing
|
|
188
|
+
if (manager && observedElements.has(element)) {
|
|
189
|
+
if (manager.isUpdating) continue; // Ignore changes we're making
|
|
190
|
+
|
|
191
|
+
// Update base classes to include any externally added classes
|
|
192
|
+
const currentClasses = toClassList(element.className);
|
|
193
|
+
const allSourceClasses = new Set<string>();
|
|
194
|
+
|
|
195
|
+
// Collect all classes from all sources
|
|
196
|
+
for (const source of manager.sources.values()) {
|
|
197
|
+
for (const className of source.classes) {
|
|
198
|
+
allSourceClasses.add(className);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Any classes not from sources become new base classes
|
|
203
|
+
manager.baseClasses.clear();
|
|
204
|
+
|
|
205
|
+
for (const className of currentClasses) {
|
|
206
|
+
if (!allSourceClasses.has(className)) {
|
|
207
|
+
manager.baseClasses.add(className);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
updateElement(manager);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
// Start observing the entire document for class attribute changes
|
|
218
|
+
globalObserver.observe(document, {
|
|
219
|
+
attributes: true,
|
|
220
|
+
attributeFilter: ['class'],
|
|
221
|
+
subtree: true, // Watch all descendants
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function updateElement(manager: ElementClassManager): void {
|
|
227
|
+
if (manager.isUpdating) return; // Prevent recursive updates
|
|
228
|
+
|
|
229
|
+
manager.isUpdating = true;
|
|
230
|
+
|
|
231
|
+
// Handle initialization: capture base classes after first source registration
|
|
232
|
+
if (!manager.hasInitialized && manager.sources.size > 0) {
|
|
233
|
+
// Get current classes on element (may include SSR classes)
|
|
234
|
+
const currentClasses = toClassList(manager.element.className);
|
|
235
|
+
|
|
236
|
+
// Get all classes that will be applied by sources
|
|
237
|
+
const allSourceClasses = new Set<string>();
|
|
238
|
+
for (const source of manager.sources.values()) {
|
|
239
|
+
source.classes.forEach((className) => allSourceClasses.add(className));
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// Only consider classes as "base" if they're not produced by any source
|
|
243
|
+
// This prevents SSR-rendered classes from being preserved as base classes
|
|
244
|
+
currentClasses.forEach((className) => {
|
|
245
|
+
if (!allSourceClasses.has(className)) {
|
|
246
|
+
manager.baseClasses.add(className);
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
manager.hasInitialized = true;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Get classes from all sources, sorted by registration order (later takes precedence)
|
|
254
|
+
const sortedSources = Array.from(manager.sources.entries()).sort(
|
|
255
|
+
([, a], [, b]) => a.order - b.order,
|
|
256
|
+
);
|
|
257
|
+
|
|
258
|
+
const allSourceClasses: string[] = [];
|
|
259
|
+
for (const [, source] of sortedSources) {
|
|
260
|
+
allSourceClasses.push(...source.classes);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Combine base classes with all source classes, ensuring base classes take precedence
|
|
264
|
+
const classesToApply =
|
|
265
|
+
allSourceClasses.length > 0 || manager.baseClasses.size > 0
|
|
266
|
+
? hlm([...allSourceClasses, ...manager.baseClasses])
|
|
267
|
+
: '';
|
|
268
|
+
|
|
269
|
+
// Apply the classes to the element
|
|
270
|
+
if (manager.element.className !== classesToApply) {
|
|
271
|
+
manager.element.className = classesToApply;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
manager.isUpdating = false;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function cleanupManager(element: HTMLElement): void {
|
|
278
|
+
// Remove from global tracking
|
|
279
|
+
observedElements.delete(element);
|
|
280
|
+
elementClassManagers.delete(element);
|
|
281
|
+
|
|
282
|
+
// If no more elements being tracked, cleanup global observer
|
|
283
|
+
if (observedElements.size === 0 && globalObserver) {
|
|
284
|
+
globalObserver.disconnect();
|
|
285
|
+
globalObserver = null;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
interface ClassesOptions {
|
|
290
|
+
elementRef?: ElementRef<HTMLElement>;
|
|
291
|
+
injector?: Injector;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// Cache for parsed class lists to avoid repeated string operations
|
|
295
|
+
const classListCache = new Map<string, string[]>();
|
|
296
|
+
|
|
297
|
+
function toClassList(className: string | ClassValue[]): string[] {
|
|
298
|
+
// For simple string inputs, use cache to avoid repeated parsing
|
|
299
|
+
if (typeof className === 'string' && classListCache.has(className)) {
|
|
300
|
+
return classListCache.get(className)!;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
const result = clsx(className)
|
|
304
|
+
.split(' ')
|
|
305
|
+
.filter((c) => c.length > 0);
|
|
306
|
+
|
|
307
|
+
// Cache string results, but limit cache size to prevent memory growth
|
|
308
|
+
if (typeof className === 'string' && classListCache.size < 1000) {
|
|
309
|
+
classListCache.set(className, result);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
return result;
|
|
313
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { OVERLAY_DEFAULT_CONFIG } from '@angular/cdk/overlay';
|
|
2
|
+
import { type EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Provides default configuration for Spartan Helm components.
|
|
6
|
+
*
|
|
7
|
+
* This utility configures the Angular CDK overlay to disable the `usePopover`
|
|
8
|
+
* behavior introduced in Angular 21, which causes CDK overlay-based components
|
|
9
|
+
* (sheets, dialogs, tooltips, etc.) to render above `position: fixed` elements
|
|
10
|
+
* like `<hlm-toaster>`.
|
|
11
|
+
*
|
|
12
|
+
* @returns {EnvironmentProviders} Environment providers to be added to the application config.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* // app.config.ts
|
|
17
|
+
* import { provideSpartanHlm } from '@spartan-ng/styles/utils';
|
|
18
|
+
*
|
|
19
|
+
* export const appConfig: ApplicationConfig = {
|
|
20
|
+
* providers: [
|
|
21
|
+
* provideSpartanHlm(),
|
|
22
|
+
* // ... other providers
|
|
23
|
+
* ],
|
|
24
|
+
* };
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function provideSpartanHlm(): EnvironmentProviders {
|
|
28
|
+
return makeEnvironmentProviders([
|
|
29
|
+
{
|
|
30
|
+
provide: OVERLAY_DEFAULT_CONFIG,
|
|
31
|
+
useValue: { usePopover: false },
|
|
32
|
+
},
|
|
33
|
+
]);
|
|
34
|
+
}
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
<base href="/" />
|
|
7
7
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
8
8
|
<link rel="icon" type="image/x-icon" href="favicon.ico" />
|
|
9
|
-
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />
|
|
10
9
|
</head>
|
|
11
10
|
<body>
|
|
12
11
|
<app-root></app-root>
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
@
|
|
1
|
+
@layer theme, base, components, utilities;
|
|
2
|
+
@import 'tailwindcss/theme.css' layer(theme);
|
|
3
|
+
@import 'tailwindcss/preflight.css' layer(base);
|
|
4
|
+
@import 'tailwindcss/utilities.css';
|
|
5
|
+
@import '@spartan-ng/brain/hlm-tailwind-preset.css';
|
|
2
6
|
|
|
3
7
|
@layer base {
|
|
4
8
|
html,
|
|
@@ -14,12 +18,8 @@
|
|
|
14
18
|
@custom-variant dark (&:is(.dark *));
|
|
15
19
|
|
|
16
20
|
/*
|
|
17
|
-
* shadcn design tokens
|
|
18
|
-
*
|
|
19
|
-
* rounded-* via --radius, etc.) renders identically in Angular. The React base
|
|
20
|
-
* also imports tw-animate-css and shadcn/tailwind.css (accordion keyframes +
|
|
21
|
-
* data-* variants) — omitted here as they are not installed for the Angular
|
|
22
|
-
* base and are not required for layout/color parity.
|
|
21
|
+
* shadcn design tokens — identical to the React base app's global.css.
|
|
22
|
+
* Spartan/UI helm components read these CSS variables directly.
|
|
23
23
|
*/
|
|
24
24
|
@theme inline {
|
|
25
25
|
--color-background: var(--background);
|
|
@@ -137,34 +137,3 @@
|
|
|
137
137
|
@apply bg-background text-foreground;
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
|
-
|
|
141
|
-
/*
|
|
142
|
-
* Angular Material colour re-skin — layered on top of the custom M3 theme
|
|
143
|
-
* defined in theme.scss. The theme owns density (compact control heights) and
|
|
144
|
-
* seeds the base `--mat-sys-*` system variables; here we remap the colour and
|
|
145
|
-
* shape system variables to our shadcn design tokens so every Material
|
|
146
|
-
* component adopts the shadcn look without touching component code. This block
|
|
147
|
-
* loads after theme.scss, so these values win.
|
|
148
|
-
*
|
|
149
|
-
* Control sizing is NOT set here — density handles heights, and any remaining
|
|
150
|
-
* form-field-specific styling lives in the component's own scoped CSS.
|
|
151
|
-
*/
|
|
152
|
-
:root {
|
|
153
|
-
--mat-sys-primary: var(--primary);
|
|
154
|
-
--mat-sys-on-primary: var(--primary-foreground);
|
|
155
|
-
--mat-sys-surface: var(--background);
|
|
156
|
-
--mat-sys-on-surface: var(--foreground);
|
|
157
|
-
--mat-sys-surface-variant: var(--muted);
|
|
158
|
-
--mat-sys-on-surface-variant: var(--muted-foreground);
|
|
159
|
-
--mat-sys-outline: var(--border);
|
|
160
|
-
--mat-sys-outline-variant: var(--border);
|
|
161
|
-
--mat-sys-error: var(--destructive);
|
|
162
|
-
--mat-sys-corner-small: var(--radius-sm);
|
|
163
|
-
--mat-sys-corner-medium: var(--radius-md);
|
|
164
|
-
--mat-sys-corner-large: var(--radius-lg);
|
|
165
|
-
|
|
166
|
-
// Card subtitle — Material defaults this to `--mat-sys-on-surface` (the same
|
|
167
|
-
// dark colour as the title). React renders the card description in muted
|
|
168
|
-
// grey (`text-muted-foreground`), so point the subtitle token there.
|
|
169
|
-
--mat-card-subtitle-text-color: var(--muted-foreground);
|
|
170
|
-
}
|
|
@@ -13,7 +13,10 @@
|
|
|
13
13
|
"experimentalDecorators": true,
|
|
14
14
|
"importHelpers": true,
|
|
15
15
|
"target": "ES2022",
|
|
16
|
-
"module": "preserve"
|
|
16
|
+
"module": "preserve",
|
|
17
|
+
"paths": {
|
|
18
|
+
"@spartan-ng/styles/*": ["./src/app/shared/*/index.ts"]
|
|
19
|
+
}
|
|
17
20
|
},
|
|
18
21
|
"angularCompilerOptions": {
|
|
19
22
|
"enableI18nLegacyMessageIdFormat": false,
|
package/dist/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/ui-bundle-template-base-sfdx-project",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.62.1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@salesforce/ui-bundle-template-base-sfdx-project",
|
|
9
|
-
"version": "11.
|
|
9
|
+
"version": "11.62.1",
|
|
10
10
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"fast-xml-parser": "^5.9.3",
|
package/dist/package.json
CHANGED
package/package.json
CHANGED
package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/_field-size.scss
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
* For full license text, see the LICENSE.txt file
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/*
|
|
8
|
-
* Shared height scale for the form-field wrappers (app-input, app-select,
|
|
9
|
-
* app-date-picker): sm = 24px, default = 32px, lg = 40px.
|
|
10
|
-
*
|
|
11
|
-
* Material's density scale only reaches 36px at its -5 floor, so these compact
|
|
12
|
-
* heights can't come from `mat.form-field-density`. Instead we set the two M3
|
|
13
|
-
* tokens that drive the height directly:
|
|
14
|
-
* --mat-form-field-container-height -> `.mat-mdc-form-field-flex` min-height
|
|
15
|
-
* --mat-form-field-container-vertical-padding -> infix padding-top / -bottom
|
|
16
|
-
*
|
|
17
|
-
* These are CSS custom properties, so setting them on the wrapper's own
|
|
18
|
-
* `mat-form-field` (an in-view element that matches under emulated
|
|
19
|
-
* encapsulation) is enough — they INHERIT down to Material's internal flex /
|
|
20
|
-
* infix elements. No `::ng-deep` and no global classes needed. This mirrors how
|
|
21
|
-
* `app-button` sizes work (it sets `--mat-button-*-container-height` tokens).
|
|
22
|
-
*/
|
|
23
|
-
@mixin apply($height, $vertical-padding) {
|
|
24
|
-
--mat-form-field-container-height: #{$height};
|
|
25
|
-
--mat-form-field-container-vertical-padding: #{$vertical-padding};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/*
|
|
29
|
-
* Emit the three size classes. Consumers opt in via `size` on the wrapper,
|
|
30
|
-
* which renders `size-sm | size-default | size-lg` on the mat-form-field.
|
|
31
|
-
*/
|
|
32
|
-
@mixin sizes {
|
|
33
|
-
.size-sm {
|
|
34
|
-
@include apply(1.5rem, 0.25rem); // 24px, 4px
|
|
35
|
-
}
|
|
36
|
-
.size-default {
|
|
37
|
-
@include apply(2rem, 0.5rem); // 32px, 8px
|
|
38
|
-
}
|
|
39
|
-
.size-lg {
|
|
40
|
-
@include apply(2.5rem, 0.75rem); // 40px, 12px
|
|
41
|
-
}
|
|
42
|
-
}
|
package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/button/button.scss
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
* For full license text, see the LICENSE.txt file
|
|
5
|
-
*/
|
|
6
|
-
@use '@angular/material' as mat;
|
|
7
|
-
|
|
8
|
-
// Compact density themes — Material's canonical heights (36 / 32 / 28px).
|
|
9
|
-
$-lg: mat.define-theme(
|
|
10
|
-
(
|
|
11
|
-
density: (
|
|
12
|
-
scale: -1,
|
|
13
|
-
),
|
|
14
|
-
)
|
|
15
|
-
);
|
|
16
|
-
$-md: mat.define-theme(
|
|
17
|
-
(
|
|
18
|
-
density: (
|
|
19
|
-
scale: -2,
|
|
20
|
-
),
|
|
21
|
-
)
|
|
22
|
-
);
|
|
23
|
-
$-sm: mat.define-theme(
|
|
24
|
-
(
|
|
25
|
-
density: (
|
|
26
|
-
scale: -3,
|
|
27
|
-
),
|
|
28
|
-
)
|
|
29
|
-
);
|
|
30
|
-
|
|
31
|
-
@mixin -height($h) {
|
|
32
|
-
--mat-button-filled-container-height: #{$h};
|
|
33
|
-
--mat-button-outlined-container-height: #{$h};
|
|
34
|
-
--mat-button-text-container-height: #{$h};
|
|
35
|
-
--mat-button-tonal-container-height: #{$h};
|
|
36
|
-
--mat-button-protected-container-height: #{$h};
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
@mixin -label-size($s) {
|
|
40
|
-
--mat-button-filled-label-text-size: #{$s};
|
|
41
|
-
--mat-button-outlined-label-text-size: #{$s};
|
|
42
|
-
--mat-button-text-label-text-size: #{$s};
|
|
43
|
-
--mat-button-tonal-label-text-size: #{$s};
|
|
44
|
-
--mat-button-protected-label-text-size: #{$s};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
:host {
|
|
48
|
-
display: inline-flex;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.mat-mdc-button-base {
|
|
52
|
-
width: 100%;
|
|
53
|
-
font-weight: 500;
|
|
54
|
-
--mat-button-filled-container-shape: var(--radius-md);
|
|
55
|
-
--mat-button-outlined-container-shape: var(--radius-md);
|
|
56
|
-
--mat-button-text-container-shape: var(--radius-md);
|
|
57
|
-
--mat-button-tonal-container-shape: var(--radius-md);
|
|
58
|
-
--mat-button-protected-container-shape: var(--radius-md);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Heights via Material's density scale; 24px (xs) sits below the button
|
|
62
|
-
// density floor (-3 = 28px), so it sets the height token directly.
|
|
63
|
-
.size-default,
|
|
64
|
-
.size-icon {
|
|
65
|
-
@include mat.button-density($-md);
|
|
66
|
-
}
|
|
67
|
-
.size-sm,
|
|
68
|
-
.size-icon-sm {
|
|
69
|
-
@include mat.button-density($-sm);
|
|
70
|
-
}
|
|
71
|
-
.size-lg,
|
|
72
|
-
.size-icon-lg {
|
|
73
|
-
@include mat.button-density($-lg);
|
|
74
|
-
}
|
|
75
|
-
.size-xs,
|
|
76
|
-
.size-icon-xs {
|
|
77
|
-
@include -height(1.5rem);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Font-size isn't a density concern, so it stays a label token.
|
|
81
|
-
.size-default,
|
|
82
|
-
.size-lg {
|
|
83
|
-
@include -label-size(0.875rem);
|
|
84
|
-
}
|
|
85
|
-
.size-sm {
|
|
86
|
-
@include -label-size(0.8rem);
|
|
87
|
-
}
|
|
88
|
-
.size-xs {
|
|
89
|
-
@include -label-size(0.75rem);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Icon-only: square, no min-width or horizontal padding. Material's leading-icon
|
|
93
|
-
// margins assume a text label, so zero them to keep the icon centred.
|
|
94
|
-
.size-icon,
|
|
95
|
-
.size-icon-xs,
|
|
96
|
-
.size-icon-sm,
|
|
97
|
-
.size-icon-lg {
|
|
98
|
-
width: auto;
|
|
99
|
-
min-width: 0;
|
|
100
|
-
padding: 0;
|
|
101
|
-
aspect-ratio: 1;
|
|
102
|
-
|
|
103
|
-
.mat-icon {
|
|
104
|
-
margin: 0;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Destructive: subtle red tint + red text, matching React's bg-destructive/10.
|
|
109
|
-
.destructive {
|
|
110
|
-
--mat-button-filled-container-color: color-mix(in oklch, var(--destructive) 10%, transparent);
|
|
111
|
-
--mat-button-filled-label-text-color: var(--destructive);
|
|
112
|
-
}
|
package/dist/force-app/main/default/uiBundles/angularextapp/src/app/components/ui/card/card.scss
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
* For full license text, see the LICENSE.txt file
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// `size="sm"` — compact padding. Material hardcodes the card's 16px padding
|
|
8
|
-
// (there is no padding design token to override), so the compact size tightens
|
|
9
|
-
// the real Material padding classes. `::ng-deep` is required because the slot
|
|
10
|
-
// content (`mat-card-header/content/actions`) is projected — it lives in the
|
|
11
|
-
// consumer's view, not this wrapper's — so a plain scoped selector can't reach
|
|
12
|
-
// it. The rules are anchored under `.app-card-sm`, a class only this component
|
|
13
|
-
// applies, so the deep selector stays contained to compact cards.
|
|
14
|
-
.app-card-sm {
|
|
15
|
-
::ng-deep .mat-mdc-card-header {
|
|
16
|
-
padding: 0.75rem 0.75rem 0;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
::ng-deep .mat-mdc-card-content {
|
|
20
|
-
padding: 0 0.75rem;
|
|
21
|
-
|
|
22
|
-
&:first-child {
|
|
23
|
-
padding-top: 0.75rem;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
&:last-child {
|
|
27
|
-
padding-bottom: 0.75rem;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
::ng-deep .mat-mdc-card-actions {
|
|
32
|
-
padding: 0.75rem;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
* For full license text, see the LICENSE.txt file
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
@use '../field-size' as field-size;
|
|
8
|
-
|
|
9
|
-
/*
|
|
10
|
-
* Form-field-specific structural styling. Height comes from the `size` input
|
|
11
|
-
* (see field-size.scss); colour comes from the --mat-sys-* remap (styles.css).
|
|
12
|
-
* Here we only: give the outline our design-token radius, emit the size
|
|
13
|
-
* classes, and collapse the empty hint/error subscript row.
|
|
14
|
-
*/
|
|
15
|
-
@include field-size.sizes;
|
|
16
|
-
|
|
17
|
-
:host {
|
|
18
|
-
display: block;
|
|
19
|
-
/*
|
|
20
|
-
* Allow the host to shrink below the mat-form-field's intrinsic width when
|
|
21
|
-
* used as a flex item (e.g. two side-by-side pickers in a date-range filter,
|
|
22
|
-
* or a picker beside an operator select). Without this, the default
|
|
23
|
-
* `min-width: auto` on a flex item keeps each field at its content width and
|
|
24
|
-
* the row overflows its container.
|
|
25
|
-
*/
|
|
26
|
-
min-width: 0;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.mat-mdc-form-field {
|
|
30
|
-
--mdc-outlined-text-field-container-shape: var(--radius-md);
|
|
31
|
-
font-size: 0.875rem; /* text-sm, matches the React inputs */
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.mat-mdc-form-field-subscript-wrapper {
|
|
35
|
-
display: none;
|
|
36
|
-
}
|