@wordpress/components 25.13.0 → 25.15.1-next.79a6196f.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/CHANGELOG.md +89 -1
- package/CONTRIBUTING.md +57 -115
- package/LICENSE.md +1 -1
- package/build/base-control/index.js +17 -13
- package/build/base-control/index.js.map +1 -1
- package/build/border-box-control/border-box-control-linked-button/component.js +1 -1
- package/build/border-box-control/border-box-control-linked-button/component.js.map +1 -1
- package/build/border-control/border-control-dropdown/component.js +4 -2
- package/build/border-control/border-control-dropdown/component.js.map +1 -1
- package/build/border-control/border-control-dropdown/hook.js +3 -2
- package/build/border-control/border-control-dropdown/hook.js.map +1 -1
- package/build/border-control/border-control-style-picker/component.js +1 -1
- package/build/border-control/border-control-style-picker/component.js.map +1 -1
- package/build/border-control/styles.js +17 -17
- package/build/border-control/styles.js.map +1 -1
- package/build/box-control/index.js +1 -1
- package/build/box-control/index.js.map +1 -1
- package/build/box-control/linked-button.js +1 -1
- package/build/box-control/linked-button.js.map +1 -1
- package/build/button/index.js +1 -1
- package/build/button/index.js.map +1 -1
- package/build/checkbox-control/index.js +1 -1
- package/build/checkbox-control/index.js.map +1 -1
- package/build/checkbox-control/types.js.map +1 -1
- package/build/color-palette/index.native.js +11 -7
- package/build/color-palette/index.native.js.map +1 -1
- package/build/color-picker/color-copy-button.js +1 -1
- package/build/color-picker/color-copy-button.js.map +1 -1
- package/build/context/wordpress-component.js.map +1 -1
- package/build/custom-select-control-v2/index.js +11 -10
- package/build/custom-select-control-v2/index.js.map +1 -1
- package/build/date-time/date/styles.js +8 -8
- package/build/date-time/date/styles.js.map +1 -1
- package/build/date-time/time/timezone.js +11 -2
- package/build/date-time/time/timezone.js.map +1 -1
- package/build/dimension-control/index.js +2 -0
- package/build/dimension-control/index.js.map +1 -1
- package/build/dimension-control/types.js.map +1 -1
- package/build/dropdown-menu-v2/index.js +205 -159
- package/build/dropdown-menu-v2/index.js.map +1 -1
- package/build/dropdown-menu-v2/styles.js +86 -77
- package/build/dropdown-menu-v2/styles.js.map +1 -1
- package/build/dropdown-menu-v2/types.js.map +1 -1
- package/build/duotone-picker/duotone-picker.js +4 -3
- package/build/duotone-picker/duotone-picker.js.map +1 -1
- package/build/focal-point-picker/controls.js +5 -1
- package/build/focal-point-picker/controls.js.map +1 -1
- package/build/focal-point-picker/index.js +2 -0
- package/build/focal-point-picker/index.js.map +1 -1
- package/build/focal-point-picker/styles/focal-point-picker-style.js +15 -15
- package/build/focal-point-picker/styles/focal-point-picker-style.js.map +1 -1
- package/build/focal-point-picker/types.js.map +1 -1
- package/build/font-size-picker/font-size-picker-select.js +2 -0
- package/build/font-size-picker/font-size-picker-select.js.map +1 -1
- package/build/font-size-picker/font-size-picker-toggle-group.js +2 -0
- package/build/font-size-picker/font-size-picker-toggle-group.js.map +1 -1
- package/build/font-size-picker/index.js +10 -3
- package/build/font-size-picker/index.js.map +1 -1
- package/build/font-size-picker/index.native.js +6 -3
- package/build/font-size-picker/index.native.js.map +1 -1
- package/build/font-size-picker/types.js.map +1 -1
- package/build/form-token-field/index.js +10 -5
- package/build/form-token-field/index.js.map +1 -1
- package/build/form-token-field/token.js +1 -0
- package/build/form-token-field/token.js.map +1 -1
- package/build/gradient-picker/index.js +3 -2
- package/build/gradient-picker/index.js.map +1 -1
- package/build/index.native.js +20 -19
- package/build/index.native.js.map +1 -1
- package/build/input-control/styles/input-control-styles.js +32 -29
- package/build/input-control/styles/input-control-styles.js.map +1 -1
- package/build/input-control/types.js.map +1 -1
- package/build/lock-unlock.js +18 -0
- package/build/lock-unlock.js.map +1 -0
- package/build/mobile/bottom-sheet/index.native.js +8 -0
- package/build/mobile/bottom-sheet/index.native.js.map +1 -1
- package/build/mobile/color-settings/palette.screen.native.js +8 -4
- package/build/mobile/color-settings/palette.screen.native.js.map +1 -1
- package/build/mobile/global-styles-context/utils.native.js +39 -13
- package/build/mobile/global-styles-context/utils.native.js.map +1 -1
- package/build/mobile/image/constants.js +12 -0
- package/build/mobile/image/constants.js.map +1 -0
- package/build/mobile/image/index.native.js +26 -18
- package/build/mobile/image/index.native.js.map +1 -1
- package/build/mobile/keyboard-aware-flat-list/index.android.js +40 -8
- package/build/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
- package/build/mobile/keyboard-aware-flat-list/index.ios.js +44 -68
- package/build/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
- package/build/mobile/keyboard-aware-flat-list/use-scroll-to-element.native.js +39 -0
- package/build/mobile/keyboard-aware-flat-list/use-scroll-to-element.native.js.map +1 -0
- package/build/mobile/keyboard-aware-flat-list/{use-scroll-to-text-input.native.js → use-scroll-to-section.native.js} +22 -29
- package/build/mobile/keyboard-aware-flat-list/use-scroll-to-section.native.js.map +1 -0
- package/build/mobile/keyboard-aware-flat-list/use-scroll.native.js +93 -0
- package/build/mobile/keyboard-aware-flat-list/use-scroll.native.js.map +1 -0
- package/build/mobile/utils/get-px-from-css-unit.native.js +302 -0
- package/build/mobile/utils/get-px-from-css-unit.native.js.map +1 -0
- package/build/modal/index.js +18 -13
- package/build/modal/index.js.map +1 -1
- package/build/navigation/menu/menu-title.js +1 -1
- package/build/navigation/menu/menu-title.js.map +1 -1
- package/build/navigator/navigator-provider/component.js +13 -15
- package/build/navigator/navigator-provider/component.js.map +1 -1
- package/build/navigator/navigator-screen/component.js +23 -63
- package/build/navigator/navigator-screen/component.js.map +1 -1
- package/build/navigator/styles.js +52 -0
- package/build/navigator/styles.js.map +1 -0
- package/build/number-control/index.js +4 -8
- package/build/number-control/index.js.map +1 -1
- package/build/number-control/types.js.map +1 -1
- package/build/palette-edit/index.js +15 -34
- package/build/palette-edit/index.js.map +1 -1
- package/build/private-apis.js +11 -26
- package/build/private-apis.js.map +1 -1
- package/build/private-apis.native.js +21 -0
- package/build/private-apis.native.js.map +1 -0
- package/build/query-controls/author-select.js +3 -1
- package/build/query-controls/author-select.js.map +1 -1
- package/build/query-controls/category-select.js +3 -1
- package/build/query-controls/category-select.js.map +1 -1
- package/build/query-controls/index.js +6 -1
- package/build/query-controls/index.js.map +1 -1
- package/build/query-controls/types.js.map +1 -1
- package/build/radio-control/index.js +1 -0
- package/build/radio-control/index.js.map +1 -1
- package/build/range-control/index.js +1 -1
- package/build/range-control/index.js.map +1 -1
- package/build/select-control/styles/select-control-styles.js +15 -25
- package/build/select-control/styles/select-control-styles.js.map +1 -1
- package/build/slot-fill/index.js +3 -2
- package/build/slot-fill/index.js.map +1 -1
- package/build/slot-fill/types.js.map +1 -1
- package/build/snackbar/types.js.map +1 -1
- package/build/tabs/index.js +18 -1
- package/build/tabs/index.js.map +1 -1
- package/build/tabs/styles.js +3 -3
- package/build/tabs/styles.js.map +1 -1
- package/build/tabs/tab.js +2 -2
- package/build/tabs/tab.js.map +1 -1
- package/build/tabs/tabpanel.js +11 -8
- package/build/tabs/tabpanel.js.map +1 -1
- package/build/tabs/types.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/component.js +4 -4
- package/build/toggle-group-control/toggle-group-control/component.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/styles.js +29 -15
- package/build/toggle-group-control/toggle-group-control/styles.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control/utils.js +17 -17
- package/build/toggle-group-control/toggle-group-control/utils.js.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option-base/styles.js +9 -9
- package/build/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
- package/build/tools-panel/tools-panel/component.js +3 -1
- package/build/tools-panel/tools-panel/component.js.map +1 -1
- package/build/tools-panel/tools-panel-header/component.js +9 -8
- package/build/tools-panel/tools-panel-header/component.js.map +1 -1
- package/build/tools-panel/tools-panel-item/hook.js +11 -11
- package/build/tools-panel/tools-panel-item/hook.js.map +1 -1
- package/build/tools-panel/types.js.map +1 -1
- package/build/tooltip/index.js +34 -10
- package/build/tooltip/index.js.map +1 -1
- package/build/tooltip/types.js.map +1 -1
- package/build/truncate/hook.js +10 -4
- package/build/truncate/hook.js.map +1 -1
- package/build/truncate/types.js.map +1 -1
- package/build/unit-control/index.js +1 -1
- package/build/unit-control/index.js.map +1 -1
- package/build/utils/strings.js +34 -3
- package/build/utils/strings.js.map +1 -1
- package/build-module/base-control/index.js +16 -12
- package/build-module/base-control/index.js.map +1 -1
- package/build-module/border-box-control/border-box-control-linked-button/component.js +1 -1
- package/build-module/border-box-control/border-box-control-linked-button/component.js.map +1 -1
- package/build-module/border-control/border-control-dropdown/component.js +4 -2
- package/build-module/border-control/border-control-dropdown/component.js.map +1 -1
- package/build-module/border-control/border-control-dropdown/hook.js +3 -2
- package/build-module/border-control/border-control-dropdown/hook.js.map +1 -1
- package/build-module/border-control/border-control-style-picker/component.js +1 -1
- package/build-module/border-control/border-control-style-picker/component.js.map +1 -1
- package/build-module/border-control/styles.js +17 -17
- package/build-module/border-control/styles.js.map +1 -1
- package/build-module/box-control/index.js +1 -1
- package/build-module/box-control/index.js.map +1 -1
- package/build-module/box-control/linked-button.js +1 -1
- package/build-module/box-control/linked-button.js.map +1 -1
- package/build-module/button/index.js +1 -1
- package/build-module/button/index.js.map +1 -1
- package/build-module/checkbox-control/index.js +1 -1
- package/build-module/checkbox-control/index.js.map +1 -1
- package/build-module/checkbox-control/types.js.map +1 -1
- package/build-module/color-palette/index.native.js +11 -7
- package/build-module/color-palette/index.native.js.map +1 -1
- package/build-module/color-picker/color-copy-button.js +1 -1
- package/build-module/color-picker/color-copy-button.js.map +1 -1
- package/build-module/context/wordpress-component.js.map +1 -1
- package/build-module/custom-select-control-v2/index.js +11 -10
- package/build-module/custom-select-control-v2/index.js.map +1 -1
- package/build-module/date-time/date/styles.js +8 -8
- package/build-module/date-time/date/styles.js.map +1 -1
- package/build-module/date-time/time/timezone.js +11 -2
- package/build-module/date-time/time/timezone.js.map +1 -1
- package/build-module/dimension-control/index.js +2 -0
- package/build-module/dimension-control/index.js.map +1 -1
- package/build-module/dimension-control/types.js.map +1 -1
- package/build-module/dropdown-menu-v2/index.js +201 -154
- package/build-module/dropdown-menu-v2/index.js.map +1 -1
- package/build-module/dropdown-menu-v2/styles.js +68 -61
- package/build-module/dropdown-menu-v2/styles.js.map +1 -1
- package/build-module/dropdown-menu-v2/types.js.map +1 -1
- package/build-module/duotone-picker/duotone-picker.js +4 -3
- package/build-module/duotone-picker/duotone-picker.js.map +1 -1
- package/build-module/focal-point-picker/controls.js +5 -1
- package/build-module/focal-point-picker/controls.js.map +1 -1
- package/build-module/focal-point-picker/index.js +2 -0
- package/build-module/focal-point-picker/index.js.map +1 -1
- package/build-module/focal-point-picker/styles/focal-point-picker-style.js +15 -15
- package/build-module/focal-point-picker/styles/focal-point-picker-style.js.map +1 -1
- package/build-module/focal-point-picker/types.js.map +1 -1
- package/build-module/font-size-picker/font-size-picker-select.js +2 -0
- package/build-module/font-size-picker/font-size-picker-select.js.map +1 -1
- package/build-module/font-size-picker/font-size-picker-toggle-group.js +2 -0
- package/build-module/font-size-picker/font-size-picker-toggle-group.js.map +1 -1
- package/build-module/font-size-picker/index.js +10 -3
- package/build-module/font-size-picker/index.js.map +1 -1
- package/build-module/font-size-picker/index.native.js +5 -2
- package/build-module/font-size-picker/index.native.js.map +1 -1
- package/build-module/font-size-picker/types.js.map +1 -1
- package/build-module/form-token-field/index.js +10 -5
- package/build-module/form-token-field/index.js.map +1 -1
- package/build-module/form-token-field/token.js +1 -0
- package/build-module/form-token-field/token.js.map +1 -1
- package/build-module/gradient-picker/index.js +3 -2
- package/build-module/gradient-picker/index.js.map +1 -1
- package/build-module/index.native.js +6 -3
- package/build-module/index.native.js.map +1 -1
- package/build-module/input-control/styles/input-control-styles.js +31 -29
- package/build-module/input-control/styles/input-control-styles.js.map +1 -1
- package/build-module/input-control/types.js.map +1 -1
- package/build-module/lock-unlock.js +9 -0
- package/build-module/lock-unlock.js.map +1 -0
- package/build-module/mobile/bottom-sheet/index.native.js +9 -1
- package/build-module/mobile/bottom-sheet/index.native.js.map +1 -1
- package/build-module/mobile/color-settings/palette.screen.native.js +8 -4
- package/build-module/mobile/color-settings/palette.screen.native.js.map +1 -1
- package/build-module/mobile/global-styles-context/utils.native.js +38 -13
- package/build-module/mobile/global-styles-context/utils.native.js.map +1 -1
- package/build-module/mobile/image/constants.js +5 -0
- package/build-module/mobile/image/constants.js.map +1 -0
- package/build-module/mobile/image/index.native.js +25 -16
- package/build-module/mobile/image/index.native.js.map +1 -1
- package/build-module/mobile/keyboard-aware-flat-list/index.android.js +40 -6
- package/build-module/mobile/keyboard-aware-flat-list/index.android.js.map +1 -1
- package/build-module/mobile/keyboard-aware-flat-list/index.ios.js +46 -68
- package/build-module/mobile/keyboard-aware-flat-list/index.ios.js.map +1 -1
- package/build-module/mobile/keyboard-aware-flat-list/use-scroll-to-element.native.js +33 -0
- package/build-module/mobile/keyboard-aware-flat-list/use-scroll-to-element.native.js.map +1 -0
- package/build-module/mobile/keyboard-aware-flat-list/{use-scroll-to-text-input.native.js → use-scroll-to-section.native.js} +21 -27
- package/build-module/mobile/keyboard-aware-flat-list/use-scroll-to-section.native.js.map +1 -0
- package/build-module/mobile/keyboard-aware-flat-list/use-scroll.native.js +86 -0
- package/build-module/mobile/keyboard-aware-flat-list/use-scroll.native.js.map +1 -0
- package/build-module/mobile/utils/get-px-from-css-unit.native.js +294 -0
- package/build-module/mobile/utils/get-px-from-css-unit.native.js.map +1 -0
- package/build-module/modal/index.js +18 -13
- package/build-module/modal/index.js.map +1 -1
- package/build-module/navigation/menu/menu-title.js +1 -1
- package/build-module/navigation/menu/menu-title.js.map +1 -1
- package/build-module/navigator/navigator-provider/component.js +3 -16
- package/build-module/navigator/navigator-provider/component.js.map +1 -1
- package/build-module/navigator/navigator-screen/component.js +16 -70
- package/build-module/navigator/navigator-screen/component.js.map +1 -1
- package/build-module/navigator/styles.js +47 -0
- package/build-module/navigator/styles.js.map +1 -0
- package/build-module/number-control/index.js +4 -8
- package/build-module/number-control/index.js.map +1 -1
- package/build-module/number-control/types.js.map +1 -1
- package/build-module/palette-edit/index.js +14 -33
- package/build-module/palette-edit/index.js.map +1 -1
- package/build-module/private-apis.js +10 -23
- package/build-module/private-apis.js.map +1 -1
- package/build-module/private-apis.native.js +14 -0
- package/build-module/private-apis.native.js.map +1 -0
- package/build-module/query-controls/author-select.js +3 -1
- package/build-module/query-controls/author-select.js.map +1 -1
- package/build-module/query-controls/category-select.js +3 -1
- package/build-module/query-controls/category-select.js.map +1 -1
- package/build-module/query-controls/index.js +6 -1
- package/build-module/query-controls/index.js.map +1 -1
- package/build-module/query-controls/types.js.map +1 -1
- package/build-module/radio-control/index.js +1 -0
- package/build-module/radio-control/index.js.map +1 -1
- package/build-module/range-control/index.js +1 -1
- package/build-module/range-control/index.js.map +1 -1
- package/build-module/select-control/styles/select-control-styles.js +15 -25
- package/build-module/select-control/styles/select-control-styles.js.map +1 -1
- package/build-module/slot-fill/index.js +3 -2
- package/build-module/slot-fill/index.js.map +1 -1
- package/build-module/slot-fill/types.js.map +1 -1
- package/build-module/snackbar/types.js.map +1 -1
- package/build-module/tabs/index.js +18 -1
- package/build-module/tabs/index.js.map +1 -1
- package/build-module/tabs/styles.js +3 -3
- package/build-module/tabs/styles.js.map +1 -1
- package/build-module/tabs/tab.js +2 -2
- package/build-module/tabs/tab.js.map +1 -1
- package/build-module/tabs/tabpanel.js +11 -8
- package/build-module/tabs/tabpanel.js.map +1 -1
- package/build-module/tabs/types.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/component.js +4 -4
- package/build-module/toggle-group-control/toggle-group-control/component.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/styles.js +29 -15
- package/build-module/toggle-group-control/toggle-group-control/styles.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control/utils.js +17 -17
- package/build-module/toggle-group-control/toggle-group-control/utils.js.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js +9 -9
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.js.map +1 -1
- package/build-module/tools-panel/tools-panel/component.js +3 -1
- package/build-module/tools-panel/tools-panel/component.js.map +1 -1
- package/build-module/tools-panel/tools-panel-header/component.js +9 -8
- package/build-module/tools-panel/tools-panel-header/component.js.map +1 -1
- package/build-module/tools-panel/tools-panel-item/hook.js +11 -11
- package/build-module/tools-panel/tools-panel-item/hook.js.map +1 -1
- package/build-module/tools-panel/types.js.map +1 -1
- package/build-module/tooltip/index.js +34 -12
- package/build-module/tooltip/index.js.map +1 -1
- package/build-module/tooltip/types.js.map +1 -1
- package/build-module/truncate/hook.js +10 -4
- package/build-module/truncate/hook.js.map +1 -1
- package/build-module/truncate/types.js.map +1 -1
- package/build-module/unit-control/index.js +1 -1
- package/build-module/unit-control/index.js.map +1 -1
- package/build-module/utils/strings.js +32 -2
- package/build-module/utils/strings.js.map +1 -1
- package/build-style/style-rtl.css +30 -6
- package/build-style/style.css +30 -6
- package/build-types/base-control/index.d.ts +3 -27
- package/build-types/base-control/index.d.ts.map +1 -1
- package/build-types/base-control/stories/index.story.d.ts +4 -1
- package/build-types/base-control/stories/index.story.d.ts.map +1 -1
- package/build-types/border-box-control/border-box-control/hook.d.ts +4 -4
- package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +6 -6
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +4 -4
- package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +4 -4
- package/build-types/border-box-control/stories/index.story.d.ts +1 -1
- package/build-types/border-control/border-control/hook.d.ts +4 -4
- package/build-types/border-control/border-control-dropdown/component.d.ts.map +1 -1
- package/build-types/border-control/border-control-dropdown/hook.d.ts +5 -4
- package/build-types/border-control/border-control-dropdown/hook.d.ts.map +1 -1
- package/build-types/border-control/border-control-style-picker/hook.d.ts +4 -4
- package/build-types/border-control/stories/index.story.d.ts +6 -6
- package/build-types/border-control/styles.d.ts +1 -1
- package/build-types/border-control/styles.d.ts.map +1 -1
- package/build-types/box-control/stories/index.story.d.ts +42 -42
- package/build-types/box-control/styles/box-control-styles.d.ts +1 -1
- package/build-types/button/deprecated.d.ts +3 -3
- package/build-types/card/card/hook.d.ts +4 -4
- package/build-types/card/card-body/hook.d.ts +4 -4
- package/build-types/card/card-divider/hook.d.ts +4 -4
- package/build-types/card/card-footer/hook.d.ts +4 -4
- package/build-types/card/card-header/hook.d.ts +4 -4
- package/build-types/card/card-media/hook.d.ts +4 -4
- package/build-types/checkbox-control/index.d.ts.map +1 -1
- package/build-types/checkbox-control/types.d.ts +3 -2
- package/build-types/checkbox-control/types.d.ts.map +1 -1
- package/build-types/color-palette/styles.d.ts +2 -2
- package/build-types/color-picker/component.d.ts +2 -2
- package/build-types/color-picker/stories/index.story.d.ts +1 -1
- package/build-types/color-picker/stories/index.story.d.ts.map +1 -1
- package/build-types/color-picker/styles.d.ts +3 -3
- package/build-types/composite/test/index.d.ts.map +1 -0
- package/build-types/context/wordpress-component.d.ts +3 -3
- package/build-types/context/wordpress-component.d.ts.map +1 -1
- package/build-types/custom-select-control-v2/index.d.ts +3 -2
- package/build-types/custom-select-control-v2/index.d.ts.map +1 -1
- package/build-types/custom-select-control-v2/stories/index.story.d.ts +4 -3
- package/build-types/custom-select-control-v2/stories/index.story.d.ts.map +1 -1
- package/build-types/date-time/date/styles.d.ts +3 -3
- package/build-types/date-time/date-time/styles.d.ts +1 -1
- package/build-types/date-time/time/styles.d.ts +4 -4
- package/build-types/date-time/time/timezone.d.ts.map +1 -1
- package/build-types/dimension-control/index.d.ts.map +1 -1
- package/build-types/dimension-control/types.d.ts +6 -0
- package/build-types/dimension-control/types.d.ts.map +1 -1
- package/build-types/dropdown/index.d.ts +1 -1
- package/build-types/dropdown/index.d.ts.map +1 -1
- package/build-types/dropdown/stories/index.story.d.ts +3 -3
- package/build-types/dropdown/stories/index.story.d.ts.map +1 -1
- package/build-types/dropdown-menu/index.d.ts +1 -1
- package/build-types/dropdown-menu/index.d.ts.map +1 -1
- package/build-types/dropdown-menu/stories/index.story.d.ts +2 -2
- package/build-types/dropdown-menu/stories/index.story.d.ts.map +1 -1
- package/build-types/dropdown-menu-v2/index.d.ts +18 -15
- package/build-types/dropdown-menu-v2/index.d.ts.map +1 -1
- package/build-types/dropdown-menu-v2/stories/index.story.d.ts +7 -2
- package/build-types/dropdown-menu-v2/stories/index.story.d.ts.map +1 -1
- package/build-types/dropdown-menu-v2/styles.d.ts +77 -23
- package/build-types/dropdown-menu-v2/styles.d.ts.map +1 -1
- package/build-types/dropdown-menu-v2/types.d.ts +89 -173
- package/build-types/dropdown-menu-v2/types.d.ts.map +1 -1
- package/build-types/duotone-picker/duotone-picker.d.ts.map +1 -1
- package/build-types/elevation/hook.d.ts +4 -4
- package/build-types/flex/flex/hook.d.ts +4 -4
- package/build-types/flex/flex-block/hook.d.ts +4 -4
- package/build-types/flex/flex-item/hook.d.ts +4 -4
- package/build-types/focal-point-picker/controls.d.ts +1 -1
- package/build-types/focal-point-picker/controls.d.ts.map +1 -1
- package/build-types/focal-point-picker/index.d.ts +1 -1
- package/build-types/focal-point-picker/index.d.ts.map +1 -1
- package/build-types/focal-point-picker/stories/index.story.d.ts +8 -4
- package/build-types/focal-point-picker/stories/index.story.d.ts.map +1 -1
- package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +1 -1
- package/build-types/focal-point-picker/types.d.ts +7 -0
- package/build-types/focal-point-picker/types.d.ts.map +1 -1
- package/build-types/font-size-picker/font-size-picker-select.d.ts.map +1 -1
- package/build-types/font-size-picker/font-size-picker-toggle-group.d.ts.map +1 -1
- package/build-types/font-size-picker/index.d.ts.map +1 -1
- package/build-types/font-size-picker/styles.d.ts +1 -1
- package/build-types/font-size-picker/types.d.ts +8 -1
- package/build-types/font-size-picker/types.d.ts.map +1 -1
- package/build-types/form-token-field/index.d.ts.map +1 -1
- package/build-types/form-token-field/token.d.ts.map +1 -1
- package/build-types/grid/hook.d.ts +4 -4
- package/build-types/h-stack/hook.d.ts +4 -4
- package/build-types/heading/component.d.ts +1 -1
- package/build-types/heading/hook.d.ts +4 -4
- package/build-types/input-control/styles/input-control-styles.d.ts +11 -0
- package/build-types/input-control/styles/input-control-styles.d.ts.map +1 -1
- package/build-types/input-control/types.d.ts +1 -1
- package/build-types/input-control/types.d.ts.map +1 -1
- package/build-types/item-group/item/hook.d.ts +4 -4
- package/build-types/item-group/item-group/hook.d.ts +4 -4
- package/build-types/lock-unlock.d.ts +3 -0
- package/build-types/lock-unlock.d.ts.map +1 -0
- package/build-types/menu-item/index.d.ts +1 -1
- package/build-types/menu-item/stories/index.story.d.ts +4 -4
- package/build-types/mobile/image/constants.d.ts +5 -0
- package/build-types/mobile/image/constants.d.ts.map +1 -0
- package/build-types/modal/index.d.ts.map +1 -1
- package/build-types/navigation/styles/navigation-styles.d.ts +3 -3
- package/build-types/navigator/navigator-back-button/hook.d.ts +6 -6
- package/build-types/navigator/navigator-button/hook.d.ts +6 -6
- package/build-types/navigator/navigator-provider/component.d.ts.map +1 -1
- package/build-types/navigator/navigator-screen/component.d.ts +1 -7
- package/build-types/navigator/navigator-screen/component.d.ts.map +1 -1
- package/build-types/navigator/styles.d.ts +9 -0
- package/build-types/navigator/styles.d.ts.map +1 -0
- package/build-types/number-control/index.d.ts +1 -1
- package/build-types/number-control/index.d.ts.map +1 -1
- package/build-types/number-control/stories/index.story.d.ts +1 -1
- package/build-types/number-control/types.d.ts +1 -1
- package/build-types/palette-edit/index.d.ts +2 -2
- package/build-types/palette-edit/index.d.ts.map +1 -1
- package/build-types/palette-edit/styles.d.ts +3 -3
- package/build-types/popover/index.d.ts +1 -1
- package/build-types/popover/index.d.ts.map +1 -1
- package/build-types/popover/stories/e2e/index.story.d.ts +1 -1
- package/build-types/private-apis.d.ts +0 -1
- package/build-types/private-apis.d.ts.map +1 -1
- package/build-types/query-controls/author-select.d.ts +1 -1
- package/build-types/query-controls/author-select.d.ts.map +1 -1
- package/build-types/query-controls/category-select.d.ts +1 -1
- package/build-types/query-controls/category-select.d.ts.map +1 -1
- package/build-types/query-controls/index.d.ts +1 -1
- package/build-types/query-controls/index.d.ts.map +1 -1
- package/build-types/query-controls/types.d.ts +9 -0
- package/build-types/query-controls/types.d.ts.map +1 -1
- package/build-types/radio-control/index.d.ts.map +1 -1
- package/build-types/range-control/index.d.ts +1 -1
- package/build-types/range-control/styles/range-control-styles.d.ts +1 -1
- package/build-types/resizable-box/index.d.ts +1 -1
- package/build-types/resizable-box/resize-tooltip/index.d.ts +1 -1
- package/build-types/resizable-box/stories/index.story.d.ts +2 -2
- package/build-types/scrollable/hook.d.ts +4 -4
- package/build-types/search-control/index.d.ts +1 -1
- package/build-types/search-control/stories/index.story.d.ts +2 -2
- package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
- package/build-types/slot-fill/index.d.ts +1 -1
- package/build-types/slot-fill/index.d.ts.map +1 -1
- package/build-types/slot-fill/types.d.ts +4 -0
- package/build-types/slot-fill/types.d.ts.map +1 -1
- package/build-types/snackbar/index.d.ts +2 -2
- package/build-types/snackbar/stories/index.story.d.ts +0 -3
- package/build-types/snackbar/stories/index.story.d.ts.map +1 -1
- package/build-types/snackbar/types.d.ts +1 -1
- package/build-types/snackbar/types.d.ts.map +1 -1
- package/build-types/spacer/hook.d.ts +4 -4
- package/build-types/surface/hook.d.ts +4 -4
- package/build-types/tabs/index.d.ts +2 -2
- package/build-types/tabs/index.d.ts.map +1 -1
- package/build-types/tabs/styles.d.ts.map +1 -1
- package/build-types/tabs/tab.d.ts +2 -1
- package/build-types/tabs/tab.d.ts.map +1 -1
- package/build-types/tabs/tabpanel.d.ts +3 -2
- package/build-types/tabs/tabpanel.d.ts.map +1 -1
- package/build-types/tabs/types.d.ts +8 -3
- package/build-types/tabs/types.d.ts.map +1 -1
- package/build-types/text/hook.d.ts +4 -4
- package/build-types/text-control/index.d.ts +1 -1
- package/build-types/textarea-control/index.d.ts +1 -1
- package/build-types/toggle-control/stories/index.story.d.ts +2 -2
- package/build-types/toggle-group-control/toggle-group-control/as-button-group.d.ts +1 -1
- package/build-types/toggle-group-control/toggle-group-control/as-radio-group.d.ts +1 -1
- package/build-types/toggle-group-control/toggle-group-control/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/styles.d.ts +2 -2
- package/build-types/toggle-group-control/toggle-group-control/styles.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control/utils.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option/component.d.ts +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-base/component.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-base/styles.d.ts.map +1 -1
- package/build-types/toggle-group-control/toggle-group-control-option-icon/component.d.ts +1 -1
- package/build-types/toolbar/toolbar-button/index.d.ts +3 -3
- package/build-types/tools-panel/tools-panel/component.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel/hook.d.ts +5 -4
- package/build-types/tools-panel/tools-panel/hook.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel-header/component.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel-header/hook.d.ts +5 -4
- package/build-types/tools-panel/tools-panel-header/hook.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel-item/hook.d.ts +4 -4
- package/build-types/tools-panel/tools-panel-item/hook.d.ts.map +1 -1
- package/build-types/tools-panel/types.d.ts +9 -0
- package/build-types/tools-panel/types.d.ts.map +1 -1
- package/build-types/tooltip/index.d.ts +1 -1
- package/build-types/tooltip/index.d.ts.map +1 -1
- package/build-types/tooltip/stories/index.story.d.ts +10 -1
- package/build-types/tooltip/stories/index.story.d.ts.map +1 -1
- package/build-types/tooltip/types.d.ts +3 -0
- package/build-types/tooltip/types.d.ts.map +1 -1
- package/build-types/truncate/hook.d.ts +5 -5
- package/build-types/truncate/hook.d.ts.map +1 -1
- package/build-types/truncate/types.d.ts +4 -0
- package/build-types/truncate/types.d.ts.map +1 -1
- package/build-types/unit-control/index.d.ts +1 -1
- package/build-types/unit-control/styles/unit-control-styles.d.ts +1 -1
- package/build-types/utils/strings.d.ts +14 -2
- package/build-types/utils/strings.d.ts.map +1 -1
- package/build-types/v-stack/hook.d.ts +4 -4
- package/build-types/v-stack/stories/index.story.d.ts +1 -1
- package/package.json +20 -21
- package/src/alignment-matrix-control/test/index.tsx +10 -16
- package/src/base-control/index.tsx +21 -16
- package/src/border-box-control/border-box-control-linked-button/component.tsx +1 -1
- package/src/border-control/border-control-dropdown/component.tsx +3 -1
- package/src/border-control/border-control-dropdown/hook.ts +3 -2
- package/src/border-control/border-control-style-picker/component.tsx +1 -1
- package/src/border-control/styles.ts +2 -9
- package/src/box-control/index.tsx +1 -1
- package/src/box-control/linked-button.tsx +1 -1
- package/src/button/README.md +32 -6
- package/src/button/index.tsx +1 -1
- package/src/button-group/README.md +0 -6
- package/src/card/card/README.md +1 -1
- package/src/checkbox-control/README.md +3 -10
- package/src/checkbox-control/index.tsx +8 -6
- package/src/checkbox-control/test/__snapshots__/index.tsx.snap +3 -8
- package/src/checkbox-control/test/index.tsx +7 -0
- package/src/checkbox-control/types.ts +3 -2
- package/src/color-palette/index.native.js +18 -7
- package/src/color-picker/color-copy-button.tsx +1 -1
- package/src/combobox-control/README.md +0 -6
- package/src/composite/test/index.tsx +576 -0
- package/src/context/wordpress-component.ts +11 -6
- package/src/custom-select-control/README.md +0 -6
- package/src/custom-select-control/test/index.js +367 -35
- package/src/custom-select-control-v2/index.tsx +13 -12
- package/src/date-time/date/styles.ts +3 -3
- package/src/date-time/time/timezone.tsx +15 -3
- package/src/dimension-control/index.tsx +2 -0
- package/src/dimension-control/test/__snapshots__/index.test.js.snap +2 -2
- package/src/dimension-control/types.ts +6 -0
- package/src/dropdown-menu/README.md +0 -5
- package/src/dropdown-menu-v2/README.md +75 -136
- package/src/dropdown-menu-v2/index.tsx +321 -231
- package/src/dropdown-menu-v2/stories/index.story.tsx +522 -126
- package/src/dropdown-menu-v2/styles.ts +226 -151
- package/src/dropdown-menu-v2/test/index.tsx +480 -188
- package/src/dropdown-menu-v2/types.ts +98 -184
- package/src/duotone-picker/duotone-picker.tsx +7 -3
- package/src/focal-point-picker/controls.tsx +4 -0
- package/src/focal-point-picker/index.tsx +2 -0
- package/src/focal-point-picker/styles/focal-point-picker-style.ts +1 -1
- package/src/focal-point-picker/types.ts +7 -0
- package/src/font-size-picker/font-size-picker-select.tsx +2 -0
- package/src/font-size-picker/font-size-picker-toggle-group.tsx +9 -1
- package/src/font-size-picker/index.native.js +8 -2
- package/src/font-size-picker/index.tsx +15 -5
- package/src/font-size-picker/types.ts +8 -1
- package/src/form-toggle/README.md +0 -6
- package/src/form-toggle/style.scss +4 -2
- package/src/form-token-field/index.tsx +11 -7
- package/src/form-token-field/test/index.tsx +97 -0
- package/src/form-token-field/token.tsx +1 -0
- package/src/gradient-picker/index.tsx +2 -2
- package/src/index.native.js +6 -3
- package/src/input-control/styles/input-control-styles.tsx +10 -8
- package/src/input-control/types.ts +1 -1
- package/src/lock-unlock.js +10 -0
- package/src/menu-group/README.md +0 -8
- package/src/menu-items-choice/README.md +0 -7
- package/src/mobile/bottom-sheet/index.native.js +15 -1
- package/src/mobile/color-settings/palette.screen.native.js +7 -5
- package/src/mobile/global-styles-context/test/fixtures/theme.native.js +0 -20
- package/src/mobile/global-styles-context/test/utils.native.js +22 -0
- package/src/mobile/global-styles-context/utils.native.js +42 -19
- package/src/mobile/image/constants.js +1 -0
- package/src/mobile/image/index.native.js +55 -18
- package/src/mobile/image/style.native.scss +35 -9
- package/src/mobile/keyboard-aware-flat-list/index.android.js +50 -5
- package/src/mobile/keyboard-aware-flat-list/index.ios.js +65 -91
- package/src/mobile/keyboard-aware-flat-list/test/{use-scroll-to-text-input.native.js → use-scroll-to-section.native.js} +27 -25
- package/src/mobile/keyboard-aware-flat-list/test/use-scroll.native.js +71 -0
- package/src/mobile/keyboard-aware-flat-list/use-scroll-to-element.native.js +41 -0
- package/src/mobile/keyboard-aware-flat-list/{use-scroll-to-text-input.native.js → use-scroll-to-section.native.js} +22 -27
- package/src/mobile/keyboard-aware-flat-list/use-scroll.native.js +100 -0
- package/src/mobile/link-settings/style.native.scss +0 -17
- package/src/mobile/utils/get-px-from-css-unit.native.js +329 -0
- package/src/mobile/utils/test/get-px-from-css-unit.native.js +172 -0
- package/src/modal/README.md +0 -6
- package/src/modal/index.tsx +18 -16
- package/src/modal/test/index.tsx +90 -1
- package/src/navigation/menu/menu-title.tsx +1 -1
- package/src/navigator/navigator-provider/component.tsx +3 -4
- package/src/navigator/navigator-screen/component.tsx +15 -93
- package/src/navigator/styles.ts +71 -0
- package/src/navigator/test/index.tsx +0 -64
- package/src/notice/README.md +0 -6
- package/src/number-control/README.md +2 -2
- package/src/number-control/index.tsx +4 -8
- package/src/number-control/types.ts +1 -1
- package/src/palette-edit/index.tsx +14 -43
- package/src/palette-edit/style.scss +2 -2
- package/src/panel/README.md +0 -6
- package/src/private-apis.native.js +13 -0
- package/src/private-apis.ts +12 -37
- package/src/query-controls/author-select.tsx +2 -0
- package/src/query-controls/category-select.tsx +2 -0
- package/src/query-controls/index.tsx +6 -1
- package/src/query-controls/types.ts +9 -0
- package/src/radio-control/README.md +0 -6
- package/src/radio-control/index.tsx +4 -1
- package/src/radio-control/style.scss +29 -2
- package/src/radio-group/README.md +0 -6
- package/src/range-control/README.md +1 -9
- package/src/range-control/index.tsx +1 -1
- package/src/search-control/README.md +1 -5
- package/src/select-control/README.md +0 -6
- package/src/select-control/styles/select-control-styles.ts +10 -28
- package/src/slot-fill/index.tsx +5 -2
- package/src/slot-fill/types.ts +5 -0
- package/src/snackbar/README.md +0 -6
- package/src/snackbar/stories/index.story.tsx +7 -5
- package/src/snackbar/style.scss +4 -3
- package/src/snackbar/types.ts +2 -1
- package/src/spacer/README.md +0 -2
- package/src/spinner/README.md +2 -0
- package/src/tab-panel/README.md +0 -5
- package/src/tab-panel/test/index.tsx +39 -56
- package/src/tabs/README.md +4 -4
- package/src/tabs/index.tsx +22 -1
- package/src/tabs/stories/index.story.tsx +48 -48
- package/src/tabs/styles.ts +7 -1
- package/src/tabs/tab.tsx +3 -3
- package/src/tabs/tabpanel.tsx +13 -8
- package/src/tabs/test/index.tsx +236 -106
- package/src/tabs/types.ts +8 -3
- package/src/text-control/README.md +0 -6
- package/src/textarea-control/README.md +0 -6
- package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +12 -16
- package/src/toggle-group-control/test/index.tsx +107 -41
- package/src/toggle-group-control/toggle-group-control/component.tsx +5 -4
- package/src/toggle-group-control/toggle-group-control/styles.ts +13 -19
- package/src/toggle-group-control/toggle-group-control/utils.ts +15 -20
- package/src/toggle-group-control/toggle-group-control-option/README.md +1 -1
- package/src/toggle-group-control/toggle-group-control-option-base/README.md +1 -1
- package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +3 -2
- package/src/toggle-group-control/toggle-group-control-option-icon/README.md +1 -1
- package/src/toolbar/toolbar/README.md +0 -6
- package/src/tools-panel/test/index.tsx +12 -20
- package/src/tools-panel/tools-panel/README.md +7 -0
- package/src/tools-panel/tools-panel/component.tsx +2 -0
- package/src/tools-panel/tools-panel-header/README.md +7 -0
- package/src/tools-panel/tools-panel-header/component.tsx +20 -13
- package/src/tools-panel/tools-panel-item/hook.ts +10 -21
- package/src/tools-panel/types.ts +9 -0
- package/src/tooltip/README.md +4 -0
- package/src/tooltip/index.tsx +48 -10
- package/src/tooltip/stories/index.story.tsx +18 -1
- package/src/tooltip/test/index.tsx +404 -254
- package/src/tooltip/types.ts +4 -0
- package/src/tree-grid/README.md +0 -4
- package/src/truncate/README.md +8 -0
- package/src/truncate/hook.ts +17 -10
- package/src/truncate/test/index.tsx +54 -27
- package/src/truncate/types.ts +4 -0
- package/src/unit-control/index.tsx +1 -1
- package/src/utils/strings.ts +30 -2
- package/src/utils/test/strings.js +96 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/build/dropdown-menu-v2-ariakit/index.js +0 -256
- package/build/dropdown-menu-v2-ariakit/index.js.map +0 -1
- package/build/dropdown-menu-v2-ariakit/styles.js +0 -180
- package/build/dropdown-menu-v2-ariakit/styles.js.map +0 -1
- package/build/dropdown-menu-v2-ariakit/types.js +0 -6
- package/build/dropdown-menu-v2-ariakit/types.js.map +0 -1
- package/build/mobile/inserter-button/index.native.js +0 -98
- package/build/mobile/inserter-button/index.native.js.map +0 -1
- package/build/mobile/inserter-button/sparkles.js +0 -23
- package/build/mobile/inserter-button/sparkles.js.map +0 -1
- package/build/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js.map +0 -1
- package/build/mobile/link-settings/image-link-destinations-screen.native.js +0 -119
- package/build/mobile/link-settings/image-link-destinations-screen.native.js.map +0 -1
- package/build-module/dropdown-menu-v2-ariakit/index.js +0 -237
- package/build-module/dropdown-menu-v2-ariakit/index.js.map +0 -1
- package/build-module/dropdown-menu-v2-ariakit/styles.js +0 -165
- package/build-module/dropdown-menu-v2-ariakit/styles.js.map +0 -1
- package/build-module/dropdown-menu-v2-ariakit/types.js +0 -2
- package/build-module/dropdown-menu-v2-ariakit/types.js.map +0 -1
- package/build-module/mobile/inserter-button/index.native.js +0 -89
- package/build-module/mobile/inserter-button/index.native.js.map +0 -1
- package/build-module/mobile/inserter-button/sparkles.js +0 -15
- package/build-module/mobile/inserter-button/sparkles.js.map +0 -1
- package/build-module/mobile/keyboard-aware-flat-list/use-scroll-to-text-input.native.js.map +0 -1
- package/build-module/mobile/link-settings/image-link-destinations-screen.native.js +0 -110
- package/build-module/mobile/link-settings/image-link-destinations-screen.native.js.map +0 -1
- package/build-types/dropdown-menu-v2-ariakit/index.d.ts +0 -20
- package/build-types/dropdown-menu-v2-ariakit/index.d.ts.map +0 -1
- package/build-types/dropdown-menu-v2-ariakit/stories/index.story.d.ts +0 -16
- package/build-types/dropdown-menu-v2-ariakit/stories/index.story.d.ts.map +0 -1
- package/build-types/dropdown-menu-v2-ariakit/styles.d.ts +0 -96
- package/build-types/dropdown-menu-v2-ariakit/styles.d.ts.map +0 -1
- package/build-types/dropdown-menu-v2-ariakit/test/index.d.ts.map +0 -1
- package/build-types/dropdown-menu-v2-ariakit/types.d.ts +0 -168
- package/build-types/dropdown-menu-v2-ariakit/types.d.ts.map +0 -1
- package/build-types/mobile/inserter-button/sparkles.d.ts +0 -3
- package/build-types/mobile/inserter-button/sparkles.d.ts.map +0 -1
- package/src/dropdown-menu-v2-ariakit/README.md +0 -331
- package/src/dropdown-menu-v2-ariakit/index.tsx +0 -383
- package/src/dropdown-menu-v2-ariakit/stories/index.story.tsx +0 -617
- package/src/dropdown-menu-v2-ariakit/styles.ts +0 -333
- package/src/dropdown-menu-v2-ariakit/test/index.tsx +0 -1108
- package/src/dropdown-menu-v2-ariakit/types.ts +0 -179
- package/src/mobile/inserter-button/README.md +0 -62
- package/src/mobile/inserter-button/index.native.js +0 -116
- package/src/mobile/inserter-button/sparkles.js +0 -15
- package/src/mobile/inserter-button/style.native.scss +0 -72
- package/src/mobile/link-settings/image-link-destinations-screen.native.js +0 -152
- /package/build-types/{dropdown-menu-v2-ariakit → composite}/test/index.d.ts +0 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
default as memoizedGetPxFromCssUnit,
|
|
6
|
+
getPxFromCssUnit,
|
|
7
|
+
} from '../get-px-from-css-unit';
|
|
8
|
+
|
|
9
|
+
describe( 'getPxFromCssUnit', () => {
|
|
10
|
+
// Absolute units.
|
|
11
|
+
describe( 'absolute unites should return px values', () => {
|
|
12
|
+
const testData = [
|
|
13
|
+
[ '25px', '25px' ],
|
|
14
|
+
[ '25.5', '26px' ],
|
|
15
|
+
[ '1cm', '38px' ],
|
|
16
|
+
[ '10mm', '38px' ],
|
|
17
|
+
[ '1in', '96px' ],
|
|
18
|
+
[ '12pt', '16px' ],
|
|
19
|
+
[ '1pc', '16px' ],
|
|
20
|
+
[ '40Q', '38px' ], // 40 Q should be 1 cm.
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
test.each( testData )( 'getPxFromCssUnit( %s )', ( unit, expected ) => {
|
|
24
|
+
expect( getPxFromCssUnit( unit ) ).toBe( expected );
|
|
25
|
+
} );
|
|
26
|
+
test.each( testData )(
|
|
27
|
+
'memoizedGetPxFromCssUnit( %s )',
|
|
28
|
+
( unit, expected ) => {
|
|
29
|
+
expect( memoizedGetPxFromCssUnit( unit ) ).toBe( expected );
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
test.each( testData )(
|
|
33
|
+
'cached memoizedGetPxFromCssUnit( %s )',
|
|
34
|
+
( unit, expected ) => {
|
|
35
|
+
expect( memoizedGetPxFromCssUnit( unit ) ).toBe( expected );
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
} );
|
|
39
|
+
|
|
40
|
+
describe( 'relative unites should return px values', () => {
|
|
41
|
+
const settings = {
|
|
42
|
+
fontSize: 10,
|
|
43
|
+
width: 100,
|
|
44
|
+
height: 200,
|
|
45
|
+
lineHeight: 2,
|
|
46
|
+
type: 'font',
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const testData = [
|
|
50
|
+
[ '2em', '20px' ],
|
|
51
|
+
[ '2rem', '20px' ],
|
|
52
|
+
[ '1.125rem', '11px' ],
|
|
53
|
+
[ '20vw', '20px' ],
|
|
54
|
+
[ '20vh', '40px' ],
|
|
55
|
+
[ '20vmin', '20px' ],
|
|
56
|
+
[ '20vmax', '40px' ],
|
|
57
|
+
[ '20lh', '40px' ],
|
|
58
|
+
[ '120%', '12px' ],
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
test.each( testData )( 'getPxFromCssUnit( %s )', ( unit, expected ) => {
|
|
62
|
+
expect( getPxFromCssUnit( unit, settings ) ).toBe( expected );
|
|
63
|
+
} );
|
|
64
|
+
test.each( testData )(
|
|
65
|
+
'memoizedGetPxFromCssUnit( %s )',
|
|
66
|
+
( unit, expected ) => {
|
|
67
|
+
expect( memoizedGetPxFromCssUnit( unit, settings ) ).toBe(
|
|
68
|
+
expected
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
test.each( testData )(
|
|
73
|
+
'cached memoizedGetPxFromCssUnit( %s )',
|
|
74
|
+
( unit, expected ) => {
|
|
75
|
+
expect( memoizedGetPxFromCssUnit( unit, settings ) ).toBe(
|
|
76
|
+
expected
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
} );
|
|
81
|
+
|
|
82
|
+
// Function units.
|
|
83
|
+
|
|
84
|
+
describe( 'function unites should return px values', () => {
|
|
85
|
+
const settings = {
|
|
86
|
+
fontSize: 10,
|
|
87
|
+
width: 100,
|
|
88
|
+
height: 200,
|
|
89
|
+
lineHeight: 2,
|
|
90
|
+
type: 'font',
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const testData = [
|
|
94
|
+
[ 'min(20px, 25px)', '20px' ],
|
|
95
|
+
[ 'min(20px, 9px, 12pt, 25px)', '9px' ],
|
|
96
|
+
[ 'max(20px, 25px)', '25px' ],
|
|
97
|
+
[ 'clamp(10px, 9px, 25px)', '10px' ],
|
|
98
|
+
[ 'clamp(10px, 35px, 25px)', '25px' ],
|
|
99
|
+
[ 'clamp(10px, 15px, 25px)', '15px' ],
|
|
100
|
+
[ 'min(max(20px,25px), 35px)', '25px' ],
|
|
101
|
+
[ 'max(min(20px,25px), 35px)', '35px' ],
|
|
102
|
+
[ '10px + 25px', '35px' ],
|
|
103
|
+
[ 'calc(10px + 25px)', '35px' ],
|
|
104
|
+
[ 'calc( 2 * 20px)', '40px' ],
|
|
105
|
+
[ 'calc(25px - 10px)', '15px' ],
|
|
106
|
+
[ 'min(10px + 25px, 55pt)', '35px' ],
|
|
107
|
+
[ 'calc(12vw * 10px)', '450px' ],
|
|
108
|
+
[ 'calc(45vw / 10px)', '17px' ],
|
|
109
|
+
[ '', null ],
|
|
110
|
+
[ undefined, null ],
|
|
111
|
+
[ 123, '123px' ],
|
|
112
|
+
[ 123.456, '123px' ],
|
|
113
|
+
[ 'abc', null ],
|
|
114
|
+
[ 'console.log("howdy"); + 10px', null ],
|
|
115
|
+
[ 'calc(12vw * 10px', null ], // Missing closing bracket.
|
|
116
|
+
[ 'calc( 1em + 0.875rem )', '30px' ], // Decimals
|
|
117
|
+
[
|
|
118
|
+
'clamp(1.8rem, 1.8rem + ((1vw / 0.48rem + 1rem) * 2.885), 3rem)',
|
|
119
|
+
'48px',
|
|
120
|
+
],
|
|
121
|
+
[
|
|
122
|
+
'clamp(5rem, 5.25rem + ((1vw - 0.48rem) * 9.096), 8rem)',
|
|
123
|
+
'80px',
|
|
124
|
+
],
|
|
125
|
+
[
|
|
126
|
+
'clamp(2.625rem, calc(2.625rem + ((1vw - 0.48rem) * 8.4135)), 3.25rem)',
|
|
127
|
+
'42px',
|
|
128
|
+
],
|
|
129
|
+
[ 'var:preset|font-size|medium', null ],
|
|
130
|
+
];
|
|
131
|
+
|
|
132
|
+
test.each( testData )( 'getPxFromCssUnit( %s )', ( unit, expected ) => {
|
|
133
|
+
expect( getPxFromCssUnit( unit, settings ) ).toBe( expected );
|
|
134
|
+
} );
|
|
135
|
+
test.each( testData )(
|
|
136
|
+
'memoizedGetPxFromCssUnit( %s )',
|
|
137
|
+
( unit, expected ) => {
|
|
138
|
+
expect( memoizedGetPxFromCssUnit( unit, settings ) ).toBe(
|
|
139
|
+
expected
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
test.each( testData )(
|
|
144
|
+
'cached memoizedGetPxFromCssUnit( %s )',
|
|
145
|
+
( unit, expected ) => {
|
|
146
|
+
expect( memoizedGetPxFromCssUnit( unit, settings ) ).toBe(
|
|
147
|
+
expected
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
);
|
|
151
|
+
} );
|
|
152
|
+
// Skip this test it might be useful in dev.
|
|
153
|
+
it.skip( 'test performance of memoizedGetPxFromCssUnit function', () => {
|
|
154
|
+
const start = Date.now();
|
|
155
|
+
let i = 0;
|
|
156
|
+
const intervals = 1000;
|
|
157
|
+
while ( i < intervals ) {
|
|
158
|
+
getPxFromCssUnit( 'max(25px, 35px)', { width: 200 } );
|
|
159
|
+
i++;
|
|
160
|
+
}
|
|
161
|
+
const rawDuration = Date.now() - start;
|
|
162
|
+
|
|
163
|
+
const startM = Date.now();
|
|
164
|
+
i = 0;
|
|
165
|
+
// The memoized Version should be at 10X better then the non default one.
|
|
166
|
+
while ( i < intervals * 10 ) {
|
|
167
|
+
memoizedGetPxFromCssUnit( 'max(25px, 35px)', { width: 201 } );
|
|
168
|
+
i++;
|
|
169
|
+
}
|
|
170
|
+
expect( rawDuration > Date.now() - startM ).toBe( true );
|
|
171
|
+
} );
|
|
172
|
+
} );
|
package/src/modal/README.md
CHANGED
|
@@ -4,12 +4,6 @@ Modals give users information and choices related to a task they’re trying to
|
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
7
|
-
## Table of contents
|
|
8
|
-
|
|
9
|
-
1. [Design guidelines](#design-guidelines)
|
|
10
|
-
2. [Development guidelines](#development-guidelines)
|
|
11
|
-
3. [Related components](#related-components)
|
|
12
|
-
|
|
13
7
|
## Design guidelines
|
|
14
8
|
|
|
15
9
|
### Usage
|
package/src/modal/index.tsx
CHANGED
|
@@ -43,12 +43,12 @@ import StyleProvider from '../style-provider';
|
|
|
43
43
|
import type { ModalProps } from './types';
|
|
44
44
|
|
|
45
45
|
// Used to track and dismiss the prior modal when another opens unless nested.
|
|
46
|
-
const
|
|
47
|
-
ModalProps[ 'onRequestClose' ] | undefined
|
|
48
|
-
>[]
|
|
49
|
-
const ModalContext = createContext( level0Dismissers );
|
|
46
|
+
const ModalContext = createContext<
|
|
47
|
+
MutableRefObject< ModalProps[ 'onRequestClose' ] | undefined >[]
|
|
48
|
+
>( [] );
|
|
50
49
|
|
|
51
|
-
|
|
50
|
+
// Used to track body class names applied while modals are open.
|
|
51
|
+
const bodyOpenClasses = new Map< string, number >();
|
|
52
52
|
|
|
53
53
|
function UnforwardedModal(
|
|
54
54
|
props: ModalProps,
|
|
@@ -146,7 +146,7 @@ function UnforwardedModal(
|
|
|
146
146
|
// one should remain open at a time and the list enables closing prior ones.
|
|
147
147
|
const dismissers = useContext( ModalContext );
|
|
148
148
|
// Used for the tracking and dismissing any nested modals.
|
|
149
|
-
const nestedDismissers = useRef< typeof
|
|
149
|
+
const nestedDismissers = useRef< typeof dismissers >( [] );
|
|
150
150
|
|
|
151
151
|
// Updates the stack tracking open modals at this level and calls
|
|
152
152
|
// onRequestClose for any prior and/or nested modals as applicable.
|
|
@@ -162,20 +162,22 @@ function UnforwardedModal(
|
|
|
162
162
|
};
|
|
163
163
|
}, [ dismissers ] );
|
|
164
164
|
|
|
165
|
-
const isLevel0 = dismissers === level0Dismissers;
|
|
166
165
|
// Adds/removes the value of bodyOpenClassName to body element.
|
|
167
166
|
useEffect( () => {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
167
|
+
const theClass = bodyOpenClassName;
|
|
168
|
+
const oneMore = 1 + ( bodyOpenClasses.get( theClass ) ?? 0 );
|
|
169
|
+
bodyOpenClasses.set( theClass, oneMore );
|
|
170
|
+
document.body.classList.add( bodyOpenClassName );
|
|
172
171
|
return () => {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
const oneLess = bodyOpenClasses.get( theClass )! - 1;
|
|
173
|
+
if ( oneLess === 0 ) {
|
|
174
|
+
document.body.classList.remove( theClass );
|
|
175
|
+
bodyOpenClasses.delete( theClass );
|
|
176
|
+
} else {
|
|
177
|
+
bodyOpenClasses.set( theClass, oneLess );
|
|
176
178
|
}
|
|
177
179
|
};
|
|
178
|
-
}, [ bodyOpenClassName
|
|
180
|
+
}, [ bodyOpenClassName ] );
|
|
179
181
|
|
|
180
182
|
// Calls the isContentScrollable callback when the Modal children container resizes.
|
|
181
183
|
useLayoutEffect( () => {
|
|
@@ -207,7 +209,7 @@ function UnforwardedModal(
|
|
|
207
209
|
|
|
208
210
|
if (
|
|
209
211
|
shouldCloseOnEsc &&
|
|
210
|
-
event.code === 'Escape' &&
|
|
212
|
+
( event.code === 'Escape' || event.key === 'Escape' ) &&
|
|
211
213
|
! event.defaultPrevented
|
|
212
214
|
) {
|
|
213
215
|
event.preventDefault();
|
package/src/modal/test/index.tsx
CHANGED
|
@@ -7,7 +7,7 @@ import userEvent from '@testing-library/user-event';
|
|
|
7
7
|
/**
|
|
8
8
|
* WordPress dependencies
|
|
9
9
|
*/
|
|
10
|
-
import { useState } from '@wordpress/element';
|
|
10
|
+
import { useEffect, useState } from '@wordpress/element';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Internal dependencies
|
|
@@ -388,4 +388,93 @@ describe( 'Modal', () => {
|
|
|
388
388
|
expect( opener ).toHaveFocus();
|
|
389
389
|
} );
|
|
390
390
|
} );
|
|
391
|
+
|
|
392
|
+
describe( 'Body class name', () => {
|
|
393
|
+
const overrideClass = 'is-any-open';
|
|
394
|
+
const BodyClassDemo = () => {
|
|
395
|
+
const [ isAShown, setIsAShown ] = useState( false );
|
|
396
|
+
const [ isA1Shown, setIsA1Shown ] = useState( false );
|
|
397
|
+
const [ isBShown, setIsBShown ] = useState( false );
|
|
398
|
+
const [ isClassOverriden, setIsClassOverriden ] = useState( false );
|
|
399
|
+
useEffect( () => {
|
|
400
|
+
const toggles: ( e: KeyboardEvent ) => void = ( {
|
|
401
|
+
key,
|
|
402
|
+
metaKey,
|
|
403
|
+
} ) => {
|
|
404
|
+
if ( key === 'a' ) {
|
|
405
|
+
if ( metaKey ) return setIsA1Shown( ( v ) => ! v );
|
|
406
|
+
return setIsAShown( ( v ) => ! v );
|
|
407
|
+
}
|
|
408
|
+
if ( key === 'b' ) return setIsBShown( ( v ) => ! v );
|
|
409
|
+
if ( key === 'c' )
|
|
410
|
+
return setIsClassOverriden( ( v ) => ! v );
|
|
411
|
+
};
|
|
412
|
+
document.addEventListener( 'keydown', toggles );
|
|
413
|
+
return () =>
|
|
414
|
+
void document.removeEventListener( 'keydown', toggles );
|
|
415
|
+
}, [] );
|
|
416
|
+
return (
|
|
417
|
+
<>
|
|
418
|
+
{ isAShown && (
|
|
419
|
+
<Modal
|
|
420
|
+
bodyOpenClassName={
|
|
421
|
+
isClassOverriden ? overrideClass : 'is-A-open'
|
|
422
|
+
}
|
|
423
|
+
onRequestClose={ () => setIsAShown( false ) }
|
|
424
|
+
>
|
|
425
|
+
<p>Modal A contents</p>
|
|
426
|
+
{ isA1Shown && (
|
|
427
|
+
<Modal
|
|
428
|
+
title="Nested"
|
|
429
|
+
onRequestClose={ () =>
|
|
430
|
+
setIsA1Shown( false )
|
|
431
|
+
}
|
|
432
|
+
>
|
|
433
|
+
<p>Modal A1 contents</p>
|
|
434
|
+
</Modal>
|
|
435
|
+
) }
|
|
436
|
+
</Modal>
|
|
437
|
+
) }
|
|
438
|
+
{ isBShown && (
|
|
439
|
+
<Modal
|
|
440
|
+
bodyOpenClassName={
|
|
441
|
+
isClassOverriden ? overrideClass : 'is-B-open'
|
|
442
|
+
}
|
|
443
|
+
onRequestClose={ () => setIsBShown( false ) }
|
|
444
|
+
>
|
|
445
|
+
<p>Modal B contents</p>
|
|
446
|
+
</Modal>
|
|
447
|
+
) }
|
|
448
|
+
</>
|
|
449
|
+
);
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
it( 'is added and removed when modal opens and closes including when closed due to another modal opening', async () => {
|
|
453
|
+
const user = userEvent.setup();
|
|
454
|
+
|
|
455
|
+
const { baseElement } = render( <BodyClassDemo /> );
|
|
456
|
+
|
|
457
|
+
await user.keyboard( 'a' ); // Opens modal A.
|
|
458
|
+
expect( baseElement ).toHaveClass( 'is-A-open' );
|
|
459
|
+
|
|
460
|
+
await user.keyboard( 'b' ); // Opens modal B > closes modal A.
|
|
461
|
+
expect( baseElement ).toHaveClass( 'is-B-open' );
|
|
462
|
+
expect( baseElement ).not.toHaveClass( 'is-A-open' );
|
|
463
|
+
|
|
464
|
+
await user.keyboard( 'b' ); // Closes modal B.
|
|
465
|
+
expect( baseElement ).not.toHaveClass( 'is-B-open' );
|
|
466
|
+
} );
|
|
467
|
+
|
|
468
|
+
it( 'is removed even when prop changes while nested modal is open', async () => {
|
|
469
|
+
const user = userEvent.setup();
|
|
470
|
+
|
|
471
|
+
const { baseElement } = render( <BodyClassDemo /> );
|
|
472
|
+
|
|
473
|
+
await user.keyboard( 'a' ); // Opens modal A.
|
|
474
|
+
await user.keyboard( '{Meta>}a{/Meta}' ); // Opens nested modal.
|
|
475
|
+
await user.keyboard( 'c' ); // Changes `bodyOpenClassName`.
|
|
476
|
+
await user.keyboard( 'a' ); // Closes modal A.
|
|
477
|
+
expect( baseElement ).not.toHaveClass( 'is-A-open' );
|
|
478
|
+
} );
|
|
479
|
+
} );
|
|
391
480
|
} );
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
4
|
import type { ForwardedRef } from 'react';
|
|
5
|
-
import { css } from '@emotion/react';
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* WordPress dependencies
|
|
@@ -23,15 +22,16 @@ import isShallowEqual from '@wordpress/is-shallow-equal';
|
|
|
23
22
|
import type { WordPressComponentProps } from '../../context';
|
|
24
23
|
import { contextConnect, useContextSystem } from '../../context';
|
|
25
24
|
import { useCx } from '../../utils/hooks/use-cx';
|
|
25
|
+
import { patternMatch, findParent } from '../utils/router';
|
|
26
26
|
import { View } from '../../view';
|
|
27
27
|
import { NavigatorContext } from '../context';
|
|
28
|
+
import * as styles from '../styles';
|
|
28
29
|
import type {
|
|
29
30
|
NavigatorProviderProps,
|
|
30
31
|
NavigatorLocation,
|
|
31
32
|
NavigatorContext as NavigatorContextType,
|
|
32
33
|
Screen,
|
|
33
34
|
} from '../types';
|
|
34
|
-
import { patternMatch, findParent } from '../utils/router';
|
|
35
35
|
|
|
36
36
|
type MatchedPath = ReturnType< typeof patternMatch >;
|
|
37
37
|
type ScreenAction = { type: string; screen: Screen };
|
|
@@ -248,8 +248,7 @@ function UnconnectedNavigatorProvider(
|
|
|
248
248
|
|
|
249
249
|
const cx = useCx();
|
|
250
250
|
const classes = useMemo(
|
|
251
|
-
|
|
252
|
-
() => cx( css( { overflowX: 'hidden' } ), className ),
|
|
251
|
+
() => cx( styles.navigatorProviderWrapper, className ),
|
|
253
252
|
[ className, cx ]
|
|
254
253
|
);
|
|
255
254
|
|
|
@@ -2,11 +2,6 @@
|
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
4
|
import type { ForwardedRef } from 'react';
|
|
5
|
-
// eslint-disable-next-line no-restricted-imports
|
|
6
|
-
import type { MotionProps } from 'framer-motion';
|
|
7
|
-
// eslint-disable-next-line no-restricted-imports
|
|
8
|
-
import { motion } from 'framer-motion';
|
|
9
|
-
import { css } from '@emotion/react';
|
|
10
5
|
|
|
11
6
|
/**
|
|
12
7
|
* WordPress dependencies
|
|
@@ -19,8 +14,8 @@ import {
|
|
|
19
14
|
useRef,
|
|
20
15
|
useId,
|
|
21
16
|
} from '@wordpress/element';
|
|
22
|
-
import {
|
|
23
|
-
import { isRTL } from '@wordpress/i18n';
|
|
17
|
+
import { useMergeRefs } from '@wordpress/compose';
|
|
18
|
+
import { isRTL as isRTLFn } from '@wordpress/i18n';
|
|
24
19
|
import { escapeAttribute } from '@wordpress/escape-html';
|
|
25
20
|
|
|
26
21
|
/**
|
|
@@ -31,22 +26,11 @@ import { contextConnect, useContextSystem } from '../../context';
|
|
|
31
26
|
import { useCx } from '../../utils/hooks/use-cx';
|
|
32
27
|
import { View } from '../../view';
|
|
33
28
|
import { NavigatorContext } from '../context';
|
|
29
|
+
import * as styles from '../styles';
|
|
34
30
|
import type { NavigatorScreenProps } from '../types';
|
|
35
31
|
|
|
36
|
-
const animationEnterDelay = 0;
|
|
37
|
-
const animationEnterDuration = 0.14;
|
|
38
|
-
const animationExitDuration = 0.14;
|
|
39
|
-
const animationExitDelay = 0;
|
|
40
|
-
|
|
41
|
-
// Props specific to `framer-motion` can't be currently passed to `NavigatorScreen`,
|
|
42
|
-
// as some of them would overlap with HTML props (e.g. `onAnimationStart`, ...)
|
|
43
|
-
type Props = Omit<
|
|
44
|
-
WordPressComponentProps< NavigatorScreenProps, 'div', false >,
|
|
45
|
-
Exclude< keyof MotionProps, 'style' | 'children' >
|
|
46
|
-
>;
|
|
47
|
-
|
|
48
32
|
function UnconnectedNavigatorScreen(
|
|
49
|
-
props:
|
|
33
|
+
props: WordPressComponentProps< NavigatorScreenProps, 'div', false >,
|
|
50
34
|
forwardedRef: ForwardedRef< any >
|
|
51
35
|
) {
|
|
52
36
|
const screenId = useId();
|
|
@@ -55,7 +39,6 @@ function UnconnectedNavigatorScreen(
|
|
|
55
39
|
'NavigatorScreen'
|
|
56
40
|
);
|
|
57
41
|
|
|
58
|
-
const prefersReducedMotion = useReducedMotion();
|
|
59
42
|
const { location, match, addScreen, removeScreen } =
|
|
60
43
|
useContext( NavigatorContext );
|
|
61
44
|
const isMatch = match === screenId;
|
|
@@ -70,19 +53,20 @@ function UnconnectedNavigatorScreen(
|
|
|
70
53
|
return () => removeScreen( screen );
|
|
71
54
|
}, [ screenId, path, addScreen, removeScreen ] );
|
|
72
55
|
|
|
56
|
+
const isRTL = isRTLFn();
|
|
57
|
+
const { isInitial, isBack } = location;
|
|
73
58
|
const cx = useCx();
|
|
74
59
|
const classes = useMemo(
|
|
75
60
|
() =>
|
|
76
61
|
cx(
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
maxHeight: '100%',
|
|
62
|
+
styles.navigatorScreen( {
|
|
63
|
+
isInitial,
|
|
64
|
+
isBack,
|
|
65
|
+
isRTL,
|
|
82
66
|
} ),
|
|
83
67
|
className
|
|
84
68
|
),
|
|
85
|
-
[ className, cx ]
|
|
69
|
+
[ className, cx, isInitial, isBack, isRTL ]
|
|
86
70
|
);
|
|
87
71
|
|
|
88
72
|
const locationRef = useRef( location );
|
|
@@ -149,73 +133,11 @@ function UnconnectedNavigatorScreen(
|
|
|
149
133
|
|
|
150
134
|
const mergedWrapperRef = useMergeRefs( [ forwardedRef, wrapperRef ] );
|
|
151
135
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if ( prefersReducedMotion ) {
|
|
157
|
-
return (
|
|
158
|
-
<View
|
|
159
|
-
ref={ mergedWrapperRef }
|
|
160
|
-
className={ classes }
|
|
161
|
-
{ ...otherProps }
|
|
162
|
-
>
|
|
163
|
-
{ children }
|
|
164
|
-
</View>
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
const animate = {
|
|
169
|
-
opacity: 1,
|
|
170
|
-
transition: {
|
|
171
|
-
delay: animationEnterDelay,
|
|
172
|
-
duration: animationEnterDuration,
|
|
173
|
-
ease: 'easeInOut',
|
|
174
|
-
},
|
|
175
|
-
x: 0,
|
|
176
|
-
};
|
|
177
|
-
// Disable the initial animation if the screen is the very first screen to be
|
|
178
|
-
// rendered within the current `NavigatorProvider`.
|
|
179
|
-
const initial =
|
|
180
|
-
location.isInitial && ! location.isBack
|
|
181
|
-
? false
|
|
182
|
-
: {
|
|
183
|
-
opacity: 0,
|
|
184
|
-
x:
|
|
185
|
-
( isRTL() && location.isBack ) ||
|
|
186
|
-
( ! isRTL() && ! location.isBack )
|
|
187
|
-
? 50
|
|
188
|
-
: -50,
|
|
189
|
-
};
|
|
190
|
-
const exit = {
|
|
191
|
-
delay: animationExitDelay,
|
|
192
|
-
opacity: 0,
|
|
193
|
-
x:
|
|
194
|
-
( ! isRTL() && location.isBack ) || ( isRTL() && ! location.isBack )
|
|
195
|
-
? 50
|
|
196
|
-
: -50,
|
|
197
|
-
transition: {
|
|
198
|
-
duration: animationExitDuration,
|
|
199
|
-
ease: 'easeInOut',
|
|
200
|
-
},
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
const animatedProps = {
|
|
204
|
-
animate,
|
|
205
|
-
exit,
|
|
206
|
-
initial,
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
return (
|
|
210
|
-
<motion.div
|
|
211
|
-
ref={ mergedWrapperRef }
|
|
212
|
-
className={ classes }
|
|
213
|
-
{ ...otherProps }
|
|
214
|
-
{ ...animatedProps }
|
|
215
|
-
>
|
|
136
|
+
return isMatch ? (
|
|
137
|
+
<View ref={ mergedWrapperRef } className={ classes } { ...otherProps }>
|
|
216
138
|
{ children }
|
|
217
|
-
</
|
|
218
|
-
);
|
|
139
|
+
</View>
|
|
140
|
+
) : null;
|
|
219
141
|
}
|
|
220
142
|
|
|
221
143
|
/**
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { css, keyframes } from '@emotion/react';
|
|
5
|
+
|
|
6
|
+
export const navigatorProviderWrapper = css`
|
|
7
|
+
/* Prevents horizontal overflow while animating screen transitions */
|
|
8
|
+
overflow-x: hidden;
|
|
9
|
+
/* Mark this subsection of the DOM as isolated, providing performance benefits
|
|
10
|
+
* by limiting calculations of layout, style and paint to a DOM subtree rather
|
|
11
|
+
* than the entire page.
|
|
12
|
+
*/
|
|
13
|
+
contain: content;
|
|
14
|
+
`;
|
|
15
|
+
|
|
16
|
+
const fadeInFromRight = keyframes( {
|
|
17
|
+
'0%': {
|
|
18
|
+
opacity: 0,
|
|
19
|
+
transform: `translateX( 50px )`,
|
|
20
|
+
},
|
|
21
|
+
'100%': { opacity: 1, transform: 'none' },
|
|
22
|
+
} );
|
|
23
|
+
|
|
24
|
+
const fadeInFromLeft = keyframes( {
|
|
25
|
+
'0%': {
|
|
26
|
+
opacity: 0,
|
|
27
|
+
transform: `translateX( -50px )`,
|
|
28
|
+
},
|
|
29
|
+
'100%': { opacity: 1, transform: 'none' },
|
|
30
|
+
} );
|
|
31
|
+
|
|
32
|
+
type NavigatorScreenAnimationProps = {
|
|
33
|
+
isInitial?: boolean;
|
|
34
|
+
isBack?: boolean;
|
|
35
|
+
isRTL: boolean;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const navigatorScreenAnimation = ( {
|
|
39
|
+
isInitial,
|
|
40
|
+
isBack,
|
|
41
|
+
isRTL,
|
|
42
|
+
}: NavigatorScreenAnimationProps ) => {
|
|
43
|
+
if ( isInitial && ! isBack ) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const animationName =
|
|
48
|
+
( isRTL && isBack ) || ( ! isRTL && ! isBack )
|
|
49
|
+
? fadeInFromRight
|
|
50
|
+
: fadeInFromLeft;
|
|
51
|
+
|
|
52
|
+
return css`
|
|
53
|
+
animation-duration: 0.14s;
|
|
54
|
+
animation-timing-function: ease-in-out;
|
|
55
|
+
will-change: transform, opacity;
|
|
56
|
+
animation-name: ${ animationName };
|
|
57
|
+
|
|
58
|
+
@media ( prefers-reduced-motion ) {
|
|
59
|
+
animation-duration: 0s;
|
|
60
|
+
}
|
|
61
|
+
`;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const navigatorScreen = ( props: NavigatorScreenAnimationProps ) => css`
|
|
65
|
+
/* Ensures horizontal overflow is visually accessible */
|
|
66
|
+
overflow-x: auto;
|
|
67
|
+
/* In case the root has a height, it should not be exceeded */
|
|
68
|
+
max-height: 100%;
|
|
69
|
+
|
|
70
|
+
${ navigatorScreenAnimation( props ) }
|
|
71
|
+
`;
|
|
@@ -769,68 +769,4 @@ describe( 'Navigator', () => {
|
|
|
769
769
|
).toHaveFocus();
|
|
770
770
|
} );
|
|
771
771
|
} );
|
|
772
|
-
|
|
773
|
-
describe( 'animation', () => {
|
|
774
|
-
it( 'should not animate the initial screen', async () => {
|
|
775
|
-
const onHomeAnimationStartSpy = jest.fn();
|
|
776
|
-
|
|
777
|
-
render(
|
|
778
|
-
<NavigatorProvider initialPath="/">
|
|
779
|
-
<NavigatorScreen
|
|
780
|
-
path="/"
|
|
781
|
-
onAnimationStart={ onHomeAnimationStartSpy }
|
|
782
|
-
>
|
|
783
|
-
<CustomNavigatorButton path="/child">
|
|
784
|
-
To child
|
|
785
|
-
</CustomNavigatorButton>
|
|
786
|
-
</NavigatorScreen>
|
|
787
|
-
</NavigatorProvider>
|
|
788
|
-
);
|
|
789
|
-
|
|
790
|
-
expect( onHomeAnimationStartSpy ).not.toHaveBeenCalled();
|
|
791
|
-
} );
|
|
792
|
-
|
|
793
|
-
it( 'should animate all other screens (including the initial screen when navigating back)', async () => {
|
|
794
|
-
const user = userEvent.setup();
|
|
795
|
-
|
|
796
|
-
const onHomeAnimationStartSpy = jest.fn();
|
|
797
|
-
const onChildAnimationStartSpy = jest.fn();
|
|
798
|
-
|
|
799
|
-
render(
|
|
800
|
-
<NavigatorProvider initialPath="/">
|
|
801
|
-
<NavigatorScreen
|
|
802
|
-
path="/"
|
|
803
|
-
onAnimationStart={ onHomeAnimationStartSpy }
|
|
804
|
-
>
|
|
805
|
-
<CustomNavigatorButton path="/child">
|
|
806
|
-
To child
|
|
807
|
-
</CustomNavigatorButton>
|
|
808
|
-
</NavigatorScreen>
|
|
809
|
-
<NavigatorScreen
|
|
810
|
-
path="/child"
|
|
811
|
-
onAnimationStart={ onChildAnimationStartSpy }
|
|
812
|
-
>
|
|
813
|
-
<CustomNavigatorBackButton>
|
|
814
|
-
Back to home
|
|
815
|
-
</CustomNavigatorBackButton>
|
|
816
|
-
</NavigatorScreen>
|
|
817
|
-
</NavigatorProvider>
|
|
818
|
-
);
|
|
819
|
-
|
|
820
|
-
expect( onHomeAnimationStartSpy ).not.toHaveBeenCalled();
|
|
821
|
-
expect( onChildAnimationStartSpy ).not.toHaveBeenCalled();
|
|
822
|
-
|
|
823
|
-
await user.click(
|
|
824
|
-
screen.getByRole( 'button', { name: 'To child' } )
|
|
825
|
-
);
|
|
826
|
-
expect( onChildAnimationStartSpy ).toHaveBeenCalledTimes( 1 );
|
|
827
|
-
expect( onHomeAnimationStartSpy ).not.toHaveBeenCalled();
|
|
828
|
-
|
|
829
|
-
await user.click(
|
|
830
|
-
screen.getByRole( 'button', { name: 'Back to home' } )
|
|
831
|
-
);
|
|
832
|
-
expect( onChildAnimationStartSpy ).toHaveBeenCalledTimes( 1 );
|
|
833
|
-
expect( onHomeAnimationStartSpy ).toHaveBeenCalledTimes( 1 );
|
|
834
|
-
} );
|
|
835
|
-
} );
|
|
836
772
|
} );
|