@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Injector } from '@furystack/inject';
|
|
2
2
|
import { createComponent, initializeShadeRoot } from '@furystack/shades';
|
|
3
|
-
import { sleepAsync } from '@furystack/utils';
|
|
3
|
+
import { sleepAsync, usingAsync } from '@furystack/utils';
|
|
4
4
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
5
5
|
import { ThemeProviderService } from '../../services/theme-provider-service.js';
|
|
6
6
|
import { Form, FormService } from '../form.js';
|
|
@@ -14,563 +14,597 @@ describe('Input', () => {
|
|
|
14
14
|
vi.restoreAllMocks();
|
|
15
15
|
});
|
|
16
16
|
it('should render with shadow DOM', async () => {
|
|
17
|
-
|
|
18
|
-
const rootElement = document.getElementById('root');
|
|
19
|
-
initializeShadeRoot({
|
|
20
|
-
injector,
|
|
21
|
-
rootElement,
|
|
22
|
-
jsxElement: createComponent(Input, null),
|
|
23
|
-
});
|
|
24
|
-
await sleepAsync(50);
|
|
25
|
-
const input = document.querySelector('shade-input');
|
|
26
|
-
expect(input).not.toBeNull();
|
|
27
|
-
});
|
|
28
|
-
it('should render the inner input element', async () => {
|
|
29
|
-
const injector = new Injector();
|
|
30
|
-
const rootElement = document.getElementById('root');
|
|
31
|
-
initializeShadeRoot({
|
|
32
|
-
injector,
|
|
33
|
-
rootElement,
|
|
34
|
-
jsxElement: createComponent(Input, { name: "testField" }),
|
|
35
|
-
});
|
|
36
|
-
await sleepAsync(50);
|
|
37
|
-
const input = document.querySelector('shade-input input');
|
|
38
|
-
expect(input).not.toBeNull();
|
|
39
|
-
expect(input.name).toBe('testField');
|
|
40
|
-
});
|
|
41
|
-
it('should render the label title', async () => {
|
|
42
|
-
const injector = new Injector();
|
|
43
|
-
const rootElement = document.getElementById('root');
|
|
44
|
-
initializeShadeRoot({
|
|
45
|
-
injector,
|
|
46
|
-
rootElement,
|
|
47
|
-
jsxElement: createComponent(Input, { labelTitle: "Test Label" }),
|
|
48
|
-
});
|
|
49
|
-
await sleepAsync(50);
|
|
50
|
-
const label = document.querySelector('shade-input label');
|
|
51
|
-
expect(label).not.toBeNull();
|
|
52
|
-
expect(label.textContent).toContain('Test Label');
|
|
53
|
-
});
|
|
54
|
-
describe('variants', () => {
|
|
55
|
-
it('should set data-variant attribute for outlined variant', async () => {
|
|
56
|
-
const injector = new Injector();
|
|
17
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
57
18
|
const rootElement = document.getElementById('root');
|
|
58
19
|
initializeShadeRoot({
|
|
59
20
|
injector,
|
|
60
21
|
rootElement,
|
|
61
|
-
jsxElement: createComponent(Input,
|
|
22
|
+
jsxElement: createComponent(Input, null),
|
|
62
23
|
});
|
|
63
24
|
await sleepAsync(50);
|
|
64
25
|
const input = document.querySelector('shade-input');
|
|
65
26
|
expect(input).not.toBeNull();
|
|
66
|
-
expect(input.getAttribute('data-variant')).toBe('outlined');
|
|
67
27
|
});
|
|
68
|
-
|
|
69
|
-
|
|
28
|
+
});
|
|
29
|
+
it('should render the inner input element', async () => {
|
|
30
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
70
31
|
const rootElement = document.getElementById('root');
|
|
71
32
|
initializeShadeRoot({
|
|
72
33
|
injector,
|
|
73
34
|
rootElement,
|
|
74
|
-
jsxElement: createComponent(Input, {
|
|
35
|
+
jsxElement: createComponent(Input, { name: "testField" }),
|
|
75
36
|
});
|
|
76
37
|
await sleepAsync(50);
|
|
77
|
-
const input = document.querySelector('shade-input');
|
|
38
|
+
const input = document.querySelector('shade-input input');
|
|
78
39
|
expect(input).not.toBeNull();
|
|
79
|
-
expect(input.
|
|
40
|
+
expect(input.name).toBe('testField');
|
|
80
41
|
});
|
|
81
|
-
|
|
82
|
-
|
|
42
|
+
});
|
|
43
|
+
it('should render the label title', async () => {
|
|
44
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
83
45
|
const rootElement = document.getElementById('root');
|
|
84
46
|
initializeShadeRoot({
|
|
85
47
|
injector,
|
|
86
48
|
rootElement,
|
|
87
|
-
jsxElement: createComponent(Input,
|
|
49
|
+
jsxElement: createComponent(Input, { labelTitle: "Test Label" }),
|
|
88
50
|
});
|
|
89
51
|
await sleepAsync(50);
|
|
90
|
-
const
|
|
91
|
-
expect(
|
|
92
|
-
expect(
|
|
52
|
+
const label = document.querySelector('shade-input label');
|
|
53
|
+
expect(label).not.toBeNull();
|
|
54
|
+
expect(label.textContent).toContain('Test Label');
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe('variants', () => {
|
|
58
|
+
it('should set data-variant attribute for outlined variant', async () => {
|
|
59
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
60
|
+
const rootElement = document.getElementById('root');
|
|
61
|
+
initializeShadeRoot({
|
|
62
|
+
injector,
|
|
63
|
+
rootElement,
|
|
64
|
+
jsxElement: createComponent(Input, { variant: "outlined" }),
|
|
65
|
+
});
|
|
66
|
+
await sleepAsync(50);
|
|
67
|
+
const input = document.querySelector('shade-input');
|
|
68
|
+
expect(input).not.toBeNull();
|
|
69
|
+
expect(input.getAttribute('data-variant')).toBe('outlined');
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
it('should set data-variant attribute for contained variant', async () => {
|
|
73
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
74
|
+
const rootElement = document.getElementById('root');
|
|
75
|
+
initializeShadeRoot({
|
|
76
|
+
injector,
|
|
77
|
+
rootElement,
|
|
78
|
+
jsxElement: createComponent(Input, { variant: "contained" }),
|
|
79
|
+
});
|
|
80
|
+
await sleepAsync(50);
|
|
81
|
+
const input = document.querySelector('shade-input');
|
|
82
|
+
expect(input).not.toBeNull();
|
|
83
|
+
expect(input.getAttribute('data-variant')).toBe('contained');
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
it('should not have data-variant when variant is not specified', async () => {
|
|
87
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
88
|
+
const rootElement = document.getElementById('root');
|
|
89
|
+
initializeShadeRoot({
|
|
90
|
+
injector,
|
|
91
|
+
rootElement,
|
|
92
|
+
jsxElement: createComponent(Input, null),
|
|
93
|
+
});
|
|
94
|
+
await sleepAsync(50);
|
|
95
|
+
const input = document.querySelector('shade-input');
|
|
96
|
+
expect(input).not.toBeNull();
|
|
97
|
+
expect(input.hasAttribute('data-variant')).toBe(false);
|
|
98
|
+
});
|
|
93
99
|
});
|
|
94
100
|
});
|
|
95
101
|
describe('disabled state', () => {
|
|
96
102
|
it('should set data-disabled attribute when disabled', async () => {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
104
|
+
const rootElement = document.getElementById('root');
|
|
105
|
+
initializeShadeRoot({
|
|
106
|
+
injector,
|
|
107
|
+
rootElement,
|
|
108
|
+
jsxElement: createComponent(Input, { disabled: true }),
|
|
109
|
+
});
|
|
110
|
+
await sleepAsync(50);
|
|
111
|
+
const input = document.querySelector('shade-input');
|
|
112
|
+
expect(input).not.toBeNull();
|
|
113
|
+
expect(input.hasAttribute('data-disabled')).toBe(true);
|
|
103
114
|
});
|
|
104
|
-
await sleepAsync(50);
|
|
105
|
-
const input = document.querySelector('shade-input');
|
|
106
|
-
expect(input).not.toBeNull();
|
|
107
|
-
expect(input.hasAttribute('data-disabled')).toBe(true);
|
|
108
115
|
});
|
|
109
116
|
it('should not have data-disabled attribute when not disabled', async () => {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
117
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
118
|
+
const rootElement = document.getElementById('root');
|
|
119
|
+
initializeShadeRoot({
|
|
120
|
+
injector,
|
|
121
|
+
rootElement,
|
|
122
|
+
jsxElement: createComponent(Input, { disabled: false }),
|
|
123
|
+
});
|
|
124
|
+
await sleepAsync(50);
|
|
125
|
+
const input = document.querySelector('shade-input');
|
|
126
|
+
expect(input).not.toBeNull();
|
|
127
|
+
expect(input.hasAttribute('data-disabled')).toBe(false);
|
|
116
128
|
});
|
|
117
|
-
await sleepAsync(50);
|
|
118
|
-
const input = document.querySelector('shade-input');
|
|
119
|
-
expect(input).not.toBeNull();
|
|
120
|
-
expect(input.hasAttribute('data-disabled')).toBe(false);
|
|
121
129
|
});
|
|
122
130
|
});
|
|
123
131
|
describe('validation', () => {
|
|
124
132
|
it('should call custom validation callback', async () => {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
133
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
134
|
+
const rootElement = document.getElementById('root');
|
|
135
|
+
const getValidationResult = vi.fn().mockReturnValue({ isValid: true });
|
|
136
|
+
initializeShadeRoot({
|
|
137
|
+
injector,
|
|
138
|
+
rootElement,
|
|
139
|
+
jsxElement: createComponent(Input, { name: "email", getValidationResult: getValidationResult }),
|
|
140
|
+
});
|
|
141
|
+
await sleepAsync(50);
|
|
142
|
+
const input = document.querySelector('shade-input input');
|
|
143
|
+
input.value = 'test@example.com';
|
|
144
|
+
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
145
|
+
await sleepAsync(50);
|
|
146
|
+
expect(getValidationResult).toHaveBeenCalled();
|
|
132
147
|
});
|
|
133
|
-
await sleepAsync(50);
|
|
134
|
-
const input = document.querySelector('shade-input input');
|
|
135
|
-
input.value = 'test@example.com';
|
|
136
|
-
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
137
|
-
await sleepAsync(50);
|
|
138
|
-
expect(getValidationResult).toHaveBeenCalled();
|
|
139
148
|
});
|
|
140
149
|
it('should set data-invalid when validation fails', async () => {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
150
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
151
|
+
const rootElement = document.getElementById('root');
|
|
152
|
+
initializeShadeRoot({
|
|
153
|
+
injector,
|
|
154
|
+
rootElement,
|
|
155
|
+
jsxElement: (createComponent(Input, { name: "email", getValidationResult: () => ({ isValid: false, message: 'Invalid email' }), value: "invalid" })),
|
|
156
|
+
});
|
|
157
|
+
await sleepAsync(50);
|
|
158
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
159
|
+
const input = inputWrapper.querySelector('input');
|
|
160
|
+
input.value = 'invalid';
|
|
161
|
+
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
162
|
+
await sleepAsync(50);
|
|
163
|
+
expect(inputWrapper.hasAttribute('data-invalid')).toBe(true);
|
|
147
164
|
});
|
|
148
|
-
await sleepAsync(50);
|
|
149
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
150
|
-
const input = inputWrapper.querySelector('input');
|
|
151
|
-
input.value = 'invalid';
|
|
152
|
-
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
153
|
-
await sleepAsync(50);
|
|
154
|
-
expect(inputWrapper.hasAttribute('data-invalid')).toBe(true);
|
|
155
165
|
});
|
|
156
166
|
it('should not have data-invalid when validation passes', async () => {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
167
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
168
|
+
const rootElement = document.getElementById('root');
|
|
169
|
+
initializeShadeRoot({
|
|
170
|
+
injector,
|
|
171
|
+
rootElement,
|
|
172
|
+
jsxElement: createComponent(Input, { name: "email", getValidationResult: () => ({ isValid: true }), value: "valid@email.com" }),
|
|
173
|
+
});
|
|
174
|
+
await sleepAsync(50);
|
|
175
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
176
|
+
const input = inputWrapper.querySelector('input');
|
|
177
|
+
input.value = 'valid@email.com';
|
|
178
|
+
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
179
|
+
await sleepAsync(50);
|
|
180
|
+
expect(inputWrapper.hasAttribute('data-invalid')).toBe(false);
|
|
163
181
|
});
|
|
164
|
-
await sleepAsync(50);
|
|
165
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
166
|
-
const input = inputWrapper.querySelector('input');
|
|
167
|
-
input.value = 'valid@email.com';
|
|
168
|
-
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
169
|
-
await sleepAsync(50);
|
|
170
|
-
expect(inputWrapper.hasAttribute('data-invalid')).toBe(false);
|
|
171
182
|
});
|
|
172
183
|
it('should display validation message in helper text when validation fails', async () => {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
184
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
185
|
+
const rootElement = document.getElementById('root');
|
|
186
|
+
initializeShadeRoot({
|
|
187
|
+
injector,
|
|
188
|
+
rootElement,
|
|
189
|
+
jsxElement: (createComponent(Input, { name: "email", getValidationResult: () => ({ isValid: false, message: 'Email is required' }) })),
|
|
190
|
+
});
|
|
191
|
+
await sleepAsync(50);
|
|
192
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
193
|
+
const input = inputWrapper.querySelector('input');
|
|
194
|
+
input.value = '';
|
|
195
|
+
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
196
|
+
await sleepAsync(50);
|
|
197
|
+
const helperText = inputWrapper.querySelector('.helperText');
|
|
198
|
+
expect(helperText.textContent).toBe('Email is required');
|
|
179
199
|
});
|
|
180
|
-
await sleepAsync(50);
|
|
181
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
182
|
-
const input = inputWrapper.querySelector('input');
|
|
183
|
-
input.value = '';
|
|
184
|
-
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
185
|
-
await sleepAsync(50);
|
|
186
|
-
const helperText = inputWrapper.querySelector('.helperText');
|
|
187
|
-
expect(helperText.textContent).toBe('Email is required');
|
|
188
200
|
});
|
|
189
201
|
it('should show default validation message for required field', async () => {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
202
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
203
|
+
const rootElement = document.getElementById('root');
|
|
204
|
+
initializeShadeRoot({
|
|
205
|
+
injector,
|
|
206
|
+
rootElement,
|
|
207
|
+
jsxElement: createComponent(Input, { name: "field", required: true }),
|
|
208
|
+
});
|
|
209
|
+
await sleepAsync(50);
|
|
210
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
211
|
+
const input = inputWrapper.querySelector('input');
|
|
212
|
+
const invalidEvent = new Event('invalid', { bubbles: true, cancelable: true });
|
|
213
|
+
input.dispatchEvent(invalidEvent);
|
|
214
|
+
await sleepAsync(50);
|
|
215
|
+
const helperText = inputWrapper.querySelector('.helperText');
|
|
216
|
+
expect(helperText.textContent).toBe('Value is required');
|
|
196
217
|
});
|
|
197
|
-
await sleepAsync(50);
|
|
198
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
199
|
-
const input = inputWrapper.querySelector('input');
|
|
200
|
-
const invalidEvent = new Event('invalid', { bubbles: true, cancelable: true });
|
|
201
|
-
input.dispatchEvent(invalidEvent);
|
|
202
|
-
await sleepAsync(50);
|
|
203
|
-
const helperText = inputWrapper.querySelector('.helperText');
|
|
204
|
-
expect(helperText.textContent).toBe('Value is required');
|
|
205
218
|
});
|
|
206
219
|
});
|
|
207
220
|
describe('helper text', () => {
|
|
208
221
|
it('should render custom helper text', async () => {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
222
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
223
|
+
const rootElement = document.getElementById('root');
|
|
224
|
+
initializeShadeRoot({
|
|
225
|
+
injector,
|
|
226
|
+
rootElement,
|
|
227
|
+
jsxElement: createComponent(Input, { name: "email", getHelperText: () => 'Enter your email address' }),
|
|
228
|
+
});
|
|
229
|
+
await sleepAsync(50);
|
|
230
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
231
|
+
const helperText = inputWrapper.querySelector('.helperText');
|
|
232
|
+
expect(helperText.textContent).toBe('Enter your email address');
|
|
215
233
|
});
|
|
216
|
-
await sleepAsync(50);
|
|
217
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
218
|
-
const helperText = inputWrapper.querySelector('.helperText');
|
|
219
|
-
expect(helperText.textContent).toBe('Enter your email address');
|
|
220
234
|
});
|
|
221
235
|
it('should call getHelperText with state and validation result when validation passes', async () => {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
236
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
237
|
+
const rootElement = document.getElementById('root');
|
|
238
|
+
const getHelperText = vi.fn().mockReturnValue('Helper text');
|
|
239
|
+
initializeShadeRoot({
|
|
240
|
+
injector,
|
|
241
|
+
rootElement,
|
|
242
|
+
jsxElement: (createComponent(Input, { name: "email", getHelperText: getHelperText, getValidationResult: () => ({ isValid: true }) })),
|
|
243
|
+
});
|
|
244
|
+
await sleepAsync(50);
|
|
245
|
+
const input = document.querySelector('shade-input input');
|
|
246
|
+
input.value = 'test';
|
|
247
|
+
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
248
|
+
await sleepAsync(50);
|
|
249
|
+
expect(getHelperText).toHaveBeenCalled();
|
|
250
|
+
const { calls } = getHelperText.mock;
|
|
251
|
+
const callWithValidation = calls.find((call) => call[0].validationResult !== undefined);
|
|
252
|
+
expect(callWithValidation).toBeDefined();
|
|
253
|
+
expect(callWithValidation[0].validationResult).toEqual({
|
|
254
|
+
isValid: true,
|
|
255
|
+
});
|
|
256
|
+
expect(callWithValidation[0].state).toBeDefined();
|
|
241
257
|
});
|
|
242
|
-
expect(callWithValidation[0].state).toBeDefined();
|
|
243
258
|
});
|
|
244
259
|
it('should use validation message instead of getHelperText when validation fails with message', async () => {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
260
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
261
|
+
const rootElement = document.getElementById('root');
|
|
262
|
+
const getHelperText = vi.fn().mockReturnValue('Fallback helper');
|
|
263
|
+
initializeShadeRoot({
|
|
264
|
+
injector,
|
|
265
|
+
rootElement,
|
|
266
|
+
jsxElement: (createComponent(Input, { name: "email", getHelperText: getHelperText, getValidationResult: () => ({ isValid: false, message: 'Validation error message' }) })),
|
|
267
|
+
});
|
|
268
|
+
await sleepAsync(50);
|
|
269
|
+
const input = document.querySelector('shade-input input');
|
|
270
|
+
input.value = 'test';
|
|
271
|
+
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
272
|
+
await sleepAsync(50);
|
|
273
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
274
|
+
const helperText = inputWrapper.querySelector('.helperText');
|
|
275
|
+
expect(helperText.textContent).toBe('Validation error message');
|
|
252
276
|
});
|
|
253
|
-
await sleepAsync(50);
|
|
254
|
-
const input = document.querySelector('shade-input input');
|
|
255
|
-
input.value = 'test';
|
|
256
|
-
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
257
|
-
await sleepAsync(50);
|
|
258
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
259
|
-
const helperText = inputWrapper.querySelector('.helperText');
|
|
260
|
-
expect(helperText.textContent).toBe('Validation error message');
|
|
261
277
|
});
|
|
262
278
|
});
|
|
263
279
|
describe('icons', () => {
|
|
264
280
|
it('should render start icon when getStartIcon is provided', async () => {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
281
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
282
|
+
const rootElement = document.getElementById('root');
|
|
283
|
+
initializeShadeRoot({
|
|
284
|
+
injector,
|
|
285
|
+
rootElement,
|
|
286
|
+
jsxElement: createComponent(Input, { name: "search", getStartIcon: () => '🔍' }),
|
|
287
|
+
});
|
|
288
|
+
await sleepAsync(50);
|
|
289
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
290
|
+
const startIcon = inputWrapper.querySelector('.startIcon');
|
|
291
|
+
expect(startIcon).not.toBeNull();
|
|
292
|
+
expect(startIcon.textContent).toBe('🔍');
|
|
271
293
|
});
|
|
272
|
-
await sleepAsync(50);
|
|
273
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
274
|
-
const startIcon = inputWrapper.querySelector('.startIcon');
|
|
275
|
-
expect(startIcon).not.toBeNull();
|
|
276
|
-
expect(startIcon.textContent).toBe('🔍');
|
|
277
294
|
});
|
|
278
295
|
it('should render end icon when getEndIcon is provided', async () => {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
296
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
297
|
+
const rootElement = document.getElementById('root');
|
|
298
|
+
initializeShadeRoot({
|
|
299
|
+
injector,
|
|
300
|
+
rootElement,
|
|
301
|
+
jsxElement: createComponent(Input, { name: "password", getEndIcon: () => '👁️' }),
|
|
302
|
+
});
|
|
303
|
+
await sleepAsync(50);
|
|
304
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
305
|
+
const endIcon = inputWrapper.querySelector('.endIcon');
|
|
306
|
+
expect(endIcon).not.toBeNull();
|
|
307
|
+
expect(endIcon.textContent).toBe('👁️');
|
|
285
308
|
});
|
|
286
|
-
await sleepAsync(50);
|
|
287
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
288
|
-
const endIcon = inputWrapper.querySelector('.endIcon');
|
|
289
|
-
expect(endIcon).not.toBeNull();
|
|
290
|
-
expect(endIcon.textContent).toBe('👁️');
|
|
291
309
|
});
|
|
292
310
|
it('should not render icon container when getStartIcon is not provided', async () => {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
311
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
312
|
+
const rootElement = document.getElementById('root');
|
|
313
|
+
initializeShadeRoot({
|
|
314
|
+
injector,
|
|
315
|
+
rootElement,
|
|
316
|
+
jsxElement: createComponent(Input, { name: "field" }),
|
|
317
|
+
});
|
|
318
|
+
await sleepAsync(50);
|
|
319
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
320
|
+
const startIcon = inputWrapper.querySelector('.startIcon');
|
|
321
|
+
expect(startIcon).toBeNull();
|
|
299
322
|
});
|
|
300
|
-
await sleepAsync(50);
|
|
301
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
302
|
-
const startIcon = inputWrapper.querySelector('.startIcon');
|
|
303
|
-
expect(startIcon).toBeNull();
|
|
304
323
|
});
|
|
305
324
|
it('should update icons on state change', async () => {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
325
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
326
|
+
const rootElement = document.getElementById('root');
|
|
327
|
+
initializeShadeRoot({
|
|
328
|
+
injector,
|
|
329
|
+
rootElement,
|
|
330
|
+
jsxElement: createComponent(Input, { name: "field", getEndIcon: ({ state }) => (state.focused ? '✓' : '○') }),
|
|
331
|
+
});
|
|
332
|
+
await sleepAsync(50);
|
|
333
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
334
|
+
const input = inputWrapper.querySelector('input');
|
|
335
|
+
const endIcon = inputWrapper.querySelector('.endIcon');
|
|
336
|
+
expect(endIcon.textContent).toBe('○');
|
|
337
|
+
input.dispatchEvent(new FocusEvent('focus'));
|
|
338
|
+
await sleepAsync(50);
|
|
339
|
+
expect(endIcon.textContent).toBe('✓');
|
|
312
340
|
});
|
|
313
|
-
await sleepAsync(50);
|
|
314
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
315
|
-
const input = inputWrapper.querySelector('input');
|
|
316
|
-
const endIcon = inputWrapper.querySelector('.endIcon');
|
|
317
|
-
expect(endIcon.textContent).toBe('○');
|
|
318
|
-
input.dispatchEvent(new FocusEvent('focus'));
|
|
319
|
-
await sleepAsync(50);
|
|
320
|
-
expect(endIcon.textContent).toBe('✓');
|
|
321
341
|
});
|
|
322
342
|
});
|
|
323
343
|
describe('theme integration', () => {
|
|
324
344
|
it('should set CSS color variables from theme', async () => {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
345
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
346
|
+
const rootElement = document.getElementById('root');
|
|
347
|
+
initializeShadeRoot({
|
|
348
|
+
injector,
|
|
349
|
+
rootElement,
|
|
350
|
+
jsxElement: createComponent(Input, { name: "field" }),
|
|
351
|
+
});
|
|
352
|
+
await sleepAsync(50);
|
|
353
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
354
|
+
const themeService = injector.getInstance(ThemeProviderService);
|
|
355
|
+
expect(inputWrapper.style.getPropertyValue('--input-primary-color')).toBe(themeService.theme.palette.primary.main);
|
|
356
|
+
expect(inputWrapper.style.getPropertyValue('--input-error-color')).toBe(themeService.theme.palette.error.main);
|
|
331
357
|
});
|
|
332
|
-
await sleepAsync(50);
|
|
333
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
334
|
-
const themeService = injector.getInstance(ThemeProviderService);
|
|
335
|
-
expect(inputWrapper.style.getPropertyValue('--input-primary-color')).toBe(themeService.theme.palette.primary.main);
|
|
336
|
-
expect(inputWrapper.style.getPropertyValue('--input-error-color')).toBe(themeService.theme.palette.error.main);
|
|
337
358
|
});
|
|
338
359
|
it('should use custom color from defaultColor prop', async () => {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
360
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
361
|
+
const rootElement = document.getElementById('root');
|
|
362
|
+
initializeShadeRoot({
|
|
363
|
+
injector,
|
|
364
|
+
rootElement,
|
|
365
|
+
jsxElement: createComponent(Input, { name: "field", defaultColor: "secondary" }),
|
|
366
|
+
});
|
|
367
|
+
await sleepAsync(50);
|
|
368
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
369
|
+
const themeService = injector.getInstance(ThemeProviderService);
|
|
370
|
+
expect(inputWrapper.style.getPropertyValue('--input-primary-color')).toBe(themeService.theme.palette.secondary.main);
|
|
345
371
|
});
|
|
346
|
-
await sleepAsync(50);
|
|
347
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
348
|
-
const themeService = injector.getInstance(ThemeProviderService);
|
|
349
|
-
expect(inputWrapper.style.getPropertyValue('--input-primary-color')).toBe(themeService.theme.palette.secondary.main);
|
|
350
372
|
});
|
|
351
373
|
});
|
|
352
374
|
describe('callbacks', () => {
|
|
353
375
|
it('should call onTextChange when input value changes', async () => {
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
376
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
377
|
+
const rootElement = document.getElementById('root');
|
|
378
|
+
const onTextChange = vi.fn();
|
|
379
|
+
initializeShadeRoot({
|
|
380
|
+
injector,
|
|
381
|
+
rootElement,
|
|
382
|
+
jsxElement: createComponent(Input, { name: "field", onTextChange: onTextChange }),
|
|
383
|
+
});
|
|
384
|
+
await sleepAsync(50);
|
|
385
|
+
const input = document.querySelector('shade-input input');
|
|
386
|
+
input.value = 'new value';
|
|
387
|
+
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
388
|
+
await sleepAsync(50);
|
|
389
|
+
expect(onTextChange).toHaveBeenCalledWith('new value');
|
|
361
390
|
});
|
|
362
|
-
await sleepAsync(50);
|
|
363
|
-
const input = document.querySelector('shade-input input');
|
|
364
|
-
input.value = 'new value';
|
|
365
|
-
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
366
|
-
await sleepAsync(50);
|
|
367
|
-
expect(onTextChange).toHaveBeenCalledWith('new value');
|
|
368
391
|
});
|
|
369
392
|
it('should call onchange when input value changes', async () => {
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
393
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
394
|
+
const rootElement = document.getElementById('root');
|
|
395
|
+
const onchange = vi.fn();
|
|
396
|
+
initializeShadeRoot({
|
|
397
|
+
injector,
|
|
398
|
+
rootElement,
|
|
399
|
+
jsxElement: createComponent(Input, { name: "field", onchange: onchange }),
|
|
400
|
+
});
|
|
401
|
+
await sleepAsync(50);
|
|
402
|
+
const input = document.querySelector('shade-input input');
|
|
403
|
+
input.value = 'test';
|
|
404
|
+
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
405
|
+
await sleepAsync(50);
|
|
406
|
+
expect(onchange).toHaveBeenCalled();
|
|
377
407
|
});
|
|
378
|
-
await sleepAsync(50);
|
|
379
|
-
const input = document.querySelector('shade-input input');
|
|
380
|
-
input.value = 'test';
|
|
381
|
-
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
382
|
-
await sleepAsync(50);
|
|
383
|
-
expect(onchange).toHaveBeenCalled();
|
|
384
408
|
});
|
|
385
409
|
});
|
|
386
410
|
describe('focus and blur', () => {
|
|
387
411
|
it('should update state on focus', async () => {
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
412
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
413
|
+
const rootElement = document.getElementById('root');
|
|
414
|
+
const getEndIcon = vi.fn().mockReturnValue('icon');
|
|
415
|
+
initializeShadeRoot({
|
|
416
|
+
injector,
|
|
417
|
+
rootElement,
|
|
418
|
+
jsxElement: createComponent(Input, { name: "field", getEndIcon: getEndIcon }),
|
|
419
|
+
});
|
|
420
|
+
await sleepAsync(50);
|
|
421
|
+
const input = document.querySelector('shade-input input');
|
|
422
|
+
input.dispatchEvent(new FocusEvent('focus'));
|
|
423
|
+
await sleepAsync(50);
|
|
424
|
+
expect(getEndIcon).toHaveBeenLastCalledWith(expect.objectContaining({
|
|
425
|
+
state: expect.objectContaining({
|
|
426
|
+
focused: true,
|
|
427
|
+
}),
|
|
428
|
+
}));
|
|
395
429
|
});
|
|
396
|
-
await sleepAsync(50);
|
|
397
|
-
const input = document.querySelector('shade-input input');
|
|
398
|
-
input.dispatchEvent(new FocusEvent('focus'));
|
|
399
|
-
await sleepAsync(50);
|
|
400
|
-
expect(getEndIcon).toHaveBeenLastCalledWith(expect.objectContaining({
|
|
401
|
-
state: expect.objectContaining({
|
|
402
|
-
focused: true,
|
|
403
|
-
}),
|
|
404
|
-
}));
|
|
405
430
|
});
|
|
406
431
|
it('should update state on blur', async () => {
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
432
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
433
|
+
const rootElement = document.getElementById('root');
|
|
434
|
+
const getEndIcon = vi.fn().mockReturnValue('icon');
|
|
435
|
+
initializeShadeRoot({
|
|
436
|
+
injector,
|
|
437
|
+
rootElement,
|
|
438
|
+
jsxElement: createComponent(Input, { name: "field", getEndIcon: getEndIcon }),
|
|
439
|
+
});
|
|
440
|
+
await sleepAsync(50);
|
|
441
|
+
const input = document.querySelector('shade-input input');
|
|
442
|
+
input.dispatchEvent(new FocusEvent('focus'));
|
|
443
|
+
await sleepAsync(50);
|
|
444
|
+
input.dispatchEvent(new FocusEvent('blur'));
|
|
445
|
+
await sleepAsync(50);
|
|
446
|
+
expect(getEndIcon).toHaveBeenLastCalledWith(expect.objectContaining({
|
|
447
|
+
state: expect.objectContaining({
|
|
448
|
+
focused: false,
|
|
449
|
+
}),
|
|
450
|
+
}));
|
|
414
451
|
});
|
|
415
|
-
await sleepAsync(50);
|
|
416
|
-
const input = document.querySelector('shade-input input');
|
|
417
|
-
input.dispatchEvent(new FocusEvent('focus'));
|
|
418
|
-
await sleepAsync(50);
|
|
419
|
-
input.dispatchEvent(new FocusEvent('blur'));
|
|
420
|
-
await sleepAsync(50);
|
|
421
|
-
expect(getEndIcon).toHaveBeenLastCalledWith(expect.objectContaining({
|
|
422
|
-
state: expect.objectContaining({
|
|
423
|
-
focused: false,
|
|
424
|
-
}),
|
|
425
|
-
}));
|
|
426
452
|
});
|
|
427
453
|
});
|
|
428
454
|
describe('autofocus', () => {
|
|
429
455
|
it('should set initial focused state based on autofocus prop', async () => {
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
456
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
457
|
+
const rootElement = document.getElementById('root');
|
|
458
|
+
const getEndIcon = vi.fn().mockReturnValue('icon');
|
|
459
|
+
initializeShadeRoot({
|
|
460
|
+
injector,
|
|
461
|
+
rootElement,
|
|
462
|
+
jsxElement: createComponent(Input, { name: "field", autofocus: true, getEndIcon: getEndIcon }),
|
|
463
|
+
});
|
|
464
|
+
await sleepAsync(50);
|
|
465
|
+
expect(getEndIcon).toHaveBeenCalledWith(expect.objectContaining({
|
|
466
|
+
state: expect.objectContaining({
|
|
467
|
+
focused: true,
|
|
468
|
+
}),
|
|
469
|
+
}));
|
|
437
470
|
});
|
|
438
|
-
await sleepAsync(50);
|
|
439
|
-
expect(getEndIcon).toHaveBeenCalledWith(expect.objectContaining({
|
|
440
|
-
state: expect.objectContaining({
|
|
441
|
-
focused: true,
|
|
442
|
-
}),
|
|
443
|
-
}));
|
|
444
471
|
});
|
|
445
472
|
});
|
|
446
473
|
describe('FormService integration', () => {
|
|
447
474
|
it('should register input with FormService when inside a Form', async () => {
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
475
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
476
|
+
const rootElement = document.getElementById('root');
|
|
477
|
+
initializeShadeRoot({
|
|
478
|
+
injector,
|
|
479
|
+
rootElement,
|
|
480
|
+
jsxElement: (createComponent(Form, { onSubmit: () => { }, validate: (_data) => true },
|
|
481
|
+
createComponent(Input, { name: "email", labelTitle: "Email" }))),
|
|
482
|
+
});
|
|
483
|
+
await sleepAsync(50);
|
|
484
|
+
const form = document.querySelector('form[is="shade-form"]');
|
|
485
|
+
const formInjector = form.injector;
|
|
486
|
+
const formService = formInjector.getInstance(FormService);
|
|
487
|
+
expect(formService.inputs.size).toBe(1);
|
|
455
488
|
});
|
|
456
|
-
await sleepAsync(50);
|
|
457
|
-
const form = document.querySelector('form[is="shade-form"]');
|
|
458
|
-
const formInjector = form.injector;
|
|
459
|
-
const formService = formInjector.getInstance(FormService);
|
|
460
|
-
expect(formService.inputs.size).toBe(1);
|
|
461
489
|
});
|
|
462
490
|
it('should update FormService field state on validation', async () => {
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
491
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
492
|
+
const rootElement = document.getElementById('root');
|
|
493
|
+
initializeShadeRoot({
|
|
494
|
+
injector,
|
|
495
|
+
rootElement,
|
|
496
|
+
jsxElement: (createComponent(Form, { onSubmit: () => { }, validate: (_data) => true },
|
|
497
|
+
createComponent(Input, { name: "email", labelTitle: "Email", getValidationResult: ({ state }) => {
|
|
498
|
+
if (state.value.includes('@')) {
|
|
499
|
+
return { isValid: true };
|
|
500
|
+
}
|
|
501
|
+
return { isValid: false, message: 'Invalid email format' };
|
|
502
|
+
} }))),
|
|
503
|
+
});
|
|
504
|
+
await sleepAsync(50);
|
|
505
|
+
const form = document.querySelector('form[is="shade-form"]');
|
|
506
|
+
const inputWrapper = form.querySelector('shade-input');
|
|
507
|
+
const input = inputWrapper.querySelector('input');
|
|
508
|
+
input.value = 'invalid';
|
|
509
|
+
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
510
|
+
await sleepAsync(50);
|
|
511
|
+
const formInjector = form.injector;
|
|
512
|
+
const formService = formInjector.getInstance(FormService);
|
|
513
|
+
const fieldErrors = formService.fieldErrors.getValue();
|
|
514
|
+
expect(fieldErrors.email).toBeDefined();
|
|
515
|
+
expect(fieldErrors.email?.validationResult).toEqual({
|
|
516
|
+
isValid: false,
|
|
517
|
+
message: 'Invalid email format',
|
|
518
|
+
});
|
|
490
519
|
});
|
|
491
520
|
});
|
|
492
521
|
it('should unregister input from FormService on cleanup', async () => {
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
522
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
523
|
+
const rootElement = document.getElementById('root');
|
|
524
|
+
initializeShadeRoot({
|
|
525
|
+
injector,
|
|
526
|
+
rootElement,
|
|
527
|
+
jsxElement: (createComponent(Form, { onSubmit: () => { }, validate: (_data) => true },
|
|
528
|
+
createComponent(Input, { name: "email", labelTitle: "Email" }))),
|
|
529
|
+
});
|
|
530
|
+
await sleepAsync(50);
|
|
531
|
+
const form = document.querySelector('form[is="shade-form"]');
|
|
532
|
+
const formInjector = form.injector;
|
|
533
|
+
const formService = formInjector.getInstance(FormService);
|
|
534
|
+
expect(formService.inputs.size).toBe(1);
|
|
535
|
+
rootElement.innerHTML = '';
|
|
536
|
+
await sleepAsync(50);
|
|
500
537
|
});
|
|
501
|
-
await sleepAsync(50);
|
|
502
|
-
const form = document.querySelector('form[is="shade-form"]');
|
|
503
|
-
const formInjector = form.injector;
|
|
504
|
-
const formService = formInjector.getInstance(FormService);
|
|
505
|
-
expect(formService.inputs.size).toBe(1);
|
|
506
|
-
rootElement.innerHTML = '';
|
|
507
|
-
await sleepAsync(50);
|
|
508
538
|
});
|
|
509
539
|
});
|
|
510
540
|
describe('default validation messages', () => {
|
|
511
541
|
it('should show message for typeMismatch', async () => {
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
542
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
543
|
+
const rootElement = document.getElementById('root');
|
|
544
|
+
initializeShadeRoot({
|
|
545
|
+
injector,
|
|
546
|
+
rootElement,
|
|
547
|
+
jsxElement: createComponent(Input, { name: "email", type: "email" }),
|
|
548
|
+
});
|
|
549
|
+
await sleepAsync(50);
|
|
550
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
551
|
+
const input = inputWrapper.querySelector('input');
|
|
552
|
+
input.value = 'not-an-email';
|
|
553
|
+
const invalidEvent = new Event('invalid', { bubbles: true, cancelable: true });
|
|
554
|
+
input.dispatchEvent(invalidEvent);
|
|
555
|
+
await sleepAsync(50);
|
|
556
|
+
const helperText = inputWrapper.querySelector('.helperText');
|
|
557
|
+
expect(helperText.textContent).toBe('Value is not valid');
|
|
518
558
|
});
|
|
519
|
-
await sleepAsync(50);
|
|
520
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
521
|
-
const input = inputWrapper.querySelector('input');
|
|
522
|
-
input.value = 'not-an-email';
|
|
523
|
-
const invalidEvent = new Event('invalid', { bubbles: true, cancelable: true });
|
|
524
|
-
input.dispatchEvent(invalidEvent);
|
|
525
|
-
await sleepAsync(50);
|
|
526
|
-
const helperText = inputWrapper.querySelector('.helperText');
|
|
527
|
-
expect(helperText.textContent).toBe('Value is not valid');
|
|
528
559
|
});
|
|
529
560
|
it('should handle pattern mismatch validation', async () => {
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
561
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
562
|
+
const rootElement = document.getElementById('root');
|
|
563
|
+
initializeShadeRoot({
|
|
564
|
+
injector,
|
|
565
|
+
rootElement,
|
|
566
|
+
jsxElement: createComponent(Input, { name: "code", pattern: "[A-Z]{3}" }),
|
|
567
|
+
});
|
|
568
|
+
await sleepAsync(50);
|
|
569
|
+
const inputWrapper = document.querySelector('shade-input');
|
|
570
|
+
const input = inputWrapper.querySelector('input');
|
|
571
|
+
input.value = '123';
|
|
572
|
+
const invalidEvent = new Event('invalid', { bubbles: true, cancelable: true });
|
|
573
|
+
input.dispatchEvent(invalidEvent);
|
|
574
|
+
await sleepAsync(50);
|
|
575
|
+
const helperText = inputWrapper.querySelector('.helperText');
|
|
576
|
+
expect(helperText.textContent).toBe('Value does not match the pattern');
|
|
536
577
|
});
|
|
537
|
-
await sleepAsync(50);
|
|
538
|
-
const inputWrapper = document.querySelector('shade-input');
|
|
539
|
-
const input = inputWrapper.querySelector('input');
|
|
540
|
-
input.value = '123';
|
|
541
|
-
const invalidEvent = new Event('invalid', { bubbles: true, cancelable: true });
|
|
542
|
-
input.dispatchEvent(invalidEvent);
|
|
543
|
-
await sleepAsync(50);
|
|
544
|
-
const helperText = inputWrapper.querySelector('.helperText');
|
|
545
|
-
expect(helperText.textContent).toBe('Value does not match the pattern');
|
|
546
578
|
});
|
|
547
579
|
});
|
|
548
580
|
describe('value handling', () => {
|
|
549
581
|
it('should use initial value prop', async () => {
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
582
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
583
|
+
const rootElement = document.getElementById('root');
|
|
584
|
+
initializeShadeRoot({
|
|
585
|
+
injector,
|
|
586
|
+
rootElement,
|
|
587
|
+
jsxElement: createComponent(Input, { name: "field", value: "initial value" }),
|
|
588
|
+
});
|
|
589
|
+
await sleepAsync(50);
|
|
590
|
+
const input = document.querySelector('shade-input input');
|
|
591
|
+
expect(input.value).toBe('initial value');
|
|
556
592
|
});
|
|
557
|
-
await sleepAsync(50);
|
|
558
|
-
const input = document.querySelector('shade-input input');
|
|
559
|
-
expect(input.value).toBe('initial value');
|
|
560
593
|
});
|
|
561
594
|
});
|
|
562
595
|
describe('labelProps', () => {
|
|
563
596
|
it('should pass labelProps to the label element', async () => {
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
597
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
598
|
+
const rootElement = document.getElementById('root');
|
|
599
|
+
initializeShadeRoot({
|
|
600
|
+
injector,
|
|
601
|
+
rootElement,
|
|
602
|
+
jsxElement: createComponent(Input, { name: "field", labelProps: { className: 'custom-label' } }),
|
|
603
|
+
});
|
|
604
|
+
await sleepAsync(50);
|
|
605
|
+
const label = document.querySelector('shade-input label');
|
|
606
|
+
expect(label.className).toContain('custom-label');
|
|
570
607
|
});
|
|
571
|
-
await sleepAsync(50);
|
|
572
|
-
const label = document.querySelector('shade-input label');
|
|
573
|
-
expect(label.className).toContain('custom-label');
|
|
574
608
|
});
|
|
575
609
|
});
|
|
576
610
|
});
|