@furystack/shades-common-components 13.5.0 → 15.0.0
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/CHANGELOG.md +109 -0
- package/README.md +3 -3
- package/esm/components/accordion/accordion-item.d.ts.map +1 -1
- package/esm/components/accordion/accordion-item.js +7 -10
- package/esm/components/accordion/accordion-item.js.map +1 -1
- package/esm/components/accordion/accordion.d.ts +7 -0
- package/esm/components/accordion/accordion.d.ts.map +1 -1
- package/esm/components/accordion/accordion.js +5 -2
- package/esm/components/accordion/accordion.js.map +1 -1
- package/esm/components/accordion/accordion.spec.js +91 -50
- package/esm/components/accordion/accordion.spec.js.map +1 -1
- package/esm/components/alert.js +1 -1
- package/esm/components/alert.js.map +1 -1
- package/esm/components/app-bar-link.js +1 -1
- package/esm/components/app-bar-link.js.map +1 -1
- package/esm/components/app-bar.js +1 -1
- package/esm/components/app-bar.js.map +1 -1
- package/esm/components/avatar.js +1 -1
- package/esm/components/avatar.js.map +1 -1
- package/esm/components/badge.js +1 -1
- package/esm/components/badge.js.map +1 -1
- package/esm/components/breadcrumb.js +1 -1
- package/esm/components/breadcrumb.js.map +1 -1
- package/esm/components/breadcrumb.spec.js +3 -3
- package/esm/components/breadcrumb.spec.js.map +1 -1
- package/esm/components/button-group.js +4 -4
- package/esm/components/button-group.js.map +1 -1
- package/esm/components/button.js +1 -1
- package/esm/components/button.js.map +1 -1
- package/esm/components/button.spec.js +1 -1
- package/esm/components/button.spec.js.map +1 -1
- package/esm/components/cache-view.js +1 -1
- package/esm/components/cache-view.js.map +1 -1
- package/esm/components/cache-view.spec.js +2 -2
- package/esm/components/cache-view.spec.js.map +1 -1
- package/esm/components/card.js +5 -5
- package/esm/components/card.js.map +1 -1
- package/esm/components/carousel.js +2 -2
- package/esm/components/carousel.js.map +1 -1
- package/esm/components/chip.d.ts.map +1 -1
- package/esm/components/chip.js +5 -3
- package/esm/components/chip.js.map +1 -1
- package/esm/components/chip.spec.js +42 -0
- package/esm/components/chip.spec.js.map +1 -1
- package/esm/components/circular-progress.d.ts +2 -4
- package/esm/components/circular-progress.d.ts.map +1 -1
- package/esm/components/circular-progress.js +3 -6
- package/esm/components/circular-progress.js.map +1 -1
- package/esm/components/circular-progress.spec.js +19 -14
- package/esm/components/circular-progress.spec.js.map +1 -1
- package/esm/components/command-palette/command-palette-input.js +1 -1
- package/esm/components/command-palette/command-palette-input.js.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.js +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -1
- package/esm/components/command-palette/index.d.ts.map +1 -1
- package/esm/components/command-palette/index.js +15 -2
- package/esm/components/command-palette/index.js.map +1 -1
- package/esm/components/command-palette/index.spec.js +78 -33
- package/esm/components/command-palette/index.spec.js.map +1 -1
- package/esm/components/context-menu/context-menu-item.js +1 -1
- package/esm/components/context-menu/context-menu-item.js.map +1 -1
- package/esm/components/context-menu/context-menu.js +1 -1
- package/esm/components/context-menu/context-menu.js.map +1 -1
- package/esm/components/data-grid/body.js +1 -1
- package/esm/components/data-grid/body.js.map +1 -1
- package/esm/components/data-grid/data-grid-row.d.ts.map +1 -1
- package/esm/components/data-grid/data-grid-row.js +19 -3
- package/esm/components/data-grid/data-grid-row.js.map +1 -1
- package/esm/components/data-grid/data-grid.d.ts +12 -2
- package/esm/components/data-grid/data-grid.d.ts.map +1 -1
- package/esm/components/data-grid/data-grid.js +33 -13
- package/esm/components/data-grid/data-grid.js.map +1 -1
- package/esm/components/data-grid/data-grid.spec.js +170 -90
- package/esm/components/data-grid/data-grid.spec.js.map +1 -1
- package/esm/components/data-grid/filters/boolean-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/boolean-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/boolean-filter.js +4 -4
- package/esm/components/data-grid/filters/boolean-filter.js.map +1 -1
- package/esm/components/data-grid/filters/boolean-filter.spec.js +18 -17
- package/esm/components/data-grid/filters/boolean-filter.spec.js.map +1 -1
- package/esm/components/data-grid/filters/date-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/date-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/date-filter.js +6 -6
- package/esm/components/data-grid/filters/date-filter.js.map +1 -1
- package/esm/components/data-grid/filters/date-filter.spec.js +26 -21
- package/esm/components/data-grid/filters/date-filter.spec.js.map +1 -1
- package/esm/components/data-grid/filters/enum-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/enum-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/enum-filter.js +5 -5
- package/esm/components/data-grid/filters/enum-filter.js.map +1 -1
- package/esm/components/data-grid/filters/enum-filter.spec.js +21 -19
- package/esm/components/data-grid/filters/enum-filter.spec.js.map +1 -1
- package/esm/components/data-grid/filters/filter-dropdown.js +1 -1
- package/esm/components/data-grid/filters/filter-dropdown.js.map +1 -1
- package/esm/components/data-grid/filters/number-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/number-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/number-filter.js +5 -5
- package/esm/components/data-grid/filters/number-filter.js.map +1 -1
- package/esm/components/data-grid/filters/number-filter.spec.js +23 -21
- package/esm/components/data-grid/filters/number-filter.spec.js.map +1 -1
- package/esm/components/data-grid/filters/string-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/string-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/string-filter.js +5 -5
- package/esm/components/data-grid/filters/string-filter.js.map +1 -1
- package/esm/components/data-grid/filters/string-filter.spec.js +21 -19
- package/esm/components/data-grid/filters/string-filter.spec.js.map +1 -1
- package/esm/components/data-grid/footer.d.ts +2 -2
- package/esm/components/data-grid/footer.d.ts.map +1 -1
- package/esm/components/data-grid/footer.js +8 -13
- package/esm/components/data-grid/footer.js.map +1 -1
- package/esm/components/data-grid/footer.spec.js +38 -27
- package/esm/components/data-grid/footer.spec.js.map +1 -1
- package/esm/components/data-grid/header.d.ts +6 -6
- package/esm/components/data-grid/header.d.ts.map +1 -1
- package/esm/components/data-grid/header.js +16 -17
- package/esm/components/data-grid/header.js.map +1 -1
- package/esm/components/data-grid/header.spec.js +66 -60
- package/esm/components/data-grid/header.spec.js.map +1 -1
- package/esm/components/data-grid/selection-cell.d.ts.map +1 -1
- package/esm/components/data-grid/selection-cell.js +2 -2
- package/esm/components/data-grid/selection-cell.js.map +1 -1
- package/esm/components/dialog.d.ts +11 -0
- package/esm/components/dialog.d.ts.map +1 -1
- package/esm/components/dialog.js +3 -3
- package/esm/components/dialog.js.map +1 -1
- package/esm/components/dialog.spec.js +54 -2
- package/esm/components/dialog.spec.js.map +1 -1
- package/esm/components/divider.js +1 -1
- package/esm/components/divider.js.map +1 -1
- package/esm/components/drawer/drawer-toggle-button.js +1 -1
- package/esm/components/drawer/drawer-toggle-button.js.map +1 -1
- package/esm/components/drawer/index.js +1 -1
- package/esm/components/drawer/index.js.map +1 -1
- package/esm/components/dropdown.d.ts.map +1 -1
- package/esm/components/dropdown.js +2 -2
- package/esm/components/dropdown.js.map +1 -1
- package/esm/components/dropdown.spec.js +8 -0
- package/esm/components/dropdown.spec.js.map +1 -1
- package/esm/components/fab.js +1 -1
- package/esm/components/fab.js.map +1 -1
- package/esm/components/form.js +1 -1
- package/esm/components/form.js.map +1 -1
- package/esm/components/grid.js +1 -1
- package/esm/components/grid.js.map +1 -1
- package/esm/components/icons/icon.js +1 -1
- package/esm/components/icons/icon.js.map +1 -1
- package/esm/components/image.d.ts.map +1 -1
- package/esm/components/image.js +17 -8
- package/esm/components/image.js.map +1 -1
- package/esm/components/image.spec.js +60 -0
- package/esm/components/image.spec.js.map +1 -1
- package/esm/components/inputs/autocomplete.js +1 -1
- package/esm/components/inputs/autocomplete.js.map +1 -1
- package/esm/components/inputs/checkbox.d.ts.map +1 -1
- package/esm/components/inputs/checkbox.js +2 -1
- package/esm/components/inputs/checkbox.js.map +1 -1
- package/esm/components/inputs/checkbox.spec.js +1 -1
- package/esm/components/inputs/checkbox.spec.js.map +1 -1
- package/esm/components/inputs/input-number.js +1 -1
- package/esm/components/inputs/input-number.js.map +1 -1
- package/esm/components/inputs/input-number.spec.js +1 -1
- package/esm/components/inputs/input-number.spec.js.map +1 -1
- package/esm/components/inputs/input.js +1 -1
- package/esm/components/inputs/input.js.map +1 -1
- package/esm/components/inputs/input.spec.js +1 -1
- package/esm/components/inputs/input.spec.js.map +1 -1
- package/esm/components/inputs/radio-group.js +1 -1
- package/esm/components/inputs/radio-group.js.map +1 -1
- package/esm/components/inputs/radio-group.spec.js +1 -1
- package/esm/components/inputs/radio-group.spec.js.map +1 -1
- package/esm/components/inputs/radio.d.ts.map +1 -1
- package/esm/components/inputs/radio.js +2 -1
- package/esm/components/inputs/radio.js.map +1 -1
- package/esm/components/inputs/radio.spec.js +1 -1
- package/esm/components/inputs/radio.spec.js.map +1 -1
- package/esm/components/inputs/select.js +1 -1
- package/esm/components/inputs/select.js.map +1 -1
- package/esm/components/inputs/slider.d.ts.map +1 -1
- package/esm/components/inputs/slider.js +2 -1
- package/esm/components/inputs/slider.js.map +1 -1
- package/esm/components/inputs/switch.d.ts.map +1 -1
- package/esm/components/inputs/switch.js +2 -1
- package/esm/components/inputs/switch.js.map +1 -1
- package/esm/components/inputs/switch.spec.js +1 -1
- package/esm/components/inputs/switch.spec.js.map +1 -1
- package/esm/components/inputs/text-area.js +1 -1
- package/esm/components/inputs/text-area.js.map +1 -1
- package/esm/components/inputs/text-area.spec.js +1 -1
- package/esm/components/inputs/text-area.spec.js.map +1 -1
- package/esm/components/linear-progress.d.ts +2 -4
- package/esm/components/linear-progress.d.ts.map +1 -1
- package/esm/components/linear-progress.js +3 -6
- package/esm/components/linear-progress.js.map +1 -1
- package/esm/components/linear-progress.spec.js +21 -18
- package/esm/components/linear-progress.spec.js.map +1 -1
- package/esm/components/list/list-item.d.ts.map +1 -1
- package/esm/components/list/list-item.js +22 -6
- package/esm/components/list/list-item.js.map +1 -1
- package/esm/components/list/list.d.ts +7 -0
- package/esm/components/list/list.d.ts.map +1 -1
- package/esm/components/list/list.js +29 -9
- package/esm/components/list/list.js.map +1 -1
- package/esm/components/list/list.spec.js +117 -23
- package/esm/components/list/list.spec.js.map +1 -1
- package/esm/components/loader.js +1 -1
- package/esm/components/loader.js.map +1 -1
- package/esm/components/loader.spec.js +1 -1
- package/esm/components/loader.spec.js.map +1 -1
- package/esm/components/markdown/markdown-display.d.ts.map +1 -1
- package/esm/components/markdown/markdown-display.js +12 -2
- package/esm/components/markdown/markdown-display.js.map +1 -1
- package/esm/components/markdown/markdown-display.spec.js +98 -1
- package/esm/components/markdown/markdown-display.spec.js.map +1 -1
- package/esm/components/markdown/markdown-editor.js +1 -1
- package/esm/components/markdown/markdown-editor.js.map +1 -1
- package/esm/components/markdown/markdown-editor.spec.js +88 -1
- package/esm/components/markdown/markdown-editor.spec.js.map +1 -1
- package/esm/components/markdown/markdown-input.js +1 -1
- package/esm/components/markdown/markdown-input.js.map +1 -1
- package/esm/components/markdown/markdown-input.spec.js +1 -1
- package/esm/components/markdown/markdown-input.spec.js.map +1 -1
- package/esm/components/menu/menu.js +2 -2
- package/esm/components/menu/menu.js.map +1 -1
- package/esm/components/modal.d.ts +10 -0
- package/esm/components/modal.d.ts.map +1 -1
- package/esm/components/modal.js +25 -5
- package/esm/components/modal.js.map +1 -1
- package/esm/components/modal.spec.js +89 -4
- package/esm/components/modal.spec.js.map +1 -1
- package/esm/components/noty-list.js +2 -2
- package/esm/components/noty-list.js.map +1 -1
- package/esm/components/page-container/index.js +1 -1
- package/esm/components/page-container/index.js.map +1 -1
- package/esm/components/page-container/page-header.js +1 -1
- package/esm/components/page-container/page-header.js.map +1 -1
- package/esm/components/page-layout/index.js +2 -2
- package/esm/components/page-layout/index.js.map +1 -1
- package/esm/components/page-layout/index.spec.js +14 -0
- package/esm/components/page-layout/index.spec.js.map +1 -1
- package/esm/components/pagination.js +1 -1
- package/esm/components/pagination.js.map +1 -1
- package/esm/components/paper.js +1 -1
- package/esm/components/paper.js.map +1 -1
- package/esm/components/rating.d.ts.map +1 -1
- package/esm/components/rating.js +29 -22
- package/esm/components/rating.js.map +1 -1
- package/esm/components/rating.spec.js +152 -5
- package/esm/components/rating.spec.js.map +1 -1
- package/esm/components/result.js +1 -1
- package/esm/components/result.js.map +1 -1
- package/esm/components/skeleton.js +1 -1
- package/esm/components/skeleton.js.map +1 -1
- package/esm/components/suggest/index.d.ts.map +1 -1
- package/esm/components/suggest/index.js +15 -2
- package/esm/components/suggest/index.js.map +1 -1
- package/esm/components/suggest/index.spec.js +99 -44
- package/esm/components/suggest/index.spec.js.map +1 -1
- package/esm/components/suggest/suggest-input.js +1 -1
- package/esm/components/suggest/suggest-input.js.map +1 -1
- package/esm/components/suggest/suggest-input.spec.js +1 -1
- package/esm/components/suggest/suggest-input.spec.js.map +1 -1
- package/esm/components/suggest/suggestion-list.js +1 -1
- package/esm/components/suggest/suggestion-list.js.map +1 -1
- package/esm/components/suggest/suggestion-list.spec.js +1 -1
- package/esm/components/suggest/suggestion-list.spec.js.map +1 -1
- package/esm/components/tabs.d.ts.map +1 -1
- package/esm/components/tabs.js +6 -2
- package/esm/components/tabs.js.map +1 -1
- package/esm/components/timeline.js +2 -2
- package/esm/components/timeline.js.map +1 -1
- package/esm/components/tooltip.js +1 -1
- package/esm/components/tooltip.js.map +1 -1
- package/esm/components/tree/tree-item.d.ts.map +1 -1
- package/esm/components/tree/tree-item.js +19 -6
- package/esm/components/tree/tree-item.js.map +1 -1
- package/esm/components/tree/tree.d.ts +7 -0
- package/esm/components/tree/tree.d.ts.map +1 -1
- package/esm/components/tree/tree.js +13 -4
- package/esm/components/tree/tree.js.map +1 -1
- package/esm/components/tree/tree.spec.js +64 -2
- package/esm/components/tree/tree.spec.js.map +1 -1
- package/esm/components/typography.js +1 -1
- package/esm/components/typography.js.map +1 -1
- package/esm/components/wizard/index.js +1 -1
- package/esm/components/wizard/index.js.map +1 -1
- package/esm/components/wizard/index.spec.js +3 -3
- package/esm/components/wizard/index.spec.js.map +1 -1
- package/esm/services/collection-service.d.ts +9 -0
- package/esm/services/collection-service.d.ts.map +1 -1
- package/esm/services/collection-service.js +33 -11
- package/esm/services/collection-service.js.map +1 -1
- package/esm/services/collection-service.spec.js +33 -24
- package/esm/services/collection-service.spec.js.map +1 -1
- package/esm/services/css-variable-theme.d.ts +7 -0
- package/esm/services/css-variable-theme.d.ts.map +1 -1
- package/esm/services/css-variable-theme.js +23 -0
- package/esm/services/css-variable-theme.js.map +1 -1
- package/esm/services/css-variable-theme.spec.js +1 -0
- package/esm/services/css-variable-theme.spec.js.map +1 -1
- package/esm/services/list-service.d.ts +9 -0
- package/esm/services/list-service.d.ts.map +1 -1
- package/esm/services/list-service.js +13 -13
- package/esm/services/list-service.js.map +1 -1
- package/esm/services/list-service.spec.js +13 -33
- package/esm/services/list-service.spec.js.map +1 -1
- package/esm/services/theme-provider-service.d.ts +3 -0
- package/esm/services/theme-provider-service.d.ts.map +1 -1
- package/esm/services/theme-provider-service.js.map +1 -1
- package/esm/services/tree-service.d.ts.map +1 -1
- package/esm/services/tree-service.js +5 -9
- package/esm/services/tree-service.js.map +1 -1
- package/esm/services/tree-service.spec.js +12 -9
- package/esm/services/tree-service.spec.js.map +1 -1
- package/esm/themes/architect-theme.d.ts +1 -0
- package/esm/themes/architect-theme.d.ts.map +1 -1
- package/esm/themes/architect-theme.js +1 -0
- package/esm/themes/architect-theme.js.map +1 -1
- package/esm/themes/auditore-theme.d.ts +1 -0
- package/esm/themes/auditore-theme.d.ts.map +1 -1
- package/esm/themes/auditore-theme.js +1 -0
- package/esm/themes/auditore-theme.js.map +1 -1
- package/esm/themes/black-mesa-theme.d.ts +1 -0
- package/esm/themes/black-mesa-theme.d.ts.map +1 -1
- package/esm/themes/black-mesa-theme.js +1 -0
- package/esm/themes/black-mesa-theme.js.map +1 -1
- package/esm/themes/chieftain-theme.d.ts +1 -0
- package/esm/themes/chieftain-theme.d.ts.map +1 -1
- package/esm/themes/chieftain-theme.js +1 -0
- package/esm/themes/chieftain-theme.js.map +1 -1
- package/esm/themes/default-dark-theme.d.ts +1 -0
- package/esm/themes/default-dark-theme.d.ts.map +1 -1
- package/esm/themes/default-dark-theme.js +1 -0
- package/esm/themes/default-dark-theme.js.map +1 -1
- package/esm/themes/default-light-theme.d.ts +1 -0
- package/esm/themes/default-light-theme.d.ts.map +1 -1
- package/esm/themes/default-light-theme.js +1 -0
- package/esm/themes/default-light-theme.js.map +1 -1
- package/esm/themes/dragonborn-theme.d.ts +1 -0
- package/esm/themes/dragonborn-theme.d.ts.map +1 -1
- package/esm/themes/dragonborn-theme.js +1 -0
- package/esm/themes/dragonborn-theme.js.map +1 -1
- package/esm/themes/hawkins-theme.d.ts +1 -0
- package/esm/themes/hawkins-theme.d.ts.map +1 -1
- package/esm/themes/hawkins-theme.js +1 -0
- package/esm/themes/hawkins-theme.js.map +1 -1
- package/esm/themes/jedi-theme.d.ts +1 -0
- package/esm/themes/jedi-theme.d.ts.map +1 -1
- package/esm/themes/jedi-theme.js +1 -0
- package/esm/themes/jedi-theme.js.map +1 -1
- package/esm/themes/neon-runner-theme.d.ts +1 -0
- package/esm/themes/neon-runner-theme.d.ts.map +1 -1
- package/esm/themes/neon-runner-theme.js +1 -0
- package/esm/themes/neon-runner-theme.js.map +1 -1
- package/esm/themes/paladin-theme.d.ts +1 -0
- package/esm/themes/paladin-theme.d.ts.map +1 -1
- package/esm/themes/paladin-theme.js +1 -0
- package/esm/themes/paladin-theme.js.map +1 -1
- package/esm/themes/plumber-theme.d.ts +1 -0
- package/esm/themes/plumber-theme.d.ts.map +1 -1
- package/esm/themes/plumber-theme.js +1 -0
- package/esm/themes/plumber-theme.js.map +1 -1
- package/esm/themes/replicant-theme.d.ts +1 -0
- package/esm/themes/replicant-theme.d.ts.map +1 -1
- package/esm/themes/replicant-theme.js +1 -0
- package/esm/themes/replicant-theme.js.map +1 -1
- package/esm/themes/sandworm-theme.d.ts +1 -0
- package/esm/themes/sandworm-theme.d.ts.map +1 -1
- package/esm/themes/sandworm-theme.js +1 -0
- package/esm/themes/sandworm-theme.js.map +1 -1
- package/esm/themes/shadow-broker-theme.d.ts +1 -0
- package/esm/themes/shadow-broker-theme.d.ts.map +1 -1
- package/esm/themes/shadow-broker-theme.js +1 -0
- package/esm/themes/shadow-broker-theme.js.map +1 -1
- package/esm/themes/sith-theme.d.ts +1 -0
- package/esm/themes/sith-theme.d.ts.map +1 -1
- package/esm/themes/sith-theme.js +1 -0
- package/esm/themes/sith-theme.js.map +1 -1
- package/esm/themes/vault-dweller-theme.d.ts +1 -0
- package/esm/themes/vault-dweller-theme.d.ts.map +1 -1
- package/esm/themes/vault-dweller-theme.js +1 -0
- package/esm/themes/vault-dweller-theme.js.map +1 -1
- package/esm/themes/wild-hunt-theme.d.ts +1 -0
- package/esm/themes/wild-hunt-theme.d.ts.map +1 -1
- package/esm/themes/wild-hunt-theme.js +1 -0
- package/esm/themes/wild-hunt-theme.js.map +1 -1
- package/esm/themes/xenomorph-theme.d.ts +1 -0
- package/esm/themes/xenomorph-theme.d.ts.map +1 -1
- package/esm/themes/xenomorph-theme.js +1 -0
- package/esm/themes/xenomorph-theme.js.map +1 -1
- package/package.json +3 -3
- package/src/components/accordion/accordion-item.tsx +10 -15
- package/src/components/accordion/accordion.spec.tsx +134 -79
- package/src/components/accordion/accordion.tsx +14 -2
- package/src/components/alert.tsx +1 -1
- package/src/components/app-bar-link.tsx +1 -1
- package/src/components/app-bar.tsx +1 -1
- package/src/components/avatar.tsx +1 -1
- package/src/components/badge.tsx +1 -1
- package/src/components/breadcrumb.spec.tsx +3 -3
- package/src/components/breadcrumb.tsx +1 -1
- package/src/components/button-group.tsx +4 -4
- package/src/components/button.spec.tsx +1 -1
- package/src/components/button.tsx +1 -1
- package/src/components/cache-view.spec.tsx +2 -2
- package/src/components/cache-view.tsx +3 -3
- package/src/components/card.tsx +5 -5
- package/src/components/carousel.tsx +2 -2
- package/src/components/chip.spec.tsx +64 -0
- package/src/components/chip.tsx +5 -2
- package/src/components/circular-progress.spec.tsx +20 -14
- package/src/components/circular-progress.tsx +5 -11
- package/src/components/command-palette/command-palette-input.tsx +1 -1
- package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +1 -1
- package/src/components/command-palette/command-palette-suggestion-list.tsx +1 -1
- package/src/components/command-palette/index.spec.tsx +95 -33
- package/src/components/command-palette/index.tsx +16 -4
- package/src/components/context-menu/context-menu-item.tsx +1 -1
- package/src/components/context-menu/context-menu.tsx +1 -1
- package/src/components/data-grid/body.tsx +1 -1
- package/src/components/data-grid/data-grid-row.tsx +21 -3
- package/src/components/data-grid/data-grid.spec.tsx +246 -92
- package/src/components/data-grid/data-grid.tsx +52 -21
- package/src/components/data-grid/filters/boolean-filter.spec.tsx +29 -18
- package/src/components/data-grid/filters/boolean-filter.tsx +6 -6
- package/src/components/data-grid/filters/date-filter.spec.tsx +35 -22
- package/src/components/data-grid/filters/date-filter.tsx +8 -8
- package/src/components/data-grid/filters/enum-filter.spec.tsx +35 -20
- package/src/components/data-grid/filters/enum-filter.tsx +7 -7
- package/src/components/data-grid/filters/filter-dropdown.tsx +1 -1
- package/src/components/data-grid/filters/number-filter.spec.tsx +32 -22
- package/src/components/data-grid/filters/number-filter.tsx +7 -7
- package/src/components/data-grid/filters/string-filter.spec.tsx +32 -20
- package/src/components/data-grid/filters/string-filter.tsx +7 -7
- package/src/components/data-grid/footer.spec.tsx +79 -31
- package/src/components/data-grid/footer.tsx +10 -15
- package/src/components/data-grid/header.spec.tsx +152 -68
- package/src/components/data-grid/header.tsx +64 -27
- package/src/components/data-grid/selection-cell.tsx +2 -1
- package/src/components/dialog.spec.tsx +77 -2
- package/src/components/dialog.tsx +15 -2
- package/src/components/divider.tsx +1 -1
- package/src/components/drawer/drawer-toggle-button.tsx +1 -1
- package/src/components/drawer/index.tsx +1 -1
- package/src/components/dropdown.spec.tsx +9 -0
- package/src/components/dropdown.tsx +2 -1
- package/src/components/fab.tsx +1 -1
- package/src/components/form.tsx +1 -1
- package/src/components/grid.tsx +1 -1
- package/src/components/icons/icon.tsx +1 -1
- package/src/components/image.spec.tsx +82 -0
- package/src/components/image.tsx +18 -9
- package/src/components/inputs/autocomplete.tsx +1 -1
- package/src/components/inputs/checkbox.spec.tsx +1 -1
- package/src/components/inputs/checkbox.tsx +2 -1
- package/src/components/inputs/input-number.spec.tsx +1 -1
- package/src/components/inputs/input-number.tsx +1 -1
- package/src/components/inputs/input.spec.tsx +1 -1
- package/src/components/inputs/input.tsx +1 -1
- package/src/components/inputs/radio-group.spec.tsx +1 -1
- package/src/components/inputs/radio-group.tsx +1 -1
- package/src/components/inputs/radio.spec.tsx +1 -1
- package/src/components/inputs/radio.tsx +2 -1
- package/src/components/inputs/select.tsx +1 -1
- package/src/components/inputs/slider.tsx +2 -1
- package/src/components/inputs/switch.spec.tsx +1 -1
- package/src/components/inputs/switch.tsx +2 -1
- package/src/components/inputs/text-area.spec.tsx +1 -1
- package/src/components/inputs/text-area.tsx +1 -1
- package/src/components/linear-progress.spec.tsx +22 -18
- package/src/components/linear-progress.tsx +5 -11
- package/src/components/list/list-item.tsx +23 -5
- package/src/components/list/list.spec.tsx +165 -32
- package/src/components/list/list.tsx +38 -11
- package/src/components/loader.spec.tsx +1 -1
- package/src/components/loader.tsx +1 -1
- package/src/components/markdown/markdown-display.spec.tsx +133 -1
- package/src/components/markdown/markdown-display.tsx +13 -2
- package/src/components/markdown/markdown-editor.spec.tsx +124 -1
- package/src/components/markdown/markdown-editor.tsx +1 -1
- package/src/components/markdown/markdown-input.spec.tsx +1 -1
- package/src/components/markdown/markdown-input.tsx +1 -1
- package/src/components/menu/menu.tsx +2 -2
- package/src/components/modal.spec.tsx +127 -4
- package/src/components/modal.tsx +42 -4
- package/src/components/noty-list.tsx +2 -2
- package/src/components/page-container/index.tsx +1 -1
- package/src/components/page-container/page-header.tsx +1 -1
- package/src/components/page-layout/index.spec.tsx +20 -0
- package/src/components/page-layout/index.tsx +2 -2
- package/src/components/pagination.tsx +1 -1
- package/src/components/paper.tsx +1 -1
- package/src/components/rating.spec.tsx +200 -5
- package/src/components/rating.tsx +29 -23
- package/src/components/result.tsx +1 -1
- package/src/components/skeleton.tsx +1 -1
- package/src/components/suggest/index.spec.tsx +148 -44
- package/src/components/suggest/index.tsx +16 -3
- package/src/components/suggest/suggest-input.spec.tsx +1 -1
- package/src/components/suggest/suggest-input.tsx +1 -1
- package/src/components/suggest/suggestion-list.spec.tsx +1 -1
- package/src/components/suggest/suggestion-list.tsx +1 -1
- package/src/components/tabs.tsx +6 -2
- package/src/components/timeline.tsx +2 -2
- package/src/components/tooltip.tsx +1 -1
- package/src/components/tree/tree-item.tsx +20 -5
- package/src/components/tree/tree.spec.tsx +101 -2
- package/src/components/tree/tree.tsx +22 -4
- package/src/components/typography.tsx +1 -1
- package/src/components/wizard/index.spec.tsx +3 -3
- package/src/components/wizard/index.tsx +1 -1
- package/src/services/collection-service.spec.ts +33 -24
- package/src/services/collection-service.ts +35 -13
- package/src/services/css-variable-theme.spec.ts +1 -0
- package/src/services/css-variable-theme.ts +25 -0
- package/src/services/list-service.spec.ts +13 -42
- package/src/services/list-service.ts +15 -13
- package/src/services/theme-provider-service.ts +2 -0
- package/src/services/tree-service.spec.ts +12 -9
- package/src/services/tree-service.ts +5 -8
- package/src/themes/architect-theme.ts +1 -0
- package/src/themes/auditore-theme.ts +1 -0
- package/src/themes/black-mesa-theme.ts +1 -0
- package/src/themes/chieftain-theme.ts +1 -0
- package/src/themes/default-dark-theme.ts +1 -0
- package/src/themes/default-light-theme.ts +1 -0
- package/src/themes/dragonborn-theme.ts +1 -0
- package/src/themes/hawkins-theme.ts +1 -0
- package/src/themes/jedi-theme.ts +1 -0
- package/src/themes/neon-runner-theme.ts +1 -0
- package/src/themes/paladin-theme.ts +1 -0
- package/src/themes/plumber-theme.ts +1 -0
- package/src/themes/replicant-theme.ts +1 -0
- package/src/themes/sandworm-theme.ts +1 -0
- package/src/themes/shadow-broker-theme.ts +1 -0
- package/src/themes/sith-theme.ts +1 -0
- package/src/themes/vault-dweller-theme.ts +1 -0
- package/src/themes/wild-hunt-theme.ts +1 -0
- package/src/themes/xenomorph-theme.ts +1 -0
|
@@ -68,7 +68,7 @@ describe('Suggest', () => {
|
|
|
68
68
|
})
|
|
69
69
|
|
|
70
70
|
describe('rendering', () => {
|
|
71
|
-
it('should render
|
|
71
|
+
it('should render as custom element', async () => {
|
|
72
72
|
await usingAsync(new Injector(), async (injector) => {
|
|
73
73
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
74
74
|
const onSelectSuggestion = vi.fn()
|
|
@@ -200,13 +200,11 @@ describe('Suggest', () => {
|
|
|
200
200
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
201
201
|
input.value = 'test'
|
|
202
202
|
|
|
203
|
-
|
|
204
|
-
Object.defineProperty(keyupEvent, 'target', { value: input })
|
|
205
|
-
wrapper?.dispatchEvent(keyupEvent)
|
|
203
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
206
204
|
|
|
207
205
|
await advanceTimers(300)
|
|
208
206
|
|
|
209
|
-
const arrowDownEvent = new KeyboardEvent('
|
|
207
|
+
const arrowDownEvent = new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true })
|
|
210
208
|
Object.defineProperty(arrowDownEvent, 'target', { value: input })
|
|
211
209
|
wrapper?.dispatchEvent(arrowDownEvent)
|
|
212
210
|
|
|
@@ -243,18 +241,16 @@ describe('Suggest', () => {
|
|
|
243
241
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
244
242
|
input.value = 'test'
|
|
245
243
|
|
|
246
|
-
|
|
247
|
-
Object.defineProperty(keyupEvent, 'target', { value: input })
|
|
248
|
-
wrapper?.dispatchEvent(keyupEvent)
|
|
244
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
249
245
|
|
|
250
246
|
await advanceTimers(300)
|
|
251
247
|
|
|
252
|
-
const arrowDownEvent = new KeyboardEvent('
|
|
248
|
+
const arrowDownEvent = new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true })
|
|
253
249
|
Object.defineProperty(arrowDownEvent, 'target', { value: input })
|
|
254
250
|
wrapper?.dispatchEvent(arrowDownEvent)
|
|
255
251
|
wrapper?.dispatchEvent(arrowDownEvent)
|
|
256
252
|
|
|
257
|
-
const arrowUpEvent = new KeyboardEvent('
|
|
253
|
+
const arrowUpEvent = new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true })
|
|
258
254
|
Object.defineProperty(arrowUpEvent, 'target', { value: input })
|
|
259
255
|
wrapper?.dispatchEvent(arrowUpEvent)
|
|
260
256
|
|
|
@@ -290,13 +286,11 @@ describe('Suggest', () => {
|
|
|
290
286
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
291
287
|
input.value = 'First'
|
|
292
288
|
|
|
293
|
-
|
|
294
|
-
Object.defineProperty(keyupEvent, 'target', { value: input })
|
|
295
|
-
wrapper?.dispatchEvent(keyupEvent)
|
|
289
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
296
290
|
|
|
297
291
|
await advanceTimers(300)
|
|
298
292
|
|
|
299
|
-
const enterEvent = new KeyboardEvent('
|
|
293
|
+
const enterEvent = new KeyboardEvent('keydown', { key: 'Enter', bubbles: true })
|
|
300
294
|
Object.defineProperty(enterEvent, 'target', { value: input })
|
|
301
295
|
wrapper?.dispatchEvent(enterEvent)
|
|
302
296
|
|
|
@@ -332,13 +326,11 @@ describe('Suggest', () => {
|
|
|
332
326
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
333
327
|
input.value = 'First'
|
|
334
328
|
|
|
335
|
-
|
|
336
|
-
Object.defineProperty(keyupEvent, 'target', { value: input })
|
|
337
|
-
wrapper?.dispatchEvent(keyupEvent)
|
|
329
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
338
330
|
|
|
339
331
|
await advanceTimers(300)
|
|
340
332
|
|
|
341
|
-
const enterEvent = new KeyboardEvent('
|
|
333
|
+
const enterEvent = new KeyboardEvent('keydown', { key: 'Enter', bubbles: true, cancelable: true })
|
|
342
334
|
Object.defineProperty(enterEvent, 'target', { value: input })
|
|
343
335
|
|
|
344
336
|
const preventDefaultSpy = vi.spyOn(enterEvent, 'preventDefault')
|
|
@@ -348,7 +340,7 @@ describe('Suggest', () => {
|
|
|
348
340
|
})
|
|
349
341
|
})
|
|
350
342
|
|
|
351
|
-
it('should prevent default on ArrowUp key', async () => {
|
|
343
|
+
it('should prevent default on ArrowUp key when suggestions are open', async () => {
|
|
352
344
|
await usingAsync(new Injector(), async (injector) => {
|
|
353
345
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
354
346
|
const onSelectSuggestion = vi.fn()
|
|
@@ -372,8 +364,11 @@ describe('Suggest', () => {
|
|
|
372
364
|
const wrapper = suggest?.querySelector('.suggest-wrapper') as HTMLElement
|
|
373
365
|
|
|
374
366
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
367
|
+
input.value = 'First'
|
|
368
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
369
|
+
await advanceTimers(300)
|
|
375
370
|
|
|
376
|
-
const arrowUpEvent = new KeyboardEvent('
|
|
371
|
+
const arrowUpEvent = new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true, cancelable: true })
|
|
377
372
|
Object.defineProperty(arrowUpEvent, 'target', { value: input })
|
|
378
373
|
|
|
379
374
|
const preventDefaultSpy = vi.spyOn(arrowUpEvent, 'preventDefault')
|
|
@@ -383,7 +378,7 @@ describe('Suggest', () => {
|
|
|
383
378
|
})
|
|
384
379
|
})
|
|
385
380
|
|
|
386
|
-
it('should prevent default on ArrowDown key', async () => {
|
|
381
|
+
it('should prevent default on ArrowDown key when suggestions are open', async () => {
|
|
387
382
|
await usingAsync(new Injector(), async (injector) => {
|
|
388
383
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
389
384
|
const onSelectSuggestion = vi.fn()
|
|
@@ -407,8 +402,11 @@ describe('Suggest', () => {
|
|
|
407
402
|
const wrapper = suggest?.querySelector('.suggest-wrapper') as HTMLElement
|
|
408
403
|
|
|
409
404
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
405
|
+
input.value = 'First'
|
|
406
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
407
|
+
await advanceTimers(300)
|
|
410
408
|
|
|
411
|
-
const arrowDownEvent = new KeyboardEvent('
|
|
409
|
+
const arrowDownEvent = new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true, cancelable: true })
|
|
412
410
|
Object.defineProperty(arrowDownEvent, 'target', { value: input })
|
|
413
411
|
|
|
414
412
|
const preventDefaultSpy = vi.spyOn(arrowDownEvent, 'preventDefault')
|
|
@@ -418,6 +416,39 @@ describe('Suggest', () => {
|
|
|
418
416
|
})
|
|
419
417
|
})
|
|
420
418
|
|
|
419
|
+
it('should not prevent default on arrow keys when dropdown is closed', async () => {
|
|
420
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
421
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
422
|
+
const onSelectSuggestion = vi.fn()
|
|
423
|
+
|
|
424
|
+
initializeShadeRoot({
|
|
425
|
+
injector,
|
|
426
|
+
rootElement,
|
|
427
|
+
jsxElement: (
|
|
428
|
+
<Suggest<TestEntry>
|
|
429
|
+
defaultPrefix="🔍"
|
|
430
|
+
getEntries={getTestEntries}
|
|
431
|
+
getSuggestionEntry={getSuggestionEntry}
|
|
432
|
+
onSelectSuggestion={onSelectSuggestion}
|
|
433
|
+
/>
|
|
434
|
+
),
|
|
435
|
+
})
|
|
436
|
+
|
|
437
|
+
await advanceTimers(50)
|
|
438
|
+
|
|
439
|
+
const suggest = document.querySelector('shade-suggest') as HTMLElement
|
|
440
|
+
const wrapper = suggest?.querySelector('.suggest-wrapper') as HTMLElement
|
|
441
|
+
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
442
|
+
|
|
443
|
+
const arrowDownEvent = new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true, cancelable: true })
|
|
444
|
+
Object.defineProperty(arrowDownEvent, 'target', { value: input })
|
|
445
|
+
const preventDefaultSpy = vi.spyOn(arrowDownEvent, 'preventDefault')
|
|
446
|
+
wrapper?.dispatchEvent(arrowDownEvent)
|
|
447
|
+
|
|
448
|
+
expect(preventDefaultSpy).not.toHaveBeenCalled()
|
|
449
|
+
})
|
|
450
|
+
})
|
|
451
|
+
|
|
421
452
|
it('should not move selection below 0', async () => {
|
|
422
453
|
await usingAsync(new Injector(), async (injector) => {
|
|
423
454
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
@@ -442,9 +473,12 @@ describe('Suggest', () => {
|
|
|
442
473
|
const wrapper = suggest?.querySelector('.suggest-wrapper') as HTMLElement
|
|
443
474
|
|
|
444
475
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
476
|
+
input.value = 'test'
|
|
477
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
478
|
+
await advanceTimers(300)
|
|
445
479
|
|
|
446
480
|
for (let i = 0; i < 5; i++) {
|
|
447
|
-
const arrowUpEvent = new KeyboardEvent('
|
|
481
|
+
const arrowUpEvent = new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true })
|
|
448
482
|
Object.defineProperty(arrowUpEvent, 'target', { value: input })
|
|
449
483
|
wrapper?.dispatchEvent(arrowUpEvent)
|
|
450
484
|
}
|
|
@@ -616,14 +650,11 @@ describe('Suggest', () => {
|
|
|
616
650
|
await advanceTimers(50)
|
|
617
651
|
|
|
618
652
|
const suggest = document.querySelector('shade-suggest') as HTMLElement
|
|
619
|
-
const wrapper = suggest?.querySelector('.suggest-wrapper') as HTMLElement
|
|
620
653
|
|
|
621
654
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
622
655
|
input.value = 'First'
|
|
623
656
|
|
|
624
|
-
|
|
625
|
-
Object.defineProperty(keyupEvent, 'target', { value: input })
|
|
626
|
-
wrapper?.dispatchEvent(keyupEvent)
|
|
657
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
627
658
|
|
|
628
659
|
await advanceTimers(300)
|
|
629
660
|
|
|
@@ -658,14 +689,11 @@ describe('Suggest', () => {
|
|
|
658
689
|
await advanceTimers(50)
|
|
659
690
|
|
|
660
691
|
const suggest = document.querySelector('shade-suggest') as HTMLElement
|
|
661
|
-
const wrapper = suggest?.querySelector('.suggest-wrapper') as HTMLElement
|
|
662
692
|
|
|
663
693
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
664
694
|
input.value = 'test'
|
|
665
695
|
|
|
666
|
-
|
|
667
|
-
Object.defineProperty(keyupEvent, 'target', { value: input })
|
|
668
|
-
wrapper?.dispatchEvent(keyupEvent)
|
|
696
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
669
697
|
|
|
670
698
|
await advanceTimers(300)
|
|
671
699
|
|
|
@@ -698,14 +726,11 @@ describe('Suggest', () => {
|
|
|
698
726
|
await advanceTimers(50)
|
|
699
727
|
|
|
700
728
|
const suggest = document.querySelector('shade-suggest') as HTMLElement
|
|
701
|
-
const wrapper = suggest?.querySelector('.suggest-wrapper') as HTMLElement
|
|
702
729
|
|
|
703
730
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
704
731
|
input.value = 'test'
|
|
705
732
|
|
|
706
|
-
|
|
707
|
-
Object.defineProperty(keyupEvent, 'target', { value: input })
|
|
708
|
-
wrapper?.dispatchEvent(keyupEvent)
|
|
733
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
709
734
|
|
|
710
735
|
await advanceTimers(300)
|
|
711
736
|
|
|
@@ -742,13 +767,11 @@ describe('Suggest', () => {
|
|
|
742
767
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
743
768
|
input.value = 'First'
|
|
744
769
|
|
|
745
|
-
|
|
746
|
-
Object.defineProperty(keyupEvent, 'target', { value: input })
|
|
747
|
-
wrapper?.dispatchEvent(keyupEvent)
|
|
770
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
748
771
|
|
|
749
772
|
await advanceTimers(300)
|
|
750
773
|
|
|
751
|
-
const enterEvent = new KeyboardEvent('
|
|
774
|
+
const enterEvent = new KeyboardEvent('keydown', { key: 'Enter', bubbles: true })
|
|
752
775
|
Object.defineProperty(enterEvent, 'target', { value: input })
|
|
753
776
|
wrapper?.dispatchEvent(enterEvent)
|
|
754
777
|
|
|
@@ -784,15 +807,13 @@ describe('Suggest', () => {
|
|
|
784
807
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
785
808
|
input.value = 'First'
|
|
786
809
|
|
|
787
|
-
|
|
788
|
-
Object.defineProperty(keyupEvent, 'target', { value: input })
|
|
789
|
-
wrapper?.dispatchEvent(keyupEvent)
|
|
810
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
790
811
|
|
|
791
812
|
await advanceTimers(300)
|
|
792
813
|
|
|
793
814
|
expect(suggest?.hasAttribute('data-opened')).toBe(true)
|
|
794
815
|
|
|
795
|
-
const enterEvent = new KeyboardEvent('
|
|
816
|
+
const enterEvent = new KeyboardEvent('keydown', { key: 'Enter', bubbles: true })
|
|
796
817
|
Object.defineProperty(enterEvent, 'target', { value: input })
|
|
797
818
|
wrapper?.dispatchEvent(enterEvent)
|
|
798
819
|
|
|
@@ -883,6 +904,89 @@ describe('Suggest', () => {
|
|
|
883
904
|
})
|
|
884
905
|
})
|
|
885
906
|
|
|
907
|
+
describe('spatial navigation attributes', () => {
|
|
908
|
+
it('should have data-spatial-nav-target on the host element', async () => {
|
|
909
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
910
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
911
|
+
const onSelectSuggestion = vi.fn()
|
|
912
|
+
|
|
913
|
+
initializeShadeRoot({
|
|
914
|
+
injector,
|
|
915
|
+
rootElement,
|
|
916
|
+
jsxElement: (
|
|
917
|
+
<Suggest<TestEntry>
|
|
918
|
+
defaultPrefix="🔍"
|
|
919
|
+
getEntries={getTestEntries}
|
|
920
|
+
getSuggestionEntry={getSuggestionEntry}
|
|
921
|
+
onSelectSuggestion={onSelectSuggestion}
|
|
922
|
+
/>
|
|
923
|
+
),
|
|
924
|
+
})
|
|
925
|
+
|
|
926
|
+
await advanceTimers(50)
|
|
927
|
+
|
|
928
|
+
const suggest = document.querySelector('shade-suggest') as HTMLElement
|
|
929
|
+
expect(suggest.hasAttribute('data-spatial-nav-target')).toBe(true)
|
|
930
|
+
})
|
|
931
|
+
})
|
|
932
|
+
|
|
933
|
+
it('should have tabIndex of -1 on the host element', async () => {
|
|
934
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
935
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
936
|
+
const onSelectSuggestion = vi.fn()
|
|
937
|
+
|
|
938
|
+
initializeShadeRoot({
|
|
939
|
+
injector,
|
|
940
|
+
rootElement,
|
|
941
|
+
jsxElement: (
|
|
942
|
+
<Suggest<TestEntry>
|
|
943
|
+
defaultPrefix="🔍"
|
|
944
|
+
getEntries={getTestEntries}
|
|
945
|
+
getSuggestionEntry={getSuggestionEntry}
|
|
946
|
+
onSelectSuggestion={onSelectSuggestion}
|
|
947
|
+
/>
|
|
948
|
+
),
|
|
949
|
+
})
|
|
950
|
+
|
|
951
|
+
await advanceTimers(50)
|
|
952
|
+
|
|
953
|
+
const suggest = document.querySelector('shade-suggest') as HTMLElement
|
|
954
|
+
expect(suggest.tabIndex).toBe(-1)
|
|
955
|
+
})
|
|
956
|
+
})
|
|
957
|
+
|
|
958
|
+
it('should delegate focus to the inner input when the host is focused', async () => {
|
|
959
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
960
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
961
|
+
const onSelectSuggestion = vi.fn()
|
|
962
|
+
|
|
963
|
+
initializeShadeRoot({
|
|
964
|
+
injector,
|
|
965
|
+
rootElement,
|
|
966
|
+
jsxElement: (
|
|
967
|
+
<Suggest<TestEntry>
|
|
968
|
+
defaultPrefix="🔍"
|
|
969
|
+
getEntries={getTestEntries}
|
|
970
|
+
getSuggestionEntry={getSuggestionEntry}
|
|
971
|
+
onSelectSuggestion={onSelectSuggestion}
|
|
972
|
+
/>
|
|
973
|
+
),
|
|
974
|
+
})
|
|
975
|
+
|
|
976
|
+
await advanceTimers(50)
|
|
977
|
+
|
|
978
|
+
const suggest = document.querySelector('shade-suggest') as HTMLElement
|
|
979
|
+
const input = suggest.querySelector('input') as HTMLInputElement
|
|
980
|
+
|
|
981
|
+
suggest.dispatchEvent(new FocusEvent('focus', { bubbles: false }))
|
|
982
|
+
|
|
983
|
+
await advanceTimers(10)
|
|
984
|
+
|
|
985
|
+
expect(document.activeElement).toBe(input)
|
|
986
|
+
})
|
|
987
|
+
})
|
|
988
|
+
})
|
|
989
|
+
|
|
886
990
|
describe('synchronous suggestions mode', () => {
|
|
887
991
|
it('should render with string[] suggestions', async () => {
|
|
888
992
|
await usingAsync(new Injector(), async (injector) => {
|
|
@@ -956,7 +1060,7 @@ describe('Suggest', () => {
|
|
|
956
1060
|
const input = suggest?.querySelector('input') as HTMLInputElement
|
|
957
1061
|
|
|
958
1062
|
input.value = 'ap'
|
|
959
|
-
input.dispatchEvent(new
|
|
1063
|
+
input.dispatchEvent(new Event('input', { bubbles: true }))
|
|
960
1064
|
|
|
961
1065
|
await advanceTimers(300)
|
|
962
1066
|
|
|
@@ -41,7 +41,7 @@ const isSyncProps = (props: SuggestProps<unknown>): props is SuggestSyncProps =>
|
|
|
41
41
|
export const Suggest: <T>(props: SuggestProps<T>, children: ChildrenList) => JSX.Element<any> = Shade<
|
|
42
42
|
SuggestProps<any>
|
|
43
43
|
>({
|
|
44
|
-
|
|
44
|
+
customElementName: 'shade-suggest',
|
|
45
45
|
css: {
|
|
46
46
|
...searchableInputStyles,
|
|
47
47
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
@@ -82,6 +82,15 @@ export const Suggest: <T>(props: SuggestProps<T>, children: ChildrenList) => JSX
|
|
|
82
82
|
|
|
83
83
|
useHostProps({
|
|
84
84
|
'data-opened': isOpened ? '' : undefined,
|
|
85
|
+
tabIndex: -1,
|
|
86
|
+
'data-spatial-nav-target': '',
|
|
87
|
+
onfocus: (ev: FocusEvent) => {
|
|
88
|
+
const host = ev.currentTarget as HTMLElement
|
|
89
|
+
const input = host.querySelector('input')
|
|
90
|
+
if (input) {
|
|
91
|
+
input.focus()
|
|
92
|
+
}
|
|
93
|
+
},
|
|
85
94
|
})
|
|
86
95
|
useDisposable('isLoadingSubscription', () =>
|
|
87
96
|
manager.isLoading.subscribe((isLoading) => {
|
|
@@ -107,7 +116,10 @@ export const Suggest: <T>(props: SuggestProps<T>, children: ChildrenList) => JSX
|
|
|
107
116
|
<div
|
|
108
117
|
ref={wrapperRef}
|
|
109
118
|
className="suggest-wrapper"
|
|
110
|
-
|
|
119
|
+
onkeydown={(ev) => {
|
|
120
|
+
const hasSuggestions = manager.isOpened.getValue() && manager.currentSuggestions.getValue().length > 0
|
|
121
|
+
if (!hasSuggestions) return
|
|
122
|
+
|
|
111
123
|
if (ev.key === 'Enter') {
|
|
112
124
|
ev.preventDefault()
|
|
113
125
|
manager.selectSuggestion()
|
|
@@ -123,7 +135,8 @@ export const Suggest: <T>(props: SuggestProps<T>, children: ChildrenList) => JSX
|
|
|
123
135
|
Math.min(manager.selectedIndex.getValue() + 1, manager.currentSuggestions.getValue().length - 1),
|
|
124
136
|
)
|
|
125
137
|
}
|
|
126
|
-
|
|
138
|
+
}}
|
|
139
|
+
oninput={(ev) => {
|
|
127
140
|
void manager.getSuggestion({ injector, term: (ev.target as HTMLInputElement).value })
|
|
128
141
|
}}
|
|
129
142
|
>
|
|
@@ -47,7 +47,7 @@ describe('SuggestInput', () => {
|
|
|
47
47
|
return new SuggestManager<TestEntry>(getEntries, getSuggestionEntry)
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
it('should render
|
|
50
|
+
it('should render as custom element', async () => {
|
|
51
51
|
await usingAsync(new Injector(), async (injector) => {
|
|
52
52
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
53
53
|
const manager = createManager()
|
|
@@ -3,7 +3,7 @@ import { cssVariableTheme } from '../../services/css-variable-theme.js'
|
|
|
3
3
|
import type { SuggestManager } from './suggest-manager.js'
|
|
4
4
|
|
|
5
5
|
export const SuggestInput = Shade<{ manager: SuggestManager<any> }>({
|
|
6
|
-
|
|
6
|
+
customElementName: 'shades-suggest-input',
|
|
7
7
|
css: {
|
|
8
8
|
width: '100%',
|
|
9
9
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
@@ -55,7 +55,7 @@ describe('SuggestionList', () => {
|
|
|
55
55
|
return new SuggestManager<TestEntry>(getEntries, getSuggestionEntry)
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
it('should render
|
|
58
|
+
it('should render as custom element', async () => {
|
|
59
59
|
await usingAsync(new Injector(), async (injector) => {
|
|
60
60
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
61
61
|
const manager = createManager()
|
|
@@ -6,7 +6,7 @@ import type { SuggestManager } from './suggest-manager.js'
|
|
|
6
6
|
|
|
7
7
|
export const SuggestionList: <T>(props: { manager: SuggestManager<T> }, children: ChildrenList) => JSX.Element<any> =
|
|
8
8
|
Shade<{ manager: SuggestManager<any> }>({
|
|
9
|
-
|
|
9
|
+
customElementName: 'shade-suggest-suggestion-list',
|
|
10
10
|
css: {
|
|
11
11
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
12
12
|
'& .suggestion-items-container': {
|
package/src/components/tabs.tsx
CHANGED
|
@@ -13,7 +13,7 @@ export type Tab = {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
const TabHeader = Shade<{ hash: string }>({
|
|
16
|
-
|
|
16
|
+
customElementName: 'shade-tab-header',
|
|
17
17
|
css: {
|
|
18
18
|
padding: `${cssVariableTheme.spacing.md} 40px`,
|
|
19
19
|
cursor: 'pointer',
|
|
@@ -74,7 +74,7 @@ export const Tabs = Shade<{
|
|
|
74
74
|
onAdd?: () => void
|
|
75
75
|
viewTransition?: boolean | ViewTransitionConfig
|
|
76
76
|
}>({
|
|
77
|
-
|
|
77
|
+
customElementName: 'shade-tabs',
|
|
78
78
|
css: {
|
|
79
79
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
80
80
|
width: '100%',
|
|
@@ -115,6 +115,10 @@ export const Tabs = Shade<{
|
|
|
115
115
|
color: cssVariableTheme.text.primary,
|
|
116
116
|
boxShadow: `inset 0 -2px 0 ${cssVariableTheme.palette.primary.main}`,
|
|
117
117
|
},
|
|
118
|
+
'& .shade-tab-btn:focus-visible': {
|
|
119
|
+
outline: cssVariableTheme.action.focusOutline,
|
|
120
|
+
outlineOffset: '-2px',
|
|
121
|
+
},
|
|
118
122
|
|
|
119
123
|
// Close button (span with role="button" via event delegation)
|
|
120
124
|
'& .shade-tab-close': {
|
|
@@ -21,7 +21,7 @@ export type TimelineItemProps = PartialElement<HTMLElement> & {
|
|
|
21
21
|
* Renders a dot, a connector tail, and the item's content (children).
|
|
22
22
|
*/
|
|
23
23
|
export const TimelineItem = Shade<TimelineItemProps>({
|
|
24
|
-
|
|
24
|
+
customElementName: 'shade-timeline-item',
|
|
25
25
|
css: {
|
|
26
26
|
display: 'flex',
|
|
27
27
|
position: 'relative',
|
|
@@ -157,7 +157,7 @@ export type TimelineProps = PartialElement<HTMLElement> & {
|
|
|
157
157
|
* Supports left, right, and alternate layout modes with optional pending state.
|
|
158
158
|
*/
|
|
159
159
|
export const Timeline = Shade<TimelineProps>({
|
|
160
|
-
|
|
160
|
+
customElementName: 'shade-timeline',
|
|
161
161
|
css: {
|
|
162
162
|
display: 'flex',
|
|
163
163
|
flexDirection: 'column',
|
|
@@ -20,7 +20,7 @@ const INDENT_PX = 20
|
|
|
20
20
|
const EXPAND_ICON_WIDTH = 20
|
|
21
21
|
|
|
22
22
|
export const TreeItem: <T>(props: TreeItemProps<T>, children: ChildrenList) => JSX.Element<any> = Shade({
|
|
23
|
-
|
|
23
|
+
customElementName: 'shade-tree-item',
|
|
24
24
|
css: {
|
|
25
25
|
display: 'flex',
|
|
26
26
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
@@ -69,10 +69,20 @@ export const TreeItem: <T>(props: TreeItemProps<T>, children: ChildrenList) => J
|
|
|
69
69
|
const isSelected = selection.includes(item)
|
|
70
70
|
|
|
71
71
|
useHostProps({
|
|
72
|
+
tabIndex: isFocused ? 0 : -1,
|
|
73
|
+
'data-spatial-nav-target': '',
|
|
72
74
|
role: 'treeitem',
|
|
73
75
|
'aria-level': (level + 1).toString(),
|
|
74
76
|
'aria-selected': isSelected.toString(),
|
|
75
77
|
...(hasChildren ? { 'aria-expanded': isExpanded.toString() } : {}),
|
|
78
|
+
onfocus: () => {
|
|
79
|
+
if (treeService.focusedItem.getValue() !== item) {
|
|
80
|
+
treeService.focusedItem.setValue(item)
|
|
81
|
+
}
|
|
82
|
+
if (!treeService.hasFocus.getValue()) {
|
|
83
|
+
treeService.hasFocus.setValue(true)
|
|
84
|
+
}
|
|
85
|
+
},
|
|
76
86
|
onclick: (ev: MouseEvent) => {
|
|
77
87
|
treeService.handleItemClick(item, ev)
|
|
78
88
|
},
|
|
@@ -93,10 +103,15 @@ export const TreeItem: <T>(props: TreeItemProps<T>, children: ChildrenList) => J
|
|
|
93
103
|
queueMicrotask(() => {
|
|
94
104
|
const el = wrapperRef.current
|
|
95
105
|
if (!el) return
|
|
106
|
+
const hostEl = el.closest('shade-tree-item') as HTMLElement
|
|
107
|
+
if (!hostEl) return
|
|
108
|
+
|
|
109
|
+
if (document.activeElement !== hostEl) {
|
|
110
|
+
hostEl.focus({ preventScroll: true })
|
|
111
|
+
}
|
|
112
|
+
|
|
96
113
|
const scrollContainer = el.closest('shade-tree') as HTMLElement
|
|
97
114
|
if (scrollContainer) {
|
|
98
|
-
const hostEl = el.closest('shade-tree-item') as HTMLElement
|
|
99
|
-
if (!hostEl) return
|
|
100
115
|
const containerRect = scrollContainer.getBoundingClientRect()
|
|
101
116
|
const itemRect = hostEl.getBoundingClientRect()
|
|
102
117
|
const itemTopInContainer = itemRect.top - containerRect.top
|
|
@@ -105,12 +120,12 @@ export const TreeItem: <T>(props: TreeItemProps<T>, children: ChildrenList) => J
|
|
|
105
120
|
if (itemTopInContainer < 0) {
|
|
106
121
|
scrollContainer.scrollTo({
|
|
107
122
|
top: scrollContainer.scrollTop + itemTopInContainer,
|
|
108
|
-
behavior: '
|
|
123
|
+
behavior: 'instant',
|
|
109
124
|
})
|
|
110
125
|
} else if (itemBottomInContainer > scrollContainer.clientHeight) {
|
|
111
126
|
scrollContainer.scrollTo({
|
|
112
127
|
top: scrollContainer.scrollTop + (itemBottomInContainer - scrollContainer.clientHeight),
|
|
113
|
-
behavior: '
|
|
128
|
+
behavior: 'instant',
|
|
114
129
|
})
|
|
115
130
|
}
|
|
116
131
|
}
|