@furystack/shades-common-components 11.0.0 → 12.0.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/CHANGELOG.md +443 -0
- package/esm/components/accordion/accordion-item.d.ts +31 -0
- package/esm/components/accordion/accordion-item.d.ts.map +1 -0
- package/esm/components/accordion/accordion-item.js +147 -0
- package/esm/components/accordion/accordion-item.js.map +1 -0
- package/esm/components/accordion/accordion.d.ts +27 -0
- package/esm/components/accordion/accordion.d.ts.map +1 -0
- package/esm/components/accordion/accordion.js +39 -0
- package/esm/components/accordion/accordion.js.map +1 -0
- package/esm/components/accordion/accordion.spec.d.ts +2 -0
- package/esm/components/accordion/accordion.spec.d.ts.map +1 -0
- package/esm/components/accordion/accordion.spec.js +284 -0
- package/esm/components/accordion/accordion.spec.js.map +1 -0
- package/esm/components/accordion/index.d.ts +3 -0
- package/esm/components/accordion/index.d.ts.map +1 -0
- package/esm/components/accordion/index.js +3 -0
- package/esm/components/accordion/index.js.map +1 -0
- package/esm/components/alert.d.ts +21 -0
- package/esm/components/alert.d.ts.map +1 -0
- package/esm/components/alert.js +131 -0
- package/esm/components/alert.js.map +1 -0
- package/esm/components/alert.spec.d.ts +2 -0
- package/esm/components/alert.spec.d.ts.map +1 -0
- package/esm/components/alert.spec.js +177 -0
- package/esm/components/alert.spec.js.map +1 -0
- package/esm/components/app-bar-link.d.ts +22 -2
- package/esm/components/app-bar-link.d.ts.map +1 -1
- package/esm/components/app-bar-link.js +20 -7
- package/esm/components/app-bar-link.js.map +1 -1
- package/esm/components/app-bar-link.spec.js +22 -19
- package/esm/components/app-bar-link.spec.js.map +1 -1
- package/esm/components/app-bar.d.ts +2 -0
- package/esm/components/app-bar.d.ts.map +1 -1
- package/esm/components/app-bar.js +16 -11
- package/esm/components/app-bar.js.map +1 -1
- package/esm/components/app-bar.spec.js +67 -52
- package/esm/components/app-bar.spec.js.map +1 -1
- package/esm/components/avatar.d.ts +2 -0
- package/esm/components/avatar.d.ts.map +1 -1
- package/esm/components/avatar.js +40 -37
- package/esm/components/avatar.js.map +1 -1
- package/esm/components/badge.d.ts +35 -0
- package/esm/components/badge.d.ts.map +1 -0
- package/esm/components/badge.js +68 -0
- package/esm/components/badge.js.map +1 -0
- package/esm/components/badge.spec.d.ts +2 -0
- package/esm/components/badge.spec.d.ts.map +1 -0
- package/esm/components/badge.spec.js +157 -0
- package/esm/components/badge.spec.js.map +1 -0
- package/esm/components/breadcrumb.d.ts +103 -0
- package/esm/components/breadcrumb.d.ts.map +1 -0
- package/esm/components/breadcrumb.js +121 -0
- package/esm/components/breadcrumb.js.map +1 -0
- package/esm/components/breadcrumb.spec.d.ts +2 -0
- package/esm/components/breadcrumb.spec.d.ts.map +1 -0
- package/esm/components/breadcrumb.spec.js +251 -0
- package/esm/components/breadcrumb.spec.js.map +1 -0
- package/esm/components/button-group.d.ts +85 -0
- package/esm/components/button-group.d.ts.map +1 -0
- package/esm/components/button-group.js +290 -0
- package/esm/components/button-group.js.map +1 -0
- package/esm/components/button-group.spec.d.ts +2 -0
- package/esm/components/button-group.spec.d.ts.map +1 -0
- package/esm/components/button-group.spec.js +502 -0
- package/esm/components/button-group.spec.js.map +1 -0
- package/esm/components/button.d.ts +44 -2
- package/esm/components/button.d.ts.map +1 -1
- package/esm/components/button.js +82 -73
- package/esm/components/button.js.map +1 -1
- package/esm/components/button.spec.js +205 -50
- package/esm/components/button.spec.js.map +1 -1
- package/esm/components/card.d.ts +117 -0
- package/esm/components/card.d.ts.map +1 -0
- package/esm/components/card.js +181 -0
- package/esm/components/card.js.map +1 -0
- package/esm/components/card.spec.d.ts +2 -0
- package/esm/components/card.spec.d.ts.map +1 -0
- package/esm/components/card.spec.js +278 -0
- package/esm/components/card.spec.js.map +1 -0
- package/esm/components/carousel.d.ts +50 -0
- package/esm/components/carousel.d.ts.map +1 -0
- package/esm/components/carousel.js +263 -0
- package/esm/components/carousel.js.map +1 -0
- package/esm/components/carousel.spec.d.ts +2 -0
- package/esm/components/carousel.spec.d.ts.map +1 -0
- package/esm/components/carousel.spec.js +677 -0
- package/esm/components/carousel.spec.js.map +1 -0
- package/esm/components/chip.d.ts +23 -0
- package/esm/components/chip.d.ts.map +1 -0
- package/esm/components/chip.js +139 -0
- package/esm/components/chip.js.map +1 -0
- package/esm/components/chip.spec.d.ts +2 -0
- package/esm/components/chip.spec.d.ts.map +1 -0
- package/esm/components/chip.spec.js +142 -0
- package/esm/components/chip.spec.js.map +1 -0
- package/esm/components/circular-progress.d.ts +37 -0
- package/esm/components/circular-progress.d.ts.map +1 -0
- package/esm/components/circular-progress.js +84 -0
- package/esm/components/circular-progress.js.map +1 -0
- package/esm/components/circular-progress.spec.d.ts +2 -0
- package/esm/components/circular-progress.spec.d.ts.map +1 -0
- package/esm/components/circular-progress.spec.js +228 -0
- package/esm/components/circular-progress.spec.js.map +1 -0
- package/esm/components/command-palette/command-palette-input.d.ts +3 -0
- package/esm/components/command-palette/command-palette-input.d.ts.map +1 -1
- package/esm/components/command-palette/command-palette-input.js +17 -9
- package/esm/components/command-palette/command-palette-input.js.map +1 -1
- package/esm/components/command-palette/command-palette-input.spec.js +172 -161
- package/esm/components/command-palette/command-palette-input.spec.js.map +1 -1
- package/esm/components/command-palette/command-palette-manager.spec.js +130 -114
- package/esm/components/command-palette/command-palette-manager.spec.js.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.d.ts +2 -0
- package/esm/components/command-palette/command-palette-suggestion-list.d.ts.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.js +20 -20
- package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js +296 -278
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -1
- package/esm/components/command-palette/index.d.ts +2 -0
- package/esm/components/command-palette/index.d.ts.map +1 -1
- package/esm/components/command-palette/index.js +25 -94
- package/esm/components/command-palette/index.js.map +1 -1
- package/esm/components/command-palette/index.spec.js +12 -12
- package/esm/components/command-palette/index.spec.js.map +1 -1
- package/esm/components/context-menu/context-menu-item.d.ts +9 -0
- package/esm/components/context-menu/context-menu-item.d.ts.map +1 -0
- package/esm/components/context-menu/context-menu-item.js +56 -0
- package/esm/components/context-menu/context-menu-item.js.map +1 -0
- package/esm/components/context-menu/context-menu-manager.d.ts +52 -0
- package/esm/components/context-menu/context-menu-manager.d.ts.map +1 -0
- package/esm/components/context-menu/context-menu-manager.js +128 -0
- package/esm/components/context-menu/context-menu-manager.js.map +1 -0
- package/esm/components/context-menu/context-menu-manager.spec.d.ts +2 -0
- package/esm/components/context-menu/context-menu-manager.spec.d.ts.map +1 -0
- package/esm/components/context-menu/context-menu-manager.spec.js +326 -0
- package/esm/components/context-menu/context-menu-manager.spec.js.map +1 -0
- package/esm/components/context-menu/context-menu.d.ts +8 -0
- package/esm/components/context-menu/context-menu.d.ts.map +1 -0
- package/esm/components/context-menu/context-menu.js +79 -0
- package/esm/components/context-menu/context-menu.js.map +1 -0
- package/esm/components/context-menu/context-menu.spec.d.ts +2 -0
- package/esm/components/context-menu/context-menu.spec.d.ts.map +1 -0
- package/esm/components/context-menu/context-menu.spec.js +282 -0
- package/esm/components/context-menu/context-menu.spec.js.map +1 -0
- package/esm/components/context-menu/index.d.ts +4 -0
- package/esm/components/context-menu/index.d.ts.map +1 -0
- package/esm/components/context-menu/index.js +4 -0
- package/esm/components/context-menu/index.js.map +1 -0
- package/esm/components/data-grid/body.spec.js +194 -184
- package/esm/components/data-grid/body.spec.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 +66 -54
- package/esm/components/data-grid/data-grid-row.js.map +1 -1
- package/esm/components/data-grid/data-grid-row.spec.js +127 -95
- package/esm/components/data-grid/data-grid-row.spec.js.map +1 -1
- package/esm/components/data-grid/data-grid.d.ts.map +1 -1
- package/esm/components/data-grid/data-grid.js +17 -16
- package/esm/components/data-grid/data-grid.js.map +1 -1
- package/esm/components/data-grid/data-grid.spec.js +364 -430
- package/esm/components/data-grid/data-grid.spec.js.map +1 -1
- package/esm/components/data-grid/footer.spec.js +215 -203
- package/esm/components/data-grid/footer.spec.js.map +1 -1
- package/esm/components/data-grid/header.d.ts +3 -1
- package/esm/components/data-grid/header.d.ts.map +1 -1
- package/esm/components/data-grid/header.js +42 -30
- package/esm/components/data-grid/header.js.map +1 -1
- package/esm/components/data-grid/header.spec.js +330 -307
- package/esm/components/data-grid/header.spec.js.map +1 -1
- package/esm/components/data-grid/selection-cell.d.ts +2 -0
- package/esm/components/data-grid/selection-cell.d.ts.map +1 -1
- package/esm/components/data-grid/selection-cell.js +2 -7
- package/esm/components/data-grid/selection-cell.js.map +1 -1
- package/esm/components/data-grid/selection-cell.spec.js +45 -36
- package/esm/components/data-grid/selection-cell.spec.js.map +1 -1
- package/esm/components/dialog.d.ts +46 -0
- package/esm/components/dialog.d.ts.map +1 -0
- package/esm/components/dialog.js +178 -0
- package/esm/components/dialog.js.map +1 -0
- package/esm/components/dialog.spec.d.ts +2 -0
- package/esm/components/dialog.spec.d.ts.map +1 -0
- package/esm/components/dialog.spec.js +113 -0
- package/esm/components/dialog.spec.js.map +1 -0
- package/esm/components/divider.d.ts +22 -0
- package/esm/components/divider.d.ts.map +1 -0
- package/esm/components/divider.js +113 -0
- package/esm/components/divider.js.map +1 -0
- package/esm/components/divider.spec.d.ts +2 -0
- package/esm/components/divider.spec.d.ts.map +1 -0
- package/esm/components/divider.spec.js +136 -0
- package/esm/components/divider.spec.js.map +1 -0
- package/esm/components/drawer/drawer-toggle-button.d.ts +36 -0
- package/esm/components/drawer/drawer-toggle-button.d.ts.map +1 -0
- package/esm/components/drawer/drawer-toggle-button.js +94 -0
- package/esm/components/drawer/drawer-toggle-button.js.map +1 -0
- package/esm/components/drawer/drawer-toggle-button.spec.d.ts +2 -0
- package/esm/components/drawer/drawer-toggle-button.spec.d.ts.map +1 -0
- package/esm/components/drawer/drawer-toggle-button.spec.js +306 -0
- package/esm/components/drawer/drawer-toggle-button.spec.js.map +1 -0
- package/esm/components/drawer/index.d.ts +56 -0
- package/esm/components/drawer/index.d.ts.map +1 -0
- package/esm/components/drawer/index.js +172 -0
- package/esm/components/drawer/index.js.map +1 -0
- package/esm/components/drawer/index.spec.d.ts +2 -0
- package/esm/components/drawer/index.spec.d.ts.map +1 -0
- package/esm/components/drawer/index.spec.js +538 -0
- package/esm/components/drawer/index.spec.js.map +1 -0
- package/esm/components/dropdown.d.ts +15 -0
- package/esm/components/dropdown.d.ts.map +1 -0
- package/esm/components/dropdown.js +262 -0
- package/esm/components/dropdown.js.map +1 -0
- package/esm/components/dropdown.spec.d.ts +2 -0
- package/esm/components/dropdown.spec.d.ts.map +1 -0
- package/esm/components/dropdown.spec.js +372 -0
- package/esm/components/dropdown.spec.js.map +1 -0
- package/esm/components/fab.d.ts +10 -1
- package/esm/components/fab.d.ts.map +1 -1
- package/esm/components/fab.js +24 -8
- package/esm/components/fab.js.map +1 -1
- package/esm/components/fab.spec.js +50 -39
- package/esm/components/fab.spec.js.map +1 -1
- package/esm/components/form.d.ts.map +1 -1
- package/esm/components/form.js +9 -7
- package/esm/components/form.js.map +1 -1
- package/esm/components/form.spec.js +209 -199
- package/esm/components/form.spec.js.map +1 -1
- package/esm/components/grid.js +10 -10
- package/esm/components/grid.js.map +1 -1
- package/esm/components/grid.spec.js +109 -85
- package/esm/components/grid.spec.js.map +1 -1
- package/esm/components/icons/icon-definitions.d.ts +140 -0
- package/esm/components/icons/icon-definitions.d.ts.map +1 -0
- package/esm/components/icons/icon-definitions.js +432 -0
- package/esm/components/icons/icon-definitions.js.map +1 -0
- package/esm/components/icons/icon-definitions.spec.d.ts +2 -0
- package/esm/components/icons/icon-definitions.spec.d.ts.map +1 -0
- package/esm/components/icons/icon-definitions.spec.js +59 -0
- package/esm/components/icons/icon-definitions.spec.js.map +1 -0
- package/esm/components/icons/icon-types.d.ts +48 -0
- package/esm/components/icons/icon-types.d.ts.map +1 -0
- package/esm/components/icons/icon-types.js +2 -0
- package/esm/components/icons/icon-types.js.map +1 -0
- package/esm/components/icons/icon.d.ts +56 -0
- package/esm/components/icons/icon.d.ts.map +1 -0
- package/esm/components/icons/icon.js +61 -0
- package/esm/components/icons/icon.js.map +1 -0
- package/esm/components/icons/icon.spec.d.ts +2 -0
- package/esm/components/icons/icon.spec.d.ts.map +1 -0
- package/esm/components/icons/icon.spec.js +224 -0
- package/esm/components/icons/icon.spec.js.map +1 -0
- package/esm/components/icons/index.d.ts +5 -0
- package/esm/components/icons/index.d.ts.map +1 -0
- package/esm/components/icons/index.js +3 -0
- package/esm/components/icons/index.js.map +1 -0
- package/esm/components/image.d.ts +62 -0
- package/esm/components/image.d.ts.map +1 -0
- package/esm/components/image.js +348 -0
- package/esm/components/image.js.map +1 -0
- package/esm/components/image.spec.d.ts +2 -0
- package/esm/components/image.spec.d.ts.map +1 -0
- package/esm/components/image.spec.js +542 -0
- package/esm/components/image.spec.js.map +1 -0
- package/esm/components/index.d.ts +32 -4
- package/esm/components/index.d.ts.map +1 -1
- package/esm/components/index.js +32 -4
- package/esm/components/index.js.map +1 -1
- package/esm/components/inputs/autocomplete.d.ts +2 -0
- package/esm/components/inputs/autocomplete.d.ts.map +1 -1
- package/esm/components/inputs/autocomplete.js +10 -6
- package/esm/components/inputs/autocomplete.js.map +1 -1
- package/esm/components/inputs/autocomplete.spec.js +10 -1
- package/esm/components/inputs/autocomplete.spec.js.map +1 -1
- package/esm/components/inputs/checkbox.d.ts +50 -0
- package/esm/components/inputs/checkbox.d.ts.map +1 -0
- package/esm/components/inputs/checkbox.js +126 -0
- package/esm/components/inputs/checkbox.js.map +1 -0
- package/esm/components/inputs/checkbox.spec.d.ts +2 -0
- package/esm/components/inputs/checkbox.spec.d.ts.map +1 -0
- package/esm/components/inputs/checkbox.spec.js +287 -0
- package/esm/components/inputs/checkbox.spec.js.map +1 -0
- package/esm/components/inputs/index.d.ts +7 -0
- package/esm/components/inputs/index.d.ts.map +1 -1
- package/esm/components/inputs/index.js +7 -0
- package/esm/components/inputs/index.js.map +1 -1
- package/esm/components/inputs/input-number.d.ts +79 -0
- package/esm/components/inputs/input-number.d.ts.map +1 -0
- package/esm/components/inputs/input-number.js +232 -0
- package/esm/components/inputs/input-number.js.map +1 -0
- package/esm/components/inputs/input-number.spec.d.ts +2 -0
- package/esm/components/inputs/input-number.spec.d.ts.map +1 -0
- package/esm/components/inputs/input-number.spec.js +516 -0
- package/esm/components/inputs/input-number.spec.js.map +1 -0
- package/esm/components/inputs/input.d.ts +2 -1
- package/esm/components/inputs/input.d.ts.map +1 -1
- package/esm/components/inputs/input.js +86 -116
- package/esm/components/inputs/input.js.map +1 -1
- package/esm/components/inputs/input.spec.js +461 -427
- package/esm/components/inputs/input.spec.js.map +1 -1
- package/esm/components/inputs/radio-group.d.ts +38 -0
- package/esm/components/inputs/radio-group.d.ts.map +1 -0
- package/esm/components/inputs/radio-group.js +58 -0
- package/esm/components/inputs/radio-group.js.map +1 -0
- package/esm/components/inputs/radio-group.spec.d.ts +2 -0
- package/esm/components/inputs/radio-group.spec.d.ts.map +1 -0
- package/esm/components/inputs/radio-group.spec.js +201 -0
- package/esm/components/inputs/radio-group.spec.js.map +1 -0
- package/esm/components/inputs/radio.d.ts +42 -0
- package/esm/components/inputs/radio.d.ts.map +1 -0
- package/esm/components/inputs/radio.js +134 -0
- package/esm/components/inputs/radio.js.map +1 -0
- package/esm/components/inputs/radio.spec.d.ts +2 -0
- package/esm/components/inputs/radio.spec.d.ts.map +1 -0
- package/esm/components/inputs/radio.spec.js +211 -0
- package/esm/components/inputs/radio.spec.js.map +1 -0
- package/esm/components/inputs/select.d.ts +67 -0
- package/esm/components/inputs/select.d.ts.map +1 -0
- package/esm/components/inputs/select.js +581 -0
- package/esm/components/inputs/select.js.map +1 -0
- package/esm/components/inputs/select.spec.d.ts +2 -0
- package/esm/components/inputs/select.spec.d.ts.map +1 -0
- package/esm/components/inputs/select.spec.js +1009 -0
- package/esm/components/inputs/select.spec.js.map +1 -0
- package/esm/components/inputs/slider.d.ts +66 -0
- package/esm/components/inputs/slider.d.ts.map +1 -0
- package/esm/components/inputs/slider.js +526 -0
- package/esm/components/inputs/slider.js.map +1 -0
- package/esm/components/inputs/slider.spec.d.ts +2 -0
- package/esm/components/inputs/slider.spec.d.ts.map +1 -0
- package/esm/components/inputs/slider.spec.js +812 -0
- package/esm/components/inputs/slider.spec.js.map +1 -0
- package/esm/components/inputs/switch.d.ts +50 -0
- package/esm/components/inputs/switch.d.ts.map +1 -0
- package/esm/components/inputs/switch.js +138 -0
- package/esm/components/inputs/switch.js.map +1 -0
- package/esm/components/inputs/switch.spec.d.ts +2 -0
- package/esm/components/inputs/switch.spec.d.ts.map +1 -0
- package/esm/components/inputs/switch.spec.js +313 -0
- package/esm/components/inputs/switch.spec.js.map +1 -0
- package/esm/components/inputs/text-area.d.ts +2 -0
- package/esm/components/inputs/text-area.d.ts.map +1 -1
- package/esm/components/inputs/text-area.js +13 -21
- package/esm/components/inputs/text-area.js.map +1 -1
- package/esm/components/inputs/text-area.spec.js +171 -156
- package/esm/components/inputs/text-area.spec.js.map +1 -1
- package/esm/components/linear-progress.d.ts +32 -0
- package/esm/components/linear-progress.d.ts.map +1 -0
- package/esm/components/linear-progress.js +79 -0
- package/esm/components/linear-progress.js.map +1 -0
- package/esm/components/linear-progress.spec.d.ts +2 -0
- package/esm/components/linear-progress.spec.d.ts.map +1 -0
- package/esm/components/linear-progress.spec.js +251 -0
- package/esm/components/linear-progress.spec.js.map +1 -0
- package/esm/components/list/index.d.ts +3 -0
- package/esm/components/list/index.d.ts.map +1 -0
- package/esm/components/list/index.js +3 -0
- package/esm/components/list/index.js.map +1 -0
- package/esm/components/list/list-item.d.ts +13 -0
- package/esm/components/list/list-item.d.ts.map +1 -0
- package/esm/components/list/list-item.js +81 -0
- package/esm/components/list/list-item.js.map +1 -0
- package/esm/components/list/list.d.ts +18 -0
- package/esm/components/list/list.d.ts.map +1 -0
- package/esm/components/list/list.js +42 -0
- package/esm/components/list/list.js.map +1 -0
- package/esm/components/list/list.spec.d.ts +2 -0
- package/esm/components/list/list.spec.d.ts.map +1 -0
- package/esm/components/list/list.spec.js +540 -0
- package/esm/components/list/list.spec.js.map +1 -0
- package/esm/components/loader.d.ts +2 -0
- package/esm/components/loader.d.ts.map +1 -1
- package/esm/components/loader.js +18 -10
- package/esm/components/loader.js.map +1 -1
- package/esm/components/loader.spec.js +191 -175
- package/esm/components/loader.spec.js.map +1 -1
- package/esm/components/menu/index.d.ts +3 -0
- package/esm/components/menu/index.d.ts.map +1 -0
- package/esm/components/menu/index.js +3 -0
- package/esm/components/menu/index.js.map +1 -0
- package/esm/components/menu/menu-types.d.ts +27 -0
- package/esm/components/menu/menu-types.d.ts.map +1 -0
- package/esm/components/menu/menu-types.js +22 -0
- package/esm/components/menu/menu-types.js.map +1 -0
- package/esm/components/menu/menu-types.spec.d.ts +2 -0
- package/esm/components/menu/menu-types.spec.d.ts.map +1 -0
- package/esm/components/menu/menu-types.spec.js +103 -0
- package/esm/components/menu/menu-types.spec.js.map +1 -0
- package/esm/components/menu/menu.d.ts +17 -0
- package/esm/components/menu/menu.d.ts.map +1 -0
- package/esm/components/menu/menu.js +240 -0
- package/esm/components/menu/menu.js.map +1 -0
- package/esm/components/menu/menu.spec.d.ts +2 -0
- package/esm/components/menu/menu.spec.d.ts.map +1 -0
- package/esm/components/menu/menu.spec.js +427 -0
- package/esm/components/menu/menu.spec.js.map +1 -0
- package/esm/components/modal.d.ts +3 -2
- package/esm/components/modal.d.ts.map +1 -1
- package/esm/components/modal.js +8 -5
- package/esm/components/modal.js.map +1 -1
- package/esm/components/modal.spec.js +50 -43
- package/esm/components/modal.spec.js.map +1 -1
- package/esm/components/noty-list.d.ts +4 -0
- package/esm/components/noty-list.d.ts.map +1 -1
- package/esm/components/noty-list.js +65 -53
- package/esm/components/noty-list.js.map +1 -1
- package/esm/components/noty-list.spec.js +71 -68
- package/esm/components/noty-list.spec.js.map +1 -1
- package/esm/components/page-container/index.d.ts +54 -0
- package/esm/components/page-container/index.d.ts.map +1 -0
- package/esm/components/page-container/index.js +63 -0
- package/esm/components/page-container/index.js.map +1 -0
- package/esm/components/page-container/index.spec.d.ts +2 -0
- package/esm/components/page-container/index.spec.d.ts.map +1 -0
- package/esm/components/page-container/index.spec.js +217 -0
- package/esm/components/page-container/index.spec.js.map +1 -0
- package/esm/components/page-container/page-header.d.ts +57 -0
- package/esm/components/page-container/page-header.d.ts.map +1 -0
- package/esm/components/page-container/page-header.js +93 -0
- package/esm/components/page-container/page-header.js.map +1 -0
- package/esm/components/page-container/page-header.spec.d.ts +2 -0
- package/esm/components/page-container/page-header.spec.d.ts.map +1 -0
- package/esm/components/page-container/page-header.spec.js +230 -0
- package/esm/components/page-container/page-header.spec.js.map +1 -0
- package/esm/components/page-layout/index.d.ts +83 -0
- package/esm/components/page-layout/index.d.ts.map +1 -0
- package/esm/components/page-layout/index.js +288 -0
- package/esm/components/page-layout/index.js.map +1 -0
- package/esm/components/page-layout/index.spec.d.ts +2 -0
- package/esm/components/page-layout/index.spec.d.ts.map +1 -0
- package/esm/components/page-layout/index.spec.js +637 -0
- package/esm/components/page-layout/index.spec.js.map +1 -0
- package/esm/components/pagination.d.ts +43 -0
- package/esm/components/pagination.d.ts.map +1 -0
- package/esm/components/pagination.js +165 -0
- package/esm/components/pagination.js.map +1 -0
- package/esm/components/pagination.spec.d.ts +2 -0
- package/esm/components/pagination.spec.d.ts.map +1 -0
- package/esm/components/pagination.spec.js +195 -0
- package/esm/components/pagination.spec.js.map +1 -0
- package/esm/components/paper.d.ts +3 -1
- package/esm/components/paper.d.ts.map +1 -1
- package/esm/components/paper.js +11 -9
- package/esm/components/paper.js.map +1 -1
- package/esm/components/paper.spec.js +26 -18
- package/esm/components/paper.spec.js.map +1 -1
- package/esm/components/rating.d.ts +62 -0
- package/esm/components/rating.d.ts.map +1 -0
- package/esm/components/rating.js +201 -0
- package/esm/components/rating.js.map +1 -0
- package/esm/components/rating.spec.d.ts +2 -0
- package/esm/components/rating.spec.d.ts.map +1 -0
- package/esm/components/rating.spec.js +663 -0
- package/esm/components/rating.spec.js.map +1 -0
- package/esm/components/result.d.ts +37 -0
- package/esm/components/result.d.ts.map +1 -0
- package/esm/components/result.js +109 -0
- package/esm/components/result.js.map +1 -0
- package/esm/components/result.spec.d.ts +2 -0
- package/esm/components/result.spec.d.ts.map +1 -0
- package/esm/components/result.spec.js +159 -0
- package/esm/components/result.spec.js.map +1 -0
- package/esm/components/searchable-input-styles.d.ts +8 -0
- package/esm/components/searchable-input-styles.d.ts.map +1 -0
- package/esm/components/searchable-input-styles.js +71 -0
- package/esm/components/searchable-input-styles.js.map +1 -0
- package/esm/components/skeleton.d.ts +2 -0
- package/esm/components/skeleton.d.ts.map +1 -1
- package/esm/components/skeleton.js +19 -6
- package/esm/components/skeleton.js.map +1 -1
- package/esm/components/skeleton.spec.js +103 -95
- package/esm/components/skeleton.spec.js.map +1 -1
- package/esm/components/styles.d.ts.map +1 -1
- package/esm/components/styles.js +14 -13
- package/esm/components/styles.js.map +1 -1
- package/esm/components/styles.spec.js +27 -26
- package/esm/components/styles.spec.js.map +1 -1
- package/esm/components/suggest/index.d.ts.map +1 -1
- package/esm/components/suggest/index.js +24 -85
- package/esm/components/suggest/index.js.map +1 -1
- package/esm/components/suggest/index.spec.js +402 -378
- package/esm/components/suggest/index.spec.js.map +1 -1
- package/esm/components/suggest/suggest-input.d.ts +2 -0
- package/esm/components/suggest/suggest-input.d.ts.map +1 -1
- package/esm/components/suggest/suggest-input.js +10 -8
- package/esm/components/suggest/suggest-input.js.map +1 -1
- package/esm/components/suggest/suggest-input.spec.js +83 -71
- package/esm/components/suggest/suggest-input.spec.js.map +1 -1
- package/esm/components/suggest/suggest-manager.spec.js +102 -92
- package/esm/components/suggest/suggest-manager.spec.js.map +1 -1
- package/esm/components/suggest/suggestion-list.d.ts.map +1 -1
- package/esm/components/suggest/suggestion-list.js +21 -22
- package/esm/components/suggest/suggestion-list.js.map +1 -1
- package/esm/components/suggest/suggestion-list.spec.js +165 -146
- package/esm/components/suggest/suggestion-list.spec.js.map +1 -1
- package/esm/components/tabs.d.ts +18 -2
- package/esm/components/tabs.d.ts.map +1 -1
- package/esm/components/tabs.js +154 -14
- package/esm/components/tabs.js.map +1 -1
- package/esm/components/tabs.spec.js +295 -7
- package/esm/components/tabs.spec.js.map +1 -1
- package/esm/components/timeline.d.ts +53 -0
- package/esm/components/timeline.d.ts.map +1 -0
- package/esm/components/timeline.js +162 -0
- package/esm/components/timeline.js.map +1 -0
- package/esm/components/timeline.spec.d.ts +2 -0
- package/esm/components/timeline.spec.d.ts.map +1 -0
- package/esm/components/timeline.spec.js +209 -0
- package/esm/components/timeline.spec.js.map +1 -0
- package/esm/components/tooltip.d.ts +25 -0
- package/esm/components/tooltip.d.ts.map +1 -0
- package/esm/components/tooltip.js +113 -0
- package/esm/components/tooltip.js.map +1 -0
- package/esm/components/tooltip.spec.d.ts +2 -0
- package/esm/components/tooltip.spec.d.ts.map +1 -0
- package/esm/components/tooltip.spec.js +152 -0
- package/esm/components/tooltip.spec.js.map +1 -0
- package/esm/components/tree/index.d.ts +3 -0
- package/esm/components/tree/index.d.ts.map +1 -0
- package/esm/components/tree/index.js +3 -0
- package/esm/components/tree/index.js.map +1 -0
- package/esm/components/tree/tree-item.d.ts +14 -0
- package/esm/components/tree/tree-item.d.ts.map +1 -0
- package/esm/components/tree/tree-item.js +118 -0
- package/esm/components/tree/tree-item.js.map +1 -0
- package/esm/components/tree/tree.d.ts +20 -0
- package/esm/components/tree/tree.d.ts.map +1 -0
- package/esm/components/tree/tree.js +66 -0
- package/esm/components/tree/tree.js.map +1 -0
- package/esm/components/tree/tree.spec.d.ts +2 -0
- package/esm/components/tree/tree.spec.d.ts.map +1 -0
- package/esm/components/tree/tree.spec.js +427 -0
- package/esm/components/tree/tree.spec.js.map +1 -0
- package/esm/components/typography.d.ts +48 -0
- package/esm/components/typography.d.ts.map +1 -0
- package/esm/components/typography.js +223 -0
- package/esm/components/typography.js.map +1 -0
- package/esm/components/typography.spec.d.ts +2 -0
- package/esm/components/typography.spec.d.ts.map +1 -0
- package/esm/components/typography.spec.js +199 -0
- package/esm/components/typography.spec.js.map +1 -0
- package/esm/components/wizard/index.d.ts +2 -0
- package/esm/components/wizard/index.d.ts.map +1 -1
- package/esm/components/wizard/index.spec.js +70 -56
- package/esm/components/wizard/index.spec.js.map +1 -1
- package/esm/services/click-away-service.d.ts +5 -2
- package/esm/services/click-away-service.d.ts.map +1 -1
- package/esm/services/click-away-service.js +7 -1
- package/esm/services/click-away-service.js.map +1 -1
- package/esm/services/click-away-service.spec.js +14 -12
- package/esm/services/click-away-service.spec.js.map +1 -1
- package/esm/services/css-variable-theme.d.ts +167 -1
- package/esm/services/css-variable-theme.d.ts.map +1 -1
- package/esm/services/css-variable-theme.js +102 -0
- package/esm/services/css-variable-theme.js.map +1 -1
- package/esm/services/css-variable-theme.spec.js +131 -1
- package/esm/services/css-variable-theme.spec.js.map +1 -1
- package/esm/services/default-dark-theme.d.ts +107 -2
- package/esm/services/default-dark-theme.d.ts.map +1 -1
- package/esm/services/default-dark-theme.js +87 -1
- package/esm/services/default-dark-theme.js.map +1 -1
- package/esm/services/default-light-theme.d.ts +107 -2
- package/esm/services/default-light-theme.d.ts.map +1 -1
- package/esm/services/default-light-theme.js +86 -0
- package/esm/services/default-light-theme.js.map +1 -1
- package/esm/services/index.d.ts +6 -2
- package/esm/services/index.d.ts.map +1 -1
- package/esm/services/index.js +6 -2
- package/esm/services/index.js.map +1 -1
- package/esm/services/layout-service.d.ts +217 -0
- package/esm/services/layout-service.d.ts.map +1 -0
- package/esm/services/layout-service.js +331 -0
- package/esm/services/layout-service.js.map +1 -0
- package/esm/services/layout-service.spec.d.ts +2 -0
- package/esm/services/layout-service.spec.d.ts.map +1 -0
- package/esm/services/layout-service.spec.js +425 -0
- package/esm/services/layout-service.spec.js.map +1 -0
- package/esm/services/list-service.d.ts +31 -0
- package/esm/services/list-service.d.ts.map +1 -0
- package/esm/services/list-service.js +149 -0
- package/esm/services/list-service.js.map +1 -0
- package/esm/services/list-service.spec.d.ts +2 -0
- package/esm/services/list-service.spec.d.ts.map +1 -0
- package/esm/services/list-service.spec.js +283 -0
- package/esm/services/list-service.spec.js.map +1 -0
- package/esm/services/palette-css-vars.d.ts +12 -0
- package/esm/services/palette-css-vars.d.ts.map +1 -0
- package/esm/services/palette-css-vars.js +44 -0
- package/esm/services/palette-css-vars.js.map +1 -0
- package/esm/services/theme-provider-service.d.ts +387 -2
- 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 +61 -0
- package/esm/services/tree-service.d.ts.map +1 -0
- package/esm/services/tree-service.js +149 -0
- package/esm/services/tree-service.js.map +1 -0
- package/esm/services/tree-service.spec.d.ts +2 -0
- package/esm/services/tree-service.spec.d.ts.map +1 -0
- package/esm/services/tree-service.spec.js +338 -0
- package/esm/services/tree-service.spec.js.map +1 -0
- package/esm/utils/promisify-animation.d.ts.map +1 -1
- package/esm/utils/promisify-animation.js +6 -1
- package/esm/utils/promisify-animation.js.map +1 -1
- package/package.json +7 -8
- package/src/components/accordion/accordion-item.tsx +197 -0
- package/src/components/accordion/accordion.spec.tsx +418 -0
- package/src/components/accordion/accordion.tsx +50 -0
- package/src/components/accordion/index.ts +2 -0
- package/src/components/alert.spec.tsx +256 -0
- package/src/components/alert.tsx +186 -0
- package/src/components/app-bar-link.spec.tsx +22 -19
- package/src/components/app-bar-link.tsx +29 -10
- package/src/components/app-bar.spec.tsx +73 -58
- package/src/components/app-bar.tsx +19 -12
- package/src/components/avatar.tsx +46 -47
- package/src/components/badge.spec.tsx +228 -0
- package/src/components/badge.tsx +104 -0
- package/src/components/breadcrumb.spec.tsx +396 -0
- package/src/components/breadcrumb.tsx +188 -0
- package/src/components/button-group.spec.tsx +611 -0
- package/src/components/button-group.tsx +423 -0
- package/src/components/button.spec.tsx +257 -67
- package/src/components/button.tsx +130 -80
- package/src/components/card.spec.tsx +389 -0
- package/src/components/card.tsx +261 -0
- package/src/components/carousel.spec.tsx +894 -0
- package/src/components/carousel.tsx +376 -0
- package/src/components/chip.spec.tsx +200 -0
- package/src/components/chip.tsx +188 -0
- package/src/components/circular-progress.spec.tsx +289 -0
- package/src/components/circular-progress.tsx +145 -0
- package/src/components/command-palette/command-palette-input.spec.tsx +219 -219
- package/src/components/command-palette/command-palette-input.tsx +25 -9
- package/src/components/command-palette/command-palette-manager.spec.ts +132 -117
- package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +358 -358
- package/src/components/command-palette/command-palette-suggestion-list.tsx +22 -20
- package/src/components/command-palette/index.spec.tsx +12 -12
- package/src/components/command-palette/index.tsx +25 -102
- package/src/components/context-menu/context-menu-item.tsx +85 -0
- package/src/components/context-menu/context-menu-manager.spec.ts +433 -0
- package/src/components/context-menu/context-menu-manager.ts +148 -0
- package/src/components/context-menu/context-menu.spec.tsx +352 -0
- package/src/components/context-menu/context-menu.tsx +116 -0
- package/src/components/context-menu/index.ts +3 -0
- package/src/components/data-grid/body.spec.tsx +287 -283
- package/src/components/data-grid/data-grid-row.spec.tsx +165 -140
- package/src/components/data-grid/data-grid-row.tsx +72 -55
- package/src/components/data-grid/data-grid.spec.tsx +659 -729
- package/src/components/data-grid/data-grid.tsx +19 -15
- package/src/components/data-grid/footer.spec.tsx +249 -237
- package/src/components/data-grid/header.spec.tsx +374 -351
- package/src/components/data-grid/header.tsx +58 -39
- package/src/components/data-grid/selection-cell.spec.tsx +46 -45
- package/src/components/data-grid/selection-cell.tsx +2 -6
- package/src/components/dialog.spec.tsx +135 -0
- package/src/components/dialog.tsx +277 -0
- package/src/components/divider.spec.tsx +197 -0
- package/src/components/divider.tsx +147 -0
- package/src/components/drawer/drawer-toggle-button.spec.tsx +374 -0
- package/src/components/drawer/drawer-toggle-button.tsx +124 -0
- package/src/components/drawer/index.spec.tsx +748 -0
- package/src/components/drawer/index.tsx +227 -0
- package/src/components/dropdown.spec.tsx +445 -0
- package/src/components/dropdown.tsx +343 -0
- package/src/components/fab.spec.tsx +51 -40
- package/src/components/fab.tsx +32 -9
- package/src/components/form.spec.tsx +303 -293
- package/src/components/form.tsx +10 -7
- package/src/components/grid.spec.tsx +276 -183
- package/src/components/grid.tsx +10 -10
- package/src/components/icons/icon-definitions.spec.ts +68 -0
- package/src/components/icons/icon-definitions.ts +509 -0
- package/src/components/icons/icon-types.ts +48 -0
- package/src/components/icons/icon.spec.tsx +314 -0
- package/src/components/icons/icon.tsx +111 -0
- package/src/components/icons/index.ts +4 -0
- package/src/components/image.spec.tsx +748 -0
- package/src/components/image.tsx +520 -0
- package/src/components/index.ts +32 -4
- package/src/components/inputs/autocomplete.spec.tsx +10 -1
- package/src/components/inputs/autocomplete.tsx +13 -7
- package/src/components/inputs/checkbox.spec.tsx +377 -0
- package/src/components/inputs/checkbox.tsx +198 -0
- package/src/components/inputs/index.ts +7 -0
- package/src/components/inputs/input-number.spec.tsx +686 -0
- package/src/components/inputs/input-number.tsx +387 -0
- package/src/components/inputs/input.spec.tsx +544 -508
- package/src/components/inputs/input.tsx +91 -132
- package/src/components/inputs/radio-group.spec.tsx +281 -0
- package/src/components/inputs/radio-group.tsx +108 -0
- package/src/components/inputs/radio.spec.tsx +273 -0
- package/src/components/inputs/radio.tsx +199 -0
- package/src/components/inputs/select.spec.tsx +1237 -0
- package/src/components/inputs/select.tsx +775 -0
- package/src/components/inputs/slider.spec.tsx +1020 -0
- package/src/components/inputs/slider.tsx +696 -0
- package/src/components/inputs/switch.spec.tsx +410 -0
- package/src/components/inputs/switch.tsx +218 -0
- package/src/components/inputs/text-area.spec.tsx +186 -171
- package/src/components/inputs/text-area.tsx +13 -19
- package/src/components/linear-progress.spec.tsx +320 -0
- package/src/components/linear-progress.tsx +127 -0
- package/src/components/list/index.ts +2 -0
- package/src/components/list/list-item.tsx +106 -0
- package/src/components/list/list.spec.tsx +817 -0
- package/src/components/list/list.tsx +92 -0
- package/src/components/loader.spec.tsx +220 -204
- package/src/components/loader.tsx +17 -9
- package/src/components/menu/index.ts +2 -0
- package/src/components/menu/menu-types.spec.ts +122 -0
- package/src/components/menu/menu-types.ts +43 -0
- package/src/components/menu/menu.spec.tsx +483 -0
- package/src/components/menu/menu.tsx +326 -0
- package/src/components/modal.spec.tsx +65 -55
- package/src/components/modal.tsx +9 -6
- package/src/components/noty-list.spec.tsx +78 -75
- package/src/components/noty-list.tsx +76 -68
- package/src/components/page-container/index.spec.tsx +274 -0
- package/src/components/page-container/index.tsx +82 -0
- package/src/components/page-container/page-header.spec.tsx +308 -0
- package/src/components/page-container/page-header.tsx +127 -0
- package/src/components/page-layout/index.spec.tsx +882 -0
- package/src/components/page-layout/index.tsx +392 -0
- package/src/components/pagination.spec.tsx +275 -0
- package/src/components/pagination.tsx +249 -0
- package/src/components/paper.spec.tsx +26 -18
- package/src/components/paper.tsx +12 -10
- package/src/components/rating.spec.tsx +866 -0
- package/src/components/rating.tsx +286 -0
- package/src/components/result.spec.tsx +221 -0
- package/src/components/result.tsx +155 -0
- package/src/components/searchable-input-styles.ts +81 -0
- package/src/components/skeleton.spec.tsx +126 -118
- package/src/components/skeleton.tsx +23 -6
- package/src/components/styles.spec.ts +27 -28
- package/src/components/styles.tsx +15 -13
- package/src/components/suggest/index.spec.tsx +611 -587
- package/src/components/suggest/index.tsx +28 -95
- package/src/components/suggest/suggest-input.spec.tsx +95 -81
- package/src/components/suggest/suggest-input.tsx +9 -7
- package/src/components/suggest/suggest-manager.spec.ts +103 -93
- package/src/components/suggest/suggestion-list.spec.tsx +194 -173
- package/src/components/suggest/suggestion-list.tsx +23 -22
- package/src/components/tabs.spec.tsx +369 -7
- package/src/components/tabs.tsx +221 -18
- package/src/components/timeline.spec.tsx +294 -0
- package/src/components/timeline.tsx +221 -0
- package/src/components/tooltip.spec.tsx +223 -0
- package/src/components/tooltip.tsx +155 -0
- package/src/components/tree/index.ts +2 -0
- package/src/components/tree/tree-item.tsx +161 -0
- package/src/components/tree/tree.spec.tsx +677 -0
- package/src/components/tree/tree.tsx +111 -0
- package/src/components/typography.spec.tsx +235 -0
- package/src/components/typography.tsx +292 -0
- package/src/components/wizard/index.spec.tsx +77 -68
- package/src/services/click-away-service.spec.ts +14 -16
- package/src/services/click-away-service.ts +9 -3
- package/src/services/css-variable-theme.spec.ts +169 -1
- package/src/services/css-variable-theme.ts +107 -2
- package/src/services/default-dark-theme.ts +89 -3
- package/src/services/default-light-theme.ts +88 -2
- package/src/services/index.ts +6 -2
- package/src/services/layout-service.spec.ts +535 -0
- package/src/services/layout-service.ts +391 -0
- package/src/services/list-service.spec.ts +362 -0
- package/src/services/list-service.ts +169 -0
- package/src/services/palette-css-vars.ts +46 -0
- package/src/services/theme-provider-service.ts +246 -1
- package/src/services/tree-service.spec.ts +412 -0
- package/src/services/tree-service.ts +179 -0
- package/src/utils/promisify-animation.ts +7 -1
|
@@ -0,0 +1,894 @@
|
|
|
1
|
+
import { Injector } from '@furystack/inject'
|
|
2
|
+
import { createComponent, initializeShadeRoot } from '@furystack/shades'
|
|
3
|
+
import { sleepAsync, usingAsync } from '@furystack/utils'
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
5
|
+
import { Carousel } from './carousel.js'
|
|
6
|
+
|
|
7
|
+
describe('Carousel', () => {
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
document.body.innerHTML = '<div id="root"></div>'
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
afterEach(() => {
|
|
13
|
+
document.body.innerHTML = ''
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
const createSlides = (): JSX.Element[] => [
|
|
17
|
+
<div id="slide-1">Slide 1</div>,
|
|
18
|
+
<div id="slide-2">Slide 2</div>,
|
|
19
|
+
<div id="slide-3">Slide 3</div>,
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
it('should render all slides', async () => {
|
|
23
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
24
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
25
|
+
|
|
26
|
+
initializeShadeRoot({
|
|
27
|
+
injector,
|
|
28
|
+
rootElement,
|
|
29
|
+
jsxElement: <Carousel slides={createSlides()} />,
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
await sleepAsync(100)
|
|
33
|
+
|
|
34
|
+
expect(document.getElementById('slide-1')).toBeTruthy()
|
|
35
|
+
expect(document.getElementById('slide-2')).toBeTruthy()
|
|
36
|
+
expect(document.getElementById('slide-3')).toBeTruthy()
|
|
37
|
+
})
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
it('should render dot indicators by default', async () => {
|
|
41
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
42
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
43
|
+
|
|
44
|
+
initializeShadeRoot({
|
|
45
|
+
injector,
|
|
46
|
+
rootElement,
|
|
47
|
+
jsxElement: <Carousel slides={createSlides()} />,
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
await sleepAsync(100)
|
|
51
|
+
|
|
52
|
+
const dots = document.querySelectorAll('.carousel-dot')
|
|
53
|
+
expect(dots.length).toBe(3)
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
it('should hide dots when dots prop is false', async () => {
|
|
58
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
59
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
60
|
+
|
|
61
|
+
initializeShadeRoot({
|
|
62
|
+
injector,
|
|
63
|
+
rootElement,
|
|
64
|
+
jsxElement: <Carousel slides={createSlides()} dots={false} />,
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
await sleepAsync(100)
|
|
68
|
+
|
|
69
|
+
const dots = document.querySelectorAll('.carousel-dot')
|
|
70
|
+
expect(dots.length).toBe(0)
|
|
71
|
+
})
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
it('should render prev and next arrow buttons', async () => {
|
|
75
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
76
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
77
|
+
|
|
78
|
+
initializeShadeRoot({
|
|
79
|
+
injector,
|
|
80
|
+
rootElement,
|
|
81
|
+
jsxElement: <Carousel slides={createSlides()} />,
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
await sleepAsync(100)
|
|
85
|
+
|
|
86
|
+
const prevButton = document.querySelector('.carousel-arrow-prev')
|
|
87
|
+
const nextButton = document.querySelector('.carousel-arrow-next')
|
|
88
|
+
expect(prevButton).toBeTruthy()
|
|
89
|
+
expect(nextButton).toBeTruthy()
|
|
90
|
+
})
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
it('should not render arrows or dots for a single slide', async () => {
|
|
94
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
95
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
96
|
+
|
|
97
|
+
initializeShadeRoot({
|
|
98
|
+
injector,
|
|
99
|
+
rootElement,
|
|
100
|
+
jsxElement: <Carousel slides={[<div>Only slide</div>]} />,
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
await sleepAsync(100)
|
|
104
|
+
|
|
105
|
+
const arrows = document.querySelectorAll('.carousel-arrow')
|
|
106
|
+
const dots = document.querySelectorAll('.carousel-dot')
|
|
107
|
+
expect(arrows.length).toBe(0)
|
|
108
|
+
expect(dots.length).toBe(0)
|
|
109
|
+
})
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
it('should set the first dot as active by default', async () => {
|
|
113
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
114
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
115
|
+
|
|
116
|
+
initializeShadeRoot({
|
|
117
|
+
injector,
|
|
118
|
+
rootElement,
|
|
119
|
+
jsxElement: <Carousel slides={createSlides()} />,
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
await sleepAsync(100)
|
|
123
|
+
|
|
124
|
+
const activeDots = document.querySelectorAll('.carousel-dot[data-active]')
|
|
125
|
+
expect(activeDots.length).toBe(1)
|
|
126
|
+
|
|
127
|
+
const dots = document.querySelectorAll('.carousel-dot')
|
|
128
|
+
expect(dots[0].hasAttribute('data-active')).toBe(true)
|
|
129
|
+
})
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
it('should respect defaultActiveIndex', async () => {
|
|
133
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
134
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
135
|
+
|
|
136
|
+
initializeShadeRoot({
|
|
137
|
+
injector,
|
|
138
|
+
rootElement,
|
|
139
|
+
jsxElement: <Carousel slides={createSlides()} defaultActiveIndex={2} />,
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
await sleepAsync(100)
|
|
143
|
+
|
|
144
|
+
const dots = document.querySelectorAll('.carousel-dot')
|
|
145
|
+
expect(dots[2].hasAttribute('data-active')).toBe(true)
|
|
146
|
+
expect(dots[0].hasAttribute('data-active')).toBe(false)
|
|
147
|
+
})
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
it('should set the vertical data attribute', async () => {
|
|
151
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
152
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
153
|
+
|
|
154
|
+
initializeShadeRoot({
|
|
155
|
+
injector,
|
|
156
|
+
rootElement,
|
|
157
|
+
jsxElement: <Carousel slides={createSlides()} vertical />,
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
await sleepAsync(100)
|
|
161
|
+
|
|
162
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
163
|
+
expect(carousel.hasAttribute('data-vertical')).toBe(true)
|
|
164
|
+
})
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
it('should use slide effect by default', async () => {
|
|
168
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
169
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
170
|
+
|
|
171
|
+
initializeShadeRoot({
|
|
172
|
+
injector,
|
|
173
|
+
rootElement,
|
|
174
|
+
jsxElement: <Carousel slides={createSlides()} />,
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
await sleepAsync(100)
|
|
178
|
+
|
|
179
|
+
const track = document.querySelector('.carousel-track')
|
|
180
|
+
expect(track).toBeTruthy()
|
|
181
|
+
expect(document.querySelector('.carousel-fade-container')).toBeFalsy()
|
|
182
|
+
})
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
it('should use fade effect when specified', async () => {
|
|
186
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
187
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
188
|
+
|
|
189
|
+
initializeShadeRoot({
|
|
190
|
+
injector,
|
|
191
|
+
rootElement,
|
|
192
|
+
jsxElement: <Carousel slides={createSlides()} effect="fade" />,
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
await sleepAsync(100)
|
|
196
|
+
|
|
197
|
+
const fadeContainer = document.querySelector('.carousel-fade-container')
|
|
198
|
+
expect(fadeContainer).toBeTruthy()
|
|
199
|
+
expect(document.querySelector('.carousel-track')).toBeFalsy()
|
|
200
|
+
})
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
it('should mark the first fade slide as active by default', async () => {
|
|
204
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
205
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
206
|
+
|
|
207
|
+
initializeShadeRoot({
|
|
208
|
+
injector,
|
|
209
|
+
rootElement,
|
|
210
|
+
jsxElement: <Carousel slides={createSlides()} effect="fade" />,
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
await sleepAsync(100)
|
|
214
|
+
|
|
215
|
+
const fadeSlides = document.querySelectorAll('.carousel-fade-slide')
|
|
216
|
+
expect(fadeSlides[0].hasAttribute('data-active')).toBe(true)
|
|
217
|
+
expect(fadeSlides[1].hasAttribute('data-active')).toBe(false)
|
|
218
|
+
})
|
|
219
|
+
})
|
|
220
|
+
|
|
221
|
+
it('should have proper ARIA attributes on host element', async () => {
|
|
222
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
223
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
224
|
+
|
|
225
|
+
initializeShadeRoot({
|
|
226
|
+
injector,
|
|
227
|
+
rootElement,
|
|
228
|
+
jsxElement: <Carousel slides={createSlides()} />,
|
|
229
|
+
})
|
|
230
|
+
|
|
231
|
+
await sleepAsync(100)
|
|
232
|
+
|
|
233
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
234
|
+
expect(carousel.getAttribute('role')).toBe('region')
|
|
235
|
+
expect(carousel.getAttribute('aria-roledescription')).toBe('carousel')
|
|
236
|
+
expect(carousel.getAttribute('tabindex')).toBe('0')
|
|
237
|
+
})
|
|
238
|
+
})
|
|
239
|
+
|
|
240
|
+
it('should render slide groups with role attribute', async () => {
|
|
241
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
242
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
243
|
+
|
|
244
|
+
initializeShadeRoot({
|
|
245
|
+
injector,
|
|
246
|
+
rootElement,
|
|
247
|
+
jsxElement: <Carousel slides={createSlides()} />,
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
await sleepAsync(100)
|
|
251
|
+
|
|
252
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
253
|
+
const slideGroups = carousel.querySelectorAll('[role="group"]')
|
|
254
|
+
expect(slideGroups.length).toBe(3)
|
|
255
|
+
})
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
it('should call onChange when navigating via dots', async () => {
|
|
259
|
+
const handleChange = vi.fn()
|
|
260
|
+
|
|
261
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
262
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
263
|
+
|
|
264
|
+
initializeShadeRoot({
|
|
265
|
+
injector,
|
|
266
|
+
rootElement,
|
|
267
|
+
jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
|
|
268
|
+
})
|
|
269
|
+
|
|
270
|
+
await sleepAsync(100)
|
|
271
|
+
|
|
272
|
+
const dots = document.querySelectorAll('.carousel-dot')
|
|
273
|
+
;(dots[2] as HTMLButtonElement).click()
|
|
274
|
+
|
|
275
|
+
expect(handleChange).toHaveBeenCalledWith(2)
|
|
276
|
+
})
|
|
277
|
+
})
|
|
278
|
+
|
|
279
|
+
it('should call onChange when navigating via arrows', async () => {
|
|
280
|
+
const handleChange = vi.fn()
|
|
281
|
+
|
|
282
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
283
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
284
|
+
|
|
285
|
+
initializeShadeRoot({
|
|
286
|
+
injector,
|
|
287
|
+
rootElement,
|
|
288
|
+
jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
|
|
289
|
+
})
|
|
290
|
+
|
|
291
|
+
await sleepAsync(100)
|
|
292
|
+
|
|
293
|
+
const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
|
|
294
|
+
nextButton.click()
|
|
295
|
+
|
|
296
|
+
expect(handleChange).toHaveBeenCalledWith(1)
|
|
297
|
+
})
|
|
298
|
+
})
|
|
299
|
+
|
|
300
|
+
it('should wrap around when navigating past the last slide', async () => {
|
|
301
|
+
const handleChange = vi.fn()
|
|
302
|
+
|
|
303
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
304
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
305
|
+
|
|
306
|
+
initializeShadeRoot({
|
|
307
|
+
injector,
|
|
308
|
+
rootElement,
|
|
309
|
+
jsxElement: <Carousel slides={createSlides()} defaultActiveIndex={2} onChange={handleChange} />,
|
|
310
|
+
})
|
|
311
|
+
|
|
312
|
+
await sleepAsync(100)
|
|
313
|
+
|
|
314
|
+
const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
|
|
315
|
+
nextButton.click()
|
|
316
|
+
|
|
317
|
+
expect(handleChange).toHaveBeenCalledWith(0)
|
|
318
|
+
})
|
|
319
|
+
})
|
|
320
|
+
|
|
321
|
+
it('should wrap around when navigating before the first slide', async () => {
|
|
322
|
+
const handleChange = vi.fn()
|
|
323
|
+
|
|
324
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
325
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
326
|
+
|
|
327
|
+
initializeShadeRoot({
|
|
328
|
+
injector,
|
|
329
|
+
rootElement,
|
|
330
|
+
jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
|
|
331
|
+
})
|
|
332
|
+
|
|
333
|
+
await sleepAsync(100)
|
|
334
|
+
|
|
335
|
+
const prevButton = document.querySelector('.carousel-arrow-prev') as HTMLButtonElement
|
|
336
|
+
prevButton.click()
|
|
337
|
+
|
|
338
|
+
expect(handleChange).toHaveBeenCalledWith(2)
|
|
339
|
+
})
|
|
340
|
+
})
|
|
341
|
+
|
|
342
|
+
it('should render horizontal arrows with correct symbols', async () => {
|
|
343
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
344
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
345
|
+
|
|
346
|
+
initializeShadeRoot({
|
|
347
|
+
injector,
|
|
348
|
+
rootElement,
|
|
349
|
+
jsxElement: <Carousel slides={createSlides()} />,
|
|
350
|
+
})
|
|
351
|
+
|
|
352
|
+
await sleepAsync(100)
|
|
353
|
+
|
|
354
|
+
const prevButton = document.querySelector('.carousel-arrow-prev') as HTMLButtonElement
|
|
355
|
+
const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
|
|
356
|
+
expect(prevButton.querySelector('shade-icon')).not.toBeNull()
|
|
357
|
+
expect(nextButton.querySelector('shade-icon')).not.toBeNull()
|
|
358
|
+
})
|
|
359
|
+
})
|
|
360
|
+
|
|
361
|
+
it('should render vertical arrows with correct symbols', async () => {
|
|
362
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
363
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
364
|
+
|
|
365
|
+
initializeShadeRoot({
|
|
366
|
+
injector,
|
|
367
|
+
rootElement,
|
|
368
|
+
jsxElement: <Carousel slides={createSlides()} vertical />,
|
|
369
|
+
})
|
|
370
|
+
|
|
371
|
+
await sleepAsync(100)
|
|
372
|
+
|
|
373
|
+
const prevButton = document.querySelector('.carousel-arrow-prev') as HTMLButtonElement
|
|
374
|
+
const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
|
|
375
|
+
expect(prevButton.querySelector('shade-icon')).not.toBeNull()
|
|
376
|
+
expect(nextButton.querySelector('shade-icon')).not.toBeNull()
|
|
377
|
+
})
|
|
378
|
+
})
|
|
379
|
+
|
|
380
|
+
it('should clamp defaultActiveIndex to valid range', async () => {
|
|
381
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
382
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
383
|
+
|
|
384
|
+
initializeShadeRoot({
|
|
385
|
+
injector,
|
|
386
|
+
rootElement,
|
|
387
|
+
jsxElement: <Carousel slides={createSlides()} defaultActiveIndex={99} />,
|
|
388
|
+
})
|
|
389
|
+
|
|
390
|
+
await sleepAsync(100)
|
|
391
|
+
|
|
392
|
+
const dots = document.querySelectorAll('.carousel-dot')
|
|
393
|
+
// Should clamp to last slide (index 2)
|
|
394
|
+
expect(dots[2].hasAttribute('data-active')).toBe(true)
|
|
395
|
+
})
|
|
396
|
+
})
|
|
397
|
+
|
|
398
|
+
it('should apply custom style', async () => {
|
|
399
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
400
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
401
|
+
|
|
402
|
+
initializeShadeRoot({
|
|
403
|
+
injector,
|
|
404
|
+
rootElement,
|
|
405
|
+
jsxElement: <Carousel slides={createSlides()} style={{ height: '300px' }} />,
|
|
406
|
+
})
|
|
407
|
+
|
|
408
|
+
await sleepAsync(100)
|
|
409
|
+
|
|
410
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
411
|
+
expect(carousel.style.height).toBe('300px')
|
|
412
|
+
})
|
|
413
|
+
})
|
|
414
|
+
|
|
415
|
+
it('should handle empty slides array gracefully', async () => {
|
|
416
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
417
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
418
|
+
|
|
419
|
+
initializeShadeRoot({
|
|
420
|
+
injector,
|
|
421
|
+
rootElement,
|
|
422
|
+
jsxElement: <Carousel slides={[]} />,
|
|
423
|
+
})
|
|
424
|
+
|
|
425
|
+
await sleepAsync(100)
|
|
426
|
+
|
|
427
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
428
|
+
expect(carousel).toBeTruthy()
|
|
429
|
+
expect(document.querySelectorAll('.carousel-dot').length).toBe(0)
|
|
430
|
+
expect(document.querySelectorAll('.carousel-arrow').length).toBe(0)
|
|
431
|
+
})
|
|
432
|
+
})
|
|
433
|
+
|
|
434
|
+
describe('keyboard navigation', () => {
|
|
435
|
+
it('should navigate to next slide on ArrowRight', async () => {
|
|
436
|
+
const handleChange = vi.fn()
|
|
437
|
+
|
|
438
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
439
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
440
|
+
|
|
441
|
+
initializeShadeRoot({
|
|
442
|
+
injector,
|
|
443
|
+
rootElement,
|
|
444
|
+
jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
|
|
445
|
+
})
|
|
446
|
+
|
|
447
|
+
await sleepAsync(100)
|
|
448
|
+
|
|
449
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
450
|
+
carousel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }))
|
|
451
|
+
|
|
452
|
+
expect(handleChange).toHaveBeenCalledWith(1)
|
|
453
|
+
})
|
|
454
|
+
})
|
|
455
|
+
|
|
456
|
+
it('should navigate to previous slide on ArrowLeft', async () => {
|
|
457
|
+
const handleChange = vi.fn()
|
|
458
|
+
|
|
459
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
460
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
461
|
+
|
|
462
|
+
initializeShadeRoot({
|
|
463
|
+
injector,
|
|
464
|
+
rootElement,
|
|
465
|
+
jsxElement: <Carousel slides={createSlides()} defaultActiveIndex={2} onChange={handleChange} />,
|
|
466
|
+
})
|
|
467
|
+
|
|
468
|
+
await sleepAsync(100)
|
|
469
|
+
|
|
470
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
471
|
+
carousel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true }))
|
|
472
|
+
|
|
473
|
+
expect(handleChange).toHaveBeenCalledWith(1)
|
|
474
|
+
})
|
|
475
|
+
})
|
|
476
|
+
|
|
477
|
+
it('should navigate with ArrowDown in vertical mode', async () => {
|
|
478
|
+
const handleChange = vi.fn()
|
|
479
|
+
|
|
480
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
481
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
482
|
+
|
|
483
|
+
initializeShadeRoot({
|
|
484
|
+
injector,
|
|
485
|
+
rootElement,
|
|
486
|
+
jsxElement: <Carousel slides={createSlides()} vertical onChange={handleChange} />,
|
|
487
|
+
})
|
|
488
|
+
|
|
489
|
+
await sleepAsync(100)
|
|
490
|
+
|
|
491
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
492
|
+
carousel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }))
|
|
493
|
+
|
|
494
|
+
expect(handleChange).toHaveBeenCalledWith(1)
|
|
495
|
+
})
|
|
496
|
+
})
|
|
497
|
+
|
|
498
|
+
it('should navigate with ArrowUp in vertical mode', async () => {
|
|
499
|
+
const handleChange = vi.fn()
|
|
500
|
+
|
|
501
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
502
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
503
|
+
|
|
504
|
+
initializeShadeRoot({
|
|
505
|
+
injector,
|
|
506
|
+
rootElement,
|
|
507
|
+
jsxElement: <Carousel slides={createSlides()} vertical defaultActiveIndex={2} onChange={handleChange} />,
|
|
508
|
+
})
|
|
509
|
+
|
|
510
|
+
await sleepAsync(100)
|
|
511
|
+
|
|
512
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
513
|
+
carousel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true }))
|
|
514
|
+
|
|
515
|
+
expect(handleChange).toHaveBeenCalledWith(1)
|
|
516
|
+
})
|
|
517
|
+
})
|
|
518
|
+
|
|
519
|
+
it('should not react to ArrowDown/ArrowUp in horizontal mode', async () => {
|
|
520
|
+
const handleChange = vi.fn()
|
|
521
|
+
|
|
522
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
523
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
524
|
+
|
|
525
|
+
initializeShadeRoot({
|
|
526
|
+
injector,
|
|
527
|
+
rootElement,
|
|
528
|
+
jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
|
|
529
|
+
})
|
|
530
|
+
|
|
531
|
+
await sleepAsync(100)
|
|
532
|
+
|
|
533
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
534
|
+
carousel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }))
|
|
535
|
+
carousel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true }))
|
|
536
|
+
|
|
537
|
+
expect(handleChange).not.toHaveBeenCalled()
|
|
538
|
+
})
|
|
539
|
+
})
|
|
540
|
+
})
|
|
541
|
+
|
|
542
|
+
describe('touch / swipe support', () => {
|
|
543
|
+
const createTouchEvent = (type: string, x: number, y: number) => {
|
|
544
|
+
const touchObj = { clientX: x, clientY: y, identifier: 0, target: document.body }
|
|
545
|
+
if (type === 'touchstart') {
|
|
546
|
+
return new TouchEvent(type, { touches: [touchObj as unknown as Touch] })
|
|
547
|
+
}
|
|
548
|
+
return new TouchEvent(type, { changedTouches: [touchObj as unknown as Touch] })
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
it('should go to next slide on horizontal left swipe', async () => {
|
|
552
|
+
const handleChange = vi.fn()
|
|
553
|
+
|
|
554
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
555
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
556
|
+
|
|
557
|
+
initializeShadeRoot({
|
|
558
|
+
injector,
|
|
559
|
+
rootElement,
|
|
560
|
+
jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
|
|
561
|
+
})
|
|
562
|
+
|
|
563
|
+
await sleepAsync(100)
|
|
564
|
+
|
|
565
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
566
|
+
carousel.dispatchEvent(createTouchEvent('touchstart', 200, 100))
|
|
567
|
+
carousel.dispatchEvent(createTouchEvent('touchend', 100, 100))
|
|
568
|
+
|
|
569
|
+
expect(handleChange).toHaveBeenCalledWith(1)
|
|
570
|
+
})
|
|
571
|
+
})
|
|
572
|
+
|
|
573
|
+
it('should go to previous slide on horizontal right swipe', async () => {
|
|
574
|
+
const handleChange = vi.fn()
|
|
575
|
+
|
|
576
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
577
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
578
|
+
|
|
579
|
+
initializeShadeRoot({
|
|
580
|
+
injector,
|
|
581
|
+
rootElement,
|
|
582
|
+
jsxElement: <Carousel slides={createSlides()} defaultActiveIndex={2} onChange={handleChange} />,
|
|
583
|
+
})
|
|
584
|
+
|
|
585
|
+
await sleepAsync(100)
|
|
586
|
+
|
|
587
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
588
|
+
carousel.dispatchEvent(createTouchEvent('touchstart', 100, 100))
|
|
589
|
+
carousel.dispatchEvent(createTouchEvent('touchend', 200, 100))
|
|
590
|
+
|
|
591
|
+
expect(handleChange).toHaveBeenCalledWith(1)
|
|
592
|
+
})
|
|
593
|
+
})
|
|
594
|
+
|
|
595
|
+
it('should not navigate on small swipe distance', async () => {
|
|
596
|
+
const handleChange = vi.fn()
|
|
597
|
+
|
|
598
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
599
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
600
|
+
|
|
601
|
+
initializeShadeRoot({
|
|
602
|
+
injector,
|
|
603
|
+
rootElement,
|
|
604
|
+
jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
|
|
605
|
+
})
|
|
606
|
+
|
|
607
|
+
await sleepAsync(100)
|
|
608
|
+
|
|
609
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
610
|
+
carousel.dispatchEvent(createTouchEvent('touchstart', 100, 100))
|
|
611
|
+
carousel.dispatchEvent(createTouchEvent('touchend', 120, 100))
|
|
612
|
+
|
|
613
|
+
expect(handleChange).not.toHaveBeenCalled()
|
|
614
|
+
})
|
|
615
|
+
})
|
|
616
|
+
|
|
617
|
+
it('should handle vertical swipe in vertical mode', async () => {
|
|
618
|
+
const handleChange = vi.fn()
|
|
619
|
+
|
|
620
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
621
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
622
|
+
|
|
623
|
+
initializeShadeRoot({
|
|
624
|
+
injector,
|
|
625
|
+
rootElement,
|
|
626
|
+
jsxElement: <Carousel slides={createSlides()} vertical onChange={handleChange} />,
|
|
627
|
+
})
|
|
628
|
+
|
|
629
|
+
await sleepAsync(100)
|
|
630
|
+
|
|
631
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
632
|
+
carousel.dispatchEvent(createTouchEvent('touchstart', 100, 200))
|
|
633
|
+
carousel.dispatchEvent(createTouchEvent('touchend', 100, 100))
|
|
634
|
+
|
|
635
|
+
expect(handleChange).toHaveBeenCalledWith(1)
|
|
636
|
+
})
|
|
637
|
+
})
|
|
638
|
+
})
|
|
639
|
+
|
|
640
|
+
describe('autoplay', () => {
|
|
641
|
+
it('should auto-advance slides when autoplay is enabled', async () => {
|
|
642
|
+
const handleChange = vi.fn()
|
|
643
|
+
|
|
644
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
645
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
646
|
+
|
|
647
|
+
initializeShadeRoot({
|
|
648
|
+
injector,
|
|
649
|
+
rootElement,
|
|
650
|
+
jsxElement: <Carousel slides={createSlides()} autoplay autoplayInterval={100} onChange={handleChange} />,
|
|
651
|
+
})
|
|
652
|
+
|
|
653
|
+
await sleepAsync(100)
|
|
654
|
+
// Wait for at least one autoplay cycle
|
|
655
|
+
await sleepAsync(200)
|
|
656
|
+
|
|
657
|
+
expect(handleChange).toHaveBeenCalled()
|
|
658
|
+
})
|
|
659
|
+
})
|
|
660
|
+
|
|
661
|
+
it('should not autoplay for a single slide', async () => {
|
|
662
|
+
const handleChange = vi.fn()
|
|
663
|
+
|
|
664
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
665
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
666
|
+
|
|
667
|
+
initializeShadeRoot({
|
|
668
|
+
injector,
|
|
669
|
+
rootElement,
|
|
670
|
+
jsxElement: <Carousel slides={[<div>Only</div>]} autoplay autoplayInterval={100} onChange={handleChange} />,
|
|
671
|
+
})
|
|
672
|
+
|
|
673
|
+
await sleepAsync(300)
|
|
674
|
+
|
|
675
|
+
expect(handleChange).not.toHaveBeenCalled()
|
|
676
|
+
})
|
|
677
|
+
})
|
|
678
|
+
})
|
|
679
|
+
|
|
680
|
+
describe('fade effect DOM updates', () => {
|
|
681
|
+
it('should update active fade slide when navigating', async () => {
|
|
682
|
+
const handleChange = vi.fn()
|
|
683
|
+
|
|
684
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
685
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
686
|
+
|
|
687
|
+
initializeShadeRoot({
|
|
688
|
+
injector,
|
|
689
|
+
rootElement,
|
|
690
|
+
jsxElement: <Carousel slides={createSlides()} effect="fade" onChange={handleChange} />,
|
|
691
|
+
})
|
|
692
|
+
|
|
693
|
+
await sleepAsync(100)
|
|
694
|
+
|
|
695
|
+
const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
|
|
696
|
+
nextButton.click()
|
|
697
|
+
|
|
698
|
+
await sleepAsync(100)
|
|
699
|
+
|
|
700
|
+
const fadeSlides = document.querySelectorAll('.carousel-fade-slide')
|
|
701
|
+
expect(fadeSlides[0].hasAttribute('data-active')).toBe(false)
|
|
702
|
+
expect(fadeSlides[1].hasAttribute('data-active')).toBe(true)
|
|
703
|
+
})
|
|
704
|
+
})
|
|
705
|
+
|
|
706
|
+
it('should update dots when navigating in fade mode', async () => {
|
|
707
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
708
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
709
|
+
|
|
710
|
+
initializeShadeRoot({
|
|
711
|
+
injector,
|
|
712
|
+
rootElement,
|
|
713
|
+
jsxElement: <Carousel slides={createSlides()} effect="fade" />,
|
|
714
|
+
})
|
|
715
|
+
|
|
716
|
+
await sleepAsync(100)
|
|
717
|
+
|
|
718
|
+
const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
|
|
719
|
+
nextButton.click()
|
|
720
|
+
|
|
721
|
+
await sleepAsync(100)
|
|
722
|
+
|
|
723
|
+
const dots = document.querySelectorAll('.carousel-dot')
|
|
724
|
+
expect(dots[0].hasAttribute('data-active')).toBe(false)
|
|
725
|
+
expect(dots[1].hasAttribute('data-active')).toBe(true)
|
|
726
|
+
})
|
|
727
|
+
})
|
|
728
|
+
})
|
|
729
|
+
|
|
730
|
+
describe('slide effect DOM updates', () => {
|
|
731
|
+
it('should update track transform when navigating', async () => {
|
|
732
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
733
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
734
|
+
|
|
735
|
+
initializeShadeRoot({
|
|
736
|
+
injector,
|
|
737
|
+
rootElement,
|
|
738
|
+
jsxElement: <Carousel slides={createSlides()} />,
|
|
739
|
+
})
|
|
740
|
+
|
|
741
|
+
await sleepAsync(100)
|
|
742
|
+
|
|
743
|
+
const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
|
|
744
|
+
nextButton.click()
|
|
745
|
+
|
|
746
|
+
await sleepAsync(100)
|
|
747
|
+
|
|
748
|
+
const track = document.querySelector('.carousel-track') as HTMLElement
|
|
749
|
+
expect(track.style.transform).toContain('-100%')
|
|
750
|
+
})
|
|
751
|
+
})
|
|
752
|
+
|
|
753
|
+
it('should update dots when navigating in slide mode', async () => {
|
|
754
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
755
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
756
|
+
|
|
757
|
+
initializeShadeRoot({
|
|
758
|
+
injector,
|
|
759
|
+
rootElement,
|
|
760
|
+
jsxElement: <Carousel slides={createSlides()} />,
|
|
761
|
+
})
|
|
762
|
+
|
|
763
|
+
await sleepAsync(100)
|
|
764
|
+
|
|
765
|
+
const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
|
|
766
|
+
nextButton.click()
|
|
767
|
+
|
|
768
|
+
await sleepAsync(100)
|
|
769
|
+
|
|
770
|
+
const dots = document.querySelectorAll('.carousel-dot')
|
|
771
|
+
expect(dots[0].hasAttribute('data-active')).toBe(false)
|
|
772
|
+
expect(dots[1].hasAttribute('data-active')).toBe(true)
|
|
773
|
+
})
|
|
774
|
+
})
|
|
775
|
+
})
|
|
776
|
+
|
|
777
|
+
it('should not remove data-vertical when set to false', async () => {
|
|
778
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
779
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
780
|
+
|
|
781
|
+
initializeShadeRoot({
|
|
782
|
+
injector,
|
|
783
|
+
rootElement,
|
|
784
|
+
jsxElement: <Carousel slides={createSlides()} vertical={false} />,
|
|
785
|
+
})
|
|
786
|
+
|
|
787
|
+
await sleepAsync(100)
|
|
788
|
+
|
|
789
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
790
|
+
expect(carousel.hasAttribute('data-vertical')).toBe(false)
|
|
791
|
+
})
|
|
792
|
+
})
|
|
793
|
+
|
|
794
|
+
describe('vertical slide mode DOM updates', () => {
|
|
795
|
+
it('should update track transform with translateY when navigating vertically', async () => {
|
|
796
|
+
const handleChange = vi.fn()
|
|
797
|
+
|
|
798
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
799
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
800
|
+
|
|
801
|
+
initializeShadeRoot({
|
|
802
|
+
injector,
|
|
803
|
+
rootElement,
|
|
804
|
+
jsxElement: <Carousel slides={createSlides()} vertical style={{ height: '300px' }} onChange={handleChange} />,
|
|
805
|
+
})
|
|
806
|
+
|
|
807
|
+
await sleepAsync(100)
|
|
808
|
+
|
|
809
|
+
const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
|
|
810
|
+
nextButton.click()
|
|
811
|
+
|
|
812
|
+
await sleepAsync(100)
|
|
813
|
+
|
|
814
|
+
const track = document.querySelector('.carousel-track') as HTMLElement
|
|
815
|
+
expect(track.style.transform).toContain('translateY')
|
|
816
|
+
})
|
|
817
|
+
})
|
|
818
|
+
})
|
|
819
|
+
|
|
820
|
+
describe('vertical swipe support', () => {
|
|
821
|
+
const createTouchEvent = (type: string, x: number, y: number) => {
|
|
822
|
+
const touchObj = { clientX: x, clientY: y, identifier: 0, target: document.body }
|
|
823
|
+
if (type === 'touchstart') {
|
|
824
|
+
return new TouchEvent(type, { touches: [touchObj as unknown as Touch] })
|
|
825
|
+
}
|
|
826
|
+
return new TouchEvent(type, { changedTouches: [touchObj as unknown as Touch] })
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
it('should go to previous slide on vertical swipe down', async () => {
|
|
830
|
+
const handleChange = vi.fn()
|
|
831
|
+
|
|
832
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
833
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
834
|
+
|
|
835
|
+
initializeShadeRoot({
|
|
836
|
+
injector,
|
|
837
|
+
rootElement,
|
|
838
|
+
jsxElement: <Carousel slides={createSlides()} vertical defaultActiveIndex={2} onChange={handleChange} />,
|
|
839
|
+
})
|
|
840
|
+
|
|
841
|
+
await sleepAsync(100)
|
|
842
|
+
|
|
843
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
844
|
+
carousel.dispatchEvent(createTouchEvent('touchstart', 100, 100))
|
|
845
|
+
carousel.dispatchEvent(createTouchEvent('touchend', 100, 200))
|
|
846
|
+
|
|
847
|
+
expect(handleChange).toHaveBeenCalledWith(1)
|
|
848
|
+
})
|
|
849
|
+
})
|
|
850
|
+
|
|
851
|
+
it('should not navigate on small vertical swipe', async () => {
|
|
852
|
+
const handleChange = vi.fn()
|
|
853
|
+
|
|
854
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
855
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
856
|
+
|
|
857
|
+
initializeShadeRoot({
|
|
858
|
+
injector,
|
|
859
|
+
rootElement,
|
|
860
|
+
jsxElement: <Carousel slides={createSlides()} vertical onChange={handleChange} />,
|
|
861
|
+
})
|
|
862
|
+
|
|
863
|
+
await sleepAsync(100)
|
|
864
|
+
|
|
865
|
+
const carousel = document.querySelector('shade-carousel') as HTMLElement
|
|
866
|
+
carousel.dispatchEvent(createTouchEvent('touchstart', 100, 100))
|
|
867
|
+
carousel.dispatchEvent(createTouchEvent('touchend', 100, 130))
|
|
868
|
+
|
|
869
|
+
expect(handleChange).not.toHaveBeenCalled()
|
|
870
|
+
})
|
|
871
|
+
})
|
|
872
|
+
})
|
|
873
|
+
|
|
874
|
+
describe('fade effect with defaultActiveIndex', () => {
|
|
875
|
+
it('should set correct initial active slide for fade effect with non-zero index', async () => {
|
|
876
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
877
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
878
|
+
|
|
879
|
+
initializeShadeRoot({
|
|
880
|
+
injector,
|
|
881
|
+
rootElement,
|
|
882
|
+
jsxElement: <Carousel slides={createSlides()} effect="fade" defaultActiveIndex={1} />,
|
|
883
|
+
})
|
|
884
|
+
|
|
885
|
+
await sleepAsync(100)
|
|
886
|
+
|
|
887
|
+
const fadeSlides = document.querySelectorAll('.carousel-fade-slide')
|
|
888
|
+
expect(fadeSlides[0].hasAttribute('data-active')).toBe(false)
|
|
889
|
+
expect(fadeSlides[1].hasAttribute('data-active')).toBe(true)
|
|
890
|
+
expect(fadeSlides[2].hasAttribute('data-active')).toBe(false)
|
|
891
|
+
})
|
|
892
|
+
})
|
|
893
|
+
})
|
|
894
|
+
})
|