mtrl 0.10.0-next.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -88
- package/dist/README.md +130 -88
- package/dist/components/badge/features.js +1 -1
- package/dist/components/bottom-sheet/api.d.ts +4 -3
- package/dist/components/bottom-sheet/config.js +11 -4
- package/dist/components/bottom-sheet/constants.d.ts +0 -2
- package/dist/components/bottom-sheet/constants.js +0 -1
- package/dist/components/bottom-sheet/features/drag.d.ts +3 -0
- package/dist/components/bottom-sheet/features/drag.js +23 -0
- package/dist/components/bottom-sheet/features/state.js +58 -2
- package/dist/components/bottom-sheet/features/structure.js +9 -4
- package/dist/components/bottom-sheet/types.d.ts +15 -2
- package/dist/components/button/features/progress.js +5 -3
- package/dist/components/button-group/button-group.js +3 -1
- package/dist/components/button-group/config.d.ts +8 -8
- package/dist/components/button-group/config.js +3 -2
- package/dist/components/button-group/constants.d.ts +7 -2
- package/dist/components/button-group/constants.js +5 -5
- package/dist/components/button-group/types.d.ts +5 -0
- package/dist/components/card/api.d.ts +4 -0
- package/dist/components/card/api.js +8 -0
- package/dist/components/card/card.js +1 -2
- package/dist/components/card/config.js +2 -14
- package/dist/components/card/content.js +1 -6
- package/dist/components/card/features.d.ts +5 -19
- package/dist/components/card/features.js +1 -11
- package/dist/components/card/index.d.ts +1 -1
- package/dist/components/card/types.d.ts +34 -3
- package/dist/components/carousel/features/scroll.js +7 -3
- package/dist/components/checkbox/config.js +18 -6
- package/dist/components/chips/api.js +1 -1
- package/dist/components/chips/config.js +1 -1
- package/dist/components/chips/features/controller.js +14 -7
- package/dist/components/chips/index.d.ts +1 -1
- package/dist/components/chips/types.d.ts +24 -5
- package/dist/components/datepicker/datepicker.d.ts +8 -2
- package/dist/components/datepicker/datepicker.js +71 -30
- package/dist/components/datepicker/index.d.ts +1 -1
- package/dist/components/datepicker/types.d.ts +63 -30
- package/dist/components/datepicker/utils.d.ts +5 -0
- package/dist/components/datepicker/utils.js +2 -0
- package/dist/components/dialog/api.js +5 -0
- package/dist/components/dialog/config.js +8 -2
- package/dist/components/dialog/features.js +94 -26
- package/dist/components/dialog/types.d.ts +15 -2
- package/dist/components/divider/features.js +3 -2
- package/dist/components/drawer/config.js +9 -2
- package/dist/components/drawer/features/items.js +3 -1
- package/dist/components/drawer/features/state.js +50 -9
- package/dist/components/drawer/types.d.ts +18 -0
- package/dist/components/extended-fab/api.d.ts +2 -0
- package/dist/components/extended-fab/api.js +2 -0
- package/dist/components/extended-fab/types.d.ts +6 -2
- package/dist/components/fab-menu/config.d.ts +11 -0
- package/dist/components/fab-menu/config.js +15 -0
- package/dist/components/fab-menu/constants.d.ts +59 -0
- package/dist/components/fab-menu/constants.js +30 -0
- package/dist/components/fab-menu/fab-menu.d.ts +40 -0
- package/dist/components/fab-menu/fab-menu.js +315 -0
- package/dist/components/fab-menu/index.d.ts +6 -0
- package/dist/components/fab-menu/index.js +4 -0
- package/dist/components/fab-menu/stagger.d.ts +10 -0
- package/dist/components/fab-menu/stagger.js +24 -0
- package/dist/components/fab-menu/types.d.ts +110 -0
- package/dist/components/fab-menu/types.js +1 -0
- package/dist/components/icon-button/features/toggle.d.ts +1 -0
- package/dist/components/icon-button/features/toggle.js +1 -0
- package/dist/components/icon-button/icon-button.d.ts +2 -2
- package/dist/components/icon-button/index.d.ts +2 -2
- package/dist/components/icon-button/types.d.ts +9 -2
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.js +2 -0
- package/dist/components/list/api.d.ts +2 -2
- package/dist/components/list/features/renderer.js +2 -1
- package/dist/components/list/features/selection.js +1 -1
- package/dist/components/list/types.d.ts +5 -0
- package/dist/components/menu/config.js +6 -1
- package/dist/components/menu/features/controller.d.ts +2 -0
- package/dist/components/menu/features/controller.js +58 -41
- package/dist/components/menu/features/index.d.ts +1 -2
- package/dist/components/menu/features/index.js +1 -2
- package/dist/components/menu/features/keyboard.js +3 -2
- package/dist/components/menu/features/layer.d.ts +15 -0
- package/dist/components/menu/features/layer.js +16 -0
- package/dist/components/menu/features/loader.d.ts +35 -0
- package/dist/components/menu/features/loader.js +64 -0
- package/dist/components/menu/features/opener.js +2 -1
- package/dist/components/menu/features/position.js +40 -38
- package/dist/components/menu/features/submenu.js +12 -4
- package/dist/components/menu/menu.js +2 -2
- package/dist/components/menu/types.d.ts +22 -2
- package/dist/components/navigation-rail/navigation-rail.js +5 -4
- package/dist/components/navigation-rail/types.d.ts +2 -0
- package/dist/components/progress/api.d.ts +4 -0
- package/dist/components/progress/api.js +17 -10
- package/dist/components/progress/config.js +3 -11
- package/dist/components/progress/features/canvas.d.ts +1 -0
- package/dist/components/progress/features/canvas.js +1 -1
- package/dist/components/progress/features/circular.js +7 -1
- package/dist/components/progress/features/state.js +5 -3
- package/dist/components/progress/index.d.ts +1 -1
- package/dist/components/progress/types.d.ts +21 -12
- package/dist/components/radios/radio.js +1 -3
- package/dist/components/search/api.d.ts +10 -2
- package/dist/components/search/api.js +18 -10
- package/dist/components/search/config.d.ts +19 -3
- package/dist/components/search/config.js +11 -2
- package/dist/components/search/constants.d.ts +11 -0
- package/dist/components/search/constants.js +9 -0
- package/dist/components/search/features/input.js +12 -3
- package/dist/components/search/features/states.d.ts +4 -2
- package/dist/components/search/features/states.js +98 -16
- package/dist/components/search/features/structure.d.ts +7 -20
- package/dist/components/search/features/structure.js +79 -29
- package/dist/components/search/features/suggestions.d.ts +2 -1
- package/dist/components/search/features/suggestions.js +22 -6
- package/dist/components/search/index.d.ts +1 -1
- package/dist/components/search/types.d.ts +25 -2
- package/dist/components/segmented-button/config.d.ts +1 -1
- package/dist/components/segmented-button/segmented-button.js +1 -43
- package/dist/components/segmented-button/types.d.ts +3 -3
- package/dist/components/select/features.js +8 -18
- package/dist/components/select/types.d.ts +7 -0
- package/dist/components/side-sheet/api.d.ts +4 -3
- package/dist/components/side-sheet/config.js +11 -3
- package/dist/components/side-sheet/features/state.js +57 -2
- package/dist/components/side-sheet/features/structure.js +1 -1
- package/dist/components/side-sheet/types.d.ts +12 -0
- package/dist/components/slider/api.js +2 -2
- package/dist/components/slider/features/controller.d.ts +14 -14
- package/dist/components/slider/features/controller.js +2 -2
- package/dist/components/slider/features/handlers.js +2 -1
- package/dist/components/slider/features/tracks.d.ts +0 -9
- package/dist/components/slider/features/tracks.js +3 -1
- package/dist/components/slider/types.d.ts +2 -2
- package/dist/components/snackbar/api.js +28 -4
- package/dist/components/snackbar/config.d.ts +1 -0
- package/dist/components/snackbar/config.js +8 -1
- package/dist/components/snackbar/layer.d.ts +23 -0
- package/dist/components/snackbar/layer.js +85 -0
- package/dist/components/snackbar/types.d.ts +12 -0
- package/dist/components/split-button/api.js +2 -1
- package/dist/components/split-button/features/menu.js +1 -0
- package/dist/components/split-button/types.d.ts +8 -0
- package/dist/components/switch/api.js +7 -0
- package/dist/components/switch/features.d.ts +4 -0
- package/dist/components/switch/features.js +9 -2
- package/dist/components/switch/types.d.ts +6 -0
- package/dist/components/tabs/api.js +0 -9
- package/dist/components/tabs/types.d.ts +1 -1
- package/dist/components/textfield/api.d.ts +1 -0
- package/dist/components/textfield/api.js +4 -1
- package/dist/components/textfield/constants.d.ts +5 -1
- package/dist/components/textfield/features/counter.d.ts +29 -0
- package/dist/components/textfield/features/counter.js +54 -0
- package/dist/components/textfield/features/field.d.ts +37 -0
- package/dist/components/textfield/features/field.js +39 -0
- package/dist/components/textfield/features/index.d.ts +4 -0
- package/dist/components/textfield/features/index.js +2 -0
- package/dist/components/textfield/features/leading-icon.js +2 -1
- package/dist/components/textfield/features/placement.js +65 -60
- package/dist/components/textfield/features/prefix-text.js +2 -1
- package/dist/components/textfield/features/suffix-text.js +2 -1
- package/dist/components/textfield/features/supporting-text.js +16 -33
- package/dist/components/textfield/features/trailing-icon.js +2 -1
- package/dist/components/textfield/textfield.js +2 -2
- package/dist/components/textfield/types.d.ts +7 -0
- package/dist/components/timepicker/api.js +67 -20
- package/dist/components/timepicker/config.d.ts +3 -1085
- package/dist/components/timepicker/config.js +3 -35
- package/dist/components/timepicker/constants.d.ts +21 -11
- package/dist/components/timepicker/constants.js +4 -3
- package/dist/components/timepicker/dial.d.ts +8 -3
- package/dist/components/timepicker/dial.js +8 -2
- package/dist/components/timepicker/index.d.ts +2 -1
- package/dist/components/timepicker/render.js +91 -103
- package/dist/components/timepicker/timepicker.js +2 -2
- package/dist/components/timepicker/types.d.ts +61 -18
- package/dist/components/timepicker/utils.d.ts +20 -53
- package/dist/components/timepicker/utils.js +36 -86
- package/dist/components/toolbar/config.d.ts +19 -0
- package/dist/components/toolbar/config.js +46 -0
- package/dist/components/toolbar/constants.d.ts +66 -0
- package/dist/components/toolbar/constants.js +32 -0
- package/dist/components/toolbar/index.d.ts +6 -0
- package/dist/components/toolbar/index.js +4 -0
- package/dist/components/toolbar/toolbar.d.ts +29 -0
- package/dist/components/toolbar/toolbar.js +204 -0
- package/dist/components/toolbar/types.d.ts +152 -0
- package/dist/components/toolbar/types.js +1 -0
- package/dist/components/tooltip/api.js +34 -3
- package/dist/components/tooltip/config.js +8 -1
- package/dist/components/tooltip/types.d.ts +15 -2
- package/dist/core/compose/features/checkable.d.ts +3 -6
- package/dist/core/compose/features/checkable.js +4 -20
- package/dist/core/compose/features/disabled.js +14 -14
- package/dist/core/compose/features/events.d.ts +16 -4
- package/dist/core/compose/features/input.js +1 -4
- package/dist/core/compose/features/textinput.js +18 -18
- package/dist/core/compose/features/textlabel.js +6 -7
- package/dist/core/dom/focus.d.ts +36 -0
- package/dist/core/dom/focus.js +47 -0
- package/dist/core/dom/index.d.ts +5 -0
- package/dist/core/dom/index.js +3 -0
- package/dist/core/dom/layer.d.ts +66 -0
- package/dist/core/dom/layer.js +78 -0
- package/dist/core/dom/roving.d.ts +30 -0
- package/dist/core/dom/roving.js +75 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +1 -0
- package/dist/core/state/emitter.d.ts +8 -2
- package/dist/core/state/events.d.ts +4 -3
- package/dist/core/theme/index.d.ts +7 -0
- package/dist/core/theme/index.js +2 -0
- package/dist/core/theme/shape.d.ts +9 -0
- package/dist/core/theme/shape.js +1 -0
- package/dist/core/theme/tokens.d.ts +45 -0
- package/dist/core/theme/tokens.js +36 -0
- package/dist/core/utils/theme.d.ts +7 -2
- package/dist/core/utils/theme.js +21 -23
- package/dist/core/utils/warn.d.ts +8 -0
- package/dist/core/utils/warn.js +5 -0
- package/dist/elements/adapter.d.ts +3 -0
- package/dist/elements/adapter.js +3 -0
- package/dist/elements/badge.d.ts +8 -0
- package/dist/elements/bottom-app-bar.d.ts +55 -0
- package/dist/elements/bottom-app-bar.js +43 -0
- package/dist/elements/bottom-sheet.d.ts +130 -0
- package/dist/elements/bottom-sheet.js +96 -0
- package/dist/elements/button-group.d.ts +162 -0
- package/dist/elements/button-group.js +174 -0
- package/dist/elements/button.d.ts +8 -0
- package/dist/elements/card.d.ts +77 -0
- package/dist/elements/card.js +113 -0
- package/dist/elements/carousel.d.ts +132 -0
- package/dist/elements/carousel.js +117 -0
- package/dist/elements/checkbox.d.ts +8 -0
- package/dist/elements/chips.d.ts +146 -0
- package/dist/elements/chips.js +212 -0
- package/dist/elements/css/badge.js +3 -2
- package/dist/elements/css/bottom-app-bar.d.ts +1 -0
- package/dist/elements/css/bottom-app-bar.js +4 -0
- package/dist/elements/css/bottom-sheet.d.ts +1 -0
- package/dist/elements/css/bottom-sheet.js +4 -0
- package/dist/elements/css/button-group.d.ts +1 -0
- package/dist/elements/css/button-group.js +6 -0
- package/dist/elements/css/button.js +3 -2
- package/dist/elements/css/card.d.ts +1 -0
- package/dist/elements/css/card.js +5 -0
- package/dist/elements/css/carousel.d.ts +1 -0
- package/dist/elements/css/carousel.js +4 -0
- package/dist/elements/css/checkbox.js +3 -2
- package/dist/elements/css/chips.d.ts +1 -0
- package/dist/elements/css/chips.js +4 -0
- package/dist/elements/css/datepicker.d.ts +1 -0
- package/dist/elements/css/datepicker.js +4 -0
- package/dist/elements/css/dialog.d.ts +1 -0
- package/dist/elements/css/dialog.js +6 -0
- package/dist/elements/css/divider.js +2 -1
- package/dist/elements/css/drawer.d.ts +1 -0
- package/dist/elements/css/drawer.js +4 -0
- package/dist/elements/css/extended-fab.js +3 -2
- package/dist/elements/css/fab-menu.d.ts +1 -0
- package/dist/elements/css/fab-menu.js +6 -0
- package/dist/elements/css/fab.js +3 -2
- package/dist/elements/css/icon-button.js +3 -2
- package/dist/elements/css/index.js +22 -0
- package/dist/elements/css/list.d.ts +1 -0
- package/dist/elements/css/list.js +4 -0
- package/dist/elements/css/loading-indicator.js +3 -2
- package/dist/elements/css/menu.d.ts +1 -0
- package/dist/elements/css/menu.js +4 -0
- package/dist/elements/css/navigation-rail.d.ts +1 -0
- package/dist/elements/css/navigation-rail.js +4 -0
- package/dist/elements/css/progress.js +3 -2
- package/dist/elements/css/radios.js +3 -2
- package/dist/elements/css/search.d.ts +1 -0
- package/dist/elements/css/search.js +4 -0
- package/dist/elements/css/select.d.ts +1 -0
- package/dist/elements/css/select.js +6 -0
- package/dist/elements/css/side-sheet.d.ts +1 -0
- package/dist/elements/css/side-sheet.js +4 -0
- package/dist/elements/css/slider.js +3 -2
- package/dist/elements/css/snackbar.d.ts +1 -0
- package/dist/elements/css/snackbar.js +6 -0
- package/dist/elements/css/split-button.d.ts +1 -0
- package/dist/elements/css/split-button.js +6 -0
- package/dist/elements/css/switch.js +3 -2
- package/dist/elements/css/tabs.js +3 -2
- package/dist/elements/css/textfield.js +3 -2
- package/dist/elements/css/timepicker.d.ts +1 -0
- package/dist/elements/css/timepicker.js +4 -0
- package/dist/elements/css/toolbar.d.ts +1 -0
- package/dist/elements/css/toolbar.js +6 -0
- package/dist/elements/css/tooltip.d.ts +1 -0
- package/dist/elements/css/tooltip.js +4 -0
- package/dist/elements/css/top-app-bar.d.ts +1 -0
- package/dist/elements/css/top-app-bar.js +4 -0
- package/dist/elements/datepicker.d.ts +163 -0
- package/dist/elements/datepicker.js +120 -0
- package/dist/elements/define.d.ts +37 -2
- package/dist/elements/define.js +105 -18
- package/dist/elements/dialog.d.ts +127 -0
- package/dist/elements/dialog.js +156 -0
- package/dist/elements/divider.d.ts +8 -0
- package/dist/elements/drawer.d.ts +147 -0
- package/dist/elements/drawer.js +136 -0
- package/dist/elements/extended-fab.d.ts +16 -0
- package/dist/elements/extended-fab.js +4 -0
- package/dist/elements/fab-menu.d.ts +112 -0
- package/dist/elements/fab-menu.js +68 -0
- package/dist/elements/fab.d.ts +8 -0
- package/dist/elements/icon-button.d.ts +17 -1
- package/dist/elements/icon-button.js +6 -4
- package/dist/elements/index.d.ts +327 -1
- package/dist/elements/index.js +98 -0
- package/dist/elements/list.d.ts +144 -0
- package/dist/elements/list.js +191 -0
- package/dist/elements/loading-indicator.d.ts +8 -0
- package/dist/elements/menu.d.ts +174 -0
- package/dist/elements/menu.js +178 -0
- package/dist/elements/navigation-rail.d.ts +164 -0
- package/dist/elements/navigation-rail.js +130 -0
- package/dist/elements/preupgrade.css +2 -0
- package/dist/elements/preupgrade.css.d.ts +1 -0
- package/dist/elements/preupgrade.d.ts +2 -0
- package/dist/elements/preupgrade.js +4 -0
- package/dist/elements/progress.d.ts +8 -0
- package/dist/elements/radios.d.ts +9 -0
- package/dist/elements/search.d.ts +225 -0
- package/dist/elements/search.js +215 -0
- package/dist/elements/select.d.ts +143 -0
- package/dist/elements/select.js +149 -0
- package/dist/elements/sheet.d.ts +44 -0
- package/dist/elements/sheet.js +60 -0
- package/dist/elements/side-sheet.d.ts +100 -0
- package/dist/elements/side-sheet.js +64 -0
- package/dist/elements/slider.d.ts +9 -0
- package/dist/elements/snackbar.d.ts +107 -0
- package/dist/elements/snackbar.js +54 -0
- package/dist/elements/split-button.d.ts +90 -0
- package/dist/elements/split-button.js +77 -0
- package/dist/elements/styles.d.ts +18 -0
- package/dist/elements/styles.js +41 -0
- package/dist/elements/switch.d.ts +10 -0
- package/dist/elements/switch.js +2 -2
- package/dist/elements/tabs.d.ts +9 -0
- package/dist/elements/textfield.d.ts +11 -1
- package/dist/elements/textfield.js +1 -6
- package/dist/elements/timepicker.d.ts +167 -0
- package/dist/elements/timepicker.js +159 -0
- package/dist/elements/toolbar.d.ts +103 -0
- package/dist/elements/toolbar.js +77 -0
- package/dist/elements/tooltip.d.ts +97 -0
- package/dist/elements/tooltip.js +132 -0
- package/dist/elements/top-app-bar.d.ts +72 -0
- package/dist/elements/top-app-bar.js +95 -0
- package/dist/index.cjs +0 -0
- package/dist/package.json +16 -2
- package/dist/react/badge.d.ts +4 -0
- package/dist/react/badge.js +7 -0
- package/dist/react/bottom-app-bar.d.ts +4 -0
- package/dist/react/bottom-app-bar.js +7 -0
- package/dist/react/bottom-sheet.d.ts +4 -0
- package/dist/react/bottom-sheet.js +7 -0
- package/dist/react/button-group-item.d.ts +3 -0
- package/dist/react/button-group-item.js +6 -0
- package/dist/react/button-group.d.ts +7 -0
- package/dist/react/button-group.js +10 -0
- package/dist/react/button.d.ts +5 -0
- package/dist/react/button.js +8 -0
- package/dist/react/card.d.ts +4 -0
- package/dist/react/card.js +7 -0
- package/dist/react/carousel-item.d.ts +3 -0
- package/dist/react/carousel-item.js +6 -0
- package/dist/react/carousel.d.ts +4 -0
- package/dist/react/carousel.js +7 -0
- package/dist/react/checkbox.d.ts +4 -0
- package/dist/react/checkbox.js +7 -0
- package/dist/react/chip.d.ts +3 -0
- package/dist/react/chip.js +6 -0
- package/dist/react/chips.d.ts +4 -0
- package/dist/react/chips.js +7 -0
- package/dist/react/create.d.ts +11 -2
- package/dist/react/create.js +12 -2
- package/dist/react/datepicker.d.ts +4 -0
- package/dist/react/datepicker.js +7 -0
- package/dist/react/dialog.d.ts +4 -0
- package/dist/react/dialog.js +7 -0
- package/dist/react/divider.d.ts +4 -0
- package/dist/react/divider.js +7 -0
- package/dist/react/drawer-item.d.ts +3 -0
- package/dist/react/drawer-item.js +6 -0
- package/dist/react/drawer.d.ts +4 -0
- package/dist/react/drawer.js +7 -0
- package/dist/react/extended-fab.d.ts +4 -0
- package/dist/react/extended-fab.js +7 -0
- package/dist/react/fab-menu-item.d.ts +3 -0
- package/dist/react/fab-menu-item.js +6 -0
- package/dist/react/fab-menu.d.ts +6 -0
- package/dist/react/fab-menu.js +9 -0
- package/dist/react/fab.d.ts +4 -0
- package/dist/react/fab.js +7 -0
- package/dist/react/icon-button.d.ts +4 -0
- package/dist/react/icon-button.js +7 -0
- package/dist/react/index.d.ts +48 -32
- package/dist/react/index.js +48 -32
- package/dist/react/jsx.d.ts +74 -0
- package/dist/react/jsx.js +2 -0
- package/dist/react/list-item.d.ts +3 -0
- package/dist/react/list-item.js +6 -0
- package/dist/react/list.d.ts +4 -0
- package/dist/react/list.js +7 -0
- package/dist/react/loading-indicator.d.ts +4 -0
- package/dist/react/loading-indicator.js +7 -0
- package/dist/react/menu-item.d.ts +3 -0
- package/dist/react/menu-item.js +6 -0
- package/dist/react/menu.d.ts +4 -0
- package/dist/react/menu.js +7 -0
- package/dist/react/navigation-rail-item.d.ts +3 -0
- package/dist/react/navigation-rail-item.js +6 -0
- package/dist/react/navigation-rail.d.ts +4 -0
- package/dist/react/navigation-rail.js +7 -0
- package/dist/react/progress.d.ts +4 -0
- package/dist/react/progress.js +7 -0
- package/dist/react/radio.d.ts +3 -0
- package/dist/react/radio.js +6 -0
- package/dist/react/radios.d.ts +4 -0
- package/dist/react/radios.js +7 -0
- package/dist/react/search-suggestion.d.ts +3 -0
- package/dist/react/search-suggestion.js +6 -0
- package/dist/react/search.d.ts +4 -0
- package/dist/react/search.js +7 -0
- package/dist/react/select-option.d.ts +3 -0
- package/dist/react/select-option.js +6 -0
- package/dist/react/select.d.ts +6 -0
- package/dist/react/select.js +9 -0
- package/dist/react/side-sheet.d.ts +4 -0
- package/dist/react/side-sheet.js +7 -0
- package/dist/react/slider.d.ts +4 -0
- package/dist/react/slider.js +7 -0
- package/dist/react/snackbar.d.ts +7 -0
- package/dist/react/snackbar.js +10 -0
- package/dist/react/split-button.d.ts +7 -0
- package/dist/react/split-button.js +10 -0
- package/dist/react/switch.d.ts +4 -0
- package/dist/react/switch.js +7 -0
- package/dist/react/tab.d.ts +3 -0
- package/dist/react/tab.js +6 -0
- package/dist/react/tabs.d.ts +7 -0
- package/dist/react/tabs.js +10 -0
- package/dist/react/textfield.d.ts +4 -0
- package/dist/react/textfield.js +7 -0
- package/dist/react/timepicker.d.ts +4 -0
- package/dist/react/timepicker.js +7 -0
- package/dist/react/toolbar.d.ts +5 -0
- package/dist/react/toolbar.js +8 -0
- package/dist/react/tooltip.d.ts +4 -0
- package/dist/react/tooltip.js +7 -0
- package/dist/react/top-app-bar.d.ts +4 -0
- package/dist/react/top-app-bar.js +7 -0
- package/dist/solid/badge.d.ts +4 -0
- package/dist/solid/badge.js +6 -0
- package/dist/solid/bottom-app-bar.d.ts +4 -0
- package/dist/solid/bottom-app-bar.js +6 -0
- package/dist/solid/bottom-sheet.d.ts +4 -0
- package/dist/solid/bottom-sheet.js +6 -0
- package/dist/solid/button-group-item.d.ts +3 -0
- package/dist/solid/button-group-item.js +5 -0
- package/dist/solid/button-group.d.ts +7 -0
- package/dist/solid/button-group.js +9 -0
- package/dist/solid/button.d.ts +5 -0
- package/dist/solid/button.js +7 -0
- package/dist/solid/card.d.ts +4 -0
- package/dist/solid/card.js +6 -0
- package/dist/solid/carousel-item.d.ts +3 -0
- package/dist/solid/carousel-item.js +5 -0
- package/dist/solid/carousel.d.ts +4 -0
- package/dist/solid/carousel.js +6 -0
- package/dist/solid/checkbox.d.ts +4 -0
- package/dist/solid/checkbox.js +6 -0
- package/dist/solid/chip.d.ts +3 -0
- package/dist/solid/chip.js +5 -0
- package/dist/solid/chips.d.ts +4 -0
- package/dist/solid/chips.js +6 -0
- package/dist/solid/create.d.ts +11 -2
- package/dist/solid/create.js +22 -4
- package/dist/solid/datepicker.d.ts +4 -0
- package/dist/solid/datepicker.js +6 -0
- package/dist/solid/dialog.d.ts +4 -0
- package/dist/solid/dialog.js +6 -0
- package/dist/solid/divider.d.ts +4 -0
- package/dist/solid/divider.js +6 -0
- package/dist/solid/drawer-item.d.ts +3 -0
- package/dist/solid/drawer-item.js +5 -0
- package/dist/solid/drawer.d.ts +4 -0
- package/dist/solid/drawer.js +6 -0
- package/dist/solid/extended-fab.d.ts +4 -0
- package/dist/solid/extended-fab.js +6 -0
- package/dist/solid/fab-menu-item.d.ts +3 -0
- package/dist/solid/fab-menu-item.js +5 -0
- package/dist/solid/fab-menu.d.ts +6 -0
- package/dist/solid/fab-menu.js +8 -0
- package/dist/solid/fab.d.ts +4 -0
- package/dist/solid/fab.js +6 -0
- package/dist/solid/icon-button.d.ts +4 -0
- package/dist/solid/icon-button.js +6 -0
- package/dist/solid/index.d.ts +48 -32
- package/dist/solid/index.js +48 -32
- package/dist/solid/jsx.d.ts +96 -0
- package/dist/solid/jsx.js +1 -0
- package/dist/solid/list-item.d.ts +3 -0
- package/dist/solid/list-item.js +5 -0
- package/dist/solid/list.d.ts +4 -0
- package/dist/solid/list.js +6 -0
- package/dist/solid/loading-indicator.d.ts +4 -0
- package/dist/solid/loading-indicator.js +6 -0
- package/dist/solid/menu-item.d.ts +3 -0
- package/dist/solid/menu-item.js +5 -0
- package/dist/solid/menu.d.ts +4 -0
- package/dist/solid/menu.js +6 -0
- package/dist/solid/navigation-rail-item.d.ts +3 -0
- package/dist/solid/navigation-rail-item.js +5 -0
- package/dist/solid/navigation-rail.d.ts +4 -0
- package/dist/solid/navigation-rail.js +6 -0
- package/dist/solid/progress.d.ts +4 -0
- package/dist/solid/progress.js +6 -0
- package/dist/solid/radio.d.ts +3 -0
- package/dist/solid/radio.js +5 -0
- package/dist/solid/radios.d.ts +4 -0
- package/dist/solid/radios.js +6 -0
- package/dist/solid/search-suggestion.d.ts +3 -0
- package/dist/solid/search-suggestion.js +5 -0
- package/dist/solid/search.d.ts +4 -0
- package/dist/solid/search.js +6 -0
- package/dist/solid/select-option.d.ts +3 -0
- package/dist/solid/select-option.js +5 -0
- package/dist/solid/select.d.ts +6 -0
- package/dist/solid/select.js +8 -0
- package/dist/solid/side-sheet.d.ts +4 -0
- package/dist/solid/side-sheet.js +6 -0
- package/dist/solid/slider.d.ts +4 -0
- package/dist/solid/slider.js +6 -0
- package/dist/solid/snackbar.d.ts +7 -0
- package/dist/solid/snackbar.js +9 -0
- package/dist/solid/split-button.d.ts +7 -0
- package/dist/solid/split-button.js +9 -0
- package/dist/solid/switch.d.ts +4 -0
- package/dist/solid/switch.js +6 -0
- package/dist/solid/tab.d.ts +3 -0
- package/dist/solid/tab.js +5 -0
- package/dist/solid/tabs.d.ts +7 -0
- package/dist/solid/tabs.js +9 -0
- package/dist/solid/textfield.d.ts +4 -0
- package/dist/solid/textfield.js +6 -0
- package/dist/solid/timepicker.d.ts +4 -0
- package/dist/solid/timepicker.js +6 -0
- package/dist/solid/toolbar.d.ts +5 -0
- package/dist/solid/toolbar.js +7 -0
- package/dist/solid/tooltip.d.ts +4 -0
- package/dist/solid/tooltip.js +6 -0
- package/dist/solid/top-app-bar.d.ts +4 -0
- package/dist/solid/top-app-bar.js +6 -0
- package/dist/styles/badge.css +2 -2
- package/dist/styles/base.css +2 -2
- package/dist/styles/bottom-app-bar.css +2 -2
- package/dist/styles/bottom-sheet.css +2 -2
- package/dist/styles/button-group.css +2 -2
- package/dist/styles/button.css +2 -2
- package/dist/styles/card.css +2 -2
- package/dist/styles/carousel.css +2 -2
- package/dist/styles/checkbox.css +2 -2
- package/dist/styles/chips.css +2 -2
- package/dist/styles/datepicker.css +2 -2
- package/dist/styles/dialog.css +2 -2
- package/dist/styles/divider.css +2 -2
- package/dist/styles/drawer.css +2 -2
- package/dist/styles/extended-fab.css +2 -2
- package/dist/styles/fab-menu.css +2 -0
- package/dist/styles/fab-menu.d.ts +1 -0
- package/dist/styles/fab-menu.js +3 -0
- package/dist/styles/fab.css +2 -2
- package/dist/styles/icon-button.css +2 -2
- package/dist/styles/list.css +2 -2
- package/dist/styles/loading-indicator.css +2 -2
- package/dist/styles/menu.css +2 -2
- package/dist/styles/navigation-rail.css +2 -2
- package/dist/styles/progress.css +2 -2
- package/dist/styles/radios.css +2 -2
- package/dist/styles/search.css +2 -2
- package/dist/styles/segmented-button.css +2 -2
- package/dist/styles/select.css +2 -2
- package/dist/styles/side-sheet.css +2 -2
- package/dist/styles/slider.css +2 -2
- package/dist/styles/snackbar.css +2 -2
- package/dist/styles/split-button.css +2 -2
- package/dist/styles/switch.css +2 -2
- package/dist/styles/tabs.css +2 -2
- package/dist/styles/textfield.css +2 -2
- package/dist/styles/timepicker.css +2 -2
- package/dist/styles/toolbar.css +2 -0
- package/dist/styles/toolbar.d.ts +1 -0
- package/dist/styles/toolbar.js +3 -0
- package/dist/styles/tooltip.css +2 -2
- package/dist/styles/top-app-bar.css +2 -2
- package/dist/styles/utilities.css +2 -2
- package/dist/styles.css +2 -2
- package/dist/svelte/Badge.svelte +7 -2
- package/dist/svelte/Badge.svelte.d.ts +2 -2
- package/dist/svelte/BottomAppBar.svelte +24 -0
- package/dist/svelte/BottomAppBar.svelte.d.ts +5 -0
- package/dist/svelte/BottomSheet.svelte +24 -0
- package/dist/svelte/BottomSheet.svelte.d.ts +5 -0
- package/dist/svelte/Button.svelte +8 -2
- package/dist/svelte/Button.svelte.d.ts +2 -2
- package/dist/svelte/ButtonGroup.svelte +28 -0
- package/dist/svelte/ButtonGroup.svelte.d.ts +5 -0
- package/dist/svelte/ButtonGroupItem.svelte +11 -0
- package/dist/svelte/ButtonGroupItem.svelte.d.ts +5 -0
- package/dist/svelte/Card.svelte +24 -0
- package/dist/svelte/Card.svelte.d.ts +5 -0
- package/dist/svelte/Carousel.svelte +25 -0
- package/dist/svelte/Carousel.svelte.d.ts +5 -0
- package/dist/svelte/CarouselItem.svelte +11 -0
- package/dist/svelte/CarouselItem.svelte.d.ts +5 -0
- package/dist/svelte/Checkbox.svelte +7 -2
- package/dist/svelte/Checkbox.svelte.d.ts +2 -2
- package/dist/svelte/Chip.svelte +11 -0
- package/dist/svelte/Chip.svelte.d.ts +5 -0
- package/dist/svelte/Chips.svelte +25 -0
- package/dist/svelte/Chips.svelte.d.ts +5 -0
- package/dist/svelte/Datepicker.svelte +25 -0
- package/dist/svelte/Datepicker.svelte.d.ts +5 -0
- package/dist/svelte/Dialog.svelte +24 -0
- package/dist/svelte/Dialog.svelte.d.ts +5 -0
- package/dist/svelte/Divider.svelte +7 -2
- package/dist/svelte/Divider.svelte.d.ts +2 -2
- package/dist/svelte/Drawer.svelte +25 -0
- package/dist/svelte/Drawer.svelte.d.ts +5 -0
- package/dist/svelte/DrawerItem.svelte +11 -0
- package/dist/svelte/DrawerItem.svelte.d.ts +5 -0
- package/dist/svelte/ExtendedFab.svelte +7 -2
- package/dist/svelte/ExtendedFab.svelte.d.ts +2 -2
- package/dist/svelte/Fab.svelte +7 -2
- package/dist/svelte/Fab.svelte.d.ts +2 -2
- package/dist/svelte/FabMenu.svelte +26 -0
- package/dist/svelte/FabMenu.svelte.d.ts +5 -0
- package/dist/svelte/FabMenuItem.svelte +11 -0
- package/dist/svelte/FabMenuItem.svelte.d.ts +5 -0
- package/dist/svelte/IconButton.svelte +7 -2
- package/dist/svelte/IconButton.svelte.d.ts +2 -2
- package/dist/svelte/List.svelte +26 -0
- package/dist/svelte/List.svelte.d.ts +5 -0
- package/dist/svelte/ListItem.svelte +11 -0
- package/dist/svelte/ListItem.svelte.d.ts +5 -0
- package/dist/svelte/LoadingIndicator.svelte +7 -2
- package/dist/svelte/LoadingIndicator.svelte.d.ts +2 -2
- package/dist/svelte/Menu.svelte +25 -0
- package/dist/svelte/Menu.svelte.d.ts +5 -0
- package/dist/svelte/MenuItem.svelte +11 -0
- package/dist/svelte/MenuItem.svelte.d.ts +5 -0
- package/dist/svelte/NavigationRail.svelte +25 -0
- package/dist/svelte/NavigationRail.svelte.d.ts +5 -0
- package/dist/svelte/NavigationRailItem.svelte +11 -0
- package/dist/svelte/NavigationRailItem.svelte.d.ts +5 -0
- package/dist/svelte/Progress.svelte +7 -2
- package/dist/svelte/Progress.svelte.d.ts +2 -2
- package/dist/svelte/Radio.svelte +1 -1
- package/dist/svelte/Radios.svelte +7 -2
- package/dist/svelte/Radios.svelte.d.ts +2 -2
- package/dist/svelte/Search.svelte +25 -0
- package/dist/svelte/Search.svelte.d.ts +5 -0
- package/dist/svelte/SearchSuggestion.svelte +11 -0
- package/dist/svelte/SearchSuggestion.svelte.d.ts +5 -0
- package/dist/svelte/Select.svelte +27 -0
- package/dist/svelte/Select.svelte.d.ts +5 -0
- package/dist/svelte/SelectOption.svelte +11 -0
- package/dist/svelte/SelectOption.svelte.d.ts +5 -0
- package/dist/svelte/SideSheet.svelte +24 -0
- package/dist/svelte/SideSheet.svelte.d.ts +5 -0
- package/dist/svelte/Slider.svelte +7 -2
- package/dist/svelte/Slider.svelte.d.ts +2 -2
- package/dist/svelte/Snackbar.svelte +28 -0
- package/dist/svelte/Snackbar.svelte.d.ts +5 -0
- package/dist/svelte/SplitButton.svelte +27 -0
- package/dist/svelte/SplitButton.svelte.d.ts +5 -0
- package/dist/svelte/Switch.svelte +7 -2
- package/dist/svelte/Switch.svelte.d.ts +2 -2
- package/dist/svelte/Tab.svelte +1 -1
- package/dist/svelte/Tabs.svelte +10 -2
- package/dist/svelte/Tabs.svelte.d.ts +2 -2
- package/dist/svelte/Textfield.svelte +7 -2
- package/dist/svelte/Textfield.svelte.d.ts +2 -2
- package/dist/svelte/Timepicker.svelte +25 -0
- package/dist/svelte/Timepicker.svelte.d.ts +5 -0
- package/dist/svelte/Toolbar.svelte +25 -0
- package/dist/svelte/Toolbar.svelte.d.ts +5 -0
- package/dist/svelte/Tooltip.svelte +25 -0
- package/dist/svelte/Tooltip.svelte.d.ts +5 -0
- package/dist/svelte/TopAppBar.svelte +24 -0
- package/dist/svelte/TopAppBar.svelte.d.ts +5 -0
- package/dist/svelte/index.d.ts +32 -0
- package/dist/svelte/index.js +32 -14
- package/dist/svelte/runtime.d.ts +12 -2
- package/dist/svelte/runtime.js +11 -2
- package/dist/themes/autumn.css +2 -2
- package/dist/themes/baseline.css +2 -2
- package/dist/themes/brownbeige.css +2 -2
- package/dist/themes/browngreen.css +2 -2
- package/dist/themes/content.css +2 -0
- package/dist/themes/desert.css +2 -2
- package/dist/themes/expressive.css +2 -0
- package/dist/themes/fidelity.css +2 -0
- package/dist/themes/forest.css +2 -2
- package/dist/themes/fruit-salad.css +2 -0
- package/dist/themes/highcontrast.css +2 -2
- package/dist/themes/legacy.css +2 -2
- package/dist/themes/material.css +2 -2
- package/dist/themes/monochrome.css +2 -0
- package/dist/themes/neutral.css +2 -0
- package/dist/themes/ocean.css +2 -2
- package/dist/themes/rainbow.css +2 -0
- package/dist/themes/sageivory.css +2 -2
- package/dist/themes/spring.css +2 -2
- package/dist/themes/summer.css +2 -2
- package/dist/themes/sunset.css +2 -2
- package/dist/themes/tealcaramel.css +2 -2
- package/dist/themes/vibrant.css +2 -0
- package/dist/themes/winter.css +2 -2
- package/dist/vue/badge.d.ts +4 -0
- package/dist/vue/badge.js +6 -0
- package/dist/vue/bottom-app-bar.d.ts +4 -0
- package/dist/vue/bottom-app-bar.js +6 -0
- package/dist/vue/bottom-sheet.d.ts +4 -0
- package/dist/vue/bottom-sheet.js +6 -0
- package/dist/vue/button-group-item.d.ts +3 -0
- package/dist/vue/button-group-item.js +5 -0
- package/dist/vue/button-group.d.ts +7 -0
- package/dist/vue/button-group.js +9 -0
- package/dist/vue/button.d.ts +5 -0
- package/dist/vue/button.js +7 -0
- package/dist/vue/card.d.ts +4 -0
- package/dist/vue/card.js +6 -0
- package/dist/vue/carousel-item.d.ts +3 -0
- package/dist/vue/carousel-item.js +5 -0
- package/dist/vue/carousel.d.ts +4 -0
- package/dist/vue/carousel.js +6 -0
- package/dist/vue/checkbox.d.ts +4 -0
- package/dist/vue/checkbox.js +6 -0
- package/dist/vue/chip.d.ts +3 -0
- package/dist/vue/chip.js +5 -0
- package/dist/vue/chips.d.ts +4 -0
- package/dist/vue/chips.js +6 -0
- package/dist/vue/create.d.ts +9 -3
- package/dist/vue/create.js +15 -2
- package/dist/vue/datepicker.d.ts +4 -0
- package/dist/vue/datepicker.js +6 -0
- package/dist/vue/dialog.d.ts +4 -0
- package/dist/vue/dialog.js +6 -0
- package/dist/vue/divider.d.ts +4 -0
- package/dist/vue/divider.js +6 -0
- package/dist/vue/drawer-item.d.ts +3 -0
- package/dist/vue/drawer-item.js +5 -0
- package/dist/vue/drawer.d.ts +4 -0
- package/dist/vue/drawer.js +6 -0
- package/dist/vue/extended-fab.d.ts +4 -0
- package/dist/vue/extended-fab.js +6 -0
- package/dist/vue/fab-menu-item.d.ts +3 -0
- package/dist/vue/fab-menu-item.js +5 -0
- package/dist/vue/fab-menu.d.ts +6 -0
- package/dist/vue/fab-menu.js +8 -0
- package/dist/vue/fab.d.ts +4 -0
- package/dist/vue/fab.js +6 -0
- package/dist/vue/icon-button.d.ts +4 -0
- package/dist/vue/icon-button.js +6 -0
- package/dist/vue/index.d.ts +49 -33
- package/dist/vue/index.js +48 -32
- package/dist/vue/list-item.d.ts +3 -0
- package/dist/vue/list-item.js +5 -0
- package/dist/vue/list.d.ts +4 -0
- package/dist/vue/list.js +6 -0
- package/dist/vue/loading-indicator.d.ts +4 -0
- package/dist/vue/loading-indicator.js +6 -0
- package/dist/vue/menu-item.d.ts +3 -0
- package/dist/vue/menu-item.js +5 -0
- package/dist/vue/menu.d.ts +4 -0
- package/dist/vue/menu.js +6 -0
- package/dist/vue/navigation-rail-item.d.ts +3 -0
- package/dist/vue/navigation-rail-item.js +5 -0
- package/dist/vue/navigation-rail.d.ts +4 -0
- package/dist/vue/navigation-rail.js +6 -0
- package/dist/vue/progress.d.ts +4 -0
- package/dist/vue/progress.js +6 -0
- package/dist/vue/radio.d.ts +3 -0
- package/dist/vue/radio.js +5 -0
- package/dist/vue/radios.d.ts +4 -0
- package/dist/vue/radios.js +6 -0
- package/dist/vue/search-suggestion.d.ts +3 -0
- package/dist/vue/search-suggestion.js +5 -0
- package/dist/vue/search.d.ts +4 -0
- package/dist/vue/search.js +6 -0
- package/dist/vue/select-option.d.ts +3 -0
- package/dist/vue/select-option.js +5 -0
- package/dist/vue/select.d.ts +6 -0
- package/dist/vue/select.js +8 -0
- package/dist/vue/side-sheet.d.ts +4 -0
- package/dist/vue/side-sheet.js +6 -0
- package/dist/vue/slider.d.ts +4 -0
- package/dist/vue/slider.js +6 -0
- package/dist/vue/snackbar.d.ts +7 -0
- package/dist/vue/snackbar.js +9 -0
- package/dist/vue/split-button.d.ts +7 -0
- package/dist/vue/split-button.js +9 -0
- package/dist/vue/switch.d.ts +4 -0
- package/dist/vue/switch.js +6 -0
- package/dist/vue/tab.d.ts +3 -0
- package/dist/vue/tab.js +5 -0
- package/dist/vue/tabs.d.ts +7 -0
- package/dist/vue/tabs.js +9 -0
- package/dist/vue/textfield.d.ts +4 -0
- package/dist/vue/textfield.js +6 -0
- package/dist/vue/timepicker.d.ts +4 -0
- package/dist/vue/timepicker.js +6 -0
- package/dist/vue/toolbar.d.ts +5 -0
- package/dist/vue/toolbar.js +7 -0
- package/dist/vue/tooltip.d.ts +4 -0
- package/dist/vue/tooltip.js +6 -0
- package/dist/vue/top-app-bar.d.ts +4 -0
- package/dist/vue/top-app-bar.js +6 -0
- package/package.json +119 -20
- package/src/styles/abstract/_functions.scss +13 -1
- package/src/styles/abstract/_mixins.scss +16 -1
- package/src/styles/abstract/_theme.scss +4 -88
- package/src/styles/abstract/_variables.scss +20 -1
- package/src/styles/base/_tokens.scss +2 -13
- package/src/styles/base/_typography.scss +14 -70
- package/src/styles/components/_badge.scss +2 -2
- package/src/styles/components/_bottom-app-bar.scss +0 -4
- package/src/styles/components/_bottom-sheet.scss +68 -8
- package/src/styles/components/_button-group.scss +5 -2
- package/src/styles/components/_button.scss +29 -43
- package/src/styles/components/_card.scss +0 -2
- package/src/styles/components/_carousel.scss +2 -1
- package/src/styles/components/_datepicker.scss +4 -0
- package/src/styles/components/_dialog.scss +52 -0
- package/src/styles/components/_divider.scss +1 -1
- package/src/styles/components/_drawer.scss +53 -11
- package/src/styles/components/_fab-menu.scss +228 -0
- package/src/styles/components/_icon-button.scss +18 -14
- package/src/styles/components/_list.scss +3 -2
- package/src/styles/components/_menu.scss +22 -2
- package/src/styles/components/_navigation-rail.scss +5 -4
- package/src/styles/components/_search.scss +279 -273
- package/src/styles/components/_select.scss +9 -89
- package/src/styles/components/_side-sheet.scss +48 -4
- package/src/styles/components/_slider.scss +2 -2
- package/src/styles/components/_snackbar.scss +12 -0
- package/src/styles/components/_split-button.scss +5 -5
- package/src/styles/components/_switch.scss +1 -1
- package/src/styles/components/_textfield.scss +144 -93
- package/src/styles/components/_timepicker.scss +116 -139
- package/src/styles/components/_toolbar.scss +203 -0
- package/src/styles/components/_tooltip.scss +31 -12
- package/src/styles/elements/_badge.scss +12 -0
- package/src/styles/elements/_bottom-app-bar.scss +27 -0
- package/src/styles/elements/_bottom-sheet.scss +6 -0
- package/src/styles/elements/_button-group.scss +25 -0
- package/src/styles/elements/_button.scss +78 -0
- package/src/styles/elements/_card.scss +57 -0
- package/src/styles/elements/_carousel.scss +12 -0
- package/src/styles/elements/_checkbox.scss +38 -0
- package/src/styles/elements/_chips.scss +33 -0
- package/src/styles/elements/_config.scss +48 -0
- package/src/styles/elements/_datepicker.scss +31 -0
- package/src/styles/elements/_dialog.scss +6 -0
- package/src/styles/elements/_divider.scss +19 -0
- package/src/styles/elements/_drawer.scss +23 -0
- package/src/styles/elements/_extended-fab.scss +57 -0
- package/src/styles/elements/_fab-menu.scss +43 -0
- package/src/styles/elements/_fab.scss +33 -0
- package/src/styles/elements/_field.scss +111 -0
- package/src/styles/elements/_icon-button.scss +55 -0
- package/src/styles/elements/_index.scss +41 -0
- package/src/styles/elements/_list.scss +34 -0
- package/src/styles/elements/_loading-indicator.scss +13 -0
- package/src/styles/elements/_menu.scss +6 -0
- package/src/styles/elements/_navigation-rail.scss +24 -0
- package/src/styles/elements/_progress.scss +24 -0
- package/src/styles/elements/_radios.scss +23 -0
- package/src/styles/elements/_search.scss +36 -0
- package/src/styles/elements/_select.scss +15 -0
- package/src/styles/elements/_side-sheet.scss +6 -0
- package/src/styles/elements/_slider.scss +10 -0
- package/src/styles/elements/_snackbar.scss +6 -0
- package/src/styles/elements/_split-button.scss +53 -0
- package/src/styles/elements/_switch.scss +51 -0
- package/src/styles/elements/_tabs.scss +22 -0
- package/src/styles/elements/_textfield.scss +9 -0
- package/src/styles/elements/_timepicker.scss +6 -0
- package/src/styles/elements/_toolbar.scss +47 -0
- package/src/styles/elements/_tooltip.scss +6 -0
- package/src/styles/elements/_top-app-bar.scss +57 -0
- package/src/styles/main.scss +2 -0
- package/src/styles/themes/_autumn.scss +18 -17
- package/src/styles/themes/_base-theme.scss +29 -39
- package/src/styles/themes/_baseline.scss +58 -83
- package/src/styles/themes/_brownbeige.scss +95 -123
- package/src/styles/themes/_browngreen.scss +1 -49
- package/src/styles/themes/_content.scss +108 -0
- package/src/styles/themes/_desert.scss +94 -80
- package/src/styles/themes/_expressive.scss +108 -0
- package/src/styles/themes/_fidelity.scss +108 -0
- package/src/styles/themes/_forest.scss +19 -3
- package/src/styles/themes/_fruit-salad.scss +108 -0
- package/src/styles/themes/_highcontrast.scss +91 -149
- package/src/styles/themes/_legacy.scss +1 -2
- package/src/styles/themes/_material.scss +1 -50
- package/src/styles/themes/_monochrome.scss +108 -0
- package/src/styles/themes/_neutral.scss +108 -0
- package/src/styles/themes/_ocean.scss +19 -3
- package/src/styles/themes/_rainbow.scss +108 -0
- package/src/styles/themes/_sageivory.scss +95 -125
- package/src/styles/themes/_spring.scss +19 -3
- package/src/styles/themes/_summer.scss +95 -87
- package/src/styles/themes/_sunset.scss +19 -3
- package/src/styles/themes/_tealcaramel.scss +94 -124
- package/src/styles/themes/_vibrant.scss +108 -0
- package/src/styles/themes/_winter.scss +1 -3
- package/src/styles/themes/_bluekhaki.scss +0 -136
- package/src/styles/themes/_greenbeige.scss +0 -138
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { MenuComponent } from "../types.js";
|
|
2
2
|
import { MenuConfig, MenuControllerApi, MenuFeatureHost } from "../types.js";
|
|
3
|
+
import { MenuSubmenuApi } from "./loader.js";
|
|
3
4
|
/**
|
|
4
5
|
* Adds controller functionality to the menu component
|
|
5
6
|
* Manages state, rendering, positioning, and event handling
|
|
@@ -9,5 +10,6 @@ import { MenuConfig, MenuControllerApi, MenuFeatureHost } from "../types.js";
|
|
|
9
10
|
*/
|
|
10
11
|
declare const withController: (config: MenuConfig, getComponent: () => MenuComponent) => <C extends MenuFeatureHost>(component: C) => C & {
|
|
11
12
|
menu: MenuControllerApi;
|
|
13
|
+
submenu: MenuSubmenuApi;
|
|
12
14
|
};
|
|
13
15
|
export default withController;
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { createMenuTasks } from "./tasks.js";
|
|
2
2
|
import { menuOpened, menuClosed } from "./registry.js";
|
|
3
|
+
import { eventWithin } from "./layer.js";
|
|
4
|
+
import { createSubmenuLoader, hasNestedItems } from "./loader.js";
|
|
5
|
+
import { onTopLayerClose, showInTopLayer } from "../../../core/dom/layer.js";
|
|
3
6
|
import { setHTML } from "../../../core/dom/html.js";
|
|
7
|
+
const SCROLL_LISTENER = { capture: true, passive: true };
|
|
4
8
|
const withController = (config, getComponent) => (component) => {
|
|
5
9
|
const tasks = createMenuTasks();
|
|
10
|
+
const loader = createSubmenuLoader(config, component);
|
|
11
|
+
const submenu = loader.api;
|
|
12
|
+
if (hasNestedItems(config.items))
|
|
13
|
+
loader.load();
|
|
14
|
+
const topLayer = config.layer === "top";
|
|
15
|
+
let closing = false;
|
|
6
16
|
const listbox = config.listbox === true;
|
|
7
17
|
const optionIdPrefix = `${component.getClass("menu")}-${Math.random().toString(36).slice(2, 9)}`;
|
|
8
18
|
if (listbox) {
|
|
@@ -126,14 +136,10 @@ const withController = (config, getComponent) => (component) => {
|
|
|
126
136
|
});
|
|
127
137
|
if (item.hasSubmenu && config.openSubmenuOnHover) {
|
|
128
138
|
itemElement.addEventListener("mouseenter", () => {
|
|
129
|
-
|
|
130
|
-
component.submenu.handleSubmenuHover(item, index, itemElement);
|
|
131
|
-
}
|
|
139
|
+
submenu.handleSubmenuHover(item, index, itemElement);
|
|
132
140
|
});
|
|
133
141
|
itemElement.addEventListener("mouseleave", () => {
|
|
134
|
-
|
|
135
|
-
component.submenu.handleSubmenuLeave();
|
|
136
|
-
}
|
|
142
|
+
submenu.handleSubmenuLeave();
|
|
137
143
|
});
|
|
138
144
|
}
|
|
139
145
|
}
|
|
@@ -198,18 +204,24 @@ const withController = (config, getComponent) => (component) => {
|
|
|
198
204
|
}
|
|
199
205
|
return null;
|
|
200
206
|
};
|
|
207
|
+
const submenuActions = {
|
|
208
|
+
closeSubmenu: submenu.closeSubmenu,
|
|
209
|
+
handleSubmenuClick: submenu.handleSubmenuClick,
|
|
210
|
+
handleNestedSubmenuClick: submenu.handleNestedSubmenuClick,
|
|
211
|
+
};
|
|
201
212
|
const handleItemClick = (e, item, index) => {
|
|
202
213
|
e.preventDefault();
|
|
203
214
|
e.stopPropagation();
|
|
204
215
|
if (item.disabled)
|
|
205
216
|
return;
|
|
206
|
-
if (item.hasSubmenu
|
|
207
|
-
|
|
217
|
+
if (item.hasSubmenu) {
|
|
218
|
+
submenu.handleSubmenuClick(item, index, e.currentTarget);
|
|
208
219
|
return;
|
|
209
220
|
}
|
|
210
221
|
const selectEvent = eventHelpers.triggerEvent("select", {
|
|
211
222
|
item,
|
|
212
223
|
itemId: item.id,
|
|
224
|
+
value: item.id,
|
|
213
225
|
itemData: item.data,
|
|
214
226
|
}, e);
|
|
215
227
|
if (config.closeOnSelect && !selectEvent.defaultPrevented) {
|
|
@@ -253,9 +265,14 @@ const withController = (config, getComponent) => (component) => {
|
|
|
253
265
|
component.element.setAttribute("aria-hidden", "true");
|
|
254
266
|
component.element.style.transform = "scaleY(0)";
|
|
255
267
|
component.element.style.opacity = "0";
|
|
256
|
-
const
|
|
257
|
-
|
|
268
|
+
const opener = topLayer ? getOpenerElement() : null;
|
|
269
|
+
if (opener?.parentNode)
|
|
270
|
+
opener.after(component.element);
|
|
271
|
+
else
|
|
272
|
+
(config.container || document.body).appendChild(component.element);
|
|
258
273
|
}
|
|
274
|
+
if (topLayer)
|
|
275
|
+
showInTopLayer(component.element, { kind: "popover-manual" });
|
|
259
276
|
tasks.setTimeout(() => {
|
|
260
277
|
const openerElement = getOpenerElement();
|
|
261
278
|
if (openerElement && component.position) {
|
|
@@ -297,29 +314,27 @@ const withController = (config, getComponent) => (component) => {
|
|
|
297
314
|
window.addEventListener("resize", handleWindowResize, {
|
|
298
315
|
passive: true,
|
|
299
316
|
});
|
|
300
|
-
window.addEventListener("scroll", handleWindowScroll,
|
|
301
|
-
passive: true,
|
|
302
|
-
});
|
|
317
|
+
window.addEventListener("scroll", handleWindowScroll, SCROLL_LISTENER);
|
|
303
318
|
}, 0);
|
|
304
319
|
}, 20);
|
|
305
320
|
eventHelpers.triggerEvent("open", {}, event);
|
|
306
321
|
};
|
|
307
322
|
const closeMenu = (event, restoreFocus = true) => {
|
|
308
|
-
if (!state.visible)
|
|
323
|
+
if (!state.visible || (topLayer && closing))
|
|
309
324
|
return;
|
|
325
|
+
closing = true;
|
|
310
326
|
menuClosed(registryEntry);
|
|
311
327
|
component.emit("menu-closing", { event, restoreFocus });
|
|
312
|
-
|
|
313
|
-
component.submenu.closeAllSubmenus();
|
|
314
|
-
}
|
|
328
|
+
submenu.closeAllSubmenus();
|
|
315
329
|
tasks.setTimeout(() => {
|
|
316
330
|
state.visible = false;
|
|
331
|
+
closing = false;
|
|
317
332
|
component.element.setAttribute("aria-hidden", "true");
|
|
318
333
|
component.element.classList.remove(`${component.getClass("menu--visible")}`);
|
|
319
334
|
document.removeEventListener("click", handleDocumentClick);
|
|
320
335
|
document.removeEventListener("keydown", handleDocumentKeydown);
|
|
321
336
|
window.removeEventListener("resize", handleWindowResize);
|
|
322
|
-
window.removeEventListener("scroll", handleWindowScroll);
|
|
337
|
+
window.removeEventListener("scroll", handleWindowScroll, SCROLL_LISTENER);
|
|
323
338
|
eventHelpers.triggerEvent("close", {
|
|
324
339
|
restoreFocus: restoreFocus,
|
|
325
340
|
}, event);
|
|
@@ -347,17 +362,16 @@ const withController = (config, getComponent) => (component) => {
|
|
|
347
362
|
}
|
|
348
363
|
};
|
|
349
364
|
const handleDocumentClick = (e) => {
|
|
350
|
-
if (component.element
|
|
365
|
+
if (eventWithin(config, component.element, e)) {
|
|
351
366
|
return;
|
|
352
367
|
}
|
|
353
368
|
const opener = getOpenerElement();
|
|
354
|
-
if (opener && opener
|
|
369
|
+
if (opener && eventWithin(config, opener, e)) {
|
|
355
370
|
return;
|
|
356
371
|
}
|
|
357
|
-
if (
|
|
358
|
-
const
|
|
359
|
-
|
|
360
|
-
if (submenu.element.contains(e.target)) {
|
|
372
|
+
if (submenu.hasOpenSubmenu()) {
|
|
373
|
+
for (const open of submenu.getActiveSubmenus()) {
|
|
374
|
+
if (eventWithin(config, open.element, e)) {
|
|
361
375
|
return;
|
|
362
376
|
}
|
|
363
377
|
}
|
|
@@ -365,12 +379,11 @@ const withController = (config, getComponent) => (component) => {
|
|
|
365
379
|
closeMenu(e, false);
|
|
366
380
|
};
|
|
367
381
|
const handleDocumentKeydown = (e) => {
|
|
368
|
-
const isTargetInsideMenu = component.element
|
|
369
|
-
const isTargetInsideSubmenu =
|
|
370
|
-
|
|
371
|
-
component.submenu
|
|
382
|
+
const isTargetInsideMenu = eventWithin(config, component.element, e);
|
|
383
|
+
const isTargetInsideSubmenu = submenu.hasOpenSubmenu() &&
|
|
384
|
+
submenu
|
|
372
385
|
.getActiveSubmenus()
|
|
373
|
-
.some((s) => s.element
|
|
386
|
+
.some((s) => eventWithin(config, s.element, e));
|
|
374
387
|
if (state.visible) {
|
|
375
388
|
if (isTargetInsideMenu) {
|
|
376
389
|
if (e.key === "Escape") {
|
|
@@ -382,10 +395,8 @@ const withController = (config, getComponent) => (component) => {
|
|
|
382
395
|
if (component.keyboard && component.keyboard.handleMenuKeydown) {
|
|
383
396
|
component.keyboard.handleMenuKeydown(e, state, {
|
|
384
397
|
closeMenu,
|
|
385
|
-
closeSubmenu: component.submenu?.closeSubmenu,
|
|
386
398
|
findItemById,
|
|
387
|
-
|
|
388
|
-
handleNestedSubmenuClick: component.submenu?.handleNestedSubmenuClick,
|
|
399
|
+
...submenuActions,
|
|
389
400
|
});
|
|
390
401
|
}
|
|
391
402
|
else if (e.key === "Escape") {
|
|
@@ -397,10 +408,8 @@ const withController = (config, getComponent) => (component) => {
|
|
|
397
408
|
if (component.keyboard && component.keyboard.handleMenuKeydown) {
|
|
398
409
|
component.keyboard.handleMenuKeydown(e, state, {
|
|
399
410
|
closeMenu,
|
|
400
|
-
closeSubmenu: component.submenu?.closeSubmenu,
|
|
401
411
|
findItemById,
|
|
402
|
-
|
|
403
|
-
handleNestedSubmenuClick: component.submenu?.handleNestedSubmenuClick,
|
|
412
|
+
...submenuActions,
|
|
404
413
|
});
|
|
405
414
|
}
|
|
406
415
|
}
|
|
@@ -419,7 +428,9 @@ const withController = (config, getComponent) => (component) => {
|
|
|
419
428
|
}
|
|
420
429
|
}
|
|
421
430
|
};
|
|
422
|
-
const handleWindowScroll = () => {
|
|
431
|
+
const handleWindowScroll = (event) => {
|
|
432
|
+
if (event?.composedPath().includes(component.element))
|
|
433
|
+
return;
|
|
423
434
|
if (state.visible) {
|
|
424
435
|
tasks.requestAnimationFrame(() => {
|
|
425
436
|
const openerElement = getOpenerElement();
|
|
@@ -434,10 +445,8 @@ const withController = (config, getComponent) => (component) => {
|
|
|
434
445
|
if (!listbox && component.keyboard && component.keyboard.setupKeyboardHandlers) {
|
|
435
446
|
component.keyboard.setupKeyboardHandlers(component.element, state, {
|
|
436
447
|
closeMenu,
|
|
437
|
-
closeSubmenu: component.submenu?.closeSubmenu,
|
|
438
448
|
findItemById,
|
|
439
|
-
|
|
440
|
-
handleNestedSubmenuClick: component.submenu?.handleNestedSubmenuClick,
|
|
449
|
+
...submenuActions,
|
|
441
450
|
});
|
|
442
451
|
}
|
|
443
452
|
if (state.visible) {
|
|
@@ -453,7 +462,7 @@ const withController = (config, getComponent) => (component) => {
|
|
|
453
462
|
document.addEventListener("keydown", handleDocumentKeydown);
|
|
454
463
|
}
|
|
455
464
|
window.addEventListener("resize", handleWindowResize);
|
|
456
|
-
window.addEventListener("scroll", handleWindowScroll);
|
|
465
|
+
window.addEventListener("scroll", handleWindowScroll, SCROLL_LISTENER);
|
|
457
466
|
}
|
|
458
467
|
};
|
|
459
468
|
component.on("create-menu-items", (event) => {
|
|
@@ -478,23 +487,29 @@ const withController = (config, getComponent) => (component) => {
|
|
|
478
487
|
});
|
|
479
488
|
});
|
|
480
489
|
tasks.setTimeout(initMenu, 0);
|
|
490
|
+
const stopLayerClose = topLayer
|
|
491
|
+
? onTopLayerClose(component.element, () => closeMenu(undefined, false))
|
|
492
|
+
: null;
|
|
481
493
|
if (component.lifecycle) {
|
|
482
494
|
const originalDestroy = component.lifecycle.destroy || (() => { });
|
|
483
495
|
component.lifecycle.destroy = () => {
|
|
484
496
|
if (tasks.destroyed)
|
|
485
497
|
return;
|
|
486
498
|
tasks.destroy();
|
|
499
|
+
stopLayerClose?.();
|
|
487
500
|
state.visible = false;
|
|
488
501
|
menuClosed(registryEntry);
|
|
489
502
|
document.removeEventListener("click", handleDocumentClick);
|
|
490
503
|
document.removeEventListener("keydown", handleDocumentKeydown);
|
|
491
504
|
window.removeEventListener("resize", handleWindowResize);
|
|
492
|
-
window.removeEventListener("scroll", handleWindowScroll);
|
|
505
|
+
window.removeEventListener("scroll", handleWindowScroll, SCROLL_LISTENER);
|
|
506
|
+
loader.destroy();
|
|
493
507
|
originalDestroy.call(component.lifecycle);
|
|
494
508
|
};
|
|
495
509
|
}
|
|
496
510
|
return {
|
|
497
511
|
...component,
|
|
512
|
+
submenu,
|
|
498
513
|
menu: {
|
|
499
514
|
open: (event, interactionType) => {
|
|
500
515
|
openMenu(event, interactionType);
|
|
@@ -511,6 +526,8 @@ const withController = (config, getComponent) => (component) => {
|
|
|
511
526
|
isOpen: () => state.visible,
|
|
512
527
|
setItems: (items) => {
|
|
513
528
|
state.items = items;
|
|
529
|
+
if (hasNestedItems(items))
|
|
530
|
+
loader.load();
|
|
514
531
|
renderMenuItems();
|
|
515
532
|
return component;
|
|
516
533
|
},
|
|
@@ -2,5 +2,4 @@ import withController from "./controller.js";
|
|
|
2
2
|
import withOpener from "./opener.js";
|
|
3
3
|
import withPosition from "./position.js";
|
|
4
4
|
import withKeyboard from "./keyboard.js";
|
|
5
|
-
|
|
6
|
-
export { withController, withOpener, withPosition, withKeyboard, withSubmenu };
|
|
5
|
+
export { withController, withOpener, withPosition, withKeyboard };
|
|
@@ -2,5 +2,4 @@ import withController from "./controller.js";
|
|
|
2
2
|
import withOpener from "./opener.js";
|
|
3
3
|
import withPosition from "./position.js";
|
|
4
4
|
import withKeyboard from "./keyboard.js";
|
|
5
|
-
|
|
6
|
-
export { withController, withOpener, withPosition, withKeyboard, withSubmenu };
|
|
5
|
+
export { withController, withOpener, withPosition, withKeyboard };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createMenuTasks } from "./tasks.js";
|
|
2
|
+
import { activeElementOf } from "../../../core/dom/focus.js";
|
|
2
3
|
export const createKeyboardNavigation = (component) => {
|
|
3
4
|
const tasks = createMenuTasks();
|
|
4
5
|
let isTabNavigation = false;
|
|
@@ -43,7 +44,7 @@ export const createKeyboardNavigation = (component) => {
|
|
|
43
44
|
const ownerFilter = owner ? `[data-owner="${owner}"]` : "";
|
|
44
45
|
const scope = level <= 1
|
|
45
46
|
? component.element
|
|
46
|
-
:
|
|
47
|
+
: menuElement.getRootNode().querySelector(`.${component.getClass("menu--submenu")}${ownerFilter}[data-level="${level - 1}"]`);
|
|
47
48
|
return ((scope ?? component.element).querySelector(`.${component.getClass("menu__item")}[data-id="${parentId}"]`) ?? null);
|
|
48
49
|
};
|
|
49
50
|
const menuItems = (menuElement) => Array.from(menuElement.querySelectorAll(`.${component.getClass("menu__item")}`));
|
|
@@ -77,7 +78,7 @@ export const createKeyboardNavigation = (component) => {
|
|
|
77
78
|
const items = menuItems(menuElement);
|
|
78
79
|
if (items.length === 0)
|
|
79
80
|
return;
|
|
80
|
-
const focusedElement =
|
|
81
|
+
const focusedElement = activeElementOf(menuElement);
|
|
81
82
|
let focusedItemIndex = -1;
|
|
82
83
|
if (focusedElement && items.includes(focusedElement)) {
|
|
83
84
|
focusedItemIndex = items.indexOf(focusedElement);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MenuConfig } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Whether an event happened inside a node. A top-layer menu may render in a
|
|
4
|
+
* shadow root, and a document listener then sees the event retargeted to the
|
|
5
|
+
* host; the event's composed path still holds the node. The menu without a
|
|
6
|
+
* layer keeps the test it always had.
|
|
7
|
+
*/
|
|
8
|
+
export declare const eventWithin: (config: MenuConfig, node: Node, event: Event) => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Whether focus moving to `target` moved into a node. A top-layer menu may
|
|
11
|
+
* render in a shadow root other than its opener's (a menu element anchored
|
|
12
|
+
* to a button of the page): a focus event at the opener then names the
|
|
13
|
+
* shadow host the node is inside, not the node.
|
|
14
|
+
*/
|
|
15
|
+
export declare const focusWithin: (config: MenuConfig, node: Node, target: Node | null) => boolean;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const eventWithin = (config, node, event) => config.layer === "top"
|
|
2
|
+
? event.composedPath().includes(node)
|
|
3
|
+
: node.contains(event.target);
|
|
4
|
+
export const focusWithin = (config, node, target) => {
|
|
5
|
+
if (!target)
|
|
6
|
+
return false;
|
|
7
|
+
if (node.contains(target))
|
|
8
|
+
return true;
|
|
9
|
+
if (config.layer !== "top")
|
|
10
|
+
return false;
|
|
11
|
+
for (let root = node.getRootNode(); "host" in root; root = root.host.getRootNode()) {
|
|
12
|
+
if (root.host === target)
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
return false;
|
|
16
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { MenuConfig, MenuContent, MenuFeatureHost } from "../types.js";
|
|
2
|
+
/** What the submenu feature installs, as the rest of the menu calls it. */
|
|
3
|
+
export type MenuSubmenuApi = NonNullable<MenuFeatureHost["submenu"]>;
|
|
4
|
+
/** What the controller holds: the facade it installs, and the load it starts. */
|
|
5
|
+
export interface SubmenuLoader {
|
|
6
|
+
/** Installed as `component.submenu`, before and after the feature arrives. */
|
|
7
|
+
api: MenuSubmenuApi;
|
|
8
|
+
/** Starts fetching the feature. Later calls share the first load. */
|
|
9
|
+
load: () => void;
|
|
10
|
+
/** Drops queued interactions, and destroys the feature if it arrived. */
|
|
11
|
+
destroy: () => void;
|
|
12
|
+
}
|
|
13
|
+
/** True when an item opens a submenu: the only case that needs the feature. */
|
|
14
|
+
export declare const hasNestedItems: (items: MenuContent[] | undefined) => boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Loads the submenu feature on demand (FLO-310).
|
|
17
|
+
*
|
|
18
|
+
* The feature is most of what a menu with nested items adds, and a menu
|
|
19
|
+
* without them never uses it, so it is a chunk of its own rather than part of
|
|
20
|
+
* every menu. The controller starts the load as soon as it sees a nested item
|
|
21
|
+
* -- at creation, or in `setItems` -- so it has normally arrived before the
|
|
22
|
+
* menu is even opened.
|
|
23
|
+
*
|
|
24
|
+
* Until it has, `api` stands in for it. A click, hover or ArrowRight on a
|
|
25
|
+
* nested item is queued and replayed, in order, against the element the user
|
|
26
|
+
* acted on, once the feature is there. Closing the menu drops the queue, as
|
|
27
|
+
* does destroying it; a feature that arrives after `destroy` is not attached.
|
|
28
|
+
* The queries answer "nothing open", which is the truth before the feature
|
|
29
|
+
* exists.
|
|
30
|
+
*
|
|
31
|
+
* The feature gets a lifecycle of its own, destroyed from the controller's,
|
|
32
|
+
* so its cleanup runs where it did when it was composed in the pipe: after
|
|
33
|
+
* the controller's.
|
|
34
|
+
*/
|
|
35
|
+
export declare const createSubmenuLoader: (config: MenuConfig, component: MenuFeatureHost) => SubmenuLoader;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export const hasNestedItems = (items) => !!items?.some((item) => "hasSubmenu" in item && item.hasSubmenu === true);
|
|
2
|
+
export const createSubmenuLoader = (config, component) => {
|
|
3
|
+
let feature = null;
|
|
4
|
+
let loading = false;
|
|
5
|
+
let destroyed = false;
|
|
6
|
+
let queue = [];
|
|
7
|
+
const lifecycle = { destroy: () => { } };
|
|
8
|
+
const load = () => {
|
|
9
|
+
if (feature || loading || destroyed)
|
|
10
|
+
return;
|
|
11
|
+
loading = true;
|
|
12
|
+
import("./submenu.js").then(({ default: withSubmenu }) => {
|
|
13
|
+
loading = false;
|
|
14
|
+
if (destroyed)
|
|
15
|
+
return;
|
|
16
|
+
const submenu = withSubmenu(config)({ ...component, lifecycle }).submenu;
|
|
17
|
+
feature = submenu;
|
|
18
|
+
const waiting = queue;
|
|
19
|
+
queue = [];
|
|
20
|
+
waiting.forEach((action) => action(submenu));
|
|
21
|
+
}, (error) => {
|
|
22
|
+
loading = false;
|
|
23
|
+
queue = [];
|
|
24
|
+
console.error("Menu submenu feature failed to load:", error);
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
const interact = (action, itemElement) => {
|
|
28
|
+
if (feature) {
|
|
29
|
+
action(feature);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (destroyed)
|
|
33
|
+
return;
|
|
34
|
+
queue.push((submenu) => {
|
|
35
|
+
if (!itemElement || itemElement.isConnected)
|
|
36
|
+
action(submenu);
|
|
37
|
+
});
|
|
38
|
+
load();
|
|
39
|
+
};
|
|
40
|
+
const close = (action) => {
|
|
41
|
+
if (feature)
|
|
42
|
+
action(feature);
|
|
43
|
+
else
|
|
44
|
+
queue = [];
|
|
45
|
+
};
|
|
46
|
+
const api = {
|
|
47
|
+
handleSubmenuClick: (item, index, itemElement) => interact((s) => s.handleSubmenuClick(item, index, itemElement), itemElement),
|
|
48
|
+
handleNestedSubmenuClick: (item, index, itemElement) => interact((s) => s.handleNestedSubmenuClick(item, index, itemElement), itemElement),
|
|
49
|
+
handleSubmenuHover: (item, index, itemElement) => interact((s) => s.handleSubmenuHover(item, index, itemElement), itemElement),
|
|
50
|
+
handleSubmenuLeave: () => interact((s) => s.handleSubmenuLeave()),
|
|
51
|
+
closeSubmenu: (level) => close((s) => s.closeSubmenu(level)),
|
|
52
|
+
closeAllSubmenus: () => close((s) => s.closeAllSubmenus()),
|
|
53
|
+
hasOpenSubmenu: () => feature?.hasOpenSubmenu() ?? false,
|
|
54
|
+
getActiveSubmenus: () => feature?.getActiveSubmenus() ?? [],
|
|
55
|
+
};
|
|
56
|
+
const destroy = () => {
|
|
57
|
+
if (destroyed)
|
|
58
|
+
return;
|
|
59
|
+
destroyed = true;
|
|
60
|
+
queue = [];
|
|
61
|
+
lifecycle.destroy();
|
|
62
|
+
};
|
|
63
|
+
return { api, load, destroy };
|
|
64
|
+
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createMenuTasks } from "./tasks.js";
|
|
2
|
+
import { focusWithin } from "./layer.js";
|
|
2
3
|
const withOpener = (config) => (component) => {
|
|
3
4
|
const tasks = createMenuTasks();
|
|
4
5
|
let isTabNavigation = false;
|
|
@@ -211,7 +212,7 @@ const withOpener = (config) => (component) => {
|
|
|
211
212
|
return;
|
|
212
213
|
}
|
|
213
214
|
if (relatedTarget) {
|
|
214
|
-
if (component.element
|
|
215
|
+
if (focusWithin(config, component.element, relatedTarget)) {
|
|
215
216
|
return;
|
|
216
217
|
}
|
|
217
218
|
if (relatedTarget.getAttribute("aria-haspopup") === "true" ||
|
|
@@ -1,32 +1,35 @@
|
|
|
1
1
|
export const createPositioner = (component, config) => {
|
|
2
|
+
const VIEWPORT_MARGIN = 48;
|
|
3
|
+
const MIN_MENU_HEIGHT = 100;
|
|
2
4
|
const positionElement = (menuElement, openerElement, preferredPosition, isSubmenu = false) => {
|
|
3
5
|
if (!menuElement || !openerElement)
|
|
4
6
|
return;
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const
|
|
7
|
+
const topLayer = config.layer === "top";
|
|
8
|
+
const position = topLayer ? "fixed" : "absolute";
|
|
9
|
+
const hasContainer = !topLayer && config.container && config.container !== document.body;
|
|
10
|
+
menuElement.style.position = position;
|
|
11
|
+
const scrollX = hasContainer || topLayer
|
|
8
12
|
? 0
|
|
9
13
|
: window.pageXOffset || document.documentElement.scrollLeft;
|
|
10
|
-
const scrollY = hasContainer
|
|
14
|
+
const scrollY = hasContainer || topLayer
|
|
11
15
|
? 0
|
|
12
16
|
: window.pageYOffset || document.documentElement.scrollTop;
|
|
13
17
|
const openerRect = openerElement.getBoundingClientRect();
|
|
14
18
|
const tempMenu = menuElement.cloneNode(true);
|
|
15
19
|
tempMenu.style.visibility = "hidden";
|
|
16
20
|
tempMenu.style.display = "block";
|
|
17
|
-
tempMenu.style.position =
|
|
21
|
+
tempMenu.style.position = position;
|
|
18
22
|
tempMenu.style.top = "0";
|
|
19
23
|
tempMenu.style.left = "0";
|
|
20
24
|
tempMenu.style.transform = "none";
|
|
21
25
|
tempMenu.style.opacity = "0";
|
|
22
26
|
tempMenu.style.pointerEvents = "none";
|
|
23
|
-
|
|
24
|
-
tempMenu.style.maxHeight = config.maxHeight;
|
|
27
|
+
tempMenu.style.maxHeight = config.maxHeight ?? "";
|
|
25
28
|
tempMenu.classList.add(`${component.getClass("menu--visible")}`);
|
|
26
29
|
if (config.width === "100%" && !isSubmenu) {
|
|
27
30
|
tempMenu.style.width = `${openerRect.width}px`;
|
|
28
31
|
}
|
|
29
|
-
const measureContainer = config.container || document.body;
|
|
32
|
+
const measureContainer = (topLayer && menuElement.parentNode) || config.container || document.body;
|
|
30
33
|
measureContainer.appendChild(tempMenu);
|
|
31
34
|
const menuRect = tempMenu.getBoundingClientRect();
|
|
32
35
|
const viewportWidth = window.innerWidth;
|
|
@@ -97,6 +100,21 @@ export const createPositioner = (component, config) => {
|
|
|
97
100
|
break;
|
|
98
101
|
}
|
|
99
102
|
}
|
|
103
|
+
let height = menuRect.height;
|
|
104
|
+
let fitted = null;
|
|
105
|
+
if (!isSubmenu && /^(top|bottom)/.test(calculatedPosition)) {
|
|
106
|
+
const below = viewportHeight - openerRect.bottom - offset - VIEWPORT_MARGIN;
|
|
107
|
+
const above = openerRect.top - offset - VIEWPORT_MARGIN;
|
|
108
|
+
if (height > (calculatedPosition.startsWith("bottom") ? below : above)) {
|
|
109
|
+
calculatedPosition = calculatedPosition.replace(/^(top|bottom)/, below >= above ? "bottom" : "top");
|
|
110
|
+
}
|
|
111
|
+
const room = Math.max(calculatedPosition.startsWith("bottom") ? below : above, MIN_MENU_HEIGHT);
|
|
112
|
+
if (height > room) {
|
|
113
|
+
fitted = room;
|
|
114
|
+
height = room;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
menuElement.style.maxHeight = fitted !== null ? `${fitted}px` : (config.maxHeight ?? "");
|
|
100
118
|
const positionClasses = [
|
|
101
119
|
"position-top",
|
|
102
120
|
"position-bottom",
|
|
@@ -130,16 +148,16 @@ export const createPositioner = (component, config) => {
|
|
|
130
148
|
const offsetY = hasContainer ? -containerRect.top : scrollY;
|
|
131
149
|
switch (calculatedPosition) {
|
|
132
150
|
case "top-start":
|
|
133
|
-
top = openerRect.top + offsetY -
|
|
151
|
+
top = openerRect.top + offsetY - height - offset;
|
|
134
152
|
left = openerRect.left + offsetX;
|
|
135
153
|
break;
|
|
136
154
|
case "top":
|
|
137
|
-
top = openerRect.top + offsetY -
|
|
155
|
+
top = openerRect.top + offsetY - height - offset;
|
|
138
156
|
left =
|
|
139
157
|
openerRect.left + offsetX + openerRect.width / 2 - menuRect.width / 2;
|
|
140
158
|
break;
|
|
141
159
|
case "top-end":
|
|
142
|
-
top = openerRect.top + offsetY -
|
|
160
|
+
top = openerRect.top + offsetY - height - offset;
|
|
143
161
|
left = openerRect.right + offsetX - menuRect.width;
|
|
144
162
|
break;
|
|
145
163
|
case "right-start":
|
|
@@ -152,7 +170,7 @@ export const createPositioner = (component, config) => {
|
|
|
152
170
|
openerRect.top +
|
|
153
171
|
offsetY +
|
|
154
172
|
openerRect.height / 2 -
|
|
155
|
-
|
|
173
|
+
height / 2;
|
|
156
174
|
}
|
|
157
175
|
else {
|
|
158
176
|
top += offsetY;
|
|
@@ -160,7 +178,7 @@ export const createPositioner = (component, config) => {
|
|
|
160
178
|
left = openerRect.right + offsetX + offset;
|
|
161
179
|
break;
|
|
162
180
|
case "right-end":
|
|
163
|
-
top = openerRect.bottom + offsetY -
|
|
181
|
+
top = openerRect.bottom + offsetY - height;
|
|
164
182
|
left = openerRect.right + offsetX + offset;
|
|
165
183
|
break;
|
|
166
184
|
case "bottom-start":
|
|
@@ -186,7 +204,7 @@ export const createPositioner = (component, config) => {
|
|
|
186
204
|
openerRect.top +
|
|
187
205
|
offsetY +
|
|
188
206
|
openerRect.height / 2 -
|
|
189
|
-
|
|
207
|
+
height / 2;
|
|
190
208
|
}
|
|
191
209
|
else {
|
|
192
210
|
top += offsetY;
|
|
@@ -194,7 +212,7 @@ export const createPositioner = (component, config) => {
|
|
|
194
212
|
left = openerRect.left + offsetX - menuRect.width - offset;
|
|
195
213
|
break;
|
|
196
214
|
case "left-end":
|
|
197
|
-
top = openerRect.bottom + offsetY -
|
|
215
|
+
top = openerRect.bottom + offsetY - height;
|
|
198
216
|
left = openerRect.left + offsetX - menuRect.width - offset;
|
|
199
217
|
break;
|
|
200
218
|
}
|
|
@@ -204,34 +222,18 @@ export const createPositioner = (component, config) => {
|
|
|
204
222
|
if (config.width === "100%" && !isSubmenu) {
|
|
205
223
|
menuElement.style.width = `${openerRect.width}px`;
|
|
206
224
|
}
|
|
207
|
-
if (config.maxHeight) {
|
|
208
|
-
menuElement.style.maxHeight = config.maxHeight;
|
|
209
|
-
}
|
|
210
225
|
return;
|
|
211
226
|
}
|
|
212
227
|
const minTopSpacing = 48;
|
|
213
228
|
if (top - scrollY < minTopSpacing) {
|
|
214
229
|
top = minTopSpacing + scrollY;
|
|
215
230
|
}
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
const
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
menuElement.style.maxHeight = `${newMaxHeight}px`;
|
|
223
|
-
if (config.maxHeight) {
|
|
224
|
-
const configMaxHeight = parseInt(config.maxHeight, 10);
|
|
225
|
-
if (!isNaN(configMaxHeight) &&
|
|
226
|
-
configMaxHeight < parseInt(menuElement.style.maxHeight || "0", 10)) {
|
|
227
|
-
menuElement.style.maxHeight = config.maxHeight;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
if (config.maxHeight) {
|
|
233
|
-
menuElement.style.maxHeight = config.maxHeight;
|
|
234
|
-
}
|
|
231
|
+
const bottomEdge = top - scrollY + height;
|
|
232
|
+
if (fitted === null && bottomEdge > viewportHeight - VIEWPORT_MARGIN) {
|
|
233
|
+
const available = viewportHeight - (top - scrollY) - VIEWPORT_MARGIN;
|
|
234
|
+
const shrunk = Math.max(available, Math.min(height, MIN_MENU_HEIGHT));
|
|
235
|
+
const configured = config.maxHeight ? parseInt(config.maxHeight, 10) : NaN;
|
|
236
|
+
menuElement.style.maxHeight = `${Number.isNaN(configured) ? shrunk : Math.min(shrunk, configured)}px`;
|
|
235
237
|
}
|
|
236
238
|
if (config.width === "100%" && !isSubmenu) {
|
|
237
239
|
menuElement.style.width = `${openerRect.width}px`;
|
|
@@ -248,7 +250,7 @@ export const createPositioner = (component, config) => {
|
|
|
248
250
|
const positionMenu = (openerElement) => {
|
|
249
251
|
if (!openerElement || !component.element)
|
|
250
252
|
return;
|
|
251
|
-
positionElement(component.element, openerElement, config.position ?? "bottom-start", false);
|
|
253
|
+
positionElement(component.element, config.positionTarget ?? openerElement, config.position ?? "bottom-start", false);
|
|
252
254
|
};
|
|
253
255
|
const positionSubmenu = (submenuElement, parentItemElement, level = 1) => {
|
|
254
256
|
if (!submenuElement || !parentItemElement)
|