@shortfuse/materialdesignweb 0.7.6 → 0.9.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 +87 -90
- package/bin/mdw-css.js +1 -1
- package/components/Badge.js +14 -7
- package/components/Body.js +3 -0
- package/components/BottomAppBar.js +4 -13
- package/components/BottomSheet.js +424 -0
- package/components/Box.js +20 -28
- package/components/Button.js +85 -79
- package/components/Button.md +9 -9
- package/components/Card.js +60 -72
- package/components/Checkbox.js +33 -42
- package/components/CheckboxIcon.js +11 -29
- package/components/Chip.js +13 -11
- package/components/Dialog.js +214 -394
- package/components/DialogActions.js +2 -2
- package/components/Display.js +55 -0
- package/components/Divider.js +3 -3
- package/components/Fab.js +83 -18
- package/components/FabContainer.js +48 -0
- package/components/FilterChip.js +35 -33
- package/components/Grid.js +176 -0
- package/components/Headline.js +5 -28
- package/components/Icon.js +61 -76
- package/components/IconButton.js +72 -126
- package/components/Input.js +859 -1
- package/components/InputChip.js +161 -0
- package/components/Label.js +3 -0
- package/components/List.js +4 -6
- package/components/ListItem.js +46 -30
- package/components/ListOption.js +86 -53
- package/components/Listbox.js +248 -0
- package/components/Menu.js +69 -528
- package/components/MenuItem.js +33 -36
- package/components/NavBar.js +49 -86
- package/components/NavDrawer.js +16 -15
- package/components/NavDrawerItem.js +4 -5
- package/components/NavItem.js +58 -41
- package/components/NavRail.js +30 -20
- package/components/NavRailItem.js +8 -3
- package/components/Page.js +105 -0
- package/components/Pane.js +11 -274
- package/components/Popup.js +29 -0
- package/components/Progress.js +24 -23
- package/components/Radio.js +40 -36
- package/components/RadioIcon.js +12 -16
- package/components/Ripple.js +13 -10
- package/components/Root.js +209 -0
- package/components/Scrim.js +87 -0
- package/components/Search.js +77 -0
- package/components/SegmentedButton.js +33 -45
- package/components/SegmentedButtonGroup.js +25 -13
- package/components/Select.js +10 -11
- package/components/Shape.js +5 -65
- package/components/SideSheet.js +308 -0
- package/components/Slider.js +108 -78
- package/components/Snackbar.js +26 -21
- package/components/SnackbarContainer.js +42 -0
- package/components/Surface.js +17 -12
- package/components/Switch.js +45 -24
- package/components/SwitchIcon.js +49 -39
- package/components/Tab.js +64 -43
- package/components/TabContent.js +5 -3
- package/components/TabList.js +62 -34
- package/components/TabPanel.js +11 -8
- package/components/Table.js +116 -0
- package/components/TextArea.js +54 -50
- package/components/Title.js +4 -9
- package/components/Tooltip.js +44 -22
- package/components/TopAppBar.js +68 -172
- package/constants/shapes.js +36 -0
- package/constants/typography.js +127 -0
- package/core/Composition.js +1164 -645
- package/core/CompositionAdapter.js +314 -0
- package/core/CustomElement.js +701 -286
- package/core/css.js +121 -15
- package/core/customTypes.js +157 -40
- package/core/dom.js +17 -11
- package/{utils → core}/jsonMergePatch.js +42 -18
- package/core/observe.js +343 -244
- package/core/optimizations.js +23 -0
- package/core/template.js +19 -56
- package/core/uid.js +13 -0
- package/dist/index.min.js +85 -184
- package/dist/index.min.js.map +4 -4
- package/dist/meta.json +1 -1
- package/dom/HTMLOptionsCollectionProxy.js +106 -0
- package/loaders/palette.js +13 -0
- package/loaders/theme.js +12 -0
- package/mixins/AriaReflectorMixin.js +53 -14
- package/mixins/AriaToolbarMixin.js +5 -3
- package/mixins/ControlMixin.js +92 -41
- package/mixins/DelegatesFocusMixin.js +54 -0
- package/mixins/DensityMixin.js +2 -3
- package/mixins/ElevationMixin.js +62 -0
- package/mixins/FlexableMixin.js +67 -39
- package/mixins/FormAssociatedMixin.js +71 -16
- package/mixins/HyperlinkMixin.js +66 -0
- package/mixins/InputMixin.js +205 -39
- package/mixins/KeyboardNavMixin.js +22 -7
- package/mixins/NavigationListenerMixin.js +33 -0
- package/mixins/PopupMixin.js +725 -0
- package/mixins/RTLObserverMixin.js +0 -1
- package/mixins/ResizeObserverMixin.js +16 -5
- package/mixins/RippleMixin.js +11 -10
- package/mixins/ScrollListenerMixin.js +42 -33
- package/mixins/SemiStickyMixin.js +97 -0
- package/mixins/ShapeMaskedMixin.js +117 -0
- package/mixins/ShapeMixin.js +17 -194
- package/mixins/StateMixin.js +80 -39
- package/mixins/TextFieldMixin.js +139 -183
- package/mixins/ThemableMixin.js +71 -161
- package/mixins/TooltipTriggerMixin.js +292 -366
- package/mixins/TouchTargetMixin.js +5 -4
- package/mixins/TypographyMixin.js +121 -0
- package/package.json +111 -71
- package/services/rtl.js +10 -0
- package/services/svgAlias.js +17 -0
- package/{theming/index.js → services/theme.js} +25 -175
- package/types/bin/mdw-css.d.ts +3 -0
- package/types/bin/mdw-css.d.ts.map +1 -0
- package/types/components/Badge.d.ts +39 -0
- package/types/components/Badge.d.ts.map +1 -0
- package/types/components/Body.d.ts +29 -0
- package/types/components/Body.d.ts.map +1 -0
- package/types/components/BottomAppBar.d.ts +73 -0
- package/types/components/BottomAppBar.d.ts.map +1 -0
- package/types/components/BottomSheet.d.ts +109 -0
- package/types/components/BottomSheet.d.ts.map +1 -0
- package/types/components/Box.d.ts +16 -0
- package/types/components/Box.d.ts.map +1 -0
- package/types/components/Button.d.ts +714 -0
- package/types/components/Button.d.ts.map +1 -0
- package/types/components/Card.d.ts +412 -0
- package/types/components/Card.d.ts.map +1 -0
- package/types/components/Checkbox.d.ts +205 -0
- package/types/components/Checkbox.d.ts.map +1 -0
- package/types/components/CheckboxIcon.d.ts +44 -0
- package/types/components/CheckboxIcon.d.ts.map +1 -0
- package/types/components/Chip.d.ts +1425 -0
- package/types/components/Chip.d.ts.map +1 -0
- package/types/components/Dialog.d.ts +286 -0
- package/types/components/Dialog.d.ts.map +1 -0
- package/types/components/DialogActions.d.ts +4 -0
- package/types/components/DialogActions.d.ts.map +1 -0
- package/types/components/Display.d.ts +45 -0
- package/types/components/Display.d.ts.map +1 -0
- package/types/components/Divider.d.ts +10 -0
- package/types/components/Divider.d.ts.map +1 -0
- package/types/components/Fab.d.ts +741 -0
- package/types/components/Fab.d.ts.map +1 -0
- package/types/components/FabContainer.d.ts +10 -0
- package/types/components/FabContainer.d.ts.map +1 -0
- package/types/components/FilterChip.d.ts +4283 -0
- package/types/components/FilterChip.d.ts.map +1 -0
- package/types/components/Grid.d.ts +37 -0
- package/types/components/Grid.d.ts.map +1 -0
- package/types/components/Headline.d.ts +47 -0
- package/types/components/Headline.d.ts.map +1 -0
- package/types/components/Icon.d.ts +103 -0
- package/types/components/Icon.d.ts.map +1 -0
- package/types/components/IconButton.d.ts +1486 -0
- package/types/components/IconButton.d.ts.map +1 -0
- package/types/components/Input.d.ts +51288 -0
- package/types/components/Input.d.ts.map +1 -0
- package/types/components/InputChip.d.ts +243 -0
- package/types/components/InputChip.d.ts.map +1 -0
- package/types/components/Label.d.ts +29 -0
- package/types/components/Label.d.ts.map +1 -0
- package/types/components/List.d.ts +31 -0
- package/types/components/List.d.ts.map +1 -0
- package/types/components/ListItem.d.ts +349 -0
- package/types/components/ListItem.d.ts.map +1 -0
- package/types/components/ListOption.d.ts +1493 -0
- package/types/components/ListOption.d.ts.map +1 -0
- package/types/components/Listbox.d.ts +12012 -0
- package/types/components/Listbox.d.ts.map +1 -0
- package/types/components/Menu.d.ts +119 -0
- package/types/components/Menu.d.ts.map +1 -0
- package/types/components/MenuItem.d.ts +3109 -0
- package/types/components/MenuItem.d.ts.map +1 -0
- package/types/components/NavBar.d.ts +18 -0
- package/types/components/NavBar.d.ts.map +1 -0
- package/types/components/NavBarItem.d.ts +186 -0
- package/types/components/NavBarItem.d.ts.map +1 -0
- package/types/components/NavDrawer.d.ts +108 -0
- package/types/components/NavDrawer.d.ts.map +1 -0
- package/types/components/NavDrawerItem.d.ts +186 -0
- package/types/components/NavDrawerItem.d.ts.map +1 -0
- package/types/components/NavItem.d.ts +190 -0
- package/types/components/NavItem.d.ts.map +1 -0
- package/types/components/NavRail.d.ts +109 -0
- package/types/components/NavRail.d.ts.map +1 -0
- package/types/components/NavRailItem.d.ts +186 -0
- package/types/components/NavRailItem.d.ts.map +1 -0
- package/types/components/Page.d.ts +24 -0
- package/types/components/Page.d.ts.map +1 -0
- package/types/components/Pane.d.ts +44 -0
- package/types/components/Pane.d.ts.map +1 -0
- package/types/components/Popup.d.ts +76 -0
- package/types/components/Popup.d.ts.map +1 -0
- package/types/components/Progress.d.ts +19 -0
- package/types/components/Progress.d.ts.map +1 -0
- package/types/components/Radio.d.ts +199 -0
- package/types/components/Radio.d.ts.map +1 -0
- package/types/components/RadioIcon.d.ts +46 -0
- package/types/components/RadioIcon.d.ts.map +1 -0
- package/types/components/Ripple.d.ts +34 -0
- package/types/components/Ripple.d.ts.map +1 -0
- package/types/components/Root.d.ts +68 -0
- package/types/components/Root.d.ts.map +1 -0
- package/types/components/Scrim.d.ts +6 -0
- package/types/components/Scrim.d.ts.map +1 -0
- package/types/components/Search.d.ts +16 -0
- package/types/components/Search.d.ts.map +1 -0
- package/types/components/SegmentedButton.d.ts +718 -0
- package/types/components/SegmentedButton.d.ts.map +1 -0
- package/types/components/SegmentedButtonGroup.d.ts +44 -0
- package/types/components/SegmentedButtonGroup.d.ts.map +1 -0
- package/types/components/Select.d.ts +1361 -0
- package/types/components/Select.d.ts.map +1 -0
- package/types/components/Shape.d.ts +10 -0
- package/types/components/Shape.d.ts.map +1 -0
- package/types/components/SideSheet.d.ts +106 -0
- package/types/components/SideSheet.d.ts.map +1 -0
- package/types/components/Slider.d.ts +382 -0
- package/types/components/Slider.d.ts.map +1 -0
- package/types/components/Snackbar.d.ts +65 -0
- package/types/components/Snackbar.d.ts.map +1 -0
- package/types/components/SnackbarContainer.d.ts +6 -0
- package/types/components/SnackbarContainer.d.ts.map +1 -0
- package/types/components/Surface.d.ts +45 -0
- package/types/components/Surface.d.ts.map +1 -0
- package/types/components/Switch.d.ts +183 -0
- package/types/components/Switch.d.ts.map +1 -0
- package/types/components/SwitchIcon.d.ts +169 -0
- package/types/components/SwitchIcon.d.ts.map +1 -0
- package/types/components/Tab.d.ts +879 -0
- package/types/components/Tab.d.ts.map +1 -0
- package/types/components/TabContent.d.ts +122 -0
- package/types/components/TabContent.d.ts.map +1 -0
- package/types/components/TabList.d.ts +6266 -0
- package/types/components/TabList.d.ts.map +1 -0
- package/types/components/TabPanel.d.ts +28 -0
- package/types/components/TabPanel.d.ts.map +1 -0
- package/types/components/Table.d.ts +2 -0
- package/types/components/Table.d.ts.map +1 -0
- package/types/components/TextArea.d.ts +1394 -0
- package/types/components/TextArea.d.ts.map +1 -0
- package/types/components/Title.d.ts +47 -0
- package/types/components/Title.d.ts.map +1 -0
- package/types/components/Tooltip.d.ts +49 -0
- package/types/components/Tooltip.d.ts.map +1 -0
- package/types/components/TopAppBar.d.ts +130 -0
- package/types/components/TopAppBar.d.ts.map +1 -0
- package/types/constants/colorKeywords.d.ts +2 -0
- package/types/constants/colorKeywords.d.ts.map +1 -0
- package/types/constants/shapes.d.ts +38 -0
- package/types/constants/shapes.d.ts.map +1 -0
- package/types/constants/typography.d.ts +212 -0
- package/types/constants/typography.d.ts.map +1 -0
- package/types/core/Composition.d.ts +252 -0
- package/types/core/Composition.d.ts.map +1 -0
- package/types/core/CompositionAdapter.d.ts +92 -0
- package/types/core/CompositionAdapter.d.ts.map +1 -0
- package/types/core/CustomElement.d.ts +302 -0
- package/types/core/CustomElement.d.ts.map +1 -0
- package/types/core/css.d.ts +44 -0
- package/types/core/css.d.ts.map +1 -0
- package/types/core/customTypes.d.ts +26 -0
- package/types/core/customTypes.d.ts.map +1 -0
- package/types/core/dom.d.ts +32 -0
- package/types/core/dom.d.ts.map +1 -0
- package/types/core/jsonMergePatch.d.ts +31 -0
- package/types/core/jsonMergePatch.d.ts.map +1 -0
- package/types/core/observe.d.ts +113 -0
- package/types/core/observe.d.ts.map +1 -0
- package/types/core/optimizations.d.ts +7 -0
- package/types/core/optimizations.d.ts.map +1 -0
- package/types/core/template.d.ts +47 -0
- package/types/core/template.d.ts.map +1 -0
- package/types/core/uid.d.ts +6 -0
- package/types/core/uid.d.ts.map +1 -0
- package/types/dom/HTMLOptionsCollectionProxy.d.ts +18 -0
- package/types/dom/HTMLOptionsCollectionProxy.d.ts.map +1 -0
- package/types/index.d.ts +88 -0
- package/types/index.d.ts.map +1 -0
- package/types/loaders/palette.d.ts +2 -0
- package/types/loaders/palette.d.ts.map +1 -0
- package/types/loaders/theme.d.ts +2 -0
- package/types/loaders/theme.d.ts.map +1 -0
- package/types/mixins/AriaReflectorMixin.d.ts +23 -0
- package/types/mixins/AriaReflectorMixin.d.ts.map +1 -0
- package/types/mixins/AriaToolbarMixin.d.ts +32 -0
- package/types/mixins/AriaToolbarMixin.d.ts.map +1 -0
- package/types/mixins/ControlMixin.d.ts +124 -0
- package/types/mixins/ControlMixin.d.ts.map +1 -0
- package/types/mixins/DelegatesFocusMixin.d.ts +5 -0
- package/types/mixins/DelegatesFocusMixin.d.ts.map +1 -0
- package/types/mixins/DensityMixin.d.ts +5 -0
- package/types/mixins/DensityMixin.d.ts.map +1 -0
- package/types/mixins/ElevationMixin.d.ts +33 -0
- package/types/mixins/ElevationMixin.d.ts.map +1 -0
- package/types/mixins/FlexableMixin.d.ts +13 -0
- package/types/mixins/FlexableMixin.d.ts.map +1 -0
- package/types/mixins/FormAssociatedMixin.d.ts +122 -0
- package/types/mixins/FormAssociatedMixin.d.ts.map +1 -0
- package/types/mixins/HyperlinkMixin.d.ts +22 -0
- package/types/mixins/HyperlinkMixin.d.ts.map +1 -0
- package/types/mixins/InputMixin.d.ts +179 -0
- package/types/mixins/InputMixin.d.ts.map +1 -0
- package/types/mixins/KeyboardNavMixin.d.ts +47 -0
- package/types/mixins/KeyboardNavMixin.d.ts.map +1 -0
- package/types/mixins/NavigationListenerMixin.d.ts +8 -0
- package/types/mixins/NavigationListenerMixin.d.ts.map +1 -0
- package/types/mixins/PopupMixin.d.ts +82 -0
- package/types/mixins/PopupMixin.d.ts.map +1 -0
- package/types/mixins/RTLObserverMixin.d.ts +7 -0
- package/types/mixins/RTLObserverMixin.d.ts.map +1 -0
- package/types/mixins/ResizeObserverMixin.d.ts +12 -0
- package/types/mixins/ResizeObserverMixin.d.ts.map +1 -0
- package/types/mixins/RippleMixin.d.ts +92 -0
- package/types/mixins/RippleMixin.d.ts.map +1 -0
- package/types/mixins/ScrollListenerMixin.d.ts +41 -0
- package/types/mixins/ScrollListenerMixin.d.ts.map +1 -0
- package/types/mixins/SemiStickyMixin.d.ts +50 -0
- package/types/mixins/SemiStickyMixin.d.ts.map +1 -0
- package/types/mixins/ShapeMaskedMixin.d.ts +9 -0
- package/types/mixins/ShapeMaskedMixin.d.ts.map +1 -0
- package/types/mixins/ShapeMixin.d.ts +38 -0
- package/types/mixins/ShapeMixin.d.ts.map +1 -0
- package/types/mixins/StateMixin.d.ts +27 -0
- package/types/mixins/StateMixin.d.ts.map +1 -0
- package/types/mixins/TextFieldMixin.d.ts +1354 -0
- package/types/mixins/TextFieldMixin.d.ts.map +1 -0
- package/types/mixins/ThemableMixin.d.ts +9 -0
- package/types/mixins/ThemableMixin.d.ts.map +1 -0
- package/types/mixins/TooltipTriggerMixin.d.ts +106 -0
- package/types/mixins/TooltipTriggerMixin.d.ts.map +1 -0
- package/types/mixins/TouchTargetMixin.d.ts +3 -0
- package/types/mixins/TouchTargetMixin.d.ts.map +1 -0
- package/types/mixins/TypographyMixin.d.ts +17 -0
- package/types/mixins/TypographyMixin.d.ts.map +1 -0
- package/types/services/rtl.d.ts +3 -0
- package/types/services/rtl.d.ts.map +1 -0
- package/types/services/svgAlias.d.ts +13 -0
- package/types/services/svgAlias.d.ts.map +1 -0
- package/types/services/theme.d.ts +45 -0
- package/types/services/theme.d.ts.map +1 -0
- package/types/utils/cli.d.ts +3 -0
- package/types/utils/cli.d.ts.map +1 -0
- package/types/utils/function.d.ts +3 -0
- package/types/utils/function.d.ts.map +1 -0
- package/types/utils/jsx-runtime.d.ts +20 -0
- package/types/utils/jsx-runtime.d.ts.map +1 -0
- package/types/utils/material-color/blend.d.ts +34 -0
- package/types/utils/material-color/blend.d.ts.map +1 -0
- package/types/utils/material-color/hct/Cam16.d.ts +142 -0
- package/types/utils/material-color/hct/Cam16.d.ts.map +1 -0
- package/types/utils/material-color/hct/Hct.d.ts +93 -0
- package/types/utils/material-color/hct/Hct.d.ts.map +1 -0
- package/types/utils/material-color/hct/ViewingConditions.d.ts +69 -0
- package/types/utils/material-color/hct/ViewingConditions.d.ts.map +1 -0
- package/types/utils/material-color/hct/hctSolver.d.ts +30 -0
- package/types/utils/material-color/hct/hctSolver.d.ts.map +1 -0
- package/types/utils/material-color/helper.d.ts +8 -0
- package/types/utils/material-color/helper.d.ts.map +1 -0
- package/types/utils/material-color/palettes/CorePalette.d.ts +75 -0
- package/types/utils/material-color/palettes/CorePalette.d.ts.map +1 -0
- package/types/utils/material-color/palettes/TonalPalette.d.ts +38 -0
- package/types/utils/material-color/palettes/TonalPalette.d.ts.map +1 -0
- package/types/utils/material-color/scheme/Scheme.d.ts +264 -0
- package/types/utils/material-color/scheme/Scheme.d.ts.map +1 -0
- package/types/utils/material-color/utils/color.d.ts +172 -0
- package/types/utils/material-color/utils/color.d.ts.map +1 -0
- package/types/utils/material-color/utils/math.d.ts +94 -0
- package/types/utils/material-color/utils/math.d.ts.map +1 -0
- package/types/utils/pixelmatch.d.ts +22 -0
- package/types/utils/pixelmatch.d.ts.map +1 -0
- package/types/utils/popup.d.ts +106 -0
- package/types/utils/popup.d.ts.map +1 -0
- package/types/utils/searchParams.d.ts +3 -0
- package/types/utils/searchParams.d.ts.map +1 -0
- package/types/utils/svg.d.ts +7 -0
- package/types/utils/svg.d.ts.map +1 -0
- package/utils/{hct → material-color}/blend.js +8 -10
- package/utils/{hct → material-color/hct}/Cam16.js +196 -69
- package/utils/{hct → material-color/hct}/Hct.js +61 -19
- package/utils/{hct → material-color/hct}/ViewingConditions.js +3 -3
- package/utils/{hct → material-color/hct}/hctSolver.js +9 -16
- package/utils/{hct → material-color}/helper.js +11 -18
- package/utils/{hct → material-color/palettes}/CorePalette.js +79 -19
- package/utils/{hct → material-color/palettes}/TonalPalette.js +12 -4
- package/utils/material-color/scheme/Scheme.js +376 -0
- package/utils/{hct/colorUtils.js → material-color/utils/color.js} +61 -1
- package/utils/pixelmatch.js +360 -0
- package/utils/popup.js +127 -30
- package/utils/searchParams.js +19 -0
- package/components/ExtendedFab.js +0 -36
- package/components/Layout.js +0 -35
- package/components/ListSelect.js +0 -220
- package/components/Nav.js +0 -40
- package/components/Option.js +0 -91
- package/core/ICustomElement.d.ts +0 -291
- package/core/ICustomElement.js +0 -1
- package/core/identify.js +0 -40
- package/core/typings.d.ts +0 -136
- package/core/typings.js +0 -1
- package/mixins/SurfaceMixin.js +0 -181
- package/theming/loader.js +0 -22
- package/utils/hct/Scheme.js +0 -587
- /package/{utils/color_keywords.js → constants/colorKeywords.js} +0 -0
- /package/utils/{hct/mathUtils.js → material-color/utils/math.js} +0 -0
package/components/SwitchIcon.js
CHANGED
|
@@ -3,11 +3,14 @@ import './Shape.js';
|
|
|
3
3
|
import CustomElement from '../core/CustomElement.js';
|
|
4
4
|
import ShapeMixin from '../mixins/ShapeMixin.js';
|
|
5
5
|
import ThemableMixin from '../mixins/ThemableMixin.js';
|
|
6
|
+
import { loadGlobalStyles } from '../services/rtl.js';
|
|
7
|
+
|
|
8
|
+
loadGlobalStyles();
|
|
6
9
|
|
|
7
10
|
export default CustomElement
|
|
11
|
+
.extend()
|
|
8
12
|
.mixin(ThemableMixin)
|
|
9
13
|
.mixin(ShapeMixin)
|
|
10
|
-
.extend()
|
|
11
14
|
.observe({
|
|
12
15
|
selected: 'boolean',
|
|
13
16
|
icon: 'string',
|
|
@@ -41,7 +44,7 @@ export default CustomElement
|
|
|
41
44
|
return _active ? `${color}-container` : '';
|
|
42
45
|
},
|
|
43
46
|
_iconInk({ disabled, selected, color }) {
|
|
44
|
-
if (!selected) return 'surface-
|
|
47
|
+
if (!selected) return 'surface-container-highest';
|
|
45
48
|
if (disabled) return 'on-surface';
|
|
46
49
|
return `on-${color}-container`;
|
|
47
50
|
},
|
|
@@ -50,28 +53,29 @@ export default CustomElement
|
|
|
50
53
|
hasIcon({ icon, src, unselectedIcon, unselectedSrc }) {
|
|
51
54
|
return Boolean(icon || src || unselectedIcon || unselectedSrc);
|
|
52
55
|
},
|
|
56
|
+
iconVariation({ selected }) {
|
|
57
|
+
return selected ? 'filled' : null;
|
|
58
|
+
},
|
|
53
59
|
})
|
|
54
|
-
.html
|
|
55
|
-
<div id=
|
|
56
|
-
<
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
.html`
|
|
61
|
+
<div id=track selected={checked} disabled={disabled}>
|
|
62
|
+
<div id=thumb selected={checked} pressed={pressed} disabled={disabled}>
|
|
63
|
+
<mdw-box block id=thumb-shape selected={checked} pressed={pressed} hovered={hovered} focused={focused} icon={hasIcon}
|
|
64
|
+
color={_thumbColor} active={_active} ink={_thumbInk} disabled={disabled}></mdw-box>
|
|
65
|
+
<mdw-icon ink={_iconInk} class=icon id=icon src={src} selected={checked} icon={icon} variation={iconVariation}></mdw-icon>
|
|
66
|
+
<mdw-icon ink={_iconInk} class=icon id=selected-icon src={selectedIconSrc} selected={checked} icon={selectedIcon} variation=filled></mdw-icon>
|
|
67
|
+
<mdw-icon ink={_iconInk} class=icon id=unselected-icon src={unselectedIconSrc} selected={checked} icon={unselectedIcon}></mdw-icon>
|
|
68
|
+
<slot id=slot selected={checked}></slot>
|
|
69
|
+
</div>
|
|
62
70
|
</div>
|
|
63
71
|
`
|
|
72
|
+
.recompose(({ refs: { outline } }) => {
|
|
73
|
+
outline.removeAttribute('mdw-if');
|
|
74
|
+
outline.setAttribute('selected', '{checked}');
|
|
75
|
+
outline.setAttribute('errored', '{errored}');
|
|
76
|
+
outline.setAttribute('disabled', '{disabled}');
|
|
77
|
+
})
|
|
64
78
|
.on({
|
|
65
|
-
composed() {
|
|
66
|
-
const { outline, shape: track } = this.refs;
|
|
67
|
-
track.id = 'track';
|
|
68
|
-
track.setAttribute('selected', '{checked}');
|
|
69
|
-
track.setAttribute('disabled', '{disabled}');
|
|
70
|
-
outline.removeAttribute('_if');
|
|
71
|
-
outline.setAttribute('selected', '{checked}');
|
|
72
|
-
outline.setAttribute('errored', '{errored}');
|
|
73
|
-
outline.setAttribute('disabled', '{disabled}');
|
|
74
|
-
},
|
|
75
79
|
dragValueChanged(oldValue, newValue) {
|
|
76
80
|
if (newValue == null) {
|
|
77
81
|
this.refs.thumb.style.removeProperty('--mdw-switch__value');
|
|
@@ -115,7 +119,8 @@ export default CustomElement
|
|
|
115
119
|
position: absolute;
|
|
116
120
|
inset: 0;
|
|
117
121
|
|
|
118
|
-
background-color: rgb(var(--mdw-color__surface-
|
|
122
|
+
background-color: rgb(var(--mdw-color__surface-container-highest));
|
|
123
|
+
border-radius: inherit;
|
|
119
124
|
}
|
|
120
125
|
|
|
121
126
|
#track[selected] {
|
|
@@ -123,19 +128,17 @@ export default CustomElement
|
|
|
123
128
|
}
|
|
124
129
|
|
|
125
130
|
#track[disabled] {
|
|
126
|
-
|
|
131
|
+
background-color: rgba(var(--mdw-color__surface-container-highest), calc(0.12/0.38));
|
|
127
132
|
}
|
|
128
133
|
|
|
129
134
|
#track[disabled][selected] {
|
|
130
|
-
background-color:
|
|
135
|
+
background-color: rgba(var(--mdw-color__on-surface), calc(0.12/0.38));
|
|
131
136
|
}
|
|
132
137
|
|
|
133
138
|
#outline {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
drop-shadow(-1px 0px 0px currentColor)
|
|
138
|
-
drop-shadow(0px -1px 0px currentColor);
|
|
139
|
+
border-width: 2px;
|
|
140
|
+
|
|
141
|
+
z-index: 1;
|
|
139
142
|
|
|
140
143
|
color: rgb(var(--mdw-color__outline));
|
|
141
144
|
}
|
|
@@ -145,7 +148,7 @@ export default CustomElement
|
|
|
145
148
|
}
|
|
146
149
|
|
|
147
150
|
#outline[disabled] {
|
|
148
|
-
color:
|
|
151
|
+
color: rgba(var(--mdw-color__on-surface), calc(0.12/0.38));
|
|
149
152
|
}
|
|
150
153
|
|
|
151
154
|
#outline[selected] {
|
|
@@ -166,6 +169,7 @@ export default CustomElement
|
|
|
166
169
|
|
|
167
170
|
transform: translateX(calc(var(--mdw-dir, 1) * var(--mdw-switch__value) * (52px - 100%)));
|
|
168
171
|
|
|
172
|
+
border-radius: inherit;
|
|
169
173
|
aspect-ratio: 1/1;
|
|
170
174
|
}
|
|
171
175
|
|
|
@@ -198,6 +202,8 @@ export default CustomElement
|
|
|
198
202
|
|
|
199
203
|
transform: scale(calc(16/28));
|
|
200
204
|
z-index: 0;
|
|
205
|
+
|
|
206
|
+
border-radius:inherit;
|
|
201
207
|
}
|
|
202
208
|
|
|
203
209
|
#thumb-shape[icon] {
|
|
@@ -206,7 +212,7 @@ export default CustomElement
|
|
|
206
212
|
|
|
207
213
|
#thumb-shape:not([selected]) {
|
|
208
214
|
--mdw-bg: var(--mdw-color__outline);
|
|
209
|
-
--mdw-ink: var(--mdw-color__surface-
|
|
215
|
+
--mdw-ink: var(--mdw-color__surface-container-highest);
|
|
210
216
|
}
|
|
211
217
|
|
|
212
218
|
#thumb-shape[selected] {
|
|
@@ -221,12 +227,22 @@ export default CustomElement
|
|
|
221
227
|
transform: scale(1);
|
|
222
228
|
}
|
|
223
229
|
|
|
230
|
+
#thumb-shape[disabled] {
|
|
231
|
+
background-color: rgb(var(--mdw-color__on-surface));
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
#thumb-shape[disabled][selected] {
|
|
235
|
+
background-color: rgb(var(--mdw-color__surface));
|
|
236
|
+
}
|
|
237
|
+
|
|
224
238
|
/** Thumb Icons **/
|
|
225
239
|
|
|
226
240
|
.icon {
|
|
227
241
|
position: absolute;
|
|
228
|
-
|
|
229
|
-
|
|
242
|
+
/* stylelint-disable-next-line liberty/use-logical-spec */
|
|
243
|
+
top: 50%;
|
|
244
|
+
/* stylelint-disable-next-line liberty/use-logical-spec */
|
|
245
|
+
left: 50%;
|
|
230
246
|
|
|
231
247
|
opacity: 0;
|
|
232
248
|
transform: translateX(-50%) translateY(-50%);
|
|
@@ -237,13 +253,11 @@ export default CustomElement
|
|
|
237
253
|
}
|
|
238
254
|
|
|
239
255
|
.icon:not([src]):empty {
|
|
240
|
-
display: none;
|
|
256
|
+
/* display: none; */
|
|
241
257
|
}
|
|
242
258
|
|
|
243
259
|
#icon, #unselected-icon {
|
|
244
260
|
opacity: 1;
|
|
245
|
-
|
|
246
|
-
font-variation-settings: 'FILL' 0;
|
|
247
261
|
}
|
|
248
262
|
|
|
249
263
|
#unselected-icon[selected] {
|
|
@@ -254,10 +268,6 @@ export default CustomElement
|
|
|
254
268
|
opacity: 1;
|
|
255
269
|
}
|
|
256
270
|
|
|
257
|
-
#icon[selected] {
|
|
258
|
-
font-variation-settings: 'FILL' 1;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
271
|
#thumb[disabled] {
|
|
262
272
|
color: rgb(var(--mdw-color__on-surface));
|
|
263
273
|
}
|
package/components/Tab.js
CHANGED
|
@@ -3,42 +3,32 @@
|
|
|
3
3
|
import './Icon.js';
|
|
4
4
|
|
|
5
5
|
import CustomElement from '../core/CustomElement.js';
|
|
6
|
+
import { CHROME_VERSION } from '../core/dom.js';
|
|
7
|
+
import DelegatesFocusMixin from '../mixins/DelegatesFocusMixin.js';
|
|
8
|
+
import HyperlinkMixin from '../mixins/HyperlinkMixin.js';
|
|
6
9
|
import RippleMixin from '../mixins/RippleMixin.js';
|
|
7
10
|
import ScrollListenerMixin from '../mixins/ScrollListenerMixin.js';
|
|
8
11
|
import ShapeMixin from '../mixins/ShapeMixin.js';
|
|
9
12
|
import StateMixin from '../mixins/StateMixin.js';
|
|
10
13
|
|
|
11
14
|
export default CustomElement
|
|
15
|
+
.extend()
|
|
12
16
|
.mixin(ShapeMixin)
|
|
13
17
|
.mixin(StateMixin)
|
|
14
18
|
.mixin(RippleMixin)
|
|
15
19
|
.mixin(ScrollListenerMixin)
|
|
16
|
-
.
|
|
20
|
+
.mixin(HyperlinkMixin)
|
|
21
|
+
.mixin(DelegatesFocusMixin)
|
|
17
22
|
.define({
|
|
18
23
|
stateTargetElement() { return this.refs.anchor; },
|
|
19
|
-
/**
|
|
20
|
-
* Used to compute primary indicator size.
|
|
21
|
-
* Default to 24.
|
|
22
|
-
*/
|
|
23
|
-
labelMetrics() {
|
|
24
|
-
const slot = this.refs.slot;
|
|
25
|
-
let target = this.refs.slot;
|
|
26
|
-
if (!slot.clientWidth) target = this.refs.icon;
|
|
27
|
-
return {
|
|
28
|
-
width: target.clientWidth,
|
|
29
|
-
left: target.offsetLeft,
|
|
30
|
-
};
|
|
31
|
-
},
|
|
32
24
|
})
|
|
33
25
|
.set({
|
|
34
|
-
delegatesFocus: true,
|
|
35
26
|
stateLayer: true,
|
|
36
27
|
})
|
|
37
28
|
.observe({
|
|
38
29
|
active: 'boolean',
|
|
39
30
|
icon: 'string',
|
|
40
31
|
src: 'string',
|
|
41
|
-
href: 'string',
|
|
42
32
|
ariaLabel: 'string',
|
|
43
33
|
})
|
|
44
34
|
.methods({
|
|
@@ -46,26 +36,49 @@ export default CustomElement
|
|
|
46
36
|
focus(options) {
|
|
47
37
|
this.refs.anchor.focus(options);
|
|
48
38
|
},
|
|
39
|
+
computeLabelMetrics() {
|
|
40
|
+
const { slot, icon } = this.refs;
|
|
41
|
+
const target = slot.clientWidth ? slot : icon;
|
|
42
|
+
return {
|
|
43
|
+
width: target.clientWidth,
|
|
44
|
+
left: target.offsetLeft,
|
|
45
|
+
};
|
|
46
|
+
},
|
|
49
47
|
})
|
|
50
|
-
.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
48
|
+
.expressions({
|
|
49
|
+
anchorAriaControls({ href }) {
|
|
50
|
+
return href?.startsWith('#') ? href.slice(1) : null;
|
|
51
|
+
},
|
|
52
|
+
anchorAriaSelected({ active }) {
|
|
53
|
+
return `${active}`;
|
|
54
|
+
},
|
|
55
|
+
anchorAriaDisabled({ disabledState }) {
|
|
56
|
+
return `${disabledState}`;
|
|
57
|
+
},
|
|
58
|
+
anchorHref({ href }) {
|
|
59
|
+
return href ?? '#';
|
|
60
|
+
},
|
|
61
|
+
iconIf({ icon, src }) {
|
|
62
|
+
return icon || src;
|
|
63
|
+
},
|
|
64
|
+
iconVariation({ active }) {
|
|
65
|
+
return active ? 'filled' : null;
|
|
67
66
|
},
|
|
68
67
|
})
|
|
68
|
+
.html`
|
|
69
|
+
<mdw-icon mdw-if={iconIf} id=icon aria-hidden=true src={src} active={active} icon={icon} variation={iconVariation}></mdw-icon>
|
|
70
|
+
<slot id=slot></slot>
|
|
71
|
+
`
|
|
72
|
+
.recompose(({ refs: { anchor, icon, slot, state } }) => {
|
|
73
|
+
anchor.setAttribute('role', 'tab');
|
|
74
|
+
anchor.setAttribute('aria-label', '{ariaLabel}');
|
|
75
|
+
anchor.setAttribute('aria-controls', '{anchorAriaControls}');
|
|
76
|
+
anchor.setAttribute('aria-selected', '{anchorAriaSelected}');
|
|
77
|
+
anchor.setAttribute('aria-disabled', '{anchorAriaDisabled}');
|
|
78
|
+
anchor.setAttribute('disabled', '{disabledState}');
|
|
79
|
+
anchor.append(icon, slot);
|
|
80
|
+
state.setAttribute('state-disabled', 'focus');
|
|
81
|
+
})
|
|
69
82
|
.events({
|
|
70
83
|
keydown(event) {
|
|
71
84
|
if (event.key === ' ') {
|
|
@@ -88,11 +101,24 @@ export default CustomElement
|
|
|
88
101
|
return;
|
|
89
102
|
}
|
|
90
103
|
if (href.startsWith('#')) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
104
|
+
const root = /** @type {HTMLElement} */ (this.getRootNode());
|
|
105
|
+
/** @type {HTMLElement} */
|
|
106
|
+
const el = root.querySelector(href);
|
|
107
|
+
if (!el) {
|
|
108
|
+
console.warn('Unknown element', href);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
94
111
|
event.preventDefault();
|
|
95
|
-
|
|
112
|
+
// Chrome does not support scrolling two elements at the same time
|
|
113
|
+
// https://bugs.chromium.org/p/chromium/issues/detail?id=1430426
|
|
114
|
+
const behavior = CHROME_VERSION ? 'instant' : 'smooth';
|
|
115
|
+
|
|
116
|
+
el.scrollTo({ top: 0, behavior });
|
|
117
|
+
el.offsetParent.scrollTo({
|
|
118
|
+
// Scroll-snap will adjust with subpixel precision
|
|
119
|
+
left: el.offsetLeft,
|
|
120
|
+
behavior: 'smooth',
|
|
121
|
+
});
|
|
96
122
|
}
|
|
97
123
|
},
|
|
98
124
|
},
|
|
@@ -104,6 +130,7 @@ export default CustomElement
|
|
|
104
130
|
display: inline-flex;
|
|
105
131
|
|
|
106
132
|
min-inline-size: 64px;
|
|
133
|
+
flex: none;
|
|
107
134
|
|
|
108
135
|
cursor: pointer;
|
|
109
136
|
}
|
|
@@ -134,8 +161,6 @@ export default CustomElement
|
|
|
134
161
|
padding-block: 4px;
|
|
135
162
|
|
|
136
163
|
font-size: 24px;
|
|
137
|
-
font-variation-settings: 'FILL' 0;
|
|
138
|
-
|
|
139
164
|
}
|
|
140
165
|
|
|
141
166
|
#shape[disabled],
|
|
@@ -150,10 +175,6 @@ export default CustomElement
|
|
|
150
175
|
color: rgb(var(--mdw-ink));
|
|
151
176
|
}
|
|
152
177
|
|
|
153
|
-
#icon[active] {
|
|
154
|
-
font-variation-settings: 'FILL' 1;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
178
|
#slot {
|
|
158
179
|
display: block;
|
|
159
180
|
overflow-x: hidden;
|
package/components/TabContent.js
CHANGED
|
@@ -5,8 +5,8 @@ import ResizeObserverMixin from '../mixins/ResizeObserverMixin.js';
|
|
|
5
5
|
import TabPanel from './TabPanel.js';
|
|
6
6
|
|
|
7
7
|
export default CustomElement
|
|
8
|
-
.mixin(ResizeObserverMixin)
|
|
9
8
|
.extend()
|
|
9
|
+
.mixin(ResizeObserverMixin)
|
|
10
10
|
.set({
|
|
11
11
|
/** @type {InstanceType<TabPanel>[]} */
|
|
12
12
|
_panelNodes: [],
|
|
@@ -87,11 +87,12 @@ export default CustomElement
|
|
|
87
87
|
},
|
|
88
88
|
},
|
|
89
89
|
})
|
|
90
|
-
.html
|
|
90
|
+
.html`<slot id=slot></slot>`
|
|
91
91
|
.methods({
|
|
92
92
|
onResizeObserved() {
|
|
93
93
|
this._panelMetrics = null;
|
|
94
|
-
|
|
94
|
+
this.updatePanels();
|
|
95
|
+
// Resize should not change panel visibility (Chrome Bug?)
|
|
95
96
|
},
|
|
96
97
|
updatePanels() {
|
|
97
98
|
const start = this.scrollLeft;
|
|
@@ -120,6 +121,7 @@ export default CustomElement
|
|
|
120
121
|
// @ts-ignore Skip cast
|
|
121
122
|
this._panelNodes = slot.assignedElements()
|
|
122
123
|
.filter((el) => el.tagName === TabPanel.elementName.toUpperCase());
|
|
124
|
+
this._panelMetrics = null;
|
|
123
125
|
this.updatePanels();
|
|
124
126
|
},
|
|
125
127
|
},
|
package/components/TabList.js
CHANGED
|
@@ -4,18 +4,23 @@ import CustomElement from '../core/CustomElement.js';
|
|
|
4
4
|
import KeyboardNavMixin from '../mixins/KeyboardNavMixin.js';
|
|
5
5
|
import RTLObserverMixin from '../mixins/RTLObserverMixin.js';
|
|
6
6
|
import ResizeObserverMixin from '../mixins/ResizeObserverMixin.js';
|
|
7
|
+
import SemiStickyMixin from '../mixins/SemiStickyMixin.js';
|
|
7
8
|
import ShapeMixin from '../mixins/ShapeMixin.js';
|
|
8
9
|
import ThemableMixin from '../mixins/ThemableMixin.js';
|
|
9
10
|
|
|
10
11
|
import Tab from './Tab.js';
|
|
11
12
|
|
|
12
13
|
export default CustomElement
|
|
14
|
+
.extend()
|
|
13
15
|
.mixin(ThemableMixin)
|
|
14
16
|
.mixin(KeyboardNavMixin)
|
|
15
17
|
.mixin(ResizeObserverMixin)
|
|
16
18
|
.mixin(RTLObserverMixin)
|
|
17
19
|
.mixin(ShapeMixin)
|
|
18
|
-
.
|
|
20
|
+
.mixin(SemiStickyMixin)
|
|
21
|
+
.observe({
|
|
22
|
+
scrollable: 'boolean',
|
|
23
|
+
})
|
|
19
24
|
.set({
|
|
20
25
|
/** @type {WeakRef<HTMLElement>} */
|
|
21
26
|
_tabContentRef: null,
|
|
@@ -29,6 +34,7 @@ export default CustomElement
|
|
|
29
34
|
* right:number,
|
|
30
35
|
* center: number,
|
|
31
36
|
* label: {left:number, width:number},
|
|
37
|
+
* tab: InstanceType<Tab>,
|
|
32
38
|
* index: number,
|
|
33
39
|
* }[]}
|
|
34
40
|
*/
|
|
@@ -58,16 +64,7 @@ export default CustomElement
|
|
|
58
64
|
},
|
|
59
65
|
})
|
|
60
66
|
.observe({
|
|
61
|
-
tabContentId:
|
|
62
|
-
/**
|
|
63
|
-
* @param {string} oldValue
|
|
64
|
-
* @param {string} newValue
|
|
65
|
-
*/
|
|
66
|
-
changedCallback(oldValue, newValue) {
|
|
67
|
-
// @ts-ignore Skip cast
|
|
68
|
-
this.tabContent = newValue ? document.getElementById(newValue) : null;
|
|
69
|
-
},
|
|
70
|
-
},
|
|
67
|
+
tabContentId: 'string',
|
|
71
68
|
active: 'boolean',
|
|
72
69
|
secondary: 'boolean',
|
|
73
70
|
_indicatorStyle: { value: 'opacity: 0' },
|
|
@@ -108,14 +105,20 @@ export default CustomElement
|
|
|
108
105
|
},
|
|
109
106
|
tabMetrics() {
|
|
110
107
|
// eslint-disable-next-line no-return-assign
|
|
111
|
-
return this._tabMetrics ??= [...this.tabs].map((tab, index) =>
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
108
|
+
return this._tabMetrics ??= [...this.tabs].map((tab, index) => {
|
|
109
|
+
if (!(tab instanceof Tab)) {
|
|
110
|
+
customElements.upgrade(tab);
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
left: tab.offsetLeft,
|
|
114
|
+
width: tab.offsetWidth,
|
|
115
|
+
right: tab.offsetLeft + tab.offsetWidth,
|
|
116
|
+
center: tab.offsetLeft + (tab.offsetWidth / 2),
|
|
117
|
+
label: tab.computeLabelMetrics(),
|
|
118
|
+
tab,
|
|
119
|
+
index,
|
|
120
|
+
};
|
|
121
|
+
});
|
|
119
122
|
},
|
|
120
123
|
selectedIndex: {
|
|
121
124
|
get() {
|
|
@@ -172,12 +175,19 @@ export default CustomElement
|
|
|
172
175
|
clearCache() {
|
|
173
176
|
this._tabMetrics = null;
|
|
174
177
|
},
|
|
178
|
+
searchForTabContent() {
|
|
179
|
+
const { tabContentId, isConnected } = this;
|
|
180
|
+
if (!tabContentId) return;
|
|
181
|
+
if (!isConnected) return;
|
|
182
|
+
this.tabContent = this.getRootNode().getElementById(tabContentId);
|
|
183
|
+
},
|
|
175
184
|
/** @param {InstanceType<Tab>} [tab] */
|
|
176
185
|
updateIndicatorByTab(tab) {
|
|
177
186
|
tab ??= this.selectedItem ?? this.tabs.item(0);
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
const
|
|
187
|
+
const metrics = this.tabMetrics.find((m) => m.tab === tab);
|
|
188
|
+
if (!metrics) return;
|
|
189
|
+
const width = this.secondary ? metrics.width : metrics.label.width;
|
|
190
|
+
const position = this.secondary ? metrics.left : metrics.left + metrics.label.left;
|
|
181
191
|
this._indicatorStyle = `--width: ${width}; --offset: ${position}px`;
|
|
182
192
|
},
|
|
183
193
|
updateIndicator(animate = false) {
|
|
@@ -208,7 +218,7 @@ export default CustomElement
|
|
|
208
218
|
let center;
|
|
209
219
|
if (leftMetrics === rightMetrics) {
|
|
210
220
|
width = this.secondary ? leftMetrics.width : leftMetrics.label.width;
|
|
211
|
-
activeTab =
|
|
221
|
+
activeTab = leftMetrics.tab;
|
|
212
222
|
center = leftMetrics.center;
|
|
213
223
|
} else {
|
|
214
224
|
const leftRatio = 1 - (decimalIndex - leftIndex);
|
|
@@ -218,7 +228,7 @@ export default CustomElement
|
|
|
218
228
|
const activeIndex = leftRatio > rightRatio ? leftIndex : rightIndex;
|
|
219
229
|
const distance = rightMetrics.center - leftMetrics.center;
|
|
220
230
|
width = leftWidth + rightWidth;
|
|
221
|
-
activeTab = this.
|
|
231
|
+
activeTab = this.tabMetrics[activeIndex].tab;
|
|
222
232
|
center = leftMetrics.center + (distance * rightRatio);
|
|
223
233
|
}
|
|
224
234
|
|
|
@@ -257,8 +267,8 @@ export default CustomElement
|
|
|
257
267
|
.set({
|
|
258
268
|
ariaRole: 'tablist',
|
|
259
269
|
})
|
|
260
|
-
.html
|
|
261
|
-
<slot id=slot ink={ink} type-style={typeStyle}></slot>
|
|
270
|
+
.html`
|
|
271
|
+
<slot id=slot ink={ink} type-style={typeStyle} scrollable={scrollable}></slot>
|
|
262
272
|
<div id=indicator aria-hidden=true style={_indicatorStyle} active={active} secondary={secondary}>
|
|
263
273
|
<div id=indicator-start class=indicator-piece></div>
|
|
264
274
|
<div id=indicator-center class=indicator-piece></div>
|
|
@@ -266,9 +276,11 @@ export default CustomElement
|
|
|
266
276
|
</div>
|
|
267
277
|
`
|
|
268
278
|
.on({
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
279
|
+
constructed() {
|
|
280
|
+
document.addEventListener('DOMContentLoaded', () => this.searchForTabContent(), { once: true });
|
|
281
|
+
},
|
|
282
|
+
connected() {
|
|
283
|
+
this.searchForTabContent();
|
|
272
284
|
},
|
|
273
285
|
pageIsRTLChanged() {
|
|
274
286
|
this.clearCache();
|
|
@@ -286,6 +298,9 @@ export default CustomElement
|
|
|
286
298
|
_selectedIndexChanged(oldValue, newValue) {
|
|
287
299
|
this.updateIndicatorByIndex(newValue);
|
|
288
300
|
},
|
|
301
|
+
tabContentIdChanged() {
|
|
302
|
+
this.searchForTabContent();
|
|
303
|
+
},
|
|
289
304
|
})
|
|
290
305
|
.events({
|
|
291
306
|
'~click'({ target }) {
|
|
@@ -301,6 +316,7 @@ export default CustomElement
|
|
|
301
316
|
slotchange() {
|
|
302
317
|
this.clearCache();
|
|
303
318
|
this.updateIndicator();
|
|
319
|
+
this.searchForTabContent();
|
|
304
320
|
},
|
|
305
321
|
},
|
|
306
322
|
})
|
|
@@ -309,7 +325,7 @@ export default CustomElement
|
|
|
309
325
|
|
|
310
326
|
:host {
|
|
311
327
|
--mdw-ink: var(--mdw-color__primary);
|
|
312
|
-
--mdw-
|
|
328
|
+
--mdw-bg: var(--mdw-color__surface);
|
|
313
329
|
position: relative;
|
|
314
330
|
position: sticky;
|
|
315
331
|
inset-block-start: 0;
|
|
@@ -327,6 +343,8 @@ export default CustomElement
|
|
|
327
343
|
inline-size: 100%;
|
|
328
344
|
flex:none;
|
|
329
345
|
|
|
346
|
+
z-index: 4;
|
|
347
|
+
|
|
330
348
|
color: inherit;
|
|
331
349
|
|
|
332
350
|
text-align: center;
|
|
@@ -334,6 +352,10 @@ export default CustomElement
|
|
|
334
352
|
will-change: transform;
|
|
335
353
|
}
|
|
336
354
|
|
|
355
|
+
:host(:where([color])) {
|
|
356
|
+
background-color: rgb(var(--mdw-bg));
|
|
357
|
+
}
|
|
358
|
+
|
|
337
359
|
#indicator {
|
|
338
360
|
--corner: 3;
|
|
339
361
|
--width: 24;
|
|
@@ -428,11 +450,17 @@ export default CustomElement
|
|
|
428
450
|
}
|
|
429
451
|
|
|
430
452
|
:host([scrollable]) {
|
|
431
|
-
|
|
432
|
-
justify-content:
|
|
433
|
-
|
|
453
|
+
display: flex;
|
|
454
|
+
justify-content: initial;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
#slot[scrollable] {
|
|
458
|
+
display: inline-flex;
|
|
459
|
+
|
|
460
|
+
inline-size: 0;
|
|
461
|
+
flex: 1;
|
|
434
462
|
|
|
435
|
-
padding-inline: 48px
|
|
463
|
+
padding-inline: 48px;
|
|
436
464
|
}
|
|
437
465
|
`
|
|
438
466
|
.autoRegister('mdw-tab-list');
|
package/components/TabPanel.js
CHANGED
|
@@ -3,8 +3,8 @@ import AriaReflectorMixin from '../mixins/AriaReflectorMixin.js';
|
|
|
3
3
|
import Box from './Box.js';
|
|
4
4
|
|
|
5
5
|
export default Box
|
|
6
|
-
.mixin(AriaReflectorMixin)
|
|
7
6
|
.extend()
|
|
7
|
+
.mixin(AriaReflectorMixin)
|
|
8
8
|
.set({
|
|
9
9
|
_ariaRole: 'tabpanel',
|
|
10
10
|
})
|
|
@@ -17,21 +17,24 @@ export default Box
|
|
|
17
17
|
},
|
|
18
18
|
peeking: 'boolean',
|
|
19
19
|
})
|
|
20
|
-
.css
|
|
20
|
+
.css`
|
|
21
21
|
:host {
|
|
22
|
+
overflow-y: auto;
|
|
22
23
|
scroll-snap-align: center;
|
|
23
|
-
|
|
24
|
-
max-inline-size: 100%;
|
|
24
|
+
|
|
25
25
|
min-block-size: 100%;
|
|
26
26
|
max-block-size: 100%;
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
min-inline-size: 100%;
|
|
28
|
+
max-inline-size: 100%;
|
|
29
29
|
|
|
30
|
-
visibility: hidden;
|
|
30
|
+
visibility: hidden;
|
|
31
|
+
|
|
32
|
+
will-change: visibility;
|
|
31
33
|
}
|
|
34
|
+
|
|
32
35
|
:host(:is([active],[peeking])) {
|
|
33
36
|
/* Safari bug: Visiblity not changing without !important or layout reflow */
|
|
34
|
-
visibility:
|
|
37
|
+
visibility: inherit !important;
|
|
35
38
|
}
|
|
36
39
|
`
|
|
37
40
|
.autoRegister('mdw-tab-panel');
|