@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,604 @@
|
|
|
1
|
+
{
|
|
2
|
+
"family": "text-field",
|
|
3
|
+
"ui": "text-field",
|
|
4
|
+
"binding": "angular",
|
|
5
|
+
"catalog": {
|
|
6
|
+
"group": "Forms",
|
|
7
|
+
"summary": "Single-line text input."
|
|
8
|
+
},
|
|
9
|
+
"axes": {
|
|
10
|
+
"size": [
|
|
11
|
+
"sm",
|
|
12
|
+
"md",
|
|
13
|
+
"lg"
|
|
14
|
+
],
|
|
15
|
+
"variant": [
|
|
16
|
+
"outline",
|
|
17
|
+
"subtle",
|
|
18
|
+
"plain"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"members": {
|
|
22
|
+
"textField": {
|
|
23
|
+
"nativeElement": "input",
|
|
24
|
+
"defaults": {
|
|
25
|
+
"size": "md",
|
|
26
|
+
"variant": "outline",
|
|
27
|
+
"mono": false,
|
|
28
|
+
"clearable": false,
|
|
29
|
+
"revealable": false,
|
|
30
|
+
"showCount": false,
|
|
31
|
+
"copyable": false,
|
|
32
|
+
"loading": false
|
|
33
|
+
},
|
|
34
|
+
"capabilities": [
|
|
35
|
+
"value",
|
|
36
|
+
"revealed",
|
|
37
|
+
"appearance",
|
|
38
|
+
"size",
|
|
39
|
+
"content",
|
|
40
|
+
"disabled",
|
|
41
|
+
"invalid",
|
|
42
|
+
"required",
|
|
43
|
+
"readOnly",
|
|
44
|
+
"wiring",
|
|
45
|
+
"loading"
|
|
46
|
+
],
|
|
47
|
+
"states": [
|
|
48
|
+
"default",
|
|
49
|
+
"hover",
|
|
50
|
+
"active",
|
|
51
|
+
"focus-visible",
|
|
52
|
+
"disabled",
|
|
53
|
+
"invalid",
|
|
54
|
+
"readonly",
|
|
55
|
+
"loading",
|
|
56
|
+
"complete"
|
|
57
|
+
],
|
|
58
|
+
"parts": [
|
|
59
|
+
"root",
|
|
60
|
+
"input",
|
|
61
|
+
"start",
|
|
62
|
+
"end",
|
|
63
|
+
"action",
|
|
64
|
+
"busy",
|
|
65
|
+
"caps-lock",
|
|
66
|
+
"clear",
|
|
67
|
+
"copy",
|
|
68
|
+
"reveal"
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"docs": {
|
|
73
|
+
"textField": {
|
|
74
|
+
"imports": {
|
|
75
|
+
"source": "import {\n provideTextFieldDefaults,\n SlTextField,\n SlTextFieldAction,\n SlTextFieldEnd,\n SlTextFieldInput,\n SlTextFieldStart,\n} from '@slotted/angular/text-field';",
|
|
76
|
+
"selector": "[slTextField]",
|
|
77
|
+
"exportAs": "slTextField"
|
|
78
|
+
},
|
|
79
|
+
"anatomy": [
|
|
80
|
+
{
|
|
81
|
+
"part": "root",
|
|
82
|
+
"element": "the element carrying slTextField",
|
|
83
|
+
"required": true,
|
|
84
|
+
"purpose": "The frame. It carries data-ui=\"text-field\", data-size, data-variant and data-mono, and data-disabled, data-invalid, data-readonly and data-loading. It has no role: WAI-ARIA allows a textbox only non-interactive children, so the buttons sit beside the input inside a box that announces nothing."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"part": "input",
|
|
88
|
+
"element": "input[slTextFieldInput]",
|
|
89
|
+
"required": true,
|
|
90
|
+
"purpose": "The control. It holds the value and the identifier, and keeps every native attribute you write: type, autocomplete, inputmode, enterkeyhint, pattern, maxlength, name and required. Each is read before the host bindings compute, so none is overwritten. It is a ControlValueAccessor, so a reactive or template-driven form binds to it directly."
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"part": "start",
|
|
94
|
+
"element": "any element carrying slTextFieldStart",
|
|
95
|
+
"required": false,
|
|
96
|
+
"purpose": "Content before the value in the reading direction, such as a currency, an icon or an @. It is its own bidirectional run, so R$ keeps its order in a right-to-left document, and an icon inside it takes the control’s icon size."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"part": "end",
|
|
100
|
+
"element": "any element carrying slTextFieldEnd",
|
|
101
|
+
"required": false,
|
|
102
|
+
"purpose": "Content after the value in the reading direction, such as a unit, a domain or a suffix."
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"part": "action",
|
|
106
|
+
"element": "button[slTextFieldAction], inside slTextFieldStart or slTextFieldEnd",
|
|
107
|
+
"required": false,
|
|
108
|
+
"purpose": "A button you place inside the frame: a submit, a menu trigger or a tooltip trigger. It is square when named by aria-label and padded when named by its text. aria-expanded=\"true\" keeps it pressed while its menu is open. slMenuTriggerFor can sit on the same element."
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"part": "busy",
|
|
112
|
+
"element": "span[data-ui=\"spinner\"], rendered by the frame",
|
|
113
|
+
"required": false,
|
|
114
|
+
"purpose": "The shared spinner, before the buttons, while [loading] is true. It is rendered whenever loading is bound and hidden while loading is false, so it can leave with a transition. It is hidden from assistive technology; aria-busy on the input carries the state."
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"part": "caps-lock",
|
|
118
|
+
"element": "span, rendered by the frame",
|
|
119
|
+
"required": false,
|
|
120
|
+
"purpose": "A mark in a password field while Caps Lock is on and the input has focus. It is hidden from assistive technology; the capsLock message is announced once when Caps Lock turns on."
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"part": "clear",
|
|
124
|
+
"element": "button, rendered by the frame",
|
|
125
|
+
"required": false,
|
|
126
|
+
"purpose": "Empties the value with reason \"clear\" and returns focus to the input. It is rendered while clearable is set, hidden while the value is empty or cannot be changed, and never smaller than 24 CSS pixels."
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"part": "copy",
|
|
130
|
+
"element": "button, rendered by the frame",
|
|
131
|
+
"required": false,
|
|
132
|
+
"purpose": "Writes the value to the clipboard, shows a check with data-complete for two seconds and announces the outcome. It stays on a read-only value and is hidden while the value is empty or the input is disabled."
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"part": "reveal",
|
|
136
|
+
"element": "button, rendered by the frame",
|
|
137
|
+
"required": false,
|
|
138
|
+
"purpose": "Shows the password as characters and hides it again, keeping the caret where it was. Its name does not change with its state, which is the APG rule for a toggle button; aria-pressed carries the state."
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"api": [
|
|
142
|
+
{
|
|
143
|
+
"name": "value",
|
|
144
|
+
"type": "string",
|
|
145
|
+
"defaultValue": "—",
|
|
146
|
+
"appliesTo": "slTextFieldInput",
|
|
147
|
+
"description": "Makes the value controlled. It is written to the input the way a form control’s value is. Without it the input keeps its own value."
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"name": "defaultValue",
|
|
151
|
+
"type": "string",
|
|
152
|
+
"defaultValue": "—",
|
|
153
|
+
"appliesTo": "slTextFieldInput",
|
|
154
|
+
"description": "The value the input starts from when nothing else writes one. It is read once the inputs are bound."
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"name": "size",
|
|
158
|
+
"type": "'sm' | 'md' | 'lg'",
|
|
159
|
+
"defaultValue": "md",
|
|
160
|
+
"appliesTo": "slTextField, provideTextFieldDefaults",
|
|
161
|
+
"description": "The step of the control scale. Without it the text field takes the size of the field around it, then the one provideTextFieldDefaults sets. Height, padding, type and icon size come from the control scales, which the theme restates for each density."
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"name": "variant",
|
|
165
|
+
"type": "'outline' | 'subtle' | 'plain'",
|
|
166
|
+
"defaultValue": "outline",
|
|
167
|
+
"appliesTo": "slTextField, provideTextFieldDefaults",
|
|
168
|
+
"description": "How much frame the control draws. plain draws no border at rest and keeps the same box, for a dense table cell."
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"name": "mono",
|
|
172
|
+
"type": "boolean",
|
|
173
|
+
"defaultValue": "false",
|
|
174
|
+
"appliesTo": "slTextField, provideTextFieldDefaults",
|
|
175
|
+
"description": "Sets the value in the monospaced font with tabular figures, for identifiers, hashes and keys."
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"name": "clearable",
|
|
179
|
+
"type": "boolean",
|
|
180
|
+
"defaultValue": "false",
|
|
181
|
+
"appliesTo": "slTextField",
|
|
182
|
+
"description": "Draws a button that empties the value with reason \"clear\" and returns focus to the input. The button is withdrawn while the value is empty, disabled or read-only."
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"name": "revealable",
|
|
186
|
+
"type": "boolean",
|
|
187
|
+
"defaultValue": "false",
|
|
188
|
+
"appliesTo": "slTextField",
|
|
189
|
+
"description": "Draws a toggle that shows a password as characters. It appears only on type=\"password\" and is withdrawn while the input is disabled."
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"name": "revealed",
|
|
193
|
+
"type": "boolean",
|
|
194
|
+
"defaultValue": "—",
|
|
195
|
+
"appliesTo": "slTextFieldInput",
|
|
196
|
+
"description": "Makes the password toggle controlled. defaultRevealed sets the uncontrolled starting state."
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"name": "showCount",
|
|
200
|
+
"type": "boolean",
|
|
201
|
+
"defaultValue": "false",
|
|
202
|
+
"appliesTo": "slTextFieldInput",
|
|
203
|
+
"description": "Publishes the length of the value to the field around it, which draws the count at the end of its label row."
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"name": "countMax",
|
|
207
|
+
"type": "number",
|
|
208
|
+
"defaultValue": "maxlength",
|
|
209
|
+
"appliesTo": "slTextFieldInput",
|
|
210
|
+
"description": "The limit the count is measured against. Without maxlength it is a soft limit: the value can pass it, and the count turns to the danger tone before validation runs."
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"name": "start",
|
|
214
|
+
"type": "slTextFieldStart",
|
|
215
|
+
"defaultValue": "—",
|
|
216
|
+
"appliesTo": "any element",
|
|
217
|
+
"description": "Content before the value in the reading direction, on your own element, which keeps its own semantics."
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"name": "end",
|
|
221
|
+
"type": "slTextFieldEnd",
|
|
222
|
+
"defaultValue": "—",
|
|
223
|
+
"appliesTo": "any element",
|
|
224
|
+
"description": "Content after the value in the reading direction."
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"name": "disabled",
|
|
228
|
+
"type": "boolean",
|
|
229
|
+
"defaultValue": "from the field, or false",
|
|
230
|
+
"appliesTo": "slTextFieldInput",
|
|
231
|
+
"description": "Unset by default, so the input takes the state of the field around it and of a disabled form control. When set, it wins, and it is the native attribute."
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"name": "readOnly",
|
|
235
|
+
"type": "boolean",
|
|
236
|
+
"defaultValue": "from the field, or false",
|
|
237
|
+
"appliesTo": "slTextFieldInput",
|
|
238
|
+
"description": "Unset by default, so the input takes the state of the field around it. It is the native readonly: the input stays focusable and selectable, and its value is submitted. A static readonly attribute you write is read before the binding computes."
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"name": "invalid",
|
|
242
|
+
"type": "boolean",
|
|
243
|
+
"defaultValue": "from the field, or false",
|
|
244
|
+
"appliesTo": "slTextFieldInput",
|
|
245
|
+
"description": "Unset by default, so the input takes the state of the field around it. It sets aria-invalid on the input and data-invalid on the frame."
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"name": "required",
|
|
249
|
+
"type": "boolean",
|
|
250
|
+
"defaultValue": "—",
|
|
251
|
+
"appliesTo": "the input element",
|
|
252
|
+
"description": "The input’s own attribute; slTextFieldInput never writes it. A field marks a required value with aria-required instead, because the native attribute turns on browser constraint validation."
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"name": "type",
|
|
256
|
+
"type": "'text' | 'search' | 'email' | 'url' | 'tel' | 'password'",
|
|
257
|
+
"defaultValue": "text",
|
|
258
|
+
"appliesTo": "the input element",
|
|
259
|
+
"description": "The input’s own type, written as a static attribute. It is read before the host binding computes, so the reveal toggle can swap it and restore what you wrote."
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"name": "copyable",
|
|
263
|
+
"type": "boolean",
|
|
264
|
+
"defaultValue": "false",
|
|
265
|
+
"appliesTo": "slTextField",
|
|
266
|
+
"description": "Draws a button that writes the value to the clipboard, shows a check for two seconds and announces the outcome. It is hidden while the value is empty or the input is disabled."
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"name": "loading",
|
|
270
|
+
"type": "boolean",
|
|
271
|
+
"defaultValue": "false",
|
|
272
|
+
"appliesTo": "slTextField",
|
|
273
|
+
"description": "Draws the shared spinner before the buttons and sets aria-busy on the input; the value stays editable. Once loading is bound, false included, the spinner keeps its place so it can leave with a transition."
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"name": "messages",
|
|
277
|
+
"type": "Partial<TextFieldMessages>",
|
|
278
|
+
"defaultValue": "—",
|
|
279
|
+
"appliesTo": "slTextField",
|
|
280
|
+
"description": "Replaces words of the active language, key by key. clear, reveal and copy name the buttons; reveal does not change with the state, because aria-pressed carries it. copied and copyFailed announce the outcome of a copy. capsLock is announced once when Caps Lock turns on in a focused password field."
|
|
281
|
+
}
|
|
282
|
+
],
|
|
283
|
+
"composition": [
|
|
284
|
+
{
|
|
285
|
+
"name": "button[slTextFieldAction]",
|
|
286
|
+
"type": "directive",
|
|
287
|
+
"defaultValue": "type=\"button\"",
|
|
288
|
+
"appliesTo": "inside slTextFieldStart or slTextFieldEnd",
|
|
289
|
+
"description": "A button you place inside the frame. slMenuTriggerFor, slTooltipTrigger or a popover trigger can sit on the same element. The part attribute is written back after the first render, because slMenuTriggerFor binds data-part to null. Its exportAs is slTextFieldAction."
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"name": "the directives themselves",
|
|
293
|
+
"type": "slTextField, slTextFieldInput, slTextFieldStart, slTextFieldEnd",
|
|
294
|
+
"defaultValue": "—",
|
|
295
|
+
"appliesTo": "your own elements",
|
|
296
|
+
"description": "Every part except the buttons and marks the frame renders is a directive on an element you write, so each keeps its own semantics, attributes and listeners."
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"name": "exportAs",
|
|
300
|
+
"type": "'slTextField' / 'slTextFieldInput'",
|
|
301
|
+
"defaultValue": "—",
|
|
302
|
+
"appliesTo": "a template",
|
|
303
|
+
"description": "Reaches the instance from a template. inputElement on slTextFieldInput is the native input, with focus(), select() and setSelectionRange()."
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"name": "provideTextFieldDefaults()",
|
|
307
|
+
"type": "{ size, variant, mono }",
|
|
308
|
+
"defaultValue": "—",
|
|
309
|
+
"appliesTo": "an injector",
|
|
310
|
+
"description": "Sets size, variant and mono once for every text field in the injector. A field outranks it for size, so a text field inside a field takes the field’s size."
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"name": "ControlValueAccessor",
|
|
314
|
+
"type": "formControl, formControlName, ngModel",
|
|
315
|
+
"defaultValue": "—",
|
|
316
|
+
"appliesTo": "slTextFieldInput",
|
|
317
|
+
"description": "slTextFieldInput works with reactive and template-driven forms as it is. It provides no validator: the form owns validity."
|
|
318
|
+
}
|
|
319
|
+
],
|
|
320
|
+
"events": [
|
|
321
|
+
{
|
|
322
|
+
"name": "(valueChange)",
|
|
323
|
+
"payload": "ChangeRequest<string>",
|
|
324
|
+
"when": "Emitted by slTextFieldInput before the value changes. The request carries the new value, the value it replaces, the reason (\"keyboard\" for an edit in the input, \"clear\" for the clear button), the originating event, and cancel(), which refuses the change before it commits."
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"name": "(revealedChange)",
|
|
328
|
+
"payload": "ChangeRequest<boolean>",
|
|
329
|
+
"when": "Emitted by slTextFieldInput before the password toggle changes, with reason \"pointer\" or \"keyboard\" read from the click. A form that hides the password again on blur binds [revealed] and listens here."
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
"name": "(valueCopy)",
|
|
333
|
+
"payload": "TextFieldCopyDetail — { copied, reason, source, value }",
|
|
334
|
+
"when": "Emitted by slTextField after the copy button has asked the clipboard. copied is false when the clipboard refused the value, and reason is \"pointer\" or \"keyboard\"."
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"name": "ControlValueAccessor",
|
|
338
|
+
"payload": "the form’s own value and touched state",
|
|
339
|
+
"when": "The form receives the value whenever it changes and the request was not cancelled, and the touched state on blur. There is no [(value)], because a two-way binding carries only the value, neither the reason nor cancel()."
|
|
340
|
+
}
|
|
341
|
+
],
|
|
342
|
+
"accessibility": [
|
|
343
|
+
"There is no WAI-ARIA Authoring Practices pattern for a text field: the APG lists thirty patterns, and none of them is a single-line text input. The sources are the HTML specification for the input element, the APG practice Providing Accessible Names and Descriptions (w3.org/WAI/ARIA/apg/practices/names-and-descriptions/) for its name, and the ARIA textbox role for what may sit inside it.",
|
|
344
|
+
"The frame has no role. WAI-ARIA requires the children of a textbox to be non-interactive and presentational, so the clear and reveal buttons are siblings of the input inside a box that announces nothing.",
|
|
345
|
+
"The input takes its name from the field’s label, whose for attribute points at the identifier the field generates. The APG naming practice records that some combinations of browser and assistive technology compute no name from a label that wraps its control.",
|
|
346
|
+
"Inside a required field the input carries aria-required, never the native required. In Angular a host binding overrides a static attribute, so every attribute you write that slTextFieldInput also binds (id, aria-describedby, aria-invalid, aria-required, readonly and type) is read before the binding computes and is never overwritten.",
|
|
347
|
+
"The clear and reveal buttons are native buttons with names you translate once through messages. Each is at least 24 CSS pixels wide at every size and density, which meets WCAG 2.2 success criterion 2.5.8. The reveal button keeps one name and carries its state in aria-pressed, which is the APG rule for a toggle button.",
|
|
348
|
+
"The copy button announces its outcome through the shared live announcer, Copied or Copy failed, because the check that replaces the copy mark is only visible. The Caps Lock mark is hidden from assistive technology; its message is announced once when Caps Lock turns on while the password field has focus.",
|
|
349
|
+
"loading sets aria-busy on the input and leaves it enabled, so the keyboard stays on the input while an asynchronous check runs. The spinner is hidden from assistive technology.",
|
|
350
|
+
"A menu inside the frame follows the APG menu button pattern (w3.org/WAI/ARIA/apg/patterns/menu-button/). slMenuTriggerFor on the action supplies aria-haspopup, aria-expanded, and Enter, Space and ArrowDown to open.",
|
|
351
|
+
"No key is bound to Escape. Some browsers clear a search input on Escape, and a text field that consumed the key inside a dialog would leave a keyboard user unable to close the dialog. WCAG success criterion 2.1.4 addresses the defects that single-key shortcuts cause."
|
|
352
|
+
]
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
"tokens": [
|
|
356
|
+
"--slotted-border-subtle",
|
|
357
|
+
"--slotted-control-border-color",
|
|
358
|
+
"--slotted-control-border-width",
|
|
359
|
+
"--slotted-control-font-family",
|
|
360
|
+
"--slotted-control-font-size-lg",
|
|
361
|
+
"--slotted-control-font-size-md",
|
|
362
|
+
"--slotted-control-font-size-sm",
|
|
363
|
+
"--slotted-control-gap-lg",
|
|
364
|
+
"--slotted-control-gap-md",
|
|
365
|
+
"--slotted-control-gap-sm",
|
|
366
|
+
"--slotted-control-height-lg",
|
|
367
|
+
"--slotted-control-height-md",
|
|
368
|
+
"--slotted-control-height-sm",
|
|
369
|
+
"--slotted-control-icon-size-lg",
|
|
370
|
+
"--slotted-control-icon-size-md",
|
|
371
|
+
"--slotted-control-icon-size-sm",
|
|
372
|
+
"--slotted-control-inner-size-lg",
|
|
373
|
+
"--slotted-control-inner-size-md",
|
|
374
|
+
"--slotted-control-inner-size-sm",
|
|
375
|
+
"--slotted-control-invalid-edge-width",
|
|
376
|
+
"--slotted-control-padding-inline-lg",
|
|
377
|
+
"--slotted-control-padding-inline-md",
|
|
378
|
+
"--slotted-control-padding-inline-sm",
|
|
379
|
+
"--slotted-control-radius",
|
|
380
|
+
"--slotted-control-shadow",
|
|
381
|
+
"--slotted-control-shadow-focus-geometry",
|
|
382
|
+
"--slotted-control-surface",
|
|
383
|
+
"--slotted-control-transition-duration",
|
|
384
|
+
"--slotted-control-transition-easing",
|
|
385
|
+
"--slotted-disabled-background",
|
|
386
|
+
"--slotted-disabled-border",
|
|
387
|
+
"--slotted-disabled-foreground",
|
|
388
|
+
"--slotted-duration-short",
|
|
389
|
+
"--slotted-easing-enter",
|
|
390
|
+
"--slotted-easing-exit",
|
|
391
|
+
"--slotted-focus-ring-color",
|
|
392
|
+
"--slotted-focus-ring-color-invalid",
|
|
393
|
+
"--slotted-focus-ring-offset",
|
|
394
|
+
"--slotted-focus-ring-width",
|
|
395
|
+
"--slotted-font-family-mono",
|
|
396
|
+
"--slotted-font-weight-medium",
|
|
397
|
+
"--slotted-radius-none",
|
|
398
|
+
"--slotted-radius-xs",
|
|
399
|
+
"--slotted-space-2",
|
|
400
|
+
"--slotted-space-3",
|
|
401
|
+
"--slotted-surface-sunken",
|
|
402
|
+
"--slotted-target-comfortable",
|
|
403
|
+
"--slotted-target-min",
|
|
404
|
+
"--slotted-text",
|
|
405
|
+
"--slotted-text-field-action-active-background",
|
|
406
|
+
"--slotted-text-field-action-color",
|
|
407
|
+
"--slotted-text-field-action-hover-background",
|
|
408
|
+
"--slotted-text-field-action-label-color",
|
|
409
|
+
"--slotted-text-field-action-size",
|
|
410
|
+
"--slotted-text-field-adornment-color",
|
|
411
|
+
"--slotted-text-field-autofill-background",
|
|
412
|
+
"--slotted-text-field-background",
|
|
413
|
+
"--slotted-text-field-border-color",
|
|
414
|
+
"--slotted-text-field-caps-lock-color",
|
|
415
|
+
"--slotted-text-field-color",
|
|
416
|
+
"--slotted-text-field-copy-complete-color",
|
|
417
|
+
"--slotted-text-field-disabled-background",
|
|
418
|
+
"--slotted-text-field-disabled-border-color",
|
|
419
|
+
"--slotted-text-field-disabled-color",
|
|
420
|
+
"--slotted-text-field-hover-border-color",
|
|
421
|
+
"--slotted-text-field-icon-size-min",
|
|
422
|
+
"--slotted-text-field-invalid-border-color",
|
|
423
|
+
"--slotted-text-field-invalid-edge-width",
|
|
424
|
+
"--slotted-text-field-invalid-focus-ring-color",
|
|
425
|
+
"--slotted-text-field-placeholder-color",
|
|
426
|
+
"--slotted-text-field-plain-hover-background",
|
|
427
|
+
"--slotted-text-field-radius",
|
|
428
|
+
"--slotted-text-field-readonly-background",
|
|
429
|
+
"--slotted-text-field-shadow",
|
|
430
|
+
"--slotted-text-field-subtle-background",
|
|
431
|
+
"--slotted-text-field-subtle-border-color",
|
|
432
|
+
"--slotted-text-field-subtle-hover-background",
|
|
433
|
+
"--slotted-text-muted",
|
|
434
|
+
"--slotted-tone-accent-border",
|
|
435
|
+
"--slotted-tone-accent-surface",
|
|
436
|
+
"--slotted-tone-danger-border",
|
|
437
|
+
"--slotted-tone-secondary-subtle-active",
|
|
438
|
+
"--slotted-tone-secondary-subtle-hover",
|
|
439
|
+
"--slotted-tone-success-text",
|
|
440
|
+
"--slotted-tone-warning-text"
|
|
441
|
+
],
|
|
442
|
+
"examples": [
|
|
443
|
+
{
|
|
444
|
+
"id": "playground",
|
|
445
|
+
"title": "Playground",
|
|
446
|
+
"note": "One control with every axis on it, driven by the controls below the canvas. Type into it: the clear button appears only once there is something to clear.",
|
|
447
|
+
"language": "html",
|
|
448
|
+
"source": "<div slField>\n <label slFieldLabel>E-mail</label>\n <div slTextField clearable>\n <input slTextFieldInput type=\"email\" placeholder=\"voce@empresa.com.br\" />\n </div>\n <span slFieldDescription>Usaremos este endereço para a cobrança.</span>\n</div>\n",
|
|
449
|
+
"verdict": "excerpt"
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
"id": "sizes",
|
|
453
|
+
"title": "The step the control sits at",
|
|
454
|
+
"note": "Three steps, and inside a field the control takes the field’s rather than its own: a small field holding a medium control is a field and a control disagreeing about one row.",
|
|
455
|
+
"language": "ts",
|
|
456
|
+
"source": "import { Component } from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTextField, SlTextFieldInput, SlTextFieldStart } from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-text-field-sizes',\n imports: [SlGlyph, SlIcon, SlStack, SlTextField, SlTextFieldInput, SlTextFieldStart],\n template: `\n <div slStack [gap]=\"4\">\n <div slTextField size=\"sm\">\n <span slTextFieldStart>\n <span slIcon><svg slGlyph name=\"search\"></svg></span>\n </span>\n <input\n slTextFieldInput\n type=\"search\"\n aria-label=\"Filter order lines\"\n placeholder=\"Filter order lines\"\n />\n </div>\n <div slTextField size=\"md\">\n <span slTextFieldStart>\n <span slIcon><svg slGlyph name=\"search\"></svg></span>\n </span>\n <input\n slTextFieldInput\n type=\"search\"\n aria-label=\"Search customers\"\n placeholder=\"Search customers\"\n />\n </div>\n <div slTextField size=\"lg\">\n <span slTextFieldStart>\n <span slIcon><svg slGlyph name=\"search\"></svg></span>\n </span>\n <input\n slTextFieldInput\n type=\"search\"\n aria-label=\"Search the catalog\"\n placeholder=\"Search the catalog\"\n />\n </div>\n </div>\n `,\n})\nexport class TextFieldSizes {}\n",
|
|
457
|
+
"verdict": "example"
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
"id": "variants",
|
|
461
|
+
"title": "How much frame the control shows",
|
|
462
|
+
"note": "outline takes the ground it is placed on, subtle sinks into the page, and plain shows nothing until the pointer or the caret arrives — which is what a dense table cell needs.",
|
|
463
|
+
"language": "ts",
|
|
464
|
+
"source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-text-field-variants',\n imports: [SlField, SlFieldLabel, SlStack, SlTextField, SlTextFieldInput],\n template: `\n <div slStack [gap]=\"4\">\n <div slField>\n <label slFieldLabel>Customer</label>\n <div slTextField variant=\"outline\">\n <input slTextFieldInput defaultValue=\"Northwind Traders\" />\n </div>\n </div>\n <div slField>\n <label slFieldLabel>Purchase order</label>\n <div slTextField variant=\"subtle\">\n <input slTextFieldInput defaultValue=\"PO-2026-0412\" />\n </div>\n </div>\n <div slField>\n <label slFieldLabel>SKU</label>\n <div slTextField variant=\"plain\" mono>\n <input slTextFieldInput defaultValue=\"NW-TEA-1042\" />\n </div>\n </div>\n </div>\n `,\n})\nexport class TextFieldVariants {}\n",
|
|
465
|
+
"verdict": "example"
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
"id": "adornments",
|
|
469
|
+
"title": "What sits inside the border",
|
|
470
|
+
"note": "start and end name the reading direction rather than a side, so the currency mark stays before the amount in Arabic as well. Neither of them is ever squeezed: the value gives up width first.",
|
|
471
|
+
"language": "ts",
|
|
472
|
+
"source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlKbd } from '@slotted/angular/kbd';\nimport { SlStack } from '@slotted/angular/stack';\nimport {\n SlTextField,\n SlTextFieldEnd,\n SlTextFieldInput,\n SlTextFieldStart,\n} from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-text-field-adornments',\n imports: [\n SlField,\n SlFieldLabel,\n SlGlyph,\n SlIcon,\n SlKbd,\n SlStack,\n SlTextField,\n SlTextFieldEnd,\n SlTextFieldInput,\n SlTextFieldStart,\n ],\n template: `\n <div slStack [gap]=\"4\">\n <div slField>\n <label slFieldLabel>Unit price</label>\n <div slTextField>\n <span slTextFieldStart>$</span>\n <input slTextFieldInput inputmode=\"decimal\" defaultValue=\"24.90\" />\n <span slTextFieldEnd>USD</span>\n </div>\n </div>\n <div slField>\n <label slFieldLabel>Shipping weight</label>\n <div slTextField>\n <input slTextFieldInput inputmode=\"decimal\" defaultValue=\"1.25\" />\n <span slTextFieldEnd>kg</span>\n </div>\n </div>\n <div slField>\n <label slFieldLabel>Storefront address</label>\n <div slTextField>\n <span slTextFieldStart>https://</span>\n <input slTextFieldInput defaultValue=\"shop.northwind.com\" />\n </div>\n </div>\n <div slTextField>\n <span slTextFieldStart>\n <span slIcon><svg slGlyph name=\"search\"></svg></span>\n </span>\n <input\n slTextFieldInput\n type=\"search\"\n aria-label=\"Search orders\"\n placeholder=\"Search orders\"\n />\n <span slTextFieldEnd><kbd slKbd>/</kbd></span>\n </div>\n </div>\n `,\n})\nexport class TextFieldAdornments {}\n",
|
|
473
|
+
"verdict": "example"
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
"id": "actions",
|
|
477
|
+
"title": "The two buttons the frame draws",
|
|
478
|
+
"note": "Both are real buttons inside the frame, both keep the caret, and both are held to the 24-pixel minimum. Tab into the field and press Tab again: the ring moves to the button rather than staying around the box.",
|
|
479
|
+
"language": "html",
|
|
480
|
+
"source": "<div slTextField clearable>\n <input slTextFieldInput type=\"search\" defaultValue=\"nota fiscal 2026\" />\n</div>\n\n<div slTextField revealable>\n <input slTextFieldInput type=\"password\" autocomplete=\"current-password\" />\n</div>\n",
|
|
481
|
+
"verdict": "excerpt"
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
"id": "menu",
|
|
485
|
+
"title": "A button of your own inside the frame",
|
|
486
|
+
"note": "A country code that opens a menu, a category beside a search, a submit named in words, an overflow mark: each is a real button in start or end. Open one — it stays pressed while its menu is open, and the value keeps its place beside it.",
|
|
487
|
+
"language": "ts",
|
|
488
|
+
"source": "import { Component, signal } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuItem, SlMenuRadioGroup, SlMenuTrigger } from '@slotted/angular/menu';\nimport {\n SlTextField,\n SlTextFieldAction,\n SlTextFieldInput,\n SlTextFieldStart,\n} from '@slotted/angular/text-field';\nimport { SlVisuallyHidden } from '@slotted/angular/visually-hidden';\n\n@Component({\n selector: 'app-text-field-menu',\n imports: [\n SlField,\n SlFieldLabel,\n SlGlyph,\n SlIcon,\n SlMenu,\n SlMenuItem,\n SlMenuRadioGroup,\n SlMenuTrigger,\n SlTextField,\n SlTextFieldAction,\n SlTextFieldInput,\n SlTextFieldStart,\n SlVisuallyHidden,\n ],\n template: `\n <div slField>\n <label slFieldLabel>Phone</label>\n <div slTextField>\n <span slTextFieldStart>\n <button slTextFieldAction [slMenuTriggerFor]=\"countries\">\n <span slVisuallyHidden>Country code</span>{{ country() }}\n <span slIcon><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n </span>\n <input\n slTextFieldInput\n type=\"tel\"\n autocomplete=\"tel-national\"\n defaultValue=\"206 555 0134\"\n />\n </div>\n <sl-menu #countries>\n <sl-menu-radio-group [(value)]=\"country\">\n <button slMenuRadioItem value=\"+1\">United States +1</button>\n <button slMenuRadioItem value=\"+44\">United Kingdom +44</button>\n <button slMenuRadioItem value=\"+49\">Germany +49</button>\n <button slMenuRadioItem value=\"+81\">Japan +81</button>\n </sl-menu-radio-group>\n </sl-menu>\n </div>\n `,\n})\nexport class TextFieldMenu {\n protected readonly country = signal('+1');\n}\n",
|
|
489
|
+
"verdict": "example"
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
"id": "copy",
|
|
493
|
+
"title": "Copying a value somebody has to paste elsewhere",
|
|
494
|
+
"note": "Press the copy button: the mark turns to a check in the success ink for two seconds and the outcome is announced. A clipboard that refuses — an insecure page, a denied permission — is announced as a failure and shows no check.",
|
|
495
|
+
"language": "ts",
|
|
496
|
+
"source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-text-field-copy',\n imports: [SlField, SlFieldDescription, SlFieldLabel, SlStack, SlTextField, SlTextFieldInput],\n template: `\n <div slStack [gap]=\"5\">\n <div slField>\n <label slFieldLabel>Invite link</label>\n <div slTextField copyable>\n <input\n slTextFieldInput\n readonly\n defaultValue=\"https://northwind.slotted.app/join/8f3a2c\"\n />\n </div>\n <span slFieldDescription>Anyone with the link joins as a viewer.</span>\n </div>\n <div slField>\n <label slFieldLabel>Webhook signing secret</label>\n <div slTextField copyable mono>\n <input slTextFieldInput readonly defaultValue=\"whsec_4f9c2a7e1b8d6350\" />\n </div>\n </div>\n </div>\n `,\n})\nexport class TextFieldCopy {}\n",
|
|
497
|
+
"verdict": "example"
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
"id": "password",
|
|
501
|
+
"title": "A password: showing it, and warning about Caps Lock",
|
|
502
|
+
"note": "Focus the password and turn Caps Lock on: the warning mark appears before the eye and is announced once. The eye swaps to a crossed eye and back, and the caret stays where it was.",
|
|
503
|
+
"language": "ts",
|
|
504
|
+
"source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlTextField, SlTextFieldInput, SlTextFieldStart } from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-text-field-password',\n imports: [\n SlField,\n SlFieldDescription,\n SlFieldLabel,\n SlGlyph,\n SlIcon,\n SlTextField,\n SlTextFieldInput,\n SlTextFieldStart,\n ],\n template: `\n <div slField required>\n <label slFieldLabel>New password</label>\n <div slTextField revealable>\n <span slTextFieldStart>\n <span slIcon><svg slGlyph name=\"lock\"></svg></span>\n </span>\n <input slTextFieldInput type=\"password\" autocomplete=\"new-password\" minlength=\"12\" />\n </div>\n <span slFieldDescription>At least 12 characters.</span>\n </div>\n `,\n})\nexport class TextFieldPassword {}\n",
|
|
505
|
+
"verdict": "example"
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
"id": "loading",
|
|
509
|
+
"title": "Checking the value while the reader keeps typing",
|
|
510
|
+
"note": "A user name checked against the server: the ring stands before the buttons and the input is aria-busy, but it stays editable. Turn loading off and the ring shrinks out rather than vanishing.",
|
|
511
|
+
"language": "ts",
|
|
512
|
+
"source": "import { Component, DestroyRef, inject, signal } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldError, SlFieldLabel } from '@slotted/angular/field';\nimport { SlTextField, SlTextFieldInput, SlTextFieldStart } from '@slotted/angular/text-field';\n\n/** Stands in for the request that checks whether a handle is free. */\nconst TAKEN = new Set(['admin', 'northwind', 'support']);\n\n@Component({\n selector: 'app-text-field-loading',\n imports: [\n SlField,\n SlFieldDescription,\n SlFieldError,\n SlFieldLabel,\n SlTextField,\n SlTextFieldInput,\n SlTextFieldStart,\n ],\n template: `\n <div slField [invalid]=\"taken() ? true : undefined\">\n <label slFieldLabel>Handle</label>\n <div slTextField clearable [loading]=\"checking()\">\n <span slTextFieldStart>@</span>\n <input\n slTextFieldInput\n autocomplete=\"username\"\n spellcheck=\"false\"\n [value]=\"handle()\"\n (valueChange)=\"change($event.value)\"\n />\n </div>\n <span slFieldDescription>Lowercase letters, digits and hyphens.</span>\n <span slFieldError live=\"polite\" reserve>\n {{ taken() ? '@' + handle() + ' is already taken.' : '' }}\n </span>\n </div>\n `,\n})\nexport class TextFieldLoading {\n protected readonly handle = signal('northwind-ops');\n protected readonly checking = signal(false);\n protected readonly taken = signal(false);\n private timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => clearTimeout(this.timer));\n }\n\n protected change(next: string) {\n this.handle.set(next);\n this.taken.set(false);\n clearTimeout(this.timer);\n this.checking.set(next !== '');\n if (next === '') return;\n this.timer = setTimeout(() => {\n this.checking.set(false);\n this.taken.set(TAKEN.has(next));\n }, 900);\n }\n}\n",
|
|
513
|
+
"verdict": "example"
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
"id": "states",
|
|
517
|
+
"title": "The four states the frame paints",
|
|
518
|
+
"note": "Read-only keeps full-strength ink and only its ground changes, because the value is real and still submitted; disabled is muted to a measured colour rather than faded, so a disabled form still says what it holds.",
|
|
519
|
+
"language": "ts",
|
|
520
|
+
"source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldError, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-text-field-states',\n imports: [\n SlField,\n SlFieldDescription,\n SlFieldError,\n SlFieldLabel,\n SlStack,\n SlTextField,\n SlTextFieldInput,\n ],\n template: `\n <div slStack [gap]=\"5\">\n <div slField invalid>\n <label slFieldLabel>VAT number</label>\n <div slTextField><input slTextFieldInput defaultValue=\"DE 81234\" /></div>\n <span slFieldError>A German VAT number has nine digits after DE.</span>\n </div>\n <div slField readOnly>\n <label slFieldLabel>Order number</label>\n <div slTextField mono><input slTextFieldInput defaultValue=\"SO-2026-00418\" /></div>\n <span slFieldDescription>Assigned when the order was placed.</span>\n </div>\n <div slField disabled>\n <label slFieldLabel>Currency</label>\n <div slTextField><input slTextFieldInput defaultValue=\"USD\" /></div>\n <span slFieldDescription>Set by the customer’s price list.</span>\n </div>\n </div>\n `,\n})\nexport class TextFieldStates {}\n",
|
|
521
|
+
"verdict": "example"
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
"id": "count",
|
|
525
|
+
"title": "Counting what has been typed",
|
|
526
|
+
"note": "The control counts and the field places it, in the spare column of the label row. Pass countMax without maxlength and the limit becomes a soft one: the value may pass it, and the counter turns before validation runs.",
|
|
527
|
+
"language": "ts",
|
|
528
|
+
"source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-text-field-count',\n imports: [SlField, SlFieldDescription, SlFieldLabel, SlStack, SlTextField, SlTextFieldInput],\n template: `\n <div slStack [gap]=\"5\">\n <div slField>\n <label slFieldLabel>Email subject</label>\n <div slTextField>\n <input\n slTextFieldInput\n showCount\n maxlength=\"60\"\n defaultValue=\"Your order SO-2026-00418 has shipped\"\n />\n </div>\n </div>\n <div slField>\n <label slFieldLabel>SMS sender name</label>\n <div slTextField>\n <input slTextFieldInput showCount countMax=\"11\" defaultValue=\"Northwind\" />\n </div>\n <span slFieldDescription>Carriers cut sender names after 11 characters.</span>\n </div>\n </div>\n `,\n})\nexport class TextFieldCount {}\n",
|
|
529
|
+
"verdict": "example"
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
"id": "types",
|
|
533
|
+
"title": "What kind of text this is",
|
|
534
|
+
"note": "type is the element’s own, and so is everything that travels with it. A phone field that offers the wrong keyboard on a phone is a field nobody fills in twice.",
|
|
535
|
+
"language": "ts",
|
|
536
|
+
"source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-text-field-types',\n imports: [SlField, SlFieldLabel, SlStack, SlTextField, SlTextFieldInput],\n template: `\n <div slStack [gap]=\"4\">\n <div slField>\n <label slFieldLabel>Work email</label>\n <div slTextField>\n <input\n slTextFieldInput\n type=\"email\"\n autocomplete=\"email\"\n placeholder=\"name@northwind.com\"\n />\n </div>\n </div>\n <div slField>\n <label slFieldLabel>Phone</label>\n <div slTextField>\n <input slTextFieldInput type=\"tel\" autocomplete=\"tel\" placeholder=\"+1 206 555 0134\" />\n </div>\n </div>\n <div slField>\n <label slFieldLabel>Website</label>\n <div slTextField>\n <input\n slTextFieldInput\n type=\"url\"\n autocomplete=\"url\"\n placeholder=\"https://northwind.com\"\n />\n </div>\n </div>\n <div slField>\n <label slFieldLabel>ZIP code</label>\n <div slTextField>\n <input\n slTextFieldInput\n autocomplete=\"postal-code\"\n inputmode=\"numeric\"\n placeholder=\"98101\"\n />\n </div>\n </div>\n </div>\n `,\n})\nexport class TextFieldTypes {}\n",
|
|
537
|
+
"verdict": "example"
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
"id": "content",
|
|
541
|
+
"title": "Content the family did not choose",
|
|
542
|
+
"note": "A value longer than the control ellipsises rather than clipping mid-glyph; an unbroken token scrolls, which is the platform’s answer; and at 240 pixels the value surrenders width while the adornments keep their target size.",
|
|
543
|
+
"language": "html",
|
|
544
|
+
"source": "<div slTextField>\n <input slTextFieldInput defaultValue=\"Kraftfahrzeug-Haftpflichtversicherungsnummer\" />\n</div>\n\n<!-- Nothing is removed from the DOM: the whole value stays selectable. -->\n<div slTextField clearable>\n <input slTextFieldInput dir=\"rtl\" defaultValue=\"مرحبا بالعالم\" />\n</div>\n",
|
|
545
|
+
"verdict": "excerpt"
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
"id": "composition",
|
|
549
|
+
"title": "Setting it once, and reaching past it",
|
|
550
|
+
"note": "provideTextFieldDefaults carries the decisions an application takes once; exportAs reaches the instance, and inputElement is the native element with focus, select and setSelectionRange already on it.",
|
|
551
|
+
"language": "html",
|
|
552
|
+
"source": "<!-- ControlValueAccessor: the control belongs in a form as it stands. -->\n<div slTextField clearable>\n <input slTextFieldInput [formControl]=\"email\" type=\"email\" />\n</div>\n\n<!-- exportAs, for the element the template has to reach. -->\n<div slTextField>\n <input slTextFieldInput #campo=\"slTextFieldInput\" />\n <span slTextFieldEnd>\n <button slTextFieldAction (click)=\"campo.inputElement.select()\">Selecionar</button>\n </span>\n</div>\n",
|
|
553
|
+
"verdict": "excerpt"
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
"id": "keyboard",
|
|
557
|
+
"title": "What the keyboard does, and what it deliberately does not",
|
|
558
|
+
"note": "Tab reaches the value, then each button in turn. Nothing is bound to Escape: some user agents clear a search input on it, and a control that swallowed the key inside a dialog would be one a keyboard user cannot leave.",
|
|
559
|
+
"language": "html",
|
|
560
|
+
"source": "<form (ngSubmit)=\"buscar()\">\n <div slTextField clearable>\n <input slTextFieldInput type=\"search\" name=\"q\" [(ngModel)]=\"q\" />\n </div>\n</form>\n",
|
|
561
|
+
"verdict": "excerpt"
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
"id": "action",
|
|
565
|
+
"title": "action.ts",
|
|
566
|
+
"note": null,
|
|
567
|
+
"language": "ts",
|
|
568
|
+
"source": "import { Component, signal } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport {\n SlTextField,\n SlTextFieldAction,\n SlTextFieldEnd,\n SlTextFieldInput,\n} from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-text-field-action',\n imports: [\n SlField,\n SlFieldDescription,\n SlFieldLabel,\n SlTextField,\n SlTextFieldAction,\n SlTextFieldEnd,\n SlTextFieldInput,\n ],\n template: `\n <form (submit)=\"apply($event)\">\n <div slField>\n <label slFieldLabel>Discount code</label>\n <div slTextField mono>\n <input slTextFieldInput name=\"code\" autocomplete=\"off\" defaultValue=\"SPRING10\" />\n <span slTextFieldEnd><button slTextFieldAction type=\"submit\">Apply</button></span>\n </div>\n <span slFieldDescription>\n {{ applied() === '' ? 'One code per order.' : applied() + ' is applied to this order.' }}\n </span>\n </div>\n </form>\n `,\n})\nexport class TextFieldActionExample {\n protected readonly applied = signal('');\n\n protected apply(event: SubmitEvent) {\n event.preventDefault();\n const code = new FormData(event.target as HTMLFormElement).get('code');\n this.applied.set(typeof code === 'string' ? code.trim().toUpperCase() : '');\n }\n}\n",
|
|
569
|
+
"verdict": "example"
|
|
570
|
+
},
|
|
571
|
+
{
|
|
572
|
+
"id": "basic",
|
|
573
|
+
"title": "basic.ts",
|
|
574
|
+
"note": null,
|
|
575
|
+
"language": "ts",
|
|
576
|
+
"source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-text-field-basic',\n imports: [SlField, SlFieldDescription, SlFieldLabel, SlTextField, SlTextFieldInput],\n template: `\n <div slField required>\n <label slFieldLabel>Company name</label>\n <div slTextField clearable>\n <input slTextFieldInput autocomplete=\"organization\" defaultValue=\"Northwind Traders\" />\n </div>\n <span slFieldDescription>Printed on every invoice and packing slip.</span>\n </div>\n `,\n})\nexport class TextFieldBasic {}\n",
|
|
577
|
+
"verdict": "example"
|
|
578
|
+
},
|
|
579
|
+
{
|
|
580
|
+
"id": "clearable",
|
|
581
|
+
"title": "clearable.ts",
|
|
582
|
+
"note": null,
|
|
583
|
+
"language": "ts",
|
|
584
|
+
"source": "import { Component } from '@angular/core';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlTextField, SlTextFieldInput, SlTextFieldStart } from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-text-field-clearable',\n imports: [SlGlyph, SlIcon, SlTextField, SlTextFieldInput, SlTextFieldStart],\n template: `\n <div slTextField clearable>\n <span slTextFieldStart>\n <span slIcon><svg slGlyph name=\"search\"></svg></span>\n </span>\n <input\n slTextFieldInput\n type=\"search\"\n aria-label=\"Search invoices\"\n enterkeyhint=\"search\"\n defaultValue=\"invoice 2026\"\n />\n </div>\n `,\n})\nexport class TextFieldClearable {}\n",
|
|
585
|
+
"verdict": "example"
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
"id": "defaults",
|
|
589
|
+
"title": "defaults.ts",
|
|
590
|
+
"note": null,
|
|
591
|
+
"language": "ts",
|
|
592
|
+
"source": "import { Component } from '@angular/core';\nimport { SlGrid } from '@slotted/angular/grid';\nimport {\n provideTextFieldDefaults,\n SlTextField,\n SlTextFieldInput,\n} from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-text-field-defaults',\n imports: [SlGrid, SlTextField, SlTextFieldInput],\n providers: [provideTextFieldDefaults({ size: 'sm', variant: 'subtle' })],\n template: `\n <div slGrid [gap]=\"2\" minItemWidth=\"xs\">\n <div slTextField clearable>\n <input slTextFieldInput aria-label=\"Customer\" placeholder=\"Customer\" />\n </div>\n <div slTextField mono>\n <input slTextFieldInput aria-label=\"Order number\" placeholder=\"Order number\" />\n </div>\n <div slTextField>\n <input slTextFieldInput aria-label=\"Ship to city\" placeholder=\"Ship to city\" />\n </div>\n </div>\n `,\n})\nexport class TextFieldDefaults {}\n",
|
|
593
|
+
"verdict": "example"
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
"id": "validation",
|
|
597
|
+
"title": "validation.ts",
|
|
598
|
+
"note": null,
|
|
599
|
+
"language": "ts",
|
|
600
|
+
"source": "import { Component, computed, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlField, SlFieldError, SlFieldLabel } from '@slotted/angular/field';\nimport { SlInline } from '@slotted/angular/inline';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\n\nconst EMAIL = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n@Component({\n selector: 'app-text-field-validation',\n imports: [\n ReactiveFormsModule,\n SlButton,\n SlField,\n SlFieldError,\n SlFieldLabel,\n SlInline,\n SlStack,\n SlTextField,\n SlTextFieldInput,\n ],\n template: `\n <form novalidate (submit)=\"submit($event)\">\n <div slStack [gap]=\"4\">\n <div slField required [invalid]=\"error() !== '' ? true : undefined\">\n <label slFieldLabel>Billing email</label>\n <div slTextField>\n <input\n slTextFieldInput\n type=\"email\"\n autocomplete=\"email\"\n [formControl]=\"email\"\n (valueChange)=\"sent.set(false)\"\n />\n </div>\n <span slFieldError live=\"polite\" reserve>{{ error() }}</span>\n </div>\n <div slInline [gap]=\"3\" align=\"center\">\n <button slButton type=\"submit\">Send invoice</button>\n @if (sent()) {\n <span role=\"status\">Invoice sent.</span>\n }\n </div>\n </div>\n </form>\n `,\n})\nexport class TextFieldValidation {\n readonly email = new FormControl('', {\n nonNullable: true,\n validators: [Validators.required, Validators.pattern(EMAIL)],\n });\n readonly value = toSignal(this.email.valueChanges, { initialValue: this.email.value });\n readonly submitted = signal(false);\n readonly sent = signal(false);\n readonly error = computed(() => {\n if (!this.submitted()) return '';\n if (this.value().trim() === '') return 'Enter the address the invoice goes to.';\n return EMAIL.test(this.value()) ? '' : 'Enter an address in the format name@company.com.';\n });\n\n submit(event: Event): void {\n event.preventDefault();\n this.submitted.set(true);\n this.sent.set(this.email.valid);\n }\n}\n",
|
|
601
|
+
"verdict": "example"
|
|
602
|
+
}
|
|
603
|
+
]
|
|
604
|
+
}
|