@slotted/angular 0.1.0-beta.1 → 0.1.0-beta.11
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/README.md +4 -0
- package/docs/AGENTS.snippet.md +12 -0
- package/docs/action-bar.json +4 -4
- package/docs/action-bar.md +3 -3
- package/docs/alert.json +7 -1
- package/docs/alert.md +3 -3
- package/docs/app-shell.examples.md +1 -1
- package/docs/app-shell.json +5 -5
- package/docs/app-shell.md +2 -2
- package/docs/avatar.json +22 -1
- package/docs/avatar.md +5 -3
- package/docs/badge.json +7 -1
- package/docs/badge.md +3 -3
- package/docs/button-group.json +2 -0
- package/docs/button-group.md +1 -1
- package/docs/button.json +51 -11
- package/docs/button.md +10 -6
- package/docs/calendar.json +8 -1
- package/docs/calendar.md +3 -2
- package/docs/cascader.json +1 -0
- package/docs/cascader.md +1 -1
- package/docs/chart.examples.md +1 -1
- package/docs/chart.json +10 -1
- package/docs/chart.md +3 -2
- package/docs/checkbox.json +7 -0
- package/docs/checkbox.md +1 -0
- package/docs/code-block.json +92 -92
- package/docs/code-block.md +69 -69
- package/docs/combobox.json +1 -0
- package/docs/combobox.md +1 -1
- package/docs/command-palette.json +1 -0
- package/docs/command-palette.md +1 -1
- package/docs/currency-field.json +40 -1
- package/docs/currency-field.md +5 -1
- package/docs/data-grid.examples.md +2 -2
- package/docs/data-grid.json +45 -7
- package/docs/data-grid.md +3 -1
- package/docs/data-grid.props.md +7 -4
- package/docs/data-list.json +2 -1
- package/docs/data-list.md +1 -1
- package/docs/date-field.json +9 -1
- package/docs/date-field.md +3 -2
- package/docs/date-picker.examples.md +36 -0
- package/docs/date-picker.json +20 -5
- package/docs/date-picker.md +5 -4
- package/docs/datetime-field.json +1 -0
- package/docs/datetime-field.md +1 -1
- package/docs/detail-panel.json +4 -2
- package/docs/detail-panel.md +8 -3
- package/docs/dialog.examples.md +158 -136
- package/docs/dialog.json +36 -11
- package/docs/dialog.md +4 -2
- package/docs/dialog.props.md +1 -1
- package/docs/drawer.json +11 -4
- package/docs/drawer.md +4 -3
- package/docs/entity-picker.json +19 -4
- package/docs/entity-picker.md +8 -6
- package/docs/event-calendar.json +7 -0
- package/docs/event-calendar.md +3 -2
- package/docs/filter-bar.json +118 -118
- package/docs/filter-bar.md +79 -79
- package/docs/form.json +2 -1
- package/docs/form.md +1 -1
- package/docs/guidelines/README.md +27 -0
- package/docs/guidelines/async-feedback.md +129 -0
- package/docs/guidelines/browsing.md +74 -0
- package/docs/guidelines/builders.md +97 -0
- package/docs/guidelines/composition.md +143 -0
- package/docs/guidelines/conversations.md +59 -0
- package/docs/guidelines/errors-and-conflicts.md +71 -0
- package/docs/guidelines/forms.md +202 -0
- package/docs/guidelines/index.md +130 -0
- package/docs/guidelines/layout-alignment.md +105 -0
- package/docs/guidelines/ledgers.md +45 -0
- package/docs/guidelines/list-pages.md +206 -0
- package/docs/guidelines/overviews.md +76 -0
- package/docs/guidelines/own-elements.md +115 -0
- package/docs/guidelines/reading-permissions.md +55 -0
- package/docs/guidelines/record-pages.md +178 -0
- package/docs/guidelines/reports.md +123 -0
- package/docs/guidelines/shell-composition.md +94 -0
- package/docs/guidelines/workspaces.md +46 -0
- package/docs/icon.json +3 -1
- package/docs/icon.md +3 -3
- package/docs/index.md +12 -0
- package/docs/inline-message.json +14 -2
- package/docs/inline-message.md +4 -3
- package/docs/list-item.json +9 -1
- package/docs/list-item.md +3 -3
- package/docs/list.json +19 -1
- package/docs/list.md +3 -1
- package/docs/markdown.json +79 -79
- package/docs/markdown.md +65 -65
- package/docs/menu.json +12 -0
- package/docs/menu.md +2 -0
- package/docs/message.json +7 -1
- package/docs/message.md +3 -3
- package/docs/multi-select.json +1 -0
- package/docs/multi-select.md +1 -1
- package/docs/notification-center.json +4 -0
- package/docs/notification-center.md +2 -2
- package/docs/number-field.json +1 -0
- package/docs/number-field.md +1 -1
- package/docs/otp-input.json +1 -0
- package/docs/otp-input.md +1 -1
- package/docs/page-header.json +22 -5
- package/docs/page-header.md +6 -4
- package/docs/page.json +2 -0
- package/docs/page.md +2 -1
- package/docs/popover.json +1 -1
- package/docs/progress-indicator.json +4 -3
- package/docs/progress-indicator.md +4 -4
- package/docs/prompt-composer.json +41 -1
- package/docs/prompt-composer.md +5 -1
- package/docs/rating.json +5 -3
- package/docs/rating.md +6 -6
- package/docs/section.json +28 -16
- package/docs/section.md +12 -10
- package/docs/segmented-control.json +36 -12
- package/docs/segmented-control.md +17 -1
- package/docs/select.json +1 -0
- package/docs/select.md +1 -1
- package/docs/side-navigation.json +1 -0
- package/docs/side-navigation.md +1 -1
- package/docs/skills/build-own-element/SKILL.md +90 -0
- package/docs/skills/compose-screen/SKILL.md +103 -0
- package/docs/skills/index.md +9 -0
- package/docs/skills/review-screen/SKILL.md +79 -0
- package/docs/skills/theme-app/SKILL.md +98 -0
- package/docs/skills/waiting-states/SKILL.md +143 -0
- package/docs/sparkline.json +5 -2
- package/docs/sparkline.md +4 -4
- package/docs/split-button.json +4 -1
- package/docs/split-button.md +3 -3
- package/docs/stat-card.json +5 -1
- package/docs/stat-card.md +3 -3
- package/docs/table.examples.md +3 -3
- package/docs/table.json +85 -3
- package/docs/table.md +12 -1
- package/docs/tabs.json +17 -7
- package/docs/tabs.md +3 -2
- package/docs/tag.json +14 -4
- package/docs/tag.md +6 -6
- package/docs/tags-input.json +29 -2
- package/docs/tags-input.md +4 -1
- package/docs/text-field.json +2 -1
- package/docs/text-field.md +2 -2
- package/docs/textarea.json +1 -0
- package/docs/textarea.md +1 -1
- package/docs/time-field.json +1 -0
- package/docs/time-field.md +1 -1
- package/docs/timeline.json +138 -132
- package/docs/timeline.md +125 -125
- package/docs/toast.json +8 -1
- package/docs/toast.md +3 -3
- package/docs/toggle-group.json +14 -3
- package/docs/toggle-group.md +3 -3
- package/docs/toggle.json +12 -3
- package/docs/toggle.md +3 -3
- package/docs/tokens.md +467 -0
- package/docs/toolbar.json +1 -1
- package/docs/toolbar.md +1 -1
- package/docs/tour.json +1 -1
- package/docs/typography.json +4 -2
- package/docs/typography.md +5 -5
- package/fesm2022/slotted-angular-accordion.mjs +4 -2
- package/fesm2022/slotted-angular-accordion.mjs.map +1 -1
- package/fesm2022/slotted-angular-action-bar.mjs +27 -12
- package/fesm2022/slotted-angular-action-bar.mjs.map +1 -1
- package/fesm2022/slotted-angular-action-sheet.mjs +48 -29
- package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -1
- package/fesm2022/slotted-angular-alert.mjs +18 -11
- package/fesm2022/slotted-angular-alert.mjs.map +1 -1
- package/fesm2022/slotted-angular-app-shell.mjs +111 -61
- package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
- package/fesm2022/slotted-angular-aspect-ratio.mjs +4 -2
- package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -1
- package/fesm2022/slotted-angular-attachment.mjs +31 -20
- package/fesm2022/slotted-angular-attachment.mjs.map +1 -1
- package/fesm2022/slotted-angular-avatar-group.mjs +9 -6
- package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-avatar.mjs +14 -7
- package/fesm2022/slotted-angular-avatar.mjs.map +1 -1
- package/fesm2022/slotted-angular-badge.mjs +14 -10
- package/fesm2022/slotted-angular-badge.mjs.map +1 -1
- package/fesm2022/slotted-angular-breadcrumb.mjs +26 -18
- package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -1
- package/fesm2022/slotted-angular-button-group.mjs +7 -4
- package/fesm2022/slotted-angular-button-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-button.mjs +120 -29
- package/fesm2022/slotted-angular-button.mjs.map +1 -1
- package/fesm2022/slotted-angular-calendar.mjs +235 -58
- package/fesm2022/slotted-angular-calendar.mjs.map +1 -1
- package/fesm2022/slotted-angular-card.mjs +18 -16
- package/fesm2022/slotted-angular-card.mjs.map +1 -1
- package/fesm2022/slotted-angular-carousel.mjs +22 -11
- package/fesm2022/slotted-angular-carousel.mjs.map +1 -1
- package/fesm2022/slotted-angular-cascader.mjs +180 -66
- package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
- package/fesm2022/slotted-angular-chart.mjs +53 -20
- package/fesm2022/slotted-angular-chart.mjs.map +1 -1
- package/fesm2022/slotted-angular-checkbox-group.mjs +5 -3
- package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-checkbox.mjs +23 -9
- package/fesm2022/slotted-angular-checkbox.mjs.map +1 -1
- package/fesm2022/slotted-angular-code-block.mjs +29 -15
- package/fesm2022/slotted-angular-code-block.mjs.map +1 -1
- package/fesm2022/slotted-angular-collapsible.mjs +20 -15
- package/fesm2022/slotted-angular-collapsible.mjs.map +1 -1
- package/fesm2022/slotted-angular-color-picker.mjs +77 -22
- package/fesm2022/slotted-angular-color-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-column-manager.mjs +68 -31
- package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
- package/fesm2022/slotted-angular-combobox.mjs +118 -39
- package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
- package/fesm2022/slotted-angular-command-palette.mjs +162 -54
- package/fesm2022/slotted-angular-command-palette.mjs.map +1 -1
- package/fesm2022/slotted-angular-container.mjs +6 -4
- package/fesm2022/slotted-angular-container.mjs.map +1 -1
- package/fesm2022/slotted-angular-context-menu.mjs +5 -4
- package/fesm2022/slotted-angular-context-menu.mjs.map +1 -1
- package/fesm2022/slotted-angular-currency-field.mjs +149 -32
- package/fesm2022/slotted-angular-currency-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-dashboard-grid.mjs +142 -63
- package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-data-grid.mjs +480 -129
- package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-data-list.mjs +83 -50
- package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-field.mjs +74 -25
- package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-picker.mjs +112 -40
- package/fesm2022/slotted-angular-date-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-range-picker.mjs +45 -22
- package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-datetime-field.mjs +48 -16
- package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-datetime-picker.mjs +41 -29
- package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-datetime-range-picker.mjs +115 -48
- package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-description-list.mjs +33 -19
- package/fesm2022/slotted-angular-description-list.mjs.map +1 -1
- package/fesm2022/slotted-angular-detail-panel.mjs +48 -30
- package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -1
- package/fesm2022/slotted-angular-dialog.mjs +72 -30
- package/fesm2022/slotted-angular-dialog.mjs.map +1 -1
- package/fesm2022/slotted-angular-divider.mjs +7 -5
- package/fesm2022/slotted-angular-divider.mjs.map +1 -1
- package/fesm2022/slotted-angular-drawer.mjs +91 -37
- package/fesm2022/slotted-angular-drawer.mjs.map +1 -1
- package/fesm2022/slotted-angular-entity-picker.mjs +474 -75
- package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-event-calendar.mjs +275 -108
- package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
- package/fesm2022/slotted-angular-field-group.mjs +14 -7
- package/fesm2022/slotted-angular-field-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-field.mjs +35 -15
- package/fesm2022/slotted-angular-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-filter-bar.mjs +118 -51
- package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
- package/fesm2022/slotted-angular-form.mjs +18 -10
- package/fesm2022/slotted-angular-form.mjs.map +1 -1
- package/fesm2022/slotted-angular-fullscreen.mjs +14 -8
- package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -1
- package/fesm2022/slotted-angular-grid.mjs +4 -2
- package/fesm2022/slotted-angular-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-highlight.mjs +5 -3
- package/fesm2022/slotted-angular-highlight.mjs.map +1 -1
- package/fesm2022/slotted-angular-hover-card.mjs +5 -4
- package/fesm2022/slotted-angular-hover-card.mjs.map +1 -1
- package/fesm2022/slotted-angular-icon.mjs +6 -3
- package/fesm2022/slotted-angular-icon.mjs.map +1 -1
- package/fesm2022/slotted-angular-image.mjs +13 -10
- package/fesm2022/slotted-angular-image.mjs.map +1 -1
- package/fesm2022/slotted-angular-import-export-center.mjs +175 -99
- package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
- package/fesm2022/slotted-angular-inline-message.mjs +88 -13
- package/fesm2022/slotted-angular-inline-message.mjs.map +1 -1
- package/fesm2022/slotted-angular-inline.mjs +4 -2
- package/fesm2022/slotted-angular-inline.mjs.map +1 -1
- package/fesm2022/slotted-angular-kbd.mjs +11 -7
- package/fesm2022/slotted-angular-kbd.mjs.map +1 -1
- package/fesm2022/slotted-angular-link.mjs +5 -3
- package/fesm2022/slotted-angular-link.mjs.map +1 -1
- package/fesm2022/slotted-angular-list-item.mjs +21 -18
- package/fesm2022/slotted-angular-list-item.mjs.map +1 -1
- package/fesm2022/slotted-angular-list.mjs +37 -22
- package/fesm2022/slotted-angular-list.mjs.map +1 -1
- package/fesm2022/slotted-angular-listbox.mjs +39 -21
- package/fesm2022/slotted-angular-listbox.mjs.map +1 -1
- package/fesm2022/slotted-angular-loading-overlay.mjs +59 -22
- package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -1
- package/fesm2022/slotted-angular-markdown.mjs +31 -19
- package/fesm2022/slotted-angular-markdown.mjs.map +1 -1
- package/fesm2022/slotted-angular-menu.mjs +51 -29
- package/fesm2022/slotted-angular-menu.mjs.map +1 -1
- package/fesm2022/slotted-angular-menubar.mjs +4 -2
- package/fesm2022/slotted-angular-menubar.mjs.map +1 -1
- package/fesm2022/slotted-angular-message-scroller.mjs +34 -15
- package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -1
- package/fesm2022/slotted-angular-message.mjs +119 -51
- package/fesm2022/slotted-angular-message.mjs.map +1 -1
- package/fesm2022/slotted-angular-multi-select.mjs +195 -87
- package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
- package/fesm2022/slotted-angular-navigation-menu.mjs +34 -26
- package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -1
- package/fesm2022/slotted-angular-notification-center.mjs +108 -65
- package/fesm2022/slotted-angular-notification-center.mjs.map +1 -1
- package/fesm2022/slotted-angular-number-field.mjs +23 -11
- package/fesm2022/slotted-angular-number-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-otp-input.mjs +13 -8
- package/fesm2022/slotted-angular-otp-input.mjs.map +1 -1
- package/fesm2022/slotted-angular-page-header.mjs +90 -48
- package/fesm2022/slotted-angular-page-header.mjs.map +1 -1
- package/fesm2022/slotted-angular-page.mjs +38 -10
- package/fesm2022/slotted-angular-page.mjs.map +1 -1
- package/fesm2022/slotted-angular-pagination.mjs +35 -22
- package/fesm2022/slotted-angular-pagination.mjs.map +1 -1
- package/fesm2022/slotted-angular-popover.mjs +32 -19
- package/fesm2022/slotted-angular-popover.mjs.map +1 -1
- package/fesm2022/slotted-angular-progress-indicator.mjs +236 -52
- package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -1
- package/fesm2022/slotted-angular-prompt-composer.mjs +57 -20
- package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -1
- package/fesm2022/slotted-angular-prose.mjs +14 -11
- package/fesm2022/slotted-angular-prose.mjs.map +1 -1
- package/fesm2022/slotted-angular-radio-group.mjs +15 -9
- package/fesm2022/slotted-angular-radio-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-rating.mjs +138 -82
- package/fesm2022/slotted-angular-rating.mjs.map +1 -1
- package/fesm2022/slotted-angular-result-state.mjs +16 -12
- package/fesm2022/slotted-angular-result-state.mjs.map +1 -1
- package/fesm2022/slotted-angular-saved-views.mjs +43 -16
- package/fesm2022/slotted-angular-saved-views.mjs.map +1 -1
- package/fesm2022/slotted-angular-scroll-area.mjs +13 -5
- package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -1
- package/fesm2022/slotted-angular-section.mjs +53 -18
- package/fesm2022/slotted-angular-section.mjs.map +1 -1
- package/fesm2022/slotted-angular-segmented-control.mjs +37 -11
- package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -1
- package/fesm2022/slotted-angular-select.mjs +190 -94
- package/fesm2022/slotted-angular-select.mjs.map +1 -1
- package/fesm2022/slotted-angular-side-navigation.mjs +46 -35
- package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -1
- package/fesm2022/slotted-angular-skeleton.mjs +32 -16
- package/fesm2022/slotted-angular-skeleton.mjs.map +1 -1
- package/fesm2022/slotted-angular-slider.mjs +31 -11
- package/fesm2022/slotted-angular-slider.mjs.map +1 -1
- package/fesm2022/slotted-angular-sparkline.mjs +41 -14
- package/fesm2022/slotted-angular-sparkline.mjs.map +1 -1
- package/fesm2022/slotted-angular-split-button.mjs +37 -11
- package/fesm2022/slotted-angular-split-button.mjs.map +1 -1
- package/fesm2022/slotted-angular-splitter.mjs +11 -9
- package/fesm2022/slotted-angular-splitter.mjs.map +1 -1
- package/fesm2022/slotted-angular-stack.mjs +4 -2
- package/fesm2022/slotted-angular-stack.mjs.map +1 -1
- package/fesm2022/slotted-angular-stat-card.mjs +35 -28
- package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
- package/fesm2022/slotted-angular-status-indicator.mjs +22 -8
- package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -1
- package/fesm2022/slotted-angular-stepper.mjs +40 -15
- package/fesm2022/slotted-angular-stepper.mjs.map +1 -1
- package/fesm2022/slotted-angular-switch.mjs +15 -10
- package/fesm2022/slotted-angular-switch.mjs.map +1 -1
- package/fesm2022/slotted-angular-table-of-contents.mjs +29 -21
- package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -1
- package/fesm2022/slotted-angular-table.mjs +243 -73
- package/fesm2022/slotted-angular-table.mjs.map +1 -1
- package/fesm2022/slotted-angular-tabs.mjs +42 -18
- package/fesm2022/slotted-angular-tabs.mjs.map +1 -1
- package/fesm2022/slotted-angular-tag.mjs +19 -12
- package/fesm2022/slotted-angular-tag.mjs.map +1 -1
- package/fesm2022/slotted-angular-tags-input.mjs +253 -28
- package/fesm2022/slotted-angular-tags-input.mjs.map +1 -1
- package/fesm2022/slotted-angular-text-field.mjs +55 -15
- package/fesm2022/slotted-angular-text-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-textarea.mjs +5 -3
- package/fesm2022/slotted-angular-textarea.mjs.map +1 -1
- package/fesm2022/slotted-angular-time-field.mjs +48 -14
- package/fesm2022/slotted-angular-time-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-time-picker.mjs +32 -20
- package/fesm2022/slotted-angular-time-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-time-range-picker.mjs +113 -46
- package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-timeline.mjs +147 -64
- package/fesm2022/slotted-angular-timeline.mjs.map +1 -1
- package/fesm2022/slotted-angular-toast.mjs +43 -31
- package/fesm2022/slotted-angular-toast.mjs.map +1 -1
- package/fesm2022/slotted-angular-toggle-group.mjs +25 -8
- package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -1
- package/fesm2022/slotted-angular-toggle.mjs +9 -4
- package/fesm2022/slotted-angular-toggle.mjs.map +1 -1
- package/fesm2022/slotted-angular-toolbar.mjs +27 -12
- package/fesm2022/slotted-angular-toolbar.mjs.map +1 -1
- package/fesm2022/slotted-angular-tooltip.mjs +15 -6
- package/fesm2022/slotted-angular-tooltip.mjs.map +1 -1
- package/fesm2022/slotted-angular-top-navigation.mjs +64 -44
- package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -1
- package/fesm2022/slotted-angular-tour.mjs +47 -22
- package/fesm2022/slotted-angular-tour.mjs.map +1 -1
- package/fesm2022/slotted-angular-transfer.mjs +69 -30
- package/fesm2022/slotted-angular-transfer.mjs.map +1 -1
- package/fesm2022/slotted-angular-tree.mjs +80 -26
- package/fesm2022/slotted-angular-tree.mjs.map +1 -1
- package/fesm2022/slotted-angular-typography.mjs +8 -4
- package/fesm2022/slotted-angular-typography.mjs.map +1 -1
- package/fesm2022/slotted-angular-upload.mjs +125 -57
- package/fesm2022/slotted-angular-upload.mjs.map +1 -1
- package/fesm2022/slotted-angular-visually-hidden.mjs +4 -2
- package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -1
- package/fesm2022/slotted-angular-wizard.mjs +163 -65
- package/fesm2022/slotted-angular-wizard.mjs.map +1 -1
- package/package.json +3 -3
- package/types/slotted-angular-accordion.d.ts.map +1 -1
- package/types/slotted-angular-action-bar.d.ts +2 -0
- package/types/slotted-angular-action-bar.d.ts.map +1 -1
- package/types/slotted-angular-action-sheet.d.ts.map +1 -1
- package/types/slotted-angular-alert.d.ts +2 -2
- package/types/slotted-angular-alert.d.ts.map +1 -1
- package/types/slotted-angular-app-shell.d.ts +11 -3
- package/types/slotted-angular-app-shell.d.ts.map +1 -1
- package/types/slotted-angular-aspect-ratio.d.ts.map +1 -1
- package/types/slotted-angular-attachment.d.ts +1 -1
- package/types/slotted-angular-attachment.d.ts.map +1 -1
- package/types/slotted-angular-avatar-group.d.ts.map +1 -1
- package/types/slotted-angular-avatar.d.ts +11 -3
- package/types/slotted-angular-avatar.d.ts.map +1 -1
- package/types/slotted-angular-badge.d.ts +1 -1
- package/types/slotted-angular-badge.d.ts.map +1 -1
- package/types/slotted-angular-breadcrumb.d.ts.map +1 -1
- package/types/slotted-angular-button-group.d.ts +1 -1
- package/types/slotted-angular-button-group.d.ts.map +1 -1
- package/types/slotted-angular-button.d.ts +33 -13
- package/types/slotted-angular-button.d.ts.map +1 -1
- package/types/slotted-angular-calendar.d.ts +30 -2
- package/types/slotted-angular-calendar.d.ts.map +1 -1
- package/types/slotted-angular-card.d.ts.map +1 -1
- package/types/slotted-angular-carousel.d.ts.map +1 -1
- package/types/slotted-angular-cascader.d.ts.map +1 -1
- package/types/slotted-angular-chart.d.ts +10 -0
- package/types/slotted-angular-chart.d.ts.map +1 -1
- package/types/slotted-angular-checkbox-group.d.ts.map +1 -1
- package/types/slotted-angular-checkbox.d.ts +7 -1
- package/types/slotted-angular-checkbox.d.ts.map +1 -1
- package/types/slotted-angular-code-block.d.ts +1 -1
- package/types/slotted-angular-code-block.d.ts.map +1 -1
- package/types/slotted-angular-collapsible.d.ts +1 -1
- package/types/slotted-angular-collapsible.d.ts.map +1 -1
- package/types/slotted-angular-color-picker.d.ts.map +1 -1
- package/types/slotted-angular-column-manager.d.ts.map +1 -1
- package/types/slotted-angular-combobox.d.ts +5 -1
- package/types/slotted-angular-combobox.d.ts.map +1 -1
- package/types/slotted-angular-command-palette.d.ts +10 -1
- package/types/slotted-angular-command-palette.d.ts.map +1 -1
- package/types/slotted-angular-container.d.ts.map +1 -1
- package/types/slotted-angular-context-menu.d.ts.map +1 -1
- package/types/slotted-angular-currency-field.d.ts +63 -15
- package/types/slotted-angular-currency-field.d.ts.map +1 -1
- package/types/slotted-angular-dashboard-grid.d.ts.map +1 -1
- package/types/slotted-angular-data-grid.d.ts +72 -4
- package/types/slotted-angular-data-grid.d.ts.map +1 -1
- package/types/slotted-angular-data-list.d.ts.map +1 -1
- package/types/slotted-angular-date-field.d.ts +11 -1
- package/types/slotted-angular-date-field.d.ts.map +1 -1
- package/types/slotted-angular-date-picker.d.ts +38 -12
- package/types/slotted-angular-date-picker.d.ts.map +1 -1
- package/types/slotted-angular-date-range-picker.d.ts +0 -1
- package/types/slotted-angular-date-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-datetime-field.d.ts.map +1 -1
- package/types/slotted-angular-datetime-picker.d.ts +0 -1
- package/types/slotted-angular-datetime-picker.d.ts.map +1 -1
- package/types/slotted-angular-datetime-range-picker.d.ts +0 -1
- package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-description-list.d.ts.map +1 -1
- package/types/slotted-angular-detail-panel.d.ts.map +1 -1
- package/types/slotted-angular-dialog.d.ts +10 -3
- package/types/slotted-angular-dialog.d.ts.map +1 -1
- package/types/slotted-angular-divider.d.ts.map +1 -1
- package/types/slotted-angular-drawer.d.ts +12 -1
- package/types/slotted-angular-drawer.d.ts.map +1 -1
- package/types/slotted-angular-entity-picker.d.ts +63 -15
- package/types/slotted-angular-entity-picker.d.ts.map +1 -1
- package/types/slotted-angular-event-calendar.d.ts +9 -2
- package/types/slotted-angular-event-calendar.d.ts.map +1 -1
- package/types/slotted-angular-field-group.d.ts.map +1 -1
- package/types/slotted-angular-field.d.ts.map +1 -1
- package/types/slotted-angular-filter-bar.d.ts.map +1 -1
- package/types/slotted-angular-form.d.ts.map +1 -1
- package/types/slotted-angular-fullscreen.d.ts.map +1 -1
- package/types/slotted-angular-grid.d.ts.map +1 -1
- package/types/slotted-angular-highlight.d.ts.map +1 -1
- package/types/slotted-angular-hover-card.d.ts.map +1 -1
- package/types/slotted-angular-icon.d.ts +2 -2
- package/types/slotted-angular-icon.d.ts.map +1 -1
- package/types/slotted-angular-image.d.ts.map +1 -1
- package/types/slotted-angular-import-export-center.d.ts.map +1 -1
- package/types/slotted-angular-inline-message.d.ts +25 -25
- package/types/slotted-angular-inline-message.d.ts.map +1 -1
- package/types/slotted-angular-inline.d.ts.map +1 -1
- package/types/slotted-angular-kbd.d.ts.map +1 -1
- package/types/slotted-angular-link.d.ts.map +1 -1
- package/types/slotted-angular-list-item.d.ts +1 -1
- package/types/slotted-angular-list-item.d.ts.map +1 -1
- package/types/slotted-angular-list.d.ts +42 -27
- package/types/slotted-angular-list.d.ts.map +1 -1
- package/types/slotted-angular-listbox.d.ts.map +1 -1
- package/types/slotted-angular-loading-overlay.d.ts.map +1 -1
- package/types/slotted-angular-markdown.d.ts.map +1 -1
- package/types/slotted-angular-menu.d.ts +11 -2
- package/types/slotted-angular-menu.d.ts.map +1 -1
- package/types/slotted-angular-menubar.d.ts.map +1 -1
- package/types/slotted-angular-message-scroller.d.ts.map +1 -1
- package/types/slotted-angular-message.d.ts +1 -1
- package/types/slotted-angular-message.d.ts.map +1 -1
- package/types/slotted-angular-multi-select.d.ts +15 -1
- package/types/slotted-angular-multi-select.d.ts.map +1 -1
- package/types/slotted-angular-navigation-menu.d.ts.map +1 -1
- package/types/slotted-angular-notification-center.d.ts +1 -1
- package/types/slotted-angular-notification-center.d.ts.map +1 -1
- package/types/slotted-angular-number-field.d.ts.map +1 -1
- package/types/slotted-angular-otp-input.d.ts.map +1 -1
- package/types/slotted-angular-page-header.d.ts +15 -6
- package/types/slotted-angular-page-header.d.ts.map +1 -1
- package/types/slotted-angular-page.d.ts.map +1 -1
- package/types/slotted-angular-pagination.d.ts.map +1 -1
- package/types/slotted-angular-popover.d.ts.map +1 -1
- package/types/slotted-angular-progress-indicator.d.ts +8 -1
- package/types/slotted-angular-progress-indicator.d.ts.map +1 -1
- package/types/slotted-angular-prompt-composer.d.ts +11 -2
- package/types/slotted-angular-prompt-composer.d.ts.map +1 -1
- package/types/slotted-angular-prose.d.ts.map +1 -1
- package/types/slotted-angular-radio-group.d.ts.map +1 -1
- package/types/slotted-angular-rating.d.ts +1 -1
- package/types/slotted-angular-rating.d.ts.map +1 -1
- package/types/slotted-angular-result-state.d.ts.map +1 -1
- package/types/slotted-angular-saved-views.d.ts.map +1 -1
- package/types/slotted-angular-scroll-area.d.ts.map +1 -1
- package/types/slotted-angular-section.d.ts +11 -3
- package/types/slotted-angular-section.d.ts.map +1 -1
- package/types/slotted-angular-segmented-control.d.ts +15 -2
- package/types/slotted-angular-segmented-control.d.ts.map +1 -1
- package/types/slotted-angular-select.d.ts +12 -2
- package/types/slotted-angular-select.d.ts.map +1 -1
- package/types/slotted-angular-side-navigation.d.ts.map +1 -1
- package/types/slotted-angular-skeleton.d.ts.map +1 -1
- package/types/slotted-angular-slider.d.ts.map +1 -1
- package/types/slotted-angular-sparkline.d.ts +7 -1
- package/types/slotted-angular-sparkline.d.ts.map +1 -1
- package/types/slotted-angular-split-button.d.ts +2 -2
- package/types/slotted-angular-split-button.d.ts.map +1 -1
- package/types/slotted-angular-splitter.d.ts.map +1 -1
- package/types/slotted-angular-stack.d.ts.map +1 -1
- package/types/slotted-angular-stat-card.d.ts +1 -1
- package/types/slotted-angular-stat-card.d.ts.map +1 -1
- package/types/slotted-angular-status-indicator.d.ts +1 -1
- package/types/slotted-angular-status-indicator.d.ts.map +1 -1
- package/types/slotted-angular-stepper.d.ts +1 -1
- package/types/slotted-angular-stepper.d.ts.map +1 -1
- package/types/slotted-angular-switch.d.ts.map +1 -1
- package/types/slotted-angular-table-of-contents.d.ts.map +1 -1
- package/types/slotted-angular-table.d.ts +63 -6
- package/types/slotted-angular-table.d.ts.map +1 -1
- package/types/slotted-angular-tabs.d.ts +3 -4
- package/types/slotted-angular-tabs.d.ts.map +1 -1
- package/types/slotted-angular-tag.d.ts +1 -1
- package/types/slotted-angular-tag.d.ts.map +1 -1
- package/types/slotted-angular-tags-input.d.ts +33 -1
- package/types/slotted-angular-tags-input.d.ts.map +1 -1
- package/types/slotted-angular-text-field.d.ts.map +1 -1
- package/types/slotted-angular-textarea.d.ts.map +1 -1
- package/types/slotted-angular-theme.d.ts +1 -1
- package/types/slotted-angular-time-field.d.ts.map +1 -1
- package/types/slotted-angular-time-picker.d.ts +0 -1
- package/types/slotted-angular-time-picker.d.ts.map +1 -1
- package/types/slotted-angular-time-range-picker.d.ts +0 -1
- package/types/slotted-angular-time-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-timeline.d.ts +1 -1
- package/types/slotted-angular-timeline.d.ts.map +1 -1
- package/types/slotted-angular-toast.d.ts +3 -3
- package/types/slotted-angular-toast.d.ts.map +1 -1
- package/types/slotted-angular-toggle-group.d.ts +8 -2
- package/types/slotted-angular-toggle-group.d.ts.map +1 -1
- package/types/slotted-angular-toggle.d.ts +1 -1
- package/types/slotted-angular-toggle.d.ts.map +1 -1
- package/types/slotted-angular-toolbar.d.ts +2 -0
- package/types/slotted-angular-toolbar.d.ts.map +1 -1
- package/types/slotted-angular-tooltip.d.ts.map +1 -1
- package/types/slotted-angular-top-navigation.d.ts.map +1 -1
- package/types/slotted-angular-tour.d.ts.map +1 -1
- package/types/slotted-angular-transfer.d.ts.map +1 -1
- package/types/slotted-angular-tree.d.ts.map +1 -1
- package/types/slotted-angular-typography.d.ts +1 -1
- package/types/slotted-angular-typography.d.ts.map +1 -1
- package/types/slotted-angular-upload.d.ts +2 -2
- package/types/slotted-angular-upload.d.ts.map +1 -1
- package/types/slotted-angular-visually-hidden.d.ts.map +1 -1
- package/types/slotted-angular-wizard.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slotted-angular-rating.mjs","sources":["../../rating/src/rating-defaults.ts","../../rating/src/rating.ts","../../rating/src/rating-display.ts","../../rating/src/rating-summary.ts","../../rating/src/slotted-angular-rating.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { RATING_INSIGHT_THRESHOLDS } from '@slotted/core/rating';\nimport type { RatingInsightThresholds } from '@slotted/core/rating';\n\n/** The step the symbols and the text beside them sit at. */\nexport type RatingSize = 'sm' | 'md' | 'lg';\n\n/**\n * The colour a lit symbol takes. `secondary` is outside the axis: its solid\n * step is a ground, and a lit star painted in it reads as an unlit one.\n */\nexport type RatingTone = 'accent' | 'success' | 'warning' | 'danger';\n\n/** The smallest move of the input member: a whole symbol, or half of one. */\nexport type RatingStep = 1 | 0.5;\n\n/** How the display member draws a value: every symbol, one symbol, or one symbol and a histogram. */\nexport type RatingDisplayVariant = 'full' | 'compact' | 'histogram';\n\n/** How the summary draws a distribution: one bar per level, or columns over the scale with the mean. */\nexport type RatingSummaryVariant = 'bars' | 'spectrum';\n\nexport interface RatingDefaults {\n size: RatingSize;\n tone: RatingTone;\n max: number;\n clearable: boolean;\n insightThresholds: RatingInsightThresholds;\n}\n\n/** What `provideRating()` takes: every key optional, and the thresholds partial. */\nexport type RatingDefaultsInput = Partial<Omit<RatingDefaults, 'insightThresholds'>> & {\n insightThresholds?: Partial<RatingInsightThresholds>;\n};\n\nconst FALLBACK: RatingDefaults = {\n size: 'md',\n tone: 'warning',\n max: 5,\n clearable: true,\n insightThresholds: RATING_INSIGHT_THRESHOLDS,\n};\n\nexport const SL_RATING_DEFAULTS = new InjectionToken<RatingDefaults>('slotted rating defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once how its ratings read — the step, the tone, the\n * scale, whether a press on the chosen star empties it and the thresholds of\n * the summary's conclusion. A threshold left out keeps the family's; an\n * instance that states any of them still wins. The words and the locale come\n * from the language in force (`provideSlotted`).\n */\nexport function provideRating(defaults: RatingDefaultsInput) {\n return {\n provide: SL_RATING_DEFAULTS,\n useFactory: (): RatingDefaults => ({\n ...FALLBACK,\n ...defaults,\n insightThresholds: { ...RATING_INSIGHT_THRESHOLDS, ...defaults.insightThresholds },\n }),\n };\n}\n\n/** What a rating renders as here, before it states anything of its own. */\nexport function injectRatingDefaults(): RatingDefaults {\n return inject(SL_RATING_DEFAULTS);\n}\n\n/**\n * One sequence for every application in the page, not one per application.\n *\n * The generated value is the `name` the radios group by, and grouping is by\n * name across the whole document when there is no form: two applications on\n * one page — every story on a Storybook docs page is its own application —\n * each counting from one gave two ratings the same name, and checking a star\n * in one unchecked the other. `field` scopes its counter to the application\n * because its identifiers must match between server and client; this one is\n * written through an attribute binding, which the client rewrites after\n * hydration, so a sequence shared by the realm costs nothing there.\n */\nlet sequence = 0;\n\n@Injectable({ providedIn: 'root' })\nexport class SlRatingIdFactory {\n next() {\n sequence += 1;\n return `slotted-rating-${sequence}`;\n }\n}\n\n/** A whole count, with the locale's grouping. */\nexport function formatCount(count: number, locale: string | undefined): string {\n return new Intl.NumberFormat(locale, { maximumFractionDigits: 0 }).format(count);\n}\n\n/** A number written into a custom property, to a fixed number of places. */\nexport function cssNumber(value: number, places: number): string {\n return String(Number(value.toFixed(places)));\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n ElementRef,\n forwardRef,\n HostAttributeToken,\n inject,\n input,\n model,\n output,\n signal,\n TemplateRef,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type {\n AbstractControl,\n ControlValueAccessor,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SlField } from '@slotted/angular/field';\nimport { SlFieldGroup } from '@slotted/angular/field-group';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { type PartialMessages, ratingMessages, type RatingMessages } from '@slotted/core/i18n';\nimport {\n formatRatingValue,\n normaliseRating,\n ratingAtPoint,\n ratingFills,\n ratingForKey,\n} from '@slotted/core/rating';\nimport type { RatingScale } from '@slotted/core/rating';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeRequest } from '@slotted/core/state';\n\nimport { injectRatingDefaults, SlRatingIdFactory } from './rating-defaults';\nimport type { RatingSize, RatingStep, RatingTone } from './rating-defaults';\n\n/** Why the value moved. A rating can produce exactly these three. */\nexport type RatingValueReason = 'pointer' | 'keyboard' | 'clear';\n\n/** What the caption template is handed: the value held, and the one under the pointer. */\nexport interface RatingCaptionContext {\n $implicit: number | null;\n value: number | null;\n preview: number | null;\n}\n\n/** What the symbol template is handed: the symbol's position, and how much of it is lit. */\nexport interface RatingSymbolContext {\n $implicit: { index: number; fill: number };\n index: number;\n fill: number;\n}\n\n/**\n * The words beside the stars. On an element it is projected as it is; on an\n * `ng-template` it is rendered again whenever the value or the preview moves,\n * with both in its context — the word for the star under the pointer is the\n * whole point of a caption.\n */\n@Directive({\n selector: '[slRatingCaption]',\n standalone: true,\n})\nexport class SlRatingCaption {\n readonly template = inject<TemplateRef<RatingCaptionContext>>(TemplateRef, { optional: true });\n\n static ngTemplateContextGuard(\n _directive: SlRatingCaption,\n context: unknown,\n ): context is RatingCaptionContext {\n return context !== null;\n }\n}\n\n/**\n * The drawing of one symbol, in place of the star. It is rendered twice per\n * item — once in `symbol`, the unlit shape, and once in `fill`, the lit one\n * the stylesheet clips — so a consumer's heart lights the way a star does.\n */\n@Directive({\n selector: 'ng-template[slRatingSymbol]',\n standalone: true,\n})\nexport class SlRatingSymbol {\n readonly template = inject<TemplateRef<RatingSymbolContext>>(TemplateRef);\n\n static ngTemplateContextGuard(\n _directive: SlRatingSymbol,\n context: unknown,\n ): context is RatingSymbolContext {\n return context !== null;\n }\n}\n\ninterface RatingRadio {\n value: number;\n half: boolean;\n label: string;\n}\n\ninterface RatingItem {\n index: number;\n checked: boolean;\n radios: RatingRadio[];\n context: RatingSymbolContext;\n}\n\n/** A touch or a pen on the row, from its press to its release. */\ninterface RatingGesture {\n pointerId: number;\n moved: boolean;\n}\n\nconst optionalBoolean = (value: boolean | string | undefined) =>\n value === undefined ? undefined : booleanAttribute(value);\n\n/**\n * An ordinal value chosen from a row of symbols.\n *\n * **The radios are native, and that buys the rest.** Tab lands on the checked\n * one or on the first, Space checks, the form submits the value under one\n * `name`, and a disabled rating leaves the tab order — all the platform's. The\n * arrows are the family's (`ratingForKey`): the platform's wrap from the last\n * radio to the first, and a rating that falls from five to one on one key too\n * many is the defect every surveyed rating avoids.\n *\n * **A half step is a second radio over the inline-start half of the symbol**,\n * stacked above the whole one, so the pointer asks for the half by pressing\n * where the half is drawn.\n *\n * **The DOM is written back after every activation.** The HTML standard's\n * canceled activation restores only the clicked radio, and a press on the\n * checked one that empties the value leaves the platform nothing to undo, so\n * each radio's `checked` is set from the value once the request is answered.\n */\n@Component({\n selector: 'div[slRating]',\n standalone: true,\n exportAs: 'slRating',\n imports: [NgTemplateOutlet, SlGlyph, SlIcon],\n template: `<div\n data-part=\"symbols\"\n (pointerdown)=\"onRowPointerDown($event)\"\n (pointermove)=\"onRowPointerMove($event)\"\n (pointerup)=\"onRowPointerUp($event)\"\n (pointercancel)=\"onRowPointerCancel()\"\n >\n @for (item of items(); track item.index) {\n <span data-part=\"item\" [attr.data-checked]=\"item.checked ? '' : null\">\n @for (radio of item.radios; track radio.value) {\n <input\n #radioInput\n data-part=\"input\"\n type=\"radio\"\n [attr.data-half]=\"radio.half ? '' : null\"\n [attr.name]=\"resolvedName()\"\n [attr.form]=\"form() ?? null\"\n [attr.value]=\"radio.value\"\n [attr.aria-label]=\"radio.label\"\n [attr.disabled]=\"resolvedDisabled() === true ? '' : null\"\n [checked]=\"radio.value === current()\"\n (pointerover)=\"onPreview(radio.value)\"\n (blur)=\"onBlur()\"\n />\n }\n <span data-part=\"symbol\">\n @if (symbol(); as custom) {\n <ng-container *ngTemplateOutlet=\"custom.template; context: item.context\" />\n } @else {\n <span slIcon><svg slGlyph name=\"star\"></svg></span>\n }\n </span>\n <span data-part=\"fill\">\n @if (symbol(); as custom) {\n <ng-container *ngTemplateOutlet=\"custom.template; context: item.context\" />\n } @else {\n <span slIcon><svg slGlyph name=\"star\"></svg></span>\n }\n </span>\n </span>\n }\n </div>\n @if (caption(); as words) {\n <span data-part=\"value\" aria-hidden=\"true\">\n @if (words.template; as captionTemplate) {\n <ng-container *ngTemplateOutlet=\"captionTemplate; context: captionContext()\" />\n } @else {\n <ng-content select=\"[slRatingCaption]\" />\n }\n </span>\n }`,\n styleUrl: '../../../styles/src/rating/rating.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlRating), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => SlRating), multi: true },\n ],\n host: {\n 'data-ui': 'rating',\n 'data-part': 'root',\n '[attr.role]': 'resolvedRole()',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-tone]': 'resolvedTone()',\n '[attr.data-max]': 'resolvedMax()',\n '[attr.data-step]': \"resolvedStep() === 0.5 ? '0.5' : null\",\n '[attr.data-disabled]': \"resolvedDisabled() === true ? '' : null\",\n '[attr.data-readonly]': \"resolvedReadOnly() === true ? '' : null\",\n '[attr.data-invalid]': \"resolvedInvalid() === true ? '' : null\",\n '[attr.data-dragging]': \"dragging() ? '' : null\",\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-invalid]': \"resolvedInvalid() === true ? 'true' : null\",\n '[attr.aria-readonly]': \"resolvedReadOnly() === true ? 'true' : null\",\n '[attr.aria-required]': \"resolvedRequired() === true ? 'true' : null\",\n '(keydown)': 'onKeyDown($event)',\n '(click)': 'onClick($event)',\n '(pointerleave)': 'onLeave()',\n },\n})\nexport class SlRating implements ControlValueAccessor, Validator {\n /** The rating, `null` for none. Two-way; every move is asked first through `valueChangeRequest`. */\n readonly value = model<number | null>(null);\n readonly max = input<number | undefined>(undefined);\n readonly step = input<RatingStep>(1);\n readonly clearable = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly size = input<RatingSize | undefined>(undefined);\n readonly tone = input<RatingTone | undefined>(undefined);\n /** The submission name the radios share. Generated when it is not written. */\n readonly name = input<string | undefined>(undefined);\n /** The form the radios belong to when the rating sits outside it. */\n readonly form = input<string | undefined>(undefined);\n /** Unstated rather than `false`, so the rating defers to the field around it. */\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly readOnly = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly invalid = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly required = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n /** Words laid over the catalog of the language in force, key by key. */\n readonly messages = input<PartialMessages<RatingMessages> | undefined>(undefined);\n /** The locale numbers are written in. Unstated, the language in force. */\n readonly locale = input<string | undefined>(undefined);\n\n /**\n * Emitted before the value moves, with the value asked for, the one it\n * replaces, the reason and the event. `cancel()` keeps the value.\n */\n readonly valueChangeRequest = output<ChangeRequest<number | null>>();\n /** The value under the pointer, and `null` when it leaves. It changes nothing. */\n readonly previewChange = output<number | null>();\n\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly field = inject(SlField, { optional: true });\n private readonly fieldGroup = inject(SlFieldGroup, { optional: true });\n private readonly defaults = injectRatingDefaults();\n private readonly appLocale = injectLocale();\n /** The family's words in the language in force, with this rating's `messages` laid over them. */\n readonly t = injectMessages(ratingMessages, this.messages);\n private readonly generatedName = inject(SlRatingIdFactory).next();\n private readonly writtenRole = inject(new HostAttributeToken('role'), { optional: true });\n private readonly writtenDescribedBy = inject(new HostAttributeToken('aria-describedby'), {\n optional: true,\n });\n\n protected readonly caption = contentChild(SlRatingCaption);\n protected readonly symbol = contentChild(SlRatingSymbol);\n private readonly radios = viewChildren<ElementRef<HTMLInputElement>>('radioInput');\n\n private readonly formDisabled = signal<boolean | undefined>(undefined);\n private readonly preview = signal<number | null>(null);\n protected readonly dragging = signal(false);\n private gesture: RatingGesture | null = null;\n /** Set when a touch gesture has answered a press, so the click the platform sends after it does not answer it again. */\n private suppressClick = false;\n private onChange: (value: number | null) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n readonly resolvedName = computed(() => this.name() ?? this.generatedName);\n readonly resolvedMax = computed(() => Math.max(1, Math.round(this.max() ?? this.defaults.max)));\n readonly resolvedStep = computed<RatingStep>(() => (this.step() === 0.5 ? 0.5 : 1));\n readonly resolvedClearable = computed(() => this.clearable() ?? this.defaults.clearable);\n readonly resolvedSize = computed(\n () =>\n this.size() ??\n (this.field?.resolvedSize() as RatingSize | undefined) ??\n (this.fieldGroup?.resolvedSize() as RatingSize | undefined) ??\n this.defaults.size,\n );\n readonly resolvedTone = computed(() => this.tone() ?? this.defaults.tone);\n readonly resolvedDisabled = computed(\n () => this.disabled() ?? this.formDisabled() ?? this.field?.resolvedDisabled(),\n );\n readonly resolvedReadOnly = computed(() => this.readOnly() ?? this.field?.resolvedReadOnly());\n readonly resolvedInvalid = computed(() => this.invalid() ?? this.field?.invalid());\n readonly resolvedRequired = computed(\n () => this.required() ?? this.field?.required() ?? this.fieldGroup?.required(),\n );\n readonly resolvedLocale = computed(() => this.locale() ?? this.appLocale());\n\n private readonly scale = computed<RatingScale>(() => ({\n max: this.resolvedMax(),\n step: this.resolvedStep(),\n }));\n\n /** The value on the grid of the scale: 7 of 5 is 5, 3.2 on whole steps is 4, and `NaN` is none. */\n readonly current = computed(() => normaliseRating(this.value(), this.scale()));\n\n protected readonly items = computed<RatingItem[]>(() => {\n const { max, step } = this.scale();\n const current = this.current();\n const fills = ratingFills(current, max);\n const locale = this.resolvedLocale();\n return fills.map((fill, index) => {\n const whole = index + 1;\n const values = step === 0.5 ? [whole - 0.5, whole] : [whole];\n return {\n index,\n checked: current !== null && values.includes(current),\n radios: values.map((value) => ({\n value,\n half: value !== whole,\n label: this.t('itemLabel', { value: formatRatingValue(value, locale), max }),\n })),\n context: { $implicit: { index, fill }, index, fill },\n };\n });\n });\n\n protected readonly captionContext = computed<RatingCaptionContext>(() => ({\n $implicit: this.current(),\n value: this.current(),\n preview: this.preview(),\n }));\n\n protected readonly resolvedRole = computed(\n () => this.writtenRole ?? (this.fieldGroup === null ? 'radiogroup' : null),\n );\n protected readonly describedBy = computed(() => {\n const merged = [this.writtenDescribedBy, this.field?.describedBy()].filter(Boolean);\n return merged.length === 0 ? null : merged.join(' ');\n });\n\n private readonly inert = computed(\n () => this.resolvedDisabled() === true || this.resolvedReadOnly() === true,\n );\n\n /** The one action a value cannot express: focus on the checked radio, or on the first. */\n focus(options?: FocusOptions) {\n const target = this.inputFor(this.current()) ?? this.radios()[0]?.nativeElement;\n target?.focus(options);\n }\n\n protected onKeyDown(event: KeyboardEvent) {\n this.suppressClick = false;\n if (!this.isOwnRadio(event.target) || this.resolvedDisabled() === true) return;\n const next = ratingForKey(event.key, this.current(), this.scale(), {\n rtl: this.isRtl(),\n clearable: this.resolvedClearable(),\n });\n if (next === undefined) return;\n event.preventDefault();\n if (this.resolvedReadOnly() === true) return;\n if (next === null) {\n this.request(null, 'clear', event);\n this.syncElements();\n return;\n }\n this.request(next, 'keyboard', event);\n this.syncElements();\n this.inputFor(this.current())?.focus();\n }\n\n protected onClick(event: MouseEvent) {\n const target = event.target;\n if (this.suppressClick) {\n this.suppressClick = false;\n if (this.isOwnRadio(target)) {\n event.preventDefault();\n this.syncElements();\n }\n return;\n }\n if (!this.isOwnRadio(target)) return;\n if (this.inert()) {\n event.preventDefault();\n this.syncElements();\n return;\n }\n\n const picked = Number(target.value);\n if (picked === this.current()) {\n /* A click the keyboard synthesised — Space on the checked radio — reports\n no detail, and Space checks; it never empties. */\n if (this.resolvedClearable() && event.detail > 0) this.request(null, 'clear', event);\n this.syncElements();\n return;\n }\n const moved = this.request(picked, event.detail === 0 ? 'keyboard' : 'pointer', event);\n if (!moved) event.preventDefault();\n this.syncElements();\n }\n\n protected onRowPointerDown(event: PointerEvent) {\n this.suppressClick = false;\n if (this.inert() || event.pointerType === 'mouse' || event.pointerType === '') return;\n this.gesture = { pointerId: event.pointerId, moved: false };\n this.dragging.set(true);\n const row = event.currentTarget as HTMLElement;\n if (typeof row.setPointerCapture === 'function') row.setPointerCapture(event.pointerId);\n }\n\n protected onRowPointerMove(event: PointerEvent) {\n if (this.gesture === null || event.pointerId !== this.gesture.pointerId) return;\n this.gesture.moved = true;\n const next = this.valueAt(event);\n if (next === this.current()) return;\n this.request(next, 'pointer', event);\n this.syncElements();\n }\n\n /**\n * A touch that never moved is a press, answered here rather than by the\n * click that follows it: with the row capturing the pointer, the click lands\n * on the row and not on a radio.\n */\n protected onRowPointerUp(event: PointerEvent) {\n if (this.gesture === null || event.pointerId !== this.gesture.pointerId) return;\n if (!this.gesture.moved) {\n const next = this.valueAt(event);\n if (next !== this.current()) this.request(next, 'pointer', event);\n else if (this.resolvedClearable()) this.request(null, 'clear', event);\n this.syncElements();\n }\n this.gesture = null;\n this.dragging.set(false);\n this.suppressClick = true;\n }\n\n protected onRowPointerCancel() {\n this.gesture = null;\n this.dragging.set(false);\n }\n\n protected onPreview(value: number) {\n if (this.inert() || this.preview() === value) return;\n this.preview.set(value);\n this.previewChange.emit(value);\n }\n\n protected onLeave() {\n if (this.preview() === null) return;\n this.preview.set(null);\n this.previewChange.emit(null);\n }\n\n protected onBlur() {\n this.onTouched();\n }\n\n writeValue(value: number | null | undefined) {\n this.value.set(value ?? null);\n }\n\n registerOnChange(fn: (value: number | null) => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.formDisabled.set(isDisabled);\n }\n\n /** \"Choose a rating\" is a fact about the whole row, which no single radio can see. */\n validate(control: AbstractControl): ValidationErrors | null {\n if (this.resolvedRequired() !== true) return null;\n const value = control.value as number | null | undefined;\n return normaliseRating(value, this.scale()) === null ? { required: true } : null;\n }\n\n /**\n * Asks for one value. Returns whether it moved: not while read-only or\n * disabled, not when it is the value already held, and not when the\n * consumer cancelled the request.\n */\n private request(next: number | null, reason: RatingValueReason, source: Event): boolean {\n if (this.inert()) return false;\n const previous = this.current();\n if (next === previous) return false;\n const state = createControllable<number | null>({\n initial: previous,\n onRequest: (request) => this.valueChangeRequest.emit(request),\n });\n if (!state.request(next, reason, source)) return false;\n this.value.set(next);\n this.onChange(next);\n return true;\n }\n\n private valueAt(event: PointerEvent): number {\n const row = event.currentTarget as HTMLElement;\n const box = row.getBoundingClientRect();\n return ratingAtPoint(\n { x: event.clientX },\n { x: box.x, width: box.width },\n this.scale(),\n this.isRtl(),\n );\n }\n\n /** Writes every radio's `checked` from the value. */\n private syncElements() {\n const current = this.current();\n for (const { nativeElement } of this.radios()) {\n nativeElement.checked = Number(nativeElement.value) === current;\n }\n }\n\n private inputFor(value: number | null): HTMLInputElement | undefined {\n if (value === null) return undefined;\n return this.radios().find(({ nativeElement }) => Number(nativeElement.value) === value)\n ?.nativeElement;\n }\n\n private isOwnRadio(target: EventTarget | null): target is HTMLInputElement {\n return this.radios().some(({ nativeElement }) => nativeElement === target);\n }\n\n /** A right-to-left document is a property of the page, read from the element. */\n private isRtl() {\n return getComputedStyle(this.element).direction === 'rtl';\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n HostAttributeToken,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { type PartialMessages, ratingMessages, type RatingMessages } from '@slotted/core/i18n';\nimport { formatRating, formatRatingValue, ratingFills } from '@slotted/core/rating';\n\nimport { cssNumber, formatCount, injectRatingDefaults } from './rating-defaults';\nimport type { RatingDisplayVariant, RatingSize, RatingTone } from './rating-defaults';\n\n/**\n * A rating the page reports rather than asks for: an image of lit symbols\n * named by the number it draws.\n *\n * Any fraction is drawn — 4,6 lights six tenths of the fifth star — because\n * nothing here is a target; the input member offers whole and half steps\n * only. `compact` and `histogram` draw one lit star beside the number, for a\n * row of a table or a card, and `histogram` adds the distribution as bars,\n * each level over the largest, so a split between the two ends is visible at\n * a glance where a mean of 3,3 would hide it.\n */\n@Component({\n selector: 'div[slRatingDisplay]',\n standalone: true,\n exportAs: 'slRatingDisplay',\n imports: [SlGlyph, SlIcon],\n template: `<div data-part=\"symbols\">\n @for (fill of fills(); track $index) {\n <span data-part=\"item\" [style.--slotted-rating-fill]=\"fill\"\n ><span data-part=\"symbol\"\n ><span slIcon><svg slGlyph name=\"star\"></svg></span></span\n ><span data-part=\"fill\"\n ><span slIcon><svg slGlyph name=\"star\"></svg></span></span\n ></span>\n }\n </div>\n @if (showValue()) {\n <span data-part=\"value\" aria-hidden=\"true\">{{ valueText() }}</span>\n }\n @if (resolvedVariant() === 'histogram') {\n <span data-part=\"histogram\" aria-hidden=\"true\">\n @for (share of shares(); track $index) {\n <span data-part=\"bar\" [style.--slotted-rating-share]=\"share\"></span>\n }\n </span>\n }\n @if (countText(); as text) {\n <span data-part=\"count\" aria-hidden=\"true\">{{ text }}</span>\n }`,\n styleUrl: '../../../styles/src/rating/rating.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'rating',\n 'data-part': 'root',\n role: 'img',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-tone]': 'resolvedTone()',\n '[attr.data-variant]': \"resolvedVariant() === 'full' ? null : resolvedVariant()\",\n '[attr.aria-label]': 'label()',\n },\n})\nexport class SlRatingDisplay {\n /** The number drawn. Any fraction; clamped to the scale when it is drawn. */\n readonly value = input.required<number>();\n readonly max = input<number | undefined>(undefined);\n readonly size = input<RatingSize | undefined>(undefined);\n readonly tone = input<RatingTone | undefined>(undefined);\n readonly variant = input<RatingDisplayVariant>('full');\n /** How many readings the value is made of. Written beside it and in the name. */\n readonly count = input<number | undefined>(undefined);\n /** Counts per level, lowest first, for the `histogram` variant. */\n readonly distribution = input<readonly number[] | undefined>(undefined);\n readonly showValue = input(true, { transform: booleanAttribute });\n /** Words laid over the catalog of the language in force, key by key. */\n readonly messages = input<PartialMessages<RatingMessages> | undefined>(undefined);\n /** The locale numbers are written in. Unstated, the language in force. */\n readonly locale = input<string | undefined>(undefined);\n\n private readonly defaults = injectRatingDefaults();\n private readonly appLocale = injectLocale();\n /** The family's words in the language in force, with this display's `messages` laid over them. */\n readonly t = injectMessages(ratingMessages, this.messages);\n private readonly writtenLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n\n readonly resolvedMax = computed(() => Math.max(1, Math.round(this.max() ?? this.defaults.max)));\n readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n readonly resolvedTone = computed(() => this.tone() ?? this.defaults.tone);\n readonly resolvedVariant = computed(() => this.variant());\n private readonly resolvedLocale = computed(() => this.locale() ?? this.appLocale());\n\n /** The value clamped to the scale, and `NaN` read as nought. */\n private readonly drawn = computed(() => {\n const value = this.value();\n return Number.isFinite(value) ? Math.min(Math.max(value, 0), this.resolvedMax()) : 0;\n });\n\n /** Every symbol's lit share; one full star for the variants that draw one. */\n protected readonly fills = computed(() =>\n this.resolvedVariant() === 'full'\n ? ratingFills(this.drawn(), this.resolvedMax()).map((fill) => cssNumber(fill, 4))\n : ['1'],\n );\n\n protected readonly shares = computed(() => {\n const counts = (this.distribution() ?? []).map((count) =>\n Number.isFinite(count) ? Math.max(0, count) : 0,\n );\n const largest = Math.max(0, ...counts);\n return counts.map((count) => cssNumber(largest === 0 ? 0 : count / largest, 4));\n });\n\n protected readonly valueText = computed(() => formatRating(this.drawn(), this.resolvedLocale()));\n\n protected readonly countText = computed(() => {\n const count = this.count();\n if (count === undefined) return null;\n const text = formatCount(count, this.resolvedLocale());\n return this.resolvedVariant() === 'histogram' ? text : `(${text})`;\n });\n\n protected readonly label = computed(() => {\n if (this.writtenLabel !== null) return this.writtenLabel;\n const count = this.count();\n const value = formatRatingValue(this.drawn(), this.resolvedLocale());\n const max = this.resolvedMax();\n return count === undefined\n ? this.t('displayLabel', { value, max })\n : this.t('displayLabelWithCount', { value, max, count });\n });\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { type PartialMessages, ratingMessages, type RatingMessages } from '@slotted/core/i18n';\nimport { formatRating, formatShare, summariseRatings } from '@slotted/core/rating';\nimport type { RatingInsight, RatingInsightThresholds } from '@slotted/core/rating';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeRequest } from '@slotted/core/state';\n\nimport { cssNumber, formatCount, injectRatingDefaults } from './rating-defaults';\nimport type { RatingSize, RatingSummaryVariant, RatingTone } from './rating-defaults';\n\n/** Stands in for the share while a message is written, so the share can be set apart. */\nconst SHARE_MARK = '\\uE000';\nimport { SlRatingDisplay } from './rating-display';\n\n/** Why the selected levels moved: a press, or Space or Enter on a level. */\nexport type RatingLevelsReason = 'pointer' | 'keyboard';\n\n/** The tone each conclusion is drawn in, from the family's contract. */\nconst INSIGHT_TONE: Record<RatingInsight, 'success' | 'warning' | 'secondary'> = {\n divided: 'warning',\n few: 'secondary',\n consensus: 'success',\n mixed: 'secondary',\n};\n\ninterface SummaryLevel {\n level: number;\n count: number;\n countText: string;\n /** The level's share of the total, for the bar of `bars`. */\n share: string;\n /** The level over the largest level, for the column of `spectrum`. */\n peak: string;\n shareText: string;\n label: string;\n pressed: boolean;\n}\n\ninterface SummaryBucket {\n key: 'positive' | 'neutral' | 'negative';\n tone: 'success' | 'secondary' | 'danger';\n before: string;\n share: string;\n after: string;\n}\n\n/**\n * The aggregate of many ratings: the figure, how many readings it is made of,\n * and how they spread over the levels.\n *\n * `bars` draws one bar per level, highest first, the order every surveyed\n * summary uses. `spectrum` draws the same counts as columns over the scale,\n * lowest first, with the mean and its 95% interval laid over them, the\n * readings split into three buckets, and one conclusion — split, too few,\n * agreed, or none of those — so a 3,3 made of ones and fives does not read\n * like a 3,3 made of threes.\n *\n * With `filterable`, each level is a toggle button, and the pressed levels are\n * a selection the page filters its reviews by; a level nobody chose is\n * disabled, because a filter that returns nothing is a dead end.\n */\n@Component({\n selector: 'section[slRatingSummary]',\n standalone: true,\n exportAs: 'slRatingSummary',\n imports: [NgTemplateOutlet, SlGlyph, SlIcon, SlRatingDisplay],\n template: `<ng-template #levelLabel let-level\n ><span data-part=\"level-label\"\n ><span>{{ level }}</span\n ><span slIcon><svg slGlyph name=\"star\"></svg></span></span\n ></ng-template>\n <div data-part=\"aggregate\">\n @if (summary().total > 0) {\n <span data-part=\"value\">{{ averageText() }}</span>\n <span data-part=\"scale\">{{ scaleText() }}</span>\n }\n @if (insight(); as conclusion) {\n <span data-part=\"insight\" [attr.data-tone]=\"conclusion.tone\">{{ conclusion.text }}</span>\n }\n @if (resolvedVariant() === 'bars') {\n <div\n slRatingDisplay\n size=\"sm\"\n [tone]=\"resolvedTone()\"\n [value]=\"summary().average ?? 0\"\n [max]=\"resolvedMax()\"\n [showValue]=\"false\"\n [messages]=\"messages()\"\n [locale]=\"resolvedLocale()\"\n ></div>\n }\n <span data-part=\"count\">{{ countText() }}</span>\n </div>\n @if (resolvedVariant() === 'bars') {\n <ul data-part=\"distribution\" [attr.aria-label]=\"t('distributionLabel')\">\n @for (level of highestFirst(); track level.level) {\n <li>\n @if (filterable()) {\n <button\n data-part=\"level\"\n type=\"button\"\n [attr.aria-pressed]=\"level.pressed ? 'true' : 'false'\"\n [attr.data-pressed]=\"level.pressed ? '' : null\"\n [attr.aria-label]=\"level.label\"\n [attr.disabled]=\"level.count === 0 ? '' : null\"\n (click)=\"toggle(level.level, $event)\"\n >\n <ng-container *ngTemplateOutlet=\"levelBody; context: { $implicit: level }\" />\n </button>\n } @else {\n <div data-part=\"level\" role=\"group\" [attr.aria-label]=\"level.label\">\n <ng-container *ngTemplateOutlet=\"levelBody; context: { $implicit: level }\" />\n </div>\n }\n </li>\n }\n </ul>\n <ng-template #levelBody let-level\n ><ng-container *ngTemplateOutlet=\"levelLabel; context: { $implicit: level.level }\" /><span\n data-part=\"track\"\n aria-hidden=\"true\"\n ><span data-part=\"indicator\" [style.--slotted-rating-share]=\"level.share\"></span></span\n ><span data-part=\"level-count\">{{ level.countText }}</span></ng-template\n >\n } @else {\n <div data-part=\"plot\">\n <div data-part=\"field\">\n <div data-part=\"columns\">\n @for (level of lowestFirst(); track level.level) {\n @if (filterable()) {\n <button\n data-part=\"column\"\n type=\"button\"\n [attr.aria-pressed]=\"level.pressed ? 'true' : 'false'\"\n [attr.data-pressed]=\"level.pressed ? '' : null\"\n [attr.aria-label]=\"level.label\"\n [attr.disabled]=\"level.count === 0 ? '' : null\"\n [style.--slotted-rating-share]=\"level.peak\"\n (click)=\"toggle(level.level, $event)\"\n >\n <span data-part=\"bar\"></span>\n </button>\n } @else {\n <div\n data-part=\"column\"\n role=\"group\"\n [attr.aria-label]=\"level.label\"\n [style.--slotted-rating-share]=\"level.peak\"\n >\n <span data-part=\"bar\"></span>\n </div>\n }\n }\n </div>\n @if (summary().total > 0) {\n <span data-part=\"interval\" aria-hidden=\"true\"></span>\n <span data-part=\"mean\" aria-hidden=\"true\"\n ><span data-part=\"mean-label\">{{ averageText() }}</span></span\n >\n }\n </div>\n <div data-part=\"axis\" aria-hidden=\"true\">\n @for (level of lowestFirst(); track level.level) {\n <span data-part=\"tick\"\n ><ng-container\n *ngTemplateOutlet=\"levelLabel; context: { $implicit: level.level }\"\n /><span data-part=\"tick-share\">{{ level.shareText }}</span></span\n >\n }\n </div>\n </div>\n @if (summary().total > 0) {\n <p data-part=\"sentiment\">\n @for (bucket of buckets(); track bucket.key) {\n <span data-part=\"bucket\" [attr.data-tone]=\"bucket.tone\"\n ><span data-part=\"swatch\" aria-hidden=\"true\"></span>{{ bucket.before\n }}<strong>{{ bucket.share }}</strong\n >{{ bucket.after }}</span\n >\n }\n </p>\n }\n }`,\n styleUrl: '../../../styles/src/rating/rating.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'rating',\n 'data-part': 'root',\n '[attr.data-variant]': \"resolvedVariant() === 'bars' ? 'summary' : 'spectrum'\",\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-tone]': 'resolvedTone()',\n '[style.--slotted-rating-mean]': 'meanProperties()?.mean ?? null',\n '[style.--slotted-rating-low]': 'meanProperties()?.low ?? null',\n '[style.--slotted-rating-high]': 'meanProperties()?.high ?? null',\n },\n})\nexport class SlRatingSummary {\n /** How many readings each level holds, lowest level first — the order a store keeps them in. */\n readonly counts = input.required<readonly number[]>();\n /** How many levels the scale has. A level missing from `counts` holds none; one past it is dropped. */\n readonly max = input<number | undefined>(undefined);\n readonly variant = input<RatingSummaryVariant>('bars');\n /** Each level becomes a toggle button, and the pressed ones are `selectedLevels`. */\n readonly filterable = input(false, { transform: booleanAttribute });\n /** The levels pressed, ascending. Two-way; every move is asked first through `selectedLevelsChangeRequest`. */\n readonly selectedLevels = model<readonly number[]>([]);\n /** Merged over the application's thresholds, key by key. */\n readonly insightThresholds = input<Partial<RatingInsightThresholds> | undefined>(undefined);\n readonly showInsight = input(true, { transform: booleanAttribute });\n readonly size = input<RatingSize | undefined>(undefined);\n readonly tone = input<RatingTone | undefined>(undefined);\n /** Words laid over the catalog of the language in force, key by key. */\n readonly messages = input<PartialMessages<RatingMessages> | undefined>(undefined);\n /** The locale numbers are written in. Unstated, the language in force. */\n readonly locale = input<string | undefined>(undefined);\n\n /**\n * Emitted before the selection moves, with the levels asked for, the ones\n * they replace, the reason and the event. `cancel()` keeps the selection.\n */\n readonly selectedLevelsChangeRequest = output<ChangeRequest<readonly number[]>>();\n\n private readonly defaults = injectRatingDefaults();\n private readonly appLocale = injectLocale();\n /** The family's words in the language in force, with this summary's `messages` laid over them. */\n readonly t = injectMessages(ratingMessages, this.messages);\n\n readonly resolvedMax = computed(() => Math.max(1, Math.round(this.max() ?? this.defaults.max)));\n readonly resolvedVariant = computed(() => this.variant());\n readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n readonly resolvedTone = computed(() => this.tone() ?? this.defaults.tone);\n protected readonly resolvedLocale = computed(() => this.locale() ?? this.appLocale());\n private readonly thresholds = computed<RatingInsightThresholds>(() => ({\n ...this.defaults.insightThresholds,\n ...this.insightThresholds(),\n }));\n\n /** Everything drawn is read from here: `summariseRatings` over the counts on the scale. */\n readonly summary = computed(() => {\n const counts = this.counts();\n const levels = Array.from({ length: this.resolvedMax() }, (_, index) => counts[index] ?? 0);\n return summariseRatings(levels, this.thresholds());\n });\n\n protected readonly lowestFirst = computed<SummaryLevel[]>(() => {\n const { levels, total } = this.summary();\n const locale = this.resolvedLocale();\n const pressed = this.selectedLevels();\n const largest = Math.max(0, ...levels.map((level) => level.count));\n return [...levels].reverse().map(({ level, count, share }) => {\n const shareText = formatShare(share, locale);\n const countText = formatCount(count, locale);\n return {\n level,\n count,\n countText,\n share: cssNumber(total === 0 ? 0 : share, 4),\n peak: cssNumber(largest === 0 ? 0 : count / largest, 4),\n shareText,\n label: this.t('levelLabel', { level, count, share: shareText }),\n pressed: pressed.includes(level),\n };\n });\n });\n\n protected readonly highestFirst = computed(() => [...this.lowestFirst()].reverse());\n\n protected readonly averageText = computed(() => {\n const average = this.summary().average;\n return average === null ? '' : formatRating(average, this.resolvedLocale());\n });\n\n protected readonly scaleText = computed(() => this.t('scale', { max: this.resolvedMax() }));\n\n protected readonly countText = computed(() => {\n const { total, margin, interval } = this.summary();\n const locale = this.resolvedLocale();\n if (total === 0) return this.t('summaryEmpty');\n if (this.resolvedVariant() === 'bars') return this.t('summaryCount', { count: total });\n if (margin !== null && interval !== null && margin >= this.thresholds().margin) {\n return this.t('spectrumUncertain', {\n count: total,\n low: formatRating(interval[0], locale),\n high: formatRating(interval[1], locale),\n });\n }\n /* Two places, written here: the core writes a number to one place, and a\n margin of 0,04 would read as nought. */\n const written = new Intl.NumberFormat(locale, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(margin ?? 0);\n return this.t('spectrumCount', { count: total, margin: written });\n });\n\n protected readonly insight = computed(() => {\n const insight = this.summary().insight;\n /* The conclusion is read from the spread, which only the spectrum draws. */\n if (this.resolvedVariant() !== 'spectrum' || !this.showInsight() || insight === null) {\n return null;\n }\n return { tone: INSIGHT_TONE[insight], text: this.t(insight) };\n });\n\n protected readonly buckets = computed<SummaryBucket[]>(() => {\n const { buckets } = this.summary();\n const locale = this.resolvedLocale();\n const tones = { positive: 'success', neutral: 'secondary', negative: 'danger' } as const;\n return (['positive', 'neutral', 'negative'] as const).map((key) => {\n const [before = '', after = ''] = this.t(key, { share: SHARE_MARK }).split(SHARE_MARK);\n return { key, tone: tones[key], before, share: formatShare(buckets[key], locale), after };\n });\n });\n\n protected readonly meanProperties = computed(() => {\n const { mean, interval } = this.summary();\n if (this.resolvedVariant() !== 'spectrum' || mean === null || interval === null) return null;\n return {\n mean: cssNumber(mean, 3),\n low: cssNumber(interval[0], 3),\n high: cssNumber(interval[1], 3),\n };\n });\n\n protected toggle(level: number, event: MouseEvent) {\n const held = this.selectedLevels();\n const next = held.includes(level)\n ? held.filter((candidate) => candidate !== level)\n : [...held, level].sort((a, b) => a - b);\n const state = createControllable<readonly number[]>({\n initial: held,\n /* Two fresh arrays are never the same object; the toggle always changes membership. */\n equals: () => false,\n onRequest: (request) => this.selectedLevelsChangeRequest.emit(request),\n });\n if (!state.request(next, event.detail === 0 ? 'keyboard' : 'pointer', event)) return;\n this.selectedLevels.set(next);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slotted-angular-rating.mjs","sources":["../../rating/src/rating-defaults.ts","../../rating/src/rating.ts","../../rating/src/rating-display.ts","../../rating/src/rating-summary.ts","../../rating/src/slotted-angular-rating.ts"],"sourcesContent":["import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { RATING_INSIGHT_THRESHOLDS } from '@slotted/core/rating';\nimport type { RatingInsightThresholds } from '@slotted/core/rating';\n\n/** The step the symbols and the text beside them sit at. */\nexport type RatingSize = 'sm' | 'md' | 'lg';\n\n/**\n * The colour a lit symbol takes. `secondary` is outside the axis: its solid\n * step is a ground, and a lit star painted in it reads as an unlit one.\n */\nexport type RatingTone = 'accent' | 'info' | 'success' | 'warning' | 'danger';\n\n/** The smallest move of the input member: a whole symbol, or half of one. */\nexport type RatingStep = 1 | 0.5;\n\n/** How the display member draws a value: every symbol, one symbol, or one symbol and a histogram. */\nexport type RatingDisplayVariant = 'full' | 'compact' | 'histogram';\n\n/** How the summary draws a distribution: one bar per level, or columns over the scale with the mean. */\nexport type RatingSummaryVariant = 'bars' | 'spectrum';\n\nexport interface RatingDefaults {\n size: RatingSize;\n tone: RatingTone;\n max: number;\n clearable: boolean;\n insightThresholds: RatingInsightThresholds;\n}\n\n/** What `provideRating()` takes: every key optional, and the thresholds partial. */\nexport type RatingDefaultsInput = Partial<Omit<RatingDefaults, 'insightThresholds'>> & {\n insightThresholds?: Partial<RatingInsightThresholds>;\n};\n\nconst FALLBACK: RatingDefaults = {\n size: 'md',\n tone: 'warning',\n max: 5,\n clearable: true,\n insightThresholds: RATING_INSIGHT_THRESHOLDS,\n};\n\nexport const SL_RATING_DEFAULTS = new InjectionToken<RatingDefaults>('slotted rating defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once how its ratings read — the step, the tone, the\n * scale, whether a press on the chosen star empties it and the thresholds of\n * the summary's conclusion. A threshold left out keeps the family's; an\n * instance that states any of them still wins. The words and the locale come\n * from the language in force (`provideSlotted`).\n */\nexport function provideRating(defaults: RatingDefaultsInput) {\n return {\n provide: SL_RATING_DEFAULTS,\n useFactory: (): RatingDefaults => ({\n ...FALLBACK,\n ...defaults,\n insightThresholds: { ...RATING_INSIGHT_THRESHOLDS, ...defaults.insightThresholds },\n }),\n };\n}\n\n/** What a rating renders as here, before it states anything of its own. */\nexport function injectRatingDefaults(): RatingDefaults {\n return inject(SL_RATING_DEFAULTS);\n}\n\n/**\n * One sequence for every application in the page, not one per application.\n *\n * The generated value is the `name` the radios group by, and grouping is by\n * name across the whole document when there is no form: two applications on\n * one page — every story on a Storybook docs page is its own application —\n * each counting from one gave two ratings the same name, and checking a star\n * in one unchecked the other. `field` scopes its counter to the application\n * because its identifiers must match between server and client; this one is\n * written through an attribute binding, which the client rewrites after\n * hydration, so a sequence shared by the realm costs nothing there.\n */\nlet sequence = 0;\n\n@Injectable({ providedIn: 'root' })\nexport class SlRatingIdFactory {\n next() {\n sequence += 1;\n return `slotted-rating-${sequence}`;\n }\n}\n\n/** A whole count, with the locale's grouping. */\nexport function formatCount(count: number, locale: string | undefined): string {\n return new Intl.NumberFormat(locale, { maximumFractionDigits: 0 }).format(count);\n}\n\n/** A number written into a custom property, to a fixed number of places. */\nexport function cssNumber(value: number, places: number): string {\n return String(Number(value.toFixed(places)));\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n ElementRef,\n forwardRef,\n HostAttributeToken,\n inject,\n input,\n model,\n output,\n signal,\n TemplateRef,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type {\n AbstractControl,\n ControlValueAccessor,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SlField } from '@slotted/angular/field';\nimport { SlFieldGroup } from '@slotted/angular/field-group';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { type PartialMessages, ratingMessages, type RatingMessages } from '@slotted/core/i18n';\nimport {\n formatRatingValue,\n normaliseRating,\n ratingAtPoint,\n ratingFills,\n ratingForKey,\n} from '@slotted/core/rating';\nimport type { RatingScale } from '@slotted/core/rating';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeRequest } from '@slotted/core/state';\n\nimport { injectRatingDefaults, SlRatingIdFactory } from './rating-defaults';\nimport type { RatingSize, RatingStep, RatingTone } from './rating-defaults';\n\n/** Why the value moved. A rating can produce exactly these three. */\nexport type RatingValueReason = 'pointer' | 'keyboard' | 'clear';\n\n/** What the caption template is handed: the value held, and the one under the pointer. */\nexport interface RatingCaptionContext {\n $implicit: number | null;\n value: number | null;\n preview: number | null;\n}\n\n/** What the symbol template is handed: the symbol's position, and how much of it is lit. */\nexport interface RatingSymbolContext {\n $implicit: { index: number; fill: number };\n index: number;\n fill: number;\n}\n\n/**\n * The words beside the stars. On an element it is projected as it is; on an\n * `ng-template` it is rendered again whenever the value or the preview moves,\n * with both in its context — the word for the star under the pointer is the\n * whole point of a caption.\n */\n@Directive({\n selector: '[slRatingCaption]',\n standalone: true,\n})\nexport class SlRatingCaption {\n readonly template = inject<TemplateRef<RatingCaptionContext>>(TemplateRef, { optional: true });\n\n static ngTemplateContextGuard(\n _directive: SlRatingCaption,\n context: unknown,\n ): context is RatingCaptionContext {\n return context !== null;\n }\n}\n\n/**\n * The drawing of one symbol, in place of the star. It is rendered twice per\n * item — once in `symbol`, the unlit shape, and once in `fill`, the lit one\n * the stylesheet clips — so a consumer's heart lights the way a star does.\n */\n@Directive({\n selector: 'ng-template[slRatingSymbol]',\n standalone: true,\n})\nexport class SlRatingSymbol {\n readonly template = inject<TemplateRef<RatingSymbolContext>>(TemplateRef);\n\n static ngTemplateContextGuard(\n _directive: SlRatingSymbol,\n context: unknown,\n ): context is RatingSymbolContext {\n return context !== null;\n }\n}\n\ninterface RatingRadio {\n value: number;\n half: boolean;\n label: string;\n}\n\ninterface RatingItem {\n index: number;\n checked: boolean;\n radios: RatingRadio[];\n context: RatingSymbolContext;\n}\n\n/** A touch or a pen on the row, from its press to its release. */\ninterface RatingGesture {\n pointerId: number;\n moved: boolean;\n}\n\nconst optionalBoolean = (value: boolean | string | undefined) =>\n value === undefined ? undefined : booleanAttribute(value);\n\n/**\n * An ordinal value chosen from a row of symbols.\n *\n * **The radios are native, and that buys the rest.** Tab lands on the checked\n * one or on the first, Space checks, the form submits the value under one\n * `name`, and a disabled rating leaves the tab order — all the platform's. The\n * arrows are the family's (`ratingForKey`): the platform's wrap from the last\n * radio to the first, and a rating that falls from five to one on one key too\n * many is the defect every surveyed rating avoids.\n *\n * **A half step is a second radio over the inline-start half of the symbol**,\n * stacked above the whole one, so the pointer asks for the half by pressing\n * where the half is drawn.\n *\n * **The DOM is written back after every activation.** The HTML standard's\n * canceled activation restores only the clicked radio, and a press on the\n * checked one that empties the value leaves the platform nothing to undo, so\n * each radio's `checked` is set from the value once the request is answered.\n */\n@Component({\n selector: 'div[slRating]',\n standalone: true,\n exportAs: 'slRating',\n imports: [NgTemplateOutlet, SlGlyph, SlIcon],\n template: `<div\n data-part=\"symbols\"\n data-part-symbols=\"\"\n (pointerdown)=\"onRowPointerDown($event)\"\n (pointermove)=\"onRowPointerMove($event)\"\n (pointerup)=\"onRowPointerUp($event)\"\n (pointercancel)=\"onRowPointerCancel()\"\n >\n @for (item of items(); track item.index) {\n <span data-part=\"item\" data-part-item=\"\" [attr.data-checked]=\"item.checked ? '' : null\">\n @for (radio of item.radios; track radio.value) {\n <input\n #radioInput\n data-part=\"input\"\n data-part-input=\"\"\n type=\"radio\"\n [attr.data-half]=\"radio.half ? '' : null\"\n [attr.name]=\"resolvedName()\"\n [attr.form]=\"form() ?? null\"\n [attr.value]=\"radio.value\"\n [attr.aria-label]=\"radio.label\"\n [attr.disabled]=\"resolvedDisabled() === true ? '' : null\"\n [checked]=\"radio.value === current()\"\n (pointerover)=\"onPreview(radio.value)\"\n (blur)=\"onBlur()\"\n />\n }\n <span data-part=\"symbol\" data-part-symbol=\"\">\n @if (symbol(); as custom) {\n <ng-container *ngTemplateOutlet=\"custom.template; context: item.context\" />\n } @else {\n <span slIcon><svg slGlyph name=\"star\"></svg></span>\n }\n </span>\n <span data-part=\"fill\" data-part-fill=\"\">\n @if (symbol(); as custom) {\n <ng-container *ngTemplateOutlet=\"custom.template; context: item.context\" />\n } @else {\n <span slIcon><svg slGlyph name=\"star\"></svg></span>\n }\n </span>\n </span>\n }\n </div>\n @if (caption(); as words) {\n <span data-part=\"value\" data-part-value=\"\" aria-hidden=\"true\">\n @if (words.template; as captionTemplate) {\n <ng-container *ngTemplateOutlet=\"captionTemplate; context: captionContext()\" />\n } @else {\n <ng-content select=\"[slRatingCaption]\" />\n }\n </span>\n }`,\n styleUrl: '../../../styles/src/rating/rating.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlRating), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => SlRating), multi: true },\n ],\n host: {\n 'data-ui': 'rating',\n 'data-ui-rating': '',\n 'data-part': 'root',\n 'data-part-root': '',\n '[attr.role]': 'resolvedRole()',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-tone]': 'resolvedTone()',\n '[attr.data-max]': 'resolvedMax()',\n '[attr.data-step]': \"resolvedStep() === 0.5 ? '0.5' : null\",\n '[attr.data-disabled]': \"resolvedDisabled() === true ? '' : null\",\n '[attr.data-readonly]': \"resolvedReadOnly() === true ? '' : null\",\n '[attr.data-invalid]': \"resolvedInvalid() === true ? '' : null\",\n '[attr.data-dragging]': \"dragging() ? '' : null\",\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-invalid]': \"resolvedInvalid() === true ? 'true' : null\",\n '[attr.aria-readonly]': \"resolvedReadOnly() === true ? 'true' : null\",\n '[attr.aria-required]': \"resolvedRequired() === true ? 'true' : null\",\n '(keydown)': 'onKeyDown($event)',\n '(click)': 'onClick($event)',\n '(pointerleave)': 'onLeave()',\n },\n})\nexport class SlRating implements ControlValueAccessor, Validator {\n /** The rating, `null` for none. Two-way; every move is asked first through `valueChangeRequest`. */\n readonly value = model<number | null>(null);\n readonly max = input<number | undefined>(undefined);\n readonly step = input<RatingStep>(1);\n readonly clearable = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly size = input<RatingSize | undefined>(undefined);\n readonly tone = input<RatingTone | undefined>(undefined);\n /** The submission name the radios share. Generated when it is not written. */\n readonly name = input<string | undefined>(undefined);\n /** The form the radios belong to when the rating sits outside it. */\n readonly form = input<string | undefined>(undefined);\n /** Unstated rather than `false`, so the rating defers to the field around it. */\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly readOnly = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly invalid = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n readonly required = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n /** Words laid over the catalog of the language in force, key by key. */\n readonly messages = input<PartialMessages<RatingMessages> | undefined>(undefined);\n /** The locale numbers are written in. Unstated, the language in force. */\n readonly locale = input<string | undefined>(undefined);\n\n /**\n * Emitted before the value moves, with the value asked for, the one it\n * replaces, the reason and the event. `cancel()` keeps the value.\n */\n readonly valueChangeRequest = output<ChangeRequest<number | null>>();\n /** The value under the pointer, and `null` when it leaves. It changes nothing. */\n readonly previewChange = output<number | null>();\n\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly field = inject(SlField, { optional: true });\n private readonly fieldGroup = inject(SlFieldGroup, { optional: true });\n private readonly defaults = injectRatingDefaults();\n private readonly appLocale = injectLocale();\n /** The family's words in the language in force, with this rating's `messages` laid over them. */\n readonly t = injectMessages(ratingMessages, this.messages);\n private readonly generatedName = inject(SlRatingIdFactory).next();\n private readonly writtenRole = inject(new HostAttributeToken('role'), { optional: true });\n private readonly writtenDescribedBy = inject(new HostAttributeToken('aria-describedby'), {\n optional: true,\n });\n\n protected readonly caption = contentChild(SlRatingCaption);\n protected readonly symbol = contentChild(SlRatingSymbol);\n private readonly radios = viewChildren<ElementRef<HTMLInputElement>>('radioInput');\n\n private readonly formDisabled = signal<boolean | undefined>(undefined);\n private readonly preview = signal<number | null>(null);\n protected readonly dragging = signal(false);\n private gesture: RatingGesture | null = null;\n /** Set when a touch gesture has answered a press, so the click the platform sends after it does not answer it again. */\n private suppressClick = false;\n private onChange: (value: number | null) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n readonly resolvedName = computed(() => this.name() ?? this.generatedName);\n readonly resolvedMax = computed(() => Math.max(1, Math.round(this.max() ?? this.defaults.max)));\n readonly resolvedStep = computed<RatingStep>(() => (this.step() === 0.5 ? 0.5 : 1));\n readonly resolvedClearable = computed(() => this.clearable() ?? this.defaults.clearable);\n readonly resolvedSize = computed(\n () =>\n this.size() ??\n (this.field?.resolvedSize() as RatingSize | undefined) ??\n (this.fieldGroup?.resolvedSize() as RatingSize | undefined) ??\n this.defaults.size,\n );\n readonly resolvedTone = computed(() => this.tone() ?? this.defaults.tone);\n readonly resolvedDisabled = computed(\n () => this.disabled() ?? this.formDisabled() ?? this.field?.resolvedDisabled(),\n );\n readonly resolvedReadOnly = computed(() => this.readOnly() ?? this.field?.resolvedReadOnly());\n readonly resolvedInvalid = computed(() => this.invalid() ?? this.field?.invalid());\n readonly resolvedRequired = computed(\n () => this.required() ?? this.field?.required() ?? this.fieldGroup?.required(),\n );\n readonly resolvedLocale = computed(() => this.locale() ?? this.appLocale());\n\n private readonly scale = computed<RatingScale>(() => ({\n max: this.resolvedMax(),\n step: this.resolvedStep(),\n }));\n\n /** The value on the grid of the scale: 7 of 5 is 5, 3.2 on whole steps is 4, and `NaN` is none. */\n readonly current = computed(() => normaliseRating(this.value(), this.scale()));\n\n protected readonly items = computed<RatingItem[]>(() => {\n const { max, step } = this.scale();\n const current = this.current();\n const fills = ratingFills(current, max);\n const locale = this.resolvedLocale();\n return fills.map((fill, index) => {\n const whole = index + 1;\n const values = step === 0.5 ? [whole - 0.5, whole] : [whole];\n return {\n index,\n checked: current !== null && values.includes(current),\n radios: values.map((value) => ({\n value,\n half: value !== whole,\n label: this.t('itemLabel', { value: formatRatingValue(value, locale), max }),\n })),\n context: { $implicit: { index, fill }, index, fill },\n };\n });\n });\n\n protected readonly captionContext = computed<RatingCaptionContext>(() => ({\n $implicit: this.current(),\n value: this.current(),\n preview: this.preview(),\n }));\n\n protected readonly resolvedRole = computed(\n () => this.writtenRole ?? (this.fieldGroup === null ? 'radiogroup' : null),\n );\n protected readonly describedBy = computed(() => {\n const merged = [this.writtenDescribedBy, this.field?.describedBy()].filter(Boolean);\n return merged.length === 0 ? null : merged.join(' ');\n });\n\n private readonly inert = computed(\n () => this.resolvedDisabled() === true || this.resolvedReadOnly() === true,\n );\n\n /** The one action a value cannot express: focus on the checked radio, or on the first. */\n focus(options?: FocusOptions) {\n const target = this.inputFor(this.current()) ?? this.radios()[0]?.nativeElement;\n target?.focus(options);\n }\n\n protected onKeyDown(event: KeyboardEvent) {\n this.suppressClick = false;\n if (!this.isOwnRadio(event.target) || this.resolvedDisabled() === true) return;\n const next = ratingForKey(event.key, this.current(), this.scale(), {\n rtl: this.isRtl(),\n clearable: this.resolvedClearable(),\n });\n if (next === undefined) return;\n event.preventDefault();\n if (this.resolvedReadOnly() === true) return;\n if (next === null) {\n this.request(null, 'clear', event);\n this.syncElements();\n return;\n }\n this.request(next, 'keyboard', event);\n this.syncElements();\n this.inputFor(this.current())?.focus();\n }\n\n protected onClick(event: MouseEvent) {\n const target = event.target;\n if (this.suppressClick) {\n this.suppressClick = false;\n if (this.isOwnRadio(target)) {\n event.preventDefault();\n this.syncElements();\n }\n return;\n }\n if (!this.isOwnRadio(target)) return;\n if (this.inert()) {\n event.preventDefault();\n this.syncElements();\n return;\n }\n\n const picked = Number(target.value);\n if (picked === this.current()) {\n /* A click the keyboard synthesised — Space on the checked radio — reports\n no detail, and Space checks; it never empties. */\n if (this.resolvedClearable() && event.detail > 0) this.request(null, 'clear', event);\n this.syncElements();\n return;\n }\n const moved = this.request(picked, event.detail === 0 ? 'keyboard' : 'pointer', event);\n if (!moved) event.preventDefault();\n this.syncElements();\n }\n\n protected onRowPointerDown(event: PointerEvent) {\n this.suppressClick = false;\n if (this.inert() || event.pointerType === 'mouse' || event.pointerType === '') return;\n this.gesture = { pointerId: event.pointerId, moved: false };\n this.dragging.set(true);\n const row = event.currentTarget as HTMLElement;\n if (typeof row.setPointerCapture === 'function') row.setPointerCapture(event.pointerId);\n }\n\n protected onRowPointerMove(event: PointerEvent) {\n if (this.gesture === null || event.pointerId !== this.gesture.pointerId) return;\n this.gesture.moved = true;\n const next = this.valueAt(event);\n if (next === this.current()) return;\n this.request(next, 'pointer', event);\n this.syncElements();\n }\n\n /**\n * A touch that never moved is a press, answered here rather than by the\n * click that follows it: with the row capturing the pointer, the click lands\n * on the row and not on a radio.\n */\n protected onRowPointerUp(event: PointerEvent) {\n if (this.gesture === null || event.pointerId !== this.gesture.pointerId) return;\n if (!this.gesture.moved) {\n const next = this.valueAt(event);\n if (next !== this.current()) this.request(next, 'pointer', event);\n else if (this.resolvedClearable()) this.request(null, 'clear', event);\n this.syncElements();\n }\n this.gesture = null;\n this.dragging.set(false);\n this.suppressClick = true;\n }\n\n protected onRowPointerCancel() {\n this.gesture = null;\n this.dragging.set(false);\n }\n\n protected onPreview(value: number) {\n if (this.inert() || this.preview() === value) return;\n this.preview.set(value);\n this.previewChange.emit(value);\n }\n\n protected onLeave() {\n if (this.preview() === null) return;\n this.preview.set(null);\n this.previewChange.emit(null);\n }\n\n protected onBlur() {\n this.onTouched();\n }\n\n writeValue(value: number | null | undefined) {\n this.value.set(value ?? null);\n }\n\n registerOnChange(fn: (value: number | null) => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.formDisabled.set(isDisabled);\n }\n\n /** \"Choose a rating\" is a fact about the whole row, which no single radio can see. */\n validate(control: AbstractControl): ValidationErrors | null {\n if (this.resolvedRequired() !== true) return null;\n const value = control.value as number | null | undefined;\n return normaliseRating(value, this.scale()) === null ? { required: true } : null;\n }\n\n /**\n * Asks for one value. Returns whether it moved: not while read-only or\n * disabled, not when it is the value already held, and not when the\n * consumer cancelled the request.\n */\n private request(next: number | null, reason: RatingValueReason, source: Event): boolean {\n if (this.inert()) return false;\n const previous = this.current();\n if (next === previous) return false;\n const state = createControllable<number | null>({\n initial: previous,\n onRequest: (request) => this.valueChangeRequest.emit(request),\n });\n if (!state.request(next, reason, source)) return false;\n this.value.set(next);\n this.onChange(next);\n return true;\n }\n\n private valueAt(event: PointerEvent): number {\n const row = event.currentTarget as HTMLElement;\n const box = row.getBoundingClientRect();\n return ratingAtPoint(\n { x: event.clientX },\n { x: box.x, width: box.width },\n this.scale(),\n this.isRtl(),\n );\n }\n\n /** Writes every radio's `checked` from the value. */\n private syncElements() {\n const current = this.current();\n for (const { nativeElement } of this.radios()) {\n nativeElement.checked = Number(nativeElement.value) === current;\n }\n }\n\n private inputFor(value: number | null): HTMLInputElement | undefined {\n if (value === null) return undefined;\n return this.radios().find(({ nativeElement }) => Number(nativeElement.value) === value)\n ?.nativeElement;\n }\n\n private isOwnRadio(target: EventTarget | null): target is HTMLInputElement {\n return this.radios().some(({ nativeElement }) => nativeElement === target);\n }\n\n /** A right-to-left document is a property of the page, read from the element. */\n private isRtl() {\n return getComputedStyle(this.element).direction === 'rtl';\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n HostAttributeToken,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { type PartialMessages, ratingMessages, type RatingMessages } from '@slotted/core/i18n';\nimport { formatRating, formatRatingValue, ratingFills } from '@slotted/core/rating';\n\nimport { cssNumber, formatCount, injectRatingDefaults } from './rating-defaults';\nimport type { RatingDisplayVariant, RatingSize, RatingTone } from './rating-defaults';\n\n/**\n * A rating the page reports rather than asks for: an image of lit symbols\n * named by the number it draws.\n *\n * Any fraction is drawn — 4,6 lights six tenths of the fifth star — because\n * nothing here is a target; the input member offers whole and half steps\n * only. `compact` and `histogram` draw one lit star beside the number, for a\n * row of a table or a card, and `histogram` adds the distribution as bars,\n * each level over the largest, so a split between the two ends is visible at\n * a glance where a mean of 3,3 would hide it.\n */\n@Component({\n selector: 'div[slRatingDisplay]',\n standalone: true,\n exportAs: 'slRatingDisplay',\n imports: [SlGlyph, SlIcon],\n template: `<div data-part=\"symbols\" data-part-symbols=\"\">\n @for (fill of fills(); track $index) {\n <span data-part=\"item\" data-part-item=\"\" [style.--slotted-rating-fill]=\"fill\"\n ><span data-part=\"symbol\" data-part-symbol=\"\"\n ><span slIcon><svg slGlyph name=\"star\"></svg></span></span\n ><span data-part=\"fill\" data-part-fill=\"\"\n ><span slIcon><svg slGlyph name=\"star\"></svg></span></span\n ></span>\n }\n </div>\n @if (showValue()) {\n <span data-part=\"value\" data-part-value=\"\" aria-hidden=\"true\">{{ valueText() }}</span>\n }\n @if (resolvedVariant() === 'histogram') {\n <span data-part=\"histogram\" data-part-histogram=\"\" aria-hidden=\"true\">\n @for (share of shares(); track $index) {\n <span data-part=\"bar\" data-part-bar=\"\" [style.--slotted-rating-share]=\"share\"></span>\n }\n </span>\n }\n @if (countText(); as text) {\n <span data-part=\"count\" data-part-count=\"\" aria-hidden=\"true\">{{ text }}</span>\n }`,\n styleUrl: '../../../styles/src/rating/rating.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'rating',\n 'data-ui-rating': '',\n 'data-part': 'root',\n 'data-part-root': '',\n role: 'img',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-tone]': 'resolvedTone()',\n '[attr.data-variant]': \"resolvedVariant() === 'full' ? null : resolvedVariant()\",\n '[attr.aria-label]': 'label()',\n },\n})\nexport class SlRatingDisplay {\n /** The number drawn. Any fraction; clamped to the scale when it is drawn. */\n readonly value = input.required<number>();\n readonly max = input<number | undefined>(undefined);\n readonly size = input<RatingSize | undefined>(undefined);\n readonly tone = input<RatingTone | undefined>(undefined);\n readonly variant = input<RatingDisplayVariant>('full');\n /** How many readings the value is made of. Written beside it and in the name. */\n readonly count = input<number | undefined>(undefined);\n /** Counts per level, lowest first, for the `histogram` variant. */\n readonly distribution = input<readonly number[] | undefined>(undefined);\n readonly showValue = input(true, { transform: booleanAttribute });\n /** Words laid over the catalog of the language in force, key by key. */\n readonly messages = input<PartialMessages<RatingMessages> | undefined>(undefined);\n /** The locale numbers are written in. Unstated, the language in force. */\n readonly locale = input<string | undefined>(undefined);\n\n private readonly defaults = injectRatingDefaults();\n private readonly appLocale = injectLocale();\n /** The family's words in the language in force, with this display's `messages` laid over them. */\n readonly t = injectMessages(ratingMessages, this.messages);\n private readonly writtenLabel = inject(new HostAttributeToken('aria-label'), { optional: true });\n\n readonly resolvedMax = computed(() => Math.max(1, Math.round(this.max() ?? this.defaults.max)));\n readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n readonly resolvedTone = computed(() => this.tone() ?? this.defaults.tone);\n readonly resolvedVariant = computed(() => this.variant());\n private readonly resolvedLocale = computed(() => this.locale() ?? this.appLocale());\n\n /** The value clamped to the scale, and `NaN` read as nought. */\n private readonly drawn = computed(() => {\n const value = this.value();\n return Number.isFinite(value) ? Math.min(Math.max(value, 0), this.resolvedMax()) : 0;\n });\n\n /** Every symbol's lit share; one full star for the variants that draw one. */\n protected readonly fills = computed(() =>\n this.resolvedVariant() === 'full'\n ? ratingFills(this.drawn(), this.resolvedMax()).map((fill) => cssNumber(fill, 4))\n : ['1'],\n );\n\n protected readonly shares = computed(() => {\n const counts = (this.distribution() ?? []).map((count) =>\n Number.isFinite(count) ? Math.max(0, count) : 0,\n );\n const largest = Math.max(0, ...counts);\n return counts.map((count) => cssNumber(largest === 0 ? 0 : count / largest, 4));\n });\n\n protected readonly valueText = computed(() => formatRating(this.drawn(), this.resolvedLocale()));\n\n protected readonly countText = computed(() => {\n const count = this.count();\n if (count === undefined) return null;\n const text = formatCount(count, this.resolvedLocale());\n return this.resolvedVariant() === 'histogram' ? text : `(${text})`;\n });\n\n protected readonly label = computed(() => {\n if (this.writtenLabel !== null) return this.writtenLabel;\n const count = this.count();\n const value = formatRatingValue(this.drawn(), this.resolvedLocale());\n const max = this.resolvedMax();\n return count === undefined\n ? this.t('displayLabel', { value, max })\n : this.t('displayLabelWithCount', { value, max, count });\n });\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { type PartialMessages, ratingMessages, type RatingMessages } from '@slotted/core/i18n';\nimport { formatRating, formatShare, summariseRatings } from '@slotted/core/rating';\nimport type { RatingInsight, RatingInsightThresholds } from '@slotted/core/rating';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeRequest } from '@slotted/core/state';\n\nimport { cssNumber, formatCount, injectRatingDefaults } from './rating-defaults';\nimport type { RatingSize, RatingSummaryVariant, RatingTone } from './rating-defaults';\n\n/** Stands in for the share while a message is written, so the share can be set apart. */\nconst SHARE_MARK = '\\uE000';\nimport { SlRatingDisplay } from './rating-display';\n\n/** Why the selected levels moved: a press, or Space or Enter on a level. */\nexport type RatingLevelsReason = 'pointer' | 'keyboard';\n\n/** The tone each conclusion is drawn in, from the family's contract. */\nconst INSIGHT_TONE: Record<RatingInsight, 'success' | 'warning' | 'secondary'> = {\n divided: 'warning',\n few: 'secondary',\n consensus: 'success',\n mixed: 'secondary',\n};\n\ninterface SummaryLevel {\n level: number;\n count: number;\n countText: string;\n /** The level's share of the total, for the bar of `bars`. */\n share: string;\n /** The level over the largest level, for the column of `spectrum`. */\n peak: string;\n shareText: string;\n label: string;\n pressed: boolean;\n}\n\ninterface SummaryBucket {\n key: 'positive' | 'neutral' | 'negative';\n tone: 'success' | 'secondary' | 'danger';\n before: string;\n share: string;\n after: string;\n}\n\n/**\n * The aggregate of many ratings: the figure, how many readings it is made of,\n * and how they spread over the levels.\n *\n * `bars` draws one bar per level, highest first, the order every surveyed\n * summary uses. `spectrum` draws the same counts as columns over the scale,\n * lowest first, with the mean and its 95% interval laid over them, the\n * readings split into three buckets, and one conclusion — split, too few,\n * agreed, or none of those — so a 3,3 made of ones and fives does not read\n * like a 3,3 made of threes.\n *\n * With `filterable`, each level is a toggle button, and the pressed levels are\n * a selection the page filters its reviews by; a level nobody chose is\n * disabled, because a filter that returns nothing is a dead end.\n */\n@Component({\n selector: 'section[slRatingSummary]',\n standalone: true,\n exportAs: 'slRatingSummary',\n imports: [NgTemplateOutlet, SlGlyph, SlIcon, SlRatingDisplay],\n template: `<ng-template #levelLabel let-level\n ><span data-part=\"level-label\" data-part-level-label=\"\"\n ><span>{{ level }}</span\n ><span slIcon><svg slGlyph name=\"star\"></svg></span></span\n ></ng-template>\n <div data-part=\"aggregate\" data-part-aggregate=\"\">\n @if (summary().total > 0) {\n <span data-part=\"value\" data-part-value=\"\">{{ averageText() }}</span>\n <span data-part=\"scale\" data-part-scale=\"\">{{ scaleText() }}</span>\n }\n @if (insight(); as conclusion) {\n <span data-part=\"insight\" data-part-insight=\"\" [attr.data-tone]=\"conclusion.tone\">{{\n conclusion.text\n }}</span>\n }\n @if (resolvedVariant() === 'bars') {\n <div\n slRatingDisplay\n size=\"sm\"\n [tone]=\"resolvedTone()\"\n [value]=\"summary().average ?? 0\"\n [max]=\"resolvedMax()\"\n [showValue]=\"false\"\n [messages]=\"messages()\"\n [locale]=\"resolvedLocale()\"\n ></div>\n }\n <span data-part=\"count\" data-part-count=\"\">{{ countText() }}</span>\n </div>\n @if (resolvedVariant() === 'bars') {\n <ul\n data-part=\"distribution\"\n data-part-distribution=\"\"\n [attr.aria-label]=\"t('distributionLabel')\"\n >\n @for (level of highestFirst(); track level.level) {\n <li>\n @if (filterable()) {\n <button\n data-part=\"level\"\n data-part-level=\"\"\n type=\"button\"\n [attr.aria-pressed]=\"level.pressed ? 'true' : 'false'\"\n [attr.data-pressed]=\"level.pressed ? '' : null\"\n [attr.aria-label]=\"level.label\"\n [attr.disabled]=\"level.count === 0 ? '' : null\"\n (click)=\"toggle(level.level, $event)\"\n >\n <ng-container *ngTemplateOutlet=\"levelBody; context: { $implicit: level }\" />\n </button>\n } @else {\n <div\n data-part=\"level\"\n data-part-level=\"\"\n role=\"group\"\n [attr.aria-label]=\"level.label\"\n >\n <ng-container *ngTemplateOutlet=\"levelBody; context: { $implicit: level }\" />\n </div>\n }\n </li>\n }\n </ul>\n <ng-template #levelBody let-level\n ><ng-container *ngTemplateOutlet=\"levelLabel; context: { $implicit: level.level }\" /><span\n data-part=\"track\"\n data-part-track=\"\"\n aria-hidden=\"true\"\n ><span\n data-part=\"indicator\"\n data-part-indicator=\"\"\n [style.--slotted-rating-share]=\"level.share\"\n ></span></span\n ><span data-part=\"level-count\" data-part-level-count=\"\">{{\n level.countText\n }}</span></ng-template\n >\n } @else {\n <div data-part=\"plot\" data-part-plot=\"\">\n <div data-part=\"field\" data-part-field=\"\">\n <div data-part=\"columns\" data-part-columns=\"\">\n @for (level of lowestFirst(); track level.level) {\n @if (filterable()) {\n <button\n data-part=\"column\"\n data-part-column=\"\"\n type=\"button\"\n [attr.aria-pressed]=\"level.pressed ? 'true' : 'false'\"\n [attr.data-pressed]=\"level.pressed ? '' : null\"\n [attr.aria-label]=\"level.label\"\n [attr.disabled]=\"level.count === 0 ? '' : null\"\n [style.--slotted-rating-share]=\"level.peak\"\n (click)=\"toggle(level.level, $event)\"\n >\n <span data-part=\"bar\" data-part-bar=\"\"></span>\n </button>\n } @else {\n <div\n data-part=\"column\"\n data-part-column=\"\"\n role=\"group\"\n [attr.aria-label]=\"level.label\"\n [style.--slotted-rating-share]=\"level.peak\"\n >\n <span data-part=\"bar\" data-part-bar=\"\"></span>\n </div>\n }\n }\n </div>\n @if (summary().total > 0) {\n <span data-part=\"interval\" data-part-interval=\"\" aria-hidden=\"true\"></span>\n <span data-part=\"mean\" data-part-mean=\"\" aria-hidden=\"true\"\n ><span data-part=\"mean-label\" data-part-mean-label=\"\">{{ averageText() }}</span></span\n >\n }\n </div>\n <div data-part=\"axis\" data-part-axis=\"\" aria-hidden=\"true\">\n @for (level of lowestFirst(); track level.level) {\n <span data-part=\"tick\" data-part-tick=\"\"\n ><ng-container\n *ngTemplateOutlet=\"levelLabel; context: { $implicit: level.level }\"\n /><span data-part=\"tick-share\" data-part-tick-share=\"\">{{\n level.shareText\n }}</span></span\n >\n }\n </div>\n </div>\n @if (summary().total > 0) {\n <p data-part=\"sentiment\" data-part-sentiment=\"\">\n @for (bucket of buckets(); track bucket.key) {\n <span data-part=\"bucket\" data-part-bucket=\"\" [attr.data-tone]=\"bucket.tone\"\n ><span data-part=\"swatch\" data-part-swatch=\"\" aria-hidden=\"true\"></span\n >{{ bucket.before }}<strong>{{ bucket.share }}</strong\n >{{ bucket.after }}</span\n >\n }\n </p>\n }\n }`,\n styleUrl: '../../../styles/src/rating/rating.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'rating',\n 'data-ui-rating': '',\n 'data-part': 'root',\n 'data-part-root': '',\n '[attr.data-variant]': \"resolvedVariant() === 'bars' ? 'summary' : 'spectrum'\",\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-tone]': 'resolvedTone()',\n '[style.--slotted-rating-mean]': 'meanProperties()?.mean ?? null',\n '[style.--slotted-rating-low]': 'meanProperties()?.low ?? null',\n '[style.--slotted-rating-high]': 'meanProperties()?.high ?? null',\n },\n})\nexport class SlRatingSummary {\n /** How many readings each level holds, lowest level first — the order a store keeps them in. */\n readonly counts = input.required<readonly number[]>();\n /** How many levels the scale has. A level missing from `counts` holds none; one past it is dropped. */\n readonly max = input<number | undefined>(undefined);\n readonly variant = input<RatingSummaryVariant>('bars');\n /** Each level becomes a toggle button, and the pressed ones are `selectedLevels`. */\n readonly filterable = input(false, { transform: booleanAttribute });\n /** The levels pressed, ascending. Two-way; every move is asked first through `selectedLevelsChangeRequest`. */\n readonly selectedLevels = model<readonly number[]>([]);\n /** Merged over the application's thresholds, key by key. */\n readonly insightThresholds = input<Partial<RatingInsightThresholds> | undefined>(undefined);\n readonly showInsight = input(true, { transform: booleanAttribute });\n readonly size = input<RatingSize | undefined>(undefined);\n readonly tone = input<RatingTone | undefined>(undefined);\n /** Words laid over the catalog of the language in force, key by key. */\n readonly messages = input<PartialMessages<RatingMessages> | undefined>(undefined);\n /** The locale numbers are written in. Unstated, the language in force. */\n readonly locale = input<string | undefined>(undefined);\n\n /**\n * Emitted before the selection moves, with the levels asked for, the ones\n * they replace, the reason and the event. `cancel()` keeps the selection.\n */\n readonly selectedLevelsChangeRequest = output<ChangeRequest<readonly number[]>>();\n\n private readonly defaults = injectRatingDefaults();\n private readonly appLocale = injectLocale();\n /** The family's words in the language in force, with this summary's `messages` laid over them. */\n readonly t = injectMessages(ratingMessages, this.messages);\n\n readonly resolvedMax = computed(() => Math.max(1, Math.round(this.max() ?? this.defaults.max)));\n readonly resolvedVariant = computed(() => this.variant());\n readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n readonly resolvedTone = computed(() => this.tone() ?? this.defaults.tone);\n protected readonly resolvedLocale = computed(() => this.locale() ?? this.appLocale());\n private readonly thresholds = computed<RatingInsightThresholds>(() => ({\n ...this.defaults.insightThresholds,\n ...this.insightThresholds(),\n }));\n\n /** Everything drawn is read from here: `summariseRatings` over the counts on the scale. */\n readonly summary = computed(() => {\n const counts = this.counts();\n const levels = Array.from({ length: this.resolvedMax() }, (_, index) => counts[index] ?? 0);\n return summariseRatings(levels, this.thresholds());\n });\n\n protected readonly lowestFirst = computed<SummaryLevel[]>(() => {\n const { levels, total } = this.summary();\n const locale = this.resolvedLocale();\n const pressed = this.selectedLevels();\n const largest = Math.max(0, ...levels.map((level) => level.count));\n return [...levels].reverse().map(({ level, count, share }) => {\n const shareText = formatShare(share, locale);\n const countText = formatCount(count, locale);\n return {\n level,\n count,\n countText,\n share: cssNumber(total === 0 ? 0 : share, 4),\n peak: cssNumber(largest === 0 ? 0 : count / largest, 4),\n shareText,\n label: this.t('levelLabel', { level, count, share: shareText }),\n pressed: pressed.includes(level),\n };\n });\n });\n\n protected readonly highestFirst = computed(() => [...this.lowestFirst()].reverse());\n\n protected readonly averageText = computed(() => {\n const average = this.summary().average;\n return average === null ? '' : formatRating(average, this.resolvedLocale());\n });\n\n protected readonly scaleText = computed(() => this.t('scale', { max: this.resolvedMax() }));\n\n protected readonly countText = computed(() => {\n const { total, margin, interval } = this.summary();\n const locale = this.resolvedLocale();\n if (total === 0) return this.t('summaryEmpty');\n if (this.resolvedVariant() === 'bars') return this.t('summaryCount', { count: total });\n if (margin !== null && interval !== null && margin >= this.thresholds().margin) {\n return this.t('spectrumUncertain', {\n count: total,\n low: formatRating(interval[0], locale),\n high: formatRating(interval[1], locale),\n });\n }\n /* Two places, written here: the core writes a number to one place, and a\n margin of 0,04 would read as nought. */\n const written = new Intl.NumberFormat(locale, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(margin ?? 0);\n return this.t('spectrumCount', { count: total, margin: written });\n });\n\n protected readonly insight = computed(() => {\n const insight = this.summary().insight;\n /* The conclusion is read from the spread, which only the spectrum draws. */\n if (this.resolvedVariant() !== 'spectrum' || !this.showInsight() || insight === null) {\n return null;\n }\n return { tone: INSIGHT_TONE[insight], text: this.t(insight) };\n });\n\n protected readonly buckets = computed<SummaryBucket[]>(() => {\n const { buckets } = this.summary();\n const locale = this.resolvedLocale();\n const tones = { positive: 'success', neutral: 'secondary', negative: 'danger' } as const;\n return (['positive', 'neutral', 'negative'] as const).map((key) => {\n const [before = '', after = ''] = this.t(key, { share: SHARE_MARK }).split(SHARE_MARK);\n return { key, tone: tones[key], before, share: formatShare(buckets[key], locale), after };\n });\n });\n\n protected readonly meanProperties = computed(() => {\n const { mean, interval } = this.summary();\n if (this.resolvedVariant() !== 'spectrum' || mean === null || interval === null) return null;\n return {\n mean: cssNumber(mean, 3),\n low: cssNumber(interval[0], 3),\n high: cssNumber(interval[1], 3),\n };\n });\n\n protected toggle(level: number, event: MouseEvent) {\n const held = this.selectedLevels();\n const next = held.includes(level)\n ? held.filter((candidate) => candidate !== level)\n : [...held, level].sort((a, b) => a - b);\n const state = createControllable<readonly number[]>({\n initial: held,\n /* Two fresh arrays are never the same object; the toggle always changes membership. */\n equals: () => false,\n onRequest: (request) => this.selectedLevelsChangeRequest.emit(request),\n });\n if (!state.request(next, event.detail === 0 ? 'keyboard' : 'pointer', event)) return;\n this.selectedLevels.set(next);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|