@slotted/angular 0.0.0-stage → 0.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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,137 @@
|
|
|
1
|
+
<!-- index: ./index.md -->
|
|
2
|
+
# number-field
|
|
3
|
+
|
|
4
|
+
`data-ui="number-field"` · Number input with steppers and formatting.
|
|
5
|
+
|
|
6
|
+
## Import
|
|
7
|
+
|
|
8
|
+
```ts
|
|
9
|
+
import {
|
|
10
|
+
provideNumberFieldDefaults,
|
|
11
|
+
SlNumberField,
|
|
12
|
+
SlNumberFieldEnd,
|
|
13
|
+
SlNumberFieldInput,
|
|
14
|
+
SlNumberFieldScrub,
|
|
15
|
+
SlNumberFieldStart,
|
|
16
|
+
} from '@slotted/angular/number-field';
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Selector: `[slNumberField]` · exportAs: `slNumberField`
|
|
20
|
+
|
|
21
|
+
## Minimal example
|
|
22
|
+
|
|
23
|
+
Example
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
import { Component } from '@angular/core';
|
|
27
|
+
import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
|
|
28
|
+
import { SlNumberField, SlNumberFieldEnd, SlNumberFieldInput } from '@slotted/angular/number-field';
|
|
29
|
+
|
|
30
|
+
@Component({
|
|
31
|
+
selector: 'app-number-field-basic',
|
|
32
|
+
imports: [
|
|
33
|
+
SlField,
|
|
34
|
+
SlFieldDescription,
|
|
35
|
+
SlFieldLabel,
|
|
36
|
+
SlNumberField,
|
|
37
|
+
SlNumberFieldEnd,
|
|
38
|
+
SlNumberFieldInput,
|
|
39
|
+
],
|
|
40
|
+
template: `
|
|
41
|
+
<div slField required>
|
|
42
|
+
<label slFieldLabel>Reorder point</label>
|
|
43
|
+
<div slNumberField>
|
|
44
|
+
<input slNumberFieldInput defaultValue="25" min="0" max="500" step="5" />
|
|
45
|
+
<span slNumberFieldEnd>units</span>
|
|
46
|
+
</div>
|
|
47
|
+
<span slFieldDescription>Chai is reordered when stock falls to this level.</span>
|
|
48
|
+
</div>
|
|
49
|
+
`,
|
|
50
|
+
})
|
|
51
|
+
export class NumberFieldBasic {}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Anatomy
|
|
55
|
+
|
|
56
|
+
| Part | Element | Required |
|
|
57
|
+
| --- | --- | --- |
|
|
58
|
+
| `root` | the element carrying slNumberField | yes |
|
|
59
|
+
| `input` | input[slNumberFieldInput], as text with role="spinbutton" | yes |
|
|
60
|
+
| `start` | any element carrying slNumberFieldStart | no |
|
|
61
|
+
| `end` | any element carrying slNumberFieldEnd | no |
|
|
62
|
+
| `scrub` | any element carrying slNumberFieldScrub, inside an adornment | no |
|
|
63
|
+
| `stepper` | span, rendered by the frame | no |
|
|
64
|
+
| `decrement` | button[type=button][tabindex=-1], rendered by the frame | no |
|
|
65
|
+
| `increment` | button[type=button][tabindex=-1], rendered by the frame | no |
|
|
66
|
+
|
|
67
|
+
## Props
|
|
68
|
+
|
|
69
|
+
| Name | Type | Default | Applies to | Description |
|
|
70
|
+
| --- | --- | --- | --- | --- |
|
|
71
|
+
| `value` | `number \| null` | — | input[slNumberFieldInput] | Makes the value controlled for the life of the component. null is empty, and empty is not zero: a required amount left blank and an amount of zero are different values. |
|
|
72
|
+
| `defaultValue` | `number \| null` | — | input[slNumberFieldInput] | The value an uncontrolled number field starts from. It is read once, in ngOnInit, because Angular binds inputs after it creates the directives. |
|
|
73
|
+
| `min` | `number` | — | input[slNumberFieldInput] | The smallest value. The decrement button is disabled at it, Home moves to it, and the snapToStep grid is counted from it. |
|
|
74
|
+
| `max` | `number` | — | input[slNumberFieldInput] | The largest value. The increment button is disabled at it, and End moves to it. |
|
|
75
|
+
| `step` | `number` | 1 | input[slNumberFieldInput] | What the arrow keys and the two buttons add or subtract. |
|
|
76
|
+
| `largeStep` | `number` | step × 10 | input[slNumberFieldInput] | What Shift with an arrow, Page Up and Page Down add or subtract, so a wide range is crossed without holding a key. |
|
|
77
|
+
| `smallStep` | `number` | step ÷ 10 | input[slNumberFieldInput] | What Alt with an arrow adds or subtracts. |
|
|
78
|
+
| `stepFrom` | `number` | min, or 0 | input[slNumberFieldInput] | The value the first step produces when the number field is empty. |
|
|
79
|
+
| `snapToStep` | `boolean` | false | input[slNumberFieldInput] | Steps to multiples of step counted from min, so with min 2 and step 3 the values are 2, 5, 8 and 11. A typed value moves to the nearest multiple when the number field commits. |
|
|
80
|
+
| `clamp` | `'blur' \| 'strict' \| 'none'` | blur | input[slNumberFieldInput], provideNumberFieldDefaults | What happens to a value outside min and max. blur returns it to the range when the number field commits, strict refuses the keystroke that would leave the range, and none keeps the value and sets aria-invalid and data-invalid while it is out of range. |
|
|
81
|
+
| `format` | `Intl.NumberFormatOptions` | — | input[slNumberFieldInput] | How the value is written and read back. Currency, percent and unit are formats of one number, and precision is set with minimumFractionDigits and maximumFractionDigits. When the number field commits, the number is rounded to the precision the input shows. |
|
|
82
|
+
| `formatOn` | `'change' \| 'commit'` | change | input[slNumberFieldInput], provideNumberFieldDefaults | When the text takes the format. change regroups it on every keystroke; commit keeps the typed text until blur, Enter, a stepper press or an arrow key. Under both, the number changes on every keystroke that parses. |
|
|
83
|
+
| `locale` | `string` | the locale of provideSlotted, then en-US | input[slNumberFieldInput] | A BCP 47 tag. It sets the decimal separator, the grouping and the digits, for the text written and the text read back. |
|
|
84
|
+
| `stepper` | `'stacked' \| 'split' \| 'none'` | stacked | [slNumberField], provideNumberFieldDefaults | Where the two buttons sit. split places them at either end of the frame, and its targets are at least 24 CSS pixels in both directions; none removes them. |
|
|
85
|
+
| `wheel` | `boolean` | false | input[slNumberFieldInput] | Lets the mouse wheel step the value while the input has focus and the pointer is over it. It is off by default, so scrolling a form never changes an amount. |
|
|
86
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | md | [slNumberField], provideNumberFieldDefaults | The step of the control scale. When unset, the number field takes the size of its field, then of provideNumberFieldDefaults. Height, padding, type and glyphs come from the control scale the theme sets per density. |
|
|
87
|
+
| `variant` | `'outline' \| 'subtle' \| 'plain'` | outline | [slNumberField], provideNumberFieldDefaults | How much frame the number field draws. plain draws no border at rest and keeps the same box, for a dense table cell. |
|
|
88
|
+
| `start` | `slNumberFieldStart` | — | any projected element | Content before the value in the reading direction. It is never selected, copied or parsed with the number. |
|
|
89
|
+
| `end` | `slNumberFieldEnd` | — | any projected element | Content after the value in the reading direction. |
|
|
90
|
+
| `sensitivity` | `number` | 2 | slNumberFieldScrub | Pixels of horizontal drag per step. Use fewer pixels for a wide range and more for a fine one. |
|
|
91
|
+
| `disabled` | `boolean` | from the field, or false | input[slNumberFieldInput] | Unset rather than false, so the number field follows the field around it. When set, it wins over the field and writes the native disabled, which removes the input from the tab order and from form submission. A disabled form control sets it too. |
|
|
92
|
+
| `readOnly` | `boolean` | from the field, or false | input[slNumberFieldInput] | Unset rather than false, so the number field follows the field around it. Writes the native readonly: the input stays focusable, selectable and submitted, and both buttons are disabled. |
|
|
93
|
+
| `invalid` | `boolean` | from the field, or false | input[slNumberFieldInput] | Unset rather than false, so the number field follows the field around it. Writes aria-invalid on the input and data-invalid on the frame. |
|
|
94
|
+
| `required` | `boolean` | — | input[slNumberFieldInput] | The element’s own attribute, written only by you. Inside a required field, the input receives aria-required instead, because the native attribute turns on the browser’s constraint validation. |
|
|
95
|
+
| `name / form` | `string` | — | input[slNumberFieldInput] | Read as static attributes and moved to a hidden input beside the visible one, which submits the raw number: 1480, not "$1,480.00". |
|
|
96
|
+
| `messages` | `Partial<NumberFieldMessages>` | — | [slNumberField] | Replaces words of the active language, key by key: increment and decrement are the accessible names of the two buttons. |
|
|
97
|
+
| `exportAs` | `'slNumberField' / 'slNumberFieldInput'` | — | both directives | Hands the directive instance to the template. The input’s instance exposes inputElement, which has focus(), select() and setSelectionRange(), and increment() and decrement(), which move by one step within the bounds and report the reason programmatic. |
|
|
98
|
+
| `ControlValueAccessor` | `NG_VALUE_ACCESSOR` | — | input[slNumberFieldInput] | Binds the input to a reactive or template-driven form, which receives the number rather than the formatted text. The directive provides no validator: min and max are reported through aria-invalid only under clamp="none", and when an error is shown is the form’s decision. |
|
|
99
|
+
| `ng-content` | `[slNumberFieldStart], [slNumberFieldEnd], the input` | — | [slNumberField] | Projects your own elements into three slots, so a span, an icon or a kbd keeps its own semantics. The frame is a directive on your own element. |
|
|
100
|
+
| `provideNumberFieldDefaults` | `{ size, variant, stepper, formatOn, clamp }` | — | an injector | Sets size, variant, stepper, formatOn and clamp once for every number field under the injector. A number field that states a value keeps it. The locale comes from provideSlotted, so every amount in the application is written and read the same way. |
|
|
101
|
+
| `HostAttributeToken` | `id, name, form, inputmode, aria-describedby, aria-invalid, aria-required, readonly` | — | input[slNumberFieldInput] | Each is read before the host bindings run, so a static attribute you write is never overwritten. |
|
|
102
|
+
|
|
103
|
+
## Events
|
|
104
|
+
|
|
105
|
+
| Name | Payload | When |
|
|
106
|
+
| --- | --- | --- |
|
|
107
|
+
| `(valueChange)` | `ChangeRequest<number \| null>` | Before the value changes. value is the new number and previous the number it replaces. reason is keyboard for typing, an arrow, a page key, Home, End or Enter; pointer for a stepper press, a wheel turn or a scrub; blur for the commit that formats, rounds and clamps on blur; programmatic for increment() and decrement(). source is the originating event, and cancel() refuses the change before it is applied. There is no [(value)], because a two-way binding carries only the value, without the reason or cancel(). |
|
|
108
|
+
| `ControlValueAccessor` | `writeValue, registerOnChange, registerOnTouched, setDisabledState` | Whenever a reactive or template-driven form reads or writes the input. The form receives the number, never the formatted text, and a disabled form control disables the input and both buttons. |
|
|
109
|
+
| `the element’s own events` | `(input), (keydown), (blur), (focus)` | Whenever the input fires them. Your listener runs alongside the directive’s, and calling preventDefault() on a key stops the directive from acting on it. |
|
|
110
|
+
|
|
111
|
+
## Axes and defaults
|
|
112
|
+
|
|
113
|
+
| Axis | Values | Default |
|
|
114
|
+
| --- | --- | --- |
|
|
115
|
+
| `size` | `sm`, `md`, `lg` | `md` |
|
|
116
|
+
| `variant` | `outline`, `subtle`, `plain` | `outline` |
|
|
117
|
+
| `stepper` | `stacked`, `split`, `none` | `stacked` |
|
|
118
|
+
| `clamp` | `blur`, `strict`, `none` | `blur` |
|
|
119
|
+
| `formatOn` | `change`, `commit` | `change` |
|
|
120
|
+
|
|
121
|
+
## Rules
|
|
122
|
+
|
|
123
|
+
- SlNumberField follows the WAI-ARIA APG Spinbutton pattern: role="spinbutton" on the input with aria-valuenow, aria-valuemin, aria-valuemax and aria-valuetext, ArrowUp and ArrowDown to step, Home and End to reach the bounds, and Page Up and Page Down for the larger step.
|
|
124
|
+
- aria-valuetext carries the formatted text, so a screen reader announces "$1,480.00" rather than 1480. When the number field is empty, neither aria-valuenow nor aria-valuetext is set: no value is not the value zero.
|
|
125
|
+
- The frame has no role. WAI-ARIA requires the children of a spinbutton to be non-interactive, so the two buttons are siblings of the input inside a box that announces nothing.
|
|
126
|
+
- The buttons are out of the tab order, as the APG pattern recommends, and stay in the accessibility tree with translatable names and aria-controls pointing at the input. A button at a bound is disabled, so its name is still announced and its appearance shows why it does nothing.
|
|
127
|
+
- Inside a required field the input receives aria-required, never the native required, which would turn on the browser’s constraint validation. disabled and readonly are the native attributes.
|
|
128
|
+
- The input is type="text", and its inputmode comes from the inputs: numeric for a whole number at or above zero, decimal when the format allows a fraction, and text when min allows a negative, because neither numeric keypad offers a minus sign on every platform.
|
|
129
|
+
- The mouse wheel is not bound unless wheel is set, and Escape is not bound at all, so scrolling a form never changes an amount.
|
|
130
|
+
|
|
131
|
+
## Tokens
|
|
132
|
+
|
|
133
|
+
`--slotted-border-subtle`, `--slotted-control-border-color`, `--slotted-control-border-width`, `--slotted-control-font-family`, `--slotted-control-font-size-lg`, `--slotted-control-font-size-md`, `--slotted-control-font-size-sm`, `--slotted-control-gap-lg`, `--slotted-control-gap-md`, `--slotted-control-gap-sm`, `--slotted-control-height-lg`, `--slotted-control-height-md`, `--slotted-control-height-sm`, `--slotted-control-icon-size-lg`, `--slotted-control-icon-size-md`, `--slotted-control-icon-size-sm`, `--slotted-control-inner-size-lg`, `--slotted-control-inner-size-md`, `--slotted-control-inner-size-sm`, `--slotted-control-invalid-edge-width`, `--slotted-control-padding-inline-lg`, `--slotted-control-padding-inline-md`, `--slotted-control-padding-inline-sm`, `--slotted-control-radius`, `--slotted-control-shadow`, `--slotted-control-shadow-focus-geometry`, `--slotted-control-surface`, `--slotted-control-transition-duration`, `--slotted-control-transition-easing`, `--slotted-disabled-background`, `--slotted-disabled-border`, `--slotted-disabled-foreground`, `--slotted-focus-ring-color`, `--slotted-focus-ring-color-invalid`, `--slotted-focus-ring-offset`, `--slotted-focus-ring-width`, `--slotted-number-field-action-size`, `--slotted-number-field-adornment-color`, `--slotted-number-field-background`, `--slotted-number-field-border-color`, `--slotted-number-field-color`, `--slotted-number-field-disabled-background`, `--slotted-number-field-disabled-border-color`, `--slotted-number-field-disabled-color`, `--slotted-number-field-hover-border-color`, `--slotted-number-field-icon-size-min`, `--slotted-number-field-invalid-border-color`, `--slotted-number-field-invalid-edge-width`, `--slotted-number-field-invalid-focus-ring-color`, `--slotted-number-field-placeholder-color`, `--slotted-number-field-plain-hover-background`, `--slotted-number-field-radius`, `--slotted-number-field-readonly-background`, `--slotted-number-field-readonly-border-color`, `--slotted-number-field-scrub-active-color`, `--slotted-number-field-shadow`, `--slotted-number-field-stepper-active-background`, `--slotted-number-field-stepper-color`, `--slotted-number-field-stepper-disabled-background`, `--slotted-number-field-stepper-disabled-color`, `--slotted-number-field-stepper-hover-background`, `--slotted-number-field-stepper-size`, `--slotted-number-field-subtle-background`, `--slotted-number-field-subtle-border-color`, `--slotted-number-field-subtle-hover-background`, `--slotted-radius-none`, `--slotted-radius-xs`, `--slotted-space-1`, `--slotted-space-2`, `--slotted-surface-sunken`, `--slotted-target-comfortable`, `--slotted-target-min`, `--slotted-text`, `--slotted-text-muted`, `--slotted-tone-accent-border`, `--slotted-tone-danger-border`, `--slotted-tone-secondary-subtle-active`, `--slotted-tone-secondary-subtle-hover`
|
|
134
|
+
|
|
135
|
+
## Examples
|
|
136
|
+
|
|
137
|
+
See [number-field.examples.md](./number-field.examples.md).
|
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
{
|
|
2
|
+
"family": "otp-input",
|
|
3
|
+
"ui": "otp-input",
|
|
4
|
+
"binding": "angular",
|
|
5
|
+
"catalog": {
|
|
6
|
+
"group": "Forms",
|
|
7
|
+
"summary": "One-time code split across several boxes."
|
|
8
|
+
},
|
|
9
|
+
"axes": {
|
|
10
|
+
"size": [
|
|
11
|
+
"sm",
|
|
12
|
+
"md",
|
|
13
|
+
"lg"
|
|
14
|
+
],
|
|
15
|
+
"variant": [
|
|
16
|
+
"outline",
|
|
17
|
+
"subtle"
|
|
18
|
+
],
|
|
19
|
+
"type": [
|
|
20
|
+
"numeric",
|
|
21
|
+
"alphanumeric"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"members": {
|
|
25
|
+
"otpInput": {
|
|
26
|
+
"nativeElement": "input",
|
|
27
|
+
"defaults": {
|
|
28
|
+
"size": "md",
|
|
29
|
+
"variant": "outline",
|
|
30
|
+
"attached": false,
|
|
31
|
+
"length": 6,
|
|
32
|
+
"type": "numeric",
|
|
33
|
+
"placeholder": "",
|
|
34
|
+
"mask": false,
|
|
35
|
+
"autoSubmit": false,
|
|
36
|
+
"webOtp": false
|
|
37
|
+
},
|
|
38
|
+
"capabilities": [
|
|
39
|
+
"value",
|
|
40
|
+
"appearance",
|
|
41
|
+
"size",
|
|
42
|
+
"content",
|
|
43
|
+
"disabled",
|
|
44
|
+
"invalid",
|
|
45
|
+
"required",
|
|
46
|
+
"readOnly",
|
|
47
|
+
"wiring"
|
|
48
|
+
],
|
|
49
|
+
"states": [
|
|
50
|
+
"default",
|
|
51
|
+
"hover",
|
|
52
|
+
"focus-visible",
|
|
53
|
+
"disabled",
|
|
54
|
+
"invalid",
|
|
55
|
+
"readonly",
|
|
56
|
+
"complete",
|
|
57
|
+
"current"
|
|
58
|
+
],
|
|
59
|
+
"parts": [
|
|
60
|
+
"root",
|
|
61
|
+
"input",
|
|
62
|
+
"group",
|
|
63
|
+
"separator",
|
|
64
|
+
"slot"
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"docs": {
|
|
69
|
+
"otpInput": {
|
|
70
|
+
"imports": {
|
|
71
|
+
"source": "import {\n provideOtpInputDefaults,\n SlOtpInput,\n SlOtpInputControl,\n} from '@slotted/angular/otp-input';",
|
|
72
|
+
"selector": "[slOtpInput]",
|
|
73
|
+
"exportAs": "slOtpInput"
|
|
74
|
+
},
|
|
75
|
+
"anatomy": [
|
|
76
|
+
{
|
|
77
|
+
"part": "root",
|
|
78
|
+
"element": "the element carrying slOtpInput",
|
|
79
|
+
"required": true,
|
|
80
|
+
"purpose": "The frame around the boxes. Carries data-ui=\"otp-input\", the axes, and data-disabled, data-invalid, data-readonly and data-complete. It has no role: the control inside is the only thing announced. A press anywhere on it puts the cursor in the box under the pointer."
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"part": "input",
|
|
84
|
+
"element": "input[slOtpInputControl]",
|
|
85
|
+
"required": true,
|
|
86
|
+
"purpose": "The control. One real text input laid over the boxes, transparent: it holds the value, name, form, autocomplete=\"one-time-code\", the identifier the field’s label points at, and it is the one tab stop. It is the ControlValueAccessor, so it belongs in a reactive form as it stands. With the frame’s mask it becomes type=\"password\"."
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"part": "group",
|
|
90
|
+
"element": "div, drawn by the frame",
|
|
91
|
+
"required": true,
|
|
92
|
+
"purpose": "A row of boxes, one per entry of groups. Hidden from assistive technology. With attached, its boxes share one seam and keep a corner only at the ends."
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"part": "separator",
|
|
96
|
+
"element": "div, drawn by the frame",
|
|
97
|
+
"required": false,
|
|
98
|
+
"purpose": "A short rule between two groups, drawn in CSS and never a character — a dash in the DOM would be read by nothing and mirrored by nothing."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"part": "slot",
|
|
102
|
+
"element": "div, drawn by the frame",
|
|
103
|
+
"required": true,
|
|
104
|
+
"purpose": "One box: the character at data-index, or a bullet under mask, or the placeholder while empty. data-current marks the box where the cursor or the selection is while the control has focus; the caret and the selection tint are drawn there."
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
"api": [
|
|
108
|
+
{
|
|
109
|
+
"name": "value",
|
|
110
|
+
"type": "string",
|
|
111
|
+
"defaultValue": "—",
|
|
112
|
+
"appliesTo": "slOtpInputControl",
|
|
113
|
+
"description": "Present means the consumer owns the value. It is written into the element the way a form writes it; a form uses formControl instead"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"name": "defaultValue",
|
|
117
|
+
"type": "string",
|
|
118
|
+
"defaultValue": "—",
|
|
119
|
+
"appliesTo": "slOtpInputControl",
|
|
120
|
+
"description": "What the control starts from when nobody else writes one, read once and cut to what the code accepts"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"name": "length",
|
|
124
|
+
"type": "number",
|
|
125
|
+
"defaultValue": "6",
|
|
126
|
+
"appliesTo": "slOtpInput, provideOtpInputDefaults",
|
|
127
|
+
"description": "How many characters the code has. It is the element’s maxlength and the number of boxes"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"name": "type",
|
|
131
|
+
"type": "'numeric' | 'alphanumeric'",
|
|
132
|
+
"defaultValue": "numeric",
|
|
133
|
+
"appliesTo": "slOtpInputControl, provideOtpInputDefaults",
|
|
134
|
+
"description": "Which characters the code takes — digits, or ASCII letters and digits — and which keyboard a phone offers: inputmode numeric or text, unless the consumer wrote one"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"name": "pattern",
|
|
138
|
+
"type": "RegExp",
|
|
139
|
+
"defaultValue": "—",
|
|
140
|
+
"appliesTo": "slOtpInputControl",
|
|
141
|
+
"description": "Tested against each character; outranks type in what is accepted and leaves the keyboard to it. Never the element’s whole-value attribute"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"name": "transform",
|
|
145
|
+
"type": "(text: string) => string",
|
|
146
|
+
"defaultValue": "—",
|
|
147
|
+
"appliesTo": "slOtpInputControl",
|
|
148
|
+
"description": "Run over every edit before the filter — typing, paste, autofill — to strip a prefix or uppercase a code"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"name": "groups",
|
|
152
|
+
"type": "number[]",
|
|
153
|
+
"defaultValue": "[length]",
|
|
154
|
+
"appliesTo": "slOtpInput",
|
|
155
|
+
"description": "How the boxes are partitioned, with a separator between two groups. The sum has to be length; a partition that does not add up draws one group"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"name": "attached",
|
|
159
|
+
"type": "boolean",
|
|
160
|
+
"defaultValue": "false",
|
|
161
|
+
"appliesTo": "slOtpInput, provideOtpInputDefaults",
|
|
162
|
+
"description": "Joins the boxes of a group along one seam, with a corner only at the ends"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"name": "placeholder",
|
|
166
|
+
"type": "string",
|
|
167
|
+
"defaultValue": "",
|
|
168
|
+
"appliesTo": "slOtpInput, provideOtpInputDefaults",
|
|
169
|
+
"description": "What an empty box shows: one character repeats over every box, a string as long as the code distributes"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"name": "mask",
|
|
173
|
+
"type": "boolean",
|
|
174
|
+
"defaultValue": "false",
|
|
175
|
+
"appliesTo": "slOtpInput",
|
|
176
|
+
"description": "Makes the control type=\"password\" and paints a bullet per character. The platform treats the value as a secret"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"name": "size",
|
|
180
|
+
"type": "'sm' | 'md' | 'lg'",
|
|
181
|
+
"defaultValue": "md",
|
|
182
|
+
"appliesTo": "slOtpInput, provideOtpInputDefaults",
|
|
183
|
+
"description": "The step the boxes sit at, read from the field first when there is one, then from the token. The box is the control height at that step; the type is the text scale’s step of the same name"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"name": "variant",
|
|
187
|
+
"type": "'outline' | 'subtle'",
|
|
188
|
+
"defaultValue": "outline",
|
|
189
|
+
"appliesTo": "slOtpInput, provideOtpInputDefaults",
|
|
190
|
+
"description": "How much frame each box shows. There is no plain: a code is never a cell"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"name": "autoSubmit",
|
|
194
|
+
"type": "boolean",
|
|
195
|
+
"defaultValue": "false",
|
|
196
|
+
"appliesTo": "slOtpInputControl",
|
|
197
|
+
"description": "Calls requestSubmit() on the owning form the moment the code is complete"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"name": "webOtp",
|
|
201
|
+
"type": "boolean",
|
|
202
|
+
"defaultValue": "false",
|
|
203
|
+
"appliesTo": "slOtpInputControl",
|
|
204
|
+
"description": "Asks the platform for the code from the SMS where the WebOTP API exists, and abandons the request when the form submits or the directive is destroyed. Opt-in, because the request opens a permission prompt"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"name": "disabled",
|
|
208
|
+
"type": "boolean",
|
|
209
|
+
"defaultValue": "from the form, the field, or false",
|
|
210
|
+
"appliesTo": "slOtpInputControl",
|
|
211
|
+
"description": "Unstated rather than false, so the control defers to the form’s setDisabledState and then to the field. Stated, it wins, and it is the native attribute"
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"name": "readOnly",
|
|
215
|
+
"type": "boolean",
|
|
216
|
+
"defaultValue": "from the field, or false",
|
|
217
|
+
"appliesTo": "slOtpInputControl",
|
|
218
|
+
"description": "Unstated rather than false. The native readonly, which stays focusable, selectable and submitted; a readonly attribute the consumer wrote is honoured"
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"name": "invalid",
|
|
222
|
+
"type": "boolean",
|
|
223
|
+
"defaultValue": "from the field, or false",
|
|
224
|
+
"appliesTo": "slOtpInputControl",
|
|
225
|
+
"description": "Unstated rather than false. Writes aria-invalid on the control and data-invalid on the frame"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"name": "required",
|
|
229
|
+
"type": "boolean",
|
|
230
|
+
"defaultValue": "—",
|
|
231
|
+
"appliesTo": "slOtpInputControl",
|
|
232
|
+
"description": "The element’s own attribute, left where the consumer wrote it and never written by the family. A field marks necessity with aria-required instead, because the native attribute engages browser constraint validation"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"name": "autocomplete",
|
|
236
|
+
"type": "string",
|
|
237
|
+
"defaultValue": "one-time-code",
|
|
238
|
+
"appliesTo": "slOtpInputControl",
|
|
239
|
+
"description": "The element’s own attribute, read before the host binding computes; unwritten, the token that asks the keyboard for the code it just received"
|
|
240
|
+
}
|
|
241
|
+
],
|
|
242
|
+
"composition": [
|
|
243
|
+
{
|
|
244
|
+
"name": "[slOtpInput]",
|
|
245
|
+
"type": "attribute selector",
|
|
246
|
+
"defaultValue": "—",
|
|
247
|
+
"appliesTo": "the consumer’s element",
|
|
248
|
+
"description": "The frame is the consumer’s own element rather than one the family creates, so a div, a fieldset or a label can carry it. The boxes are drawn by its template and are not projectable: they are paint over one input, and their geometry is what a press is mapped to"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"name": "input[slOtpInputControl]",
|
|
252
|
+
"type": "attribute selector",
|
|
253
|
+
"defaultValue": "—",
|
|
254
|
+
"appliesTo": "the consumer’s input",
|
|
255
|
+
"description": "The control is the consumer’s own input, so every native attribute is written where it belongs and read before the host bindings compute. It injects the frame without optional: an input written outside one fails at construction"
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"name": "exportAs",
|
|
259
|
+
"type": "'slOtpInput' / 'slOtpInputControl'",
|
|
260
|
+
"defaultValue": "—",
|
|
261
|
+
"appliesTo": "a template",
|
|
262
|
+
"description": "The frame’s resolved step, variant and complete state, and the control’s code, selection and inputElement, for a template that reaches either"
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"name": "provideOtpInputDefaults",
|
|
266
|
+
"type": "{ size, variant, attached, length, type, placeholder }",
|
|
267
|
+
"defaultValue": "—",
|
|
268
|
+
"appliesTo": "an injector",
|
|
269
|
+
"description": "The six decisions an application takes once. size is the one a field outranks, so a control inside a field takes the field’s step"
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"name": "SlOtpInputState",
|
|
273
|
+
"type": "abstract class",
|
|
274
|
+
"defaultValue": "—",
|
|
275
|
+
"appliesTo": "a frame of your own",
|
|
276
|
+
"description": "What the frame reads from the control: code, selection, focused, the three resolved states, and pressAt(). Provided by the control, so a frame that draws its own boxes can query for it"
|
|
277
|
+
}
|
|
278
|
+
],
|
|
279
|
+
"events": [
|
|
280
|
+
{
|
|
281
|
+
"name": "(valueChange)",
|
|
282
|
+
"payload": "ChangeRequest<string>",
|
|
283
|
+
"when": "Before the value moves, on slOtpInputControl. The request carries the new value, the value it replaces, the reason — \"keyboard\" for an edit made in the control, including a paste and the keyboard’s own autofill; \"programmatic\" for a code the WebOTP API delivered — the originating event, and cancel(), which refuses the move before anything commits."
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"name": "(complete)",
|
|
287
|
+
"payload": "string",
|
|
288
|
+
"when": "The moment the value reaches length characters, once per value. A full code edited into another full code reports again; a code emptied and retyped reports again."
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"name": "(rejected)",
|
|
292
|
+
"payload": "{ text: string; source: Event }",
|
|
293
|
+
"when": "Before the value moves, with every character an edit lost to type, pattern or length, in order. Nothing is emitted when an edit lost nothing."
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"name": "ControlValueAccessor",
|
|
297
|
+
"payload": "the form’s own value and touched state",
|
|
298
|
+
"when": "Whenever the value moves and the request was not cancelled, and on blur for touched. It is the two-way binding the ecosystem expects, and the reason there is no [(value)]: a two-way binding has one slot and can carry neither a reason nor cancel()."
|
|
299
|
+
}
|
|
300
|
+
],
|
|
301
|
+
"accessibility": [
|
|
302
|
+
"There is no WAI-ARIA APG pattern for a verification code: the APG lists no such entry, so the control is the platform’s own textbox and the sources are the HTML specification for the element, the autocomplete attribute’s one-time-code token, and the WebOTP API.",
|
|
303
|
+
"One control, one tab stop, one accessible name, one value. Ark, Chakra and Mantine render one input per box and pay for it with N tab stops and no real label; here the boxes are aria-hidden paint over one input, so a screen reader hears \"Código de verificação, edit text, 482\" and nothing about boxes.",
|
|
304
|
+
"The control takes its name from the field’s label, through for pointing at the identifier the field derived, and its description and error through aria-describedby merged after anything the consumer wrote.",
|
|
305
|
+
"aria-required, never the native required: the native attribute engages browser constraint validation and changes submit behaviour. disabled and readonly are native, because that is what those two words mean, and a form’s setDisabledState reaches the same attribute.",
|
|
306
|
+
"Every key is the browser’s. The family binds nothing — no Escape, no arrow handling — and only normalises the selection after the fact, so a reader who knows a text field knows this one; WCAG 2.1.4 exists for the class of defect single-key shortcuts produce.",
|
|
307
|
+
"The focus ring sits on the box where the cursor is, in the theme’s ring colour, and the invalid state retargets that colour rather than repainting it. Invalid is never colour alone: aria-invalid announces it and the field’s error says it in words.",
|
|
308
|
+
"mask is a platform decision, not paint: the control becomes type=\"password\", so the screen reader counts the characters instead of reading a PIN aloud and the keyboard keeps nothing. The cost is that a password manager may offer to save it; the autocomplete the consumer wrote decides."
|
|
309
|
+
]
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
"tokens": [
|
|
313
|
+
"--slotted-border-subtle",
|
|
314
|
+
"--slotted-border-width-thick",
|
|
315
|
+
"--slotted-border-width-thin",
|
|
316
|
+
"--slotted-control-border-color",
|
|
317
|
+
"--slotted-control-border-width",
|
|
318
|
+
"--slotted-control-font-family",
|
|
319
|
+
"--slotted-control-gap-lg",
|
|
320
|
+
"--slotted-control-gap-md",
|
|
321
|
+
"--slotted-control-gap-sm",
|
|
322
|
+
"--slotted-control-height-lg",
|
|
323
|
+
"--slotted-control-height-md",
|
|
324
|
+
"--slotted-control-height-sm",
|
|
325
|
+
"--slotted-control-invalid-edge-width",
|
|
326
|
+
"--slotted-control-radius",
|
|
327
|
+
"--slotted-control-shadow",
|
|
328
|
+
"--slotted-control-shadow-focus-geometry",
|
|
329
|
+
"--slotted-control-surface",
|
|
330
|
+
"--slotted-control-transition-duration",
|
|
331
|
+
"--slotted-control-transition-easing",
|
|
332
|
+
"--slotted-disabled-background",
|
|
333
|
+
"--slotted-disabled-border",
|
|
334
|
+
"--slotted-disabled-foreground",
|
|
335
|
+
"--slotted-duration-loop",
|
|
336
|
+
"--slotted-focus-ring-color",
|
|
337
|
+
"--slotted-focus-ring-color-invalid",
|
|
338
|
+
"--slotted-focus-ring-offset",
|
|
339
|
+
"--slotted-focus-ring-width",
|
|
340
|
+
"--slotted-font-size-2xl",
|
|
341
|
+
"--slotted-font-size-lg",
|
|
342
|
+
"--slotted-font-size-md",
|
|
343
|
+
"--slotted-font-size-sm",
|
|
344
|
+
"--slotted-font-weight-medium",
|
|
345
|
+
"--slotted-otp-input-autofill-background",
|
|
346
|
+
"--slotted-otp-input-background",
|
|
347
|
+
"--slotted-otp-input-border-color",
|
|
348
|
+
"--slotted-otp-input-caret-width",
|
|
349
|
+
"--slotted-otp-input-color",
|
|
350
|
+
"--slotted-otp-input-current-border-color",
|
|
351
|
+
"--slotted-otp-input-disabled-background",
|
|
352
|
+
"--slotted-otp-input-disabled-border-color",
|
|
353
|
+
"--slotted-otp-input-disabled-color",
|
|
354
|
+
"--slotted-otp-input-font-weight",
|
|
355
|
+
"--slotted-otp-input-group-gap",
|
|
356
|
+
"--slotted-otp-input-hover-border-color",
|
|
357
|
+
"--slotted-otp-input-invalid-border-color",
|
|
358
|
+
"--slotted-otp-input-invalid-edge-width",
|
|
359
|
+
"--slotted-otp-input-invalid-focus-ring-color",
|
|
360
|
+
"--slotted-otp-input-mask-size",
|
|
361
|
+
"--slotted-otp-input-placeholder-color",
|
|
362
|
+
"--slotted-otp-input-radius",
|
|
363
|
+
"--slotted-otp-input-readonly-background",
|
|
364
|
+
"--slotted-otp-input-selection-background",
|
|
365
|
+
"--slotted-otp-input-separator-color",
|
|
366
|
+
"--slotted-otp-input-separator-size",
|
|
367
|
+
"--slotted-otp-input-shadow",
|
|
368
|
+
"--slotted-otp-input-subtle-background",
|
|
369
|
+
"--slotted-otp-input-subtle-border-color",
|
|
370
|
+
"--slotted-otp-input-subtle-hover-background",
|
|
371
|
+
"--slotted-radius-full",
|
|
372
|
+
"--slotted-space-4",
|
|
373
|
+
"--slotted-surface-sunken",
|
|
374
|
+
"--slotted-text",
|
|
375
|
+
"--slotted-text-muted",
|
|
376
|
+
"--slotted-tone-accent-border",
|
|
377
|
+
"--slotted-tone-accent-surface",
|
|
378
|
+
"--slotted-tone-danger-border",
|
|
379
|
+
"--slotted-tone-secondary-subtle-hover"
|
|
380
|
+
],
|
|
381
|
+
"examples": [
|
|
382
|
+
{
|
|
383
|
+
"id": "playground",
|
|
384
|
+
"title": "Playground",
|
|
385
|
+
"note": "The second step of a sign-in, driven by the controls below the canvas. Type into it: the value is one string, the boxes paint it, and the sixth digit completes it.",
|
|
386
|
+
"language": "html",
|
|
387
|
+
"source": "<div slField>\n <label slFieldLabel>Código de verificação</label>\n <div slOtpInput [groups]=\"[3, 3]\">\n <input slOtpInputControl name=\"code\" (complete)=\"verify($event)\" />\n </div>\n <span slFieldDescription>Enviámos um SMS para +55 11 9••••-4821.</span>\n</div>\n",
|
|
388
|
+
"verdict": "excerpt"
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"id": "sizes",
|
|
392
|
+
"title": "The step the boxes sit at",
|
|
393
|
+
"note": "A box is a square on the control height of its step, so a code beside a text field in the same form sits on the same row. Inside a field the control takes the field’s step rather than its own.",
|
|
394
|
+
"language": "html",
|
|
395
|
+
"source": "<div slOtpInput size=\"sm\" length=\"4\"><input slOtpInputControl /></div>\n<div slOtpInput size=\"md\"><input slOtpInputControl /></div>\n<div slOtpInput size=\"lg\"><input slOtpInputControl /></div>\n\n<!-- Inside a field the field decides, and the control follows. -->\n<div slField size=\"sm\">\n <div slOtpInput><input slOtpInputControl /></div>\n</div>\n",
|
|
396
|
+
"verdict": "excerpt"
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"id": "variants",
|
|
400
|
+
"title": "How much frame each box shows",
|
|
401
|
+
"note": "outline takes the ground it is placed on; subtle sinks into the page. The same two steps text-field draws, with the same tokens, so a code under a text field in one form is one form.",
|
|
402
|
+
"language": "html",
|
|
403
|
+
"source": "<div slOtpInput variant=\"outline\"><input slOtpInputControl /></div>\n<div slOtpInput variant=\"subtle\"><input slOtpInputControl /></div>\n",
|
|
404
|
+
"verdict": "excerpt"
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
"id": "groups",
|
|
408
|
+
"title": "Groups, separators and joined boxes",
|
|
409
|
+
"note": "groups partitions the boxes the way the SMS is written — 482-915 — and attached joins the boxes of a group along one seam, which is how a PIN pad reads.",
|
|
410
|
+
"language": "html",
|
|
411
|
+
"source": "<!-- The sum has to be length; a partition that does not add up draws one group. -->\n<div slOtpInput [groups]=\"[3, 3]\"><input slOtpInputControl /></div>\n<div slOtpInput [groups]=\"[4, 4]\" length=\"8\" attached>\n <input slOtpInputControl type=\"alphanumeric\" />\n</div>\n<div slOtpInput length=\"4\" attached><input slOtpInputControl /></div>\n",
|
|
412
|
+
"verdict": "excerpt"
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"id": "types",
|
|
416
|
+
"title": "What the code accepts",
|
|
417
|
+
"note": "type decides the characters and the keyboard a phone offers; pattern outranks it per character; transform runs over every edit before the filter. What an edit loses is reported, so the page can say why nothing appeared.",
|
|
418
|
+
"language": "html",
|
|
419
|
+
"source": "<div slOtpInput><input slOtpInputControl type=\"numeric\" /></div>\n<div slOtpInput length=\"8\"><input slOtpInputControl type=\"alphanumeric\" /></div>\n\n<!-- A backup code is printed in uppercase with a prefix nobody types. -->\n<div slOtpInput length=\"8\">\n <input\n slOtpInputControl\n type=\"alphanumeric\"\n [transform]=\"stripPrefix\"\n (rejected)=\"hint = $event.text + ' não faz parte do código'\"\n />\n</div>\n\n<!-- Only the characters a hexadecimal code has. -->\n<div slOtpInput><input slOtpInputControl [pattern]=\"hex\" /></div>\n",
|
|
420
|
+
"verdict": "excerpt"
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
"id": "mask",
|
|
424
|
+
"title": "A code nobody should read over your shoulder",
|
|
425
|
+
"note": "mask makes the control type=\"password\": the platform treats the value as a secret — the screen reader counts characters instead of reading them — and each filled box shows a bullet.",
|
|
426
|
+
"language": "html",
|
|
427
|
+
"source": "<div slField>\n <label slFieldLabel>PIN de autorização</label>\n <div slOtpInput length=\"4\" mask attached>\n <input slOtpInputControl autocomplete=\"off\" />\n </div>\n</div>\n",
|
|
428
|
+
"verdict": "excerpt"
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
"id": "states",
|
|
432
|
+
"title": "The four states the frame paints",
|
|
433
|
+
"note": "Invalid keeps its danger edge on every box while the ring says where the cursor is; read-only keeps full-strength ink and only its ground changes; disabled is muted to a measured colour rather than faded, so a disabled form still says what it holds.",
|
|
434
|
+
"language": "html",
|
|
435
|
+
"source": "<!-- Unstated rather than false, so the control defers to its field. -->\n<div slOtpInput><input slOtpInputControl invalid defaultValue=\"482910\" /></div>\n<div slOtpInput><input slOtpInputControl readOnly defaultValue=\"482915\" /></div>\n<div slOtpInput><input slOtpInputControl disabled defaultValue=\"48\" /></div>\n\n<!-- A control inside a disabled fieldset is painted too, because the\n stylesheet matches :disabled beside the attribute. -->\n",
|
|
436
|
+
"verdict": "excerpt"
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"id": "complete",
|
|
440
|
+
"title": "The sixth digit",
|
|
441
|
+
"note": "(complete) fires the moment the value reaches length, once per value; autoSubmit calls requestSubmit() on the owning form in the same moment. A code edited into another full code reports again.",
|
|
442
|
+
"language": "html",
|
|
443
|
+
"source": "<form (ngSubmit)=\"verify()\">\n <div slOtpInput><input slOtpInputControl name=\"code\" autoSubmit /></div>\n</form>\n\n<!-- Or hold the value and react to it. -->\n<div slOtpInput>\n <input slOtpInputControl [formControl]=\"code\" (complete)=\"verify($event)\" />\n</div>\n",
|
|
444
|
+
"verdict": "excerpt"
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
"id": "content",
|
|
448
|
+
"title": "Content the family did not choose",
|
|
449
|
+
"note": "A value longer than the code is cut; a paste with hyphens and spaces keeps its digits; in a right-to-left page the boxes stay left-to-right, because a code is a number and a number does not mirror; and at 240 pixels the boxes give up width before the row overflows.",
|
|
450
|
+
"language": "html",
|
|
451
|
+
"source": "<!-- \"12-3456789\" becomes \"123456\". -->\n<div slOtpInput><input slOtpInputControl defaultValue=\"12-3456789\" /></div>\n\n<!-- Paste \"482-915\": the hyphen is dropped and reported, the digits land. -->\n<div slOtpInput><input slOtpInputControl (rejected)=\"log($event.text)\" /></div>\n\n<!-- The row is left-to-right whatever the page does. -->\n<div dir=\"rtl\">\n <div slOtpInput [groups]=\"[3, 3]\"><input slOtpInputControl /></div>\n</div>\n",
|
|
452
|
+
"verdict": "excerpt"
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
"id": "form",
|
|
456
|
+
"title": "One control in a reactive form",
|
|
457
|
+
"note": "slOtpInputControl is the ControlValueAccessor: a FormControl writes it, a disabled control disables it, blur marks it touched, and validators see one string. name still works for a native form, and where the WebOTP API exists the code arrives from the SMS with reason \"programmatic\".",
|
|
458
|
+
"language": "html",
|
|
459
|
+
"source": "<form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div slOtpInput [groups]=\"[3, 3]\">\n <input slOtpInputControl formControlName=\"code\" webOtp />\n </div>\n <button slButton type=\"submit\">Confirmar</button>\n</form>\n\n<!-- form = new FormGroup({ code: new FormControl('', [Validators.minLength(6)]) }) -->\n",
|
|
460
|
+
"verdict": "excerpt"
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
"id": "composition",
|
|
464
|
+
"title": "In a field, with a resend",
|
|
465
|
+
"note": "The field names the control, describes it and carries its error; the resend is a button and a countdown the page owns, because the family has no clock. provideOtpInputDefaults sets the length once for an application whose codes are all four digits.",
|
|
466
|
+
"language": "html",
|
|
467
|
+
"source": "<div slField [invalid]=\"error() !== null\">\n <label slFieldLabel>Código de verificação</label>\n <div slOtpInput [groups]=\"[3, 3]\">\n <input slOtpInputControl name=\"code\" (complete)=\"verify($event)\" />\n </div>\n <span slFieldDescription>Enviámos um SMS para +55 11 9••••-4821.</span>\n <span slFieldError>{{ error() }}</span>\n</div>\n<button slButton variant=\"ghost\" [disabled]=\"seconds() > 0\" (click)=\"resend()\">\n {{ seconds() > 0 ? 'Reenviar em 0:' + pad(seconds()) : 'Reenviar código' }}\n</button>\n\n<!-- Every code in this application is four digits:\n providers: [provideOtpInputDefaults({ length: 4, attached: true })] -->\n",
|
|
468
|
+
"verdict": "excerpt"
|
|
469
|
+
},
|
|
470
|
+
{
|
|
471
|
+
"id": "keyboard",
|
|
472
|
+
"title": "One tab stop, every key the browser’s",
|
|
473
|
+
"note": "Tab lands on one control. Arrows move the cursor across the boxes, Backspace and Delete edit, Shift+arrows select a range, Ctrl+A selects all, and typing on a full code replaces the selected character instead of being refused.",
|
|
474
|
+
"language": "html",
|
|
475
|
+
"source": "<!-- Inside the value there is always one character selected: the one in\n front of a collapsed cursor, the last one at the end of a full code. The\n next key replaces it. A cursor after the last character inserts. -->\n<div slOtpInput [groups]=\"[3, 3]\">\n <input slOtpInputControl defaultValue=\"482915\" />\n</div>\n",
|
|
476
|
+
"verdict": "excerpt"
|
|
477
|
+
}
|
|
478
|
+
]
|
|
479
|
+
}
|