@slotted/angular 0.0.0-stage → 0.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +51 -2
- package/docs/AGENTS.snippet.md +10 -0
- package/docs/accordion.json +345 -0
- package/docs/accordion.md +207 -0
- package/docs/action-bar.json +421 -0
- package/docs/action-bar.md +364 -0
- package/docs/action-sheet.json +210 -0
- package/docs/action-sheet.md +19 -0
- package/docs/alert.json +407 -0
- package/docs/alert.md +239 -0
- package/docs/app-shell.examples.md +349 -0
- package/docs/app-shell.json +835 -0
- package/docs/app-shell.md +214 -0
- package/docs/aspect-ratio.json +159 -0
- package/docs/aspect-ratio.md +134 -0
- package/docs/attachment.json +486 -0
- package/docs/attachment.md +253 -0
- package/docs/avatar-group.json +208 -0
- package/docs/avatar-group.md +130 -0
- package/docs/avatar.json +342 -0
- package/docs/avatar.md +142 -0
- package/docs/badge.json +334 -0
- package/docs/badge.md +138 -0
- package/docs/breadcrumb.json +368 -0
- package/docs/breadcrumb.md +237 -0
- package/docs/button-group.json +158 -0
- package/docs/button-group.md +72 -0
- package/docs/button.examples.md +621 -0
- package/docs/button.json +977 -0
- package/docs/button.md +200 -0
- package/docs/calendar.json +592 -0
- package/docs/calendar.md +242 -0
- package/docs/card.json +283 -0
- package/docs/card.md +130 -0
- package/docs/carousel.json +560 -0
- package/docs/carousel.md +357 -0
- package/docs/cascader.json +933 -0
- package/docs/cascader.md +379 -0
- package/docs/chart.examples.md +582 -0
- package/docs/chart.json +1359 -0
- package/docs/chart.md +187 -0
- package/docs/checkbox-group.examples.md +612 -0
- package/docs/checkbox-group.json +395 -0
- package/docs/checkbox-group.md +106 -0
- package/docs/checkbox.examples.md +546 -0
- package/docs/checkbox.json +506 -0
- package/docs/checkbox.md +104 -0
- package/docs/code-block.json +616 -0
- package/docs/code-block.md +303 -0
- package/docs/collapsible.json +456 -0
- package/docs/collapsible.md +261 -0
- package/docs/color-picker.json +523 -0
- package/docs/color-picker.md +201 -0
- package/docs/column-manager.json +486 -0
- package/docs/column-manager.md +277 -0
- package/docs/combobox.examples.md +1732 -0
- package/docs/combobox.json +1250 -0
- package/docs/combobox.md +209 -0
- package/docs/command-palette.json +800 -0
- package/docs/command-palette.md +419 -0
- package/docs/container.json +156 -0
- package/docs/container.md +92 -0
- package/docs/context-menu.json +231 -0
- package/docs/context-menu.md +176 -0
- package/docs/currency-field.examples.md +321 -0
- package/docs/currency-field.json +649 -0
- package/docs/currency-field.md +128 -0
- package/docs/dashboard-grid.json +680 -0
- package/docs/dashboard-grid.md +265 -0
- package/docs/data-grid.examples.md +3064 -0
- package/docs/data-grid.json +1577 -0
- package/docs/data-grid.md +237 -0
- package/docs/data-grid.props.md +81 -0
- package/docs/data-list.json +685 -0
- package/docs/data-list.md +327 -0
- package/docs/date-field.json +490 -0
- package/docs/date-field.md +235 -0
- package/docs/date-picker.examples.md +1226 -0
- package/docs/date-picker.json +696 -0
- package/docs/date-picker.md +121 -0
- package/docs/date-range-picker.examples.md +1300 -0
- package/docs/date-range-picker.json +903 -0
- package/docs/date-range-picker.md +142 -0
- package/docs/datetime-field.json +665 -0
- package/docs/datetime-field.md +337 -0
- package/docs/datetime-picker.examples.md +1269 -0
- package/docs/datetime-picker.json +928 -0
- package/docs/datetime-picker.md +150 -0
- package/docs/datetime-range-picker.examples.md +225 -0
- package/docs/datetime-range-picker.json +1015 -0
- package/docs/datetime-range-picker.md +162 -0
- package/docs/description-list.json +471 -0
- package/docs/description-list.md +268 -0
- package/docs/detail-panel.json +530 -0
- package/docs/detail-panel.md +361 -0
- package/docs/dialog.examples.md +2467 -0
- package/docs/dialog.json +1141 -0
- package/docs/dialog.md +217 -0
- package/docs/dialog.props.md +63 -0
- package/docs/divider.json +148 -0
- package/docs/divider.md +83 -0
- package/docs/drawer.examples.md +1929 -0
- package/docs/drawer.json +753 -0
- package/docs/drawer.md +199 -0
- package/docs/entity-picker.json +946 -0
- package/docs/entity-picker.md +365 -0
- package/docs/event-calendar.examples.md +308 -0
- package/docs/event-calendar.json +1202 -0
- package/docs/event-calendar.md +201 -0
- package/docs/field-group.json +333 -0
- package/docs/field-group.md +181 -0
- package/docs/field.examples.md +676 -0
- package/docs/field.json +528 -0
- package/docs/field.md +127 -0
- package/docs/filter-bar.json +817 -0
- package/docs/filter-bar.md +380 -0
- package/docs/form.json +378 -0
- package/docs/form.md +235 -0
- package/docs/fullscreen.json +395 -0
- package/docs/fullscreen.md +225 -0
- package/docs/grid.json +176 -0
- package/docs/grid.md +74 -0
- package/docs/highlight.json +279 -0
- package/docs/highlight.md +210 -0
- package/docs/hover-card.json +254 -0
- package/docs/hover-card.md +213 -0
- package/docs/icon.json +173 -0
- package/docs/icon.md +101 -0
- package/docs/image.json +476 -0
- package/docs/image.md +254 -0
- package/docs/import-export-center.json +836 -0
- package/docs/import-export-center.md +345 -0
- package/docs/index.md +141 -0
- package/docs/inline-message.json +312 -0
- package/docs/inline-message.md +191 -0
- package/docs/inline.json +149 -0
- package/docs/inline.md +72 -0
- package/docs/kbd.json +350 -0
- package/docs/kbd.md +210 -0
- package/docs/link.json +264 -0
- package/docs/link.md +167 -0
- package/docs/list-item.json +463 -0
- package/docs/list-item.md +236 -0
- package/docs/list.json +321 -0
- package/docs/list.md +185 -0
- package/docs/listbox.json +807 -0
- package/docs/listbox.md +413 -0
- package/docs/loading-overlay.json +440 -0
- package/docs/loading-overlay.md +248 -0
- package/docs/markdown.json +461 -0
- package/docs/markdown.md +266 -0
- package/docs/menu.examples.md +1651 -0
- package/docs/menu.json +922 -0
- package/docs/menu.md +155 -0
- package/docs/menubar.json +292 -0
- package/docs/menubar.md +173 -0
- package/docs/message-scroller.json +401 -0
- package/docs/message-scroller.md +212 -0
- package/docs/message.json +862 -0
- package/docs/message.md +473 -0
- package/docs/multi-select.examples.md +1922 -0
- package/docs/multi-select.json +1314 -0
- package/docs/multi-select.md +213 -0
- package/docs/navigation-menu.json +529 -0
- package/docs/navigation-menu.md +329 -0
- package/docs/notification-center.json +664 -0
- package/docs/notification-center.md +372 -0
- package/docs/number-field.examples.md +1078 -0
- package/docs/number-field.json +668 -0
- package/docs/number-field.md +137 -0
- package/docs/otp-input.json +479 -0
- package/docs/otp-input.md +291 -0
- package/docs/page-header.json +574 -0
- package/docs/page-header.md +338 -0
- package/docs/page.json +332 -0
- package/docs/page.md +184 -0
- package/docs/pagination.json +434 -0
- package/docs/pagination.md +238 -0
- package/docs/popover.examples.md +1235 -0
- package/docs/popover.json +656 -0
- package/docs/popover.md +199 -0
- package/docs/progress-indicator.json +501 -0
- package/docs/progress-indicator.md +329 -0
- package/docs/prompt-composer.json +498 -0
- package/docs/prompt-composer.md +278 -0
- package/docs/prose.json +357 -0
- package/docs/prose.md +226 -0
- package/docs/radio-group.examples.md +626 -0
- package/docs/radio-group.json +541 -0
- package/docs/radio-group.md +112 -0
- package/docs/rating.json +1053 -0
- package/docs/rating.md +435 -0
- package/docs/result-state.json +376 -0
- package/docs/result-state.md +286 -0
- package/docs/saved-views.json +384 -0
- package/docs/saved-views.md +242 -0
- package/docs/scroll-area.json +120 -0
- package/docs/scroll-area.md +8 -0
- package/docs/section.json +344 -0
- package/docs/section.md +208 -0
- package/docs/segmented-control.json +429 -0
- package/docs/segmented-control.md +240 -0
- package/docs/select.examples.md +1214 -0
- package/docs/select.json +1147 -0
- package/docs/select.md +199 -0
- package/docs/side-navigation.json +632 -0
- package/docs/side-navigation.md +430 -0
- package/docs/skeleton.json +358 -0
- package/docs/skeleton.md +223 -0
- package/docs/slider.json +522 -0
- package/docs/slider.md +261 -0
- package/docs/sparkline.json +426 -0
- package/docs/sparkline.md +206 -0
- package/docs/split-button.json +361 -0
- package/docs/split-button.md +275 -0
- package/docs/splitter.json +142 -0
- package/docs/splitter.md +14 -0
- package/docs/stack.json +135 -0
- package/docs/stack.md +74 -0
- package/docs/stat-card.json +529 -0
- package/docs/stat-card.md +270 -0
- package/docs/status-indicator.json +314 -0
- package/docs/status-indicator.md +197 -0
- package/docs/stepper.json +451 -0
- package/docs/stepper.md +250 -0
- package/docs/switch.json +451 -0
- package/docs/switch.md +508 -0
- package/docs/table-of-contents.json +553 -0
- package/docs/table-of-contents.md +289 -0
- package/docs/table.examples.md +1981 -0
- package/docs/table.json +1059 -0
- package/docs/table.md +290 -0
- package/docs/tabs.examples.md +1370 -0
- package/docs/tabs.json +661 -0
- package/docs/tabs.md +211 -0
- package/docs/tag.json +813 -0
- package/docs/tag.md +241 -0
- package/docs/tags-input.json +771 -0
- package/docs/tags-input.md +361 -0
- package/docs/text-field.examples.md +821 -0
- package/docs/text-field.json +604 -0
- package/docs/text-field.md +125 -0
- package/docs/textarea.examples.md +612 -0
- package/docs/textarea.json +440 -0
- package/docs/textarea.md +98 -0
- package/docs/time-field.json +584 -0
- package/docs/time-field.md +291 -0
- package/docs/time-picker.json +679 -0
- package/docs/time-picker.md +315 -0
- package/docs/time-range-picker.examples.md +191 -0
- package/docs/time-range-picker.json +924 -0
- package/docs/time-range-picker.md +152 -0
- package/docs/timeline.json +839 -0
- package/docs/timeline.md +401 -0
- package/docs/toast.json +642 -0
- package/docs/toast.md +311 -0
- package/docs/toggle-group.json +417 -0
- package/docs/toggle-group.md +255 -0
- package/docs/toggle.json +326 -0
- package/docs/toggle.md +222 -0
- package/docs/toolbar.json +380 -0
- package/docs/toolbar.md +240 -0
- package/docs/tooltip.examples.md +664 -0
- package/docs/tooltip.json +604 -0
- package/docs/tooltip.md +146 -0
- package/docs/top-navigation.examples.md +287 -0
- package/docs/top-navigation.json +648 -0
- package/docs/top-navigation.md +138 -0
- package/docs/tour.json +759 -0
- package/docs/tour.md +337 -0
- package/docs/transfer.json +746 -0
- package/docs/transfer.md +273 -0
- package/docs/tree.json +918 -0
- package/docs/tree.md +397 -0
- package/docs/typography.json +317 -0
- package/docs/typography.md +107 -0
- package/docs/upload.examples.md +358 -0
- package/docs/upload.json +1103 -0
- package/docs/upload.md +166 -0
- package/docs/visually-hidden.json +71 -0
- package/docs/visually-hidden.md +42 -0
- package/docs/wizard.json +724 -0
- package/docs/wizard.md +295 -0
- package/fesm2022/slotted-angular-accordion.mjs +247 -0
- package/fesm2022/slotted-angular-accordion.mjs.map +1 -0
- package/fesm2022/slotted-angular-action-bar.mjs +639 -0
- package/fesm2022/slotted-angular-action-bar.mjs.map +1 -0
- package/fesm2022/slotted-angular-action-sheet.mjs +749 -0
- package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -0
- package/fesm2022/slotted-angular-alert.mjs +427 -0
- package/fesm2022/slotted-angular-alert.mjs.map +1 -0
- package/fesm2022/slotted-angular-app-shell.mjs +1334 -0
- package/fesm2022/slotted-angular-app-shell.mjs.map +1 -0
- package/fesm2022/slotted-angular-aspect-ratio.mjs +63 -0
- package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -0
- package/fesm2022/slotted-angular-attachment.mjs +595 -0
- package/fesm2022/slotted-angular-attachment.mjs.map +1 -0
- package/fesm2022/slotted-angular-avatar-group.mjs +230 -0
- package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-avatar.mjs +330 -0
- package/fesm2022/slotted-angular-avatar.mjs.map +1 -0
- package/fesm2022/slotted-angular-badge.mjs +255 -0
- package/fesm2022/slotted-angular-badge.mjs.map +1 -0
- package/fesm2022/slotted-angular-breadcrumb.mjs +544 -0
- package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -0
- package/fesm2022/slotted-angular-button-group.mjs +146 -0
- package/fesm2022/slotted-angular-button-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-button.mjs +692 -0
- package/fesm2022/slotted-angular-button.mjs.map +1 -0
- package/fesm2022/slotted-angular-calendar.mjs +916 -0
- package/fesm2022/slotted-angular-calendar.mjs.map +1 -0
- package/fesm2022/slotted-angular-card.mjs +225 -0
- package/fesm2022/slotted-angular-card.mjs.map +1 -0
- package/fesm2022/slotted-angular-carousel.mjs +840 -0
- package/fesm2022/slotted-angular-carousel.mjs.map +1 -0
- package/fesm2022/slotted-angular-cascader.mjs +1839 -0
- package/fesm2022/slotted-angular-cascader.mjs.map +1 -0
- package/fesm2022/slotted-angular-chart.mjs +974 -0
- package/fesm2022/slotted-angular-chart.mjs.map +1 -0
- package/fesm2022/slotted-angular-checkbox-group.mjs +283 -0
- package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-checkbox.mjs +468 -0
- package/fesm2022/slotted-angular-checkbox.mjs.map +1 -0
- package/fesm2022/slotted-angular-code-block.mjs +476 -0
- package/fesm2022/slotted-angular-code-block.mjs.map +1 -0
- package/fesm2022/slotted-angular-collapsible.mjs +479 -0
- package/fesm2022/slotted-angular-collapsible.mjs.map +1 -0
- package/fesm2022/slotted-angular-color-picker.mjs +910 -0
- package/fesm2022/slotted-angular-color-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-column-manager.mjs +1037 -0
- package/fesm2022/slotted-angular-column-manager.mjs.map +1 -0
- package/fesm2022/slotted-angular-combobox.mjs +1480 -0
- package/fesm2022/slotted-angular-combobox.mjs.map +1 -0
- package/fesm2022/slotted-angular-command-palette.mjs +1283 -0
- package/fesm2022/slotted-angular-command-palette.mjs.map +1 -0
- package/fesm2022/slotted-angular-container.mjs +105 -0
- package/fesm2022/slotted-angular-container.mjs.map +1 -0
- package/fesm2022/slotted-angular-context-menu.mjs +221 -0
- package/fesm2022/slotted-angular-context-menu.mjs.map +1 -0
- package/fesm2022/slotted-angular-currency-field.mjs +1131 -0
- package/fesm2022/slotted-angular-currency-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-dashboard-grid.mjs +1928 -0
- package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -0
- package/fesm2022/slotted-angular-data-grid.mjs +6697 -0
- package/fesm2022/slotted-angular-data-grid.mjs.map +1 -0
- package/fesm2022/slotted-angular-data-list.mjs +1418 -0
- package/fesm2022/slotted-angular-data-list.mjs.map +1 -0
- package/fesm2022/slotted-angular-date-field.mjs +772 -0
- package/fesm2022/slotted-angular-date-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-date-picker.mjs +690 -0
- package/fesm2022/slotted-angular-date-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-date-range-picker.mjs +1150 -0
- package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-datetime-field.mjs +1058 -0
- package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-datetime-picker.mjs +1362 -0
- package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-datetime-range-picker.mjs +1872 -0
- package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-description-list.mjs +545 -0
- package/fesm2022/slotted-angular-description-list.mjs.map +1 -0
- package/fesm2022/slotted-angular-detail-panel.mjs +754 -0
- package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -0
- package/fesm2022/slotted-angular-dialog.mjs +980 -0
- package/fesm2022/slotted-angular-dialog.mjs.map +1 -0
- package/fesm2022/slotted-angular-divider.mjs +76 -0
- package/fesm2022/slotted-angular-divider.mjs.map +1 -0
- package/fesm2022/slotted-angular-drawer.mjs +1397 -0
- package/fesm2022/slotted-angular-drawer.mjs.map +1 -0
- package/fesm2022/slotted-angular-entity-picker.mjs +1987 -0
- package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-event-calendar.mjs +2934 -0
- package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -0
- package/fesm2022/slotted-angular-field-group.mjs +301 -0
- package/fesm2022/slotted-angular-field-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-field.mjs +928 -0
- package/fesm2022/slotted-angular-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-filter-bar.mjs +3107 -0
- package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -0
- package/fesm2022/slotted-angular-form.mjs +592 -0
- package/fesm2022/slotted-angular-form.mjs.map +1 -0
- package/fesm2022/slotted-angular-fullscreen.mjs +314 -0
- package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -0
- package/fesm2022/slotted-angular-grid.mjs +58 -0
- package/fesm2022/slotted-angular-grid.mjs.map +1 -0
- package/fesm2022/slotted-angular-highlight.mjs +123 -0
- package/fesm2022/slotted-angular-highlight.mjs.map +1 -0
- package/fesm2022/slotted-angular-hover-card.mjs +326 -0
- package/fesm2022/slotted-angular-hover-card.mjs.map +1 -0
- package/fesm2022/slotted-angular-i18n.mjs +75 -0
- package/fesm2022/slotted-angular-i18n.mjs.map +1 -0
- package/fesm2022/slotted-angular-icon.mjs +232 -0
- package/fesm2022/slotted-angular-icon.mjs.map +1 -0
- package/fesm2022/slotted-angular-image.mjs +442 -0
- package/fesm2022/slotted-angular-image.mjs.map +1 -0
- package/fesm2022/slotted-angular-import-export-center.mjs +1792 -0
- package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -0
- package/fesm2022/slotted-angular-inline-message.mjs +280 -0
- package/fesm2022/slotted-angular-inline-message.mjs.map +1 -0
- package/fesm2022/slotted-angular-inline.mjs +52 -0
- package/fesm2022/slotted-angular-inline.mjs.map +1 -0
- package/fesm2022/slotted-angular-kbd.mjs +284 -0
- package/fesm2022/slotted-angular-kbd.mjs.map +1 -0
- package/fesm2022/slotted-angular-link.mjs +182 -0
- package/fesm2022/slotted-angular-link.mjs.map +1 -0
- package/fesm2022/slotted-angular-list-item.mjs +367 -0
- package/fesm2022/slotted-angular-list-item.mjs.map +1 -0
- package/fesm2022/slotted-angular-list.mjs +256 -0
- package/fesm2022/slotted-angular-list.mjs.map +1 -0
- package/fesm2022/slotted-angular-listbox.mjs +1274 -0
- package/fesm2022/slotted-angular-listbox.mjs.map +1 -0
- package/fesm2022/slotted-angular-loading-overlay.mjs +451 -0
- package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -0
- package/fesm2022/slotted-angular-markdown.mjs +914 -0
- package/fesm2022/slotted-angular-markdown.mjs.map +1 -0
- package/fesm2022/slotted-angular-menu.mjs +1211 -0
- package/fesm2022/slotted-angular-menu.mjs.map +1 -0
- package/fesm2022/slotted-angular-menubar.mjs +230 -0
- package/fesm2022/slotted-angular-menubar.mjs.map +1 -0
- package/fesm2022/slotted-angular-message-scroller.mjs +378 -0
- package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -0
- package/fesm2022/slotted-angular-message.mjs +866 -0
- package/fesm2022/slotted-angular-message.mjs.map +1 -0
- package/fesm2022/slotted-angular-multi-select.mjs +1939 -0
- package/fesm2022/slotted-angular-multi-select.mjs.map +1 -0
- package/fesm2022/slotted-angular-navigation-menu.mjs +770 -0
- package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -0
- package/fesm2022/slotted-angular-notification-center.mjs +1172 -0
- package/fesm2022/slotted-angular-notification-center.mjs.map +1 -0
- package/fesm2022/slotted-angular-number-field.mjs +966 -0
- package/fesm2022/slotted-angular-number-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-otp-input.mjs +629 -0
- package/fesm2022/slotted-angular-otp-input.mjs.map +1 -0
- package/fesm2022/slotted-angular-page-header.mjs +788 -0
- package/fesm2022/slotted-angular-page-header.mjs.map +1 -0
- package/fesm2022/slotted-angular-page.mjs +255 -0
- package/fesm2022/slotted-angular-page.mjs.map +1 -0
- package/fesm2022/slotted-angular-pagination.mjs +562 -0
- package/fesm2022/slotted-angular-pagination.mjs.map +1 -0
- package/fesm2022/slotted-angular-popover.mjs +799 -0
- package/fesm2022/slotted-angular-popover.mjs.map +1 -0
- package/fesm2022/slotted-angular-progress-indicator.mjs +572 -0
- package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -0
- package/fesm2022/slotted-angular-prompt-composer.mjs +596 -0
- package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -0
- package/fesm2022/slotted-angular-prose.mjs +314 -0
- package/fesm2022/slotted-angular-prose.mjs.map +1 -0
- package/fesm2022/slotted-angular-radio-group.mjs +469 -0
- package/fesm2022/slotted-angular-radio-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-rating.mjs +1174 -0
- package/fesm2022/slotted-angular-rating.mjs.map +1 -0
- package/fesm2022/slotted-angular-result-state.mjs +330 -0
- package/fesm2022/slotted-angular-result-state.mjs.map +1 -0
- package/fesm2022/slotted-angular-saved-views.mjs +877 -0
- package/fesm2022/slotted-angular-saved-views.mjs.map +1 -0
- package/fesm2022/slotted-angular-scroll-area.mjs +294 -0
- package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -0
- package/fesm2022/slotted-angular-section.mjs +266 -0
- package/fesm2022/slotted-angular-section.mjs.map +1 -0
- package/fesm2022/slotted-angular-segmented-control.mjs +454 -0
- package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -0
- package/fesm2022/slotted-angular-select.mjs +1899 -0
- package/fesm2022/slotted-angular-select.mjs.map +1 -0
- package/fesm2022/slotted-angular-side-navigation.mjs +1042 -0
- package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -0
- package/fesm2022/slotted-angular-skeleton.mjs +316 -0
- package/fesm2022/slotted-angular-skeleton.mjs.map +1 -0
- package/fesm2022/slotted-angular-slider.mjs +586 -0
- package/fesm2022/slotted-angular-slider.mjs.map +1 -0
- package/fesm2022/slotted-angular-sparkline.mjs +235 -0
- package/fesm2022/slotted-angular-sparkline.mjs.map +1 -0
- package/fesm2022/slotted-angular-split-button.mjs +331 -0
- package/fesm2022/slotted-angular-split-button.mjs.map +1 -0
- package/fesm2022/slotted-angular-splitter.mjs +516 -0
- package/fesm2022/slotted-angular-splitter.mjs.map +1 -0
- package/fesm2022/slotted-angular-stack.mjs +48 -0
- package/fesm2022/slotted-angular-stack.mjs.map +1 -0
- package/fesm2022/slotted-angular-stat-card.mjs +478 -0
- package/fesm2022/slotted-angular-stat-card.mjs.map +1 -0
- package/fesm2022/slotted-angular-status-indicator.mjs +155 -0
- package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -0
- package/fesm2022/slotted-angular-stepper.mjs +536 -0
- package/fesm2022/slotted-angular-stepper.mjs.map +1 -0
- package/fesm2022/slotted-angular-switch.mjs +447 -0
- package/fesm2022/slotted-angular-switch.mjs.map +1 -0
- package/fesm2022/slotted-angular-table-of-contents.mjs +750 -0
- package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -0
- package/fesm2022/slotted-angular-table.mjs +2518 -0
- package/fesm2022/slotted-angular-table.mjs.map +1 -0
- package/fesm2022/slotted-angular-tabs.mjs +829 -0
- package/fesm2022/slotted-angular-tabs.mjs.map +1 -0
- package/fesm2022/slotted-angular-tag.mjs +595 -0
- package/fesm2022/slotted-angular-tag.mjs.map +1 -0
- package/fesm2022/slotted-angular-tags-input.mjs +1211 -0
- package/fesm2022/slotted-angular-tags-input.mjs.map +1 -0
- package/fesm2022/slotted-angular-text-field.mjs +674 -0
- package/fesm2022/slotted-angular-text-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-textarea.mjs +275 -0
- package/fesm2022/slotted-angular-textarea.mjs.map +1 -0
- package/fesm2022/slotted-angular-theme.mjs +45 -0
- package/fesm2022/slotted-angular-theme.mjs.map +1 -0
- package/fesm2022/slotted-angular-time-field.mjs +895 -0
- package/fesm2022/slotted-angular-time-field.mjs.map +1 -0
- package/fesm2022/slotted-angular-time-picker.mjs +856 -0
- package/fesm2022/slotted-angular-time-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-time-range-picker.mjs +1534 -0
- package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -0
- package/fesm2022/slotted-angular-timeline.mjs +928 -0
- package/fesm2022/slotted-angular-timeline.mjs.map +1 -0
- package/fesm2022/slotted-angular-toast.mjs +917 -0
- package/fesm2022/slotted-angular-toast.mjs.map +1 -0
- package/fesm2022/slotted-angular-toggle-group.mjs +311 -0
- package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -0
- package/fesm2022/slotted-angular-toggle.mjs +162 -0
- package/fesm2022/slotted-angular-toggle.mjs.map +1 -0
- package/fesm2022/slotted-angular-toolbar.mjs +536 -0
- package/fesm2022/slotted-angular-toolbar.mjs.map +1 -0
- package/fesm2022/slotted-angular-tooltip.mjs +798 -0
- package/fesm2022/slotted-angular-tooltip.mjs.map +1 -0
- package/fesm2022/slotted-angular-top-navigation.mjs +1308 -0
- package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -0
- package/fesm2022/slotted-angular-tour.mjs +1330 -0
- package/fesm2022/slotted-angular-tour.mjs.map +1 -0
- package/fesm2022/slotted-angular-transfer.mjs +1406 -0
- package/fesm2022/slotted-angular-transfer.mjs.map +1 -0
- package/fesm2022/slotted-angular-tree.mjs +1448 -0
- package/fesm2022/slotted-angular-tree.mjs.map +1 -0
- package/fesm2022/slotted-angular-typography.mjs +184 -0
- package/fesm2022/slotted-angular-typography.mjs.map +1 -0
- package/fesm2022/slotted-angular-upload.mjs +1523 -0
- package/fesm2022/slotted-angular-upload.mjs.map +1 -0
- package/fesm2022/slotted-angular-visually-hidden.mjs +32 -0
- package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -0
- package/fesm2022/slotted-angular-wizard.mjs +1715 -0
- package/fesm2022/slotted-angular-wizard.mjs.map +1 -0
- package/fesm2022/slotted-angular.mjs +4 -0
- package/fesm2022/slotted-angular.mjs.map +1 -0
- package/package.json +537 -3
- package/types/slotted-angular-accordion.d.ts +156 -0
- package/types/slotted-angular-accordion.d.ts.map +1 -0
- package/types/slotted-angular-action-bar.d.ts +291 -0
- package/types/slotted-angular-action-bar.d.ts.map +1 -0
- package/types/slotted-angular-action-sheet.d.ts +294 -0
- package/types/slotted-angular-action-sheet.d.ts.map +1 -0
- package/types/slotted-angular-alert.d.ts +214 -0
- package/types/slotted-angular-alert.d.ts.map +1 -0
- package/types/slotted-angular-app-shell.d.ts +549 -0
- package/types/slotted-angular-app-shell.d.ts.map +1 -0
- package/types/slotted-angular-aspect-ratio.d.ts +57 -0
- package/types/slotted-angular-aspect-ratio.d.ts.map +1 -0
- package/types/slotted-angular-attachment.d.ts +294 -0
- package/types/slotted-angular-attachment.d.ts.map +1 -0
- package/types/slotted-angular-avatar-group.d.ts +119 -0
- package/types/slotted-angular-avatar-group.d.ts.map +1 -0
- package/types/slotted-angular-avatar.d.ts +202 -0
- package/types/slotted-angular-avatar.d.ts.map +1 -0
- package/types/slotted-angular-badge.d.ts +166 -0
- package/types/slotted-angular-badge.d.ts.map +1 -0
- package/types/slotted-angular-breadcrumb.d.ts +251 -0
- package/types/slotted-angular-breadcrumb.d.ts.map +1 -0
- package/types/slotted-angular-button-group.d.ts +89 -0
- package/types/slotted-angular-button-group.d.ts.map +1 -0
- package/types/slotted-angular-button.d.ts +390 -0
- package/types/slotted-angular-button.d.ts.map +1 -0
- package/types/slotted-angular-calendar.d.ts +280 -0
- package/types/slotted-angular-calendar.d.ts.map +1 -0
- package/types/slotted-angular-card.d.ts +140 -0
- package/types/slotted-angular-card.d.ts.map +1 -0
- package/types/slotted-angular-carousel.d.ts +288 -0
- package/types/slotted-angular-carousel.d.ts.map +1 -0
- package/types/slotted-angular-cascader.d.ts +351 -0
- package/types/slotted-angular-cascader.d.ts.map +1 -0
- package/types/slotted-angular-chart.d.ts +319 -0
- package/types/slotted-angular-chart.d.ts.map +1 -0
- package/types/slotted-angular-checkbox-group.d.ts +156 -0
- package/types/slotted-angular-checkbox-group.d.ts.map +1 -0
- package/types/slotted-angular-checkbox.d.ts +197 -0
- package/types/slotted-angular-checkbox.d.ts.map +1 -0
- package/types/slotted-angular-code-block.d.ts +158 -0
- package/types/slotted-angular-code-block.d.ts.map +1 -0
- package/types/slotted-angular-collapsible.d.ts +272 -0
- package/types/slotted-angular-collapsible.d.ts.map +1 -0
- package/types/slotted-angular-color-picker.d.ts +181 -0
- package/types/slotted-angular-color-picker.d.ts.map +1 -0
- package/types/slotted-angular-column-manager.d.ts +200 -0
- package/types/slotted-angular-column-manager.d.ts.map +1 -0
- package/types/slotted-angular-combobox.d.ts +449 -0
- package/types/slotted-angular-combobox.d.ts.map +1 -0
- package/types/slotted-angular-command-palette.d.ts +256 -0
- package/types/slotted-angular-command-palette.d.ts.map +1 -0
- package/types/slotted-angular-container.d.ts +84 -0
- package/types/slotted-angular-container.d.ts.map +1 -0
- package/types/slotted-angular-context-menu.d.ts +84 -0
- package/types/slotted-angular-context-menu.d.ts.map +1 -0
- package/types/slotted-angular-currency-field.d.ts +480 -0
- package/types/slotted-angular-currency-field.d.ts.map +1 -0
- package/types/slotted-angular-dashboard-grid.d.ts +341 -0
- package/types/slotted-angular-dashboard-grid.d.ts.map +1 -0
- package/types/slotted-angular-data-grid.d.ts +1077 -0
- package/types/slotted-angular-data-grid.d.ts.map +1 -0
- package/types/slotted-angular-data-list.d.ts +272 -0
- package/types/slotted-angular-data-list.d.ts.map +1 -0
- package/types/slotted-angular-date-field.d.ts +320 -0
- package/types/slotted-angular-date-field.d.ts.map +1 -0
- package/types/slotted-angular-date-picker.d.ts +224 -0
- package/types/slotted-angular-date-picker.d.ts.map +1 -0
- package/types/slotted-angular-date-range-picker.d.ts +310 -0
- package/types/slotted-angular-date-range-picker.d.ts.map +1 -0
- package/types/slotted-angular-datetime-field.d.ts +362 -0
- package/types/slotted-angular-datetime-field.d.ts.map +1 -0
- package/types/slotted-angular-datetime-picker.d.ts +370 -0
- package/types/slotted-angular-datetime-picker.d.ts.map +1 -0
- package/types/slotted-angular-datetime-range-picker.d.ts +459 -0
- package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -0
- package/types/slotted-angular-description-list.d.ts +281 -0
- package/types/slotted-angular-description-list.d.ts.map +1 -0
- package/types/slotted-angular-detail-panel.d.ts +240 -0
- package/types/slotted-angular-detail-panel.d.ts.map +1 -0
- package/types/slotted-angular-dialog.d.ts +497 -0
- package/types/slotted-angular-dialog.d.ts.map +1 -0
- package/types/slotted-angular-divider.d.ts +40 -0
- package/types/slotted-angular-divider.d.ts.map +1 -0
- package/types/slotted-angular-drawer.d.ts +532 -0
- package/types/slotted-angular-drawer.d.ts.map +1 -0
- package/types/slotted-angular-entity-picker.d.ts +338 -0
- package/types/slotted-angular-entity-picker.d.ts.map +1 -0
- package/types/slotted-angular-event-calendar.d.ts +574 -0
- package/types/slotted-angular-event-calendar.d.ts.map +1 -0
- package/types/slotted-angular-field-group.d.ts +152 -0
- package/types/slotted-angular-field-group.d.ts.map +1 -0
- package/types/slotted-angular-field.d.ts +535 -0
- package/types/slotted-angular-field.d.ts.map +1 -0
- package/types/slotted-angular-filter-bar.d.ts +573 -0
- package/types/slotted-angular-filter-bar.d.ts.map +1 -0
- package/types/slotted-angular-form.d.ts +298 -0
- package/types/slotted-angular-form.d.ts.map +1 -0
- package/types/slotted-angular-fullscreen.d.ts +145 -0
- package/types/slotted-angular-fullscreen.d.ts.map +1 -0
- package/types/slotted-angular-grid.d.ts +50 -0
- package/types/slotted-angular-grid.d.ts.map +1 -0
- package/types/slotted-angular-highlight.d.ts +93 -0
- package/types/slotted-angular-highlight.d.ts.map +1 -0
- package/types/slotted-angular-hover-card.d.ts +140 -0
- package/types/slotted-angular-hover-card.d.ts.map +1 -0
- package/types/slotted-angular-i18n.d.ts +46 -0
- package/types/slotted-angular-i18n.d.ts.map +1 -0
- package/types/slotted-angular-icon.d.ts +94 -0
- package/types/slotted-angular-icon.d.ts.map +1 -0
- package/types/slotted-angular-image.d.ts +251 -0
- package/types/slotted-angular-image.d.ts.map +1 -0
- package/types/slotted-angular-import-export-center.d.ts +351 -0
- package/types/slotted-angular-import-export-center.d.ts.map +1 -0
- package/types/slotted-angular-inline-message.d.ts +195 -0
- package/types/slotted-angular-inline-message.d.ts.map +1 -0
- package/types/slotted-angular-inline.d.ts +41 -0
- package/types/slotted-angular-inline.d.ts.map +1 -0
- package/types/slotted-angular-kbd.d.ts +174 -0
- package/types/slotted-angular-kbd.d.ts.map +1 -0
- package/types/slotted-angular-link.d.ts +94 -0
- package/types/slotted-angular-link.d.ts.map +1 -0
- package/types/slotted-angular-list-item.d.ts +210 -0
- package/types/slotted-angular-list-item.d.ts.map +1 -0
- package/types/slotted-angular-list.d.ts +176 -0
- package/types/slotted-angular-list.d.ts.map +1 -0
- package/types/slotted-angular-listbox.d.ts +470 -0
- package/types/slotted-angular-listbox.d.ts.map +1 -0
- package/types/slotted-angular-loading-overlay.d.ts +219 -0
- package/types/slotted-angular-loading-overlay.d.ts.map +1 -0
- package/types/slotted-angular-markdown.d.ts +172 -0
- package/types/slotted-angular-markdown.d.ts.map +1 -0
- package/types/slotted-angular-menu.d.ts +448 -0
- package/types/slotted-angular-menu.d.ts.map +1 -0
- package/types/slotted-angular-menubar.d.ts +90 -0
- package/types/slotted-angular-menubar.d.ts.map +1 -0
- package/types/slotted-angular-message-scroller.d.ts +151 -0
- package/types/slotted-angular-message-scroller.d.ts.map +1 -0
- package/types/slotted-angular-message.d.ts +348 -0
- package/types/slotted-angular-message.d.ts.map +1 -0
- package/types/slotted-angular-multi-select.d.ts +462 -0
- package/types/slotted-angular-multi-select.d.ts.map +1 -0
- package/types/slotted-angular-navigation-menu.d.ts +309 -0
- package/types/slotted-angular-navigation-menu.d.ts.map +1 -0
- package/types/slotted-angular-notification-center.d.ts +318 -0
- package/types/slotted-angular-notification-center.d.ts.map +1 -0
- package/types/slotted-angular-number-field.d.ts +402 -0
- package/types/slotted-angular-number-field.d.ts.map +1 -0
- package/types/slotted-angular-otp-input.d.ts +286 -0
- package/types/slotted-angular-otp-input.d.ts.map +1 -0
- package/types/slotted-angular-page-header.d.ts +334 -0
- package/types/slotted-angular-page-header.d.ts.map +1 -0
- package/types/slotted-angular-page.d.ts +141 -0
- package/types/slotted-angular-page.d.ts.map +1 -0
- package/types/slotted-angular-pagination.d.ts +213 -0
- package/types/slotted-angular-pagination.d.ts.map +1 -0
- package/types/slotted-angular-popover.d.ts +366 -0
- package/types/slotted-angular-popover.d.ts.map +1 -0
- package/types/slotted-angular-progress-indicator.d.ts +312 -0
- package/types/slotted-angular-progress-indicator.d.ts.map +1 -0
- package/types/slotted-angular-prompt-composer.d.ts +242 -0
- package/types/slotted-angular-prompt-composer.d.ts.map +1 -0
- package/types/slotted-angular-prose.d.ts +171 -0
- package/types/slotted-angular-prose.d.ts.map +1 -0
- package/types/slotted-angular-radio-group.d.ts +268 -0
- package/types/slotted-angular-radio-group.d.ts.map +1 -0
- package/types/slotted-angular-rating.d.ts +374 -0
- package/types/slotted-angular-rating.d.ts.map +1 -0
- package/types/slotted-angular-result-state.d.ts +217 -0
- package/types/slotted-angular-result-state.d.ts.map +1 -0
- package/types/slotted-angular-saved-views.d.ts +198 -0
- package/types/slotted-angular-saved-views.d.ts.map +1 -0
- package/types/slotted-angular-scroll-area.d.ts +186 -0
- package/types/slotted-angular-scroll-area.d.ts.map +1 -0
- package/types/slotted-angular-section.d.ts +143 -0
- package/types/slotted-angular-section.d.ts.map +1 -0
- package/types/slotted-angular-segmented-control.d.ts +251 -0
- package/types/slotted-angular-segmented-control.d.ts.map +1 -0
- package/types/slotted-angular-select.d.ts +507 -0
- package/types/slotted-angular-select.d.ts.map +1 -0
- package/types/slotted-angular-side-navigation.d.ts +373 -0
- package/types/slotted-angular-side-navigation.d.ts.map +1 -0
- package/types/slotted-angular-skeleton.d.ts +198 -0
- package/types/slotted-angular-skeleton.d.ts.map +1 -0
- package/types/slotted-angular-slider.d.ts +216 -0
- package/types/slotted-angular-slider.d.ts.map +1 -0
- package/types/slotted-angular-sparkline.d.ts +106 -0
- package/types/slotted-angular-sparkline.d.ts.map +1 -0
- package/types/slotted-angular-split-button.d.ts +180 -0
- package/types/slotted-angular-split-button.d.ts.map +1 -0
- package/types/slotted-angular-splitter.d.ts +206 -0
- package/types/slotted-angular-splitter.d.ts.map +1 -0
- package/types/slotted-angular-stack.d.ts +38 -0
- package/types/slotted-angular-stack.d.ts.map +1 -0
- package/types/slotted-angular-stat-card.d.ts +232 -0
- package/types/slotted-angular-stat-card.d.ts.map +1 -0
- package/types/slotted-angular-status-indicator.d.ts +106 -0
- package/types/slotted-angular-status-indicator.d.ts.map +1 -0
- package/types/slotted-angular-stepper.d.ts +198 -0
- package/types/slotted-angular-stepper.d.ts.map +1 -0
- package/types/slotted-angular-switch.d.ts +243 -0
- package/types/slotted-angular-switch.d.ts.map +1 -0
- package/types/slotted-angular-table-of-contents.d.ts +210 -0
- package/types/slotted-angular-table-of-contents.d.ts.map +1 -0
- package/types/slotted-angular-table.d.ts +888 -0
- package/types/slotted-angular-table.d.ts.map +1 -0
- package/types/slotted-angular-tabs.d.ts +340 -0
- package/types/slotted-angular-tabs.d.ts.map +1 -0
- package/types/slotted-angular-tag.d.ts +279 -0
- package/types/slotted-angular-tag.d.ts.map +1 -0
- package/types/slotted-angular-tags-input.d.ts +302 -0
- package/types/slotted-angular-tags-input.d.ts.map +1 -0
- package/types/slotted-angular-text-field.d.ts +334 -0
- package/types/slotted-angular-text-field.d.ts.map +1 -0
- package/types/slotted-angular-textarea.d.ts +150 -0
- package/types/slotted-angular-textarea.d.ts.map +1 -0
- package/types/slotted-angular-theme.d.ts +26 -0
- package/types/slotted-angular-theme.d.ts.map +1 -0
- package/types/slotted-angular-time-field.d.ts +300 -0
- package/types/slotted-angular-time-field.d.ts.map +1 -0
- package/types/slotted-angular-time-picker.d.ts +260 -0
- package/types/slotted-angular-time-picker.d.ts.map +1 -0
- package/types/slotted-angular-time-range-picker.d.ts +401 -0
- package/types/slotted-angular-time-range-picker.d.ts.map +1 -0
- package/types/slotted-angular-timeline.d.ts +329 -0
- package/types/slotted-angular-timeline.d.ts.map +1 -0
- package/types/slotted-angular-toast.d.ts +340 -0
- package/types/slotted-angular-toast.d.ts.map +1 -0
- package/types/slotted-angular-toggle-group.d.ts +167 -0
- package/types/slotted-angular-toggle-group.d.ts.map +1 -0
- package/types/slotted-angular-toggle.d.ts +106 -0
- package/types/slotted-angular-toggle.d.ts.map +1 -0
- package/types/slotted-angular-toolbar.d.ts +252 -0
- package/types/slotted-angular-toolbar.d.ts.map +1 -0
- package/types/slotted-angular-tooltip.d.ts +388 -0
- package/types/slotted-angular-tooltip.d.ts.map +1 -0
- package/types/slotted-angular-top-navigation.d.ts +442 -0
- package/types/slotted-angular-top-navigation.d.ts.map +1 -0
- package/types/slotted-angular-tour.d.ts +440 -0
- package/types/slotted-angular-tour.d.ts.map +1 -0
- package/types/slotted-angular-transfer.d.ts +296 -0
- package/types/slotted-angular-transfer.d.ts.map +1 -0
- package/types/slotted-angular-tree.d.ts +499 -0
- package/types/slotted-angular-tree.d.ts.map +1 -0
- package/types/slotted-angular-typography.d.ts +89 -0
- package/types/slotted-angular-typography.d.ts.map +1 -0
- package/types/slotted-angular-upload.d.ts +365 -0
- package/types/slotted-angular-upload.d.ts.map +1 -0
- package/types/slotted-angular-visually-hidden.d.ts +19 -0
- package/types/slotted-angular-visually-hidden.d.ts.map +1 -0
- package/types/slotted-angular-wizard.d.ts +441 -0
- package/types/slotted-angular-wizard.d.ts.map +1 -0
- package/types/slotted-angular.d.ts +3 -0
- package/types/slotted-angular.d.ts.map +1 -0
|
@@ -0,0 +1,1131 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, input, contentChild, computed, signal, DestroyRef, ViewEncapsulation, ChangeDetectionStrategy, Component, numberAttribute, booleanAttribute, output, ElementRef, HostAttributeToken, effect, forwardRef, Directive } from '@angular/core';
|
|
3
|
+
import { injectMessages, injectLocale } from '@slotted/angular/i18n';
|
|
4
|
+
import { SlGlyph, SlIcon } from '@slotted/angular/icon';
|
|
5
|
+
import { currencyFieldMessages } from '@slotted/core/i18n';
|
|
6
|
+
import { STEP_REPEAT_DELAY_COARSE, STEP_REPEAT_DELAY, STEP_REPEAT_INTERVAL, stepNumber, SCRUB_SENSITIVITY, createScrub } from '@slotted/core/number';
|
|
7
|
+
import { SlField } from '@slotted/angular/field';
|
|
8
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
9
|
+
import { createCurrencyFormat, MAX_AMOUNT_DIGITS, withAmount } from '@slotted/core/currency';
|
|
10
|
+
import { clamp } from '@slotted/core/measure';
|
|
11
|
+
import { createControllable } from '@slotted/core/state';
|
|
12
|
+
|
|
13
|
+
const FALLBACK = {
|
|
14
|
+
align: 'end',
|
|
15
|
+
clamp: 'blur',
|
|
16
|
+
currency: undefined,
|
|
17
|
+
currencyDisplay: 'symbol',
|
|
18
|
+
entry: 'cents',
|
|
19
|
+
formatOn: 'change',
|
|
20
|
+
size: 'md',
|
|
21
|
+
stepper: 'none',
|
|
22
|
+
variant: 'outline',
|
|
23
|
+
};
|
|
24
|
+
const CURRENCY_FIELD_DEFAULTS = new InjectionToken('slotted currency field defaults', { providedIn: 'root', factory: () => FALLBACK });
|
|
25
|
+
/**
|
|
26
|
+
* An application decides once which currency it charges in and how its
|
|
27
|
+
* amounts are typed, rather than repeating the same inputs on every amount in a
|
|
28
|
+
* form. A control that states any of them itself still wins. The locale and the
|
|
29
|
+
* two buttons' words come from the language in force (`provideSlotted`).
|
|
30
|
+
*
|
|
31
|
+
* `currency` is the one worth setting first, and the only one a field cannot be
|
|
32
|
+
* built without: a product has one currency in nine screens out of ten, and the
|
|
33
|
+
* tenth states its own.
|
|
34
|
+
*/
|
|
35
|
+
function provideCurrencyFieldDefaults(defaults) {
|
|
36
|
+
return {
|
|
37
|
+
provide: CURRENCY_FIELD_DEFAULTS,
|
|
38
|
+
useFactory: () => ({ ...FALLBACK, ...defaults }),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** What a currency field renders as here, before it states anything of its own. */
|
|
42
|
+
function injectCurrencyFieldDefaults() {
|
|
43
|
+
return inject(CURRENCY_FIELD_DEFAULTS);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* What the frame needs to know about the control inside it, and what the
|
|
47
|
+
* control needs the frame to call.
|
|
48
|
+
*
|
|
49
|
+
* It is an abstract class rather than an import so the two directives can
|
|
50
|
+
* depend on each other without a cycle — the shape `field`, `text-field` and
|
|
51
|
+
* `number-field` already have. The input provides itself as this, and the
|
|
52
|
+
* frame queries it.
|
|
53
|
+
*/
|
|
54
|
+
class SlCurrencyFieldControl {
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The frame: one amount, and the two buttons that move it when a product asks
|
|
59
|
+
* for them.
|
|
60
|
+
*
|
|
61
|
+
* **It is not the control.** The element carrying `data-ui` is the consumer's
|
|
62
|
+
* own box with no role; the `input` inside it holds the amount, the identifier
|
|
63
|
+
* and the APG's `spinbutton` role. WAI-ARIA settles the shape: a `spinbutton`
|
|
64
|
+
* may hold only non-interactive presentational children, so the two steppers
|
|
65
|
+
* are the control's siblings rather than its children.
|
|
66
|
+
*
|
|
67
|
+
* **The steppers are withdrawn by default**, where `number-field` ships them:
|
|
68
|
+
* an invoice total is typed, not nudged.
|
|
69
|
+
*
|
|
70
|
+
* **Angular pays one element for the frame, and React pays none.** React can
|
|
71
|
+
* render a wrapper from inside a component; an Angular directive cannot create
|
|
72
|
+
* a box around its own host. `slCurrencyFieldInput` injects this class, so a
|
|
73
|
+
* control written without the frame is a compile-time failure rather than a
|
|
74
|
+
* silent one.
|
|
75
|
+
*/
|
|
76
|
+
class SlCurrencyField {
|
|
77
|
+
/** Defaults to the field, then to the token, then to `md`. */
|
|
78
|
+
size = input(undefined, /* @ts-ignore */
|
|
79
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
80
|
+
/** Defaults to the token, then to `outline`. */
|
|
81
|
+
variant = input(undefined, /* @ts-ignore */
|
|
82
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
83
|
+
/** Which edge the amount is set against. Defaults to the token, then `end`. */
|
|
84
|
+
align = input(undefined, /* @ts-ignore */
|
|
85
|
+
...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
|
|
86
|
+
/** Where the two steppers sit. Defaults to the token, then `none`. */
|
|
87
|
+
stepper = input(undefined, /* @ts-ignore */
|
|
88
|
+
...(ngDevMode ? [{ debugName: "stepper" }] : /* istanbul ignore next */ []));
|
|
89
|
+
/**
|
|
90
|
+
* Words laid over the catalog of the language in force, key by key: the
|
|
91
|
+
* `increment` and `decrement` buttons' accessible names.
|
|
92
|
+
*/
|
|
93
|
+
messages = input(undefined, /* @ts-ignore */
|
|
94
|
+
...(ngDevMode ? [{ debugName: "messages" }] : /* istanbul ignore next */ []));
|
|
95
|
+
defaults = injectCurrencyFieldDefaults();
|
|
96
|
+
field = inject(SlField, { optional: true });
|
|
97
|
+
/**
|
|
98
|
+
* The control inside. It provides itself as `SlCurrencyFieldControl`, so the
|
|
99
|
+
* frame can read the bounds, the submission name and the shared states
|
|
100
|
+
* without either directive importing the other.
|
|
101
|
+
*/
|
|
102
|
+
control = contentChild(SlCurrencyFieldControl, { ...(ngDevMode ? { debugName: "control" } : /* istanbul ignore next */ {}), descendants: true });
|
|
103
|
+
resolvedSize = computed(() => this.size() ?? this.field?.resolvedSize() ?? this.defaults.size, /* @ts-ignore */
|
|
104
|
+
...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
|
|
105
|
+
resolvedVariant = computed(() => this.variant() ?? this.defaults.variant, /* @ts-ignore */
|
|
106
|
+
...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
|
|
107
|
+
resolvedAlign = computed(() => this.align() ?? this.defaults.align, /* @ts-ignore */
|
|
108
|
+
...(ngDevMode ? [{ debugName: "resolvedAlign" }] : /* istanbul ignore next */ []));
|
|
109
|
+
resolvedStepper = computed(() => this.stepper() ?? this.defaults.stepper, /* @ts-ignore */
|
|
110
|
+
...(ngDevMode ? [{ debugName: "resolvedStepper" }] : /* istanbul ignore next */ []));
|
|
111
|
+
/**
|
|
112
|
+
* The entry model belongs to the control, because it is behaviour before it
|
|
113
|
+
* is an axis: the frame only paints what the control resolved. Two inputs
|
|
114
|
+
* for one decision would let the box and the element disagree about how the
|
|
115
|
+
* next keystroke is read.
|
|
116
|
+
*/
|
|
117
|
+
resolvedEntry = computed(() => this.control()?.resolvedEntry() ?? this.defaults.entry, /* @ts-ignore */
|
|
118
|
+
...(ngDevMode ? [{ debugName: "resolvedEntry" }] : /* istanbul ignore next */ []));
|
|
119
|
+
/** The family's words in the language in force, with this field's `messages` laid over them. */
|
|
120
|
+
t = injectMessages(currencyFieldMessages, this.messages);
|
|
121
|
+
/** Whether a `slCurrencyFieldScrub` inside is being dragged. */
|
|
122
|
+
scrubbing = signal(false, /* @ts-ignore */
|
|
123
|
+
...(ngDevMode ? [{ debugName: "scrubbing" }] : /* istanbul ignore next */ []));
|
|
124
|
+
/** A control nobody can change has two buttons that would lie about it. */
|
|
125
|
+
inert = computed(() => {
|
|
126
|
+
const control = this.control();
|
|
127
|
+
return control?.resolvedDisabled() === true || control?.resolvedReadOnly() === true;
|
|
128
|
+
}, /* @ts-ignore */
|
|
129
|
+
...(ngDevMode ? [{ debugName: "inert" }] : /* istanbul ignore next */ []));
|
|
130
|
+
incrementDisabled = computed(() => this.inert() || this.control()?.atMax() === true, /* @ts-ignore */
|
|
131
|
+
...(ngDevMode ? [{ debugName: "incrementDisabled" }] : /* istanbul ignore next */ []));
|
|
132
|
+
decrementDisabled = computed(() => this.inert() || this.control()?.atMin() === true, /* @ts-ignore */
|
|
133
|
+
...(ngDevMode ? [{ debugName: "decrementDisabled" }] : /* istanbul ignore next */ []));
|
|
134
|
+
hiddenValue = computed(() => {
|
|
135
|
+
const value = this.control()?.numberValue() ?? null;
|
|
136
|
+
return value === null ? '' : String(value);
|
|
137
|
+
}, /* @ts-ignore */
|
|
138
|
+
...(ngDevMode ? [{ debugName: "hiddenValue" }] : /* istanbul ignore next */ []));
|
|
139
|
+
delay;
|
|
140
|
+
interval;
|
|
141
|
+
constructor() {
|
|
142
|
+
/* A button unmounted mid-press would otherwise leave a timer running. */
|
|
143
|
+
inject(DestroyRef).onDestroy(() => this.release());
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* One step now, then repeating while the button is held. A coarse pointer
|
|
147
|
+
* waits longer before the first repeat, because a finger that is starting to
|
|
148
|
+
* scroll rests on the button first.
|
|
149
|
+
*/
|
|
150
|
+
press(direction, event) {
|
|
151
|
+
if (event.button !== 0)
|
|
152
|
+
return;
|
|
153
|
+
/* Focus stays on the amount: the button is out of the tab order and the
|
|
154
|
+
caret is what the reader came back to. */
|
|
155
|
+
event.preventDefault();
|
|
156
|
+
const control = this.control();
|
|
157
|
+
if (control === undefined)
|
|
158
|
+
return;
|
|
159
|
+
control.stepBy(direction, event);
|
|
160
|
+
this.release();
|
|
161
|
+
const wait = event.pointerType === 'touch' ? STEP_REPEAT_DELAY_COARSE : STEP_REPEAT_DELAY;
|
|
162
|
+
this.delay = setTimeout(() => {
|
|
163
|
+
this.interval = setInterval(() => control.stepBy(direction, undefined), STEP_REPEAT_INTERVAL);
|
|
164
|
+
}, wait);
|
|
165
|
+
}
|
|
166
|
+
release() {
|
|
167
|
+
clearTimeout(this.delay);
|
|
168
|
+
clearInterval(this.interval);
|
|
169
|
+
this.delay = undefined;
|
|
170
|
+
this.interval = undefined;
|
|
171
|
+
}
|
|
172
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlCurrencyField, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
173
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlCurrencyField, isStandalone: true, selector: "[slCurrencyField]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, stepper: { classPropertyName: "stepper", publicName: "stepper", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "currency-field", "data-part": "root" }, properties: { "attr.data-size": "resolvedSize()", "attr.data-variant": "resolvedVariant()", "attr.data-align": "resolvedAlign()", "attr.data-entry": "resolvedEntry()", "attr.data-stepper": "resolvedStepper()", "attr.data-disabled": "control()?.resolvedDisabled() === true ? '' : null", "attr.data-invalid": "control()?.resolvedInvalid() === true ? '' : null", "attr.data-readonly": "control()?.resolvedReadOnly() === true ? '' : null", "attr.data-scrubbing": "scrubbing() ? '' : null" } }, queries: [{ propertyName: "control", first: true, predicate: SlCurrencyFieldControl, descendants: true, isSignal: true }], exportAs: ["slCurrencyField"], ngImport: i0, template: `@if (resolvedStepper() === 'split') {
|
|
174
|
+
<button
|
|
175
|
+
data-part="decrement"
|
|
176
|
+
type="button"
|
|
177
|
+
tabindex="-1"
|
|
178
|
+
[attr.aria-controls]="control()?.controlId()"
|
|
179
|
+
[attr.aria-label]="t('decrement')"
|
|
180
|
+
[disabled]="decrementDisabled()"
|
|
181
|
+
(pointerdown)="press(-1, $event)"
|
|
182
|
+
(pointerup)="release()"
|
|
183
|
+
(pointerleave)="release()"
|
|
184
|
+
(pointercancel)="release()"
|
|
185
|
+
>
|
|
186
|
+
<span slIcon><svg slGlyph name="minus"></svg></span>
|
|
187
|
+
</button>
|
|
188
|
+
}
|
|
189
|
+
<ng-content select="[slCurrencyFieldStart]" />
|
|
190
|
+
<ng-content />
|
|
191
|
+
<ng-content select="[slCurrencyFieldEnd]" />
|
|
192
|
+
@if (resolvedStepper() === 'split') {
|
|
193
|
+
<button
|
|
194
|
+
data-part="increment"
|
|
195
|
+
type="button"
|
|
196
|
+
tabindex="-1"
|
|
197
|
+
[attr.aria-controls]="control()?.controlId()"
|
|
198
|
+
[attr.aria-label]="t('increment')"
|
|
199
|
+
[disabled]="incrementDisabled()"
|
|
200
|
+
(pointerdown)="press(1, $event)"
|
|
201
|
+
(pointerup)="release()"
|
|
202
|
+
(pointerleave)="release()"
|
|
203
|
+
(pointercancel)="release()"
|
|
204
|
+
>
|
|
205
|
+
<span slIcon><svg slGlyph name="plus"></svg></span>
|
|
206
|
+
</button>
|
|
207
|
+
} @else if (resolvedStepper() === 'stacked') {
|
|
208
|
+
<span data-part="stepper">
|
|
209
|
+
<button
|
|
210
|
+
data-part="increment"
|
|
211
|
+
type="button"
|
|
212
|
+
tabindex="-1"
|
|
213
|
+
[attr.aria-controls]="control()?.controlId()"
|
|
214
|
+
[attr.aria-label]="t('increment')"
|
|
215
|
+
[disabled]="incrementDisabled()"
|
|
216
|
+
(pointerdown)="press(1, $event)"
|
|
217
|
+
(pointerup)="release()"
|
|
218
|
+
(pointerleave)="release()"
|
|
219
|
+
(pointercancel)="release()"
|
|
220
|
+
>
|
|
221
|
+
<!-- Both halves draw the down chevron; the stylesheet turns the
|
|
222
|
+
increment's half a turn. -->
|
|
223
|
+
<span slIcon><svg slGlyph name="chevron-down"></svg></span>
|
|
224
|
+
</button>
|
|
225
|
+
<button
|
|
226
|
+
data-part="decrement"
|
|
227
|
+
type="button"
|
|
228
|
+
tabindex="-1"
|
|
229
|
+
[attr.aria-controls]="control()?.controlId()"
|
|
230
|
+
[attr.aria-label]="t('decrement')"
|
|
231
|
+
[disabled]="decrementDisabled()"
|
|
232
|
+
(pointerdown)="press(-1, $event)"
|
|
233
|
+
(pointerup)="release()"
|
|
234
|
+
(pointerleave)="release()"
|
|
235
|
+
(pointercancel)="release()"
|
|
236
|
+
>
|
|
237
|
+
<span slIcon><svg slGlyph name="chevron-down"></svg></span>
|
|
238
|
+
</button>
|
|
239
|
+
</span>
|
|
240
|
+
}
|
|
241
|
+
@if (control()?.submissionName(); as submissionName) {
|
|
242
|
+
<input
|
|
243
|
+
type="hidden"
|
|
244
|
+
[attr.name]="submissionName"
|
|
245
|
+
[attr.form]="control()?.submissionForm()"
|
|
246
|
+
[value]="hiddenValue()"
|
|
247
|
+
/>
|
|
248
|
+
}`, isInline: true, styles: ["@layer slotted.components{[data-ui=currency-field][data-part=root]{--_font-size: var(--slotted-control-font-size-md, 13px);--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_icon-floor: var(--slotted-currency-field-icon-size-min, 14px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));--_inner-size: var(--slotted-control-inner-size-md, 24px);--_stepper-size: var( --slotted-currency-field-stepper-size, max( var(--slotted-target-min, 24px), min(calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), var(--_inner-size)) ) );--_action-size: var( --slotted-currency-field-action-size, min(calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), var(--_inner-size)) );--_inset: max( 0px, calc( (var(--_height) - 2 * var(--slotted-control-border-width, 1px) - var(--_action-size)) / 2 ) );--_action-radius: max( var(--slotted-radius-xs, 2px), calc(var(--slotted-currency-field-radius, var(--slotted-control-radius, 4px)) - var(--_inset)) );--_column-inset: var(--slotted-space-1, 2px);--_column-radius: max( var(--slotted-radius-xs, 2px), calc( var(--slotted-currency-field-radius, var(--slotted-control-radius, 4px)) - var(--_column-inset) ) );align-items:center;background-color:var( --slotted-currency-field-background, var(--slotted-control-surface, Field) );border:var(--slotted-control-border-width, 1px) solid var(--slotted-currency-field-border-color, var(--slotted-control-border-color, ButtonBorder));border-radius:var(--slotted-currency-field-radius, var(--slotted-control-radius, 4px));box-shadow:var(--slotted-currency-field-shadow, var(--slotted-control-shadow, none));box-sizing:border-box;color:var(--slotted-currency-field-color, var(--slotted-text, CanvasText));display:flex;font-family:var(--slotted-control-font-family, system-ui, sans-serif);font-size:var(--_font-size);gap:var(--_gap);inline-size:100%;min-inline-size:0;min-block-size:var(--_height);padding-inline:var(--_padding-inline);transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),box-shadow var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=currency-field]>[data-part=input]{background-color:transparent;align-self:stretch;margin-block:calc(var(--slotted-control-border-width, 1px) * -1);border:0;color:inherit;flex:1 1 auto;font:inherit;font-variant-numeric:tabular-nums;outline:none;padding:0;min-inline-size:0;text-overflow:ellipsis;unicode-bidi:plaintext}[data-ui=currency-field]>[data-part=input]::placeholder{color:var(--slotted-currency-field-placeholder-color, var(--slotted-text-muted, GrayText));text-overflow:ellipsis}[data-ui=currency-field][data-align=end]>[data-part=input]{text-align:right}[data-ui=currency-field][data-align=end]:dir(rtl)>[data-part=input]{text-align:left}[data-ui=currency-field][data-align=start]>[data-part=input]{text-align:left}[data-ui=currency-field][data-align=start]:dir(rtl)>[data-part=input]{text-align:right}[data-ui=currency-field][data-part=root][data-size=sm]{--_font-size: var(--slotted-control-font-size-sm, 12px);--_height: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-sm, 10px);--_gap: var(--slotted-control-gap-sm, 6px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-sm, 14px));--_inner-size: var(--slotted-control-inner-size-sm, 22px)}[data-ui=currency-field][data-part=root][data-size=md]{--_font-size: var(--slotted-control-font-size-md, 13px);--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));--_inner-size: var(--slotted-control-inner-size-md, 24px)}[data-ui=currency-field][data-part=root][data-size=lg]{--_font-size: var(--slotted-control-font-size-lg, 14px);--_height: var(--slotted-control-height-lg, 38px);--_padding-inline: var(--slotted-control-padding-inline-lg, 16px);--_gap: var(--slotted-control-gap-lg, 8px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-lg, 18px));--_inner-size: var(--slotted-control-inner-size-lg, 28px)}[data-ui=currency-field][data-part=root][data-variant=subtle]{background-color:var( --slotted-currency-field-subtle-background, var(--slotted-surface-sunken, Canvas) );border-color:var( --slotted-currency-field-subtle-border-color, var(--slotted-border-subtle, ButtonBorder) )}[data-ui=currency-field][data-part=root][data-variant=plain]{background-color:transparent;border-color:transparent;border-radius:var(--slotted-radius-none, 0px);box-shadow:none}@media(forced-colors:active){[data-ui=currency-field][data-part=root][data-variant=plain]{border-color:ButtonBorder}}[data-ui=currency-field]>[data-part=start],[data-ui=currency-field]>[data-part=end]{align-items:center;color:var(--slotted-currency-field-adornment-color, var(--slotted-text-muted, GrayText));display:inline-flex;flex:0 0 auto;gap:var(--slotted-space-2, .25rem);line-height:1;unicode-bidi:plaintext;--slotted-icon-size: var(--_icon-size)}[data-ui=currency-field]>[data-part=start]>svg,[data-ui=currency-field]>[data-part=end]>svg{block-size:var(--_icon-size);inline-size:var(--_icon-size)}[data-ui=currency-field]>[data-part=start]:not(:has(svg,img,[data-ui=icon])),[data-ui=currency-field]>[data-part=end]:not(:has(svg,img,[data-ui=icon])){padding-inline:calc(var(--_icon-size) / 8)}[data-ui=currency-field]>:is([data-part=start],[data-part=end]):has(>[data-part=scrub]){align-self:stretch}[data-ui=currency-field] [data-part=scrub]{align-items:center;align-self:stretch;cursor:ew-resize;display:inline-flex;gap:var(--slotted-space-2, .25rem);touch-action:none;transition:color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);unicode-bidi:plaintext;user-select:none;-webkit-user-select:none}[data-ui=currency-field]:not([data-disabled]):not([data-readonly]) [data-part=scrub]:is(:hover,[data-scrubbing]){color:var(--slotted-currency-field-scrub-active-color, var(--slotted-text, CanvasText))}[data-ui=currency-field]:is([data-disabled],[data-readonly]) [data-part=scrub]{cursor:default;touch-action:auto}[data-ui=currency-field]>[data-part=stepper]>button,[data-ui=currency-field]>[data-part=decrement],[data-ui=currency-field]>[data-part=increment]{align-items:center;appearance:none;background-color:transparent;border:0;color:var(--slotted-currency-field-stepper-color, var(--slotted-text-muted, GrayText));cursor:pointer;display:inline-flex;flex:0 0 auto;justify-content:center;padding:0;position:relative;touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-tap-highlight-color:transparent}[data-ui=currency-field] [data-part=decrement],[data-ui=currency-field] [data-part=increment]{--slotted-icon-size: var(--_icon-size)}[data-ui=currency-field][data-stepper=stacked] [data-part=increment]>[data-ui=icon]{rotate:.5turn}[data-ui=currency-field][data-part=root][data-stepper=stacked]{padding-inline-end:0}[data-ui=currency-field]>[data-part=stepper]{align-self:stretch;box-sizing:content-box;display:flex;flex:0 0 auto;flex-direction:column;inline-size:var(--_stepper-size);padding-block:var(--_column-inset);padding-inline-end:var(--_column-inset)}[data-ui=currency-field]>[data-part=stepper]>button{block-size:50%;border-radius:var(--_column-radius);inline-size:100%}[data-ui=currency-field]>[data-part=stepper]>:is([data-part=increment],[data-part=decrement]):after{content:\"\";inset-inline:0 calc(var(--_column-inset) * -1);position:absolute}[data-ui=currency-field]>[data-part=stepper]>[data-part=increment]:after{inset-block:calc(var(--_column-inset) * -1) 0}[data-ui=currency-field]>[data-part=stepper]>[data-part=decrement]:after{inset-block:0 calc(var(--_column-inset) * -1)}[data-ui=currency-field]>[data-part=stepper]>button>[data-ui=icon]{block-size:min(var(--_icon-size),100%);contain:size}[data-ui=currency-field][data-part=root][data-stepper=split]{gap:0;padding-inline:var(--_inset)}[data-ui=currency-field][data-stepper=split]>[data-part=decrement],[data-ui=currency-field][data-stepper=split]>[data-part=increment]{block-size:var(--_action-size);border-radius:var(--_action-radius);inline-size:var(--_action-size)}[data-ui=currency-field][data-stepper=split]>[data-part=start]{padding-inline-start:var(--_gap)}[data-ui=currency-field][data-stepper=split]>[data-part=end]{padding-inline-end:var(--_gap)}[data-ui=currency-field][data-stepper=split]>[data-part=input]{padding-inline:var(--_padding-inline)}[data-ui=currency-field][data-stepper=split]>[data-part=decrement]:after,[data-ui=currency-field][data-stepper=split]>[data-part=increment]:after{content:\"\";inset:min(0px,calc((100% - var(--slotted-target-min, 24px)) / 2));position:absolute}@media(pointer:coarse){[data-ui=currency-field][data-stepper=split]>:is([data-part=decrement],[data-part=increment]):after{inset:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}[data-ui=currency-field]>[data-part=stepper]>:is([data-part=increment],[data-part=decrement]):after{inset-inline:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}}[data-ui=currency-field] [data-part=decrement]:hover:not(:disabled),[data-ui=currency-field] [data-part=increment]:hover:not(:disabled){background-color:var( --slotted-currency-field-stepper-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=currency-field] [data-part=decrement]:active:not(:disabled),[data-ui=currency-field] [data-part=increment]:active:not(:disabled){background-color:var( --slotted-currency-field-stepper-active-background, var(--slotted-tone-secondary-subtle-active) )}[data-ui=currency-field] [data-part=decrement]:disabled,[data-ui=currency-field] [data-part=increment]:disabled{background-color:var( --slotted-currency-field-stepper-disabled-background, var(--slotted-disabled-background) );color:var(--slotted-currency-field-stepper-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=currency-field] [data-part=decrement]:focus-visible,[data-ui=currency-field] [data-part=increment]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=currency-field][data-part=root]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){border-color:var( --slotted-currency-field-hover-border-color, var(--slotted-tone-accent-border) )}[data-ui=currency-field][data-part=root][data-variant=subtle]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){background-color:var( --slotted-currency-field-subtle-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=currency-field][data-part=root][data-variant=plain]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){background-color:var( --slotted-currency-field-plain-hover-background, var(--slotted-tone-secondary-subtle-hover) );border-color:transparent}[data-ui=currency-field][data-part=root]:has(>[data-part=input]:focus-visible){box-shadow:var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px) var(--slotted-focus-ring-color, Highlight);outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=currency-field][data-part=root][data-variant=plain]:has(>[data-part=input]:focus-visible){box-shadow:none;outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=currency-field][data-part=root][data-invalid]{--slotted-focus-ring-color: var( --slotted-currency-field-invalid-focus-ring-color, var(--slotted-focus-ring-color-invalid, Highlight) );--_invalid-edge-width: var( --slotted-currency-field-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) );--_invalid-edge-color: var( --slotted-currency-field-invalid-border-color, var(--slotted-tone-danger-border) );--_invalid-edge: inset 0 0 0 var(--_invalid-edge-width) var(--_invalid-edge-color);border-color:var( --slotted-currency-field-invalid-border-color, var(--slotted-tone-danger-border) );box-shadow:var(--_invalid-edge)}[data-ui=currency-field][data-part=root][data-invalid]:has(>[data-part=input]:focus-visible){box-shadow:var(--_invalid-edge),var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px) var(--slotted-focus-ring-color, Highlight)}[data-ui=currency-field][data-part=root][data-variant=plain][data-invalid]:has(>[data-part=input]:focus-visible){box-shadow:inset 0 0 0 calc(var(--slotted-focus-ring-offset, 2px) - var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width)) var(--_invalid-edge-color)}@media(forced-colors:active){[data-ui=currency-field][data-part=root][data-invalid]{outline:var(--_invalid-edge-width) solid CanvasText;outline-offset:calc(-1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width)))}[data-ui=currency-field][data-part=root][data-invalid]:has(>[data-part=input]:focus-visible){outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=currency-field][data-part=root][data-variant=plain][data-invalid]:has(>[data-part=input]:focus-visible){outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:calc(-1 * (var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)))}}[data-ui=currency-field][data-part=root][data-readonly]{background-color:var( --slotted-currency-field-readonly-background, var(--slotted-tone-secondary-subtle-hover) );border-color:var( --slotted-currency-field-readonly-border-color, var(--slotted-border-subtle, ButtonBorder) );cursor:default}[data-ui=currency-field][data-part=root][data-disabled],[data-ui=currency-field][data-part=root]:has(>[data-part=input]:disabled){background-color:var( --slotted-currency-field-disabled-background, var(--slotted-disabled-background) );border-color:var( --slotted-currency-field-disabled-border-color, var(--slotted-disabled-border) );box-shadow:none;color:var(--slotted-currency-field-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=currency-field][data-part=root][data-disabled]>[data-part=start],[data-ui=currency-field][data-part=root][data-disabled]>[data-part=end]{color:var(--slotted-disabled-foreground)}}\n"], dependencies: [{ kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
249
|
+
}
|
|
250
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlCurrencyField, decorators: [{
|
|
251
|
+
type: Component,
|
|
252
|
+
args: [{ selector: '[slCurrencyField]', standalone: true, exportAs: 'slCurrencyField', imports: [SlGlyph, SlIcon], template: `@if (resolvedStepper() === 'split') {
|
|
253
|
+
<button
|
|
254
|
+
data-part="decrement"
|
|
255
|
+
type="button"
|
|
256
|
+
tabindex="-1"
|
|
257
|
+
[attr.aria-controls]="control()?.controlId()"
|
|
258
|
+
[attr.aria-label]="t('decrement')"
|
|
259
|
+
[disabled]="decrementDisabled()"
|
|
260
|
+
(pointerdown)="press(-1, $event)"
|
|
261
|
+
(pointerup)="release()"
|
|
262
|
+
(pointerleave)="release()"
|
|
263
|
+
(pointercancel)="release()"
|
|
264
|
+
>
|
|
265
|
+
<span slIcon><svg slGlyph name="minus"></svg></span>
|
|
266
|
+
</button>
|
|
267
|
+
}
|
|
268
|
+
<ng-content select="[slCurrencyFieldStart]" />
|
|
269
|
+
<ng-content />
|
|
270
|
+
<ng-content select="[slCurrencyFieldEnd]" />
|
|
271
|
+
@if (resolvedStepper() === 'split') {
|
|
272
|
+
<button
|
|
273
|
+
data-part="increment"
|
|
274
|
+
type="button"
|
|
275
|
+
tabindex="-1"
|
|
276
|
+
[attr.aria-controls]="control()?.controlId()"
|
|
277
|
+
[attr.aria-label]="t('increment')"
|
|
278
|
+
[disabled]="incrementDisabled()"
|
|
279
|
+
(pointerdown)="press(1, $event)"
|
|
280
|
+
(pointerup)="release()"
|
|
281
|
+
(pointerleave)="release()"
|
|
282
|
+
(pointercancel)="release()"
|
|
283
|
+
>
|
|
284
|
+
<span slIcon><svg slGlyph name="plus"></svg></span>
|
|
285
|
+
</button>
|
|
286
|
+
} @else if (resolvedStepper() === 'stacked') {
|
|
287
|
+
<span data-part="stepper">
|
|
288
|
+
<button
|
|
289
|
+
data-part="increment"
|
|
290
|
+
type="button"
|
|
291
|
+
tabindex="-1"
|
|
292
|
+
[attr.aria-controls]="control()?.controlId()"
|
|
293
|
+
[attr.aria-label]="t('increment')"
|
|
294
|
+
[disabled]="incrementDisabled()"
|
|
295
|
+
(pointerdown)="press(1, $event)"
|
|
296
|
+
(pointerup)="release()"
|
|
297
|
+
(pointerleave)="release()"
|
|
298
|
+
(pointercancel)="release()"
|
|
299
|
+
>
|
|
300
|
+
<!-- Both halves draw the down chevron; the stylesheet turns the
|
|
301
|
+
increment's half a turn. -->
|
|
302
|
+
<span slIcon><svg slGlyph name="chevron-down"></svg></span>
|
|
303
|
+
</button>
|
|
304
|
+
<button
|
|
305
|
+
data-part="decrement"
|
|
306
|
+
type="button"
|
|
307
|
+
tabindex="-1"
|
|
308
|
+
[attr.aria-controls]="control()?.controlId()"
|
|
309
|
+
[attr.aria-label]="t('decrement')"
|
|
310
|
+
[disabled]="decrementDisabled()"
|
|
311
|
+
(pointerdown)="press(-1, $event)"
|
|
312
|
+
(pointerup)="release()"
|
|
313
|
+
(pointerleave)="release()"
|
|
314
|
+
(pointercancel)="release()"
|
|
315
|
+
>
|
|
316
|
+
<span slIcon><svg slGlyph name="chevron-down"></svg></span>
|
|
317
|
+
</button>
|
|
318
|
+
</span>
|
|
319
|
+
}
|
|
320
|
+
@if (control()?.submissionName(); as submissionName) {
|
|
321
|
+
<input
|
|
322
|
+
type="hidden"
|
|
323
|
+
[attr.name]="submissionName"
|
|
324
|
+
[attr.form]="control()?.submissionForm()"
|
|
325
|
+
[value]="hiddenValue()"
|
|
326
|
+
/>
|
|
327
|
+
}`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
328
|
+
'data-ui': 'currency-field',
|
|
329
|
+
'data-part': 'root',
|
|
330
|
+
'[attr.data-size]': 'resolvedSize()',
|
|
331
|
+
'[attr.data-variant]': 'resolvedVariant()',
|
|
332
|
+
'[attr.data-align]': 'resolvedAlign()',
|
|
333
|
+
'[attr.data-entry]': 'resolvedEntry()',
|
|
334
|
+
'[attr.data-stepper]': 'resolvedStepper()',
|
|
335
|
+
'[attr.data-disabled]': "control()?.resolvedDisabled() === true ? '' : null",
|
|
336
|
+
'[attr.data-invalid]': "control()?.resolvedInvalid() === true ? '' : null",
|
|
337
|
+
'[attr.data-readonly]': "control()?.resolvedReadOnly() === true ? '' : null",
|
|
338
|
+
'[attr.data-scrubbing]': "scrubbing() ? '' : null",
|
|
339
|
+
}, styles: ["@layer slotted.components{[data-ui=currency-field][data-part=root]{--_font-size: var(--slotted-control-font-size-md, 13px);--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_icon-floor: var(--slotted-currency-field-icon-size-min, 14px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));--_inner-size: var(--slotted-control-inner-size-md, 24px);--_stepper-size: var( --slotted-currency-field-stepper-size, max( var(--slotted-target-min, 24px), min(calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), var(--_inner-size)) ) );--_action-size: var( --slotted-currency-field-action-size, min(calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), var(--_inner-size)) );--_inset: max( 0px, calc( (var(--_height) - 2 * var(--slotted-control-border-width, 1px) - var(--_action-size)) / 2 ) );--_action-radius: max( var(--slotted-radius-xs, 2px), calc(var(--slotted-currency-field-radius, var(--slotted-control-radius, 4px)) - var(--_inset)) );--_column-inset: var(--slotted-space-1, 2px);--_column-radius: max( var(--slotted-radius-xs, 2px), calc( var(--slotted-currency-field-radius, var(--slotted-control-radius, 4px)) - var(--_column-inset) ) );align-items:center;background-color:var( --slotted-currency-field-background, var(--slotted-control-surface, Field) );border:var(--slotted-control-border-width, 1px) solid var(--slotted-currency-field-border-color, var(--slotted-control-border-color, ButtonBorder));border-radius:var(--slotted-currency-field-radius, var(--slotted-control-radius, 4px));box-shadow:var(--slotted-currency-field-shadow, var(--slotted-control-shadow, none));box-sizing:border-box;color:var(--slotted-currency-field-color, var(--slotted-text, CanvasText));display:flex;font-family:var(--slotted-control-font-family, system-ui, sans-serif);font-size:var(--_font-size);gap:var(--_gap);inline-size:100%;min-inline-size:0;min-block-size:var(--_height);padding-inline:var(--_padding-inline);transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),box-shadow var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=currency-field]>[data-part=input]{background-color:transparent;align-self:stretch;margin-block:calc(var(--slotted-control-border-width, 1px) * -1);border:0;color:inherit;flex:1 1 auto;font:inherit;font-variant-numeric:tabular-nums;outline:none;padding:0;min-inline-size:0;text-overflow:ellipsis;unicode-bidi:plaintext}[data-ui=currency-field]>[data-part=input]::placeholder{color:var(--slotted-currency-field-placeholder-color, var(--slotted-text-muted, GrayText));text-overflow:ellipsis}[data-ui=currency-field][data-align=end]>[data-part=input]{text-align:right}[data-ui=currency-field][data-align=end]:dir(rtl)>[data-part=input]{text-align:left}[data-ui=currency-field][data-align=start]>[data-part=input]{text-align:left}[data-ui=currency-field][data-align=start]:dir(rtl)>[data-part=input]{text-align:right}[data-ui=currency-field][data-part=root][data-size=sm]{--_font-size: var(--slotted-control-font-size-sm, 12px);--_height: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-sm, 10px);--_gap: var(--slotted-control-gap-sm, 6px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-sm, 14px));--_inner-size: var(--slotted-control-inner-size-sm, 22px)}[data-ui=currency-field][data-part=root][data-size=md]{--_font-size: var(--slotted-control-font-size-md, 13px);--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));--_inner-size: var(--slotted-control-inner-size-md, 24px)}[data-ui=currency-field][data-part=root][data-size=lg]{--_font-size: var(--slotted-control-font-size-lg, 14px);--_height: var(--slotted-control-height-lg, 38px);--_padding-inline: var(--slotted-control-padding-inline-lg, 16px);--_gap: var(--slotted-control-gap-lg, 8px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-lg, 18px));--_inner-size: var(--slotted-control-inner-size-lg, 28px)}[data-ui=currency-field][data-part=root][data-variant=subtle]{background-color:var( --slotted-currency-field-subtle-background, var(--slotted-surface-sunken, Canvas) );border-color:var( --slotted-currency-field-subtle-border-color, var(--slotted-border-subtle, ButtonBorder) )}[data-ui=currency-field][data-part=root][data-variant=plain]{background-color:transparent;border-color:transparent;border-radius:var(--slotted-radius-none, 0px);box-shadow:none}@media(forced-colors:active){[data-ui=currency-field][data-part=root][data-variant=plain]{border-color:ButtonBorder}}[data-ui=currency-field]>[data-part=start],[data-ui=currency-field]>[data-part=end]{align-items:center;color:var(--slotted-currency-field-adornment-color, var(--slotted-text-muted, GrayText));display:inline-flex;flex:0 0 auto;gap:var(--slotted-space-2, .25rem);line-height:1;unicode-bidi:plaintext;--slotted-icon-size: var(--_icon-size)}[data-ui=currency-field]>[data-part=start]>svg,[data-ui=currency-field]>[data-part=end]>svg{block-size:var(--_icon-size);inline-size:var(--_icon-size)}[data-ui=currency-field]>[data-part=start]:not(:has(svg,img,[data-ui=icon])),[data-ui=currency-field]>[data-part=end]:not(:has(svg,img,[data-ui=icon])){padding-inline:calc(var(--_icon-size) / 8)}[data-ui=currency-field]>:is([data-part=start],[data-part=end]):has(>[data-part=scrub]){align-self:stretch}[data-ui=currency-field] [data-part=scrub]{align-items:center;align-self:stretch;cursor:ew-resize;display:inline-flex;gap:var(--slotted-space-2, .25rem);touch-action:none;transition:color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);unicode-bidi:plaintext;user-select:none;-webkit-user-select:none}[data-ui=currency-field]:not([data-disabled]):not([data-readonly]) [data-part=scrub]:is(:hover,[data-scrubbing]){color:var(--slotted-currency-field-scrub-active-color, var(--slotted-text, CanvasText))}[data-ui=currency-field]:is([data-disabled],[data-readonly]) [data-part=scrub]{cursor:default;touch-action:auto}[data-ui=currency-field]>[data-part=stepper]>button,[data-ui=currency-field]>[data-part=decrement],[data-ui=currency-field]>[data-part=increment]{align-items:center;appearance:none;background-color:transparent;border:0;color:var(--slotted-currency-field-stepper-color, var(--slotted-text-muted, GrayText));cursor:pointer;display:inline-flex;flex:0 0 auto;justify-content:center;padding:0;position:relative;touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-tap-highlight-color:transparent}[data-ui=currency-field] [data-part=decrement],[data-ui=currency-field] [data-part=increment]{--slotted-icon-size: var(--_icon-size)}[data-ui=currency-field][data-stepper=stacked] [data-part=increment]>[data-ui=icon]{rotate:.5turn}[data-ui=currency-field][data-part=root][data-stepper=stacked]{padding-inline-end:0}[data-ui=currency-field]>[data-part=stepper]{align-self:stretch;box-sizing:content-box;display:flex;flex:0 0 auto;flex-direction:column;inline-size:var(--_stepper-size);padding-block:var(--_column-inset);padding-inline-end:var(--_column-inset)}[data-ui=currency-field]>[data-part=stepper]>button{block-size:50%;border-radius:var(--_column-radius);inline-size:100%}[data-ui=currency-field]>[data-part=stepper]>:is([data-part=increment],[data-part=decrement]):after{content:\"\";inset-inline:0 calc(var(--_column-inset) * -1);position:absolute}[data-ui=currency-field]>[data-part=stepper]>[data-part=increment]:after{inset-block:calc(var(--_column-inset) * -1) 0}[data-ui=currency-field]>[data-part=stepper]>[data-part=decrement]:after{inset-block:0 calc(var(--_column-inset) * -1)}[data-ui=currency-field]>[data-part=stepper]>button>[data-ui=icon]{block-size:min(var(--_icon-size),100%);contain:size}[data-ui=currency-field][data-part=root][data-stepper=split]{gap:0;padding-inline:var(--_inset)}[data-ui=currency-field][data-stepper=split]>[data-part=decrement],[data-ui=currency-field][data-stepper=split]>[data-part=increment]{block-size:var(--_action-size);border-radius:var(--_action-radius);inline-size:var(--_action-size)}[data-ui=currency-field][data-stepper=split]>[data-part=start]{padding-inline-start:var(--_gap)}[data-ui=currency-field][data-stepper=split]>[data-part=end]{padding-inline-end:var(--_gap)}[data-ui=currency-field][data-stepper=split]>[data-part=input]{padding-inline:var(--_padding-inline)}[data-ui=currency-field][data-stepper=split]>[data-part=decrement]:after,[data-ui=currency-field][data-stepper=split]>[data-part=increment]:after{content:\"\";inset:min(0px,calc((100% - var(--slotted-target-min, 24px)) / 2));position:absolute}@media(pointer:coarse){[data-ui=currency-field][data-stepper=split]>:is([data-part=decrement],[data-part=increment]):after{inset:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}[data-ui=currency-field]>[data-part=stepper]>:is([data-part=increment],[data-part=decrement]):after{inset-inline:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}}[data-ui=currency-field] [data-part=decrement]:hover:not(:disabled),[data-ui=currency-field] [data-part=increment]:hover:not(:disabled){background-color:var( --slotted-currency-field-stepper-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=currency-field] [data-part=decrement]:active:not(:disabled),[data-ui=currency-field] [data-part=increment]:active:not(:disabled){background-color:var( --slotted-currency-field-stepper-active-background, var(--slotted-tone-secondary-subtle-active) )}[data-ui=currency-field] [data-part=decrement]:disabled,[data-ui=currency-field] [data-part=increment]:disabled{background-color:var( --slotted-currency-field-stepper-disabled-background, var(--slotted-disabled-background) );color:var(--slotted-currency-field-stepper-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=currency-field] [data-part=decrement]:focus-visible,[data-ui=currency-field] [data-part=increment]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=currency-field][data-part=root]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){border-color:var( --slotted-currency-field-hover-border-color, var(--slotted-tone-accent-border) )}[data-ui=currency-field][data-part=root][data-variant=subtle]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){background-color:var( --slotted-currency-field-subtle-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=currency-field][data-part=root][data-variant=plain]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){background-color:var( --slotted-currency-field-plain-hover-background, var(--slotted-tone-secondary-subtle-hover) );border-color:transparent}[data-ui=currency-field][data-part=root]:has(>[data-part=input]:focus-visible){box-shadow:var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px) var(--slotted-focus-ring-color, Highlight);outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=currency-field][data-part=root][data-variant=plain]:has(>[data-part=input]:focus-visible){box-shadow:none;outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=currency-field][data-part=root][data-invalid]{--slotted-focus-ring-color: var( --slotted-currency-field-invalid-focus-ring-color, var(--slotted-focus-ring-color-invalid, Highlight) );--_invalid-edge-width: var( --slotted-currency-field-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) );--_invalid-edge-color: var( --slotted-currency-field-invalid-border-color, var(--slotted-tone-danger-border) );--_invalid-edge: inset 0 0 0 var(--_invalid-edge-width) var(--_invalid-edge-color);border-color:var( --slotted-currency-field-invalid-border-color, var(--slotted-tone-danger-border) );box-shadow:var(--_invalid-edge)}[data-ui=currency-field][data-part=root][data-invalid]:has(>[data-part=input]:focus-visible){box-shadow:var(--_invalid-edge),var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px) var(--slotted-focus-ring-color, Highlight)}[data-ui=currency-field][data-part=root][data-variant=plain][data-invalid]:has(>[data-part=input]:focus-visible){box-shadow:inset 0 0 0 calc(var(--slotted-focus-ring-offset, 2px) - var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width)) var(--_invalid-edge-color)}@media(forced-colors:active){[data-ui=currency-field][data-part=root][data-invalid]{outline:var(--_invalid-edge-width) solid CanvasText;outline-offset:calc(-1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width)))}[data-ui=currency-field][data-part=root][data-invalid]:has(>[data-part=input]:focus-visible){outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=currency-field][data-part=root][data-variant=plain][data-invalid]:has(>[data-part=input]:focus-visible){outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:calc(-1 * (var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)))}}[data-ui=currency-field][data-part=root][data-readonly]{background-color:var( --slotted-currency-field-readonly-background, var(--slotted-tone-secondary-subtle-hover) );border-color:var( --slotted-currency-field-readonly-border-color, var(--slotted-border-subtle, ButtonBorder) );cursor:default}[data-ui=currency-field][data-part=root][data-disabled],[data-ui=currency-field][data-part=root]:has(>[data-part=input]:disabled){background-color:var( --slotted-currency-field-disabled-background, var(--slotted-disabled-background) );border-color:var( --slotted-currency-field-disabled-border-color, var(--slotted-disabled-border) );box-shadow:none;color:var(--slotted-currency-field-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=currency-field][data-part=root][data-disabled]>[data-part=start],[data-ui=currency-field][data-part=root][data-disabled]>[data-part=end]{color:var(--slotted-disabled-foreground)}}\n"] }]
|
|
340
|
+
}], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], stepper: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepper", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], control: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SlCurrencyFieldControl), { ...{ descendants: true }, isSignal: true }] }] } });
|
|
341
|
+
|
|
342
|
+
/** `undefined` stays absent; anything else becomes a number. */
|
|
343
|
+
const optionalNumber = (value) => value === undefined || value === null || value === '' ? undefined : numberAttribute(value);
|
|
344
|
+
/** The two keys that set the sign under cents-first entry. */
|
|
345
|
+
const SIGN_KEYS = new Set(['-', '−', '+', '(']);
|
|
346
|
+
/**
|
|
347
|
+
* The control itself: the amount, the currency, the identifier, and everything
|
|
348
|
+
* the field around it says.
|
|
349
|
+
*
|
|
350
|
+
* **The element is `type="text"` and carries the APG's `spinbutton` role.**
|
|
351
|
+
* `type="number"` empties itself whenever the text is not a valid
|
|
352
|
+
* floating-point number, so no grouping separator and no currency symbol
|
|
353
|
+
* survives it.
|
|
354
|
+
*
|
|
355
|
+
* **Under `entry="cents"` the digits are the amount.** After every edit the
|
|
356
|
+
* directive reads the digits out of the text and divides by the currency's
|
|
357
|
+
* minor units, so `1234` is `R$ 12,34`. The text is generated rather than
|
|
358
|
+
* typed, which is why rewriting it on every keystroke is legal here and
|
|
359
|
+
* forbidden in `number-field`: there is no typed text to protect, and the caret
|
|
360
|
+
* has exactly one legal position.
|
|
361
|
+
*
|
|
362
|
+
* **Unset means ask the field.** `disabled`, `readOnly` and `invalid` default to
|
|
363
|
+
* `undefined` rather than `false`. A value the consumer wrote as a static
|
|
364
|
+
* attribute is read before the host binding computes.
|
|
365
|
+
*/
|
|
366
|
+
class SlCurrencyFieldInput {
|
|
367
|
+
/**
|
|
368
|
+
* An ISO 4217 code. It decides the symbol, the minor units and therefore how
|
|
369
|
+
* far a digit shifts. Required here or on the token: a field that guessed two
|
|
370
|
+
* minor digits would write `¥12,34`.
|
|
371
|
+
*/
|
|
372
|
+
currency = input(undefined, /* @ts-ignore */
|
|
373
|
+
...(ngDevMode ? [{ debugName: "currency" }] : /* istanbul ignore next */ []));
|
|
374
|
+
/** How the currency is written beside the amount. Defaults to the token, then `symbol`. */
|
|
375
|
+
currencyDisplay = input(undefined, /* @ts-ignore */
|
|
376
|
+
...(ngDevMode ? [{ debugName: "currencyDisplay" }] : /* istanbul ignore next */ []));
|
|
377
|
+
/** Overrides the currency's own minor units, for a unit price quoted finer. */
|
|
378
|
+
fractionDigits = input(undefined, { ...(ngDevMode ? { debugName: "fractionDigits" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
379
|
+
/**
|
|
380
|
+
* Present means the consumer owns the amount, for the life of the component.
|
|
381
|
+
* `null` is empty, and `undefined` is the absence that makes the control
|
|
382
|
+
* uncontrolled — the two are different answers.
|
|
383
|
+
*/
|
|
384
|
+
value = input(undefined, { ...(ngDevMode ? { debugName: "value" } : /* istanbul ignore next */ {}), transform: (raw) => (raw === undefined ? undefined : (optionalNumber(raw) ?? null)) });
|
|
385
|
+
/** The amount the control starts from when nobody else writes one. */
|
|
386
|
+
defaultValue = input(null, { ...(ngDevMode ? { debugName: "defaultValue" } : /* istanbul ignore next */ {}), transform: (raw) => (raw === undefined ? null : (optionalNumber(raw) ?? null)) });
|
|
387
|
+
/** How the reader types. Defaults to the token, then `cents`. */
|
|
388
|
+
entry = input(undefined, /* @ts-ignore */
|
|
389
|
+
...(ngDevMode ? [{ debugName: "entry" }] : /* istanbul ignore next */ []));
|
|
390
|
+
/**
|
|
391
|
+
* When the text takes the locale's shape under `entry="natural"`. Defaults to
|
|
392
|
+
* the token, then `change`. Cents-first entry generates the text after every
|
|
393
|
+
* edit, so it decides nothing there.
|
|
394
|
+
*/
|
|
395
|
+
formatOn = input(undefined, /* @ts-ignore */
|
|
396
|
+
...(ngDevMode ? [{ debugName: "formatOn" }] : /* istanbul ignore next */ []));
|
|
397
|
+
min = input(undefined, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
398
|
+
max = input(undefined, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
399
|
+
/** What the arrows and the two buttons move by, in major units. */
|
|
400
|
+
step = input(1, { ...(ngDevMode ? { debugName: "step" } : /* istanbul ignore next */ {}), transform: (raw) => optionalNumber(raw) ?? 1 });
|
|
401
|
+
/** The amount `Shift` and the page keys move by. Defaults to `step * 10`. */
|
|
402
|
+
largeStep = input(undefined, { ...(ngDevMode ? { debugName: "largeStep" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
403
|
+
/** The amount `Alt` moves by. Defaults to `step / 10`. */
|
|
404
|
+
smallStep = input(undefined, { ...(ngDevMode ? { debugName: "smallStep" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
405
|
+
/** Where an empty control starts stepping from. Defaults to `min`, then nought. */
|
|
406
|
+
stepFrom = input(undefined, { ...(ngDevMode ? { debugName: "stepFrom" } : /* istanbul ignore next */ {}), transform: optionalNumber });
|
|
407
|
+
/** Where an amount outside the range goes, and when. Defaults to the token, then `blur`. */
|
|
408
|
+
clamp = input(undefined, /* @ts-ignore */
|
|
409
|
+
...(ngDevMode ? [{ debugName: "clamp" }] : /* istanbul ignore next */ []));
|
|
410
|
+
/** Any other `Intl.NumberFormatOptions`. Every key here wins over the family's own. */
|
|
411
|
+
format = input(undefined, /* @ts-ignore */
|
|
412
|
+
...(ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []));
|
|
413
|
+
/**
|
|
414
|
+
* BCP 47. Decides the separators and the numbering system, never the symbol.
|
|
415
|
+
* Defaults to the language in force (`provideSlotted`).
|
|
416
|
+
*/
|
|
417
|
+
locale = input(undefined, /* @ts-ignore */
|
|
418
|
+
...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
|
|
419
|
+
/**
|
|
420
|
+
* Lets the wheel move the amount while the control has focus. Off by default:
|
|
421
|
+
* a reader scrolling a form must not change a total by passing over it.
|
|
422
|
+
*/
|
|
423
|
+
wheel = input(false, { ...(ngDevMode ? { debugName: "wheel" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
424
|
+
/**
|
|
425
|
+
* Whether an emptied control holds nothing, or nought.
|
|
426
|
+
*
|
|
427
|
+
* Off, because an amount is not an optional number: a total, a price and a
|
|
428
|
+
* balance are all nought when nothing is in them. Cleared, the control shows
|
|
429
|
+
* `0,00` and emits `0`. On, it can be left empty and emits `null`.
|
|
430
|
+
*/
|
|
431
|
+
allowEmpty = input(false, { ...(ngDevMode ? { debugName: "allowEmpty" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
432
|
+
/** Unstated rather than `false`, so the control defers to the field. */
|
|
433
|
+
disabled = input(undefined, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: (raw) => (raw === undefined ? undefined : booleanAttribute(raw)) });
|
|
434
|
+
readOnly = input(undefined, { ...(ngDevMode ? { debugName: "readOnly" } : /* istanbul ignore next */ {}), transform: (raw) => (raw === undefined ? undefined : booleanAttribute(raw)) });
|
|
435
|
+
invalid = input(undefined, { ...(ngDevMode ? { debugName: "invalid" } : /* istanbul ignore next */ {}), transform: (raw) => (raw === undefined ? undefined : booleanAttribute(raw)) });
|
|
436
|
+
/**
|
|
437
|
+
* One output for one transition, carrying the amount, the amount it replaces,
|
|
438
|
+
* the currency, the exact integer of minor units, the reason, the originating
|
|
439
|
+
* event and `cancel()`. There is no `[(value)]`, because a two-way binding has
|
|
440
|
+
* one slot and can carry none of those.
|
|
441
|
+
*/
|
|
442
|
+
valueChange = output();
|
|
443
|
+
element = inject(ElementRef).nativeElement;
|
|
444
|
+
/**
|
|
445
|
+
* The frame around the control. Injected without `optional`, so an `input`
|
|
446
|
+
* written without it fails at construction rather than silently losing its
|
|
447
|
+
* border and its ring.
|
|
448
|
+
*/
|
|
449
|
+
currencyField = inject(SlCurrencyField);
|
|
450
|
+
field = inject(SlField, { optional: true });
|
|
451
|
+
defaults = injectCurrencyFieldDefaults();
|
|
452
|
+
appLocale = injectLocale();
|
|
453
|
+
writtenId = inject(new HostAttributeToken('id'), { optional: true });
|
|
454
|
+
writtenName = inject(new HostAttributeToken('name'), { optional: true });
|
|
455
|
+
writtenForm = inject(new HostAttributeToken('form'), { optional: true });
|
|
456
|
+
writtenInputMode = inject(new HostAttributeToken('inputmode'), {
|
|
457
|
+
optional: true,
|
|
458
|
+
});
|
|
459
|
+
writtenAutocomplete = inject(new HostAttributeToken('autocomplete'), {
|
|
460
|
+
optional: true,
|
|
461
|
+
});
|
|
462
|
+
writtenDescribedBy = inject(new HostAttributeToken('aria-describedby'), {
|
|
463
|
+
optional: true,
|
|
464
|
+
});
|
|
465
|
+
writtenInvalid = inject(new HostAttributeToken('aria-invalid'), {
|
|
466
|
+
optional: true,
|
|
467
|
+
});
|
|
468
|
+
writtenRequired = inject(new HostAttributeToken('aria-required'), {
|
|
469
|
+
optional: true,
|
|
470
|
+
});
|
|
471
|
+
writtenReadonly = inject(new HostAttributeToken('readonly'), { optional: true });
|
|
472
|
+
/** What the family holds when nobody else owns it. */
|
|
473
|
+
own = signal(null, /* @ts-ignore */
|
|
474
|
+
...(ngDevMode ? [{ debugName: "own" }] : /* istanbul ignore next */ []));
|
|
475
|
+
/** What the element is showing. Never a second copy of the amount. */
|
|
476
|
+
text = signal('', /* @ts-ignore */
|
|
477
|
+
...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
478
|
+
formDisabled = signal(undefined, /* @ts-ignore */
|
|
479
|
+
...(ngDevMode ? [{ debugName: "formDisabled" }] : /* istanbul ignore next */ []));
|
|
480
|
+
/**
|
|
481
|
+
* The sign, while the field holds nothing to carry it. Typing `-` into an
|
|
482
|
+
* empty amount and then a digit produces a debit, which a sign derived from
|
|
483
|
+
* the text alone could not express.
|
|
484
|
+
*/
|
|
485
|
+
pendingNegative = false;
|
|
486
|
+
onChangeFn = () => undefined;
|
|
487
|
+
onTouchedFn = () => undefined;
|
|
488
|
+
/**
|
|
489
|
+
* One formatter, rebuilt only when something it reads actually changes. The
|
|
490
|
+
* options object is read through a signal, so an inline object handed on
|
|
491
|
+
* every change detection does not rebuild the parser.
|
|
492
|
+
*/
|
|
493
|
+
formatter = computed(() => {
|
|
494
|
+
const currency = this.currency() ?? this.defaults.currency;
|
|
495
|
+
if (currency === undefined) {
|
|
496
|
+
/* Loudly, and where it is written: a currency field cannot decide how
|
|
497
|
+
many digits a cent has, and one that guessed two would write ¥12,34. */
|
|
498
|
+
throw new Error('slCurrencyFieldInput needs a currency: set [currency], or provideCurrencyFieldDefaults({ currency }).');
|
|
499
|
+
}
|
|
500
|
+
const fractionDigits = this.fractionDigits();
|
|
501
|
+
const options = this.format();
|
|
502
|
+
return createCurrencyFormat({
|
|
503
|
+
currency,
|
|
504
|
+
currencyDisplay: this.currencyDisplay() ?? this.defaults.currencyDisplay,
|
|
505
|
+
locale: this.locale() ?? this.appLocale(),
|
|
506
|
+
...(fractionDigits === undefined ? {} : { fractionDigits }),
|
|
507
|
+
...(options === undefined ? {} : { options }),
|
|
508
|
+
});
|
|
509
|
+
}, /* @ts-ignore */
|
|
510
|
+
...(ngDevMode ? [{ debugName: "formatter" }] : /* istanbul ignore next */ []));
|
|
511
|
+
/** Present means the consumer owns it; absent means the directive does. */
|
|
512
|
+
controlled = computed(() => this.value() !== undefined, /* @ts-ignore */
|
|
513
|
+
...(ngDevMode ? [{ debugName: "controlled" }] : /* istanbul ignore next */ []));
|
|
514
|
+
numberValue = computed(() => {
|
|
515
|
+
const bound = this.value();
|
|
516
|
+
const held = bound === undefined ? this.own() : bound;
|
|
517
|
+
/* The amount the family settles on when nothing is left in the control.
|
|
518
|
+
It governs what is emitted, what `aria-valuenow` reports and what the
|
|
519
|
+
hidden input submits alike, so the three never disagree. */
|
|
520
|
+
return this.allowEmpty() ? held : (held ?? 0);
|
|
521
|
+
}, /* @ts-ignore */
|
|
522
|
+
...(ngDevMode ? [{ debugName: "numberValue" }] : /* istanbul ignore next */ []));
|
|
523
|
+
valueText = computed(() => {
|
|
524
|
+
const shown = this.text();
|
|
525
|
+
return shown === '' ? null : shown;
|
|
526
|
+
}, /* @ts-ignore */
|
|
527
|
+
...(ngDevMode ? [{ debugName: "valueText" }] : /* istanbul ignore next */ []));
|
|
528
|
+
resolvedEntry = computed(() => this.entry() ?? this.defaults.entry, /* @ts-ignore */
|
|
529
|
+
...(ngDevMode ? [{ debugName: "resolvedEntry" }] : /* istanbul ignore next */ []));
|
|
530
|
+
resolvedFormatOn = computed(() => this.formatOn() ?? this.defaults.formatOn, /* @ts-ignore */
|
|
531
|
+
...(ngDevMode ? [{ debugName: "resolvedFormatOn" }] : /* istanbul ignore next */ []));
|
|
532
|
+
resolvedClamp = computed(() => this.clamp() ?? this.defaults.clamp, /* @ts-ignore */
|
|
533
|
+
...(ngDevMode ? [{ debugName: "resolvedClamp" }] : /* istanbul ignore next */ []));
|
|
534
|
+
resolvedDisabled = computed(() => this.disabled() ?? this.formDisabled() ?? this.field?.resolvedDisabled(), /* @ts-ignore */
|
|
535
|
+
...(ngDevMode ? [{ debugName: "resolvedDisabled" }] : /* istanbul ignore next */ []));
|
|
536
|
+
resolvedReadOnly = computed(() => this.readOnly() ??
|
|
537
|
+
(this.writtenReadonly === null ? undefined : true) ??
|
|
538
|
+
this.field?.resolvedReadOnly(), /* @ts-ignore */
|
|
539
|
+
...(ngDevMode ? [{ debugName: "resolvedReadOnly" }] : /* istanbul ignore next */ []));
|
|
540
|
+
resolvedInvalid = computed(() => this.invalid() ?? this.field?.invalid(), /* @ts-ignore */
|
|
541
|
+
...(ngDevMode ? [{ debugName: "resolvedInvalid" }] : /* istanbul ignore next */ []));
|
|
542
|
+
controlId = computed(() => this.writtenId ?? this.field?.ids().control ?? null, /* @ts-ignore */
|
|
543
|
+
...(ngDevMode ? [{ debugName: "controlId" }] : /* istanbul ignore next */ []));
|
|
544
|
+
submissionName = computed(() => this.writtenName, /* @ts-ignore */
|
|
545
|
+
...(ngDevMode ? [{ debugName: "submissionName" }] : /* istanbul ignore next */ []));
|
|
546
|
+
submissionForm = computed(() => this.writtenForm, /* @ts-ignore */
|
|
547
|
+
...(ngDevMode ? [{ debugName: "submissionForm" }] : /* istanbul ignore next */ []));
|
|
548
|
+
parsedText = computed(() => this.formatter().parse(this.text()), /* @ts-ignore */
|
|
549
|
+
...(ngDevMode ? [{ debugName: "parsedText" }] : /* istanbul ignore next */ []));
|
|
550
|
+
atMax = computed(() => {
|
|
551
|
+
const max = this.max();
|
|
552
|
+
const current = this.parsedText();
|
|
553
|
+
return max !== undefined && current !== null && current >= max;
|
|
554
|
+
}, /* @ts-ignore */
|
|
555
|
+
...(ngDevMode ? [{ debugName: "atMax" }] : /* istanbul ignore next */ []));
|
|
556
|
+
atMin = computed(() => {
|
|
557
|
+
const min = this.min();
|
|
558
|
+
const current = this.parsedText();
|
|
559
|
+
return min !== undefined && current !== null && current <= min;
|
|
560
|
+
}, /* @ts-ignore */
|
|
561
|
+
...(ngDevMode ? [{ debugName: "atMin" }] : /* istanbul ignore next */ []));
|
|
562
|
+
/** Whether the range admits a debit at all. There is no `allowNegative`. */
|
|
563
|
+
allowNegative = computed(() => {
|
|
564
|
+
const min = this.min();
|
|
565
|
+
return min === undefined || min < 0;
|
|
566
|
+
}, /* @ts-ignore */
|
|
567
|
+
...(ngDevMode ? [{ debugName: "allowNegative" }] : /* istanbul ignore next */ []));
|
|
568
|
+
/**
|
|
569
|
+
* The software keyboard, derived from the props rather than from the user
|
|
570
|
+
* agent. Cents-first entry types neither a separator nor a sign into the
|
|
571
|
+
* digits, so the numeric keypad is complete for the task.
|
|
572
|
+
*/
|
|
573
|
+
resolvedInputMode = computed(() => {
|
|
574
|
+
if (this.writtenInputMode !== null)
|
|
575
|
+
return this.writtenInputMode;
|
|
576
|
+
if (this.resolvedEntry() === 'cents')
|
|
577
|
+
return 'numeric';
|
|
578
|
+
if (this.allowNegative())
|
|
579
|
+
return 'text';
|
|
580
|
+
return this.formatter().maximumFractionDigits > 0 ? 'decimal' : 'numeric';
|
|
581
|
+
}, /* @ts-ignore */
|
|
582
|
+
...(ngDevMode ? [{ debugName: "resolvedInputMode" }] : /* istanbul ignore next */ []));
|
|
583
|
+
/**
|
|
584
|
+
* `transaction-amount` is the token a payment amount belongs to, and the
|
|
585
|
+
* default is `off`: most amounts in a back office are not payment amounts,
|
|
586
|
+
* and a browser filling an invoice total is worse than no help at all.
|
|
587
|
+
*/
|
|
588
|
+
resolvedAutocomplete = computed(() => this.writtenAutocomplete ?? 'off', /* @ts-ignore */
|
|
589
|
+
...(ngDevMode ? [{ debugName: "resolvedAutocomplete" }] : /* istanbul ignore next */ []));
|
|
590
|
+
describedBy = computed(() => {
|
|
591
|
+
const merged = [this.writtenDescribedBy, this.field?.describedBy()].filter(Boolean);
|
|
592
|
+
return merged.length === 0 ? null : merged.join(' ');
|
|
593
|
+
}, /* @ts-ignore */
|
|
594
|
+
...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
|
|
595
|
+
ariaInvalid = computed(() => this.writtenInvalid ?? (this.resolvedInvalid() === true ? 'true' : null), /* @ts-ignore */
|
|
596
|
+
...(ngDevMode ? [{ debugName: "ariaInvalid" }] : /* istanbul ignore next */ []));
|
|
597
|
+
ariaRequired = computed(() => this.writtenRequired ?? (this.field?.required() === true ? 'true' : null), /* @ts-ignore */
|
|
598
|
+
...(ngDevMode ? [{ debugName: "ariaRequired" }] : /* istanbul ignore next */ []));
|
|
599
|
+
disabledAttribute = computed(() => this.resolvedDisabled() === true ? '' : null, /* @ts-ignore */
|
|
600
|
+
...(ngDevMode ? [{ debugName: "disabledAttribute" }] : /* istanbul ignore next */ []));
|
|
601
|
+
readonlyAttribute = computed(() => this.resolvedReadOnly() === true ? '' : null, /* @ts-ignore */
|
|
602
|
+
...(ngDevMode ? [{ debugName: "readonlyAttribute" }] : /* istanbul ignore next */ []));
|
|
603
|
+
constructor() {
|
|
604
|
+
/* The element shows what the family holds, and the text is only rewritten
|
|
605
|
+
when it no longer means the same amount. */
|
|
606
|
+
effect(() => {
|
|
607
|
+
const next = this.numberValue();
|
|
608
|
+
const formatter = this.formatter();
|
|
609
|
+
if (Object.is(next, formatter.parse(this.text())))
|
|
610
|
+
return;
|
|
611
|
+
this.write(formatter.format(next));
|
|
612
|
+
});
|
|
613
|
+
this.attachWheel();
|
|
614
|
+
}
|
|
615
|
+
/**
|
|
616
|
+
* Angular creates every directive in a template before it binds any input, so
|
|
617
|
+
* the starting amount is read here rather than in the constructor: read
|
|
618
|
+
* there, `defaultValue` is always its own default and the control starts
|
|
619
|
+
* empty.
|
|
620
|
+
*/
|
|
621
|
+
ngOnInit() {
|
|
622
|
+
const bound = this.value();
|
|
623
|
+
const initial = bound === undefined ? this.defaultValue() : bound;
|
|
624
|
+
if (bound === undefined)
|
|
625
|
+
this.own.set(initial);
|
|
626
|
+
this.write(this.formatter().format(this.numberValue()));
|
|
627
|
+
}
|
|
628
|
+
/** The native element, for `focus()`, `select()` and `setSelectionRange()`. */
|
|
629
|
+
get inputElement() {
|
|
630
|
+
return this.element;
|
|
631
|
+
}
|
|
632
|
+
/** Steps up by one step and reports `programmatic`. */
|
|
633
|
+
increment() {
|
|
634
|
+
this.move(1, this.step(), 'programmatic', undefined);
|
|
635
|
+
}
|
|
636
|
+
/** Steps down by one step and reports `programmatic`. */
|
|
637
|
+
decrement() {
|
|
638
|
+
this.move(-1, this.step(), 'programmatic', undefined);
|
|
639
|
+
}
|
|
640
|
+
/** What a `slCurrencyFieldScrub` drag calls, once per whole step travelled. */
|
|
641
|
+
scrubBy(steps, source) {
|
|
642
|
+
if (steps === 0)
|
|
643
|
+
return;
|
|
644
|
+
const step = this.step();
|
|
645
|
+
const amount = source.shiftKey
|
|
646
|
+
? (this.largeStep() ?? step * 10)
|
|
647
|
+
: source.altKey
|
|
648
|
+
? (this.smallStep() ?? step / 10)
|
|
649
|
+
: step;
|
|
650
|
+
this.move(steps > 0 ? 1 : -1, amount * Math.abs(steps), 'pointer', source);
|
|
651
|
+
}
|
|
652
|
+
/** What the frame's two buttons call. Focus returns to the amount. */
|
|
653
|
+
stepBy(direction, source) {
|
|
654
|
+
this.element.focus();
|
|
655
|
+
this.move(direction, this.step(), 'pointer', source);
|
|
656
|
+
}
|
|
657
|
+
writeValue(value) {
|
|
658
|
+
this.own.set(value ?? null);
|
|
659
|
+
this.write(this.formatter().format(this.settledAmount(value ?? null)));
|
|
660
|
+
}
|
|
661
|
+
registerOnChange(fn) {
|
|
662
|
+
this.onChangeFn = fn;
|
|
663
|
+
}
|
|
664
|
+
registerOnTouched(fn) {
|
|
665
|
+
this.onTouchedFn = fn;
|
|
666
|
+
}
|
|
667
|
+
setDisabledState(isDisabled) {
|
|
668
|
+
this.formDisabled.set(isDisabled);
|
|
669
|
+
}
|
|
670
|
+
onInput(event) {
|
|
671
|
+
const next = this.element.value;
|
|
672
|
+
const formatter = this.formatter();
|
|
673
|
+
if (this.resolvedEntry() !== 'cents') {
|
|
674
|
+
const native = event;
|
|
675
|
+
/* An IME commits a whole run, and a run reshaped half way through is a
|
|
676
|
+
run the engine can no longer finish. */
|
|
677
|
+
if (this.resolvedFormatOn() !== 'change' || native.isComposing) {
|
|
678
|
+
this.text.set(next);
|
|
679
|
+
this.request(this.settledAmount(formatter.parse(next)), 'keyboard', event);
|
|
680
|
+
return;
|
|
681
|
+
}
|
|
682
|
+
const caret = this.element.selectionStart ?? next.length;
|
|
683
|
+
const deletion = native.inputType?.startsWith('delete') === true;
|
|
684
|
+
const edited = deletion
|
|
685
|
+
? formatter.deleteAcrossSeparator(this.text(), { text: next, caret }, native.inputType === 'deleteContentForward' ? 1 : -1)
|
|
686
|
+
: { text: next, caret };
|
|
687
|
+
const shaped = formatter.formatWhileTyping(edited);
|
|
688
|
+
this.write(shaped.text);
|
|
689
|
+
/* `write` puts the caret after the last digit under cents-first entry and
|
|
690
|
+
leaves it alone otherwise, so this is the only place it moves here. */
|
|
691
|
+
if (this.element.ownerDocument.activeElement === this.element) {
|
|
692
|
+
this.element.setSelectionRange(shaped.caret, shaped.caret);
|
|
693
|
+
}
|
|
694
|
+
this.request(this.settledAmount(formatter.parse(shaped.text)), 'keyboard', event);
|
|
695
|
+
return;
|
|
696
|
+
}
|
|
697
|
+
const inputType = event.inputType;
|
|
698
|
+
const edit = formatter.editFromText({
|
|
699
|
+
text: next,
|
|
700
|
+
/* What the element showed before this keystroke, which is what turns the
|
|
701
|
+
digits the reader added into digits at the right rather than digits
|
|
702
|
+
where the caret happened to be. */
|
|
703
|
+
previous: this.text(),
|
|
704
|
+
negative: this.negativeNow(),
|
|
705
|
+
allowNegative: this.allowNegative(),
|
|
706
|
+
allowEmpty: this.allowEmpty(),
|
|
707
|
+
...(inputType === undefined ? {} : { inputType }),
|
|
708
|
+
});
|
|
709
|
+
this.pendingNegative = edit.value !== null && edit.value < 0;
|
|
710
|
+
this.settle(edit.value, this.request(edit.value, 'keyboard', event, edit.minorUnits));
|
|
711
|
+
}
|
|
712
|
+
/**
|
|
713
|
+
* The keystroke filter. `beforeinput` is where a keystroke, a paste and a
|
|
714
|
+
* drop all arrive before the element changes, and it is the only place a
|
|
715
|
+
* character that cannot be part of an amount can be refused without moving
|
|
716
|
+
* the caret.
|
|
717
|
+
*/
|
|
718
|
+
onBeforeInput(event) {
|
|
719
|
+
if (event.defaultPrevented)
|
|
720
|
+
return;
|
|
721
|
+
/* An IME commits a whole run; refusing it character by character would
|
|
722
|
+
make a full-width `123` untypeable. */
|
|
723
|
+
if (event.isComposing)
|
|
724
|
+
return;
|
|
725
|
+
if (event.inputType.startsWith('delete'))
|
|
726
|
+
return;
|
|
727
|
+
/* A paste is parsed rather than filtered: it is the reader's own amount. */
|
|
728
|
+
if (event.inputType === 'insertFromPaste' || event.inputType === 'insertFromDrop')
|
|
729
|
+
return;
|
|
730
|
+
const formatter = this.formatter();
|
|
731
|
+
const start = this.element.selectionStart ?? this.element.value.length;
|
|
732
|
+
const finish = this.element.selectionEnd ?? this.element.value.length;
|
|
733
|
+
const inserted = event.data ?? '';
|
|
734
|
+
const next = this.element.value.slice(0, start) + inserted + this.element.value.slice(finish);
|
|
735
|
+
const min = this.min();
|
|
736
|
+
const max = this.max();
|
|
737
|
+
if (this.resolvedEntry() !== 'cents') {
|
|
738
|
+
if (!formatter.isPartial(next)) {
|
|
739
|
+
event.preventDefault();
|
|
740
|
+
return;
|
|
741
|
+
}
|
|
742
|
+
if (this.resolvedClamp() !== 'strict')
|
|
743
|
+
return;
|
|
744
|
+
const parsed = formatter.parse(next);
|
|
745
|
+
if (parsed === null)
|
|
746
|
+
return;
|
|
747
|
+
if ((min !== undefined && parsed < min) || (max !== undefined && parsed > max)) {
|
|
748
|
+
event.preventDefault();
|
|
749
|
+
}
|
|
750
|
+
return;
|
|
751
|
+
}
|
|
752
|
+
/* The sign is a key rather than a digit, so `-` pressed twice does not
|
|
753
|
+
produce two signs and never enters the digit run. */
|
|
754
|
+
if (SIGN_KEYS.has(inserted)) {
|
|
755
|
+
event.preventDefault();
|
|
756
|
+
if (!this.allowNegative())
|
|
757
|
+
return;
|
|
758
|
+
const wanted = inserted !== '+';
|
|
759
|
+
this.pendingNegative = wanted;
|
|
760
|
+
const current = this.numberValue();
|
|
761
|
+
if (current === null || current === 0 || current < 0 === wanted)
|
|
762
|
+
return;
|
|
763
|
+
const flipped = -current;
|
|
764
|
+
this.settle(flipped, this.request(flipped, 'keyboard', event, formatter.toMinorUnits(flipped)));
|
|
765
|
+
return;
|
|
766
|
+
}
|
|
767
|
+
if (formatter.digitsOf(inserted).length !== [...inserted].length) {
|
|
768
|
+
event.preventDefault();
|
|
769
|
+
return;
|
|
770
|
+
}
|
|
771
|
+
/* Fifteen digits is where a double stops holding a cent, so the text stops
|
|
772
|
+
growing rather than rounding silently. */
|
|
773
|
+
if (formatter.digitsOf(next).length > MAX_AMOUNT_DIGITS) {
|
|
774
|
+
event.preventDefault();
|
|
775
|
+
return;
|
|
776
|
+
}
|
|
777
|
+
if (this.resolvedClamp() !== 'strict')
|
|
778
|
+
return;
|
|
779
|
+
const edit = formatter.editFromText({
|
|
780
|
+
text: next,
|
|
781
|
+
previous: this.element.value,
|
|
782
|
+
negative: this.negativeNow(),
|
|
783
|
+
allowNegative: this.allowNegative(),
|
|
784
|
+
allowEmpty: this.allowEmpty(),
|
|
785
|
+
});
|
|
786
|
+
if (edit.value === null)
|
|
787
|
+
return;
|
|
788
|
+
if ((min !== undefined && edit.value < min) || (max !== undefined && edit.value > max)) {
|
|
789
|
+
event.preventDefault();
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
onKeyDown(event) {
|
|
793
|
+
if (event.defaultPrevented)
|
|
794
|
+
return;
|
|
795
|
+
if (this.resolvedDisabled() === true || this.resolvedReadOnly() === true)
|
|
796
|
+
return;
|
|
797
|
+
const step = this.step();
|
|
798
|
+
const large = this.largeStep() ?? step * 10;
|
|
799
|
+
const small = this.smallStep() ?? step / 10;
|
|
800
|
+
const amount = event.shiftKey ? large : event.altKey ? small : step;
|
|
801
|
+
switch (event.key) {
|
|
802
|
+
case 'ArrowUp':
|
|
803
|
+
event.preventDefault();
|
|
804
|
+
this.move(1, amount, 'keyboard', event);
|
|
805
|
+
return;
|
|
806
|
+
case 'ArrowDown':
|
|
807
|
+
event.preventDefault();
|
|
808
|
+
this.move(-1, amount, 'keyboard', event);
|
|
809
|
+
return;
|
|
810
|
+
case 'PageUp':
|
|
811
|
+
event.preventDefault();
|
|
812
|
+
this.move(1, large, 'keyboard', event);
|
|
813
|
+
return;
|
|
814
|
+
case 'PageDown':
|
|
815
|
+
event.preventDefault();
|
|
816
|
+
this.move(-1, large, 'keyboard', event);
|
|
817
|
+
return;
|
|
818
|
+
case 'Home': {
|
|
819
|
+
const min = this.min();
|
|
820
|
+
if (min === undefined || event.ctrlKey || event.metaKey)
|
|
821
|
+
return;
|
|
822
|
+
event.preventDefault();
|
|
823
|
+
this.settle(min, this.request(min, 'keyboard', event));
|
|
824
|
+
return;
|
|
825
|
+
}
|
|
826
|
+
case 'End': {
|
|
827
|
+
const max = this.max();
|
|
828
|
+
if (max === undefined || event.ctrlKey || event.metaKey)
|
|
829
|
+
return;
|
|
830
|
+
event.preventDefault();
|
|
831
|
+
this.settle(max, this.request(max, 'keyboard', event));
|
|
832
|
+
return;
|
|
833
|
+
}
|
|
834
|
+
case 'Enter':
|
|
835
|
+
/* Committed and not intercepted: a single-line control submits its
|
|
836
|
+
form, which is the platform's behaviour. */
|
|
837
|
+
this.commit('keyboard', event);
|
|
838
|
+
return;
|
|
839
|
+
default:
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
onBlur(event) {
|
|
843
|
+
this.onTouchedFn();
|
|
844
|
+
this.commit('blur', event);
|
|
845
|
+
}
|
|
846
|
+
/**
|
|
847
|
+
* The wheel, when it is asked for, and never otherwise. It is a native
|
|
848
|
+
* listener rather than a host binding because the event has to be cancelled,
|
|
849
|
+
* and a host listener on `wheel` is passive in some browsers.
|
|
850
|
+
*/
|
|
851
|
+
attachWheel() {
|
|
852
|
+
const onWheel = (event) => {
|
|
853
|
+
if (!this.wheel())
|
|
854
|
+
return;
|
|
855
|
+
if (this.resolvedDisabled() === true || this.resolvedReadOnly() === true)
|
|
856
|
+
return;
|
|
857
|
+
if (this.element.ownerDocument.activeElement !== this.element)
|
|
858
|
+
return;
|
|
859
|
+
if (event.deltaY === 0)
|
|
860
|
+
return;
|
|
861
|
+
event.preventDefault();
|
|
862
|
+
this.move(event.deltaY < 0 ? 1 : -1, this.step(), 'pointer', event);
|
|
863
|
+
};
|
|
864
|
+
this.element.addEventListener('wheel', onWheel, { passive: false });
|
|
865
|
+
inject(DestroyRef).onDestroy(() => this.element.removeEventListener('wheel', onWheel));
|
|
866
|
+
}
|
|
867
|
+
/** The sign at the moment of the edit, rather than at the last render. */
|
|
868
|
+
negativeNow() {
|
|
869
|
+
const current = this.numberValue();
|
|
870
|
+
/* Nought has no sign — `-0` and `0` are one amount — so a debit held
|
|
871
|
+
against an empty or nought amount can only come from the key. */
|
|
872
|
+
return current === null || current === 0 ? this.pendingNegative : current < 0;
|
|
873
|
+
}
|
|
874
|
+
/** Formats what the reader typed and puts the amount back in range. */
|
|
875
|
+
commit(reason, source) {
|
|
876
|
+
const formatter = this.formatter();
|
|
877
|
+
let next = formatter.parse(this.text());
|
|
878
|
+
/* The commit is where a half-typed amount stops being half typed, so it is
|
|
879
|
+
where an emptied one becomes the nought it means. */
|
|
880
|
+
if (next === null && !this.allowEmpty())
|
|
881
|
+
next = 0;
|
|
882
|
+
if (next !== null && this.resolvedClamp() !== 'none') {
|
|
883
|
+
next = clamp(next, this.min() ?? Number.NEGATIVE_INFINITY, this.max() ?? Number.POSITIVE_INFINITY);
|
|
884
|
+
}
|
|
885
|
+
this.settle(next, this.request(next, reason, source));
|
|
886
|
+
}
|
|
887
|
+
move(direction, amount, reason, source) {
|
|
888
|
+
const min = this.min();
|
|
889
|
+
const max = this.max();
|
|
890
|
+
const stepFrom = this.stepFrom();
|
|
891
|
+
const next = stepNumber({
|
|
892
|
+
value: this.formatter().parse(this.text()),
|
|
893
|
+
direction,
|
|
894
|
+
step: amount,
|
|
895
|
+
...(min === undefined ? {} : { min }),
|
|
896
|
+
...(max === undefined ? {} : { max }),
|
|
897
|
+
...(stepFrom === undefined ? {} : { stepFrom }),
|
|
898
|
+
});
|
|
899
|
+
this.settle(next, this.request(next, reason, source));
|
|
900
|
+
}
|
|
901
|
+
/**
|
|
902
|
+
* Asks to move, and says whether anything did. A refused request answers
|
|
903
|
+
* `false`, and the caller uses that to decide what the element shows.
|
|
904
|
+
*/
|
|
905
|
+
request(next, reason, source, minorUnits) {
|
|
906
|
+
const formatter = this.formatter();
|
|
907
|
+
const current = this.numberValue();
|
|
908
|
+
if (Object.is(next, current))
|
|
909
|
+
return false;
|
|
910
|
+
let cancelled = false;
|
|
911
|
+
const state = createControllable({
|
|
912
|
+
controlled: undefined,
|
|
913
|
+
initial: current,
|
|
914
|
+
onRequest: (pending) => {
|
|
915
|
+
this.valueChange.emit(withAmount(pending, formatter.currency, minorUnits ?? formatter.toMinorUnits(next)));
|
|
916
|
+
cancelled = pending.cancelled;
|
|
917
|
+
},
|
|
918
|
+
});
|
|
919
|
+
state.request(next, reason, source);
|
|
920
|
+
if (cancelled)
|
|
921
|
+
return false;
|
|
922
|
+
this.onChangeFn(next);
|
|
923
|
+
/* A controlled control never moves its own amount: it asks, and waits for
|
|
924
|
+
the consumer's next value. */
|
|
925
|
+
if (this.controlled())
|
|
926
|
+
return false;
|
|
927
|
+
this.own.set(next);
|
|
928
|
+
return true;
|
|
929
|
+
}
|
|
930
|
+
/** Nothing, or the nought it means. The one rule `allowEmpty` decides. */
|
|
931
|
+
settledAmount(amount) {
|
|
932
|
+
return this.allowEmpty() ? amount : (amount ?? 0);
|
|
933
|
+
}
|
|
934
|
+
settle(next, moved) {
|
|
935
|
+
const shown = moved ? next : this.numberValue();
|
|
936
|
+
this.write(this.formatter().format(shown));
|
|
937
|
+
}
|
|
938
|
+
/**
|
|
939
|
+
* One place the element's text is written, so the signal never drifts from
|
|
940
|
+
* it. Under cents-first entry the caret goes back after the last digit —
|
|
941
|
+
* before whatever affix the locale writes at the end — because that is the
|
|
942
|
+
* only position where the next keystroke means anything.
|
|
943
|
+
*/
|
|
944
|
+
write(value) {
|
|
945
|
+
if (this.element.value !== value)
|
|
946
|
+
this.element.value = value;
|
|
947
|
+
this.text.set(value);
|
|
948
|
+
if (this.resolvedEntry() !== 'cents')
|
|
949
|
+
return;
|
|
950
|
+
if (this.element.ownerDocument.activeElement !== this.element)
|
|
951
|
+
return;
|
|
952
|
+
const formatter = this.formatter();
|
|
953
|
+
let position = value.length;
|
|
954
|
+
for (let index = value.length; index > 0; index -= 1) {
|
|
955
|
+
if (formatter.digitsOf(value[index - 1] ?? '') !== '') {
|
|
956
|
+
position = index;
|
|
957
|
+
break;
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
this.element.setSelectionRange(position, position);
|
|
961
|
+
}
|
|
962
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlCurrencyFieldInput, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
963
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlCurrencyFieldInput, isStandalone: true, selector: "input[slCurrencyFieldInput]", inputs: { currency: { classPropertyName: "currency", publicName: "currency", isSignal: true, isRequired: false, transformFunction: null }, currencyDisplay: { classPropertyName: "currencyDisplay", publicName: "currencyDisplay", isSignal: true, isRequired: false, transformFunction: null }, fractionDigits: { classPropertyName: "fractionDigits", publicName: "fractionDigits", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, entry: { classPropertyName: "entry", publicName: "entry", isSignal: true, isRequired: false, transformFunction: null }, formatOn: { classPropertyName: "formatOn", publicName: "formatOn", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, largeStep: { classPropertyName: "largeStep", publicName: "largeStep", isSignal: true, isRequired: false, transformFunction: null }, smallStep: { classPropertyName: "smallStep", publicName: "smallStep", isSignal: true, isRequired: false, transformFunction: null }, stepFrom: { classPropertyName: "stepFrom", publicName: "stepFrom", isSignal: true, isRequired: false, transformFunction: null }, clamp: { classPropertyName: "clamp", publicName: "clamp", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, wheel: { classPropertyName: "wheel", publicName: "wheel", isSignal: true, isRequired: false, transformFunction: null }, allowEmpty: { classPropertyName: "allowEmpty", publicName: "allowEmpty", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, host: { attributes: { "data-part": "input", "autocorrect": "off", "spellcheck": "false" }, listeners: { "input": "onInput($event)", "beforeinput": "onBeforeInput($event)", "keydown": "onKeyDown($event)", "blur": "onBlur($event)" }, properties: { "attr.type": "'text'", "attr.role": "'spinbutton'", "attr.id": "controlId()", "attr.inputmode": "resolvedInputMode()", "attr.autocomplete": "resolvedAutocomplete()", "attr.aria-describedby": "describedBy()", "attr.aria-invalid": "ariaInvalid()", "attr.aria-required": "ariaRequired()", "attr.aria-valuenow": "numberValue()", "attr.aria-valuemin": "min() ?? null", "attr.aria-valuemax": "max() ?? null", "attr.aria-valuetext": "valueText()", "attr.name": "null", "attr.disabled": "disabledAttribute()", "attr.readonly": "readonlyAttribute()" } }, providers: [
|
|
964
|
+
{ provide: SlCurrencyFieldControl, useExisting: forwardRef(() => SlCurrencyFieldInput) },
|
|
965
|
+
{
|
|
966
|
+
provide: NG_VALUE_ACCESSOR,
|
|
967
|
+
useExisting: forwardRef(() => SlCurrencyFieldInput),
|
|
968
|
+
multi: true,
|
|
969
|
+
},
|
|
970
|
+
], exportAs: ["slCurrencyFieldInput"], ngImport: i0 });
|
|
971
|
+
}
|
|
972
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlCurrencyFieldInput, decorators: [{
|
|
973
|
+
type: Directive,
|
|
974
|
+
args: [{
|
|
975
|
+
selector: 'input[slCurrencyFieldInput]',
|
|
976
|
+
standalone: true,
|
|
977
|
+
exportAs: 'slCurrencyFieldInput',
|
|
978
|
+
providers: [
|
|
979
|
+
{ provide: SlCurrencyFieldControl, useExisting: forwardRef(() => SlCurrencyFieldInput) },
|
|
980
|
+
{
|
|
981
|
+
provide: NG_VALUE_ACCESSOR,
|
|
982
|
+
useExisting: forwardRef(() => SlCurrencyFieldInput),
|
|
983
|
+
multi: true,
|
|
984
|
+
},
|
|
985
|
+
],
|
|
986
|
+
host: {
|
|
987
|
+
'data-part': 'input',
|
|
988
|
+
autocorrect: 'off',
|
|
989
|
+
spellcheck: 'false',
|
|
990
|
+
/* Bound rather than static, so a consumer who wrote `type="number"` on a
|
|
991
|
+
currency field does not get the element that empties its own value. */
|
|
992
|
+
'[attr.type]': "'text'",
|
|
993
|
+
'[attr.role]': "'spinbutton'",
|
|
994
|
+
'[attr.id]': 'controlId()',
|
|
995
|
+
'[attr.inputmode]': 'resolvedInputMode()',
|
|
996
|
+
'[attr.autocomplete]': 'resolvedAutocomplete()',
|
|
997
|
+
'[attr.aria-describedby]': 'describedBy()',
|
|
998
|
+
'[attr.aria-invalid]': 'ariaInvalid()',
|
|
999
|
+
'[attr.aria-required]': 'ariaRequired()',
|
|
1000
|
+
'[attr.aria-valuenow]': 'numberValue()',
|
|
1001
|
+
'[attr.aria-valuemin]': 'min() ?? null',
|
|
1002
|
+
'[attr.aria-valuemax]': 'max() ?? null',
|
|
1003
|
+
'[attr.aria-valuetext]': 'valueText()',
|
|
1004
|
+
'[attr.name]': 'null',
|
|
1005
|
+
'[attr.disabled]': 'disabledAttribute()',
|
|
1006
|
+
'[attr.readonly]': 'readonlyAttribute()',
|
|
1007
|
+
'(input)': 'onInput($event)',
|
|
1008
|
+
'(beforeinput)': 'onBeforeInput($event)',
|
|
1009
|
+
'(keydown)': 'onKeyDown($event)',
|
|
1010
|
+
'(blur)': 'onBlur($event)',
|
|
1011
|
+
},
|
|
1012
|
+
}]
|
|
1013
|
+
}], ctorParameters: () => [], propDecorators: { currency: [{ type: i0.Input, args: [{ isSignal: true, alias: "currency", required: false }] }], currencyDisplay: [{ type: i0.Input, args: [{ isSignal: true, alias: "currencyDisplay", required: false }] }], fractionDigits: [{ type: i0.Input, args: [{ isSignal: true, alias: "fractionDigits", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }], entry: [{ type: i0.Input, args: [{ isSignal: true, alias: "entry", required: false }] }], formatOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatOn", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], largeStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "largeStep", required: false }] }], smallStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "smallStep", required: false }] }], stepFrom: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepFrom", required: false }] }], clamp: [{ type: i0.Input, args: [{ isSignal: true, alias: "clamp", required: false }] }], format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], wheel: [{ type: i0.Input, args: [{ isSignal: true, alias: "wheel", required: false }] }], allowEmpty: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowEmpty", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
|
|
1014
|
+
|
|
1015
|
+
/**
|
|
1016
|
+
* An adornment before the amount in the reading direction: a currency mark, a
|
|
1017
|
+
* period, an icon. Named for the direction rather than for a side, so the same
|
|
1018
|
+
* markup puts the mark before the amount in both directions.
|
|
1019
|
+
*
|
|
1020
|
+
* It is a sibling of the number rather than part of it. A symbol that belongs
|
|
1021
|
+
* *inside* the amount is what `currency` and `currencyDisplay` write, and it is
|
|
1022
|
+
* selected, copied and parsed with the amount; this one is none of those
|
|
1023
|
+
* things.
|
|
1024
|
+
*/
|
|
1025
|
+
class SlCurrencyFieldStart {
|
|
1026
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlCurrencyFieldStart, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1027
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlCurrencyFieldStart, isStandalone: true, selector: "[slCurrencyFieldStart]", host: { attributes: { "data-part": "start" } }, exportAs: ["slCurrencyFieldStart"], ngImport: i0 });
|
|
1028
|
+
}
|
|
1029
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlCurrencyFieldStart, decorators: [{
|
|
1030
|
+
type: Directive,
|
|
1031
|
+
args: [{
|
|
1032
|
+
selector: '[slCurrencyFieldStart]',
|
|
1033
|
+
standalone: true,
|
|
1034
|
+
exportAs: 'slCurrencyFieldStart',
|
|
1035
|
+
host: { 'data-part': 'start' },
|
|
1036
|
+
}]
|
|
1037
|
+
}] });
|
|
1038
|
+
/** An adornment after the amount in the reading direction. */
|
|
1039
|
+
class SlCurrencyFieldEnd {
|
|
1040
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlCurrencyFieldEnd, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1041
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlCurrencyFieldEnd, isStandalone: true, selector: "[slCurrencyFieldEnd]", host: { attributes: { "data-part": "end" } }, exportAs: ["slCurrencyFieldEnd"], ngImport: i0 });
|
|
1042
|
+
}
|
|
1043
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlCurrencyFieldEnd, decorators: [{
|
|
1044
|
+
type: Directive,
|
|
1045
|
+
args: [{
|
|
1046
|
+
selector: '[slCurrencyFieldEnd]',
|
|
1047
|
+
standalone: true,
|
|
1048
|
+
exportAs: 'slCurrencyFieldEnd',
|
|
1049
|
+
host: { 'data-part': 'end' },
|
|
1050
|
+
}]
|
|
1051
|
+
}] });
|
|
1052
|
+
/**
|
|
1053
|
+
* A mark that moves the amount when it is dragged sideways — the design
|
|
1054
|
+
* tools' gesture, shared with `slNumberFieldScrub`. Placed inside
|
|
1055
|
+
* `slCurrencyFieldStart` or `slCurrencyFieldEnd`, where the frame it belongs
|
|
1056
|
+
* to is its ancestor; the currency symbol, with `currencyDisplay="none"` on
|
|
1057
|
+
* the control, is the natural mark:
|
|
1058
|
+
*
|
|
1059
|
+
* ```html
|
|
1060
|
+
* <span slCurrencyFieldStart><span slCurrencyFieldScrub>R$</span></span>
|
|
1061
|
+
* ```
|
|
1062
|
+
*
|
|
1063
|
+
* Each `sensitivity` pixels towards the inline end is one step up; `Shift`
|
|
1064
|
+
* moves by the large step and `Alt` by the small one, as on the keyboard. It
|
|
1065
|
+
* is hidden from assistive technology and takes no focus: the input's arrow
|
|
1066
|
+
* keys are the same movement.
|
|
1067
|
+
*/
|
|
1068
|
+
class SlCurrencyFieldScrub {
|
|
1069
|
+
/** Pixels of horizontal travel per step. Defaults to 2. */
|
|
1070
|
+
sensitivity = input(SCRUB_SENSITIVITY, /* @ts-ignore */
|
|
1071
|
+
...(ngDevMode ? [{ debugName: "sensitivity" }] : /* istanbul ignore next */ []));
|
|
1072
|
+
frame = inject(SlCurrencyField);
|
|
1073
|
+
active = signal(false, /* @ts-ignore */
|
|
1074
|
+
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
1075
|
+
travel = null;
|
|
1076
|
+
begin(event) {
|
|
1077
|
+
const control = this.frame.control();
|
|
1078
|
+
if (event.button !== 0 || control === undefined || this.frame.inert())
|
|
1079
|
+
return;
|
|
1080
|
+
/* No text selection, and the caret stays in the amount the drag moves. */
|
|
1081
|
+
event.preventDefault();
|
|
1082
|
+
control.inputElement.focus();
|
|
1083
|
+
event.currentTarget?.setPointerCapture?.(event.pointerId);
|
|
1084
|
+
this.travel = createScrub({
|
|
1085
|
+
clientX: event.clientX,
|
|
1086
|
+
sensitivity: this.sensitivity(),
|
|
1087
|
+
rtl: getComputedStyle(control.inputElement).direction === 'rtl',
|
|
1088
|
+
});
|
|
1089
|
+
this.active.set(true);
|
|
1090
|
+
this.frame.scrubbing.set(true);
|
|
1091
|
+
}
|
|
1092
|
+
drag(event) {
|
|
1093
|
+
if (this.travel === null)
|
|
1094
|
+
return;
|
|
1095
|
+
this.frame.control()?.scrubBy(this.travel.steps(event.clientX), event);
|
|
1096
|
+
}
|
|
1097
|
+
end() {
|
|
1098
|
+
if (this.travel === null)
|
|
1099
|
+
return;
|
|
1100
|
+
this.travel = null;
|
|
1101
|
+
this.active.set(false);
|
|
1102
|
+
this.frame.scrubbing.set(false);
|
|
1103
|
+
}
|
|
1104
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlCurrencyFieldScrub, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1105
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlCurrencyFieldScrub, isStandalone: true, selector: "[slCurrencyFieldScrub]", inputs: { sensitivity: { classPropertyName: "sensitivity", publicName: "sensitivity", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "scrub", "aria-hidden": "true" }, listeners: { "pointerdown": "begin($event)", "pointermove": "drag($event)", "pointerup": "end()", "pointercancel": "end()", "lostpointercapture": "end()" }, properties: { "attr.data-scrubbing": "active() ? '' : null" } }, exportAs: ["slCurrencyFieldScrub"], ngImport: i0 });
|
|
1106
|
+
}
|
|
1107
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlCurrencyFieldScrub, decorators: [{
|
|
1108
|
+
type: Directive,
|
|
1109
|
+
args: [{
|
|
1110
|
+
selector: '[slCurrencyFieldScrub]',
|
|
1111
|
+
standalone: true,
|
|
1112
|
+
exportAs: 'slCurrencyFieldScrub',
|
|
1113
|
+
host: {
|
|
1114
|
+
'data-part': 'scrub',
|
|
1115
|
+
'aria-hidden': 'true',
|
|
1116
|
+
'[attr.data-scrubbing]': "active() ? '' : null",
|
|
1117
|
+
'(pointerdown)': 'begin($event)',
|
|
1118
|
+
'(pointermove)': 'drag($event)',
|
|
1119
|
+
'(pointerup)': 'end()',
|
|
1120
|
+
'(pointercancel)': 'end()',
|
|
1121
|
+
'(lostpointercapture)': 'end()',
|
|
1122
|
+
},
|
|
1123
|
+
}]
|
|
1124
|
+
}], propDecorators: { sensitivity: [{ type: i0.Input, args: [{ isSignal: true, alias: "sensitivity", required: false }] }] } });
|
|
1125
|
+
|
|
1126
|
+
/**
|
|
1127
|
+
* Generated bundle index. Do not edit.
|
|
1128
|
+
*/
|
|
1129
|
+
|
|
1130
|
+
export { CURRENCY_FIELD_DEFAULTS, SlCurrencyField, SlCurrencyFieldControl, SlCurrencyFieldEnd, SlCurrencyFieldInput, SlCurrencyFieldScrub, SlCurrencyFieldStart, injectCurrencyFieldDefaults, provideCurrencyFieldDefaults };
|
|
1131
|
+
//# sourceMappingURL=slotted-angular-currency-field.mjs.map
|