@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,676 @@
|
|
|
1
|
+
<!-- index: ./index.md -->
|
|
2
|
+
# field
|
|
3
|
+
|
|
4
|
+
`data-ui="field"` · Label, control, help and error for one input.
|
|
5
|
+
|
|
6
|
+
## Examples
|
|
7
|
+
|
|
8
|
+
### Playground
|
|
9
|
+
|
|
10
|
+
One field with every axis on it, driven by the controls below the canvas. Switch labelPlacement to side and narrow the window: below 320 pixels of its own width the field stacks again.
|
|
11
|
+
|
|
12
|
+
Excerpt — not a complete module
|
|
13
|
+
|
|
14
|
+
```html
|
|
15
|
+
<div slField required>
|
|
16
|
+
<label slFieldLabel>Email</label>
|
|
17
|
+
<input slFieldControl type="email" />
|
|
18
|
+
<span slFieldDescription>We will use this address for billing.</span>
|
|
19
|
+
</div>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Saying which answers are required
|
|
23
|
+
|
|
24
|
+
The asterisk is the convention. A form where most fields are required marks the exception instead — optional writes (optional) on the fields a reader may skip and nothing on the rest — and words names both sides. All four answers come from one input an application sets once.
|
|
25
|
+
|
|
26
|
+
Example
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import { Component } from '@angular/core';
|
|
30
|
+
import { SlField, SlFieldLabel } from '@slotted/angular/field';
|
|
31
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
32
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
33
|
+
|
|
34
|
+
@Component({
|
|
35
|
+
selector: 'app-field-necessity',
|
|
36
|
+
imports: [SlField, SlFieldLabel, SlStack, SlTextField, SlTextFieldInput],
|
|
37
|
+
template: `
|
|
38
|
+
<div slStack [gap]="5">
|
|
39
|
+
<div slField required>
|
|
40
|
+
<label slFieldLabel>Company name</label>
|
|
41
|
+
<div slTextField><input slTextFieldInput /></div>
|
|
42
|
+
</div>
|
|
43
|
+
<div slField necessity="optional">
|
|
44
|
+
<label slFieldLabel>Purchase order</label>
|
|
45
|
+
<div slTextField><input slTextFieldInput /></div>
|
|
46
|
+
</div>
|
|
47
|
+
<div slField necessity="words" required>
|
|
48
|
+
<label slFieldLabel>Tax ID</label>
|
|
49
|
+
<div slTextField><input slTextFieldInput /></div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
`,
|
|
53
|
+
})
|
|
54
|
+
export class FieldNecessity {}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### The label above the control, or beside it
|
|
58
|
+
|
|
59
|
+
Drag the narrow column’s edge, or read it at 360 pixels: the side label stacks below 320 pixels of the field’s own width, so the same field reflows in a drawer and stays beside its control in a page grid.
|
|
60
|
+
|
|
61
|
+
Example
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
import { Component } from '@angular/core';
|
|
65
|
+
import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
|
|
66
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
67
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
68
|
+
|
|
69
|
+
@Component({
|
|
70
|
+
selector: 'app-field-placement',
|
|
71
|
+
imports: [SlField, SlFieldDescription, SlFieldLabel, SlStack, SlTextField, SlTextFieldInput],
|
|
72
|
+
template: `
|
|
73
|
+
<div slStack [gap]="4">
|
|
74
|
+
<div slField labelPlacement="side" required>
|
|
75
|
+
<label slFieldLabel>Legal name</label>
|
|
76
|
+
<div slTextField><input slTextFieldInput defaultValue="Northwind Traders Ltd." /></div>
|
|
77
|
+
</div>
|
|
78
|
+
<div slField labelPlacement="side" required>
|
|
79
|
+
<label slFieldLabel>Billing email</label>
|
|
80
|
+
<div slTextField>
|
|
81
|
+
<input slTextFieldInput type="email" defaultValue="billing@northwind.example" />
|
|
82
|
+
</div>
|
|
83
|
+
<span slFieldDescription>Invoices and payment receipts are sent here.</span>
|
|
84
|
+
</div>
|
|
85
|
+
<div slField labelPlacement="side">
|
|
86
|
+
<label slFieldLabel>VAT number</label>
|
|
87
|
+
<div slTextField><input slTextFieldInput defaultValue="GB 284 9113 07" /></div>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
`,
|
|
91
|
+
})
|
|
92
|
+
export class FieldPlacement {}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### The step the field sits at
|
|
96
|
+
|
|
97
|
+
Three steps matching the control the field wraps, and every one of them reads the control type scale — set the toolbar to dense and the label, the message and the counter step down together.
|
|
98
|
+
|
|
99
|
+
Example
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
import { Component } from '@angular/core';
|
|
103
|
+
import { SlField, SlFieldLabel } from '@slotted/angular/field';
|
|
104
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
105
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
106
|
+
|
|
107
|
+
@Component({
|
|
108
|
+
selector: 'app-field-sizes',
|
|
109
|
+
imports: [SlField, SlFieldLabel, SlStack, SlTextField, SlTextFieldInput],
|
|
110
|
+
template: `
|
|
111
|
+
<div slStack [gap]="5">
|
|
112
|
+
<div slField size="sm">
|
|
113
|
+
<label slFieldLabel>SKU</label>
|
|
114
|
+
<div slTextField><input slTextFieldInput defaultValue="NW-CHAI-24" /></div>
|
|
115
|
+
</div>
|
|
116
|
+
<div slField size="md">
|
|
117
|
+
<label slFieldLabel>Product name</label>
|
|
118
|
+
<div slTextField><input slTextFieldInput defaultValue="Chai tea, 24 bags" /></div>
|
|
119
|
+
</div>
|
|
120
|
+
<div slField size="lg">
|
|
121
|
+
<label slFieldLabel>Shelf label</label>
|
|
122
|
+
<div slTextField><input slTextFieldInput defaultValue="Chai — spiced black tea" /></div>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
`,
|
|
126
|
+
})
|
|
127
|
+
export class FieldSizes {}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### The four states a field can be in
|
|
131
|
+
|
|
132
|
+
The label never turns red when the field is invalid: the error already says so in words and in colour, and a red marker on a red label is a marker nobody can see. Read-only stays legible and focusable; disabled is muted to a measured colour rather than faded.
|
|
133
|
+
|
|
134
|
+
Example
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
import { Component } from '@angular/core';
|
|
138
|
+
import { SlField, SlFieldDescription, SlFieldError, SlFieldLabel } from '@slotted/angular/field';
|
|
139
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
140
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
141
|
+
|
|
142
|
+
@Component({
|
|
143
|
+
selector: 'app-field-states',
|
|
144
|
+
imports: [
|
|
145
|
+
SlField,
|
|
146
|
+
SlFieldDescription,
|
|
147
|
+
SlFieldError,
|
|
148
|
+
SlFieldLabel,
|
|
149
|
+
SlStack,
|
|
150
|
+
SlTextField,
|
|
151
|
+
SlTextFieldInput,
|
|
152
|
+
],
|
|
153
|
+
template: `
|
|
154
|
+
<div slStack [gap]="5">
|
|
155
|
+
<div slField invalid required>
|
|
156
|
+
<label slFieldLabel>Card number</label>
|
|
157
|
+
<div slTextField>
|
|
158
|
+
<input slTextFieldInput inputmode="numeric" defaultValue="4242 4242 42" />
|
|
159
|
+
</div>
|
|
160
|
+
<span slFieldError>Six digits are missing.</span>
|
|
161
|
+
</div>
|
|
162
|
+
<div slField readOnly>
|
|
163
|
+
<label slFieldLabel>Account ID</label>
|
|
164
|
+
<div slTextField><input slTextFieldInput defaultValue="acct_9f2c41" /></div>
|
|
165
|
+
<span slFieldDescription>Quote this ID when you contact support.</span>
|
|
166
|
+
</div>
|
|
167
|
+
<div slField disabled>
|
|
168
|
+
<label slFieldLabel>Workspace URL</label>
|
|
169
|
+
<div slTextField><input slTextFieldInput defaultValue="northwind.slotted.app" /></div>
|
|
170
|
+
<span slFieldDescription>Only the workspace owner can change the URL.</span>
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
173
|
+
`,
|
|
174
|
+
})
|
|
175
|
+
export class FieldStates {}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Help, errors, and the line held open for one
|
|
179
|
+
|
|
180
|
+
Both messages are inline-message roots the field renders around what the page wrote, so the error carries a clipped “Error:” a screen reader reads first. The right-hand column keeps its line with reserve, so the button below does not move when the error arrives.
|
|
181
|
+
|
|
182
|
+
Example
|
|
183
|
+
|
|
184
|
+
```ts
|
|
185
|
+
import { Component } from '@angular/core';
|
|
186
|
+
import { SlField, SlFieldDescription, SlFieldError, SlFieldLabel } from '@slotted/angular/field';
|
|
187
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
188
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
189
|
+
|
|
190
|
+
@Component({
|
|
191
|
+
selector: 'app-field-messages',
|
|
192
|
+
imports: [
|
|
193
|
+
SlField,
|
|
194
|
+
SlFieldDescription,
|
|
195
|
+
SlFieldError,
|
|
196
|
+
SlFieldLabel,
|
|
197
|
+
SlStack,
|
|
198
|
+
SlTextField,
|
|
199
|
+
SlTextFieldInput,
|
|
200
|
+
],
|
|
201
|
+
template: `
|
|
202
|
+
<div slStack [gap]="5">
|
|
203
|
+
<div slField>
|
|
204
|
+
<label slFieldLabel>Purchase order</label>
|
|
205
|
+
<div slTextField><input slTextFieldInput defaultValue="PO-20418" /></div>
|
|
206
|
+
<span slFieldDescription>Printed on the invoice so your accounts team can match it.</span>
|
|
207
|
+
</div>
|
|
208
|
+
<div slField invalid>
|
|
209
|
+
<label slFieldLabel>Postal code</label>
|
|
210
|
+
<div slTextField><input slTextFieldInput defaultValue="981" /></div>
|
|
211
|
+
<span slFieldDescription>Five digits, as on the shipping label.</span>
|
|
212
|
+
<span slFieldError>Enter all five digits.</span>
|
|
213
|
+
</div>
|
|
214
|
+
<div slField>
|
|
215
|
+
<label slFieldLabel>Discount</label>
|
|
216
|
+
<div slTextField><input slTextFieldInput defaultValue="45%" /></div>
|
|
217
|
+
<span slFieldError tone="warning">Above 40% the order waits for a manager's approval.</span>
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
`,
|
|
221
|
+
})
|
|
222
|
+
export class FieldMessages {}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Counting what the page is counting
|
|
226
|
+
|
|
227
|
+
The count sits in the label row’s spare column, so it never shares a row with the error and never adds one. It turns at its own limit rather than at the field’s, because a count passes its maximum before validation runs.
|
|
228
|
+
|
|
229
|
+
Example
|
|
230
|
+
|
|
231
|
+
```ts
|
|
232
|
+
import { Component, computed, signal } from '@angular/core';
|
|
233
|
+
import {
|
|
234
|
+
SlField,
|
|
235
|
+
SlFieldCounter,
|
|
236
|
+
SlFieldDescription,
|
|
237
|
+
SlFieldHeader,
|
|
238
|
+
SlFieldLabel,
|
|
239
|
+
} from '@slotted/angular/field';
|
|
240
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
241
|
+
import { SlTextarea } from '@slotted/angular/textarea';
|
|
242
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
243
|
+
|
|
244
|
+
const MAX_TAGS = 5;
|
|
245
|
+
|
|
246
|
+
@Component({
|
|
247
|
+
selector: 'app-field-counter',
|
|
248
|
+
imports: [
|
|
249
|
+
SlField,
|
|
250
|
+
SlFieldCounter,
|
|
251
|
+
SlFieldDescription,
|
|
252
|
+
SlFieldHeader,
|
|
253
|
+
SlFieldLabel,
|
|
254
|
+
SlStack,
|
|
255
|
+
SlTextarea,
|
|
256
|
+
SlTextField,
|
|
257
|
+
SlTextFieldInput,
|
|
258
|
+
],
|
|
259
|
+
template: `
|
|
260
|
+
<div slStack [gap]="5">
|
|
261
|
+
<div slField>
|
|
262
|
+
<label slFieldLabel>Public description</label>
|
|
263
|
+
<textarea
|
|
264
|
+
slTextarea
|
|
265
|
+
autoSize
|
|
266
|
+
countMax="140"
|
|
267
|
+
showCount
|
|
268
|
+
defaultValue="Ships within two business days. Returns are free for thirty days."
|
|
269
|
+
></textarea>
|
|
270
|
+
</div>
|
|
271
|
+
<div slField [invalid]="over() ? true : undefined">
|
|
272
|
+
<div slFieldHeader>
|
|
273
|
+
<label slFieldLabel>Search tags</label>
|
|
274
|
+
<span slFieldCounter [invalid]="over()">{{ count() }}/{{ max }} tags</span>
|
|
275
|
+
</div>
|
|
276
|
+
<div slTextField>
|
|
277
|
+
<input slTextFieldInput [value]="tags()" (valueChange)="tags.set($event.value)" />
|
|
278
|
+
</div>
|
|
279
|
+
<span slFieldDescription>Separate tags with commas.</span>
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
`,
|
|
283
|
+
})
|
|
284
|
+
export class FieldCounter {
|
|
285
|
+
readonly max = MAX_TAGS;
|
|
286
|
+
readonly tags = signal('tea, organic, fair trade');
|
|
287
|
+
readonly count = computed(
|
|
288
|
+
() =>
|
|
289
|
+
this.tags()
|
|
290
|
+
.split(',')
|
|
291
|
+
.filter((tag) => tag.trim() !== '').length,
|
|
292
|
+
);
|
|
293
|
+
readonly over = computed(() => this.count() > MAX_TAGS);
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### The label row: help, indicator, action and count
|
|
298
|
+
|
|
299
|
+
Hover the circle, or tab to it: the hint opens. Press it and it stays until a second press, which is what a finger needs. The row is as tall as the label with or without them, aligns on the label’s baseline, and in a narrow field sends the action and the count to a line of their own.
|
|
300
|
+
|
|
301
|
+
Example
|
|
302
|
+
|
|
303
|
+
```ts
|
|
304
|
+
import { Component } from '@angular/core';
|
|
305
|
+
import { SlBadge } from '@slotted/angular/badge';
|
|
306
|
+
import {
|
|
307
|
+
SlField,
|
|
308
|
+
SlFieldAction,
|
|
309
|
+
SlFieldHeader,
|
|
310
|
+
SlFieldIndicator,
|
|
311
|
+
SlFieldLabel,
|
|
312
|
+
} from '@slotted/angular/field';
|
|
313
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
314
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
315
|
+
|
|
316
|
+
@Component({
|
|
317
|
+
selector: 'app-field-header',
|
|
318
|
+
imports: [
|
|
319
|
+
SlBadge,
|
|
320
|
+
SlField,
|
|
321
|
+
SlFieldAction,
|
|
322
|
+
SlFieldHeader,
|
|
323
|
+
SlFieldIndicator,
|
|
324
|
+
SlFieldLabel,
|
|
325
|
+
SlStack,
|
|
326
|
+
SlTextField,
|
|
327
|
+
SlTextFieldInput,
|
|
328
|
+
],
|
|
329
|
+
template: `
|
|
330
|
+
<div slStack [gap]="5">
|
|
331
|
+
<div slField required>
|
|
332
|
+
<div slFieldHeader>
|
|
333
|
+
<label slFieldLabel>Password</label>
|
|
334
|
+
<a slFieldAction href="#reset-password">Forgot password?</a>
|
|
335
|
+
</div>
|
|
336
|
+
<div slTextField>
|
|
337
|
+
<input slTextFieldInput type="password" autocomplete="current-password" />
|
|
338
|
+
</div>
|
|
339
|
+
</div>
|
|
340
|
+
<div slField>
|
|
341
|
+
<div slFieldHeader>
|
|
342
|
+
<label slFieldLabel>Webhook URL</label>
|
|
343
|
+
<span slFieldIndicator>
|
|
344
|
+
<span slBadge size="sm" tone="accent" variant="soft">Beta</span>
|
|
345
|
+
</span>
|
|
346
|
+
<button slFieldAction>Send test event</button>
|
|
347
|
+
</div>
|
|
348
|
+
<div slTextField>
|
|
349
|
+
<input
|
|
350
|
+
slTextFieldInput
|
|
351
|
+
type="url"
|
|
352
|
+
defaultValue="https://hooks.northwind.example/orders"
|
|
353
|
+
/>
|
|
354
|
+
</div>
|
|
355
|
+
</div>
|
|
356
|
+
</div>
|
|
357
|
+
`,
|
|
358
|
+
})
|
|
359
|
+
export class FieldHeader {}
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### Content the field did not choose
|
|
363
|
+
|
|
364
|
+
A German compound with no break opportunity, a container digest in the description, and an Arabic field in a right-to-left document — the label breaks rather than sliding under the control, and the necessity word never breaks.
|
|
365
|
+
|
|
366
|
+
Excerpt — not a complete module
|
|
367
|
+
|
|
368
|
+
```html
|
|
369
|
+
<div slField labelPlacement="side" lang="ar" dir="rtl">
|
|
370
|
+
<label slFieldLabel>رقم التعريف الضريبي</label>
|
|
371
|
+
<input slFieldControl />
|
|
372
|
+
</div>
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### Composition and escape hatches
|
|
376
|
+
|
|
377
|
+
provideFieldDefaults sets the whole application’s fields once, exportAs hands a template the identifiers the field derived, and slFieldControl wires a control the library does not own without wrapping it in anything.
|
|
378
|
+
|
|
379
|
+
Excerpt — not a complete module
|
|
380
|
+
|
|
381
|
+
```ts
|
|
382
|
+
bootstrapApplication(App, {
|
|
383
|
+
providers: [provideFieldDefaults({ size: 'sm', necessity: 'words' })],
|
|
384
|
+
});
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### What a reader hears, in order
|
|
388
|
+
|
|
389
|
+
Turn a screen reader on and enter the control: the label, then “required”, then the indicator, the help behind the icon, the description, the count and the error — one name, one description in a fixed order, and no asterisk read aloud.
|
|
390
|
+
|
|
391
|
+
Excerpt — not a complete module
|
|
392
|
+
|
|
393
|
+
```html
|
|
394
|
+
<div data-ui="field" data-part="root">
|
|
395
|
+
<div data-part="header">
|
|
396
|
+
<label data-part="label" for="cnpj-control">
|
|
397
|
+
Tax ID<span aria-hidden="true" data-part="mark">*</span>
|
|
398
|
+
</label>
|
|
399
|
+
<button data-part="help" aria-label="More information" aria-describedby="cnpj-help">
|
|
400
|
+
<span data-part="help-text" id="cnpj-help" hidden>Numbers only.</span>
|
|
401
|
+
</button>
|
|
402
|
+
</div>
|
|
403
|
+
<input
|
|
404
|
+
data-part="control"
|
|
405
|
+
id="cnpj-control"
|
|
406
|
+
aria-describedby="cnpj-help cnpj-description cnpj-error"
|
|
407
|
+
aria-invalid="true"
|
|
408
|
+
aria-required="true"
|
|
409
|
+
/>
|
|
410
|
+
</div>
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### controls.ts
|
|
414
|
+
|
|
415
|
+
Example
|
|
416
|
+
|
|
417
|
+
```ts
|
|
418
|
+
import { Component, signal } from '@angular/core';
|
|
419
|
+
import { SlDatePicker } from '@slotted/angular/date-picker';
|
|
420
|
+
import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
|
|
421
|
+
import { SlNumberField, SlNumberFieldInput } from '@slotted/angular/number-field';
|
|
422
|
+
import { SlSelect, SlSelectItem, type SelectOption } from '@slotted/angular/select';
|
|
423
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
424
|
+
|
|
425
|
+
@Component({
|
|
426
|
+
selector: 'app-field-controls',
|
|
427
|
+
imports: [
|
|
428
|
+
SlDatePicker,
|
|
429
|
+
SlField,
|
|
430
|
+
SlFieldDescription,
|
|
431
|
+
SlFieldLabel,
|
|
432
|
+
SlNumberField,
|
|
433
|
+
SlNumberFieldInput,
|
|
434
|
+
SlSelect,
|
|
435
|
+
SlSelectItem,
|
|
436
|
+
SlStack,
|
|
437
|
+
],
|
|
438
|
+
template: `
|
|
439
|
+
<div slStack [gap]="5">
|
|
440
|
+
<div slField required>
|
|
441
|
+
<label slFieldLabel>Payment terms</label>
|
|
442
|
+
<sl-select placeholder="Choose terms" [items]="termOptions" [(value)]="terms">
|
|
443
|
+
@for (term of termOptions; track term.value) {
|
|
444
|
+
<sl-select-item [value]="term.value">{{ term.label }}</sl-select-item>
|
|
445
|
+
}
|
|
446
|
+
</sl-select>
|
|
447
|
+
</div>
|
|
448
|
+
<div slField required>
|
|
449
|
+
<label slFieldLabel>Quantity</label>
|
|
450
|
+
<div slNumberField>
|
|
451
|
+
<input slNumberFieldInput defaultValue="12" min="1" max="500" />
|
|
452
|
+
</div>
|
|
453
|
+
<span slFieldDescription>Cases of 24 bags.</span>
|
|
454
|
+
</div>
|
|
455
|
+
<div slField>
|
|
456
|
+
<label slFieldLabel>Delivery date</label>
|
|
457
|
+
<div slDatePicker locale="en-US"></div>
|
|
458
|
+
</div>
|
|
459
|
+
</div>
|
|
460
|
+
`,
|
|
461
|
+
})
|
|
462
|
+
export class FieldControls {
|
|
463
|
+
readonly termOptions: SelectOption[] = [
|
|
464
|
+
{ value: 'net-15', label: 'Net 15' },
|
|
465
|
+
{ value: 'net-30', label: 'Net 30' },
|
|
466
|
+
{ value: 'net-60', label: 'Net 60' },
|
|
467
|
+
];
|
|
468
|
+
readonly terms = signal<string | null>('net-30');
|
|
469
|
+
}
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
### custom-control.ts
|
|
473
|
+
|
|
474
|
+
Example
|
|
475
|
+
|
|
476
|
+
```ts
|
|
477
|
+
import { Component } from '@angular/core';
|
|
478
|
+
import { SlField, SlFieldControl, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
|
|
479
|
+
|
|
480
|
+
@Component({
|
|
481
|
+
selector: 'app-field-custom-control',
|
|
482
|
+
imports: [SlField, SlFieldControl, SlFieldDescription, SlFieldLabel],
|
|
483
|
+
template: `
|
|
484
|
+
<div slField>
|
|
485
|
+
<label slFieldLabel>Brand colour</label>
|
|
486
|
+
<input slFieldControl type="color" value="#2f6fde" />
|
|
487
|
+
<span slFieldDescription>Used on invoices and in the customer portal.</span>
|
|
488
|
+
</div>
|
|
489
|
+
`,
|
|
490
|
+
})
|
|
491
|
+
export class FieldCustomControl {}
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
### defaults.ts
|
|
495
|
+
|
|
496
|
+
Example
|
|
497
|
+
|
|
498
|
+
```ts
|
|
499
|
+
import { Component } from '@angular/core';
|
|
500
|
+
import { provideFieldDefaults, SlField, SlFieldLabel } from '@slotted/angular/field';
|
|
501
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
502
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
503
|
+
|
|
504
|
+
@Component({
|
|
505
|
+
selector: 'app-field-defaults',
|
|
506
|
+
imports: [SlField, SlFieldLabel, SlStack, SlTextField, SlTextFieldInput],
|
|
507
|
+
providers: [provideFieldDefaults({ size: 'sm', labelPlacement: 'side', necessity: 'optional' })],
|
|
508
|
+
template: `
|
|
509
|
+
<div slStack [gap]="3">
|
|
510
|
+
<div slField required>
|
|
511
|
+
<label slFieldLabel>Warehouse</label>
|
|
512
|
+
<div slTextField><input slTextFieldInput defaultValue="Seattle — Pier 91" /></div>
|
|
513
|
+
</div>
|
|
514
|
+
<div slField required>
|
|
515
|
+
<label slFieldLabel>Bin location</label>
|
|
516
|
+
<div slTextField><input slTextFieldInput defaultValue="A-14-03" /></div>
|
|
517
|
+
</div>
|
|
518
|
+
<div slField>
|
|
519
|
+
<label slFieldLabel>Picking note</label>
|
|
520
|
+
<div slTextField><input slTextFieldInput /></div>
|
|
521
|
+
</div>
|
|
522
|
+
</div>
|
|
523
|
+
`,
|
|
524
|
+
})
|
|
525
|
+
export class FieldDefaults {}
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
### help.ts
|
|
529
|
+
|
|
530
|
+
Example
|
|
531
|
+
|
|
532
|
+
```ts
|
|
533
|
+
import { Component } from '@angular/core';
|
|
534
|
+
import { SlField, SlFieldHeader, SlFieldHelp, SlFieldLabel } from '@slotted/angular/field';
|
|
535
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
536
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
537
|
+
|
|
538
|
+
@Component({
|
|
539
|
+
selector: 'app-field-help',
|
|
540
|
+
imports: [
|
|
541
|
+
SlField,
|
|
542
|
+
SlFieldHeader,
|
|
543
|
+
SlFieldHelp,
|
|
544
|
+
SlFieldLabel,
|
|
545
|
+
SlStack,
|
|
546
|
+
SlTextField,
|
|
547
|
+
SlTextFieldInput,
|
|
548
|
+
],
|
|
549
|
+
template: `
|
|
550
|
+
<div slStack [gap]="5">
|
|
551
|
+
<div slField required>
|
|
552
|
+
<div slFieldHeader>
|
|
553
|
+
<label slFieldLabel>Cost centre</label>
|
|
554
|
+
<button
|
|
555
|
+
slFieldHelp="The four-digit code finance assigns to your team. It appears on every invoice line."
|
|
556
|
+
></button>
|
|
557
|
+
</div>
|
|
558
|
+
<div slTextField><input slTextFieldInput inputmode="numeric" defaultValue="4120" /></div>
|
|
559
|
+
</div>
|
|
560
|
+
<div slField disabled>
|
|
561
|
+
<div slFieldHeader>
|
|
562
|
+
<label slFieldLabel>Billing currency</label>
|
|
563
|
+
<button
|
|
564
|
+
slFieldHelp="Set when the workspace was created. Contact support to change it."
|
|
565
|
+
></button>
|
|
566
|
+
</div>
|
|
567
|
+
<div slTextField><input slTextFieldInput defaultValue="USD — US dollar" /></div>
|
|
568
|
+
</div>
|
|
569
|
+
</div>
|
|
570
|
+
`,
|
|
571
|
+
})
|
|
572
|
+
export class FieldHelp {}
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
### narrow.ts
|
|
576
|
+
|
|
577
|
+
Example
|
|
578
|
+
|
|
579
|
+
```ts
|
|
580
|
+
import { Component } from '@angular/core';
|
|
581
|
+
import { SlField, SlFieldLabel } from '@slotted/angular/field';
|
|
582
|
+
import { SlGrid } from '@slotted/angular/grid';
|
|
583
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
584
|
+
|
|
585
|
+
@Component({
|
|
586
|
+
selector: 'app-field-narrow',
|
|
587
|
+
imports: [SlField, SlFieldLabel, SlGrid, SlTextField, SlTextFieldInput],
|
|
588
|
+
template: `
|
|
589
|
+
<div slGrid [columns]="2" minItemWidth="xs" [gap]="4">
|
|
590
|
+
<div slField labelPlacement="side">
|
|
591
|
+
<label slFieldLabel>City</label>
|
|
592
|
+
<div slTextField><input slTextFieldInput defaultValue="Seattle" /></div>
|
|
593
|
+
</div>
|
|
594
|
+
<div slField labelPlacement="side">
|
|
595
|
+
<label slFieldLabel>Postal code</label>
|
|
596
|
+
<div slTextField><input slTextFieldInput defaultValue="98104" /></div>
|
|
597
|
+
</div>
|
|
598
|
+
</div>
|
|
599
|
+
`,
|
|
600
|
+
})
|
|
601
|
+
export class FieldNarrow {}
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
### validation.ts
|
|
605
|
+
|
|
606
|
+
Example
|
|
607
|
+
|
|
608
|
+
```ts
|
|
609
|
+
import { Component, computed, signal } from '@angular/core';
|
|
610
|
+
import { SlButton } from '@slotted/angular/button';
|
|
611
|
+
import { SlField, SlFieldError, SlFieldLabel } from '@slotted/angular/field';
|
|
612
|
+
import { SlInline } from '@slotted/angular/inline';
|
|
613
|
+
import { SlStack } from '@slotted/angular/stack';
|
|
614
|
+
import { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';
|
|
615
|
+
|
|
616
|
+
function emailError(value: string): string {
|
|
617
|
+
if (value.trim() === '') return 'Enter the address invoices are sent to.';
|
|
618
|
+
if (!/^\S+@\S+\.\S+$/.test(value)) return 'Enter an address like billing@company.com.';
|
|
619
|
+
return '';
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
@Component({
|
|
623
|
+
selector: 'app-field-validation',
|
|
624
|
+
imports: [
|
|
625
|
+
SlButton,
|
|
626
|
+
SlField,
|
|
627
|
+
SlFieldError,
|
|
628
|
+
SlFieldLabel,
|
|
629
|
+
SlInline,
|
|
630
|
+
SlStack,
|
|
631
|
+
SlTextField,
|
|
632
|
+
SlTextFieldInput,
|
|
633
|
+
],
|
|
634
|
+
template: `
|
|
635
|
+
<form novalidate (submit)="submit($event)">
|
|
636
|
+
<div slStack [gap]="4">
|
|
637
|
+
<div slField required [invalid]="error() !== '' ? true : undefined">
|
|
638
|
+
<label slFieldLabel>Billing email</label>
|
|
639
|
+
<div slTextField>
|
|
640
|
+
<input
|
|
641
|
+
slTextFieldInput
|
|
642
|
+
type="email"
|
|
643
|
+
[value]="email()"
|
|
644
|
+
(valueChange)="edit($event.value)"
|
|
645
|
+
/>
|
|
646
|
+
</div>
|
|
647
|
+
<span slFieldError live="polite" reserve>{{ error() }}</span>
|
|
648
|
+
</div>
|
|
649
|
+
<div slInline [gap]="3" align="center">
|
|
650
|
+
<button slButton type="submit">Save billing details</button>
|
|
651
|
+
@if (saved()) {
|
|
652
|
+
<span role="status">Saved.</span>
|
|
653
|
+
}
|
|
654
|
+
</div>
|
|
655
|
+
</div>
|
|
656
|
+
</form>
|
|
657
|
+
`,
|
|
658
|
+
})
|
|
659
|
+
export class FieldValidation {
|
|
660
|
+
readonly email = signal('');
|
|
661
|
+
readonly submitted = signal(false);
|
|
662
|
+
readonly saved = signal(false);
|
|
663
|
+
readonly error = computed(() => (this.submitted() ? emailError(this.email()) : ''));
|
|
664
|
+
|
|
665
|
+
edit(value: string): void {
|
|
666
|
+
this.email.set(value);
|
|
667
|
+
this.saved.set(false);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
submit(event: Event): void {
|
|
671
|
+
event.preventDefault();
|
|
672
|
+
this.submitted.set(true);
|
|
673
|
+
this.saved.set(emailError(this.email()) === '');
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
```
|