@telefonica/mistica 17.2.0 → 17.4.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/css/blau.css +30 -16
- package/css/community/cyber.css +1491 -0
- package/css/esimflag.css +41 -18
- package/css/mistica-common.css +6 -0
- package/css/mistica.css +1 -1
- package/css/movistar.css +35 -18
- package/css/o2.css +32 -18
- package/css/telefonica.css +44 -18
- package/css/vivo-evolution.css +72 -20
- package/css/vivo.css +32 -18
- package/dist/accordion.css-mistica.js +10 -10
- package/dist/align.css-mistica.js +1 -1
- package/dist/autocomplete.css-mistica.js +4 -4
- package/dist/avatar.css-mistica.js +1 -1
- package/dist/badge.css-mistica.js +1 -1
- package/dist/box.css-mistica.js +13 -13
- package/dist/boxed.css-mistica.js +24 -24
- package/dist/boxed.d.ts +9 -0
- package/dist/boxed.js +18 -15
- package/dist/button-group.css-mistica.js +1 -1
- package/dist/button-layout.css-mistica.js +19 -19
- package/dist/button.css-mistica.js +50 -50
- package/dist/callout.css-mistica.js +13 -13
- package/dist/card-internal.css-mistica.js +22 -22
- package/dist/carousel.css-mistica.js +30 -30
- package/dist/checkbox.css-mistica.js +15 -15
- package/dist/chip.css-mistica.js +18 -18
- package/dist/circle.css-mistica.js +2 -2
- package/dist/community/advanced-data-card.css-mistica.js +19 -19
- package/dist/community/ai-card.css-mistica.js +9 -9
- package/dist/community/blocks.css-mistica.js +3 -3
- package/dist/community/cyber/example-component.css-mistica.js +1 -1
- package/dist/community/example-component.css-mistica.js +1 -1
- package/dist/community/skins/cyber-skin.d.ts +5 -0
- package/dist/community/skins/cyber-skin.js +289 -256
- package/dist/counter.css-mistica.js +6 -6
- package/dist/cover-hero.css-mistica.js +7 -7
- package/dist/credit-card-number-field.css-mistica.js +3 -3
- package/dist/date-field.css-mistica.js +1 -1
- package/dist/date-time-picker.css-mistica.js +1 -1
- package/dist/dialog.css-mistica.js +10 -10
- package/dist/divider.css-mistica.js +5 -5
- package/dist/double-field.css-mistica.js +2 -2
- package/dist/drawer.css-mistica.js +4 -4
- package/dist/empty-state-card.css-mistica.js +1 -1
- package/dist/empty-state.css-mistica.js +8 -8
- package/dist/fade-in.css-mistica.js +1 -1
- package/dist/feedback.css-mistica.js +5 -5
- package/dist/file-upload.css-mistica.js +10 -10
- package/dist/fixed-footer-layout.css-mistica.js +6 -6
- package/dist/form.css-mistica.js +1 -1
- package/dist/generated/mistica-icons/icon-panel-collapse-regular.js +165 -0
- package/dist/generated/mistica-icons/icon-panel-expand-regular.js +159 -0
- package/dist/grid-layout.css-mistica.js +3 -3
- package/dist/grid.css-mistica.js +120 -120
- package/dist/header.css-mistica.js +1 -1
- package/dist/hero.css-mistica.js +4 -4
- package/dist/horizontal-scroll.css-mistica.js +1 -1
- package/dist/icon-button.css-mistica.js +53 -53
- package/dist/icons/icon-chevron.css-mistica.js +2 -2
- package/dist/icons/icon-error.css-mistica.js +1 -1
- package/dist/image.css-mistica.js +8 -8
- package/dist/index.d.ts +5 -0
- package/dist/index.js +10 -1
- package/dist/inline.css-mistica.js +11 -11
- package/dist/list.css-mistica.js +40 -28
- package/dist/list.css.d.ts +2 -0
- package/dist/list.d.ts +3 -1
- package/dist/list.js +176 -165
- package/dist/loading-bar.css-mistica.js +1 -1
- package/dist/loading-screen.css-mistica.js +12 -12
- package/dist/logo-movistar.js +1 -1
- package/dist/logo.css-mistica.js +5 -5
- package/dist/menu.css-mistica.js +13 -13
- package/dist/mobile-navigation-menu.d.ts +26 -0
- package/dist/mobile-navigation-menu.js +145 -0
- package/dist/mosaic.css-mistica.js +1 -1
- package/dist/navigation-bar.css-mistica.js +31 -97
- package/dist/navigation-bar.css.d.ts +0 -24
- package/dist/navigation-bar.d.ts +3 -38
- package/dist/navigation-bar.js +399 -586
- package/dist/navigation-breadcrumbs.css-mistica.js +1 -1
- package/dist/navigation-shared.css-mistica.js +79 -0
- package/dist/navigation-shared.css.d.ts +26 -0
- package/dist/navigation-shared.d.ts +66 -0
- package/dist/navigation-shared.js +264 -0
- package/dist/package-version.js +1 -1
- package/dist/pagination.css-mistica.js +22 -22
- package/dist/pin-field.css-mistica.js +4 -4
- package/dist/popover.css-mistica.js +1 -1
- package/dist/portal.d.ts +1 -1
- package/dist/progress-bar.css-mistica.js +7 -7
- package/dist/radio-button.css-mistica.js +27 -27
- package/dist/rating.css-mistica.js +4 -4
- package/dist/responsive-layout.css-mistica.js +6 -6
- package/dist/screen-reader-only.css-mistica.js +1 -1
- package/dist/select.css-mistica.js +21 -21
- package/dist/sheet-action-row.css-mistica.js +1 -1
- package/dist/sheet-common.css-mistica.js +7 -7
- package/dist/sheet-info.css-mistica.js +1 -1
- package/dist/sidenav-bar-context.d.ts +25 -0
- package/dist/sidenav-bar-context.js +72 -0
- package/dist/sidenav-bar-data.d.ts +15 -0
- package/dist/sidenav-bar-data.js +38 -0
- package/dist/sidenav-bar-first-level-item.d.ts +42 -0
- package/dist/sidenav-bar-first-level-item.js +174 -0
- package/dist/sidenav-bar-keyboard.d.ts +13 -0
- package/dist/sidenav-bar-keyboard.js +314 -0
- package/dist/sidenav-bar-layout.css-mistica.js +28 -0
- package/dist/sidenav-bar-layout.css.d.ts +5 -0
- package/dist/sidenav-bar-layout.d.ts +22 -0
- package/dist/sidenav-bar-layout.js +103 -0
- package/dist/sidenav-bar-mobile.d.ts +24 -0
- package/dist/sidenav-bar-mobile.js +332 -0
- package/dist/sidenav-bar-motion.d.ts +32 -0
- package/dist/sidenav-bar-motion.js +84 -0
- package/dist/sidenav-bar-panel.d.ts +31 -0
- package/dist/sidenav-bar-panel.js +208 -0
- package/dist/sidenav-bar-row.d.ts +82 -0
- package/dist/sidenav-bar-row.js +230 -0
- package/dist/sidenav-bar-second-level-item.d.ts +43 -0
- package/dist/sidenav-bar-second-level-item.js +89 -0
- package/dist/sidenav-bar-section.d.ts +23 -0
- package/dist/sidenav-bar-section.js +167 -0
- package/dist/sidenav-bar-types.d.ts +192 -0
- package/dist/sidenav-bar-types.js +11 -0
- package/dist/sidenav-bar.css-mistica.js +325 -0
- package/dist/sidenav-bar.css.d.ts +93 -0
- package/dist/sidenav-bar.d.ts +102 -0
- package/dist/sidenav-bar.js +492 -0
- package/dist/skeletons.css-mistica.js +8 -8
- package/dist/skins/blau.d.ts +5 -0
- package/dist/skins/blau.js +12 -8
- package/dist/skins/esimflag.d.ts +5 -0
- package/dist/skins/esimflag.js +13 -9
- package/dist/skins/movistar.d.ts +5 -0
- package/dist/skins/movistar.js +13 -9
- package/dist/skins/o2.d.ts +5 -0
- package/dist/skins/o2.js +13 -9
- package/dist/skins/skin-contract.css-mistica.js +735 -731
- package/dist/skins/skin-contract.css.d.ts +16 -12
- package/dist/skins/telefonica.d.ts +5 -0
- package/dist/skins/telefonica.js +13 -9
- package/dist/skins/types/colors.d.ts +13 -6
- package/dist/skins/vivo-evolution.d.ts +5 -0
- package/dist/skins/vivo-evolution.js +14 -10
- package/dist/skins/vivo.d.ts +5 -0
- package/dist/skins/vivo.js +13 -9
- package/dist/skip-link.css-mistica.js +2 -2
- package/dist/slider.css-mistica.js +24 -24
- package/dist/snackbar.css-mistica.js +14 -14
- package/dist/spinner.css-mistica.js +1 -1
- package/dist/square.css-mistica.js +1 -1
- package/dist/stack.css-mistica.js +5 -5
- package/dist/stacking-group.css-mistica.js +1 -1
- package/dist/stepper.css-mistica.js +9 -9
- package/dist/switch-component.css-mistica.js +48 -42
- package/dist/switch-component.css.d.ts +2 -0
- package/dist/switch-component.js +18 -18
- package/dist/table.css-mistica.js +9 -9
- package/dist/tabs.css-mistica.js +22 -22
- package/dist/tag.css-mistica.js +3 -3
- package/dist/text-field-base.css-mistica.js +19 -19
- package/dist/text-field-components.css-mistica.js +10 -10
- package/dist/text-link.css-mistica.js +6 -6
- package/dist/text-tokens.d.ts +6 -0
- package/dist/text-tokens.js +157 -133
- package/dist/text.css-mistica.js +6 -6
- package/dist/timeline.css-mistica.js +11 -11
- package/dist/timer.css-mistica.js +6 -6
- package/dist/tooltip.css-mistica.js +2 -2
- package/dist/touchable.css-mistica.js +4 -4
- package/dist/utils/aspect-ratio-support.css-mistica.js +2 -2
- package/dist/video.css-mistica.js +1 -1
- package/dist/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +1 -1
- package/dist-es/accordion.css-mistica.js +7 -7
- package/dist-es/align.css-mistica.js +1 -1
- package/dist-es/autocomplete.css-mistica.js +2 -2
- package/dist-es/avatar.css-mistica.js +1 -1
- package/dist-es/badge.css-mistica.js +1 -1
- package/dist-es/box.css-mistica.js +13 -13
- package/dist-es/boxed.css-mistica.js +23 -23
- package/dist-es/boxed.js +25 -25
- package/dist-es/button-group.css-mistica.js +1 -1
- package/dist-es/button-layout.css-mistica.js +16 -16
- package/dist-es/button.css-mistica.js +38 -38
- package/dist-es/callout.css-mistica.js +12 -12
- package/dist-es/card-internal.css-mistica.js +17 -17
- package/dist-es/carousel.css-mistica.js +10 -10
- package/dist-es/checkbox.css-mistica.js +13 -13
- package/dist-es/chip.css-mistica.js +17 -17
- package/dist-es/circle.css-mistica.js +2 -2
- package/dist-es/community/advanced-data-card.css-mistica.js +7 -7
- package/dist-es/community/ai-card.css-mistica.js +3 -3
- package/dist-es/community/blocks.css-mistica.js +2 -2
- package/dist-es/community/cyber/example-component.css-mistica.js +1 -1
- package/dist-es/community/example-component.css-mistica.js +1 -1
- package/dist-es/community/skins/cyber-skin.js +289 -256
- package/dist-es/counter.css-mistica.js +2 -2
- package/dist-es/cover-hero.css-mistica.js +4 -4
- package/dist-es/credit-card-number-field.css-mistica.js +3 -3
- package/dist-es/date-field.css-mistica.js +1 -1
- package/dist-es/date-time-picker.css-mistica.js +1 -1
- package/dist-es/dialog.css-mistica.js +5 -5
- package/dist-es/divider.css-mistica.js +5 -5
- package/dist-es/double-field.css-mistica.js +2 -2
- package/dist-es/drawer.css-mistica.js +2 -2
- package/dist-es/empty-state-card.css-mistica.js +1 -1
- package/dist-es/empty-state.css-mistica.js +7 -7
- package/dist-es/fade-in.css-mistica.js +1 -1
- package/dist-es/feedback.css-mistica.js +2 -2
- package/dist-es/file-upload.css-mistica.js +8 -8
- package/dist-es/fixed-footer-layout.css-mistica.js +3 -3
- package/dist-es/form.css-mistica.js +1 -1
- package/dist-es/generated/mistica-icons/icon-panel-collapse-regular.js +115 -0
- package/dist-es/generated/mistica-icons/icon-panel-expand-regular.js +109 -0
- package/dist-es/grid-layout.css-mistica.js +3 -3
- package/dist-es/grid.css-mistica.js +120 -120
- package/dist-es/header.css-mistica.js +1 -1
- package/dist-es/hero.css-mistica.js +3 -3
- package/dist-es/horizontal-scroll.css-mistica.js +1 -1
- package/dist-es/icon-button.css-mistica.js +53 -53
- package/dist-es/icons/icon-chevron.css-mistica.js +2 -2
- package/dist-es/icons/icon-error.css-mistica.js +1 -1
- package/dist-es/image.css-mistica.js +4 -4
- package/dist-es/index.js +2279 -2276
- package/dist-es/inline.css-mistica.js +11 -11
- package/dist-es/list.css-mistica.js +8 -2
- package/dist-es/list.js +275 -264
- package/dist-es/loading-bar.css-mistica.js +1 -1
- package/dist-es/loading-screen.css-mistica.js +5 -5
- package/dist-es/logo-movistar.js +1 -1
- package/dist-es/logo.css-mistica.js +5 -5
- package/dist-es/menu.css-mistica.js +13 -13
- package/dist-es/mobile-navigation-menu.js +90 -0
- package/dist-es/mosaic.css-mistica.js +1 -1
- package/dist-es/navigation-bar.css-mistica.js +11 -20
- package/dist-es/navigation-bar.js +469 -656
- package/dist-es/navigation-breadcrumbs.css-mistica.js +1 -1
- package/dist-es/navigation-shared.css-mistica.js +11 -0
- package/dist-es/navigation-shared.js +192 -0
- package/dist-es/package-version.js +1 -1
- package/dist-es/pagination.css-mistica.js +19 -19
- package/dist-es/pin-field.css-mistica.js +2 -2
- package/dist-es/popover.css-mistica.js +1 -1
- package/dist-es/progress-bar.css-mistica.js +7 -7
- package/dist-es/radio-button.css-mistica.js +22 -22
- package/dist-es/rating.css-mistica.js +3 -3
- package/dist-es/responsive-layout.css-mistica.js +6 -6
- package/dist-es/screen-reader-only.css-mistica.js +1 -1
- package/dist-es/select.css-mistica.js +18 -18
- package/dist-es/sheet-action-row.css-mistica.js +1 -1
- package/dist-es/sheet-common.css-mistica.js +2 -2
- package/dist-es/sheet-info.css-mistica.js +1 -1
- package/dist-es/sidenav-bar-context.js +14 -0
- package/dist-es/sidenav-bar-data.js +12 -0
- package/dist-es/sidenav-bar-first-level-item.js +124 -0
- package/dist-es/sidenav-bar-keyboard.js +253 -0
- package/dist-es/sidenav-bar-layout.css-mistica.js +2 -0
- package/dist-es/sidenav-bar-layout.js +86 -0
- package/dist-es/sidenav-bar-mobile.js +277 -0
- package/dist-es/sidenav-bar-motion.js +26 -0
- package/dist-es/sidenav-bar-panel.js +146 -0
- package/dist-es/sidenav-bar-row.js +208 -0
- package/dist-es/sidenav-bar-second-level-item.js +72 -0
- package/dist-es/sidenav-bar-section.js +112 -0
- package/dist-es/sidenav-bar-types.js +2 -0
- package/dist-es/sidenav-bar.css-mistica.js +74 -0
- package/dist-es/sidenav-bar.js +429 -0
- package/dist-es/skeletons.css-mistica.js +7 -7
- package/dist-es/skins/blau.js +12 -8
- package/dist-es/skins/esimflag.js +13 -9
- package/dist-es/skins/movistar.js +13 -9
- package/dist-es/skins/o2.js +13 -9
- package/dist-es/skins/skin-contract.css-mistica.js +735 -731
- package/dist-es/skins/telefonica.js +13 -9
- package/dist-es/skins/vivo-evolution.js +14 -10
- package/dist-es/skins/vivo.js +13 -9
- package/dist-es/skip-link.css-mistica.js +2 -2
- package/dist-es/slider.css-mistica.js +20 -20
- package/dist-es/snackbar.css-mistica.js +5 -5
- package/dist-es/spinner.css-mistica.js +1 -1
- package/dist-es/square.css-mistica.js +1 -1
- package/dist-es/stack.css-mistica.js +5 -5
- package/dist-es/stacking-group.css-mistica.js +1 -1
- package/dist-es/stepper.css-mistica.js +3 -3
- package/dist-es/style.css +1 -1
- package/dist-es/switch-component.css-mistica.js +37 -37
- package/dist-es/switch-component.js +26 -26
- package/dist-es/table.css-mistica.js +9 -9
- package/dist-es/tabs.css-mistica.js +19 -19
- package/dist-es/tag.css-mistica.js +2 -2
- package/dist-es/text-field-base.css-mistica.js +17 -17
- package/dist-es/text-field-components.css-mistica.js +4 -4
- package/dist-es/text-link.css-mistica.js +6 -6
- package/dist-es/text-tokens.js +82 -67
- package/dist-es/text.css-mistica.js +6 -6
- package/dist-es/timeline.css-mistica.js +10 -10
- package/dist-es/timer.css-mistica.js +6 -6
- package/dist-es/tooltip.css-mistica.js +2 -2
- package/dist-es/touchable.css-mistica.js +2 -2
- package/dist-es/utils/aspect-ratio-support.css-mistica.js +2 -2
- package/dist-es/video.css-mistica.js +1 -1
- package/dist-es/vivinho-loading-animation/vivinho-loading-animation.css-mistica.js +1 -1
- package/package.json +3 -2
- package/src/boxed.css.ts +1 -0
- package/src/boxed.tsx +18 -5
- package/src/callout.css.ts +4 -2
- package/src/community/skins/cyber-skin.tsx +127 -439
- package/src/index.tsx +14 -0
- package/src/list.css.ts +36 -1
- package/src/list.tsx +370 -344
- package/src/logo-movistar.tsx +1 -1
- package/src/mobile-navigation-menu.tsx +168 -0
- package/src/navigation-bar.css.ts +2 -267
- package/src/navigation-bar.tsx +77 -370
- package/src/navigation-shared.css.ts +289 -0
- package/src/navigation-shared.tsx +262 -0
- package/src/package-version.tsx +1 -1
- package/src/portal.tsx +1 -1
- package/src/sidenav-bar-context.tsx +41 -0
- package/src/sidenav-bar-data.ts +49 -0
- package/src/sidenav-bar-first-level-item.tsx +203 -0
- package/src/sidenav-bar-keyboard.tsx +393 -0
- package/src/sidenav-bar-layout.css.ts +89 -0
- package/src/sidenav-bar-layout.tsx +61 -0
- package/src/sidenav-bar-mobile.tsx +302 -0
- package/src/sidenav-bar-motion.tsx +70 -0
- package/src/sidenav-bar-panel.tsx +269 -0
- package/src/sidenav-bar-row.tsx +272 -0
- package/src/sidenav-bar-second-level-item.tsx +99 -0
- package/src/sidenav-bar-section.tsx +98 -0
- package/src/sidenav-bar-types.ts +224 -0
- package/src/sidenav-bar.css.ts +1018 -0
- package/src/sidenav-bar.tsx +821 -0
- package/src/skins/blau.tsx +18 -8
- package/src/skins/esimflag.tsx +19 -9
- package/src/skins/movistar.tsx +19 -9
- package/src/skins/o2.tsx +19 -9
- package/src/skins/skin-contract.css.ts +2 -0
- package/src/skins/telefonica.tsx +19 -9
- package/src/skins/types/colors.tsx +14 -6
- package/src/skins/vivo-evolution.tsx +20 -10
- package/src/skins/vivo.tsx +19 -9
- package/src/switch-component.css.ts +20 -0
- package/src/switch-component.tsx +9 -1
- package/src/text-tokens.tsx +24 -0
package/src/logo-movistar.tsx
CHANGED
|
@@ -77,7 +77,7 @@ const MovistarLogoImage = ({
|
|
|
77
77
|
|
|
78
78
|
return (
|
|
79
79
|
<g fill={color}>
|
|
80
|
-
<path d="
|
|
80
|
+
<path d="M63.9489 19.7664C62.3545 16.0836 59.7935 13.7229 56.5087 13.5152C52.8722 13.2842 48.7008 15.6958 46.5119 20.3736C44.4945 24.6854 42.8797 29.1134 41.9015 31.3724C40.9088 33.6634 39.4496 35.0755 37.2054 35.3123C34.4613 35.6014 32.098 33.6097 30.367 30.7724C28.8568 28.2984 25.8656 23.5871 24.2654 22.0036C22.7611 20.5175 21.0445 18.655 17.4676 18.7131C14.6407 18.7582 9.42423 20.1514 7.04057 29.879C6.00281 34.1181 5.60166 38.536 6.48971 43.7935C7.30946 48.6442 8.76145 52.8311 9.73962 55.1381C10.0768 55.9327 10.5986 56.7622 11.0027 57.2721C12.164 58.7394 14.0971 58.645 14.9095 58.2455C15.7947 57.8097 16.8121 56.7579 16.4444 54.3565C16.2671 53.1957 15.7525 51.4989 15.4633 50.5546C14.5767 47.6593 13.3965 44.1654 13.2933 41.6768C13.1552 38.3486 14.4691 37.9127 15.3412 37.721C16.8077 37.3985 18.0374 39.0081 19.2059 41.026C20.5998 43.4332 22.9893 47.6999 24.9383 50.9585C26.697 53.9003 29.944 57.0499 35.159 56.8334C40.4742 56.6141 44.3927 54.586 46.4116 48.2041C47.9217 43.4288 48.9522 39.8609 50.6077 36.2072C52.5132 32.0058 55.0538 29.757 57.1933 30.4427C59.1801 31.0804 59.6758 33.0213 59.7005 35.8745C59.7223 38.398 59.4301 41.1814 59.2019 43.2255C59.1191 43.9678 58.9708 45.4598 59.0319 46.2879C59.1525 47.9164 59.8574 49.5435 61.6917 49.8035C63.6466 50.081 65.2148 48.5193 65.8413 46.6322C66.0884 45.8884 66.2991 44.7494 66.4125 43.9417C66.9866 39.8638 67.1363 37.1224 66.8776 32.9487C66.5738 28.0689 65.6189 23.6191 63.9518 19.7678L63.9489 19.7664Z" />
|
|
81
81
|
</g>
|
|
82
82
|
);
|
|
83
83
|
};
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import {CSSTransition} from 'react-transition-group';
|
|
4
|
+
import FocusTrap from './focus-trap';
|
|
5
|
+
import {Portal} from './portal';
|
|
6
|
+
import {useTheme} from './hooks';
|
|
7
|
+
import {isRunningAcceptanceTest} from './utils/platform';
|
|
8
|
+
import * as tokens from './text-tokens';
|
|
9
|
+
import * as styles from './navigation-shared.css';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The panel that a burger menu opens on mobile. It holds two panes that slide horizontally: the first
|
|
13
|
+
* level, and the second level of the item the user pressed. `MainNavigationBar` and `SidenavBar` share it,
|
|
14
|
+
* so both keep the same animation, the same focus behavior and the same overlay.
|
|
15
|
+
*
|
|
16
|
+
* The panel is a shell: each component passes the content of the two panes, because their data models
|
|
17
|
+
* differ.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
type MobileNavigationMenuStatus = 'opening' | 'opened' | 'closing' | 'closed';
|
|
21
|
+
type MobileNavigationMenuAction = 'open' | 'finishOpen' | 'close' | 'finishClose';
|
|
22
|
+
|
|
23
|
+
const mobileNavigationMenuTransitions: Record<
|
|
24
|
+
MobileNavigationMenuStatus,
|
|
25
|
+
Partial<Record<MobileNavigationMenuAction, MobileNavigationMenuStatus>>
|
|
26
|
+
> = {
|
|
27
|
+
opening: {
|
|
28
|
+
close: 'closing',
|
|
29
|
+
finishOpen: 'opened',
|
|
30
|
+
},
|
|
31
|
+
opened: {
|
|
32
|
+
close: 'closing',
|
|
33
|
+
},
|
|
34
|
+
closing: {
|
|
35
|
+
open: 'opening',
|
|
36
|
+
finishClose: 'closed',
|
|
37
|
+
},
|
|
38
|
+
closed: {
|
|
39
|
+
open: 'opening',
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const secondLevelReducer = (state: MobileNavigationMenuStatus, action: MobileNavigationMenuAction) => {
|
|
44
|
+
return mobileNavigationMenuTransitions[state][action] || state;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
type MobileNavigationMenuProps = {
|
|
48
|
+
/** True while the menu shows. The panel animates on every change of this prop. */
|
|
49
|
+
open: boolean;
|
|
50
|
+
/** Id of the panel, which the burger button points to with `aria-controls`. */
|
|
51
|
+
id: string;
|
|
52
|
+
/** Distance from the top of the viewport, which leaves the top bar visible. */
|
|
53
|
+
topOffset: number;
|
|
54
|
+
/** Content of the first pane. */
|
|
55
|
+
firstLevel: React.ReactNode;
|
|
56
|
+
/** Content of the second pane. */
|
|
57
|
+
secondLevel?: React.ReactNode;
|
|
58
|
+
/** True if the second pane must show. The panel slides both panes on every change of this prop. */
|
|
59
|
+
showSecondLevel?: boolean;
|
|
60
|
+
/** Called once the panel finished its exit, so the consumer resets its own state. */
|
|
61
|
+
onExited?: () => void;
|
|
62
|
+
/** Accessible name of the navigation landmark. */
|
|
63
|
+
'aria-label'?: string;
|
|
64
|
+
/** Group of the focus trap, which the consumer shares with its own top bar. */
|
|
65
|
+
focusTrapGroup: string;
|
|
66
|
+
disableFocusTrap: boolean;
|
|
67
|
+
setDisableFocusTrap: (value: boolean) => void;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const MobileNavigationMenu = ({
|
|
71
|
+
open,
|
|
72
|
+
id,
|
|
73
|
+
topOffset,
|
|
74
|
+
firstLevel,
|
|
75
|
+
secondLevel,
|
|
76
|
+
showSecondLevel = false,
|
|
77
|
+
onExited,
|
|
78
|
+
'aria-label': ariaLabel,
|
|
79
|
+
focusTrapGroup,
|
|
80
|
+
disableFocusTrap,
|
|
81
|
+
setDisableFocusTrap,
|
|
82
|
+
}: MobileNavigationMenuProps): JSX.Element => {
|
|
83
|
+
const {isDarkMode, texts, t} = useTheme();
|
|
84
|
+
const [secondLevelStatus, dispatch] = React.useReducer(secondLevelReducer, 'closed');
|
|
85
|
+
const menuRef = React.useRef<HTMLDivElement>(null);
|
|
86
|
+
const secondLevelRef = React.useRef<HTMLDivElement>(null);
|
|
87
|
+
|
|
88
|
+
const shadowAlpha = isDarkMode ? 1 : 0.2;
|
|
89
|
+
const menuAnimationDuration = isRunningAcceptanceTest() ? 0 : styles.BURGER_MENU_ANIMATION_DURATION_MS;
|
|
90
|
+
|
|
91
|
+
React.useEffect(() => {
|
|
92
|
+
let id: NodeJS.Timeout;
|
|
93
|
+
|
|
94
|
+
if (showSecondLevel) {
|
|
95
|
+
dispatch('open');
|
|
96
|
+
id = setTimeout(() => dispatch('finishOpen'), menuAnimationDuration);
|
|
97
|
+
} else {
|
|
98
|
+
dispatch('close');
|
|
99
|
+
id = setTimeout(() => dispatch('finishClose'), menuAnimationDuration);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return () => clearTimeout(id);
|
|
103
|
+
}, [showSecondLevel, menuAnimationDuration]);
|
|
104
|
+
|
|
105
|
+
React.useEffect(() => {
|
|
106
|
+
// Make screen reader focus on back button when opening any section's menu
|
|
107
|
+
if (secondLevelStatus === 'opening') {
|
|
108
|
+
const backButtonElement = secondLevelRef.current?.querySelector<HTMLButtonElement>(
|
|
109
|
+
`button[aria-label="${texts.backNavigationBar || t(tokens.backNavigationBar)}"]`
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
backButtonElement?.focus();
|
|
113
|
+
}
|
|
114
|
+
}, [secondLevelStatus, t, texts]);
|
|
115
|
+
|
|
116
|
+
return (
|
|
117
|
+
<Portal>
|
|
118
|
+
<FocusTrap disabled={disableFocusTrap} group={focusTrapGroup}>
|
|
119
|
+
<CSSTransition
|
|
120
|
+
onEntered={() => setDisableFocusTrap(false)}
|
|
121
|
+
onExiting={() => setDisableFocusTrap(true)}
|
|
122
|
+
onExited={onExited}
|
|
123
|
+
classNames={styles.burgerMenuTransition}
|
|
124
|
+
in={open}
|
|
125
|
+
nodeRef={menuRef}
|
|
126
|
+
timeout={menuAnimationDuration}
|
|
127
|
+
mountOnEnter
|
|
128
|
+
unmountOnExit
|
|
129
|
+
>
|
|
130
|
+
<nav
|
|
131
|
+
className={styles.burgerMenu}
|
|
132
|
+
style={{
|
|
133
|
+
boxShadow: `6px 0 4px -4px rgba(0, 0, 0, ${shadowAlpha})`,
|
|
134
|
+
top: topOffset,
|
|
135
|
+
}}
|
|
136
|
+
id={id}
|
|
137
|
+
ref={menuRef}
|
|
138
|
+
aria-label={ariaLabel}
|
|
139
|
+
>
|
|
140
|
+
<div className={styles.burgerMenuContainer}>
|
|
141
|
+
<div
|
|
142
|
+
className={styles.burgerMenuContentContainer}
|
|
143
|
+
style={{
|
|
144
|
+
transform: `translate(${showSecondLevel ? '-100vw' : '0'})`,
|
|
145
|
+
}}
|
|
146
|
+
>
|
|
147
|
+
{secondLevelStatus !== 'opened' && firstLevel}
|
|
148
|
+
</div>
|
|
149
|
+
|
|
150
|
+
<div
|
|
151
|
+
className={styles.burgerMenuContentContainer}
|
|
152
|
+
ref={secondLevelRef}
|
|
153
|
+
style={{
|
|
154
|
+
transform: `translate(${showSecondLevel ? '0' : '100vw'})`,
|
|
155
|
+
}}
|
|
156
|
+
>
|
|
157
|
+
{secondLevelStatus !== 'closed' && secondLevel}
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
</nav>
|
|
161
|
+
</CSSTransition>
|
|
162
|
+
</FocusTrap>
|
|
163
|
+
</Portal>
|
|
164
|
+
);
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
export {MobileNavigationMenu};
|
|
168
|
+
export type {MobileNavigationMenuProps};
|
|
@@ -1,121 +1,15 @@
|
|
|
1
1
|
import {style, styleVariants} from '@vanilla-extract/css';
|
|
2
2
|
import {sprinkles} from './sprinkles.css';
|
|
3
|
-
import {NAVBAR_HEIGHT_DESKTOP, NAVBAR_HEIGHT_DESKTOP_LARGE
|
|
3
|
+
import {NAVBAR_HEIGHT_DESKTOP, NAVBAR_HEIGHT_DESKTOP_LARGE} from './theme';
|
|
4
4
|
import * as mq from './media-queries.css';
|
|
5
5
|
import {vars} from './skins/skin-contract.css';
|
|
6
|
-
|
|
7
|
-
const NAVBAR_ZINDEX = 25;
|
|
6
|
+
import {NAVBAR_ZINDEX, spacerMobile} from './navigation-shared.css';
|
|
8
7
|
|
|
9
8
|
export const DESKTOP_SMALL_MENU_WIDTH = 184;
|
|
10
9
|
|
|
11
|
-
export const BURGER_MENU_ANIMATION_DURATION_MS = 300;
|
|
12
10
|
export const DESKTOP_MENU_ANIMATION_DURATION_MS = 400;
|
|
13
11
|
const DESKTOP_MENU_CONTENT_ANIMATION_DURATION_MS = 800;
|
|
14
12
|
|
|
15
|
-
export const burgerIconContainer = style([
|
|
16
|
-
sprinkles({
|
|
17
|
-
position: 'relative',
|
|
18
|
-
width: 24,
|
|
19
|
-
height: 24,
|
|
20
|
-
}),
|
|
21
|
-
{
|
|
22
|
-
verticalAlign: 'middle',
|
|
23
|
-
borderRadius: 50,
|
|
24
|
-
},
|
|
25
|
-
]);
|
|
26
|
-
|
|
27
|
-
const iconBase = style([
|
|
28
|
-
sprinkles({
|
|
29
|
-
position: 'absolute',
|
|
30
|
-
}),
|
|
31
|
-
{
|
|
32
|
-
top: 0,
|
|
33
|
-
left: 0,
|
|
34
|
-
transition: 'transform 300ms, opacity 100ms',
|
|
35
|
-
},
|
|
36
|
-
]);
|
|
37
|
-
|
|
38
|
-
export const iconCloseOpen = style([
|
|
39
|
-
iconBase,
|
|
40
|
-
{
|
|
41
|
-
opacity: 1,
|
|
42
|
-
transform: 'rotate(0) scale(1)',
|
|
43
|
-
},
|
|
44
|
-
]);
|
|
45
|
-
|
|
46
|
-
export const iconCloseHidden = style([
|
|
47
|
-
iconBase,
|
|
48
|
-
{
|
|
49
|
-
opacity: 0,
|
|
50
|
-
transform: 'rotate(-45deg) scale(0.9)',
|
|
51
|
-
},
|
|
52
|
-
]);
|
|
53
|
-
|
|
54
|
-
export const iconMenuOpen = style([
|
|
55
|
-
iconBase,
|
|
56
|
-
{
|
|
57
|
-
opacity: 1,
|
|
58
|
-
transform: 'scale(1)',
|
|
59
|
-
},
|
|
60
|
-
]);
|
|
61
|
-
|
|
62
|
-
export const iconMenuHidden = style([
|
|
63
|
-
iconBase,
|
|
64
|
-
{
|
|
65
|
-
opacity: 0,
|
|
66
|
-
transform: 'scale(0.7)',
|
|
67
|
-
},
|
|
68
|
-
]);
|
|
69
|
-
|
|
70
|
-
export const topFixed = style([
|
|
71
|
-
sprinkles({
|
|
72
|
-
position: 'fixed',
|
|
73
|
-
top: 0,
|
|
74
|
-
left: 0,
|
|
75
|
-
right: 0,
|
|
76
|
-
}),
|
|
77
|
-
{
|
|
78
|
-
zIndex: NAVBAR_ZINDEX,
|
|
79
|
-
},
|
|
80
|
-
]);
|
|
81
|
-
|
|
82
|
-
const borderWidth = 1;
|
|
83
|
-
|
|
84
|
-
const navbarBase = style([
|
|
85
|
-
sprinkles({
|
|
86
|
-
display: 'flex',
|
|
87
|
-
alignItems: 'center',
|
|
88
|
-
width: '100%',
|
|
89
|
-
}),
|
|
90
|
-
{
|
|
91
|
-
borderWidth,
|
|
92
|
-
borderBottomStyle: 'solid',
|
|
93
|
-
|
|
94
|
-
'@media': {
|
|
95
|
-
[mq.tabletOrSmaller]: {
|
|
96
|
-
transition: 'border-color 300ms',
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
},
|
|
100
|
-
]);
|
|
101
|
-
|
|
102
|
-
export const navbarBorderColorVariants = styleVariants({
|
|
103
|
-
default: [navbarBase, {borderColor: vars.colors.divider}],
|
|
104
|
-
noBorder: [navbarBase, {borderColor: 'transparent'}],
|
|
105
|
-
menuOpen: [
|
|
106
|
-
navbarBase,
|
|
107
|
-
{
|
|
108
|
-
borderColor: vars.colors.divider,
|
|
109
|
-
|
|
110
|
-
'@media': {
|
|
111
|
-
[mq.tabletOrSmaller]: {
|
|
112
|
-
borderColor: 'transparent',
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
],
|
|
117
|
-
});
|
|
118
|
-
|
|
119
13
|
export const desktopMenuFirstSection = style({});
|
|
120
14
|
export const desktopMenuLastSection = style({});
|
|
121
15
|
|
|
@@ -248,89 +142,12 @@ export const textWrapperVariants = styleVariants({
|
|
|
248
142
|
},
|
|
249
143
|
});
|
|
250
144
|
|
|
251
|
-
export const navigationBarContent = style([
|
|
252
|
-
sprinkles({
|
|
253
|
-
alignItems: 'center',
|
|
254
|
-
width: '100%',
|
|
255
|
-
display: 'flex',
|
|
256
|
-
}),
|
|
257
|
-
{
|
|
258
|
-
height: NAVBAR_HEIGHT_DESKTOP,
|
|
259
|
-
'@media': {
|
|
260
|
-
[mq.tabletOrSmaller]: {
|
|
261
|
-
height: NAVBAR_HEIGHT_MOBILE - borderWidth,
|
|
262
|
-
},
|
|
263
|
-
[mq.desktopOrBigger]: {
|
|
264
|
-
':last-child': {
|
|
265
|
-
height: NAVBAR_HEIGHT_DESKTOP - borderWidth,
|
|
266
|
-
},
|
|
267
|
-
},
|
|
268
|
-
},
|
|
269
|
-
},
|
|
270
|
-
]);
|
|
271
|
-
|
|
272
145
|
export const navigationBarAction = sprinkles({
|
|
273
146
|
border: 'none',
|
|
274
147
|
background: 'transparent',
|
|
275
148
|
padding: 0,
|
|
276
149
|
});
|
|
277
150
|
|
|
278
|
-
export const desktopOnly = style({
|
|
279
|
-
'@media': {
|
|
280
|
-
[mq.tabletOrSmaller]: {
|
|
281
|
-
display: 'none',
|
|
282
|
-
},
|
|
283
|
-
},
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
export const navigationBarContentRight = style([
|
|
287
|
-
sprinkles({
|
|
288
|
-
display: 'flex',
|
|
289
|
-
alignItems: 'center',
|
|
290
|
-
justifyContent: 'flex-end',
|
|
291
|
-
}),
|
|
292
|
-
{
|
|
293
|
-
height: NAVBAR_HEIGHT_DESKTOP,
|
|
294
|
-
'@media': {
|
|
295
|
-
[mq.tabletOrSmaller]: {
|
|
296
|
-
paddingLeft: 24,
|
|
297
|
-
flex: 1,
|
|
298
|
-
height: NAVBAR_HEIGHT_MOBILE - borderWidth,
|
|
299
|
-
},
|
|
300
|
-
[mq.desktopOrBigger]: {
|
|
301
|
-
':last-child': {
|
|
302
|
-
height: NAVBAR_HEIGHT_DESKTOP - borderWidth,
|
|
303
|
-
},
|
|
304
|
-
},
|
|
305
|
-
},
|
|
306
|
-
},
|
|
307
|
-
]);
|
|
308
|
-
|
|
309
|
-
export const navigationBarContentRightExpanded = style([
|
|
310
|
-
navigationBarContentRight,
|
|
311
|
-
sprinkles({
|
|
312
|
-
flex: 1,
|
|
313
|
-
}),
|
|
314
|
-
{
|
|
315
|
-
paddingLeft: 56,
|
|
316
|
-
},
|
|
317
|
-
]);
|
|
318
|
-
|
|
319
|
-
const spacerMobile = style({
|
|
320
|
-
'@media': {
|
|
321
|
-
[mq.tabletOrSmaller]: {
|
|
322
|
-
height: NAVBAR_HEIGHT_MOBILE,
|
|
323
|
-
},
|
|
324
|
-
},
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
export const spacer = style([
|
|
328
|
-
sprinkles({
|
|
329
|
-
height: NAVBAR_HEIGHT_DESKTOP,
|
|
330
|
-
}),
|
|
331
|
-
spacerMobile,
|
|
332
|
-
]);
|
|
333
|
-
|
|
334
151
|
export const spacerLarge = style([
|
|
335
152
|
{
|
|
336
153
|
height: NAVBAR_HEIGHT_DESKTOP_LARGE,
|
|
@@ -338,33 +155,6 @@ export const spacerLarge = style([
|
|
|
338
155
|
spacerMobile,
|
|
339
156
|
]);
|
|
340
157
|
|
|
341
|
-
export const burgerMenuTransition = {
|
|
342
|
-
enter: style({
|
|
343
|
-
transform: 'translate(-100vw)',
|
|
344
|
-
}),
|
|
345
|
-
enterActive: style({
|
|
346
|
-
transform: 'translate(0)',
|
|
347
|
-
transition: `transform ${BURGER_MENU_ANIMATION_DURATION_MS}ms ease-out`,
|
|
348
|
-
'@media': {
|
|
349
|
-
['(prefers-reduced-motion)']: {
|
|
350
|
-
transition: 'none',
|
|
351
|
-
},
|
|
352
|
-
},
|
|
353
|
-
}),
|
|
354
|
-
exit: style({
|
|
355
|
-
transform: 'translate(0)',
|
|
356
|
-
}),
|
|
357
|
-
exitActive: style({
|
|
358
|
-
transform: 'translate(-100vw)',
|
|
359
|
-
transition: `transform ${BURGER_MENU_ANIMATION_DURATION_MS}ms ease-out`,
|
|
360
|
-
'@media': {
|
|
361
|
-
['(prefers-reduced-motion)']: {
|
|
362
|
-
transition: 'none',
|
|
363
|
-
},
|
|
364
|
-
},
|
|
365
|
-
}),
|
|
366
|
-
};
|
|
367
|
-
|
|
368
158
|
export const mainNavbarContent = sprinkles({
|
|
369
159
|
display: 'flex',
|
|
370
160
|
alignItems: 'center',
|
|
@@ -375,61 +165,6 @@ export const mainNavBarSectionsContainer = style([
|
|
|
375
165
|
{minWidth: 'fit-content'},
|
|
376
166
|
]);
|
|
377
167
|
|
|
378
|
-
export const logoContainer = style([
|
|
379
|
-
sprinkles({
|
|
380
|
-
display: 'flex',
|
|
381
|
-
justifyContent: 'center',
|
|
382
|
-
}),
|
|
383
|
-
{
|
|
384
|
-
'@media': {
|
|
385
|
-
[mq.tabletOrSmaller]: {
|
|
386
|
-
marginRight: 0,
|
|
387
|
-
},
|
|
388
|
-
},
|
|
389
|
-
},
|
|
390
|
-
]);
|
|
391
|
-
|
|
392
|
-
export const burgerMenuButton = style({
|
|
393
|
-
marginRight: 24,
|
|
394
|
-
width: 'fit-content',
|
|
395
|
-
'@media': {
|
|
396
|
-
[mq.desktopOrBigger]: {
|
|
397
|
-
display: 'none',
|
|
398
|
-
},
|
|
399
|
-
},
|
|
400
|
-
});
|
|
401
|
-
|
|
402
|
-
export const burgerMenu = sprinkles({
|
|
403
|
-
position: 'fixed',
|
|
404
|
-
left: 0,
|
|
405
|
-
right: 0,
|
|
406
|
-
bottom: 0,
|
|
407
|
-
background: vars.colors.background,
|
|
408
|
-
});
|
|
409
|
-
|
|
410
|
-
export const burgerMenuContainer = sprinkles({
|
|
411
|
-
height: '100%',
|
|
412
|
-
position: 'relative',
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
export const burgerMenuContentContainer = style([
|
|
416
|
-
sprinkles({
|
|
417
|
-
overflowY: 'auto',
|
|
418
|
-
width: '100%',
|
|
419
|
-
height: '100%',
|
|
420
|
-
position: 'absolute',
|
|
421
|
-
top: 0,
|
|
422
|
-
}),
|
|
423
|
-
{
|
|
424
|
-
transition: `transform ${BURGER_MENU_ANIMATION_DURATION_MS}ms ease-out`,
|
|
425
|
-
'@media': {
|
|
426
|
-
['(prefers-reduced-motion)']: {
|
|
427
|
-
transition: 'none',
|
|
428
|
-
},
|
|
429
|
-
},
|
|
430
|
-
},
|
|
431
|
-
]);
|
|
432
|
-
|
|
433
168
|
export const iconButtonVariants = styleVariants({
|
|
434
169
|
default: [
|
|
435
170
|
sprinkles({color: vars.colors.neutralHigh}),
|