@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
package/docs/field.json
ADDED
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
{
|
|
2
|
+
"family": "field",
|
|
3
|
+
"ui": "field",
|
|
4
|
+
"binding": "angular",
|
|
5
|
+
"catalog": {
|
|
6
|
+
"group": "Forms",
|
|
7
|
+
"summary": "Label, control, help and error for one input."
|
|
8
|
+
},
|
|
9
|
+
"axes": {
|
|
10
|
+
"size": [
|
|
11
|
+
"sm",
|
|
12
|
+
"md",
|
|
13
|
+
"lg"
|
|
14
|
+
],
|
|
15
|
+
"labelPlacement": [
|
|
16
|
+
"top",
|
|
17
|
+
"side"
|
|
18
|
+
],
|
|
19
|
+
"necessity": [
|
|
20
|
+
"mark",
|
|
21
|
+
"optional",
|
|
22
|
+
"words",
|
|
23
|
+
"none"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"members": {
|
|
27
|
+
"field": {
|
|
28
|
+
"nativeElement": "div",
|
|
29
|
+
"defaults": {
|
|
30
|
+
"size": "md",
|
|
31
|
+
"labelPlacement": "top",
|
|
32
|
+
"necessity": "mark"
|
|
33
|
+
},
|
|
34
|
+
"capabilities": [
|
|
35
|
+
"appearance",
|
|
36
|
+
"size",
|
|
37
|
+
"placement",
|
|
38
|
+
"live",
|
|
39
|
+
"disabled",
|
|
40
|
+
"invalid",
|
|
41
|
+
"required",
|
|
42
|
+
"readOnly",
|
|
43
|
+
"open",
|
|
44
|
+
"wiring"
|
|
45
|
+
],
|
|
46
|
+
"states": [
|
|
47
|
+
"default",
|
|
48
|
+
"hover",
|
|
49
|
+
"active",
|
|
50
|
+
"focus-visible",
|
|
51
|
+
"disabled",
|
|
52
|
+
"invalid",
|
|
53
|
+
"required",
|
|
54
|
+
"readonly",
|
|
55
|
+
"open"
|
|
56
|
+
],
|
|
57
|
+
"parts": [
|
|
58
|
+
"root",
|
|
59
|
+
"header",
|
|
60
|
+
"label",
|
|
61
|
+
"mark",
|
|
62
|
+
"help",
|
|
63
|
+
"indicator",
|
|
64
|
+
"action",
|
|
65
|
+
"counter",
|
|
66
|
+
"control"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"docs": {
|
|
71
|
+
"field": {
|
|
72
|
+
"imports": {
|
|
73
|
+
"source": "import {\n provideFieldDefaults,\n SlField,\n SlFieldAction,\n SlFieldControl,\n SlFieldCounter,\n SlFieldDescription,\n SlFieldError,\n SlFieldHeader,\n SlFieldHelp,\n SlFieldIndicator,\n SlFieldLabel,\n} from '@slotted/angular/field';",
|
|
74
|
+
"selector": "[slField]",
|
|
75
|
+
"exportAs": "slField"
|
|
76
|
+
},
|
|
77
|
+
"anatomy": [
|
|
78
|
+
{
|
|
79
|
+
"part": "root",
|
|
80
|
+
"element": "the element carrying slField, a div",
|
|
81
|
+
"required": true,
|
|
82
|
+
"purpose": "The field. It carries data-ui=\"field\", the three axes, and data-disabled, data-invalid, data-required and data-readonly. It is its own size container, so a side label reflows on the field’s width rather than the window’s."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"part": "header",
|
|
86
|
+
"element": "the element carrying slFieldHeader, a div",
|
|
87
|
+
"required": false,
|
|
88
|
+
"purpose": "The label row, written when the label has company: the help, an indicator, an action and the counter. It aligns them on the label’s first baseline, wraps when it runs out of room, and puts the action and the count at its end. When the page writes no counter, it draws the count the control published. A field whose label stands alone writes the label on the root and no header."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"part": "label",
|
|
92
|
+
"element": "label[slFieldLabel]",
|
|
93
|
+
"required": false,
|
|
94
|
+
"purpose": "Names the control through for, which points at the derived control identifier. The WAI-ARIA Authoring Practices name the explicit association as the one with the broadest support; some assistive technologies fail to treat the implicit one, a label wrapping its control, as a name."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"part": "mark",
|
|
98
|
+
"element": "span, drawn inside the label",
|
|
99
|
+
"required": false,
|
|
100
|
+
"purpose": "The necessity marker the label draws: an asterisk on a required field, (optional) on a field a reader may skip, or both words. The asterisk is aria-hidden because aria-required already states the fact; the words are read, because they carry information."
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"part": "help",
|
|
104
|
+
"element": "button[slFieldHelp]",
|
|
105
|
+
"required": false,
|
|
106
|
+
"purpose": "A circle-question button beside the label that shows the directive’s value in a tooltip. It opens on hover and on keyboard focus, and a press keeps it open until a second press, Escape or a press elsewhere. SlTooltip and SlTooltipTrigger are composed on the button as host directives. A hidden node inside the button carries the same words, so the button and the control are described by the help whether the tooltip is open or not."
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"part": "indicator",
|
|
110
|
+
"element": "the element carrying slFieldIndicator, a span",
|
|
111
|
+
"required": false,
|
|
112
|
+
"purpose": "What qualifies the field, such as Beta, Pro or New, as one or more slBadge elements after the label. It sits outside the label, so the necessity mark stays against the last word, and it joins the control’s description, so a reader on the control hears it."
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"part": "action",
|
|
116
|
+
"element": "the a or button carrying slFieldAction",
|
|
117
|
+
"required": false,
|
|
118
|
+
"purpose": "A link or a button at the end of the label row, such as Forgot password? or Generate. On a button the directive writes type=\"button\" unless the page wrote a type; on a link it writes none. The field does not disable it with the control."
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"part": "control",
|
|
122
|
+
"element": "the element carrying slFieldControl",
|
|
123
|
+
"required": false,
|
|
124
|
+
"purpose": "A control Slotted does not ship. Slotted’s own controls inject SlField and need no directive. The field gives the control an identifier, a description, aria-invalid, aria-required, disabled and readonly, and overwrites nothing the consumer wrote: each written value is read with HostAttributeToken before the binding is computed."
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"part": "counter",
|
|
128
|
+
"element": "the element carrying slFieldCounter",
|
|
129
|
+
"required": false,
|
|
130
|
+
"purpose": "The count, at the end of the label row, where IBM Carbon also places it, and inside the header when there is one. A control with showCount publishes its count and the field draws it; a page that counts words or bytes writes its own slFieldCounter. The count joins the control’s description and carries its own data-invalid, because a count can pass its limit before validation runs."
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
"api": [
|
|
134
|
+
{
|
|
135
|
+
"name": "size",
|
|
136
|
+
"type": "'sm' | 'md' | 'lg'",
|
|
137
|
+
"defaultValue": "md",
|
|
138
|
+
"appliesTo": "slField",
|
|
139
|
+
"description": "The type step, matching the control the field wraps. The label, the messages and the counter read the control type scale, which the theme restates per density."
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"name": "labelPlacement",
|
|
143
|
+
"type": "'top' | 'side'",
|
|
144
|
+
"defaultValue": "top",
|
|
145
|
+
"appliesTo": "slField",
|
|
146
|
+
"description": "Where the label sits. side reflows to top when the field’s own inline size is below 320 pixels; the query is a container query, not a viewport query."
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"name": "necessity",
|
|
150
|
+
"type": "'mark' | 'optional' | 'words' | 'none'",
|
|
151
|
+
"defaultValue": "mark",
|
|
152
|
+
"appliesTo": "slField",
|
|
153
|
+
"description": "How necessity is written: an asterisk on a required field, (optional) on a field a reader may skip, both words, or nothing, for a form that says once that every field is required."
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"name": "messages",
|
|
157
|
+
"type": "Partial<FieldMessages>",
|
|
158
|
+
"defaultValue": "—",
|
|
159
|
+
"appliesTo": "slField",
|
|
160
|
+
"description": "Words that replace the active language’s, key by key: the necessity words (optional, required) and the help button’s name (help)."
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"name": "required",
|
|
164
|
+
"type": "boolean",
|
|
165
|
+
"defaultValue": "—",
|
|
166
|
+
"appliesTo": "slField",
|
|
167
|
+
"description": "Unset rather than false. Reaches the control as aria-required, never as the native required, which would turn on browser constraint validation and change how the form submits."
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"name": "invalid",
|
|
171
|
+
"type": "boolean",
|
|
172
|
+
"defaultValue": "—",
|
|
173
|
+
"appliesTo": "slField, slFieldCounter",
|
|
174
|
+
"description": "On slField: unset rather than false; writes aria-invalid on the control and data-invalid on the field, and leaves the label’s colour unchanged. On slFieldCounter: the count has passed its limit, which can happen before validation runs, so it is the counter’s own state and defaults to false."
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"name": "disabled",
|
|
178
|
+
"type": "boolean",
|
|
179
|
+
"defaultValue": "from the group, then the token",
|
|
180
|
+
"appliesTo": "slField, provideFieldDefaults",
|
|
181
|
+
"description": "Unset rather than false, so a field follows the slFieldGroup around it. A stated value wins, and it reaches the control as the native attribute."
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"name": "readOnly",
|
|
185
|
+
"type": "boolean",
|
|
186
|
+
"defaultValue": "from the group, then the token",
|
|
187
|
+
"appliesTo": "slField, provideFieldDefaults",
|
|
188
|
+
"description": "Unset rather than false. Reaches the control as the native readonly, which keeps the value focusable and copyable."
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"name": "id",
|
|
192
|
+
"type": "string",
|
|
193
|
+
"defaultValue": "generated",
|
|
194
|
+
"appliesTo": "slField",
|
|
195
|
+
"description": "A static attribute, read with HostAttributeToken, that is the base of <id>-control, <id>-label, <id>-indicator, <id>-help, <id>-description, <id>-counter and <id>-error. When unset, an application-scoped factory generates it, so two applications in one server process do not collide."
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"name": "slFieldHelp",
|
|
199
|
+
"type": "string",
|
|
200
|
+
"defaultValue": "''",
|
|
201
|
+
"appliesTo": "button[slFieldHelp]",
|
|
202
|
+
"description": "The help text, written once as the directive’s value. It reaches the tooltip and the hidden node that describes the button and the control."
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"name": "open",
|
|
206
|
+
"type": "boolean",
|
|
207
|
+
"defaultValue": "false",
|
|
208
|
+
"appliesTo": "button[slFieldHelp]",
|
|
209
|
+
"description": "Whether the hint is showing. It is the composed SlTooltip’s model, exposed on the button, so [(open)] binds it both ways."
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"name": "side",
|
|
213
|
+
"type": "'top' | 'bottom' | 'inline-start' | 'inline-end' | 'left' | 'right'",
|
|
214
|
+
"defaultValue": "top",
|
|
215
|
+
"appliesTo": "button[slFieldHelp]",
|
|
216
|
+
"description": "Where the hint opens. It flips to the opposite side when there is no room."
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"name": "aria-label",
|
|
220
|
+
"type": "string",
|
|
221
|
+
"defaultValue": "messages.help",
|
|
222
|
+
"appliesTo": "button[slFieldHelp]",
|
|
223
|
+
"description": "The accessible name of the help button, read with HostAttributeToken. Unset, it is the field’s help message; written, it applies to this button alone."
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"name": "type",
|
|
227
|
+
"type": "'button' | 'submit' | 'reset'",
|
|
228
|
+
"defaultValue": "button on a button",
|
|
229
|
+
"appliesTo": "[slFieldAction]",
|
|
230
|
+
"description": "Written on a button that states no type, so the action never submits the form it sits in. A link gets none."
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"name": "tone",
|
|
234
|
+
"type": "'accent' | 'secondary' | 'success' | 'warning' | 'danger'",
|
|
235
|
+
"defaultValue": "secondary on slFieldDescription, danger on slFieldError",
|
|
236
|
+
"appliesTo": "slFieldDescription, slFieldError",
|
|
237
|
+
"description": "Both messages are inline-message roots and take its five tones, so a warning that does not block submission is slFieldError with tone=\"warning\"."
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"name": "mark",
|
|
241
|
+
"type": "'glyph' | 'dot' | 'none'",
|
|
242
|
+
"defaultValue": "none",
|
|
243
|
+
"appliesTo": "slFieldDescription, slFieldError",
|
|
244
|
+
"description": "The mark the message draws. A field’s messages draw none by default: an icon repeated under every control of a form reads as texture, and the ink and the sentence already state the tone. glyph draws the tone’s icon at the text size, and dot draws one neutral bullet."
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"name": "live",
|
|
248
|
+
"type": "'off' | 'polite' | 'assertive'",
|
|
249
|
+
"defaultValue": "off",
|
|
250
|
+
"appliesTo": "slFieldDescription, slFieldError",
|
|
251
|
+
"description": "Whether the message announces itself. off by default, because a message present when the page loads is not announced whatever role it carries."
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"name": "reserve",
|
|
255
|
+
"type": "boolean",
|
|
256
|
+
"defaultValue": "false",
|
|
257
|
+
"appliesTo": "slFieldDescription, slFieldError",
|
|
258
|
+
"description": "Keeps one line open whether or not there is a message, so a form that renders its error unconditionally does not move when the error appears."
|
|
259
|
+
}
|
|
260
|
+
],
|
|
261
|
+
"composition": [
|
|
262
|
+
{
|
|
263
|
+
"name": "exportAs=\"slFieldHelp\"",
|
|
264
|
+
"type": "SlFieldHelp",
|
|
265
|
+
"defaultValue": "—",
|
|
266
|
+
"appliesTo": "button[slFieldHelp]",
|
|
267
|
+
"description": "Hands the template the help button. Its state is the composed tooltip’s, bound through [(open)] and (openChangeRequest) rather than through a method."
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"name": "exportAs=\"slField\"",
|
|
271
|
+
"type": "SlField",
|
|
272
|
+
"defaultValue": "—",
|
|
273
|
+
"appliesTo": "slField",
|
|
274
|
+
"description": "Hands the template the field instance, so a page can point its own element at ids().control, ids().description or ids().error without inventing an identifier, and read count() to draw a count of its own."
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"name": "slFieldControl",
|
|
278
|
+
"type": "directive",
|
|
279
|
+
"defaultValue": "—",
|
|
280
|
+
"appliesTo": "any control element",
|
|
281
|
+
"description": "Wires a control Slotted does not ship, on the consumer’s own element. Slotted’s own controls inject SlField themselves and need no directive, so their wiring cannot be written wrong."
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"name": "provideFieldDefaults()",
|
|
285
|
+
"type": "{ size, labelPlacement, necessity, disabled, readOnly }",
|
|
286
|
+
"defaultValue": "—",
|
|
287
|
+
"appliesTo": "an application, a route or a component",
|
|
288
|
+
"description": "The five decisions an application takes once for every field under the provider. slFieldGroup answers the same source for its own subtree, so a compact or disabled section is one attribute instead of one per field."
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"name": "ng-content",
|
|
292
|
+
"type": "projected content",
|
|
293
|
+
"defaultValue": "—",
|
|
294
|
+
"appliesTo": "slField",
|
|
295
|
+
"description": "The label or the header, the counter and the two message directives are selected by name; everything else, the control and anything beside it, is projected as written. slFieldHeader projects its content in the order the page wrote it."
|
|
296
|
+
}
|
|
297
|
+
],
|
|
298
|
+
"events": [
|
|
299
|
+
{
|
|
300
|
+
"name": "(openChange)",
|
|
301
|
+
"payload": "boolean",
|
|
302
|
+
"when": "On button[slFieldHelp], after the hint opened or closed. It is the output half of [(open)]."
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"name": "(openChangeRequest)",
|
|
306
|
+
"payload": "ChangeRequest<boolean>",
|
|
307
|
+
"when": "On button[slFieldHelp], before the hint opens or closes, once per transition. reason is pointer for a hover or a press; keyboard for focus, Enter or Space; or escape, blur or programmatic. cancel() refuses the change."
|
|
308
|
+
}
|
|
309
|
+
],
|
|
310
|
+
"accessibility": [
|
|
311
|
+
"No WAI-ARIA Authoring Practices pattern covers a field. Four sources cover it together: the Authoring Practices’ Providing Accessible Names and Descriptions practice (w3.org/WAI/ARIA/apg/practices/names-and-descriptions/) for the label and the description, the HTML specification for label[for] and fieldset[disabled], and WCAG 2.2 Understanding 3.3.1 Error Identification and 3.3.2 Labels or Instructions for the error and the help.",
|
|
312
|
+
"The label is associated explicitly. The naming practice records that some combinations of assistive technology and browser do not treat the implicit form, a label wrapping its control, as an accessible name, so the field derives an identifier and points for at it instead of nesting.",
|
|
313
|
+
"slField writes aria-required, never the native required. The native attribute turns on browser constraint validation and changes how the form submits, which describing a field must not do as a side effect. To get it, write required on the control: every written attribute is read with HostAttributeToken before the binding that would replace it. disabled and readonly are native, because taking a control out of the tab order and out of submission is what those attributes mean.",
|
|
314
|
+
"The accessible description is the indicator, the help, the description, the count and the error, in that order, whatever order the page writes them in. Each slot has one correct reading order, so the field states it instead of reading it from the DOM. The count is included so a counter is related to its control by identifier.",
|
|
315
|
+
"The help, the indicator and the action stand beside the label, never inside it. HTML forbids labelable content such as a button inside a label other than the control it labels, and a press on it would reach the label and move focus to the control instead of opening the hint.",
|
|
316
|
+
"The help is a toggletip. A tooltip alone opens on a touch screen only on a long press, because a tap triggers the element’s own action; the help button has no other action, so a press opens the hint and a second press closes it. The help text also sits in a hidden node inside the button, which describes the button and the control while the tooltip is closed, because a hidden element referenced directly still enters the description. The tooltip describes nothing, so the hint is never read twice.",
|
|
317
|
+
"A disabled field leaves its help and its action operable, because the help often explains why the field is disabled.",
|
|
318
|
+
"The necessity asterisk is hidden from assistive technology and the necessity words are not. A reader working through a form of twenty required fields does not need to hear “asterisk” twenty times, and aria-required already states the fact; (optional) is information no other attribute supplies.",
|
|
319
|
+
"The error is text in the page, as WCAG 2.2 SC 3.3.1 requires, never a tooltip. As an inline message it also carries the severity as visually hidden text, so a reader who cannot see the red ink hears “Error:” before the sentence.",
|
|
320
|
+
"live defaults to off, because a message present when the page finishes loading is not announced whatever role it carries. A form that shows the error after submit writes live=\"polite\", and the reader hears it once."
|
|
321
|
+
]
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
"tokens": [
|
|
325
|
+
"--slotted-control-font-family",
|
|
326
|
+
"--slotted-control-font-size-lg",
|
|
327
|
+
"--slotted-control-font-size-md",
|
|
328
|
+
"--slotted-control-font-size-sm",
|
|
329
|
+
"--slotted-control-height-lg",
|
|
330
|
+
"--slotted-control-height-md",
|
|
331
|
+
"--slotted-control-height-sm",
|
|
332
|
+
"--slotted-control-icon-size-md",
|
|
333
|
+
"--slotted-control-icon-size-sm",
|
|
334
|
+
"--slotted-control-inner-size-md",
|
|
335
|
+
"--slotted-control-inner-size-sm",
|
|
336
|
+
"--slotted-control-radius",
|
|
337
|
+
"--slotted-control-transition-duration",
|
|
338
|
+
"--slotted-control-transition-easing",
|
|
339
|
+
"--slotted-disabled-foreground",
|
|
340
|
+
"--slotted-field-action-color",
|
|
341
|
+
"--slotted-field-action-color-active",
|
|
342
|
+
"--slotted-field-action-color-hover",
|
|
343
|
+
"--slotted-field-action-radius",
|
|
344
|
+
"--slotted-field-column-gap",
|
|
345
|
+
"--slotted-field-counter-color",
|
|
346
|
+
"--slotted-field-counter-invalid-color",
|
|
347
|
+
"--slotted-field-font-family",
|
|
348
|
+
"--slotted-field-header-gap",
|
|
349
|
+
"--slotted-field-help-color",
|
|
350
|
+
"--slotted-field-help-radius",
|
|
351
|
+
"--slotted-field-help-surface-active",
|
|
352
|
+
"--slotted-field-help-surface-hover",
|
|
353
|
+
"--slotted-field-icon-size-min",
|
|
354
|
+
"--slotted-field-label-color",
|
|
355
|
+
"--slotted-field-label-font-weight",
|
|
356
|
+
"--slotted-field-label-inline-size",
|
|
357
|
+
"--slotted-field-line-height",
|
|
358
|
+
"--slotted-field-mark-color",
|
|
359
|
+
"--slotted-field-mark-gap",
|
|
360
|
+
"--slotted-field-mark-text-color",
|
|
361
|
+
"--slotted-field-row-gap",
|
|
362
|
+
"--slotted-focus-ring-color",
|
|
363
|
+
"--slotted-focus-ring-offset",
|
|
364
|
+
"--slotted-focus-ring-width",
|
|
365
|
+
"--slotted-font-size-xs",
|
|
366
|
+
"--slotted-font-weight-medium",
|
|
367
|
+
"--slotted-font-weight-regular",
|
|
368
|
+
"--slotted-line-height-sm",
|
|
369
|
+
"--slotted-space-1",
|
|
370
|
+
"--slotted-space-2",
|
|
371
|
+
"--slotted-space-3",
|
|
372
|
+
"--slotted-space-5",
|
|
373
|
+
"--slotted-target-comfortable",
|
|
374
|
+
"--slotted-target-min",
|
|
375
|
+
"--slotted-text",
|
|
376
|
+
"--slotted-text-muted",
|
|
377
|
+
"--slotted-tone-accent-text",
|
|
378
|
+
"--slotted-tone-danger-text",
|
|
379
|
+
"--slotted-tone-secondary-subtle-active",
|
|
380
|
+
"--slotted-tone-secondary-subtle-hover"
|
|
381
|
+
],
|
|
382
|
+
"examples": [
|
|
383
|
+
{
|
|
384
|
+
"id": "playground",
|
|
385
|
+
"title": "Playground",
|
|
386
|
+
"note": "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.",
|
|
387
|
+
"language": "html",
|
|
388
|
+
"source": "<div slField required>\n <label slFieldLabel>Email</label>\n <input slFieldControl type=\"email\" />\n <span slFieldDescription>We will use this address for billing.</span>\n</div>\n",
|
|
389
|
+
"verdict": "excerpt"
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"id": "necessity",
|
|
393
|
+
"title": "Saying which answers are required",
|
|
394
|
+
"note": "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.",
|
|
395
|
+
"language": "ts",
|
|
396
|
+
"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-field-necessity',\n imports: [SlField, SlFieldLabel, SlStack, SlTextField, SlTextFieldInput],\n template: `\n <div slStack [gap]=\"5\">\n <div slField required>\n <label slFieldLabel>Company name</label>\n <div slTextField><input slTextFieldInput /></div>\n </div>\n <div slField necessity=\"optional\">\n <label slFieldLabel>Purchase order</label>\n <div slTextField><input slTextFieldInput /></div>\n </div>\n <div slField necessity=\"words\" required>\n <label slFieldLabel>Tax ID</label>\n <div slTextField><input slTextFieldInput /></div>\n </div>\n </div>\n `,\n})\nexport class FieldNecessity {}\n",
|
|
397
|
+
"verdict": "example"
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
"id": "placement",
|
|
401
|
+
"title": "The label above the control, or beside it",
|
|
402
|
+
"note": "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.",
|
|
403
|
+
"language": "ts",
|
|
404
|
+
"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-field-placement',\n imports: [SlField, SlFieldDescription, SlFieldLabel, SlStack, SlTextField, SlTextFieldInput],\n template: `\n <div slStack [gap]=\"4\">\n <div slField labelPlacement=\"side\" required>\n <label slFieldLabel>Legal name</label>\n <div slTextField><input slTextFieldInput defaultValue=\"Northwind Traders Ltd.\" /></div>\n </div>\n <div slField labelPlacement=\"side\" required>\n <label slFieldLabel>Billing email</label>\n <div slTextField>\n <input slTextFieldInput type=\"email\" defaultValue=\"billing@northwind.example\" />\n </div>\n <span slFieldDescription>Invoices and payment receipts are sent here.</span>\n </div>\n <div slField labelPlacement=\"side\">\n <label slFieldLabel>VAT number</label>\n <div slTextField><input slTextFieldInput defaultValue=\"GB 284 9113 07\" /></div>\n </div>\n </div>\n `,\n})\nexport class FieldPlacement {}\n",
|
|
405
|
+
"verdict": "example"
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
"id": "sizes",
|
|
409
|
+
"title": "The step the field sits at",
|
|
410
|
+
"note": "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.",
|
|
411
|
+
"language": "ts",
|
|
412
|
+
"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-field-sizes',\n imports: [SlField, SlFieldLabel, SlStack, SlTextField, SlTextFieldInput],\n template: `\n <div slStack [gap]=\"5\">\n <div slField size=\"sm\">\n <label slFieldLabel>SKU</label>\n <div slTextField><input slTextFieldInput defaultValue=\"NW-CHAI-24\" /></div>\n </div>\n <div slField size=\"md\">\n <label slFieldLabel>Product name</label>\n <div slTextField><input slTextFieldInput defaultValue=\"Chai tea, 24 bags\" /></div>\n </div>\n <div slField size=\"lg\">\n <label slFieldLabel>Shelf label</label>\n <div slTextField><input slTextFieldInput defaultValue=\"Chai — spiced black tea\" /></div>\n </div>\n </div>\n `,\n})\nexport class FieldSizes {}\n",
|
|
413
|
+
"verdict": "example"
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
"id": "states",
|
|
417
|
+
"title": "The four states a field can be in",
|
|
418
|
+
"note": "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.",
|
|
419
|
+
"language": "ts",
|
|
420
|
+
"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-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 required>\n <label slFieldLabel>Card number</label>\n <div slTextField>\n <input slTextFieldInput inputmode=\"numeric\" defaultValue=\"4242 4242 42\" />\n </div>\n <span slFieldError>Six digits are missing.</span>\n </div>\n <div slField readOnly>\n <label slFieldLabel>Account ID</label>\n <div slTextField><input slTextFieldInput defaultValue=\"acct_9f2c41\" /></div>\n <span slFieldDescription>Quote this ID when you contact support.</span>\n </div>\n <div slField disabled>\n <label slFieldLabel>Workspace URL</label>\n <div slTextField><input slTextFieldInput defaultValue=\"northwind.slotted.app\" /></div>\n <span slFieldDescription>Only the workspace owner can change the URL.</span>\n </div>\n </div>\n `,\n})\nexport class FieldStates {}\n",
|
|
421
|
+
"verdict": "example"
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"id": "messages",
|
|
425
|
+
"title": "Help, errors, and the line held open for one",
|
|
426
|
+
"note": "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.",
|
|
427
|
+
"language": "ts",
|
|
428
|
+
"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-field-messages',\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>\n <label slFieldLabel>Purchase order</label>\n <div slTextField><input slTextFieldInput defaultValue=\"PO-20418\" /></div>\n <span slFieldDescription>Printed on the invoice so your accounts team can match it.</span>\n </div>\n <div slField invalid>\n <label slFieldLabel>Postal code</label>\n <div slTextField><input slTextFieldInput defaultValue=\"981\" /></div>\n <span slFieldDescription>Five digits, as on the shipping label.</span>\n <span slFieldError>Enter all five digits.</span>\n </div>\n <div slField>\n <label slFieldLabel>Discount</label>\n <div slTextField><input slTextFieldInput defaultValue=\"45%\" /></div>\n <span slFieldError tone=\"warning\">Above 40% the order waits for a manager's approval.</span>\n </div>\n </div>\n `,\n})\nexport class FieldMessages {}\n",
|
|
429
|
+
"verdict": "example"
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
"id": "counter",
|
|
433
|
+
"title": "Counting what the page is counting",
|
|
434
|
+
"note": "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.",
|
|
435
|
+
"language": "ts",
|
|
436
|
+
"source": "import { Component, computed, signal } from '@angular/core';\nimport {\n SlField,\n SlFieldCounter,\n SlFieldDescription,\n SlFieldHeader,\n SlFieldLabel,\n} from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTextarea } from '@slotted/angular/textarea';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\n\nconst MAX_TAGS = 5;\n\n@Component({\n selector: 'app-field-counter',\n imports: [\n SlField,\n SlFieldCounter,\n SlFieldDescription,\n SlFieldHeader,\n SlFieldLabel,\n SlStack,\n SlTextarea,\n SlTextField,\n SlTextFieldInput,\n ],\n template: `\n <div slStack [gap]=\"5\">\n <div slField>\n <label slFieldLabel>Public description</label>\n <textarea\n slTextarea\n autoSize\n countMax=\"140\"\n showCount\n defaultValue=\"Ships within two business days. Returns are free for thirty days.\"\n ></textarea>\n </div>\n <div slField [invalid]=\"over() ? true : undefined\">\n <div slFieldHeader>\n <label slFieldLabel>Search tags</label>\n <span slFieldCounter [invalid]=\"over()\">{{ count() }}/{{ max }} tags</span>\n </div>\n <div slTextField>\n <input slTextFieldInput [value]=\"tags()\" (valueChange)=\"tags.set($event.value)\" />\n </div>\n <span slFieldDescription>Separate tags with commas.</span>\n </div>\n </div>\n `,\n})\nexport class FieldCounter {\n readonly max = MAX_TAGS;\n readonly tags = signal('tea, organic, fair trade');\n readonly count = computed(\n () =>\n this.tags()\n .split(',')\n .filter((tag) => tag.trim() !== '').length,\n );\n readonly over = computed(() => this.count() > MAX_TAGS);\n}\n",
|
|
437
|
+
"verdict": "example"
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
"id": "header",
|
|
441
|
+
"title": "The label row: help, indicator, action and count",
|
|
442
|
+
"note": "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.",
|
|
443
|
+
"language": "ts",
|
|
444
|
+
"source": "import { Component } from '@angular/core';\nimport { SlBadge } from '@slotted/angular/badge';\nimport {\n SlField,\n SlFieldAction,\n SlFieldHeader,\n SlFieldIndicator,\n SlFieldLabel,\n} from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-field-header',\n imports: [\n SlBadge,\n SlField,\n SlFieldAction,\n SlFieldHeader,\n SlFieldIndicator,\n SlFieldLabel,\n SlStack,\n SlTextField,\n SlTextFieldInput,\n ],\n template: `\n <div slStack [gap]=\"5\">\n <div slField required>\n <div slFieldHeader>\n <label slFieldLabel>Password</label>\n <a slFieldAction href=\"#reset-password\">Forgot password?</a>\n </div>\n <div slTextField>\n <input slTextFieldInput type=\"password\" autocomplete=\"current-password\" />\n </div>\n </div>\n <div slField>\n <div slFieldHeader>\n <label slFieldLabel>Webhook URL</label>\n <span slFieldIndicator>\n <span slBadge size=\"sm\" tone=\"accent\" variant=\"soft\">Beta</span>\n </span>\n <button slFieldAction>Send test event</button>\n </div>\n <div slTextField>\n <input\n slTextFieldInput\n type=\"url\"\n defaultValue=\"https://hooks.northwind.example/orders\"\n />\n </div>\n </div>\n </div>\n `,\n})\nexport class FieldHeader {}\n",
|
|
445
|
+
"verdict": "example"
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
"id": "content",
|
|
449
|
+
"title": "Content the field did not choose",
|
|
450
|
+
"note": "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.",
|
|
451
|
+
"language": "html",
|
|
452
|
+
"source": "<div slField labelPlacement=\"side\" lang=\"ar\" dir=\"rtl\">\n <label slFieldLabel>رقم التعريف الضريبي</label>\n <input slFieldControl />\n</div>\n",
|
|
453
|
+
"verdict": "excerpt"
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
"id": "composition",
|
|
457
|
+
"title": "Composition and escape hatches",
|
|
458
|
+
"note": "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.",
|
|
459
|
+
"language": "ts",
|
|
460
|
+
"source": "bootstrapApplication(App, {\n providers: [provideFieldDefaults({ size: 'sm', necessity: 'words' })],\n});\n",
|
|
461
|
+
"verdict": "excerpt"
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"id": "accessibility",
|
|
465
|
+
"title": "What a reader hears, in order",
|
|
466
|
+
"note": "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.",
|
|
467
|
+
"language": "html",
|
|
468
|
+
"source": "<div data-ui=\"field\" data-part=\"root\">\n <div data-part=\"header\">\n <label data-part=\"label\" for=\"cnpj-control\">\n Tax ID<span aria-hidden=\"true\" data-part=\"mark\">*</span>\n </label>\n <button data-part=\"help\" aria-label=\"More information\" aria-describedby=\"cnpj-help\">\n <span data-part=\"help-text\" id=\"cnpj-help\" hidden>Numbers only.</span>\n </button>\n </div>\n <input\n data-part=\"control\"\n id=\"cnpj-control\"\n aria-describedby=\"cnpj-help cnpj-description cnpj-error\"\n aria-invalid=\"true\"\n aria-required=\"true\"\n />\n</div>\n",
|
|
469
|
+
"verdict": "excerpt"
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
"id": "basic",
|
|
473
|
+
"title": "basic.ts",
|
|
474
|
+
"note": null,
|
|
475
|
+
"language": "ts",
|
|
476
|
+
"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-field-basic',\n imports: [SlField, SlFieldDescription, SlFieldLabel, SlTextField, SlTextFieldInput],\n template: `\n <div slField required>\n <label slFieldLabel>Email</label>\n <div slTextField>\n <input slTextFieldInput type=\"email\" autocomplete=\"email\" />\n </div>\n <span slFieldDescription>Invoices are sent to this address.</span>\n </div>\n `,\n})\nexport class FieldBasic {}\n",
|
|
477
|
+
"verdict": "example"
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
"id": "controls",
|
|
481
|
+
"title": "controls.ts",
|
|
482
|
+
"note": null,
|
|
483
|
+
"language": "ts",
|
|
484
|
+
"source": "import { Component, signal } from '@angular/core';\nimport { SlDatePicker } from '@slotted/angular/date-picker';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlNumberField, SlNumberFieldInput } from '@slotted/angular/number-field';\nimport { SlSelect, SlSelectItem, type SelectOption } from '@slotted/angular/select';\nimport { SlStack } from '@slotted/angular/stack';\n\n@Component({\n selector: 'app-field-controls',\n imports: [\n SlDatePicker,\n SlField,\n SlFieldDescription,\n SlFieldLabel,\n SlNumberField,\n SlNumberFieldInput,\n SlSelect,\n SlSelectItem,\n SlStack,\n ],\n template: `\n <div slStack [gap]=\"5\">\n <div slField required>\n <label slFieldLabel>Payment terms</label>\n <sl-select placeholder=\"Choose terms\" [items]=\"termOptions\" [(value)]=\"terms\">\n @for (term of termOptions; track term.value) {\n <sl-select-item [value]=\"term.value\">{{ term.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n <div slField required>\n <label slFieldLabel>Quantity</label>\n <div slNumberField>\n <input slNumberFieldInput defaultValue=\"12\" min=\"1\" max=\"500\" />\n </div>\n <span slFieldDescription>Cases of 24 bags.</span>\n </div>\n <div slField>\n <label slFieldLabel>Delivery date</label>\n <div slDatePicker locale=\"en-US\"></div>\n </div>\n </div>\n `,\n})\nexport class FieldControls {\n readonly termOptions: SelectOption[] = [\n { value: 'net-15', label: 'Net 15' },\n { value: 'net-30', label: 'Net 30' },\n { value: 'net-60', label: 'Net 60' },\n ];\n readonly terms = signal<string | null>('net-30');\n}\n",
|
|
485
|
+
"verdict": "example"
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
"id": "custom-control",
|
|
489
|
+
"title": "custom-control.ts",
|
|
490
|
+
"note": null,
|
|
491
|
+
"language": "ts",
|
|
492
|
+
"source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldControl, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\n\n@Component({\n selector: 'app-field-custom-control',\n imports: [SlField, SlFieldControl, SlFieldDescription, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Brand colour</label>\n <input slFieldControl type=\"color\" value=\"#2f6fde\" />\n <span slFieldDescription>Used on invoices and in the customer portal.</span>\n </div>\n `,\n})\nexport class FieldCustomControl {}\n",
|
|
493
|
+
"verdict": "example"
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"id": "defaults",
|
|
497
|
+
"title": "defaults.ts",
|
|
498
|
+
"note": null,
|
|
499
|
+
"language": "ts",
|
|
500
|
+
"source": "import { Component } from '@angular/core';\nimport { provideFieldDefaults, 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-field-defaults',\n imports: [SlField, SlFieldLabel, SlStack, SlTextField, SlTextFieldInput],\n providers: [provideFieldDefaults({ size: 'sm', labelPlacement: 'side', necessity: 'optional' })],\n template: `\n <div slStack [gap]=\"3\">\n <div slField required>\n <label slFieldLabel>Warehouse</label>\n <div slTextField><input slTextFieldInput defaultValue=\"Seattle — Pier 91\" /></div>\n </div>\n <div slField required>\n <label slFieldLabel>Bin location</label>\n <div slTextField><input slTextFieldInput defaultValue=\"A-14-03\" /></div>\n </div>\n <div slField>\n <label slFieldLabel>Picking note</label>\n <div slTextField><input slTextFieldInput /></div>\n </div>\n </div>\n `,\n})\nexport class FieldDefaults {}\n",
|
|
501
|
+
"verdict": "example"
|
|
502
|
+
},
|
|
503
|
+
{
|
|
504
|
+
"id": "help",
|
|
505
|
+
"title": "help.ts",
|
|
506
|
+
"note": null,
|
|
507
|
+
"language": "ts",
|
|
508
|
+
"source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldHeader, SlFieldHelp, 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-field-help',\n imports: [\n SlField,\n SlFieldHeader,\n SlFieldHelp,\n SlFieldLabel,\n SlStack,\n SlTextField,\n SlTextFieldInput,\n ],\n template: `\n <div slStack [gap]=\"5\">\n <div slField required>\n <div slFieldHeader>\n <label slFieldLabel>Cost centre</label>\n <button\n slFieldHelp=\"The four-digit code finance assigns to your team. It appears on every invoice line.\"\n ></button>\n </div>\n <div slTextField><input slTextFieldInput inputmode=\"numeric\" defaultValue=\"4120\" /></div>\n </div>\n <div slField disabled>\n <div slFieldHeader>\n <label slFieldLabel>Billing currency</label>\n <button\n slFieldHelp=\"Set when the workspace was created. Contact support to change it.\"\n ></button>\n </div>\n <div slTextField><input slTextFieldInput defaultValue=\"USD — US dollar\" /></div>\n </div>\n </div>\n `,\n})\nexport class FieldHelp {}\n",
|
|
509
|
+
"verdict": "example"
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"id": "narrow",
|
|
513
|
+
"title": "narrow.ts",
|
|
514
|
+
"note": null,
|
|
515
|
+
"language": "ts",
|
|
516
|
+
"source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlGrid } from '@slotted/angular/grid';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\n\n@Component({\n selector: 'app-field-narrow',\n imports: [SlField, SlFieldLabel, SlGrid, SlTextField, SlTextFieldInput],\n template: `\n <div slGrid [columns]=\"2\" minItemWidth=\"xs\" [gap]=\"4\">\n <div slField labelPlacement=\"side\">\n <label slFieldLabel>City</label>\n <div slTextField><input slTextFieldInput defaultValue=\"Seattle\" /></div>\n </div>\n <div slField labelPlacement=\"side\">\n <label slFieldLabel>Postal code</label>\n <div slTextField><input slTextFieldInput defaultValue=\"98104\" /></div>\n </div>\n </div>\n `,\n})\nexport class FieldNarrow {}\n",
|
|
517
|
+
"verdict": "example"
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
"id": "validation",
|
|
521
|
+
"title": "validation.ts",
|
|
522
|
+
"note": null,
|
|
523
|
+
"language": "ts",
|
|
524
|
+
"source": "import { Component, computed, signal } from '@angular/core';\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\nfunction emailError(value: string): string {\n if (value.trim() === '') return 'Enter the address invoices are sent to.';\n if (!/^\\S+@\\S+\\.\\S+$/.test(value)) return 'Enter an address like billing@company.com.';\n return '';\n}\n\n@Component({\n selector: 'app-field-validation',\n imports: [\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 [value]=\"email()\"\n (valueChange)=\"edit($event.value)\"\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\">Save billing details</button>\n @if (saved()) {\n <span role=\"status\">Saved.</span>\n }\n </div>\n </div>\n </form>\n `,\n})\nexport class FieldValidation {\n readonly email = signal('');\n readonly submitted = signal(false);\n readonly saved = signal(false);\n readonly error = computed(() => (this.submitted() ? emailError(this.email()) : ''));\n\n edit(value: string): void {\n this.email.set(value);\n this.saved.set(false);\n }\n\n submit(event: Event): void {\n event.preventDefault();\n this.submitted.set(true);\n this.saved.set(emailError(this.email()) === '');\n }\n}\n",
|
|
525
|
+
"verdict": "example"
|
|
526
|
+
}
|
|
527
|
+
]
|
|
528
|
+
}
|