@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/upload.json
ADDED
|
@@ -0,0 +1,1103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"family": "upload",
|
|
3
|
+
"ui": "upload",
|
|
4
|
+
"binding": "angular",
|
|
5
|
+
"catalog": {
|
|
6
|
+
"group": "Forms",
|
|
7
|
+
"summary": "Picks or drops files and shows their progress."
|
|
8
|
+
},
|
|
9
|
+
"axes": {
|
|
10
|
+
"variant": [
|
|
11
|
+
"dropzone",
|
|
12
|
+
"button",
|
|
13
|
+
"field"
|
|
14
|
+
],
|
|
15
|
+
"layout": [
|
|
16
|
+
"list",
|
|
17
|
+
"grid"
|
|
18
|
+
],
|
|
19
|
+
"size": [
|
|
20
|
+
"sm",
|
|
21
|
+
"md",
|
|
22
|
+
"lg"
|
|
23
|
+
],
|
|
24
|
+
"preview": [
|
|
25
|
+
"auto",
|
|
26
|
+
"none"
|
|
27
|
+
],
|
|
28
|
+
"duplicates": [
|
|
29
|
+
"reject",
|
|
30
|
+
"allow",
|
|
31
|
+
"replace"
|
|
32
|
+
],
|
|
33
|
+
"clickToBrowse": [
|
|
34
|
+
true,
|
|
35
|
+
false
|
|
36
|
+
],
|
|
37
|
+
"allowDrop": [
|
|
38
|
+
true,
|
|
39
|
+
false
|
|
40
|
+
],
|
|
41
|
+
"allowPaste": [
|
|
42
|
+
true,
|
|
43
|
+
false
|
|
44
|
+
],
|
|
45
|
+
"preventDocumentDrop": [
|
|
46
|
+
true,
|
|
47
|
+
false
|
|
48
|
+
],
|
|
49
|
+
"autoUpload": [
|
|
50
|
+
true,
|
|
51
|
+
false
|
|
52
|
+
],
|
|
53
|
+
"pendingBlocksSubmit": [
|
|
54
|
+
true,
|
|
55
|
+
false
|
|
56
|
+
],
|
|
57
|
+
"view": [
|
|
58
|
+
"auto",
|
|
59
|
+
"none"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"members": {
|
|
63
|
+
"upload": {
|
|
64
|
+
"nativeElement": "div",
|
|
65
|
+
"defaults": {
|
|
66
|
+
"variant": "dropzone",
|
|
67
|
+
"layout": "list",
|
|
68
|
+
"size": "md",
|
|
69
|
+
"preview": "auto",
|
|
70
|
+
"duplicates": "reject",
|
|
71
|
+
"clickToBrowse": true,
|
|
72
|
+
"allowDrop": true,
|
|
73
|
+
"allowPaste": true,
|
|
74
|
+
"preventDocumentDrop": true,
|
|
75
|
+
"autoUpload": true,
|
|
76
|
+
"pendingBlocksSubmit": true,
|
|
77
|
+
"multiple": false,
|
|
78
|
+
"directory": false,
|
|
79
|
+
"concurrency": 3,
|
|
80
|
+
"retries": 0,
|
|
81
|
+
"retryDelay": 1000,
|
|
82
|
+
"stallAfter": 10000,
|
|
83
|
+
"maxRows": 6,
|
|
84
|
+
"view": "auto"
|
|
85
|
+
},
|
|
86
|
+
"capabilities": [
|
|
87
|
+
"files",
|
|
88
|
+
"open",
|
|
89
|
+
"overflow",
|
|
90
|
+
"removable",
|
|
91
|
+
"appearance",
|
|
92
|
+
"arrangement",
|
|
93
|
+
"size",
|
|
94
|
+
"content",
|
|
95
|
+
"disabled",
|
|
96
|
+
"readOnly",
|
|
97
|
+
"invalid",
|
|
98
|
+
"required",
|
|
99
|
+
"live",
|
|
100
|
+
"wiring"
|
|
101
|
+
],
|
|
102
|
+
"states": [
|
|
103
|
+
"default",
|
|
104
|
+
"hover",
|
|
105
|
+
"active",
|
|
106
|
+
"focus-visible",
|
|
107
|
+
"disabled",
|
|
108
|
+
"readonly",
|
|
109
|
+
"invalid",
|
|
110
|
+
"required",
|
|
111
|
+
"loading",
|
|
112
|
+
"complete",
|
|
113
|
+
"dragging",
|
|
114
|
+
"drop-target",
|
|
115
|
+
"drop-invalid"
|
|
116
|
+
],
|
|
117
|
+
"parts": [
|
|
118
|
+
"root",
|
|
119
|
+
"label",
|
|
120
|
+
"description",
|
|
121
|
+
"dropzone",
|
|
122
|
+
"trigger",
|
|
123
|
+
"input",
|
|
124
|
+
"summary",
|
|
125
|
+
"clear",
|
|
126
|
+
"list",
|
|
127
|
+
"item",
|
|
128
|
+
"body",
|
|
129
|
+
"detail",
|
|
130
|
+
"preview",
|
|
131
|
+
"filename",
|
|
132
|
+
"name",
|
|
133
|
+
"extension",
|
|
134
|
+
"meta",
|
|
135
|
+
"status",
|
|
136
|
+
"progress",
|
|
137
|
+
"actions",
|
|
138
|
+
"start",
|
|
139
|
+
"pause",
|
|
140
|
+
"retry",
|
|
141
|
+
"cancel",
|
|
142
|
+
"remove",
|
|
143
|
+
"message",
|
|
144
|
+
"viewer",
|
|
145
|
+
"viewerHeader",
|
|
146
|
+
"viewerTitle",
|
|
147
|
+
"viewerMeta",
|
|
148
|
+
"viewerActions",
|
|
149
|
+
"viewerExternal",
|
|
150
|
+
"viewerClose",
|
|
151
|
+
"viewerPrevious",
|
|
152
|
+
"viewerNext",
|
|
153
|
+
"viewerStage"
|
|
154
|
+
]
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
"docs": {
|
|
158
|
+
"upload": {
|
|
159
|
+
"imports": {
|
|
160
|
+
"source": "import { provideUploadDefaults, SlUpload } from '@slotted/angular/upload';\nimport { createXhrUpload } from '@slotted/core/upload';",
|
|
161
|
+
"selector": "div[slUpload]",
|
|
162
|
+
"exportAs": "slUpload"
|
|
163
|
+
},
|
|
164
|
+
"anatomy": [
|
|
165
|
+
{
|
|
166
|
+
"part": "root",
|
|
167
|
+
"element": "div",
|
|
168
|
+
"required": true,
|
|
169
|
+
"purpose": "The family. Carries data-ui=\"upload\", the variant, the layout, the size and every state it paints: data-disabled, data-readonly, data-invalid, data-required, data-loading while a transfer is running, data-complete once every file arrived, and data-dragging while a drag carrying files is over the document."
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"part": "label",
|
|
173
|
+
"element": "span",
|
|
174
|
+
"required": false,
|
|
175
|
+
"purpose": "The family’s own label, for an upload that stands on its own. It is not rendered inside a Field, which owns the label row for every control in this library."
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"part": "description",
|
|
179
|
+
"element": "p",
|
|
180
|
+
"required": false,
|
|
181
|
+
"purpose": "The guidance beside the region, and the input’s aria-describedby. It can be as long as the product needs, because the accessible name comes from the trigger rather than from every word in the box."
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"part": "dropzone",
|
|
185
|
+
"element": "div",
|
|
186
|
+
"required": false,
|
|
187
|
+
"purpose": "The drop region. Carries the drag handlers, the click that forwards to the trigger, data-drop-target while a drag it will take is overhead and data-drop-invalid while one it has already refused is. Absent in the button variant."
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"part": "trigger",
|
|
191
|
+
"element": "label",
|
|
192
|
+
"required": true,
|
|
193
|
+
"purpose": "The control the reader presses, and the accessible name of the input inside it. It is a label rather than a button so that activating it opens the picker natively, and so that nothing focusable is nested inside anything focusable."
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"part": "input",
|
|
197
|
+
"element": "input",
|
|
198
|
+
"required": true,
|
|
199
|
+
"purpose": "The native file control: the value, the picker, the name it submits under, accept, multiple, capture and webkitdirectory. Clipped rather than hidden, so it stays in the tab order and in the accessibility tree. It is the one part that cannot be substituted."
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"part": "summary",
|
|
203
|
+
"element": "div",
|
|
204
|
+
"required": false,
|
|
205
|
+
"purpose": "How far the whole queue has got, how much longer it has, and the control that acts on every row at once. Drawn only when the list holds more than one file, because for a single file the row says all of it."
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"part": "clear",
|
|
209
|
+
"element": "button",
|
|
210
|
+
"required": false,
|
|
211
|
+
"purpose": "Removes every file, cancelling whatever is in flight. Absent when the family is read-only."
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"part": "list",
|
|
215
|
+
"element": "ul",
|
|
216
|
+
"required": false,
|
|
217
|
+
"purpose": "The selection. Bounded in rows by maxRows and scrolled by the platform past it, because four hundred rows is not a list a person reads."
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"part": "item",
|
|
221
|
+
"element": "li",
|
|
222
|
+
"required": false,
|
|
223
|
+
"purpose": "One file, as a grid of three columns and two rows: the chip, the body and the controls on the first, the message spanning the second. Carries data-status, which is one of the nine words the flow has."
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"part": "body",
|
|
227
|
+
"element": "div",
|
|
228
|
+
"required": false,
|
|
229
|
+
"purpose": "The column of a row that shrinks. It is the one part with min-inline-size: 0, which is what makes a long name truncate instead of pushing the controls off the end."
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"part": "detail",
|
|
233
|
+
"element": "div",
|
|
234
|
+
"required": false,
|
|
235
|
+
"purpose": "The second line: the size, then the word for what is happening. Everything secondary about a file is here rather than at the far end of its name, which is what let the column of sizes move with however many controls each row offered."
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"part": "preview",
|
|
239
|
+
"element": "span",
|
|
240
|
+
"required": false,
|
|
241
|
+
"purpose": "A thumbnail, or a solid tile in the kind’s colour with the kind’s mark knocked out of it. Carries data-kind and data-extension; in the grid layout the tile also carries the extension in words."
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"part": "filename",
|
|
245
|
+
"element": "button or span",
|
|
246
|
+
"required": false,
|
|
247
|
+
"purpose": "The name and its extension as one bidi-isolated run, laid out in the name’s own direction. It is a button when the file can be previewed and a span when it cannot, so the affordance is present exactly when the action is."
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"part": "name",
|
|
251
|
+
"element": "span",
|
|
252
|
+
"required": false,
|
|
253
|
+
"purpose": "The file’s name, shrinking to an ellipsis before the extension."
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"part": "extension",
|
|
257
|
+
"element": "span",
|
|
258
|
+
"required": false,
|
|
259
|
+
"purpose": "The last dot and what follows it, which does not shrink — so the part that says what the file is survives the truncation."
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"part": "meta",
|
|
263
|
+
"element": "span",
|
|
264
|
+
"required": false,
|
|
265
|
+
"purpose": "The size, formatted by Intl in the locale the family was given. In the field variant it is the whole of a single-file selection."
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"part": "status",
|
|
269
|
+
"element": "span",
|
|
270
|
+
"required": false,
|
|
271
|
+
"purpose": "The word for the row’s state, and the percentage while it is moving. A status said in colour alone fails WCAG 2.2 SC 1.4.1, so it is a word first and a colour second."
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"part": "progress",
|
|
275
|
+
"element": "div",
|
|
276
|
+
"required": false,
|
|
277
|
+
"purpose": "Where the composed SlProgressBar stands: the row’s own bottom edge, clipped by its corner radius. A row is therefore the same height waiting, sending or done, and progress reads straight down a list of nine."
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"part": "actions",
|
|
281
|
+
"element": "span",
|
|
282
|
+
"required": false,
|
|
283
|
+
"purpose": "The row’s controls, packed to the end. Which of them appear is decided by the row’s status."
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"part": "start",
|
|
287
|
+
"element": "button",
|
|
288
|
+
"required": false,
|
|
289
|
+
"purpose": "Sends a file that is ready, resumes one that is paused, or sends one the reader stopped."
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"part": "pause",
|
|
293
|
+
"element": "button",
|
|
294
|
+
"required": false,
|
|
295
|
+
"purpose": "Suspends the run. Drawn only when the running adapter declares pausable, because a pause control over a sender that cannot suspend is a control that lies."
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"part": "retry",
|
|
299
|
+
"element": "button",
|
|
300
|
+
"required": false,
|
|
301
|
+
"purpose": "Sends the file again after a failure."
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"part": "cancel",
|
|
305
|
+
"element": "button",
|
|
306
|
+
"required": false,
|
|
307
|
+
"purpose": "Aborts the run through the adapter’s own AbortSignal and leaves the file in the list."
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"part": "remove",
|
|
311
|
+
"element": "button",
|
|
312
|
+
"required": false,
|
|
313
|
+
"purpose": "Takes the file out of the list, cancelling its run first."
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
"part": "message",
|
|
317
|
+
"element": "p",
|
|
318
|
+
"required": false,
|
|
319
|
+
"purpose": "The sentence about this row: why it was refused, or that it failed. The reason is the family’s and the words are the consumer’s."
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"part": "viewer",
|
|
323
|
+
"element": "div",
|
|
324
|
+
"required": false,
|
|
325
|
+
"purpose": "The full-screen surface a file is previewed on, inside a composed sl-dialog — which owns the layer, the scrim, the focus containment, the scroll lock and Escape. It is portalled to the end of the document, so it carries data-ui=\"upload\" and the family’s size on itself."
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
"part": "viewerHeader",
|
|
329
|
+
"element": "div",
|
|
330
|
+
"required": false,
|
|
331
|
+
"purpose": "The file’s name, where it sits in the set, and the controls that act on the viewer."
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"part": "viewerTitle",
|
|
335
|
+
"element": "h2",
|
|
336
|
+
"required": false,
|
|
337
|
+
"purpose": "The file’s name, and the viewer’s accessible name."
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
"part": "viewerMeta",
|
|
341
|
+
"element": "span",
|
|
342
|
+
"required": false,
|
|
343
|
+
"purpose": "The size, the kind, and which of how many the reader is looking at."
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"part": "viewerActions",
|
|
347
|
+
"element": "span",
|
|
348
|
+
"required": false,
|
|
349
|
+
"purpose": "The slot a consumer puts their own viewer controls in, beside the two the family ships."
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"part": "viewerExternal",
|
|
353
|
+
"element": "button",
|
|
354
|
+
"required": false,
|
|
355
|
+
"purpose": "Opens the file in a new tab, for a reader who wants the browser’s own full window — which is where a PDF is best read."
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
"part": "viewerClose",
|
|
359
|
+
"element": "button",
|
|
360
|
+
"required": false,
|
|
361
|
+
"purpose": "Closes the viewer and hands focus back to the name that opened it."
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"part": "viewerPrevious",
|
|
365
|
+
"element": "button",
|
|
366
|
+
"required": false,
|
|
367
|
+
"purpose": "The previous file the viewer can render. Files it cannot render are skipped rather than stopped on."
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"part": "viewerNext",
|
|
371
|
+
"element": "button",
|
|
372
|
+
"required": false,
|
|
373
|
+
"purpose": "The next file the viewer can render."
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
"part": "viewerStage",
|
|
377
|
+
"element": "div",
|
|
378
|
+
"required": false,
|
|
379
|
+
"purpose": "Where the file is rendered: an img, a video, an audio, or an iframe for a PDF and for text. A kind the browser cannot draw gets its own tile at the size of the stage and one sentence saying so."
|
|
380
|
+
}
|
|
381
|
+
],
|
|
382
|
+
"api": [
|
|
383
|
+
{
|
|
384
|
+
"name": "files",
|
|
385
|
+
"type": "model<readonly UploadFile[]>",
|
|
386
|
+
"defaultValue": "[]",
|
|
387
|
+
"appliesTo": "div[slUpload]",
|
|
388
|
+
"description": "The selection, as a two-way binding. Each entry carries the file, its kind, its status, the bytes moved and the reason it was refused; `filesRequest` carries the reason a movement happened."
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"name": "viewing",
|
|
392
|
+
"type": "model<string | null>",
|
|
393
|
+
"defaultValue": "null",
|
|
394
|
+
"appliesTo": "div[slUpload]",
|
|
395
|
+
"description": "The key of the file the viewer is open on, as a two-way binding"
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
"name": "variant",
|
|
399
|
+
"type": "'dropzone' | 'button' | 'field'",
|
|
400
|
+
"defaultValue": "dropzone",
|
|
401
|
+
"appliesTo": "div[slUpload]",
|
|
402
|
+
"description": "Which of the three shapes the consolidation names is drawn"
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"name": "layout",
|
|
406
|
+
"type": "'list' | 'grid'",
|
|
407
|
+
"defaultValue": "list",
|
|
408
|
+
"appliesTo": "div[slUpload]",
|
|
409
|
+
"description": "A column of rows, or a wall of pictures"
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
"name": "size",
|
|
413
|
+
"type": "'sm' | 'md' | 'lg'",
|
|
414
|
+
"defaultValue": "md",
|
|
415
|
+
"appliesTo": "div[slUpload]",
|
|
416
|
+
"description": "The step every control measure in the family reads"
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
"name": "preview",
|
|
420
|
+
"type": "'auto' | 'none'",
|
|
421
|
+
"defaultValue": "auto",
|
|
422
|
+
"appliesTo": "div[slUpload]",
|
|
423
|
+
"description": "Whether an image gets a thumbnail from an object URL the family revokes"
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
"name": "view",
|
|
427
|
+
"type": "'auto' | 'none'",
|
|
428
|
+
"defaultValue": "auto",
|
|
429
|
+
"appliesTo": "div[slUpload]",
|
|
430
|
+
"description": "Whether a file the browser can render opens in the viewer from its own name"
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"name": "duplicates",
|
|
434
|
+
"type": "'reject' | 'allow' | 'replace'",
|
|
435
|
+
"defaultValue": "reject",
|
|
436
|
+
"appliesTo": "div[slUpload]",
|
|
437
|
+
"description": "What happens to a second copy of a file the list already holds"
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
"name": "accept",
|
|
441
|
+
"type": "string",
|
|
442
|
+
"defaultValue": "—",
|
|
443
|
+
"appliesTo": "div[slUpload]",
|
|
444
|
+
"description": "The same syntax the attribute takes, applied to a drop as well as to the dialog"
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
"name": "multiple",
|
|
448
|
+
"type": "boolean",
|
|
449
|
+
"defaultValue": "false",
|
|
450
|
+
"appliesTo": "div[slUpload]",
|
|
451
|
+
"description": "Whether more than one file may be held. Multiple appends; single replaces."
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"name": "directory",
|
|
455
|
+
"type": "boolean",
|
|
456
|
+
"defaultValue": "false",
|
|
457
|
+
"appliesTo": "div[slUpload]",
|
|
458
|
+
"description": "Whether the picker chooses folders. Each file keeps its webkitRelativePath."
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
"name": "capture",
|
|
462
|
+
"type": "'user' | 'environment'",
|
|
463
|
+
"defaultValue": "—",
|
|
464
|
+
"appliesTo": "div[slUpload]",
|
|
465
|
+
"description": "Which camera the picker opens on a device that has one"
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
"name": "maxFiles",
|
|
469
|
+
"type": "number",
|
|
470
|
+
"defaultValue": "—",
|
|
471
|
+
"appliesTo": "div[slUpload]",
|
|
472
|
+
"description": "How many files may be kept. The extras are reported, never truncated in silence."
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
"name": "minFiles",
|
|
476
|
+
"type": "number",
|
|
477
|
+
"defaultValue": "—",
|
|
478
|
+
"appliesTo": "div[slUpload]",
|
|
479
|
+
"description": "How many the form needs. Reported to Reactive Forms as minFiles."
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
"name": "maxSize",
|
|
483
|
+
"type": "number",
|
|
484
|
+
"defaultValue": "—",
|
|
485
|
+
"appliesTo": "div[slUpload]",
|
|
486
|
+
"description": "The largest a single file may be, in bytes"
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
"name": "minSize",
|
|
490
|
+
"type": "number",
|
|
491
|
+
"defaultValue": "—",
|
|
492
|
+
"appliesTo": "div[slUpload]",
|
|
493
|
+
"description": "The smallest, in bytes. A zero-byte file is the common case it catches."
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"name": "maxTotalSize",
|
|
497
|
+
"type": "number",
|
|
498
|
+
"defaultValue": "—",
|
|
499
|
+
"appliesTo": "div[slUpload]",
|
|
500
|
+
"description": "The largest the whole selection may be, in bytes"
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
"name": "validate",
|
|
504
|
+
"type": "(file) => reason | null",
|
|
505
|
+
"defaultValue": "—",
|
|
506
|
+
"appliesTo": "div[slUpload]",
|
|
507
|
+
"description": "The consumer’s own rule, run after the family’s. It is fileValidator in the class, because Validator.validate is a method this directive already has."
|
|
508
|
+
},
|
|
509
|
+
{
|
|
510
|
+
"name": "transform",
|
|
511
|
+
"type": "(files) => files | Promise<files>",
|
|
512
|
+
"defaultValue": "—",
|
|
513
|
+
"appliesTo": "div[slUpload]",
|
|
514
|
+
"description": "Rewrites the selection before it is judged: compression, renaming, cropping"
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"name": "fileKey",
|
|
518
|
+
"type": "(file) => string",
|
|
519
|
+
"defaultValue": "name, size and lastModified",
|
|
520
|
+
"appliesTo": "div[slUpload]",
|
|
521
|
+
"description": "What makes two files the same file"
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
"name": "adapter",
|
|
525
|
+
"type": "UploadAdapter | send",
|
|
526
|
+
"defaultValue": "—",
|
|
527
|
+
"appliesTo": "div[slUpload]",
|
|
528
|
+
"description": "What moves the bytes. Without one the family selects and holds."
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
"name": "autoUpload",
|
|
532
|
+
"type": "boolean",
|
|
533
|
+
"defaultValue": "true",
|
|
534
|
+
"appliesTo": "div[slUpload]",
|
|
535
|
+
"description": "Whether an accepted file is sent at once, or waits for the reader"
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
"name": "concurrency",
|
|
539
|
+
"type": "number",
|
|
540
|
+
"defaultValue": "3",
|
|
541
|
+
"appliesTo": "div[slUpload]",
|
|
542
|
+
"description": "How many transfers run at the same time"
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
"name": "retries",
|
|
546
|
+
"type": "number",
|
|
547
|
+
"defaultValue": "0",
|
|
548
|
+
"appliesTo": "div[slUpload]",
|
|
549
|
+
"description": "How many times a failure is sent again. Off, because a POST retried is a second record."
|
|
550
|
+
},
|
|
551
|
+
{
|
|
552
|
+
"name": "retryDelay",
|
|
553
|
+
"type": "number",
|
|
554
|
+
"defaultValue": "1000",
|
|
555
|
+
"appliesTo": "div[slUpload]",
|
|
556
|
+
"description": "The first backoff, doubled for each further attempt"
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"name": "stallAfter",
|
|
560
|
+
"type": "number",
|
|
561
|
+
"defaultValue": "10000",
|
|
562
|
+
"appliesTo": "div[slUpload]",
|
|
563
|
+
"description": "How long without a progress report before a running transfer is called stalled"
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
"name": "maxRows",
|
|
567
|
+
"type": "number",
|
|
568
|
+
"defaultValue": "6",
|
|
569
|
+
"appliesTo": "div[slUpload]",
|
|
570
|
+
"description": "How many rows the list shows before the platform scrolls the rest. 0 is no bound."
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
"name": "clickToBrowse",
|
|
574
|
+
"type": "boolean",
|
|
575
|
+
"defaultValue": "true",
|
|
576
|
+
"appliesTo": "div[slUpload]",
|
|
577
|
+
"description": "Whether pressing the region opens the picker"
|
|
578
|
+
},
|
|
579
|
+
{
|
|
580
|
+
"name": "allowDrop",
|
|
581
|
+
"type": "boolean",
|
|
582
|
+
"defaultValue": "true",
|
|
583
|
+
"appliesTo": "div[slUpload]",
|
|
584
|
+
"description": "Whether the region takes a drop"
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
"name": "allowPaste",
|
|
588
|
+
"type": "boolean",
|
|
589
|
+
"defaultValue": "true",
|
|
590
|
+
"appliesTo": "div[slUpload]",
|
|
591
|
+
"description": "Whether a file on the clipboard may be pasted into the region"
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
"name": "preventDocumentDrop",
|
|
595
|
+
"type": "boolean",
|
|
596
|
+
"defaultValue": "true",
|
|
597
|
+
"appliesTo": "div[slUpload]",
|
|
598
|
+
"description": "Whether a file dropped beside the region is stopped from navigating the browser away"
|
|
599
|
+
},
|
|
600
|
+
{
|
|
601
|
+
"name": "pendingBlocksSubmit",
|
|
602
|
+
"type": "boolean",
|
|
603
|
+
"defaultValue": "true",
|
|
604
|
+
"appliesTo": "div[slUpload]",
|
|
605
|
+
"description": "Whether a transfer still running makes the control invalid"
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
"name": "locale",
|
|
609
|
+
"type": "string",
|
|
610
|
+
"defaultValue": "the language in force",
|
|
611
|
+
"appliesTo": "div[slUpload]",
|
|
612
|
+
"description": "BCP 47, for the size and the time left"
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
"name": "label",
|
|
616
|
+
"type": "string",
|
|
617
|
+
"defaultValue": "—",
|
|
618
|
+
"appliesTo": "div[slUpload]",
|
|
619
|
+
"description": "The family’s own label, drawn only outside a field"
|
|
620
|
+
},
|
|
621
|
+
{
|
|
622
|
+
"name": "description",
|
|
623
|
+
"type": "string",
|
|
624
|
+
"defaultValue": "—",
|
|
625
|
+
"appliesTo": "div[slUpload]",
|
|
626
|
+
"description": "The guidance, and the input’s aria-describedby"
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
"name": "disabled",
|
|
630
|
+
"type": "boolean",
|
|
631
|
+
"defaultValue": "false",
|
|
632
|
+
"appliesTo": "div[slUpload]",
|
|
633
|
+
"description": "Refuses the picker and the drop alike, because a drag is not routed through the input at all"
|
|
634
|
+
},
|
|
635
|
+
{
|
|
636
|
+
"name": "readOnly",
|
|
637
|
+
"type": "boolean",
|
|
638
|
+
"defaultValue": "false",
|
|
639
|
+
"appliesTo": "div[slUpload]",
|
|
640
|
+
"description": "Keeps the list readable and takes every control away"
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
"name": "invalid",
|
|
644
|
+
"type": "boolean",
|
|
645
|
+
"defaultValue": "false",
|
|
646
|
+
"appliesTo": "div[slUpload]",
|
|
647
|
+
"description": "Retargets the focus ring to the danger colour and marks the region"
|
|
648
|
+
},
|
|
649
|
+
{
|
|
650
|
+
"name": "required",
|
|
651
|
+
"type": "boolean",
|
|
652
|
+
"defaultValue": "false",
|
|
653
|
+
"appliesTo": "div[slUpload]",
|
|
654
|
+
"description": "Reaches the native input, so an empty selection is valueMissing before any of the family’s own rules run"
|
|
655
|
+
},
|
|
656
|
+
{
|
|
657
|
+
"name": "name",
|
|
658
|
+
"type": "string",
|
|
659
|
+
"defaultValue": "—",
|
|
660
|
+
"appliesTo": "div[slUpload]",
|
|
661
|
+
"description": "What the native input submits under"
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
"name": "messages",
|
|
665
|
+
"type": "Partial<UploadMessages>",
|
|
666
|
+
"defaultValue": "—",
|
|
667
|
+
"appliesTo": "div[slUpload]",
|
|
668
|
+
"description": "Words laid over the language in force, key by key: every control, the word for each status and each kind, the sentences about the queue (summary, selection, added, finished), and the sentence a refused file carries (rejection.*)"
|
|
669
|
+
}
|
|
670
|
+
],
|
|
671
|
+
"composition": [
|
|
672
|
+
{
|
|
673
|
+
"name": "provideUploadDefaults",
|
|
674
|
+
"type": "provider",
|
|
675
|
+
"defaultValue": "—",
|
|
676
|
+
"appliesTo": "any injector",
|
|
677
|
+
"description": "Sets the adapter, the limits and the behaviour once for the application; the words come from provideSlotted"
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
"name": "UPLOAD_DEFAULTS",
|
|
681
|
+
"type": "InjectionToken",
|
|
682
|
+
"defaultValue": "—",
|
|
683
|
+
"appliesTo": "any injector",
|
|
684
|
+
"description": "What the provider fills, for a page that wants to read what an upload here would do"
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
"name": "exportAs=\"slUpload\"",
|
|
688
|
+
"type": "template reference",
|
|
689
|
+
"defaultValue": "—",
|
|
690
|
+
"appliesTo": "div[slUpload]",
|
|
691
|
+
"description": "browse(), upload(), retryAll(), cancelAll() and setViewing() — what a template cannot write"
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
"name": "ControlValueAccessor",
|
|
695
|
+
"type": "implemented",
|
|
696
|
+
"defaultValue": "—",
|
|
697
|
+
"appliesTo": "div[slUpload]",
|
|
698
|
+
"description": "formControl and ngModel hold the selection. writeValue accepts UploadFile[] or File[] and normalises."
|
|
699
|
+
},
|
|
700
|
+
{
|
|
701
|
+
"name": "Validator",
|
|
702
|
+
"type": "implemented",
|
|
703
|
+
"defaultValue": "—",
|
|
704
|
+
"appliesTo": "div[slUpload]",
|
|
705
|
+
"description": "required, minFiles, maxFiles and uploadPending reach the form as errors, so a Reactive Form agrees with the DOM"
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
"name": "ng-content",
|
|
709
|
+
"type": "projection",
|
|
710
|
+
"defaultValue": "—",
|
|
711
|
+
"appliesTo": "div[slUpload]",
|
|
712
|
+
"description": "Projected into the root, which is where an application puts its own note or its own control"
|
|
713
|
+
},
|
|
714
|
+
{
|
|
715
|
+
"name": "createXhrUpload",
|
|
716
|
+
"type": "(options) => UploadAdapter",
|
|
717
|
+
"defaultValue": "—",
|
|
718
|
+
"appliesTo": "@slotted/core/upload",
|
|
719
|
+
"description": "The sender this library ships: url, method, headers, field name, credentials, and a parse of your own"
|
|
720
|
+
},
|
|
721
|
+
{
|
|
722
|
+
"name": "SlProgressBar",
|
|
723
|
+
"type": "directive",
|
|
724
|
+
"defaultValue": "—",
|
|
725
|
+
"appliesTo": "composed by the row",
|
|
726
|
+
"description": "The bar on a row’s bottom edge. The family says where it stands and nothing about how it is drawn."
|
|
727
|
+
}
|
|
728
|
+
],
|
|
729
|
+
"events": [
|
|
730
|
+
{
|
|
731
|
+
"name": "filesChange",
|
|
732
|
+
"payload": "readonly UploadFile[]",
|
|
733
|
+
"when": "The two-way binding’s own output, so [(files)] holds the selection. It fires after every movement: a pick, a drop, a paste, a removal, a clear, or the transfer reporting on a row."
|
|
734
|
+
},
|
|
735
|
+
{
|
|
736
|
+
"name": "filesRequest",
|
|
737
|
+
"payload": "ChangeRequest<readonly UploadFile[]>",
|
|
738
|
+
"when": "Before the selection moves, carrying the new value, the value it replaces, the reason — select, pointer, keyboard, remove, clear or programmatic — the originating event and cancel(). A two-way binding has one slot and can carry none of those."
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
"name": "viewingChange, viewingRequest",
|
|
742
|
+
"payload": "string | null, ChangeRequest<string | null>",
|
|
743
|
+
"when": "When the reader opens a file, moves to another, or closes the viewer. The reason says which: pointer, keyboard, escape, outsidePress, dismiss or programmatic."
|
|
744
|
+
},
|
|
745
|
+
{
|
|
746
|
+
"name": "reject",
|
|
747
|
+
"payload": "readonly UploadFile[]",
|
|
748
|
+
"when": "Once per selection that refused something, with the refused rows and their reasons. It fires before any message is written about them, because what to say is the consumer’s."
|
|
749
|
+
}
|
|
750
|
+
],
|
|
751
|
+
"accessibility": [
|
|
752
|
+
"There is no upload, dropzone or drag-and-drop pattern in the WAI-ARIA Authoring Practices — the index at w3.org/WAI/ARIA/apg/patterns/ lists none of the three. The platform supplies the control and four sources settle the rest: the HTML file input, the APG Button Pattern for every per-row control, WCAG 2.2 SC 2.5.7 for the drag, and SC 4.1.3 for what is announced.",
|
|
753
|
+
"The accessible name comes from a label around the trigger rather than around the whole region, so it is three words instead of every word in the box, and the guidance reaches the input as aria-describedby. The input itself is clipped rather than hidden: display:none and visibility:hidden take it out of the tab order and out of the accessibility tree, which is the whole reason the label pairing exists.",
|
|
754
|
+
"Drag and drop is pointer-only and cannot be made otherwise. WCAG 2.2 SC 2.5.7 asks for a single-pointer alternative to every dragging action, and the trigger inside the region is it — a real control, in the tab order, that opens the picker with Enter or Space.",
|
|
755
|
+
"A file arriving, being refused, failing or finishing is announced through packages/core/src/live-announcer, politely, without moving focus — WCAG 2.2 SC 4.1.3. Progress is never announced: a bar that speaks every event says nothing, and the number is on the row inside a progressbar a reader can inspect on demand.",
|
|
756
|
+
"A status is a word before it is a colour. Refused, Failed and Stopped are three different words for three different failures, because a reader looking at one red row cannot tell whether to try again, choose another file, or do nothing — and under forced colours the tint goes and only the word is left.",
|
|
757
|
+
"The viewer is modal: focus is contained inside it, Escape closes it, and focus goes back to the name that opened it. A text frame carries sandbox with neither allow-scripts nor allow-same-origin, because an object URL inherits this document’s origin and a text/html file the reader dropped would otherwise run its own script against it. A PDF frame carries none: Chrome’s PDF viewer is blocked in a sandboxed frame, and the type is what makes the exception safe — an HTML document served as application/pdf runs no script there.",
|
|
758
|
+
"A form submitted while the bytes are still moving is refused twice over: setCustomValidity on the control the reader can see, and { uploadPending: true } from Validator so a Reactive Form agrees with it. None of the nine surveyed implementations answers this at all."
|
|
759
|
+
]
|
|
760
|
+
}
|
|
761
|
+
},
|
|
762
|
+
"tokens": [
|
|
763
|
+
"--slotted-border-strong",
|
|
764
|
+
"--slotted-border-subtle",
|
|
765
|
+
"--slotted-border-width-medium",
|
|
766
|
+
"--slotted-border-width-thin",
|
|
767
|
+
"--slotted-control-border-color",
|
|
768
|
+
"--slotted-control-border-width",
|
|
769
|
+
"--slotted-control-font-family",
|
|
770
|
+
"--slotted-control-font-size-lg",
|
|
771
|
+
"--slotted-control-font-size-md",
|
|
772
|
+
"--slotted-control-font-size-sm",
|
|
773
|
+
"--slotted-control-font-weight",
|
|
774
|
+
"--slotted-control-gap-lg",
|
|
775
|
+
"--slotted-control-gap-md",
|
|
776
|
+
"--slotted-control-gap-sm",
|
|
777
|
+
"--slotted-control-height-lg",
|
|
778
|
+
"--slotted-control-height-md",
|
|
779
|
+
"--slotted-control-height-sm",
|
|
780
|
+
"--slotted-control-icon-size-lg",
|
|
781
|
+
"--slotted-control-icon-size-md",
|
|
782
|
+
"--slotted-control-icon-size-sm",
|
|
783
|
+
"--slotted-control-inner-size-lg",
|
|
784
|
+
"--slotted-control-inner-size-md",
|
|
785
|
+
"--slotted-control-inner-size-sm",
|
|
786
|
+
"--slotted-control-invalid-edge-width",
|
|
787
|
+
"--slotted-control-padding-inline-lg",
|
|
788
|
+
"--slotted-control-padding-inline-md",
|
|
789
|
+
"--slotted-control-padding-inline-sm",
|
|
790
|
+
"--slotted-control-radius",
|
|
791
|
+
"--slotted-control-shadow",
|
|
792
|
+
"--slotted-control-surface",
|
|
793
|
+
"--slotted-control-transition-duration",
|
|
794
|
+
"--slotted-control-transition-easing",
|
|
795
|
+
"--slotted-disabled-background",
|
|
796
|
+
"--slotted-disabled-border",
|
|
797
|
+
"--slotted-disabled-foreground",
|
|
798
|
+
"--slotted-duration-instant",
|
|
799
|
+
"--slotted-duration-medium",
|
|
800
|
+
"--slotted-easing-enter",
|
|
801
|
+
"--slotted-focus-ring-color",
|
|
802
|
+
"--slotted-focus-ring-color-invalid",
|
|
803
|
+
"--slotted-focus-ring-offset",
|
|
804
|
+
"--slotted-focus-ring-width",
|
|
805
|
+
"--slotted-font-size-md",
|
|
806
|
+
"--slotted-font-size-sm",
|
|
807
|
+
"--slotted-font-size-xs",
|
|
808
|
+
"--slotted-font-weight-medium",
|
|
809
|
+
"--slotted-font-weight-semibold",
|
|
810
|
+
"--slotted-line-height-md",
|
|
811
|
+
"--slotted-radius-full",
|
|
812
|
+
"--slotted-radius-md",
|
|
813
|
+
"--slotted-radius-sm",
|
|
814
|
+
"--slotted-shadow-sm",
|
|
815
|
+
"--slotted-shadow-xs",
|
|
816
|
+
"--slotted-space-1",
|
|
817
|
+
"--slotted-space-2",
|
|
818
|
+
"--slotted-space-3",
|
|
819
|
+
"--slotted-space-4",
|
|
820
|
+
"--slotted-space-5",
|
|
821
|
+
"--slotted-space-6",
|
|
822
|
+
"--slotted-space-9",
|
|
823
|
+
"--slotted-surface",
|
|
824
|
+
"--slotted-surface-sunken",
|
|
825
|
+
"--slotted-target-comfortable",
|
|
826
|
+
"--slotted-target-min",
|
|
827
|
+
"--slotted-text",
|
|
828
|
+
"--slotted-text-muted",
|
|
829
|
+
"--slotted-tone-accent-border",
|
|
830
|
+
"--slotted-tone-accent-surface",
|
|
831
|
+
"--slotted-tone-danger-border",
|
|
832
|
+
"--slotted-tone-danger-surface",
|
|
833
|
+
"--slotted-tone-danger-text",
|
|
834
|
+
"--slotted-tone-secondary-subtle-active",
|
|
835
|
+
"--slotted-tone-secondary-subtle-hover",
|
|
836
|
+
"--slotted-tone-success-text",
|
|
837
|
+
"--slotted-tone-warning-text",
|
|
838
|
+
"--slotted-upload-action-radius",
|
|
839
|
+
"--slotted-upload-action-size",
|
|
840
|
+
"--slotted-upload-border-width",
|
|
841
|
+
"--slotted-upload-card-actions-opacity",
|
|
842
|
+
"--slotted-upload-card-measure",
|
|
843
|
+
"--slotted-upload-field-section-gap",
|
|
844
|
+
"--slotted-upload-font-family",
|
|
845
|
+
"--slotted-upload-icon-size-min",
|
|
846
|
+
"--slotted-upload-item-background",
|
|
847
|
+
"--slotted-upload-item-border-color",
|
|
848
|
+
"--slotted-upload-item-gap",
|
|
849
|
+
"--slotted-upload-item-padding-block",
|
|
850
|
+
"--slotted-upload-item-padding-inline",
|
|
851
|
+
"--slotted-upload-item-radius",
|
|
852
|
+
"--slotted-upload-kind-archive",
|
|
853
|
+
"--slotted-upload-kind-audio",
|
|
854
|
+
"--slotted-upload-kind-document",
|
|
855
|
+
"--slotted-upload-kind-foreground",
|
|
856
|
+
"--slotted-upload-kind-image",
|
|
857
|
+
"--slotted-upload-kind-other",
|
|
858
|
+
"--slotted-upload-kind-pdf",
|
|
859
|
+
"--slotted-upload-kind-presentation",
|
|
860
|
+
"--slotted-upload-kind-spreadsheet",
|
|
861
|
+
"--slotted-upload-kind-video",
|
|
862
|
+
"--slotted-upload-label-font-weight",
|
|
863
|
+
"--slotted-upload-line-gap",
|
|
864
|
+
"--slotted-upload-name-font-weight",
|
|
865
|
+
"--slotted-upload-preview-radius",
|
|
866
|
+
"--slotted-upload-preview-size",
|
|
867
|
+
"--slotted-upload-radius",
|
|
868
|
+
"--slotted-upload-section-gap",
|
|
869
|
+
"--slotted-upload-state-layer-active",
|
|
870
|
+
"--slotted-upload-state-layer-hover",
|
|
871
|
+
"--slotted-upload-status-font-weight",
|
|
872
|
+
"--slotted-upload-trigger-background",
|
|
873
|
+
"--slotted-upload-viewer-control-opacity",
|
|
874
|
+
"--slotted-upload-viewer-control-size",
|
|
875
|
+
"--slotted-upload-viewer-tile-size",
|
|
876
|
+
"--slotted-upload-zone-background",
|
|
877
|
+
"--slotted-upload-zone-border-color",
|
|
878
|
+
"--slotted-upload-zone-border-width",
|
|
879
|
+
"--slotted-upload-zone-icon-size",
|
|
880
|
+
"--slotted-upload-zone-padding-block",
|
|
881
|
+
"--slotted-upload-zone-padding-inline",
|
|
882
|
+
"--slotted-upload-zone-state-layer-active",
|
|
883
|
+
"--slotted-upload-zone-state-layer-hover"
|
|
884
|
+
],
|
|
885
|
+
"examples": [
|
|
886
|
+
{
|
|
887
|
+
"id": "playground",
|
|
888
|
+
"title": "Playground",
|
|
889
|
+
"note": "Every axis on one upload, driven by the controls below the canvas. Drop a file on it, or press Browse files — nothing is sent here, because no adapter is given and a family without one selects and holds.",
|
|
890
|
+
"language": "html",
|
|
891
|
+
"source": "<div\n accept=\"application/pdf,image/*\"\n description=\"PDF, JPEG or PNG, up to 10 MB each.\"\n label=\"Supporting documents\"\n multiple\n slUpload\n></div>\n",
|
|
892
|
+
"verdict": "excerpt"
|
|
893
|
+
},
|
|
894
|
+
{
|
|
895
|
+
"id": "variants",
|
|
896
|
+
"title": "The three shapes one family has",
|
|
897
|
+
"note": "A drop region, a bare trigger and a control-height row. They are one axis rather than three families: the list, the summary and every per-row control below them are the same parts in all three, and only the region changes shape.",
|
|
898
|
+
"language": "html",
|
|
899
|
+
"source": "<div multiple slUpload variant=\"dropzone\"></div>\n<div slUpload variant=\"button\"></div>\n<div slUpload variant=\"field\"></div>\n",
|
|
900
|
+
"verdict": "excerpt"
|
|
901
|
+
},
|
|
902
|
+
{
|
|
903
|
+
"id": "layout",
|
|
904
|
+
"title": "A column of rows, or a wall of pictures",
|
|
905
|
+
"note": "The same rows, arranged. An image set is read by looking rather than by reading, so the grid gives the preview the card, moves the controls onto the corner of the picture and puts the name underneath — and a file with no thumbnail shows its extension in words on the tile.",
|
|
906
|
+
"language": "html",
|
|
907
|
+
"source": "<div accept=\"image/*\" label=\"Photographs of the damage\" layout=\"grid\" multiple slUpload></div>\n",
|
|
908
|
+
"verdict": "excerpt"
|
|
909
|
+
},
|
|
910
|
+
{
|
|
911
|
+
"id": "sizes",
|
|
912
|
+
"title": "Three steps, and what moves with them",
|
|
913
|
+
"note": "The trigger height, the type, the glyphs, the chip and the row’s controls all step together, because every one of them reads a control token the theme restates per density. The insets come from the space scale and do not move, which is the cost card and alert both accepted.",
|
|
914
|
+
"language": "html",
|
|
915
|
+
"source": "<div size=\"sm\" slUpload></div>\n<div size=\"md\" slUpload></div>\n<div size=\"lg\" slUpload></div>\n",
|
|
916
|
+
"verdict": "excerpt"
|
|
917
|
+
},
|
|
918
|
+
{
|
|
919
|
+
"id": "restrictions",
|
|
920
|
+
"title": "What is refused, and what the reader is told",
|
|
921
|
+
"note": "Nine reasons, each with its own sentence. accept filters the picker’s dialog and nothing else, so the family applies it to a drop as well — otherwise the same region accepts by drop what it refuses by picker. A refused file stays in the list rather than vanishing, because silence leaves the reader hunting for a file that never appeared.",
|
|
922
|
+
"language": "html",
|
|
923
|
+
"source": "<div\n (reject)=\"warn($event)\"\n [maxFiles]=\"10\"\n [maxSize]=\"10 * 1024 * 1024\"\n [maxTotalSize]=\"50 * 1024 * 1024\"\n [minSize]=\"1\"\n accept=\"application/pdf,image/*\"\n multiple\n slUpload\n></div>\n",
|
|
924
|
+
"verdict": "excerpt"
|
|
925
|
+
},
|
|
926
|
+
{
|
|
927
|
+
"id": "duplicates",
|
|
928
|
+
"title": "The same file, twice",
|
|
929
|
+
"note": "Identity is the name, the size and the modification time, and it is replaceable — because whether two files are the same file is a question about an application. reject refuses the second copy, allow keeps both, replace puts the new one in the old one’s place.",
|
|
930
|
+
"language": "html",
|
|
931
|
+
"source": "<div [fileKey]=\"byNameAndSize\" duplicates=\"replace\" multiple slUpload></div>\n",
|
|
932
|
+
"verdict": "excerpt"
|
|
933
|
+
},
|
|
934
|
+
{
|
|
935
|
+
"id": "directory",
|
|
936
|
+
"title": "A whole folder",
|
|
937
|
+
"note": "webkitdirectory reaches the input untouched and every file keeps its webkitRelativePath. A folder dropped into a region that does not accept folders is refused with the directory reason rather than added as a zero-byte row with the folder’s name on it, which is what the surveyed implementations do.",
|
|
938
|
+
"language": "html",
|
|
939
|
+
"source": "<div [maxFiles]=\"400\" directory label=\"Scanned case file\" multiple slUpload></div>\n",
|
|
940
|
+
"verdict": "excerpt"
|
|
941
|
+
},
|
|
942
|
+
{
|
|
943
|
+
"id": "capture",
|
|
944
|
+
"title": "Straight from the camera",
|
|
945
|
+
"note": "capture is the platform’s own attribute and the family forwards it: on a phone the picker opens a camera rather than a file browser. Nothing here is implemented by the family, which is the point — an adjuster standing beside a car photographs it.",
|
|
946
|
+
"language": "html",
|
|
947
|
+
"source": "<div accept=\"image/*\" capture=\"environment\" label=\"Photograph the damage\" slUpload></div>\n",
|
|
948
|
+
"verdict": "excerpt"
|
|
949
|
+
},
|
|
950
|
+
{
|
|
951
|
+
"id": "paste",
|
|
952
|
+
"title": "Pasted rather than chosen",
|
|
953
|
+
"note": "Focus the region and press ⌘V or Ctrl+V: a screenshot on the clipboard is a file, and it is the keyboard’s only route to one that is not on disk. It runs through the same rules a drop and a picker do.",
|
|
954
|
+
"language": "html",
|
|
955
|
+
"source": "<div allowPaste label=\"Paste a screenshot\" slUpload></div>\n",
|
|
956
|
+
"verdict": "excerpt"
|
|
957
|
+
},
|
|
958
|
+
{
|
|
959
|
+
"id": "drag-verdict",
|
|
960
|
+
"title": "The answer before the reader lets go",
|
|
961
|
+
"note": "DataTransfer.items gives an item’s kind and its type during a drag, and neither its name nor its size. Three of the five rules are answerable then and two are not, so a certain refusal is painted and a possible one is never: teaching the reader that the red edge means nothing would be worse than saying nothing.",
|
|
962
|
+
"language": "css",
|
|
963
|
+
"source": "/* A drag carrying files is anywhere over the document. */\n[data-ui='upload'][data-dragging] {\n}\n\n/* It is over this region, and it will be taken. */\n[data-ui='upload'] [data-part='dropzone'][data-drop-target] {\n}\n\n/* It is over this region, and it has already been refused. */\n[data-ui='upload'] [data-part='dropzone'][data-drop-invalid] {\n}\n",
|
|
964
|
+
"verdict": "excerpt"
|
|
965
|
+
},
|
|
966
|
+
{
|
|
967
|
+
"id": "transfer",
|
|
968
|
+
"title": "Sending, with a real adapter",
|
|
969
|
+
"note": "The family calls an adapter and reports what it says — it holds no URL, no method, no header and no credential. createXhrUpload is the one this library ships, and it is XMLHttpRequest rather than fetch because fetch reports no upload progress in any browser this library supports.",
|
|
970
|
+
"language": "ts",
|
|
971
|
+
"source": "bootstrapApplication(App, {\n providers: [\n provideUploadDefaults({\n adapter: createXhrUpload({\n url: '/api/claims/CLM-2026-0914/attachments',\n headers: () => ({ Authorization: `Bearer ${token()}` }),\n }),\n }),\n ],\n});\n",
|
|
972
|
+
"verdict": "excerpt"
|
|
973
|
+
},
|
|
974
|
+
{
|
|
975
|
+
"id": "manual-start",
|
|
976
|
+
"title": "The reader decides when it goes",
|
|
977
|
+
"note": "autoUpload off leaves every accepted file in ready with its own start control, for a form where the attachments should go with the submit rather than before it. Vaadin is the one surveyed implementation that ships the same switch.",
|
|
978
|
+
"language": "html",
|
|
979
|
+
"source": "<div #upload=\"slUpload\" [autoUpload]=\"false\" multiple slUpload></div>\n<button (click)=\"upload.upload()\" type=\"button\">Send the attachments</button>\n",
|
|
980
|
+
"verdict": "excerpt"
|
|
981
|
+
},
|
|
982
|
+
{
|
|
983
|
+
"id": "queue",
|
|
984
|
+
"title": "Nine files and three at a time",
|
|
985
|
+
"note": "Uppy alone among the surveyed implementations limits how many transfers run at once; Ant Design and Vaadin start every file together, which is how twelve files on a slow uplink all stall at the same moment. What is waiting says queued, and the summary carries the count and the time left.",
|
|
986
|
+
"language": "html",
|
|
987
|
+
"source": "<div [concurrency]=\"3\" locale=\"pt-BR\" multiple slUpload></div>\n",
|
|
988
|
+
"verdict": "excerpt"
|
|
989
|
+
},
|
|
990
|
+
{
|
|
991
|
+
"id": "retry",
|
|
992
|
+
"title": "When the server says no",
|
|
993
|
+
"note": "A failed row keeps its place, says Failed and offers to try again. Automatic retry ships and is off: an upload is a POST, and a POST that succeeded on the server and failed on the response is duplicated by a retry — a second invoice, a second attachment. A library may not choose that for an application.",
|
|
994
|
+
"language": "html",
|
|
995
|
+
"source": "<div [retries]=\"2\" [retryDelay]=\"1000\" multiple slUpload></div>\n",
|
|
996
|
+
"verdict": "excerpt"
|
|
997
|
+
},
|
|
998
|
+
{
|
|
999
|
+
"id": "pause",
|
|
1000
|
+
"title": "Suspending a transfer that can be suspended",
|
|
1001
|
+
"note": "The pause control is drawn only when the running adapter declares pausable, because one drawn over a sender that cannot suspend is a control that lies. An adapter that can suspend awaits context.whenResumed() between chunks; createXhrUpload cannot, and says so.",
|
|
1002
|
+
"language": "ts",
|
|
1003
|
+
"source": "const resumable = {\n pausable: true,\n async send(file, { signal, progress, whenResumed }) {\n for (const chunk of chunksOf(file)) {\n await whenResumed();\n await put(chunk, { signal });\n progress(chunk.end, file.size);\n }\n },\n};\n",
|
|
1004
|
+
"verdict": "excerpt"
|
|
1005
|
+
},
|
|
1006
|
+
{
|
|
1007
|
+
"id": "cancel",
|
|
1008
|
+
"title": "Stopping one, and taking one away",
|
|
1009
|
+
"note": "Two different actions, kept apart. Cancel aborts the run through the adapter’s own AbortSignal and leaves the file in the list so it can be sent again; remove aborts it and takes the row out. Every surveyed implementation collapses the two into one control and one red row.",
|
|
1010
|
+
"language": "ts",
|
|
1011
|
+
"source": "const adapter = {\n async send(file, { signal }) {\n // The platform's own cancellation: XMLHttpRequest aborts, fetch aborts,\n // and a hand-written sender checks signal.aborted between chunks.\n const response = await fetch('/attachments', { body: file, method: 'POST', signal });\n if (!response.ok) throw new Error(String(response.status));\n return response.json();\n },\n};\n",
|
|
1012
|
+
"verdict": "excerpt"
|
|
1013
|
+
},
|
|
1014
|
+
{
|
|
1015
|
+
"id": "stalled",
|
|
1016
|
+
"title": "A transfer that stops without failing",
|
|
1017
|
+
"note": "Vaadin has the word stalled in its i18n object and nothing that produces it. Here the runner marks a run stalled when no progress arrives inside stallAfter and clears it on the next byte, so a bar sitting at 43% has something to read beside it.",
|
|
1018
|
+
"language": "html",
|
|
1019
|
+
"source": "<div [stallAfter]=\"10000\" multiple slUpload></div>\n",
|
|
1020
|
+
"verdict": "excerpt"
|
|
1021
|
+
},
|
|
1022
|
+
{
|
|
1023
|
+
"id": "previews",
|
|
1024
|
+
"title": "What the reader sees before they open anything",
|
|
1025
|
+
"note": "An image gets a thumbnail from an object URL the family creates and revokes; everything else gets its kind’s tile. §14 of the feature guide requires the revocation by name, and two of the nine surveyed implementations leave it to the consumer.",
|
|
1026
|
+
"language": "html",
|
|
1027
|
+
"source": "<div layout=\"grid\" multiple preview=\"auto\" slUpload></div>\n<div multiple preview=\"none\" slUpload></div>\n",
|
|
1028
|
+
"verdict": "excerpt"
|
|
1029
|
+
},
|
|
1030
|
+
{
|
|
1031
|
+
"id": "viewer",
|
|
1032
|
+
"title": "Opening a file without leaving the form",
|
|
1033
|
+
"note": "Click a file’s name. The viewer is a composed sl-dialog with the file rendered inside it — an img, a video, an audio, or an iframe for a PDF and for text — and arrow keys move through the set, skipping what it cannot draw. A preview that opened a new tab was the first answer and it lost the form the reader was filling in.",
|
|
1034
|
+
"language": "html",
|
|
1035
|
+
"source": "<div [(viewing)]=\"openAttachment\" multiple slUpload></div>\n<button (click)=\"openAttachment.set(key)\" type=\"button\">Open the police report</button>\n",
|
|
1036
|
+
"verdict": "excerpt"
|
|
1037
|
+
},
|
|
1038
|
+
{
|
|
1039
|
+
"id": "kinds",
|
|
1040
|
+
"title": "Nine kinds, nine colours",
|
|
1041
|
+
"note": "A PDF red, a word-processed document blue, a spreadsheet green, a deck orange, a picture teal, a film indigo, a recording magenta, an archive amber. The colours are a scale of the theme’s rather than five tones stretched over nine kinds, because the tones hold no second blue and no indigo at all.",
|
|
1042
|
+
"language": "css",
|
|
1043
|
+
"source": ":root {\n --slotted-upload-kind-pdf: #b3261e;\n --slotted-upload-kind-document: #1a56db;\n --slotted-upload-kind-spreadsheet: #0f7b3f;\n --slotted-upload-kind-foreground: #ffffff;\n}\n",
|
|
1044
|
+
"verdict": "excerpt"
|
|
1045
|
+
},
|
|
1046
|
+
{
|
|
1047
|
+
"id": "content",
|
|
1048
|
+
"title": "Names the family did not choose",
|
|
1049
|
+
"note": "A name two hundred characters long truncates in the middle so the extension survives; an Arabic name reads in its own direction inside a left-to-right page, because the name and its extension are one bidi-isolated run; and a refusal’s sentence wraps under the row without moving the chip or the controls.",
|
|
1050
|
+
"language": "html",
|
|
1051
|
+
"source": "<span data-part=\"filename\" dir=\"auto\">\n <span data-part=\"name\">2026-09-14-northgate-motors-consolidated-repair…</span>\n <span data-part=\"extension\">.pdf</span>\n</span>\n",
|
|
1052
|
+
"verdict": "excerpt"
|
|
1053
|
+
},
|
|
1054
|
+
{
|
|
1055
|
+
"id": "in-a-form",
|
|
1056
|
+
"title": "In the middle of a form",
|
|
1057
|
+
"note": "A field above owns the label, the necessity mark, the description and the error slot, so the upload draws none of its own — two labels on one control is what a form gets otherwise. And a form submitted while the bytes are still moving is refused, which none of the nine surveyed implementations answers.",
|
|
1058
|
+
"language": "html",
|
|
1059
|
+
"source": "<div slField>\n <label slFieldLabel>Proof of ownership</label>\n <div [formControl]=\"proof\" [minFiles]=\"1\" slUpload variant=\"field\"></div>\n</div>\n\n<!-- proof.errors is { uploadPending: true } while the bytes are moving. -->\n",
|
|
1060
|
+
"verdict": "excerpt"
|
|
1061
|
+
},
|
|
1062
|
+
{
|
|
1063
|
+
"id": "states",
|
|
1064
|
+
"title": "Every state the contract declares",
|
|
1065
|
+
"note": "Disabled refuses the picker and the drop alike, because a drag is not routed through the input at all. Read-only keeps the list readable and takes every control away. Invalid retargets the focus ring to the danger colour. Loading and complete are the queue’s own two, and they are on the root.",
|
|
1066
|
+
"language": "html",
|
|
1067
|
+
"source": "<div disabled slUpload></div>\n<div readOnly slUpload></div>\n<div invalid required slUpload></div>\n\n<!-- data-loading and data-complete are written by the queue, never by a prop. -->\n",
|
|
1068
|
+
"verdict": "excerpt"
|
|
1069
|
+
},
|
|
1070
|
+
{
|
|
1071
|
+
"id": "keyboard",
|
|
1072
|
+
"title": "Everything, without a pointer",
|
|
1073
|
+
"note": "Tab reaches the trigger, then each row’s name and its controls in order. Enter and Space open the picker from the control and activate the button focus is on. Ctrl+V pastes. Inside the viewer, arrows move through the set, Home and End jump to its ends and Escape closes it back onto the name that opened it.",
|
|
1074
|
+
"language": "html",
|
|
1075
|
+
"source": "<!-- WCAG 2.2 SC 2.5.7: every action reachable by dragging is reachable by\n a single pointer action that is not a drag. The trigger is that action. -->\n<div allowDrop label=\"Supporting documents\" multiple slUpload></div>\n",
|
|
1076
|
+
"verdict": "excerpt"
|
|
1077
|
+
},
|
|
1078
|
+
{
|
|
1079
|
+
"id": "composition",
|
|
1080
|
+
"title": "Substituting what the family draws",
|
|
1081
|
+
"note": "The directive attaches to the consumer’s own element, so the element is theirs and the identity, the axes and every state are written onto it. Projected content lands inside the root, and exportAs reaches the six actions a template cannot write.",
|
|
1082
|
+
"language": "html",
|
|
1083
|
+
"source": "<div #upload=\"slUpload\" multiple slUpload>\n <p>Documents are kept for seven years.</p>\n</div>\n\n<button (click)=\"upload.browse()\" type=\"button\">browse()</button>\n<button (click)=\"upload.retryAll()\" type=\"button\">retryAll()</button>\n<button (click)=\"upload.cancelAll()\" type=\"button\">cancelAll()</button>\n",
|
|
1084
|
+
"verdict": "excerpt"
|
|
1085
|
+
},
|
|
1086
|
+
{
|
|
1087
|
+
"id": "defaults",
|
|
1088
|
+
"title": "Deciding once for the whole application",
|
|
1089
|
+
"note": "Where files go and how many run at once — set once in the injector rather than repeated on every form, which is how one of them ends up pointing somewhere else. An upload that states any of them itself still wins. What every control is called, what a refusal says and how the queue counts itself come from the language in force, and an upload lays its own messages over them.",
|
|
1090
|
+
"language": "ts",
|
|
1091
|
+
"source": "bootstrapApplication(App, {\n providers: [\n provideSlotted({ locale: 'pt-BR', catalogs: { 'pt-BR': PT_BR } }),\n provideUploadDefaults({ adapter, concurrency: 3 }),\n ],\n});\n",
|
|
1092
|
+
"verdict": "excerpt"
|
|
1093
|
+
},
|
|
1094
|
+
{
|
|
1095
|
+
"id": "adapter",
|
|
1096
|
+
"title": "Writing a sender of your own",
|
|
1097
|
+
"note": "The adapter is one function, or an object that also declares whether it can be paused. It is handed the file, an AbortSignal, a progress reporter and the pause handshake — which is everything a chunked or resumable sender needs from a control, and the reason chunking is not this family’s.",
|
|
1098
|
+
"language": "ts",
|
|
1099
|
+
"source": "type UploadAdapter = {\n send(\n file: File,\n context: {\n signal: AbortSignal;\n progress(loaded: number, total?: number): void;\n whenResumed(): Promise<void>;\n },\n ): Promise<unknown>;\n pausable?: boolean;\n};\n",
|
|
1100
|
+
"verdict": "excerpt"
|
|
1101
|
+
}
|
|
1102
|
+
]
|
|
1103
|
+
}
|