@wordpress/components 32.2.1-next.v.202602111440.0 → 32.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -1
- package/CLAUDE.md +1 -0
- package/build/alignment-matrix-control/cell.cjs +2 -2
- package/build/alignment-matrix-control/cell.cjs.map +1 -1
- package/build/alignment-matrix-control/index.cjs +2 -2
- package/build/alignment-matrix-control/index.cjs.map +1 -1
- package/build/angle-picker-control/angle-circle.cjs +4 -4
- package/build/angle-picker-control/angle-circle.cjs.map +2 -2
- package/build/autocomplete/index.cjs +16 -8
- package/build/autocomplete/index.cjs.map +2 -2
- package/build/clipboard-button/index.cjs +1 -1
- package/build/clipboard-button/index.cjs.map +2 -2
- package/build/color-picker/color-copy-button.cjs +1 -1
- package/build/color-picker/color-copy-button.cjs.map +2 -2
- package/build/confirm-dialog/component.cjs +2 -2
- package/build/confirm-dialog/component.cjs.map +2 -2
- package/build/context/context-system-provider.cjs.map +1 -1
- package/build/custom-gradient-picker/gradient-bar/control-points.cjs +2 -2
- package/build/custom-gradient-picker/gradient-bar/control-points.cjs.map +2 -2
- package/build/date-time/date/index.cjs +1 -1
- package/build/date-time/date/index.cjs.map +2 -2
- package/build/date-time/time/index.cjs +1 -1
- package/build/date-time/time/index.cjs.map +2 -2
- package/build/date-time/utils.cjs +9 -0
- package/build/date-time/utils.cjs.map +2 -2
- package/build/dropdown/index.cjs +1 -1
- package/build/dropdown/index.cjs.map +2 -2
- package/build/external-link/index.cjs +5 -1
- package/build/external-link/index.cjs.map +2 -2
- package/build/higher-order/with-spoken-messages/index.cjs.map +2 -2
- package/build/modal/index.cjs +2 -2
- package/build/modal/index.cjs.map +2 -2
- package/build/modal/use-modal-exit-animation.cjs +2 -2
- package/build/modal/use-modal-exit-animation.cjs.map +2 -2
- package/build/number-control/index.cjs +1 -1
- package/build/number-control/index.cjs.map +2 -2
- package/build/palette-edit/index.cjs +1 -1
- package/build/palette-edit/index.cjs.map +2 -2
- package/build/panel/body.cjs +1 -1
- package/build/panel/body.cjs.map +2 -2
- package/build/private-apis.cjs +0 -2
- package/build/private-apis.cjs.map +2 -2
- package/build/range-control/index.cjs +1 -1
- package/build/range-control/index.cjs.map +2 -2
- package/build/resizable-box/resize-tooltip/utils.cjs +1 -1
- package/build/resizable-box/resize-tooltip/utils.cjs.map +2 -2
- package/build/sandbox/index.cjs +126 -2
- package/build/sandbox/index.cjs.map +2 -2
- package/build/select-control/styles/select-control-styles.cjs +8 -8
- package/build/select-control/styles/select-control-styles.cjs.map +2 -2
- package/build/snackbar/list.cjs +4 -1
- package/build/snackbar/list.cjs.map +2 -2
- package/build/tabs/styles.cjs +5 -5
- package/build/tabs/styles.cjs.map +2 -2
- package/build/text/utils.cjs.map +1 -1
- package/build/toggle-group-control/toggle-group-control-option-base/styles.cjs +8 -8
- package/build/toggle-group-control/toggle-group-control-option-base/styles.cjs.map +2 -2
- package/build/tree-grid/roving-tab-index-item.cjs +1 -1
- package/build/tree-grid/roving-tab-index-item.cjs.map +2 -2
- package/build/utils/element-rect.cjs +1 -1
- package/build/utils/element-rect.cjs.map +2 -2
- package/build/utils/hooks/use-update-effect.cjs.map +1 -1
- package/build/utils/rtl.cjs +2 -2
- package/build/utils/rtl.cjs.map +2 -2
- package/build/utils/use-responsive-value.cjs +1 -7
- package/build/utils/use-responsive-value.cjs.map +2 -2
- package/build/validated-form-controls/control-with-error.cjs +26 -3
- package/build/validated-form-controls/control-with-error.cjs.map +2 -2
- package/build/validated-form-controls/validity-indicator.cjs +2 -0
- package/build/validated-form-controls/validity-indicator.cjs.map +2 -2
- package/build-module/alignment-matrix-control/cell.mjs +2 -2
- package/build-module/alignment-matrix-control/cell.mjs.map +1 -1
- package/build-module/alignment-matrix-control/index.mjs +2 -2
- package/build-module/alignment-matrix-control/index.mjs.map +1 -1
- package/build-module/angle-picker-control/angle-circle.mjs +4 -4
- package/build-module/angle-picker-control/angle-circle.mjs.map +2 -2
- package/build-module/autocomplete/index.mjs +14 -7
- package/build-module/autocomplete/index.mjs.map +2 -2
- package/build-module/clipboard-button/index.mjs +1 -1
- package/build-module/clipboard-button/index.mjs.map +2 -2
- package/build-module/color-picker/color-copy-button.mjs +1 -1
- package/build-module/color-picker/color-copy-button.mjs.map +2 -2
- package/build-module/confirm-dialog/component.mjs +2 -2
- package/build-module/confirm-dialog/component.mjs.map +2 -2
- package/build-module/context/context-system-provider.mjs.map +1 -1
- package/build-module/custom-gradient-picker/gradient-bar/control-points.mjs +2 -2
- package/build-module/custom-gradient-picker/gradient-bar/control-points.mjs.map +2 -2
- package/build-module/date-time/date/index.mjs +1 -1
- package/build-module/date-time/date/index.mjs.map +2 -2
- package/build-module/date-time/time/index.mjs +2 -2
- package/build-module/date-time/time/index.mjs.map +2 -2
- package/build-module/date-time/utils.mjs +8 -0
- package/build-module/date-time/utils.mjs.map +2 -2
- package/build-module/dropdown/index.mjs +1 -1
- package/build-module/dropdown/index.mjs.map +2 -2
- package/build-module/external-link/index.mjs +5 -1
- package/build-module/external-link/index.mjs.map +2 -2
- package/build-module/higher-order/with-spoken-messages/index.mjs.map +2 -2
- package/build-module/modal/index.mjs +2 -2
- package/build-module/modal/index.mjs.map +2 -2
- package/build-module/modal/use-modal-exit-animation.mjs +2 -2
- package/build-module/modal/use-modal-exit-animation.mjs.map +2 -2
- package/build-module/number-control/index.mjs +1 -1
- package/build-module/number-control/index.mjs.map +2 -2
- package/build-module/palette-edit/index.mjs +1 -1
- package/build-module/palette-edit/index.mjs.map +2 -2
- package/build-module/panel/body.mjs +1 -1
- package/build-module/panel/body.mjs.map +2 -2
- package/build-module/private-apis.mjs +0 -2
- package/build-module/private-apis.mjs.map +2 -2
- package/build-module/range-control/index.mjs +1 -1
- package/build-module/range-control/index.mjs.map +2 -2
- package/build-module/resizable-box/resize-tooltip/utils.mjs +1 -1
- package/build-module/resizable-box/resize-tooltip/utils.mjs.map +2 -2
- package/build-module/sandbox/index.mjs +127 -3
- package/build-module/sandbox/index.mjs.map +2 -2
- package/build-module/select-control/styles/select-control-styles.mjs +8 -8
- package/build-module/select-control/styles/select-control-styles.mjs.map +2 -2
- package/build-module/snackbar/list.mjs +4 -1
- package/build-module/snackbar/list.mjs.map +2 -2
- package/build-module/tabs/styles.mjs +5 -5
- package/build-module/tabs/styles.mjs.map +2 -2
- package/build-module/text/utils.mjs.map +1 -1
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.mjs +8 -8
- package/build-module/toggle-group-control/toggle-group-control-option-base/styles.mjs.map +2 -2
- package/build-module/tree-grid/roving-tab-index-item.mjs +1 -1
- package/build-module/tree-grid/roving-tab-index-item.mjs.map +2 -2
- package/build-module/utils/element-rect.mjs +1 -1
- package/build-module/utils/element-rect.mjs.map +2 -2
- package/build-module/utils/hooks/use-update-effect.mjs.map +1 -1
- package/build-module/utils/rtl.mjs +2 -2
- package/build-module/utils/rtl.mjs.map +2 -2
- package/build-module/utils/use-responsive-value.mjs +1 -7
- package/build-module/utils/use-responsive-value.mjs.map +2 -2
- package/build-module/validated-form-controls/control-with-error.mjs +27 -4
- package/build-module/validated-form-controls/control-with-error.mjs.map +2 -2
- package/build-module/validated-form-controls/validity-indicator.mjs +2 -0
- package/build-module/validated-form-controls/validity-indicator.mjs.map +2 -2
- package/build-style/style-rtl.css +8 -4
- package/build-style/style.css +8 -4
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts +19 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-icon-styles.d.ts.map +1 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts +23 -0
- package/build-types/alignment-matrix-control/styles/alignment-matrix-control-styles.d.ts.map +1 -0
- package/build-types/angle-picker-control/angle-circle.d.ts.map +1 -1
- package/build-types/angle-picker-control/index.d.ts +1 -1
- package/build-types/angle-picker-control/stories/index.story.d.ts +1 -1
- package/build-types/angle-picker-control/styles/angle-picker-control-styles.d.ts +25 -0
- package/build-types/angle-picker-control/styles/angle-picker-control-styles.d.ts.map +1 -0
- package/build-types/animate/index.d.ts +1 -1
- package/build-types/animate/index.d.ts.map +1 -1
- package/build-types/animate/types.d.ts +1 -1
- package/build-types/animate/types.d.ts.map +1 -1
- package/build-types/autocomplete/get-autocomplete-match.d.ts +20 -0
- package/build-types/autocomplete/get-autocomplete-match.d.ts.map +1 -0
- package/build-types/autocomplete/index.d.ts +10 -2
- package/build-types/autocomplete/index.d.ts.map +1 -1
- package/build-types/autocomplete/test/get-autocomplete-match.d.ts +2 -0
- package/build-types/autocomplete/test/get-autocomplete-match.d.ts.map +1 -0
- package/build-types/autocomplete/types.d.ts +1 -1
- package/build-types/autocomplete/types.d.ts.map +1 -1
- package/build-types/badge/stories/e2e/index.story.d.ts +7 -0
- package/build-types/badge/stories/e2e/index.story.d.ts.map +1 -0
- package/build-types/base-control/index.d.ts +2 -2
- package/build-types/base-control/stories/index.story.d.ts +1 -1
- package/build-types/border-box-control/border-box-control/hook.d.ts +1 -1
- package/build-types/border-box-control/border-box-control-linked-button/hook.d.ts +1 -1
- package/build-types/border-box-control/border-box-control-split-controls/hook.d.ts +1 -1
- package/build-types/border-box-control/border-box-control-visualizer/hook.d.ts +1 -1
- package/build-types/border-control/border-control/hook.d.ts +1 -1
- package/build-types/border-control/border-control-dropdown/hook.d.ts +1 -1
- package/build-types/border-control/border-control-style-picker/hook.d.ts +267 -0
- package/build-types/border-control/border-control-style-picker/hook.d.ts.map +1 -0
- package/build-types/box-control/all-input-control.d.ts +4 -0
- package/build-types/box-control/all-input-control.d.ts.map +1 -0
- package/build-types/box-control/axial-input-controls.d.ts +4 -0
- package/build-types/box-control/axial-input-controls.d.ts.map +1 -0
- package/build-types/box-control/input-controls.d.ts +4 -0
- package/build-types/box-control/input-controls.d.ts.map +1 -0
- package/build-types/box-control/styles/box-control-styles.d.ts +2 -2
- package/build-types/box-control/styles/box-control-styles.d.ts.map +1 -1
- package/build-types/box-control/styles/box-control-visualizer-styles.d.ts +46 -0
- package/build-types/box-control/styles/box-control-visualizer-styles.d.ts.map +1 -0
- package/build-types/box-control/unit-control.d.ts +4 -0
- package/build-types/box-control/unit-control.d.ts.map +1 -0
- package/build-types/card/card/hook.d.ts +1 -1
- package/build-types/card/card-body/hook.d.ts +1 -1
- package/build-types/card/card-footer/hook.d.ts +1 -1
- package/build-types/card/card-header/hook.d.ts +1 -1
- package/build-types/card/card-media/hook.d.ts +1 -1
- package/build-types/color-palette/stories/index.story.d.ts +6 -5
- package/build-types/color-palette/stories/index.story.d.ts.map +1 -1
- package/build-types/color-palette/styles.d.ts +1 -1
- package/build-types/color-picker/color-copy-button.d.ts.map +1 -1
- package/build-types/color-picker/styles.d.ts +2 -2
- package/build-types/color-picker/styles.d.ts.map +1 -1
- package/build-types/combobox-control/styles.d.ts +1 -1
- package/build-types/context/context-connect.d.ts +2 -2
- package/build-types/context/context-connect.d.ts.map +1 -1
- package/build-types/context/context-system-provider.d.ts +2 -2
- package/build-types/context/context-system-provider.d.ts.map +1 -1
- 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-gradient-picker/gradient-bar/control-points.d.ts.map +1 -1
- package/build-types/custom-gradient-picker/styles/custom-gradient-picker-styles.d.ts +2 -2
- package/build-types/custom-gradient-picker/test/index.d.ts +2 -0
- package/build-types/custom-gradient-picker/test/index.d.ts.map +1 -0
- package/build-types/custom-gradient-picker/types.d.ts +1 -1
- package/build-types/custom-gradient-picker/types.d.ts.map +1 -1
- package/build-types/custom-select-control/styles.d.ts +11 -0
- package/build-types/custom-select-control/styles.d.ts.map +1 -0
- package/build-types/custom-select-control-v2/types.d.ts +4 -4
- package/build-types/custom-select-control-v2/types.d.ts.map +1 -1
- package/build-types/date-time/date/styles.d.ts +2 -2
- package/build-types/date-time/date-picker/index.d.ts +23 -0
- package/build-types/date-time/date-picker/index.d.ts.map +1 -0
- package/build-types/date-time/date-picker/styles.d.ts +45 -0
- package/build-types/date-time/date-picker/styles.d.ts.map +1 -0
- package/build-types/date-time/date-picker/test/index.d.ts +2 -0
- package/build-types/date-time/date-picker/test/index.d.ts.map +1 -0
- package/build-types/date-time/date-picker/test/use-lilius.d.ts +2 -0
- package/build-types/date-time/date-picker/test/use-lilius.d.ts.map +1 -0
- package/build-types/date-time/date-picker/use-lilius/index.d.ts +169 -0
- package/build-types/date-time/date-picker/use-lilius/index.d.ts.map +1 -0
- package/build-types/date-time/date-time/styles.d.ts +1 -1
- package/build-types/date-time/time/index.d.ts.map +1 -1
- package/build-types/date-time/time-picker/index.d.ts +27 -0
- package/build-types/date-time/time-picker/index.d.ts.map +1 -0
- package/build-types/date-time/time-picker/styles.d.ts +93 -0
- package/build-types/date-time/time-picker/styles.d.ts.map +1 -0
- package/build-types/date-time/time-picker/test/index.d.ts +2 -0
- package/build-types/date-time/time-picker/test/index.d.ts.map +1 -0
- package/build-types/date-time/time-picker/time-input/index.d.ts +4 -0
- package/build-types/date-time/time-picker/time-input/index.d.ts.map +1 -0
- package/build-types/date-time/time-picker/time-input/test/index.d.ts +2 -0
- package/build-types/date-time/time-picker/time-input/test/index.d.ts.map +1 -0
- package/build-types/date-time/time-picker/timezone.d.ts +7 -0
- package/build-types/date-time/time-picker/timezone.d.ts.map +1 -0
- package/build-types/date-time/utils.d.ts +9 -0
- package/build-types/date-time/utils.d.ts.map +1 -1
- package/build-types/dimension-control/index.d.ts +28 -0
- package/build-types/dimension-control/index.d.ts.map +1 -0
- package/build-types/dimension-control/sizes.d.ts +26 -0
- package/build-types/dimension-control/sizes.d.ts.map +1 -0
- package/build-types/dimension-control/stories/index.story.d.ts +4 -0
- package/build-types/dimension-control/stories/index.story.d.ts.map +1 -0
- package/build-types/dimension-control/types.d.ts +47 -0
- package/build-types/dimension-control/types.d.ts.map +1 -0
- package/build-types/draggable/types.d.ts +1 -1
- package/build-types/draggable/types.d.ts.map +1 -1
- package/build-types/drop-zone/types.d.ts +1 -1
- package/build-types/drop-zone/types.d.ts.map +1 -1
- package/build-types/dropdown-menu/types.d.ts +1 -1
- package/build-types/dropdown-menu/types.d.ts.map +1 -1
- package/build-types/dropdown-menu-v2/index.d.ts +17 -0
- package/build-types/dropdown-menu-v2/index.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2/stories/index.story.d.ts +11 -0
- package/build-types/dropdown-menu-v2/stories/index.story.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2/styles.d.ts +42 -0
- package/build-types/dropdown-menu-v2/styles.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2/test/index.d.ts +2 -0
- package/build-types/dropdown-menu-v2/test/index.d.ts.map +1 -0
- package/build-types/dropdown-menu-v2/types.d.ts +252 -0
- package/build-types/dropdown-menu-v2/types.d.ts.map +1 -0
- package/build-types/elevation/hook.d.ts +1 -1
- package/build-types/external-link/index.d.ts.map +1 -1
- package/build-types/external-link/styles/external-link-styles.d.ts +10 -0
- package/build-types/external-link/styles/external-link-styles.d.ts.map +1 -0
- package/build-types/flex/flex/hook.d.ts +1 -1
- package/build-types/flex/flex-block/hook.d.ts +1 -1
- package/build-types/flex/flex-item/hook.d.ts +1 -1
- package/build-types/focal-point-picker/styles/focal-point-picker-style.d.ts +1 -1
- package/build-types/font-size-picker/stories/index.story.d.ts +8 -7
- package/build-types/font-size-picker/stories/index.story.d.ts.map +1 -1
- package/build-types/font-size-picker/styles.d.ts +2 -2
- package/build-types/form-token-field/styles.d.ts +1 -1
- package/build-types/gradient-picker/stories/index.story.d.ts +6 -5
- package/build-types/gradient-picker/stories/index.story.d.ts.map +1 -1
- package/build-types/grid/hook.d.ts +1 -1
- package/build-types/h-stack/hook.d.ts +1 -1
- package/build-types/heading/hook.d.ts +1 -1
- package/build-types/higher-order/navigate-regions/index.d.ts +1 -1
- package/build-types/higher-order/with-notices/types.d.ts +1 -1
- package/build-types/higher-order/with-notices/types.d.ts.map +1 -1
- package/build-types/higher-order/with-spoken-messages/index.d.ts +2 -3
- package/build-types/higher-order/with-spoken-messages/index.d.ts.map +1 -1
- package/build-types/icon/index.d.ts +2 -2
- package/build-types/icon/index.d.ts.map +1 -1
- package/build-types/input-control/styles/input-control-styles.d.ts +2 -2
- package/build-types/item-group/item/hook.d.ts +1 -1
- package/build-types/item-group/item-group/hook.d.ts +1 -1
- package/build-types/menu/index.d.ts +2 -2
- package/build-types/menu/item-help-text.d.ts +1 -1
- package/build-types/menu/item-label.d.ts +1 -1
- package/build-types/menu/styles.d.ts +2 -2
- 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/menu-item/types.d.ts +1 -1
- package/build-types/menu-item/types.d.ts.map +1 -1
- package/build-types/mobile/inserter-button/sparkles.d.ts +3 -0
- package/build-types/mobile/inserter-button/sparkles.d.ts.map +1 -0
- package/build-types/modal/index.d.ts.map +1 -1
- package/build-types/modal/types.d.ts +1 -1
- package/build-types/modal/types.d.ts.map +1 -1
- package/build-types/modal/use-modal-exit-animation.d.ts +1 -1
- package/build-types/navigation/styles/navigation-styles.d.ts +2 -2
- package/build-types/navigation/types.d.ts +1 -1
- package/build-types/navigation/types.d.ts.map +1 -1
- package/build-types/navigator/navigator-back-button/hook.d.ts +1 -1
- package/build-types/navigator/navigator-back-button/index.d.ts +2 -0
- package/build-types/navigator/navigator-back-button/index.d.ts.map +1 -0
- package/build-types/navigator/navigator-button/hook.d.ts +1 -1
- package/build-types/navigator/navigator-button/index.d.ts +2 -0
- package/build-types/navigator/navigator-button/index.d.ts.map +1 -0
- package/build-types/navigator/navigator-provider/component.d.ts +38 -0
- package/build-types/navigator/navigator-provider/component.d.ts.map +1 -0
- package/build-types/navigator/navigator-provider/index.d.ts +2 -0
- package/build-types/navigator/navigator-provider/index.d.ts.map +1 -0
- package/build-types/navigator/navigator-screen/index.d.ts +2 -0
- package/build-types/navigator/navigator-screen/index.d.ts.map +1 -0
- package/build-types/navigator/navigator-to-parent-button/index.d.ts +2 -0
- package/build-types/navigator/navigator-to-parent-button/index.d.ts.map +1 -0
- package/build-types/palette-edit/styles.d.ts +1 -1
- package/build-types/palette-edit/types.d.ts +1 -1
- package/build-types/palette-edit/types.d.ts.map +1 -1
- package/build-types/panel/types.d.ts +2 -2
- package/build-types/panel/types.d.ts.map +1 -1
- package/build-types/private-apis.d.ts.map +1 -1
- package/build-types/radio-group/radio/index.d.ts +7 -0
- package/build-types/radio-group/radio/index.d.ts.map +1 -0
- package/build-types/radio-group/radio-context/index.d.ts +6 -0
- package/build-types/radio-group/radio-context/index.d.ts.map +1 -0
- package/build-types/range-control/index.d.ts.map +1 -1
- package/build-types/range-control/input-range.d.ts +1 -1
- package/build-types/range-control/styles/range-control-styles.d.ts.map +1 -1
- package/build-types/range-control/types.d.ts +2 -2
- package/build-types/range-control/types.d.ts.map +1 -1
- package/build-types/resizable-box/resize-tooltip/styles/resize-tooltip.styles.d.ts +1 -1
- package/build-types/resizable-box/resize-tooltip/utils.d.ts +1 -1
- package/build-types/resizable-box/resize-tooltip/utils.d.ts.map +1 -1
- package/build-types/sandbox/index.d.ts +1 -1
- package/build-types/sandbox/index.d.ts.map +1 -1
- package/build-types/sandbox/types.d.ts +11 -0
- package/build-types/sandbox/types.d.ts.map +1 -1
- package/build-types/scrollable/hook.d.ts +1 -1
- package/build-types/search-control/types.d.ts +1 -1
- package/build-types/search-control/types.d.ts.map +1 -1
- package/build-types/select-control/styles/select-control-styles.d.ts +2 -2
- package/build-types/select-control/styles/select-control-styles.d.ts.map +1 -1
- package/build-types/slot-fill/bubbles-virtually/fill.d.ts +5 -0
- package/build-types/slot-fill/bubbles-virtually/fill.d.ts.map +1 -0
- package/build-types/slot-fill/bubbles-virtually/slot-fill-context.d.ts +12 -0
- package/build-types/slot-fill/bubbles-virtually/slot-fill-context.d.ts.map +1 -0
- package/build-types/slot-fill/bubbles-virtually/slot-fill-provider.d.ts +4 -0
- package/build-types/slot-fill/bubbles-virtually/slot-fill-provider.d.ts.map +1 -0
- package/build-types/slot-fill/bubbles-virtually/slot.d.ts +1 -1
- package/build-types/slot-fill/types.d.ts +1 -1
- package/build-types/slot-fill/types.d.ts.map +1 -1
- package/build-types/slot-fill/use-slot.d.ts +9 -0
- package/build-types/slot-fill/use-slot.d.ts.map +1 -0
- package/build-types/snackbar/index.d.ts +1 -1
- package/build-types/snackbar/list.d.ts.map +1 -1
- package/build-types/spacer/hook.d.ts +1 -1
- package/build-types/style-provider/test/index.d.ts +2 -0
- package/build-types/style-provider/test/index.d.ts.map +1 -0
- package/build-types/surface/hook.d.ts +1 -1
- package/build-types/tabs/styles.d.ts.map +1 -1
- package/build-types/text/hook.d.ts +1 -1
- package/build-types/text/stories/index.story.d.ts +3 -3
- package/build-types/text/utils.d.ts +18 -18
- package/build-types/text/utils.d.ts.map +1 -1
- package/build-types/theme/stories/index.story.d.ts +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/toggle-group-control/types.d.ts +1 -1
- package/build-types/toggle-group-control/types.d.ts.map +1 -1
- package/build-types/tools-panel/tools-panel/hook.d.ts +1 -1
- package/build-types/tools-panel/tools-panel-header/hook.d.ts +1 -1
- package/build-types/tools-panel/tools-panel-item/hook.d.ts +1 -1
- package/build-types/tree-grid/types.d.ts +1 -1
- package/build-types/tree-grid/types.d.ts.map +1 -1
- package/build-types/truncate/hook.d.ts +1 -1
- package/build-types/ui/context/constants.d.ts +8 -0
- package/build-types/ui/context/constants.d.ts.map +1 -0
- package/build-types/ui/context/context-connect.d.ts +40 -0
- package/build-types/ui/context/context-connect.d.ts.map +1 -0
- package/build-types/ui/context/context-system-provider.d.ts +7 -0
- package/build-types/ui/context/context-system-provider.d.ts.map +1 -0
- package/build-types/ui/context/get-styled-class-name-from-key.d.ts +2 -0
- package/build-types/ui/context/get-styled-class-name-from-key.d.ts.map +1 -0
- package/build-types/ui/context/index.d.ts +5 -0
- package/build-types/ui/context/index.d.ts.map +1 -0
- package/build-types/ui/context/test/context-connect.d.ts +2 -0
- package/build-types/ui/context/test/context-connect.d.ts.map +1 -0
- package/build-types/ui/context/test/wordpress-component.d.ts +2 -0
- package/build-types/ui/context/test/wordpress-component.d.ts.map +1 -0
- package/build-types/ui/context/use-context-system.d.ts +20 -0
- package/build-types/ui/context/use-context-system.d.ts.map +1 -0
- package/build-types/ui/context/utils.d.ts +26 -0
- package/build-types/ui/context/utils.d.ts.map +1 -0
- package/build-types/ui/context/wordpress-component.d.ts +32 -0
- package/build-types/ui/context/wordpress-component.d.ts.map +1 -0
- package/build-types/ui/shortcut/component.d.ts +12 -0
- package/build-types/ui/shortcut/component.d.ts.map +1 -0
- package/build-types/ui/shortcut/index.d.ts +3 -0
- package/build-types/ui/shortcut/index.d.ts.map +1 -0
- package/build-types/ui/tooltip/component.d.ts +29 -0
- package/build-types/ui/tooltip/component.d.ts.map +1 -0
- package/build-types/ui/tooltip/content.d.ts +9 -0
- package/build-types/ui/tooltip/content.d.ts.map +1 -0
- package/build-types/ui/tooltip/context.d.ts +10 -0
- package/build-types/ui/tooltip/context.d.ts.map +1 -0
- package/build-types/ui/tooltip/index.d.ts +3 -0
- package/build-types/ui/tooltip/index.d.ts.map +1 -0
- package/build-types/ui/tooltip/styles.d.ts +12 -0
- package/build-types/ui/tooltip/styles.d.ts.map +1 -0
- package/build-types/ui/tooltip/types.d.ts +62 -0
- package/build-types/ui/tooltip/types.d.ts.map +1 -0
- package/build-types/ui/utils/colors.d.ts +17 -0
- package/build-types/ui/utils/colors.d.ts.map +1 -0
- package/build-types/ui/utils/font-size.d.ts +18 -0
- package/build-types/ui/utils/font-size.d.ts.map +1 -0
- package/build-types/ui/utils/get-valid-children.d.ts +13 -0
- package/build-types/ui/utils/get-valid-children.d.ts.map +1 -0
- package/build-types/ui/utils/index.d.ts +2 -0
- package/build-types/ui/utils/index.d.ts.map +1 -0
- package/build-types/ui/utils/space.d.ts +23 -0
- package/build-types/ui/utils/space.d.ts.map +1 -0
- package/build-types/ui/utils/types.d.ts +14 -0
- package/build-types/ui/utils/types.d.ts.map +1 -0
- package/build-types/ui/utils/use-responsive-value.d.ts +5 -0
- package/build-types/ui/utils/use-responsive-value.d.ts.map +1 -0
- package/build-types/utils/hooks/use-latest-ref.d.ts +15 -0
- package/build-types/utils/hooks/use-latest-ref.d.ts.map +1 -0
- package/build-types/utils/hooks/use-update-effect.d.ts +3 -3
- package/build-types/utils/hooks/use-update-effect.d.ts.map +1 -1
- package/build-types/utils/input/base.d.ts +3 -0
- package/build-types/utils/input/base.d.ts.map +1 -0
- package/build-types/utils/input/index.d.ts +2 -0
- package/build-types/utils/input/index.d.ts.map +1 -0
- package/build-types/utils/input/input-control.d.ts +2 -0
- package/build-types/utils/input/input-control.d.ts.map +1 -0
- package/build-types/utils/reduce-motion.d.ts +8 -0
- package/build-types/utils/reduce-motion.d.ts.map +1 -0
- package/build-types/utils/rtl.d.ts +4 -4
- package/build-types/utils/rtl.d.ts.map +1 -1
- package/build-types/utils/use-responsive-value.d.ts.map +1 -1
- package/build-types/utils/z-index.d.ts +3 -0
- package/build-types/utils/z-index.d.ts.map +1 -0
- package/build-types/v-stack/hook.d.ts +1 -1
- package/build-types/v-stack/stories/index.story.d.ts +1 -1
- package/build-types/validated-form-controls/components/range-control.d.ts.map +1 -1
- package/build-types/validated-form-controls/components/stories/overview.story.d.ts.map +1 -1
- package/build-types/validated-form-controls/control-with-error.d.ts.map +1 -1
- package/build-types/validated-form-controls/test/checkbox-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/checkbox-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/combobox-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/combobox-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/custom-select-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/custom-select-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/form-token-field.d.ts +2 -0
- package/build-types/validated-form-controls/test/form-token-field.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/input-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/input-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/number-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/number-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/radio-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/radio-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/range-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/range-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/select-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/select-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/text-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/text-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/textarea-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/textarea-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/toggle-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/toggle-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/test/toggle-group-control.d.ts +2 -0
- package/build-types/validated-form-controls/test/toggle-group-control.d.ts.map +1 -0
- package/build-types/validated-form-controls/validity-indicator.d.ts +2 -1
- package/build-types/validated-form-controls/validity-indicator.d.ts.map +1 -1
- package/build-types/view/types.d.ts +8 -0
- package/build-types/view/types.d.ts.map +1 -0
- package/package.json +24 -24
- package/src/alignment-matrix-control/test/index.tsx +1 -1
- package/src/angle-picker-control/angle-circle.tsx +6 -5
- package/src/animate/types.ts +1 -1
- package/src/autocomplete/autocompleter-ui.tsx +1 -1
- package/src/autocomplete/index.tsx +33 -8
- package/src/autocomplete/test/index.tsx +110 -1
- package/src/autocomplete/types.ts +1 -1
- package/src/button/style.scss +8 -5
- package/src/calendar/style.scss +4 -2
- package/src/clipboard-button/index.tsx +1 -1
- package/src/color-palette/stories/index.story.tsx +56 -48
- package/src/color-picker/color-copy-button.tsx +1 -3
- package/src/composite/stories/index.story.tsx +1 -1
- package/src/confirm-dialog/component.tsx +2 -2
- package/src/context/context-connect.ts +3 -3
- package/src/context/context-system-provider.js +4 -4
- package/src/context/wordpress-component.ts +3 -5
- package/src/custom-gradient-picker/gradient-bar/control-points.tsx +3 -2
- package/src/custom-gradient-picker/types.ts +1 -1
- package/src/custom-select-control-v2/custom-select.tsx +1 -1
- package/src/custom-select-control-v2/stories/index.story.tsx +3 -3
- package/src/custom-select-control-v2/test/index.tsx +3 -3
- package/src/custom-select-control-v2/types.ts +4 -4
- package/src/date-time/date/index.tsx +1 -1
- package/src/date-time/test/utils.test.ts +8 -11
- package/src/date-time/time/index.tsx +2 -12
- package/src/date-time/time/test/index.tsx +69 -0
- package/src/date-time/utils.ts +18 -0
- package/src/draggable/index.native.js +17 -17
- package/src/draggable/types.ts +1 -1
- package/src/drop-zone/types.ts +1 -1
- package/src/dropdown/index.tsx +1 -1
- package/src/dropdown-menu/types.ts +1 -1
- package/src/external-link/index.tsx +5 -1
- package/src/font-size-picker/stories/index.story.tsx +133 -125
- package/src/form-token-field/style.scss +1 -0
- package/src/gradient-picker/stories/index.story.tsx +48 -42
- package/src/h-stack/test/index.tsx +1 -1
- package/src/heading/hook.ts +2 -2
- package/src/higher-order/with-notices/test/index.tsx +2 -2
- package/src/higher-order/with-notices/types.ts +1 -1
- package/src/higher-order/with-spoken-messages/index.tsx +2 -4
- package/src/icon/index.tsx +2 -2
- package/src/keyboard-shortcuts/index.tsx +1 -1
- package/src/menu/stories/index.story.tsx +1 -1
- package/src/menu-item/types.ts +1 -1
- package/src/modal/index.tsx +4 -3
- package/src/modal/types.ts +1 -1
- package/src/modal/use-modal-exit-animation.ts +2 -2
- package/src/navigation/README.md +1 -1
- package/src/navigation/types.ts +1 -1
- package/src/number-control/index.tsx +1 -1
- package/src/palette-edit/index.tsx +2 -2
- package/src/palette-edit/types.ts +1 -1
- package/src/panel/README.md +1 -1
- package/src/panel/body.tsx +1 -1
- package/src/panel/types.ts +2 -2
- package/src/popover/stories/index.story.tsx +1 -1
- package/src/private-apis.ts +0 -2
- package/src/radio-control/test/index.tsx +5 -4
- package/src/range-control/index.tsx +1 -1
- package/src/range-control/types.ts +2 -2
- package/src/resizable-box/index.tsx +1 -1
- package/src/resizable-box/resize-tooltip/index.tsx +1 -1
- package/src/resizable-box/resize-tooltip/label.tsx +1 -1
- package/src/resizable-box/resize-tooltip/utils.ts +2 -2
- package/src/sandbox/index.tsx +190 -10
- package/src/sandbox/test/index.tsx +65 -24
- package/src/sandbox/types.ts +11 -0
- package/src/search-control/types.ts +1 -1
- package/src/select-control/styles/select-control-styles.ts +1 -0
- package/src/slot-fill/types.ts +1 -1
- package/src/snackbar/list.tsx +7 -2
- package/src/tabs/styles.ts +1 -0
- package/src/text/utils.ts +18 -18
- package/src/toggle-group-control/test/__snapshots__/index.tsx.snap +18 -16
- package/src/toggle-group-control/toggle-group-control-option-base/component.tsx +1 -1
- package/src/toggle-group-control/toggle-group-control-option-base/styles.ts +4 -6
- package/src/toggle-group-control/types.ts +1 -1
- package/src/tree-grid/roving-tab-index-item.tsx +1 -1
- package/src/tree-grid/types.ts +1 -1
- package/src/utils/element-rect.ts +1 -1
- package/src/utils/hooks/use-update-effect.js +2 -2
- package/src/utils/rtl.js +4 -4
- package/src/utils/use-responsive-value.ts +1 -5
- package/src/v-stack/test/index.tsx +1 -1
- package/src/validated-form-controls/components/stories/overview.story.tsx +2 -1
- package/src/validated-form-controls/control-with-error.tsx +44 -4
- package/src/validated-form-controls/test/checkbox-control.tsx +49 -0
- package/src/validated-form-controls/test/combobox-control.tsx +61 -0
- package/src/validated-form-controls/test/control-with-error.tsx +182 -1
- package/src/validated-form-controls/test/custom-select-control.tsx +60 -0
- package/src/validated-form-controls/test/form-token-field.tsx +52 -0
- package/src/validated-form-controls/test/input-control.tsx +42 -0
- package/src/validated-form-controls/test/number-control.tsx +44 -0
- package/src/validated-form-controls/test/radio-control.tsx +61 -0
- package/src/validated-form-controls/test/range-control.tsx +73 -0
- package/src/validated-form-controls/test/select-control.tsx +57 -0
- package/src/validated-form-controls/test/text-control.tsx +49 -0
- package/src/validated-form-controls/test/textarea-control.tsx +51 -0
- package/src/validated-form-controls/test/toggle-control.tsx +49 -0
- package/src/validated-form-controls/test/toggle-group-control.tsx +28 -0
- package/src/validated-form-controls/validity-indicator.tsx +3 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/custom-gradient-picker/gradient-bar/control-points.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\nimport { colord } from 'colord';\n\n/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { useEffect, useRef, useState, useMemo } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { plus } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport Button from '../../button';\nimport { HStack } from '../../h-stack';\nimport { ColorPicker } from '../../color-picker';\nimport { VisuallyHidden } from '../../visually-hidden';\nimport { CustomColorPickerDropdown } from '../../color-palette';\nimport { addControlPoint, clampPercent, removeControlPoint, updateControlPointColor, updateControlPointColorByPosition, updateControlPointPosition, getHorizontalRelativeGradientPosition } from './utils';\nimport { MINIMUM_SIGNIFICANT_MOVE, KEYBOARD_CONTROL_POINT_VARIATION } from './constants';\nimport DropdownContentWrapper from '../../dropdown/dropdown-content-wrapper';\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction ControlPointButton({\n isOpen,\n position,\n color,\n ...additionalProps\n}) {\n const instanceId = useInstanceId(ControlPointButton);\n const descriptionId = `components-custom-gradient-picker__control-point-button-description-${instanceId}`;\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Button, {\n \"aria-label\": sprintf(\n // translators: 1: gradient position e.g: 70. 2: gradient color code e.g: rgb(52,121,151).\n __('Gradient control point at position %1$d%% with color code %2$s.'), position, color),\n \"aria-describedby\": descriptionId,\n \"aria-haspopup\": \"true\",\n \"aria-expanded\": isOpen,\n __next40pxDefaultSize: true,\n className: clsx('components-custom-gradient-picker__control-point-button', {\n 'is-active': isOpen\n }),\n ...additionalProps\n }), /*#__PURE__*/_jsx(VisuallyHidden, {\n id: descriptionId,\n children: __('Use your left or right arrow keys or drag and drop with the mouse to change the gradient position. Press the button to change the color or remove the control point.')\n })]\n });\n}\nfunction GradientColorPickerDropdown({\n isRenderedInSidebar,\n className,\n ...props\n}) {\n // Open the popover below the gradient control/insertion point\n const popoverProps = useMemo(() => ({\n placement: 'bottom',\n offset: 8,\n // Disabling resize as it would otherwise cause the popover to show\n // scrollbars while dragging the color picker's handle close to the\n // popover edge.\n resize: false\n }), []);\n const mergedClassName = clsx('components-custom-gradient-picker__control-point-dropdown', className);\n return /*#__PURE__*/_jsx(CustomColorPickerDropdown, {\n isRenderedInSidebar: isRenderedInSidebar,\n popoverProps: popoverProps,\n className: mergedClassName,\n ...props\n });\n}\nfunction ControlPoints({\n disableRemove,\n disableAlpha,\n gradientPickerDomRef,\n ignoreMarkerPosition,\n value: controlPoints,\n onChange,\n onStartControlPointChange,\n onStopControlPointChange,\n __experimentalIsRenderedInSidebar\n}) {\n const controlPointMoveStateRef = useRef();\n const onMouseMove = event => {\n if (controlPointMoveStateRef.current === undefined || gradientPickerDomRef.current === null) {\n return;\n }\n const relativePosition = getHorizontalRelativeGradientPosition(event.clientX, gradientPickerDomRef.current);\n const {\n initialPosition,\n index,\n significantMoveHappened\n } = controlPointMoveStateRef.current;\n if (!significantMoveHappened && Math.abs(initialPosition - relativePosition) >= MINIMUM_SIGNIFICANT_MOVE) {\n controlPointMoveStateRef.current.significantMoveHappened = true;\n }\n onChange(updateControlPointPosition(controlPoints, index, relativePosition));\n };\n const cleanEventListeners = () => {\n if (window && window.removeEventListener && controlPointMoveStateRef.current && controlPointMoveStateRef.current.listenersActivated) {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('mouseup', cleanEventListeners);\n onStopControlPointChange();\n controlPointMoveStateRef.current.listenersActivated = false;\n }\n };\n\n // Adding `cleanEventListeners` to the dependency array below requires the function itself to be wrapped in a `useCallback`\n // This memoization would prevent the event listeners from being properly cleaned.\n // Instead, we'll pass a ref to the function in our `useEffect` so `cleanEventListeners` itself is no longer a dependency.\n const cleanEventListenersRef = useRef();\n cleanEventListenersRef.current = cleanEventListeners;\n useEffect(() => {\n return () => {\n cleanEventListenersRef.current?.();\n };\n }, []);\n return /*#__PURE__*/_jsx(_Fragment, {\n children: controlPoints.map((point, index) => {\n const initialPosition = point?.position;\n return ignoreMarkerPosition !== initialPosition && /*#__PURE__*/_jsx(GradientColorPickerDropdown, {\n isRenderedInSidebar: __experimentalIsRenderedInSidebar,\n onClose: onStopControlPointChange,\n renderToggle: ({\n isOpen,\n onToggle\n }) => /*#__PURE__*/_jsx(ControlPointButton, {\n onClick: () => {\n if (controlPointMoveStateRef.current && controlPointMoveStateRef.current.significantMoveHappened) {\n return;\n }\n if (isOpen) {\n onStopControlPointChange();\n } else {\n onStartControlPointChange();\n }\n onToggle();\n },\n onMouseDown: () => {\n if (window && window.addEventListener) {\n controlPointMoveStateRef.current = {\n initialPosition,\n index,\n significantMoveHappened: false,\n listenersActivated: true\n };\n onStartControlPointChange();\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('mouseup', cleanEventListeners);\n }\n },\n onKeyDown: event => {\n if (event.code === 'ArrowLeft') {\n // Stop propagation of the key press event to avoid focus moving\n // to another editor area.\n event.stopPropagation();\n onChange(updateControlPointPosition(controlPoints, index, clampPercent(point.position - KEYBOARD_CONTROL_POINT_VARIATION)));\n } else if (event.code === 'ArrowRight') {\n // Stop propagation of the key press event to avoid focus moving\n // to another editor area.\n event.stopPropagation();\n onChange(updateControlPointPosition(controlPoints, index, clampPercent(point.position + KEYBOARD_CONTROL_POINT_VARIATION)));\n }\n },\n isOpen: isOpen,\n position: point.position,\n color: point.color\n }, index),\n renderContent: ({\n onClose\n }) => /*#__PURE__*/_jsxs(DropdownContentWrapper, {\n paddingSize: \"none\",\n children: [/*#__PURE__*/_jsx(ColorPicker, {\n enableAlpha: !disableAlpha,\n color: point.color,\n onChange: color => {\n onChange(updateControlPointColor(controlPoints, index, colord(color).toRgbString()));\n }\n }), !disableRemove && controlPoints.length > 2 && /*#__PURE__*/_jsx(HStack, {\n className: \"components-custom-gradient-picker__remove-control-point-wrapper\",\n alignment: \"center\",\n children: /*#__PURE__*/_jsx(Button, {\n onClick: () => {\n onChange(removeControlPoint(controlPoints, index));\n onClose();\n },\n variant: \"link\",\n children: __('Remove Control Point')\n })\n })]\n }),\n style: {\n left: `${point.position}%`,\n transform: 'translateX( -50% )'\n }\n }, index);\n })\n });\n}\nfunction InsertPoint({\n value: controlPoints,\n onChange,\n onOpenInserter,\n onCloseInserter,\n insertPosition,\n disableAlpha,\n __experimentalIsRenderedInSidebar\n}) {\n const [alreadyInsertedPoint, setAlreadyInsertedPoint] = useState(false);\n return /*#__PURE__*/_jsx(GradientColorPickerDropdown, {\n isRenderedInSidebar: __experimentalIsRenderedInSidebar,\n className: \"components-custom-gradient-picker__inserter\",\n onClose: () => {\n onCloseInserter();\n },\n renderToggle: ({\n isOpen,\n onToggle\n }) => /*#__PURE__*/_jsx(Button, {\n __next40pxDefaultSize: true,\n \"aria-expanded\": isOpen,\n \"aria-haspopup\": \"true\",\n onClick: () => {\n if (isOpen) {\n onCloseInserter();\n } else {\n setAlreadyInsertedPoint(false);\n onOpenInserter();\n }\n onToggle();\n },\n className: \"components-custom-gradient-picker__insert-point-dropdown\",\n icon: plus\n }),\n renderContent: () => /*#__PURE__*/_jsx(DropdownContentWrapper, {\n paddingSize: \"none\",\n children: /*#__PURE__*/_jsx(ColorPicker, {\n enableAlpha: !disableAlpha,\n onChange: color => {\n if (!alreadyInsertedPoint) {\n onChange(addControlPoint(controlPoints, insertPosition, colord(color).toRgbString()));\n setAlreadyInsertedPoint(true);\n } else {\n onChange(updateControlPointColorByPosition(controlPoints, insertPosition, colord(color).toRgbString()));\n }\n }\n })\n }),\n style: insertPosition !== null ? {\n left: `${insertPosition}%`,\n transform: 'translateX( -50% )'\n } : undefined\n });\n}\nControlPoints.InsertPoint = InsertPoint;\nexport default ControlPoints;"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAiB;AACjB,oBAAuB;AAKvB,qBAA8B;AAC9B,qBAAqD;AACrD,kBAA4B;AAC5B,mBAAqB;AAKrB,oBAAmB;AACnB,qBAAuB;AACvB,0BAA4B;AAC5B,6BAA+B;AAC/B,2BAA0C;AAC1C,mBAAiM;AACjM,uBAA2E;AAC3E,sCAAmC;AACnC,yBAAkE;AAClE,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAG;AACD,QAAM,iBAAa,8BAAc,kBAAkB;AACnD,QAAM,gBAAgB,uEAAuE,UAAU;AACvG,SAAoB,uCAAAA,MAAM,mBAAAC,UAAW;AAAA,IACnC,UAAU,CAAc,uCAAAC,KAAK,cAAAC,SAAQ;AAAA,MACnC,kBAAc;AAAA;AAAA,YAEd,gBAAG,iEAAiE;AAAA,QAAG;AAAA,QAAU;AAAA,MAAK;AAAA,MACtF,oBAAoB;AAAA,MACpB,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,uBAAuB;AAAA,MACvB,eAAW,YAAAC,SAAK,2DAA2D;AAAA,QACzE,aAAa;AAAA,MACf,CAAC;AAAA,MACD,GAAG;AAAA,IACL,CAAC,GAAgB,uCAAAF,KAAK,uCAAgB;AAAA,MACpC,IAAI;AAAA,MACJ,cAAU,gBAAG,sKAAsK;AAAA,IACrL,CAAC,CAAC;AAAA,EACJ,CAAC;AACH;AACA,SAAS,4BAA4B;AAAA,EACnC;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAG;AAED,QAAM,mBAAe,wBAAQ,OAAO;AAAA,IAClC,WAAW;AAAA,IACX,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIR,QAAQ;AAAA,EACV,IAAI,CAAC,CAAC;AACN,QAAM,sBAAkB,YAAAE,SAAK,6DAA6D,SAAS;AACnG,SAAoB,uCAAAF,KAAK,gDAA2B;AAAA,IAClD;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,GAAG;AAAA,EACL,CAAC;AACH;AACA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAG;AACD,QAAM,+BAA2B,uBAAO;
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\nimport { colord } from 'colord';\n\n/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { useEffect, useRef, useState, useMemo } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { plus } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport Button from '../../button';\nimport { HStack } from '../../h-stack';\nimport { ColorPicker } from '../../color-picker';\nimport { VisuallyHidden } from '../../visually-hidden';\nimport { CustomColorPickerDropdown } from '../../color-palette';\nimport { addControlPoint, clampPercent, removeControlPoint, updateControlPointColor, updateControlPointColorByPosition, updateControlPointPosition, getHorizontalRelativeGradientPosition } from './utils';\nimport { MINIMUM_SIGNIFICANT_MOVE, KEYBOARD_CONTROL_POINT_VARIATION } from './constants';\nimport DropdownContentWrapper from '../../dropdown/dropdown-content-wrapper';\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction ControlPointButton({\n isOpen,\n position,\n color,\n ...additionalProps\n}) {\n const instanceId = useInstanceId(ControlPointButton);\n const descriptionId = `components-custom-gradient-picker__control-point-button-description-${instanceId}`;\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Button, {\n \"aria-label\": sprintf(\n // translators: 1: gradient position e.g: 70. 2: gradient color code e.g: rgb(52,121,151).\n __('Gradient control point at position %1$d%% with color code %2$s.'), position, color),\n \"aria-describedby\": descriptionId,\n \"aria-haspopup\": \"true\",\n \"aria-expanded\": isOpen,\n __next40pxDefaultSize: true,\n className: clsx('components-custom-gradient-picker__control-point-button', {\n 'is-active': isOpen\n }),\n ...additionalProps\n }), /*#__PURE__*/_jsx(VisuallyHidden, {\n id: descriptionId,\n children: __('Use your left or right arrow keys or drag and drop with the mouse to change the gradient position. Press the button to change the color or remove the control point.')\n })]\n });\n}\nfunction GradientColorPickerDropdown({\n isRenderedInSidebar,\n className,\n ...props\n}) {\n // Open the popover below the gradient control/insertion point\n const popoverProps = useMemo(() => ({\n placement: 'bottom',\n offset: 8,\n // Disabling resize as it would otherwise cause the popover to show\n // scrollbars while dragging the color picker's handle close to the\n // popover edge.\n resize: false\n }), []);\n const mergedClassName = clsx('components-custom-gradient-picker__control-point-dropdown', className);\n return /*#__PURE__*/_jsx(CustomColorPickerDropdown, {\n isRenderedInSidebar: isRenderedInSidebar,\n popoverProps: popoverProps,\n className: mergedClassName,\n ...props\n });\n}\nfunction ControlPoints({\n disableRemove,\n disableAlpha,\n gradientPickerDomRef,\n ignoreMarkerPosition,\n value: controlPoints,\n onChange,\n onStartControlPointChange,\n onStopControlPointChange,\n __experimentalIsRenderedInSidebar\n}) {\n const controlPointMoveStateRef = useRef(undefined);\n const onMouseMove = event => {\n if (controlPointMoveStateRef.current === undefined || gradientPickerDomRef.current === null) {\n return;\n }\n const relativePosition = getHorizontalRelativeGradientPosition(event.clientX, gradientPickerDomRef.current);\n const {\n initialPosition,\n index,\n significantMoveHappened\n } = controlPointMoveStateRef.current;\n if (!significantMoveHappened && Math.abs(initialPosition - relativePosition) >= MINIMUM_SIGNIFICANT_MOVE) {\n controlPointMoveStateRef.current.significantMoveHappened = true;\n }\n onChange(updateControlPointPosition(controlPoints, index, relativePosition));\n };\n const cleanEventListeners = () => {\n if (window && window.removeEventListener && controlPointMoveStateRef.current && controlPointMoveStateRef.current.listenersActivated) {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('mouseup', cleanEventListeners);\n onStopControlPointChange();\n controlPointMoveStateRef.current.listenersActivated = false;\n }\n };\n\n // Adding `cleanEventListeners` to the dependency array below requires the function itself to be wrapped in a `useCallback`\n // This memoization would prevent the event listeners from being properly cleaned.\n // Instead, we'll pass a ref to the function in our `useEffect` so `cleanEventListeners` itself is no longer a dependency.\n const cleanEventListenersRef = useRef(undefined);\n cleanEventListenersRef.current = cleanEventListeners;\n useEffect(() => {\n return () => {\n cleanEventListenersRef.current?.();\n };\n }, []);\n return /*#__PURE__*/_jsx(_Fragment, {\n children: controlPoints.map((point, index) => {\n const initialPosition = point?.position;\n return ignoreMarkerPosition !== initialPosition && /*#__PURE__*/_jsx(GradientColorPickerDropdown, {\n isRenderedInSidebar: __experimentalIsRenderedInSidebar,\n onClose: onStopControlPointChange,\n renderToggle: ({\n isOpen,\n onToggle\n }) => /*#__PURE__*/_jsx(ControlPointButton, {\n onClick: () => {\n if (controlPointMoveStateRef.current && controlPointMoveStateRef.current.significantMoveHappened) {\n return;\n }\n if (isOpen) {\n onStopControlPointChange();\n } else {\n onStartControlPointChange();\n }\n onToggle();\n },\n onMouseDown: () => {\n if (window && window.addEventListener) {\n controlPointMoveStateRef.current = {\n initialPosition,\n index,\n significantMoveHappened: false,\n listenersActivated: true\n };\n onStartControlPointChange();\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('mouseup', cleanEventListeners);\n }\n },\n onKeyDown: event => {\n if (event.code === 'ArrowLeft') {\n // Stop propagation of the key press event to avoid focus moving\n // to another editor area.\n event.stopPropagation();\n onChange(updateControlPointPosition(controlPoints, index, clampPercent(point.position - KEYBOARD_CONTROL_POINT_VARIATION)));\n } else if (event.code === 'ArrowRight') {\n // Stop propagation of the key press event to avoid focus moving\n // to another editor area.\n event.stopPropagation();\n onChange(updateControlPointPosition(controlPoints, index, clampPercent(point.position + KEYBOARD_CONTROL_POINT_VARIATION)));\n }\n },\n isOpen: isOpen,\n position: point.position,\n color: point.color\n }, index),\n renderContent: ({\n onClose\n }) => /*#__PURE__*/_jsxs(DropdownContentWrapper, {\n paddingSize: \"none\",\n children: [/*#__PURE__*/_jsx(ColorPicker, {\n enableAlpha: !disableAlpha,\n color: point.color,\n onChange: color => {\n onChange(updateControlPointColor(controlPoints, index, colord(color).toRgbString()));\n }\n }), !disableRemove && controlPoints.length > 2 && /*#__PURE__*/_jsx(HStack, {\n className: \"components-custom-gradient-picker__remove-control-point-wrapper\",\n alignment: \"center\",\n children: /*#__PURE__*/_jsx(Button, {\n onClick: () => {\n onChange(removeControlPoint(controlPoints, index));\n onClose();\n },\n variant: \"link\",\n children: __('Remove Control Point')\n })\n })]\n }),\n style: {\n left: `${point.position}%`,\n transform: 'translateX( -50% )'\n }\n }, index);\n })\n });\n}\nfunction InsertPoint({\n value: controlPoints,\n onChange,\n onOpenInserter,\n onCloseInserter,\n insertPosition,\n disableAlpha,\n __experimentalIsRenderedInSidebar\n}) {\n const [alreadyInsertedPoint, setAlreadyInsertedPoint] = useState(false);\n return /*#__PURE__*/_jsx(GradientColorPickerDropdown, {\n isRenderedInSidebar: __experimentalIsRenderedInSidebar,\n className: \"components-custom-gradient-picker__inserter\",\n onClose: () => {\n onCloseInserter();\n },\n renderToggle: ({\n isOpen,\n onToggle\n }) => /*#__PURE__*/_jsx(Button, {\n __next40pxDefaultSize: true,\n \"aria-expanded\": isOpen,\n \"aria-haspopup\": \"true\",\n onClick: () => {\n if (isOpen) {\n onCloseInserter();\n } else {\n setAlreadyInsertedPoint(false);\n onOpenInserter();\n }\n onToggle();\n },\n className: \"components-custom-gradient-picker__insert-point-dropdown\",\n icon: plus\n }),\n renderContent: () => /*#__PURE__*/_jsx(DropdownContentWrapper, {\n paddingSize: \"none\",\n children: /*#__PURE__*/_jsx(ColorPicker, {\n enableAlpha: !disableAlpha,\n onChange: color => {\n if (!alreadyInsertedPoint) {\n onChange(addControlPoint(controlPoints, insertPosition, colord(color).toRgbString()));\n setAlreadyInsertedPoint(true);\n } else {\n onChange(updateControlPointColorByPosition(controlPoints, insertPosition, colord(color).toRgbString()));\n }\n }\n })\n }),\n style: insertPosition !== null ? {\n left: `${insertPosition}%`,\n transform: 'translateX( -50% )'\n } : undefined\n });\n}\nControlPoints.InsertPoint = InsertPoint;\nexport default ControlPoints;"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAiB;AACjB,oBAAuB;AAKvB,qBAA8B;AAC9B,qBAAqD;AACrD,kBAA4B;AAC5B,mBAAqB;AAKrB,oBAAmB;AACnB,qBAAuB;AACvB,0BAA4B;AAC5B,6BAA+B;AAC/B,2BAA0C;AAC1C,mBAAiM;AACjM,uBAA2E;AAC3E,sCAAmC;AACnC,yBAAkE;AAClE,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAG;AACD,QAAM,iBAAa,8BAAc,kBAAkB;AACnD,QAAM,gBAAgB,uEAAuE,UAAU;AACvG,SAAoB,uCAAAA,MAAM,mBAAAC,UAAW;AAAA,IACnC,UAAU,CAAc,uCAAAC,KAAK,cAAAC,SAAQ;AAAA,MACnC,kBAAc;AAAA;AAAA,YAEd,gBAAG,iEAAiE;AAAA,QAAG;AAAA,QAAU;AAAA,MAAK;AAAA,MACtF,oBAAoB;AAAA,MACpB,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,uBAAuB;AAAA,MACvB,eAAW,YAAAC,SAAK,2DAA2D;AAAA,QACzE,aAAa;AAAA,MACf,CAAC;AAAA,MACD,GAAG;AAAA,IACL,CAAC,GAAgB,uCAAAF,KAAK,uCAAgB;AAAA,MACpC,IAAI;AAAA,MACJ,cAAU,gBAAG,sKAAsK;AAAA,IACrL,CAAC,CAAC;AAAA,EACJ,CAAC;AACH;AACA,SAAS,4BAA4B;AAAA,EACnC;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAG;AAED,QAAM,mBAAe,wBAAQ,OAAO;AAAA,IAClC,WAAW;AAAA,IACX,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIR,QAAQ;AAAA,EACV,IAAI,CAAC,CAAC;AACN,QAAM,sBAAkB,YAAAE,SAAK,6DAA6D,SAAS;AACnG,SAAoB,uCAAAF,KAAK,gDAA2B;AAAA,IAClD;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,GAAG;AAAA,EACL,CAAC;AACH;AACA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAG;AACD,QAAM,+BAA2B,uBAAO,MAAS;AACjD,QAAM,cAAc,WAAS;AAC3B,QAAI,yBAAyB,YAAY,UAAa,qBAAqB,YAAY,MAAM;AAC3F;AAAA,IACF;AACA,UAAM,uBAAmB,oDAAsC,MAAM,SAAS,qBAAqB,OAAO;AAC1G,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,yBAAyB;AAC7B,QAAI,CAAC,2BAA2B,KAAK,IAAI,kBAAkB,gBAAgB,KAAK,2CAA0B;AACxG,+BAAyB,QAAQ,0BAA0B;AAAA,IAC7D;AACA,iBAAS,yCAA2B,eAAe,OAAO,gBAAgB,CAAC;AAAA,EAC7E;AACA,QAAM,sBAAsB,MAAM;AAChC,QAAI,UAAU,OAAO,uBAAuB,yBAAyB,WAAW,yBAAyB,QAAQ,oBAAoB;AACnI,aAAO,oBAAoB,aAAa,WAAW;AACnD,aAAO,oBAAoB,WAAW,mBAAmB;AACzD,+BAAyB;AACzB,+BAAyB,QAAQ,qBAAqB;AAAA,IACxD;AAAA,EACF;AAKA,QAAM,6BAAyB,uBAAO,MAAS;AAC/C,yBAAuB,UAAU;AACjC,gCAAU,MAAM;AACd,WAAO,MAAM;AACX,6BAAuB,UAAU;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,CAAC;AACL,SAAoB,uCAAAA,KAAK,mBAAAD,UAAW;AAAA,IAClC,UAAU,cAAc,IAAI,CAAC,OAAO,UAAU;AAC5C,YAAM,kBAAkB,OAAO;AAC/B,aAAO,yBAAyB,mBAAgC,uCAAAC,KAAK,6BAA6B;AAAA,QAChG,qBAAqB;AAAA,QACrB,SAAS;AAAA,QACT,cAAc,CAAC;AAAA,UACb;AAAA,UACA;AAAA,QACF,MAAmB,uCAAAA,KAAK,oBAAoB;AAAA,UAC1C,SAAS,MAAM;AACb,gBAAI,yBAAyB,WAAW,yBAAyB,QAAQ,yBAAyB;AAChG;AAAA,YACF;AACA,gBAAI,QAAQ;AACV,uCAAyB;AAAA,YAC3B,OAAO;AACL,wCAA0B;AAAA,YAC5B;AACA,qBAAS;AAAA,UACX;AAAA,UACA,aAAa,MAAM;AACjB,gBAAI,UAAU,OAAO,kBAAkB;AACrC,uCAAyB,UAAU;AAAA,gBACjC;AAAA,gBACA;AAAA,gBACA,yBAAyB;AAAA,gBACzB,oBAAoB;AAAA,cACtB;AACA,wCAA0B;AAC1B,qBAAO,iBAAiB,aAAa,WAAW;AAChD,qBAAO,iBAAiB,WAAW,mBAAmB;AAAA,YACxD;AAAA,UACF;AAAA,UACA,WAAW,WAAS;AAClB,gBAAI,MAAM,SAAS,aAAa;AAG9B,oBAAM,gBAAgB;AACtB,2BAAS,yCAA2B,eAAe,WAAO,2BAAa,MAAM,WAAW,iDAAgC,CAAC,CAAC;AAAA,YAC5H,WAAW,MAAM,SAAS,cAAc;AAGtC,oBAAM,gBAAgB;AACtB,2BAAS,yCAA2B,eAAe,WAAO,2BAAa,MAAM,WAAW,iDAAgC,CAAC,CAAC;AAAA,YAC5H;AAAA,UACF;AAAA,UACA;AAAA,UACA,UAAU,MAAM;AAAA,UAChB,OAAO,MAAM;AAAA,QACf,GAAG,KAAK;AAAA,QACR,eAAe,CAAC;AAAA,UACd;AAAA,QACF,MAAmB,uCAAAF,MAAM,gCAAAK,SAAwB;AAAA,UAC/C,aAAa;AAAA,UACb,UAAU,CAAc,uCAAAH,KAAK,iCAAa;AAAA,YACxC,aAAa,CAAC;AAAA,YACd,OAAO,MAAM;AAAA,YACb,UAAU,WAAS;AACjB,2BAAS,sCAAwB,eAAe,WAAO,sBAAO,KAAK,EAAE,YAAY,CAAC,CAAC;AAAA,YACrF;AAAA,UACF,CAAC,GAAG,CAAC,iBAAiB,cAAc,SAAS,KAAkB,uCAAAA,KAAK,uBAAQ;AAAA,YAC1E,WAAW;AAAA,YACX,WAAW;AAAA,YACX,UAAuB,uCAAAA,KAAK,cAAAC,SAAQ;AAAA,cAClC,SAAS,MAAM;AACb,6BAAS,iCAAmB,eAAe,KAAK,CAAC;AACjD,wBAAQ;AAAA,cACV;AAAA,cACA,SAAS;AAAA,cACT,cAAU,gBAAG,sBAAsB;AAAA,YACrC,CAAC;AAAA,UACH,CAAC,CAAC;AAAA,QACJ,CAAC;AAAA,QACD,OAAO;AAAA,UACL,MAAM,GAAG,MAAM,QAAQ;AAAA,UACvB,WAAW;AAAA,QACb;AAAA,MACF,GAAG,KAAK;AAAA,IACV,CAAC;AAAA,EACH,CAAC;AACH;AACA,SAAS,YAAY;AAAA,EACnB,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAG;AACD,QAAM,CAAC,sBAAsB,uBAAuB,QAAI,yBAAS,KAAK;AACtE,SAAoB,uCAAAD,KAAK,6BAA6B;AAAA,IACpD,qBAAqB;AAAA,IACrB,WAAW;AAAA,IACX,SAAS,MAAM;AACb,sBAAgB;AAAA,IAClB;AAAA,IACA,cAAc,CAAC;AAAA,MACb;AAAA,MACA;AAAA,IACF,MAAmB,uCAAAA,KAAK,cAAAC,SAAQ;AAAA,MAC9B,uBAAuB;AAAA,MACvB,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,SAAS,MAAM;AACb,YAAI,QAAQ;AACV,0BAAgB;AAAA,QAClB,OAAO;AACL,kCAAwB,KAAK;AAC7B,yBAAe;AAAA,QACjB;AACA,iBAAS;AAAA,MACX;AAAA,MACA,WAAW;AAAA,MACX,MAAM;AAAA,IACR,CAAC;AAAA,IACD,eAAe,MAAmB,uCAAAD,KAAK,gCAAAG,SAAwB;AAAA,MAC7D,aAAa;AAAA,MACb,UAAuB,uCAAAH,KAAK,iCAAa;AAAA,QACvC,aAAa,CAAC;AAAA,QACd,UAAU,WAAS;AACjB,cAAI,CAAC,sBAAsB;AACzB,yBAAS,8BAAgB,eAAe,oBAAgB,sBAAO,KAAK,EAAE,YAAY,CAAC,CAAC;AACpF,oCAAwB,IAAI;AAAA,UAC9B,OAAO;AACL,yBAAS,gDAAkC,eAAe,oBAAgB,sBAAO,KAAK,EAAE,YAAY,CAAC,CAAC;AAAA,UACxG;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,IACD,OAAO,mBAAmB,OAAO;AAAA,MAC/B,MAAM,GAAG,cAAc;AAAA,MACvB,WAAW;AAAA,IACb,IAAI;AAAA,EACN,CAAC;AACH;AACA,cAAc,cAAc;AAC5B,IAAO,yBAAQ;",
|
|
6
6
|
"names": ["_jsxs", "_Fragment", "_jsx", "Button", "clsx", "DropdownContentWrapper"]
|
|
7
7
|
}
|
|
@@ -182,7 +182,7 @@ function Day({
|
|
|
182
182
|
onClick,
|
|
183
183
|
onKeyDown
|
|
184
184
|
}) {
|
|
185
|
-
const ref = (0, import_element.useRef)();
|
|
185
|
+
const ref = (0, import_element.useRef)(null);
|
|
186
186
|
(0, import_element.useEffect)(() => {
|
|
187
187
|
if (ref.current && isFocusable && isFocusAllowed) {
|
|
188
188
|
ref.current.focus();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/date-time/date/index.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport { isSameDay, subMonths, addMonths, isEqual, addDays, subDays, subWeeks, addWeeks, isSameMonth } from 'date-fns';\n/**\n * WordPress dependencies\n */\nimport { __, _n, sprintf, isRTL } from '@wordpress/i18n';\nimport { arrowLeft, arrowRight } from '@wordpress/icons';\nimport { dateI18n, date as formatDate, getSettings } from '@wordpress/date';\nimport { useState, useRef, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useLilius } from './use-lilius';\nimport { Wrapper, Navigator, ViewPreviousMonthButton, ViewNextMonthButton, NavigatorHeading, Calendar, DayOfWeek, DayButton } from './styles';\nimport { inputToDate, setInConfiguredTimezone, startOfDayInConfiguredTimezone } from '../utils';\nimport { TIMEZONELESS_FORMAT } from '../constants';\n\n/**\n * DatePicker is a React component that renders a calendar for date selection.\n *\n * ```jsx\n * import { DatePicker } from '@wordpress/components';\n * import { useState } from '@wordpress/element';\n *\n * const MyDatePicker = () => {\n * const [ date, setDate ] = useState( new Date() );\n *\n * return (\n * <DatePicker\n * currentDate={ date }\n * onChange={ ( newDate ) => setDate( newDate ) }\n * />\n * );\n * };\n * ```\n */\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function DatePicker({\n currentDate,\n onChange,\n events = [],\n isInvalidDate,\n onMonthPreviewed,\n startOfWeek: weekStartsOn = 0\n}) {\n const date = inputToDate(currentDate ?? new Date());\n const {\n calendar,\n viewing,\n setSelected,\n setViewing,\n isSelected,\n viewPreviousMonth,\n viewNextMonth\n } = useLilius({\n selected: [startOfDayInConfiguredTimezone(date)],\n viewing: startOfDayInConfiguredTimezone(date),\n weekStartsOn\n });\n\n // Used to implement a roving tab index. Tracks the day that receives focus\n // when the user tabs into the calendar.\n const [focusable, setFocusable] = useState(startOfDayInConfiguredTimezone(date));\n\n // Allows us to only programmatically focus() a day when focus was already\n // within the calendar. This stops us stealing focus from e.g. a TimePicker\n // input.\n const [isFocusWithinCalendar, setIsFocusWithinCalendar] = useState(false);\n\n // Update internal state when currentDate prop changes.\n const [prevCurrentDate, setPrevCurrentDate] = useState(currentDate);\n if (currentDate !== prevCurrentDate) {\n setPrevCurrentDate(currentDate);\n setSelected([startOfDayInConfiguredTimezone(date)]);\n setViewing(startOfDayInConfiguredTimezone(date));\n setFocusable(startOfDayInConfiguredTimezone(date));\n }\n return /*#__PURE__*/_jsxs(Wrapper, {\n className: \"components-datetime__date\",\n role: \"application\",\n \"aria-label\": __('Calendar'),\n children: [/*#__PURE__*/_jsxs(Navigator, {\n children: [/*#__PURE__*/_jsx(ViewPreviousMonthButton, {\n icon: isRTL() ? arrowRight : arrowLeft,\n variant: \"tertiary\",\n \"aria-label\": __('View previous month'),\n onClick: () => {\n viewPreviousMonth();\n setFocusable(subMonths(focusable, 1));\n const prevMonth = subMonths(viewing, 1);\n onMonthPreviewed?.(dateI18n(TIMEZONELESS_FORMAT, prevMonth, -prevMonth.getTimezoneOffset()));\n },\n size: \"compact\"\n }), /*#__PURE__*/_jsxs(NavigatorHeading, {\n level: 3,\n children: [/*#__PURE__*/_jsx(\"strong\", {\n children: dateI18n('F', viewing, -viewing.getTimezoneOffset())\n }), ' ', dateI18n('Y', viewing, -viewing.getTimezoneOffset())]\n }), /*#__PURE__*/_jsx(ViewNextMonthButton, {\n icon: isRTL() ? arrowLeft : arrowRight,\n variant: \"tertiary\",\n \"aria-label\": __('View next month'),\n onClick: () => {\n viewNextMonth();\n setFocusable(addMonths(focusable, 1));\n const nextMonth = addMonths(viewing, 1);\n onMonthPreviewed?.(dateI18n(TIMEZONELESS_FORMAT, nextMonth, -nextMonth.getTimezoneOffset()));\n },\n size: \"compact\"\n })]\n }), /*#__PURE__*/_jsxs(Calendar, {\n onFocus: () => setIsFocusWithinCalendar(true),\n onBlur: () => setIsFocusWithinCalendar(false),\n children: [calendar[0][0].map(day => /*#__PURE__*/_jsx(DayOfWeek, {\n children: dateI18n('D', day, -day.getTimezoneOffset())\n }, day.toString())), calendar[0].map(week => week.map((day, index) => {\n if (!isSameMonth(day, viewing)) {\n return null;\n }\n return /*#__PURE__*/_jsx(Day, {\n day: day,\n column: index + 1,\n isSelected: isSelected(day),\n isFocusable: isEqual(day, focusable),\n isFocusAllowed: isFocusWithinCalendar,\n isToday: isSameDay(day, startOfDayInConfiguredTimezone(new Date())),\n isInvalid: isInvalidDate ? isInvalidDate(day) : false,\n numEvents: events.filter(event => isSameDay(event.date, day)).length,\n onClick: () => {\n setSelected([day]);\n setFocusable(day);\n const newDate = setInConfiguredTimezone(date, {\n year: day.getFullYear(),\n month: day.getMonth(),\n date: day.getDate()\n });\n onChange?.(formatDate(TIMEZONELESS_FORMAT, newDate));\n },\n onKeyDown: event => {\n let nextFocusable;\n if (event.key === 'ArrowLeft') {\n nextFocusable = addDays(day, isRTL() ? 1 : -1);\n }\n if (event.key === 'ArrowRight') {\n nextFocusable = addDays(day, isRTL() ? -1 : 1);\n }\n if (event.key === 'ArrowUp') {\n nextFocusable = subWeeks(day, 1);\n }\n if (event.key === 'ArrowDown') {\n nextFocusable = addWeeks(day, 1);\n }\n if (event.key === 'PageUp') {\n nextFocusable = subMonths(day, 1);\n }\n if (event.key === 'PageDown') {\n nextFocusable = addMonths(day, 1);\n }\n if (event.key === 'Home') {\n const dayOfWeek = day.getDay();\n const daysToSubtract = (dayOfWeek - weekStartsOn + 7) % 7;\n nextFocusable = subDays(day, daysToSubtract);\n }\n if (event.key === 'End') {\n const dayOfWeek = day.getDay();\n const daysToAdd = (weekStartsOn + 6 - dayOfWeek) % 7;\n nextFocusable = addDays(day, daysToAdd);\n }\n if (nextFocusable) {\n event.preventDefault();\n setFocusable(nextFocusable);\n if (!isSameMonth(nextFocusable, viewing)) {\n setViewing(nextFocusable);\n onMonthPreviewed?.(dateI18n(TIMEZONELESS_FORMAT, nextFocusable, -nextFocusable.getTimezoneOffset()));\n }\n }\n }\n }, day.toString());\n }))]\n })]\n });\n}\nfunction Day({\n day,\n column,\n isSelected,\n isFocusable,\n isFocusAllowed,\n isToday,\n isInvalid,\n numEvents,\n onClick,\n onKeyDown\n}) {\n const ref = useRef();\n\n // Focus the day when it becomes focusable, e.g. because an arrow key is\n // pressed. Only do this if focus is allowed - this stops us stealing focus\n // from e.g. a TimePicker input.\n useEffect(() => {\n if (ref.current && isFocusable && isFocusAllowed) {\n ref.current.focus();\n }\n // isFocusAllowed is not a dep as there is no point calling focus() on\n // an already focused element.\n }, [isFocusable]);\n return /*#__PURE__*/_jsx(DayButton, {\n __next40pxDefaultSize: true,\n ref: ref,\n className: \"components-datetime__date__day\" // Unused, for backwards compatibility.\n ,\n disabled: isInvalid,\n tabIndex: isFocusable ? 0 : -1,\n \"aria-label\": getDayLabel(day, isSelected, isToday, numEvents),\n column: column,\n isSelected: isSelected,\n isToday: isToday,\n hasEvents: numEvents > 0,\n onClick: onClick,\n onKeyDown: onKeyDown,\n children: dateI18n('j', day, -day.getTimezoneOffset())\n });\n}\nfunction getDayLabel(date, isSelected, isToday, numEvents) {\n const {\n formats\n } = getSettings();\n const localizedDate = dateI18n(formats.date, date, -date.getTimezoneOffset());\n const parts = [localizedDate];\n if (isSelected) {\n parts.push(__('Selected'));\n }\n if (isToday) {\n parts.push(__('Today'));\n }\n if (numEvents > 0) {\n parts.push(sprintf(\n // translators: %d: Number of events on the calendar date.\n _n('There is %d event', 'There are %d events', numEvents), numEvents));\n }\n return parts.join('. ');\n}\nexport default DatePicker;"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport { isSameDay, subMonths, addMonths, isEqual, addDays, subDays, subWeeks, addWeeks, isSameMonth } from 'date-fns';\n/**\n * WordPress dependencies\n */\nimport { __, _n, sprintf, isRTL } from '@wordpress/i18n';\nimport { arrowLeft, arrowRight } from '@wordpress/icons';\nimport { dateI18n, date as formatDate, getSettings } from '@wordpress/date';\nimport { useState, useRef, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useLilius } from './use-lilius';\nimport { Wrapper, Navigator, ViewPreviousMonthButton, ViewNextMonthButton, NavigatorHeading, Calendar, DayOfWeek, DayButton } from './styles';\nimport { inputToDate, setInConfiguredTimezone, startOfDayInConfiguredTimezone } from '../utils';\nimport { TIMEZONELESS_FORMAT } from '../constants';\n\n/**\n * DatePicker is a React component that renders a calendar for date selection.\n *\n * ```jsx\n * import { DatePicker } from '@wordpress/components';\n * import { useState } from '@wordpress/element';\n *\n * const MyDatePicker = () => {\n * const [ date, setDate ] = useState( new Date() );\n *\n * return (\n * <DatePicker\n * currentDate={ date }\n * onChange={ ( newDate ) => setDate( newDate ) }\n * />\n * );\n * };\n * ```\n */\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function DatePicker({\n currentDate,\n onChange,\n events = [],\n isInvalidDate,\n onMonthPreviewed,\n startOfWeek: weekStartsOn = 0\n}) {\n const date = inputToDate(currentDate ?? new Date());\n const {\n calendar,\n viewing,\n setSelected,\n setViewing,\n isSelected,\n viewPreviousMonth,\n viewNextMonth\n } = useLilius({\n selected: [startOfDayInConfiguredTimezone(date)],\n viewing: startOfDayInConfiguredTimezone(date),\n weekStartsOn\n });\n\n // Used to implement a roving tab index. Tracks the day that receives focus\n // when the user tabs into the calendar.\n const [focusable, setFocusable] = useState(startOfDayInConfiguredTimezone(date));\n\n // Allows us to only programmatically focus() a day when focus was already\n // within the calendar. This stops us stealing focus from e.g. a TimePicker\n // input.\n const [isFocusWithinCalendar, setIsFocusWithinCalendar] = useState(false);\n\n // Update internal state when currentDate prop changes.\n const [prevCurrentDate, setPrevCurrentDate] = useState(currentDate);\n if (currentDate !== prevCurrentDate) {\n setPrevCurrentDate(currentDate);\n setSelected([startOfDayInConfiguredTimezone(date)]);\n setViewing(startOfDayInConfiguredTimezone(date));\n setFocusable(startOfDayInConfiguredTimezone(date));\n }\n return /*#__PURE__*/_jsxs(Wrapper, {\n className: \"components-datetime__date\",\n role: \"application\",\n \"aria-label\": __('Calendar'),\n children: [/*#__PURE__*/_jsxs(Navigator, {\n children: [/*#__PURE__*/_jsx(ViewPreviousMonthButton, {\n icon: isRTL() ? arrowRight : arrowLeft,\n variant: \"tertiary\",\n \"aria-label\": __('View previous month'),\n onClick: () => {\n viewPreviousMonth();\n setFocusable(subMonths(focusable, 1));\n const prevMonth = subMonths(viewing, 1);\n onMonthPreviewed?.(dateI18n(TIMEZONELESS_FORMAT, prevMonth, -prevMonth.getTimezoneOffset()));\n },\n size: \"compact\"\n }), /*#__PURE__*/_jsxs(NavigatorHeading, {\n level: 3,\n children: [/*#__PURE__*/_jsx(\"strong\", {\n children: dateI18n('F', viewing, -viewing.getTimezoneOffset())\n }), ' ', dateI18n('Y', viewing, -viewing.getTimezoneOffset())]\n }), /*#__PURE__*/_jsx(ViewNextMonthButton, {\n icon: isRTL() ? arrowLeft : arrowRight,\n variant: \"tertiary\",\n \"aria-label\": __('View next month'),\n onClick: () => {\n viewNextMonth();\n setFocusable(addMonths(focusable, 1));\n const nextMonth = addMonths(viewing, 1);\n onMonthPreviewed?.(dateI18n(TIMEZONELESS_FORMAT, nextMonth, -nextMonth.getTimezoneOffset()));\n },\n size: \"compact\"\n })]\n }), /*#__PURE__*/_jsxs(Calendar, {\n onFocus: () => setIsFocusWithinCalendar(true),\n onBlur: () => setIsFocusWithinCalendar(false),\n children: [calendar[0][0].map(day => /*#__PURE__*/_jsx(DayOfWeek, {\n children: dateI18n('D', day, -day.getTimezoneOffset())\n }, day.toString())), calendar[0].map(week => week.map((day, index) => {\n if (!isSameMonth(day, viewing)) {\n return null;\n }\n return /*#__PURE__*/_jsx(Day, {\n day: day,\n column: index + 1,\n isSelected: isSelected(day),\n isFocusable: isEqual(day, focusable),\n isFocusAllowed: isFocusWithinCalendar,\n isToday: isSameDay(day, startOfDayInConfiguredTimezone(new Date())),\n isInvalid: isInvalidDate ? isInvalidDate(day) : false,\n numEvents: events.filter(event => isSameDay(event.date, day)).length,\n onClick: () => {\n setSelected([day]);\n setFocusable(day);\n const newDate = setInConfiguredTimezone(date, {\n year: day.getFullYear(),\n month: day.getMonth(),\n date: day.getDate()\n });\n onChange?.(formatDate(TIMEZONELESS_FORMAT, newDate));\n },\n onKeyDown: event => {\n let nextFocusable;\n if (event.key === 'ArrowLeft') {\n nextFocusable = addDays(day, isRTL() ? 1 : -1);\n }\n if (event.key === 'ArrowRight') {\n nextFocusable = addDays(day, isRTL() ? -1 : 1);\n }\n if (event.key === 'ArrowUp') {\n nextFocusable = subWeeks(day, 1);\n }\n if (event.key === 'ArrowDown') {\n nextFocusable = addWeeks(day, 1);\n }\n if (event.key === 'PageUp') {\n nextFocusable = subMonths(day, 1);\n }\n if (event.key === 'PageDown') {\n nextFocusable = addMonths(day, 1);\n }\n if (event.key === 'Home') {\n const dayOfWeek = day.getDay();\n const daysToSubtract = (dayOfWeek - weekStartsOn + 7) % 7;\n nextFocusable = subDays(day, daysToSubtract);\n }\n if (event.key === 'End') {\n const dayOfWeek = day.getDay();\n const daysToAdd = (weekStartsOn + 6 - dayOfWeek) % 7;\n nextFocusable = addDays(day, daysToAdd);\n }\n if (nextFocusable) {\n event.preventDefault();\n setFocusable(nextFocusable);\n if (!isSameMonth(nextFocusable, viewing)) {\n setViewing(nextFocusable);\n onMonthPreviewed?.(dateI18n(TIMEZONELESS_FORMAT, nextFocusable, -nextFocusable.getTimezoneOffset()));\n }\n }\n }\n }, day.toString());\n }))]\n })]\n });\n}\nfunction Day({\n day,\n column,\n isSelected,\n isFocusable,\n isFocusAllowed,\n isToday,\n isInvalid,\n numEvents,\n onClick,\n onKeyDown\n}) {\n const ref = useRef(null);\n\n // Focus the day when it becomes focusable, e.g. because an arrow key is\n // pressed. Only do this if focus is allowed - this stops us stealing focus\n // from e.g. a TimePicker input.\n useEffect(() => {\n if (ref.current && isFocusable && isFocusAllowed) {\n ref.current.focus();\n }\n // isFocusAllowed is not a dep as there is no point calling focus() on\n // an already focused element.\n }, [isFocusable]);\n return /*#__PURE__*/_jsx(DayButton, {\n __next40pxDefaultSize: true,\n ref: ref,\n className: \"components-datetime__date__day\" // Unused, for backwards compatibility.\n ,\n disabled: isInvalid,\n tabIndex: isFocusable ? 0 : -1,\n \"aria-label\": getDayLabel(day, isSelected, isToday, numEvents),\n column: column,\n isSelected: isSelected,\n isToday: isToday,\n hasEvents: numEvents > 0,\n onClick: onClick,\n onKeyDown: onKeyDown,\n children: dateI18n('j', day, -day.getTimezoneOffset())\n });\n}\nfunction getDayLabel(date, isSelected, isToday, numEvents) {\n const {\n formats\n } = getSettings();\n const localizedDate = dateI18n(formats.date, date, -date.getTimezoneOffset());\n const parts = [localizedDate];\n if (isSelected) {\n parts.push(__('Selected'));\n }\n if (isToday) {\n parts.push(__('Today'));\n }\n if (numEvents > 0) {\n parts.push(sprintf(\n // translators: %d: Number of events on the calendar date.\n _n('There is %d event', 'There are %d events', numEvents), numEvents));\n }\n return parts.join('. ');\n}\nexport default DatePicker;"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["_jsxs", "_jsx", "formatDate"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/date-time/time/index.tsx"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import { startOfMinute } from 'date-fns';\nimport { useState, useMemo, useEffect } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { date as formatDate } from '@wordpress/date';\nimport BaseControl from '../../base-control';\nimport { VisuallyHidden } from '../../visually-hidden';\nimport SelectControl from '../../select-control';\nimport TimeZone from './timezone';\nimport { Wrapper, Fieldset, MonthSelectWrapper, DayInput, YearInput } from './styles';\nimport { HStack } from '../../h-stack';\nimport { Spacer } from '../../spacer';\nimport { inputToDate, buildPadInputStateReducer, validateInputElementTarget, setInConfiguredTimezone, getDaysInMonth } from '../utils';\nimport { TIMEZONELESS_FORMAT } from '../constants';\nimport { TimeInput } from './time-input';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst VALID_DATE_ORDERS = ['dmy', 'mdy', 'ymd'];\n\n/**\n * TimePicker is a React component that renders a clock for time selection.\n *\n * ```jsx\n * import { TimePicker } from '@wordpress/components';\n * import { useState } from '@wordpress/element';\n *\n * const MyTimePicker = () => {\n * const [ time, setTime ] = useState( new Date() );\n *\n * return (\n * <TimePicker\n * currentTime={ date }\n * onChange={ ( newTime ) => setTime( newTime ) }\n * is12Hour\n * />\n * );\n * };\n * ```\n */\nexport function TimePicker({\n is12Hour,\n currentTime,\n onChange,\n dateOrder: dateOrderProp,\n hideLabelFromVision = false\n}) {\n const [date, setDate] = useState(() =>\n // Truncate the date at the minutes, see: #15495.\n startOfMinute(inputToDate(currentTime ?? new Date())));\n\n // Reset the state when currentTime changed.\n // TODO: useEffect() shouldn't be used like this, causes an unnecessary render\n useEffect(() => {\n setDate(startOfMinute(inputToDate(currentTime ?? new Date())));\n }, [currentTime]);\n const monthOptions = [{\n value: '01',\n label: __('January')\n }, {\n value: '02',\n label: __('February')\n }, {\n value: '03',\n label: __('March')\n }, {\n value: '04',\n label: __('April')\n }, {\n value: '05',\n label: __('May')\n }, {\n value: '06',\n label: __('June')\n }, {\n value: '07',\n label: __('July')\n }, {\n value: '08',\n label: __('August')\n }, {\n value: '09',\n label: __('September')\n }, {\n value: '10',\n label: __('October')\n }, {\n value: '11',\n label: __('November')\n }, {\n value: '12',\n label: __('December')\n }];\n const {\n day,\n month,\n year,\n minutes,\n hours\n } = useMemo(() => ({\n day: formatDate('d', date),\n month: formatDate('m', date),\n year: formatDate('Y', date),\n minutes: formatDate('i', date),\n hours: formatDate('H', date)\n }), [date]);\n const buildNumberControlChangeCallback = method => {\n const callback = (value, {\n event\n }) => {\n if (!validateInputElementTarget(event)) {\n return;\n }\n\n // We can safely assume value is a number if target is valid.\n const numberValue = Number(value);\n\n // Internal date is UTC-normalized, but the field should be updated\n // as if in the configured timezone.\n const newDate = setInConfiguredTimezone(date, {\n [method]: numberValue\n });\n setDate(newDate);\n onChange?.(formatDate(TIMEZONELESS_FORMAT, newDate));\n };\n return callback;\n };\n const onTimeInputChangeCallback = ({\n hours: newHours,\n minutes: newMinutes\n }) => {\n // Internal date is UTC-normalized, but the field should be updated\n // as if in the configured timezone.\n const newDate = setInConfiguredTimezone(date, {\n hours: newHours,\n minutes: newMinutes\n });\n setDate(newDate);\n onChange?.(formatDate(TIMEZONELESS_FORMAT, newDate));\n };\n const dayField = /*#__PURE__*/_jsx(DayInput, {\n className: \"components-datetime__time-field components-datetime__time-field-day\" // Unused, for backwards compatibility.\n ,\n label: __('Day'),\n hideLabelFromVision: true,\n __next40pxDefaultSize: true,\n value: day,\n step: 1,\n min: 1,\n max: getDaysInMonth(Number(year), Number(month) - 1),\n required: true,\n spinControls: \"none\",\n isPressEnterToChange: true,\n isDragEnabled: false,\n isShiftStepEnabled: false,\n onChange: buildNumberControlChangeCallback('date')\n }, \"day\");\n const monthField = /*#__PURE__*/_jsx(MonthSelectWrapper, {\n children: /*#__PURE__*/_jsx(SelectControl, {\n className: \"components-datetime__time-field components-datetime__time-field-month\" // Unused, for backwards compatibility.\n ,\n label: __('Month'),\n hideLabelFromVision: true,\n __next40pxDefaultSize: true,\n value: month,\n options: monthOptions,\n onChange: value => {\n // Internal date is UTC-normalized, but the field should be updated\n // as if in the configured timezone.\n const newDate = setInConfiguredTimezone(date, {\n month: Number(value) - 1\n });\n setDate(newDate);\n onChange?.(formatDate(TIMEZONELESS_FORMAT, newDate));\n }\n })\n }, \"month\");\n const yearField = /*#__PURE__*/_jsx(YearInput, {\n className: \"components-datetime__time-field components-datetime__time-field-year\" // Unused, for backwards compatibility.\n ,\n label: __('Year'),\n hideLabelFromVision: true,\n __next40pxDefaultSize: true,\n value: year,\n step: 1,\n min: 1,\n max: 9999,\n required: true,\n spinControls: \"none\",\n isPressEnterToChange: true,\n isDragEnabled: false,\n isShiftStepEnabled: false,\n onChange: buildNumberControlChangeCallback('year'),\n __unstableStateReducer: buildPadInputStateReducer(4)\n }, \"year\");\n const defaultDateOrder = is12Hour ? 'mdy' : 'dmy';\n const dateOrder = dateOrderProp && VALID_DATE_ORDERS.includes(dateOrderProp) ? dateOrderProp : defaultDateOrder;\n const fields = dateOrder.split('').map(field => {\n switch (field) {\n case 'd':\n return dayField;\n case 'm':\n return monthField;\n case 'y':\n return yearField;\n default:\n return null;\n }\n });\n return /*#__PURE__*/_jsxs(Wrapper, {\n className: \"components-datetime__time\" // Unused, for backwards compatibility.\n ,\n children: [/*#__PURE__*/_jsxs(Fieldset, {\n children: [hideLabelFromVision ? /*#__PURE__*/_jsx(VisuallyHidden, {\n as: \"legend\",\n children: __('Time')\n }) : /*#__PURE__*/_jsx(BaseControl.VisualLabel, {\n as: \"legend\",\n className: \"components-datetime__time-legend\" // Unused, for backwards compatibility.\n ,\n children: __('Time')\n }), /*#__PURE__*/_jsxs(HStack, {\n className: \"components-datetime__time-wrapper\" // Unused, for backwards compatibility.\n ,\n children: [/*#__PURE__*/_jsx(TimeInput, {\n value: {\n hours: Number(hours),\n minutes: Number(minutes)\n },\n is12Hour: is12Hour,\n onChange: onTimeInputChangeCallback\n }), /*#__PURE__*/_jsx(Spacer, {}), /*#__PURE__*/_jsx(TimeZone, {})]\n })]\n }), /*#__PURE__*/_jsxs(Fieldset, {\n children: [hideLabelFromVision ? /*#__PURE__*/_jsx(VisuallyHidden, {\n as: \"legend\",\n children: __('Date')\n }) : /*#__PURE__*/_jsx(BaseControl.VisualLabel, {\n as: \"legend\",\n className: \"components-datetime__time-legend\" // Unused, for backwards compatibility.\n ,\n children: __('Date')\n }), /*#__PURE__*/_jsx(HStack, {\n className: \"components-datetime__time-wrapper\" // Unused, for backwards compatibility.\n ,\n children: fields\n })]\n })]\n });\n}\n\n/**\n * A component to input a time.\n *\n * Values are passed as an object in 24-hour format (`{ hours: number, minutes: number }`).\n *\n * ```jsx\n * import { TimePicker } from '@wordpress/components';\n * import { useState } from '@wordpress/element';\n *\n * const MyTimeInput = () => {\n * \tconst [ time, setTime ] = useState( { hours: 13, minutes: 30 } );\n *\n * \treturn (\n * \t\t<TimePicker.TimeInput\n * \t\t\tvalue={ time }\n * \t\t\tonChange={ setTime }\n * \t\t\tlabel=\"Time\"\n * \t\t/>\n * \t);\n * };\n * ```\n */\nTimePicker.TimeInput = TimeInput;\nObject.assign(TimePicker.TimeInput, {\n displayName: 'TimePicker.TimeInput'\n});\nexport default TimePicker;"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["formatDate", "_jsx", "SelectControl", "_jsxs", "BaseControl", "TimeZone"]
|
|
7
7
|
}
|
|
@@ -23,6 +23,7 @@ __export(utils_exports, {
|
|
|
23
23
|
buildPadInputStateReducer: () => buildPadInputStateReducer,
|
|
24
24
|
from12hTo24h: () => from12hTo24h,
|
|
25
25
|
from24hTo12h: () => from24hTo12h,
|
|
26
|
+
getDaysInMonth: () => getDaysInMonth,
|
|
26
27
|
inputToDate: () => inputToDate,
|
|
27
28
|
setInConfiguredTimezone: () => setInConfiguredTimezone,
|
|
28
29
|
startOfDayInConfiguredTimezone: () => startOfDayInConfiguredTimezone,
|
|
@@ -68,6 +69,11 @@ function buildPadInputStateReducer(pad) {
|
|
|
68
69
|
return nextState;
|
|
69
70
|
};
|
|
70
71
|
}
|
|
72
|
+
var getDaysInMonth = (year, month) => (
|
|
73
|
+
// Take advantage of JavaScript's built-in date wrapping logic, where day 0
|
|
74
|
+
// of the next month is interpreted as the last day of the preceding month.
|
|
75
|
+
new Date(year, month + 1, 0).getDate()
|
|
76
|
+
);
|
|
71
77
|
function setInConfiguredTimezone(date, updates) {
|
|
72
78
|
const values = {
|
|
73
79
|
year: Number((0, import_date.date)("Y", date)),
|
|
@@ -78,6 +84,8 @@ function setInConfiguredTimezone(date, updates) {
|
|
|
78
84
|
seconds: Number((0, import_date.date)("s", date)),
|
|
79
85
|
...updates
|
|
80
86
|
};
|
|
87
|
+
const daysInMonth = getDaysInMonth(values.year, values.month);
|
|
88
|
+
values.date = Math.min(values.date, daysInMonth);
|
|
81
89
|
const year = String(values.year).padStart(4, "0");
|
|
82
90
|
const month = String(values.month + 1).padStart(2, "0");
|
|
83
91
|
const day = String(values.date).padStart(2, "0");
|
|
@@ -99,6 +107,7 @@ function validateInputElementTarget(event) {
|
|
|
99
107
|
buildPadInputStateReducer,
|
|
100
108
|
from12hTo24h,
|
|
101
109
|
from24hTo12h,
|
|
110
|
+
getDaysInMonth,
|
|
102
111
|
inputToDate,
|
|
103
112
|
setInConfiguredTimezone,
|
|
104
113
|
startOfDayInConfiguredTimezone,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/date-time/utils.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport { UTCDateMini } from '@date-fns/utc';\n\n/**\n * WordPress dependencies\n */\nimport { date as formatDate, getDate } from '@wordpress/date';\n\n/**\n * Internal dependencies\n */\n\nimport { COMMIT, PRESS_DOWN, PRESS_UP } from '../input-control/reducer/actions';\n\n/**\n * Converts a date input to a UTC-normalized date for consistent date\n * manipulation. Timezoneless strings are interpreted using the timezone\n * offset from @wordpress/date settings. Date objects and timestamps\n * represent specific UTC instants.\n *\n * @param input Value to turn into a date.\n */\nexport function inputToDate(input) {\n if (typeof input === 'string') {\n // Note that JavaScript doesn't fully support ISO-8601 time strings, so\n // the behavior of passing these through to the Date constructor is\n // non-deterministic.\n //\n // See: https://tc39.es/ecma262/#sec-date-time-string-format\n const hasTimezone = /Z|[+-]\\d{2}(:?\\d{2})?$/.test(input);\n if (hasTimezone) {\n return new UTCDateMini(new Date(input));\n }\n\n // Strings without timezone indicators are interpreted using configured\n // timezone offset, then converted to UTC for internal storage.\n return new UTCDateMini(getDate(input).getTime());\n }\n\n // Date objects and number timestamps represent specific UTC moments.\n // Convert to milliseconds since epoch for consistent UTC handling.\n const time = input instanceof Date ? input.getTime() : input;\n return new UTCDateMini(time);\n}\n\n/**\n * Returns the start of day (midnight) as a browser-local Date for the calendar\n * day in the configured timezone in @wordpress/date settings. This is necessary\n * because date-fns's startOfDay operates in browser local time, which can cause\n * off-by-one-day bugs when browser and configured timezones differ.\n *\n * For example, if the UTC time is Nov 16, 01:00 UTC and configured timezone\n * is UTC-5, the date is Nov 15. This function returns a browser-local Date\n * at Nov 15, 00:00 (browser local midnight) so it matches calendar days.\n *\n * @param date A Date object normalized to UTC\n * @return A browser-local Date at midnight for the configured timezone date\n */\nexport function startOfDayInConfiguredTimezone(date) {\n // Determine the calendar day in the configured WordPress timezone and\n // return a browser-local Date at midnight for that calendar day.\n const year = Number(formatDate('Y', date));\n const month = Number(formatDate('n', date)) - 1;\n const day = Number(formatDate('j', date));\n return new Date(year, month, day, 0, 0, 0, 0);\n}\n\n/**\n * Converts a 12-hour time to a 24-hour time.\n * @param hours\n * @param isPm\n */\nexport function from12hTo24h(hours, isPm) {\n return isPm ? (hours % 12 + 12) % 24 : hours % 12;\n}\n\n/**\n * Converts a 24-hour time to a 12-hour time.\n * @param hours\n */\nexport function from24hTo12h(hours) {\n return hours % 12 || 12;\n}\n\n/**\n * Creates an InputControl reducer used to pad an input so that it is always a\n * given width. For example, the hours and minutes inputs are padded to 2 so\n * that '4' appears as '04'.\n *\n * @param pad How many digits the value should be.\n */\nexport function buildPadInputStateReducer(pad) {\n return (state, action) => {\n const nextState = {\n ...state\n };\n if (action.type === COMMIT || action.type === PRESS_UP || action.type === PRESS_DOWN) {\n if (nextState.value !== undefined) {\n nextState.value = nextState.value.toString().padStart(pad, '0');\n }\n }\n return nextState;\n };\n}\n\n/**\n * Updates specific date fields in the configured timezone and returns a new\n * UTC date.\n *\n * @param date A Date object\n * @param updates Object with fields to update\n * @return A Date object normalized to UTC with the updated values\n */\nexport function setInConfiguredTimezone(date, updates) {\n const values = {\n year: Number(formatDate('Y', date)),\n month: Number(formatDate('n', date)) - 1,\n date: Number(formatDate('j', date)),\n hours: Number(formatDate('H', date)),\n minutes: Number(formatDate('i', date)),\n seconds: Number(formatDate('s', date)),\n ...updates\n };\n const year = String(values.year).padStart(4, '0');\n const month = String(values.month + 1).padStart(2, '0');\n const day = String(values.date).padStart(2, '0');\n const hours = String(values.hours).padStart(2, '0');\n const minutes = String(values.minutes).padStart(2, '0');\n const seconds = String(values.seconds).padStart(2, '0');\n const timezoneless = `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\n\n // Parse as WordPress-configured timezone time and convert to a UTC instant.\n return new UTCDateMini(getDate(timezoneless).getTime());\n}\n\n/**\n * Validates the target of a React event to ensure it is an input element and\n * that the input is valid.\n * @param event\n */\nexport function validateInputElementTarget(event) {\n // `instanceof` checks need to get the instance definition from the\n // corresponding window object \u2014 therefore, the following logic makes\n // the component work correctly even when rendered inside an iframe.\n const HTMLInputElementInstance = event.target?.ownerDocument.defaultView?.HTMLInputElement ?? HTMLInputElement;\n if (!(event.target instanceof HTMLInputElementInstance)) {\n return false;\n }\n return event.target.validity.valid;\n}"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,iBAA4B;AAK5B,kBAA4C;AAM5C,qBAA6C;AAUtC,SAAS,YAAY,OAAO;AACjC,MAAI,OAAO,UAAU,UAAU;AAM7B,UAAM,cAAc,yBAAyB,KAAK,KAAK;AACvD,QAAI,aAAa;AACf,aAAO,IAAI,uBAAY,IAAI,KAAK,KAAK,CAAC;AAAA,IACxC;AAIA,WAAO,IAAI,2BAAY,qBAAQ,KAAK,EAAE,QAAQ,CAAC;AAAA,EACjD;AAIA,QAAM,OAAO,iBAAiB,OAAO,MAAM,QAAQ,IAAI;AACvD,SAAO,IAAI,uBAAY,IAAI;AAC7B;AAeO,SAAS,+BAA+B,MAAM;AAGnD,QAAM,OAAO,WAAO,YAAAA,MAAW,KAAK,IAAI,CAAC;AACzC,QAAM,QAAQ,WAAO,YAAAA,MAAW,KAAK,IAAI,CAAC,IAAI;AAC9C,QAAM,MAAM,WAAO,YAAAA,MAAW,KAAK,IAAI,CAAC;AACxC,SAAO,IAAI,KAAK,MAAM,OAAO,KAAK,GAAG,GAAG,GAAG,CAAC;AAC9C;AAOO,SAAS,aAAa,OAAO,MAAM;AACxC,SAAO,QAAQ,QAAQ,KAAK,MAAM,KAAK,QAAQ;AACjD;AAMO,SAAS,aAAa,OAAO;AAClC,SAAO,QAAQ,MAAM;AACvB;AASO,SAAS,0BAA0B,KAAK;AAC7C,SAAO,CAAC,OAAO,WAAW;AACxB,UAAM,YAAY;AAAA,MAChB,GAAG;AAAA,IACL;AACA,QAAI,OAAO,SAAS,yBAAU,OAAO,SAAS,2BAAY,OAAO,SAAS,2BAAY;AACpF,UAAI,UAAU,UAAU,QAAW;AACjC,kBAAU,QAAQ,UAAU,MAAM,SAAS,EAAE,SAAS,KAAK,GAAG;AAAA,MAChE;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AAUO,SAAS,wBAAwB,MAAM,SAAS;AACrD,QAAM,SAAS;AAAA,IACb,MAAM,WAAO,YAAAA,MAAW,KAAK,IAAI,CAAC;AAAA,IAClC,OAAO,WAAO,YAAAA,MAAW,KAAK,IAAI,CAAC,IAAI;AAAA,IACvC,MAAM,WAAO,YAAAA,MAAW,KAAK,IAAI,CAAC;AAAA,IAClC,OAAO,WAAO,YAAAA,MAAW,KAAK,IAAI,CAAC;AAAA,IACnC,SAAS,WAAO,YAAAA,MAAW,KAAK,IAAI,CAAC;AAAA,IACrC,SAAS,WAAO,YAAAA,MAAW,KAAK,IAAI,CAAC;AAAA,IACrC,GAAG;AAAA,EACL;
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport { UTCDateMini } from '@date-fns/utc';\n\n/**\n * WordPress dependencies\n */\nimport { date as formatDate, getDate } from '@wordpress/date';\n\n/**\n * Internal dependencies\n */\n\nimport { COMMIT, PRESS_DOWN, PRESS_UP } from '../input-control/reducer/actions';\n\n/**\n * Converts a date input to a UTC-normalized date for consistent date\n * manipulation. Timezoneless strings are interpreted using the timezone\n * offset from @wordpress/date settings. Date objects and timestamps\n * represent specific UTC instants.\n *\n * @param input Value to turn into a date.\n */\nexport function inputToDate(input) {\n if (typeof input === 'string') {\n // Note that JavaScript doesn't fully support ISO-8601 time strings, so\n // the behavior of passing these through to the Date constructor is\n // non-deterministic.\n //\n // See: https://tc39.es/ecma262/#sec-date-time-string-format\n const hasTimezone = /Z|[+-]\\d{2}(:?\\d{2})?$/.test(input);\n if (hasTimezone) {\n return new UTCDateMini(new Date(input));\n }\n\n // Strings without timezone indicators are interpreted using configured\n // timezone offset, then converted to UTC for internal storage.\n return new UTCDateMini(getDate(input).getTime());\n }\n\n // Date objects and number timestamps represent specific UTC moments.\n // Convert to milliseconds since epoch for consistent UTC handling.\n const time = input instanceof Date ? input.getTime() : input;\n return new UTCDateMini(time);\n}\n\n/**\n * Returns the start of day (midnight) as a browser-local Date for the calendar\n * day in the configured timezone in @wordpress/date settings. This is necessary\n * because date-fns's startOfDay operates in browser local time, which can cause\n * off-by-one-day bugs when browser and configured timezones differ.\n *\n * For example, if the UTC time is Nov 16, 01:00 UTC and configured timezone\n * is UTC-5, the date is Nov 15. This function returns a browser-local Date\n * at Nov 15, 00:00 (browser local midnight) so it matches calendar days.\n *\n * @param date A Date object normalized to UTC\n * @return A browser-local Date at midnight for the configured timezone date\n */\nexport function startOfDayInConfiguredTimezone(date) {\n // Determine the calendar day in the configured WordPress timezone and\n // return a browser-local Date at midnight for that calendar day.\n const year = Number(formatDate('Y', date));\n const month = Number(formatDate('n', date)) - 1;\n const day = Number(formatDate('j', date));\n return new Date(year, month, day, 0, 0, 0, 0);\n}\n\n/**\n * Converts a 12-hour time to a 24-hour time.\n * @param hours\n * @param isPm\n */\nexport function from12hTo24h(hours, isPm) {\n return isPm ? (hours % 12 + 12) % 24 : hours % 12;\n}\n\n/**\n * Converts a 24-hour time to a 12-hour time.\n * @param hours\n */\nexport function from24hTo12h(hours) {\n return hours % 12 || 12;\n}\n\n/**\n * Creates an InputControl reducer used to pad an input so that it is always a\n * given width. For example, the hours and minutes inputs are padded to 2 so\n * that '4' appears as '04'.\n *\n * @param pad How many digits the value should be.\n */\nexport function buildPadInputStateReducer(pad) {\n return (state, action) => {\n const nextState = {\n ...state\n };\n if (action.type === COMMIT || action.type === PRESS_UP || action.type === PRESS_DOWN) {\n if (nextState.value !== undefined) {\n nextState.value = nextState.value.toString().padStart(pad, '0');\n }\n }\n return nextState;\n };\n}\n\n/**\n * Returns the number of days in a month.\n *\n * @param year The year\n * @param month The month, zero-indexed (0-11)\n *\n * @return The number of days in the month\n */\nexport const getDaysInMonth = (year, month) =>\n// Take advantage of JavaScript's built-in date wrapping logic, where day 0\n// of the next month is interpreted as the last day of the preceding month.\nnew Date(year, month + 1, 0).getDate();\n\n/**\n * Updates specific date fields in the configured timezone and returns a new\n * UTC date.\n *\n * @param date A Date object\n * @param updates Object with fields to update\n * @return A Date object normalized to UTC with the updated values\n */\nexport function setInConfiguredTimezone(date, updates) {\n const values = {\n year: Number(formatDate('Y', date)),\n month: Number(formatDate('n', date)) - 1,\n date: Number(formatDate('j', date)),\n hours: Number(formatDate('H', date)),\n minutes: Number(formatDate('i', date)),\n seconds: Number(formatDate('s', date)),\n ...updates\n };\n\n // Clamp the day to the last valid day of the month, to avoid producing\n // invalid date strings (e.g. \"2026-02-31\").\n const daysInMonth = getDaysInMonth(values.year, values.month);\n values.date = Math.min(values.date, daysInMonth);\n const year = String(values.year).padStart(4, '0');\n const month = String(values.month + 1).padStart(2, '0');\n const day = String(values.date).padStart(2, '0');\n const hours = String(values.hours).padStart(2, '0');\n const minutes = String(values.minutes).padStart(2, '0');\n const seconds = String(values.seconds).padStart(2, '0');\n const timezoneless = `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\n\n // Parse as WordPress-configured timezone time and convert to a UTC instant.\n return new UTCDateMini(getDate(timezoneless).getTime());\n}\n\n/**\n * Validates the target of a React event to ensure it is an input element and\n * that the input is valid.\n * @param event\n */\nexport function validateInputElementTarget(event) {\n // `instanceof` checks need to get the instance definition from the\n // corresponding window object \u2014 therefore, the following logic makes\n // the component work correctly even when rendered inside an iframe.\n const HTMLInputElementInstance = event.target?.ownerDocument.defaultView?.HTMLInputElement ?? HTMLInputElement;\n if (!(event.target instanceof HTMLInputElementInstance)) {\n return false;\n }\n return event.target.validity.valid;\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["formatDate"]
|
|
7
7
|
}
|
package/build/dropdown/index.cjs
CHANGED
|
@@ -70,7 +70,7 @@ var UnconnectedDropdown = (props, forwardedRef) => {
|
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
72
|
const [fallbackPopoverAnchor, setFallbackPopoverAnchor] = (0, import_element.useState)(null);
|
|
73
|
-
const containerRef = (0, import_element.useRef)();
|
|
73
|
+
const containerRef = (0, import_element.useRef)(null);
|
|
74
74
|
const [isOpen, setIsOpen] = (0, import_hooks.useControlledValue)({
|
|
75
75
|
defaultValue: defaultOpen,
|
|
76
76
|
value: open,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/dropdown/index.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n/**\n * WordPress dependencies\n */\nimport { useRef, useState } from '@wordpress/element';\nimport { useMergeRefs } from '@wordpress/compose';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { contextConnect, useContextSystem } from '../context';\nimport { useControlledValue } from '../utils/hooks';\nimport Popover from '../popover';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst UnconnectedDropdown = (props, forwardedRef) => {\n const {\n renderContent,\n renderToggle,\n className,\n contentClassName,\n expandOnMobile,\n headerTitle,\n focusOnMount,\n popoverProps,\n onClose,\n onToggle,\n style,\n open,\n defaultOpen,\n // Deprecated props\n position,\n // From context system\n variant\n } = useContextSystem(props, 'Dropdown');\n if (position !== undefined) {\n deprecated('`position` prop in wp.components.Dropdown', {\n since: '6.2',\n alternative: '`popoverProps.placement` prop',\n hint: 'Note that the `position` prop will override any values passed through the `popoverProps.placement` prop.'\n });\n }\n\n // Use internal state instead of a ref to make sure that the component\n // re-renders when the popover's anchor updates.\n const [fallbackPopoverAnchor, setFallbackPopoverAnchor] = useState(null);\n const containerRef = useRef();\n const [isOpen, setIsOpen] = useControlledValue({\n defaultValue: defaultOpen,\n value: open,\n onChange: onToggle\n });\n\n /**\n * Closes the popover when focus leaves it unless the toggle was pressed or\n * focus has moved to a separate dialog. The former is to let the toggle\n * handle closing the popover and the latter is to preserve presence in\n * case a dialog has opened, allowing focus to return when it's dismissed.\n */\n function closeIfFocusOutside() {\n if (!containerRef.current) {\n return;\n }\n const {\n ownerDocument\n } = containerRef.current;\n const dialog = ownerDocument?.activeElement?.closest('[role=\"dialog\"]');\n if (!containerRef.current.contains(ownerDocument.activeElement) && (!dialog || dialog.contains(containerRef.current))) {\n close();\n }\n }\n function close() {\n onClose?.();\n setIsOpen(false);\n }\n const args = {\n isOpen: !!isOpen,\n onToggle: () => setIsOpen(!isOpen),\n onClose: close\n };\n const popoverPropsHaveAnchor = !!popoverProps?.anchor ||\n // Note: `anchorRef`, `getAnchorRect` and `anchorRect` are deprecated and\n // be removed from `Popover` from WordPress 6.3\n !!popoverProps?.anchorRef || !!popoverProps?.getAnchorRect || !!popoverProps?.anchorRect;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: className,\n ref: useMergeRefs([containerRef, forwardedRef, setFallbackPopoverAnchor])\n // Some UAs focus the closest focusable parent when the toggle is\n // clicked. Making this div focusable ensures such UAs will focus\n // it and `closeIfFocusOutside` can tell if the toggle was clicked.\n ,\n tabIndex: -1,\n style: style,\n children: [renderToggle(args), isOpen && /*#__PURE__*/_jsx(Popover, {\n position: position,\n onClose: close,\n onFocusOutside: closeIfFocusOutside,\n expandOnMobile: expandOnMobile,\n headerTitle: headerTitle,\n focusOnMount: focusOnMount\n // This value is used to ensure that the dropdowns\n // align with the editor header by default.\n ,\n offset: 13,\n anchor: !popoverPropsHaveAnchor ? fallbackPopoverAnchor : undefined,\n variant: variant,\n ...popoverProps,\n className: clsx('components-dropdown__content', popoverProps?.className, contentClassName),\n children: renderContent(args)\n })]\n });\n};\n\n/**\n * Renders a button that opens a floating content modal when clicked.\n *\n * ```jsx\n * import { Button, Dropdown } from '@wordpress/components';\n *\n * const MyDropdown = () => (\n * <Dropdown\n * className=\"my-container-class-name\"\n * contentClassName=\"my-dropdown-content-classname\"\n * popoverProps={ { placement: 'bottom-start' } }\n * renderToggle={ ( { isOpen, onToggle } ) => (\n * <Button\n * variant=\"primary\"\n * onClick={ onToggle }\n * aria-expanded={ isOpen }\n * >\n * Toggle Dropdown!\n * </Button>\n * ) }\n * renderContent={ () => <div>This is the content of the dropdown.</div> }\n * />\n * );\n * ```\n */\nexport const Dropdown = contextConnect(UnconnectedDropdown, 'Dropdown');\nexport default Dropdown;"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAiB;AAIjB,qBAAiC;AACjC,qBAA6B;AAC7B,wBAAuB;AAKvB,qBAAiD;AACjD,mBAAmC;AACnC,qBAAoB;AACpB,yBAA2C;AAC3C,IAAM,sBAAsB,CAAC,OAAO,iBAAiB;AACnD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA,EACF,QAAI,iCAAiB,OAAO,UAAU;AACtC,MAAI,aAAa,QAAW;AAC1B,0BAAAA,SAAW,6CAA6C;AAAA,MACtD,OAAO;AAAA,MACP,aAAa;AAAA,MACb,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAIA,QAAM,CAAC,uBAAuB,wBAAwB,QAAI,yBAAS,IAAI;AACvE,QAAM,mBAAe,uBAAO;
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n/**\n * WordPress dependencies\n */\nimport { useRef, useState } from '@wordpress/element';\nimport { useMergeRefs } from '@wordpress/compose';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { contextConnect, useContextSystem } from '../context';\nimport { useControlledValue } from '../utils/hooks';\nimport Popover from '../popover';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst UnconnectedDropdown = (props, forwardedRef) => {\n const {\n renderContent,\n renderToggle,\n className,\n contentClassName,\n expandOnMobile,\n headerTitle,\n focusOnMount,\n popoverProps,\n onClose,\n onToggle,\n style,\n open,\n defaultOpen,\n // Deprecated props\n position,\n // From context system\n variant\n } = useContextSystem(props, 'Dropdown');\n if (position !== undefined) {\n deprecated('`position` prop in wp.components.Dropdown', {\n since: '6.2',\n alternative: '`popoverProps.placement` prop',\n hint: 'Note that the `position` prop will override any values passed through the `popoverProps.placement` prop.'\n });\n }\n\n // Use internal state instead of a ref to make sure that the component\n // re-renders when the popover's anchor updates.\n const [fallbackPopoverAnchor, setFallbackPopoverAnchor] = useState(null);\n const containerRef = useRef(null);\n const [isOpen, setIsOpen] = useControlledValue({\n defaultValue: defaultOpen,\n value: open,\n onChange: onToggle\n });\n\n /**\n * Closes the popover when focus leaves it unless the toggle was pressed or\n * focus has moved to a separate dialog. The former is to let the toggle\n * handle closing the popover and the latter is to preserve presence in\n * case a dialog has opened, allowing focus to return when it's dismissed.\n */\n function closeIfFocusOutside() {\n if (!containerRef.current) {\n return;\n }\n const {\n ownerDocument\n } = containerRef.current;\n const dialog = ownerDocument?.activeElement?.closest('[role=\"dialog\"]');\n if (!containerRef.current.contains(ownerDocument.activeElement) && (!dialog || dialog.contains(containerRef.current))) {\n close();\n }\n }\n function close() {\n onClose?.();\n setIsOpen(false);\n }\n const args = {\n isOpen: !!isOpen,\n onToggle: () => setIsOpen(!isOpen),\n onClose: close\n };\n const popoverPropsHaveAnchor = !!popoverProps?.anchor ||\n // Note: `anchorRef`, `getAnchorRect` and `anchorRect` are deprecated and\n // be removed from `Popover` from WordPress 6.3\n !!popoverProps?.anchorRef || !!popoverProps?.getAnchorRect || !!popoverProps?.anchorRect;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: className,\n ref: useMergeRefs([containerRef, forwardedRef, setFallbackPopoverAnchor])\n // Some UAs focus the closest focusable parent when the toggle is\n // clicked. Making this div focusable ensures such UAs will focus\n // it and `closeIfFocusOutside` can tell if the toggle was clicked.\n ,\n tabIndex: -1,\n style: style,\n children: [renderToggle(args), isOpen && /*#__PURE__*/_jsx(Popover, {\n position: position,\n onClose: close,\n onFocusOutside: closeIfFocusOutside,\n expandOnMobile: expandOnMobile,\n headerTitle: headerTitle,\n focusOnMount: focusOnMount\n // This value is used to ensure that the dropdowns\n // align with the editor header by default.\n ,\n offset: 13,\n anchor: !popoverPropsHaveAnchor ? fallbackPopoverAnchor : undefined,\n variant: variant,\n ...popoverProps,\n className: clsx('components-dropdown__content', popoverProps?.className, contentClassName),\n children: renderContent(args)\n })]\n });\n};\n\n/**\n * Renders a button that opens a floating content modal when clicked.\n *\n * ```jsx\n * import { Button, Dropdown } from '@wordpress/components';\n *\n * const MyDropdown = () => (\n * <Dropdown\n * className=\"my-container-class-name\"\n * contentClassName=\"my-dropdown-content-classname\"\n * popoverProps={ { placement: 'bottom-start' } }\n * renderToggle={ ( { isOpen, onToggle } ) => (\n * <Button\n * variant=\"primary\"\n * onClick={ onToggle }\n * aria-expanded={ isOpen }\n * >\n * Toggle Dropdown!\n * </Button>\n * ) }\n * renderContent={ () => <div>This is the content of the dropdown.</div> }\n * />\n * );\n * ```\n */\nexport const Dropdown = contextConnect(UnconnectedDropdown, 'Dropdown');\nexport default Dropdown;"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAiB;AAIjB,qBAAiC;AACjC,qBAA6B;AAC7B,wBAAuB;AAKvB,qBAAiD;AACjD,mBAAmC;AACnC,qBAAoB;AACpB,yBAA2C;AAC3C,IAAM,sBAAsB,CAAC,OAAO,iBAAiB;AACnD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA,EACF,QAAI,iCAAiB,OAAO,UAAU;AACtC,MAAI,aAAa,QAAW;AAC1B,0BAAAA,SAAW,6CAA6C;AAAA,MACtD,OAAO;AAAA,MACP,aAAa;AAAA,MACb,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAIA,QAAM,CAAC,uBAAuB,wBAAwB,QAAI,yBAAS,IAAI;AACvE,QAAM,mBAAe,uBAAO,IAAI;AAChC,QAAM,CAAC,QAAQ,SAAS,QAAI,iCAAmB;AAAA,IAC7C,cAAc;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,CAAC;AAQD,WAAS,sBAAsB;AAC7B,QAAI,CAAC,aAAa,SAAS;AACzB;AAAA,IACF;AACA,UAAM;AAAA,MACJ;AAAA,IACF,IAAI,aAAa;AACjB,UAAM,SAAS,eAAe,eAAe,QAAQ,iBAAiB;AACtE,QAAI,CAAC,aAAa,QAAQ,SAAS,cAAc,aAAa,MAAM,CAAC,UAAU,OAAO,SAAS,aAAa,OAAO,IAAI;AACrH,YAAM;AAAA,IACR;AAAA,EACF;AACA,WAAS,QAAQ;AACf,cAAU;AACV,cAAU,KAAK;AAAA,EACjB;AACA,QAAM,OAAO;AAAA,IACX,QAAQ,CAAC,CAAC;AAAA,IACV,UAAU,MAAM,UAAU,CAAC,MAAM;AAAA,IACjC,SAAS;AAAA,EACX;AACA,QAAM,yBAAyB,CAAC,CAAC,cAAc;AAAA;AAAA,EAG/C,CAAC,CAAC,cAAc,aAAa,CAAC,CAAC,cAAc,iBAAiB,CAAC,CAAC,cAAc;AAC9E,SAAoB,uCAAAC,MAAM,OAAO;AAAA,IAC/B;AAAA,IACA,SAAK,6BAAa,CAAC,cAAc,cAAc,wBAAwB,CAAC;AAAA,IAKxE,UAAU;AAAA,IACV;AAAA,IACA,UAAU,CAAC,aAAa,IAAI,GAAG,UAAuB,uCAAAC,KAAK,eAAAC,SAAS;AAAA,MAClE;AAAA,MACA,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MAIA,QAAQ;AAAA,MACR,QAAQ,CAAC,yBAAyB,wBAAwB;AAAA,MAC1D;AAAA,MACA,GAAG;AAAA,MACH,eAAW,YAAAC,SAAK,gCAAgC,cAAc,WAAW,gBAAgB;AAAA,MACzF,UAAU,cAAc,IAAI;AAAA,IAC9B,CAAC,CAAC;AAAA,EACJ,CAAC;AACH;AA2BO,IAAM,eAAW,+BAAe,qBAAqB,UAAU;AACtE,IAAO,mBAAQ;",
|
|
6
6
|
"names": ["deprecated", "_jsxs", "_jsx", "Popover", "clsx"]
|
|
7
7
|
}
|
|
@@ -71,7 +71,11 @@ function UnforwardedExternalLink(props, ref) {
|
|
|
71
71
|
className: "components-external-link__contents",
|
|
72
72
|
children
|
|
73
73
|
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
74
|
-
className:
|
|
74
|
+
className: (0, import_clsx.default)(
|
|
75
|
+
"components-external-link__icon",
|
|
76
|
+
// This class prevents the arrow from being replaced by a Twemoji image.
|
|
77
|
+
"wp-exclude-emoji"
|
|
78
|
+
),
|
|
75
79
|
"aria-label": (
|
|
76
80
|
/* translators: accessibility text */
|
|
77
81
|
(0, import_i18n.__)("(opens in a new tab)")
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/external-link/index.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction UnforwardedExternalLink(props, ref) {\n const {\n href,\n children,\n className,\n rel = '',\n ...additionalProps\n } = props;\n const optimizedRel = [...new Set([...rel.split(' '), 'external', 'noreferrer', 'noopener'].filter(Boolean))].join(' ');\n const classes = clsx('components-external-link', className);\n /* Anchor links are perceived as external links.\n This constant helps check for on page anchor links,\n to prevent them from being opened in the editor. */\n const isInternalAnchor = !!href?.startsWith('#');\n const onClickHandler = event => {\n if (isInternalAnchor) {\n event.preventDefault();\n }\n if (props.onClick) {\n props.onClick(event);\n }\n };\n return /*#__PURE__*/ /* eslint-disable react/jsx-no-target-blank */_jsxs(\"a\", {\n ...additionalProps,\n className: classes,\n href: href,\n onClick: onClickHandler,\n target: \"_blank\",\n rel: optimizedRel,\n ref: ref,\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"components-external-link__contents\",\n children: children\n }), /*#__PURE__*/_jsx(\"span\", {\n className:
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAiB;AAIjB,kBAA0B;AAC1B,qBAA2B;AAK3B,yBAA2C;AAC3C,SAAS,wBAAwB,OAAO,KAAK;AAC3C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,eAAe,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,MAAM,GAAG,GAAG,YAAY,cAAc,UAAU,EAAE,OAAO,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG;AACrH,QAAM,cAAU,YAAAA,SAAK,4BAA4B,SAAS;AAI1D,QAAM,mBAAmB,CAAC,CAAC,MAAM,WAAW,GAAG;AAC/C,QAAM,iBAAiB,WAAS;AAC9B,QAAI,kBAAkB;AACpB,YAAM,eAAe;AAAA,IACvB;AACA,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,KAAK;AAAA,IACrB;AAAA,EACF;AACA;AAAA;AAAA,IAAmE,uCAAAC,MAAM,KAAK;AAAA,MAC5E,GAAG;AAAA,MACH,WAAW;AAAA,MACX;AAAA,MACA,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,KAAK;AAAA,MACL;AAAA,MACA,UAAU,CAAc,uCAAAC,KAAK,QAAQ;AAAA,QACnC,WAAW;AAAA,QACX;AAAA,MACF,CAAC,GAAgB,uCAAAA,KAAK,QAAQ;AAAA,QAC5B,
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction UnforwardedExternalLink(props, ref) {\n const {\n href,\n children,\n className,\n rel = '',\n ...additionalProps\n } = props;\n const optimizedRel = [...new Set([...rel.split(' '), 'external', 'noreferrer', 'noopener'].filter(Boolean))].join(' ');\n const classes = clsx('components-external-link', className);\n /* Anchor links are perceived as external links.\n This constant helps check for on page anchor links,\n to prevent them from being opened in the editor. */\n const isInternalAnchor = !!href?.startsWith('#');\n const onClickHandler = event => {\n if (isInternalAnchor) {\n event.preventDefault();\n }\n if (props.onClick) {\n props.onClick(event);\n }\n };\n return /*#__PURE__*/ /* eslint-disable react/jsx-no-target-blank */_jsxs(\"a\", {\n ...additionalProps,\n className: classes,\n href: href,\n onClick: onClickHandler,\n target: \"_blank\",\n rel: optimizedRel,\n ref: ref,\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"components-external-link__contents\",\n children: children\n }), /*#__PURE__*/_jsx(\"span\", {\n className: clsx('components-external-link__icon',\n // This class prevents the arrow from being replaced by a Twemoji image.\n 'wp-exclude-emoji'),\n \"aria-label\": /* translators: accessibility text */\n __('(opens in a new tab)'),\n children: isRTL() ? '\\u2196' : '\\u2197'\n })]\n })\n /* eslint-enable react/jsx-no-target-blank */;\n}\n\n/**\n * Link to an external resource.\n *\n * ```jsx\n * import { ExternalLink } from '@wordpress/components';\n *\n * const MyExternalLink = () => (\n * <ExternalLink href=\"https://wordpress.org\">WordPress.org</ExternalLink>\n * );\n * ```\n */\nexport const ExternalLink = forwardRef(UnforwardedExternalLink);\nExternalLink.displayName = 'ExternalLink';\nexport default ExternalLink;"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAiB;AAIjB,kBAA0B;AAC1B,qBAA2B;AAK3B,yBAA2C;AAC3C,SAAS,wBAAwB,OAAO,KAAK;AAC3C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,eAAe,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,MAAM,GAAG,GAAG,YAAY,cAAc,UAAU,EAAE,OAAO,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG;AACrH,QAAM,cAAU,YAAAA,SAAK,4BAA4B,SAAS;AAI1D,QAAM,mBAAmB,CAAC,CAAC,MAAM,WAAW,GAAG;AAC/C,QAAM,iBAAiB,WAAS;AAC9B,QAAI,kBAAkB;AACpB,YAAM,eAAe;AAAA,IACvB;AACA,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,KAAK;AAAA,IACrB;AAAA,EACF;AACA;AAAA;AAAA,IAAmE,uCAAAC,MAAM,KAAK;AAAA,MAC5E,GAAG;AAAA,MACH,WAAW;AAAA,MACX;AAAA,MACA,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,KAAK;AAAA,MACL;AAAA,MACA,UAAU,CAAc,uCAAAC,KAAK,QAAQ;AAAA,QACnC,WAAW;AAAA,QACX;AAAA,MACF,CAAC,GAAgB,uCAAAA,KAAK,QAAQ;AAAA,QAC5B,eAAW,YAAAF;AAAA,UAAK;AAAA;AAAA,UAEhB;AAAA,QAAkB;AAAA,QAClB;AAAA;AAAA,cACA,gBAAG,sBAAsB;AAAA;AAAA,QACzB,cAAU,mBAAM,IAAI,WAAW;AAAA,MACjC,CAAC,CAAC;AAAA,IACJ,CAAC;AAAA;AAEH;AAaO,IAAM,mBAAe,2BAAW,uBAAuB;AAC9D,aAAa,cAAc;AAC3B,IAAO,wBAAQ;",
|
|
6
6
|
"names": ["clsx", "_jsxs", "_jsx"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/higher-order/with-spoken-messages/index.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, useDebounce } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\n\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAAwD;AACxD,kBAAsB;
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, useDebounce } from '@wordpress/compose';\nimport { speak } from '@wordpress/a11y';\n\n/**\n * A Higher Order Component used to provide speak and debounced speak functions.\n *\n * @see https://developer.wordpress.org/block-editor/packages/packages-a11y/#speak\n *\n * @param {React.ComponentType} Component The component to be wrapped.\n *\n * @return {React.ComponentType} The wrapped component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createHigherOrderComponent(Component => function WithSpokenMessages(props) {\n return /*#__PURE__*/_jsx(Component, {\n ...props,\n speak: speak,\n debouncedSpeak: useDebounce(speak, 500)\n });\n}, 'withSpokenMessages');"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAAwD;AACxD,kBAAsB;AAWtB,yBAA4B;AAC5B,IAAO,mCAAQ,2CAA2B,eAAa,SAAS,mBAAmB,OAAO;AACxF,SAAoB,uCAAAA,KAAK,WAAW;AAAA,IAClC,GAAG;AAAA,IACH,OAAO;AAAA,IACP,oBAAgB,4BAAY,mBAAO,GAAG;AAAA,EACxC,CAAC;AACH,GAAG,oBAAoB;",
|
|
6
6
|
"names": ["_jsx"]
|
|
7
7
|
}
|
package/build/modal/index.cjs
CHANGED
|
@@ -77,7 +77,7 @@ function UnforwardedModal(props, forwardedRef) {
|
|
|
77
77
|
headerActions = null,
|
|
78
78
|
__experimentalHideHeader = false
|
|
79
79
|
} = props;
|
|
80
|
-
const ref = (0, import_element.useRef)();
|
|
80
|
+
const ref = (0, import_element.useRef)(null);
|
|
81
81
|
const instanceId = (0, import_compose.useInstanceId)(Modal);
|
|
82
82
|
const headingId = title ? `components-modal-header-${instanceId}` : aria.labelledby;
|
|
83
83
|
const focusOnMountRef = (0, import_compose.useFocusOnMount)(focusOnMount === "firstContentElement" ? "firstElement" : focusOnMount);
|
|
@@ -108,7 +108,7 @@ function UnforwardedModal(props, forwardedRef) {
|
|
|
108
108
|
ariaHelper.modalize(ref.current);
|
|
109
109
|
return () => ariaHelper.unmodalize();
|
|
110
110
|
}, []);
|
|
111
|
-
const onRequestCloseRef = (0, import_element.useRef)();
|
|
111
|
+
const onRequestCloseRef = (0, import_element.useRef)(void 0);
|
|
112
112
|
(0, import_element.useEffect)(() => {
|
|
113
113
|
onRequestCloseRef.current = onRequestClose;
|
|
114
114
|
}, [onRequestClose]);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/modal/index.tsx"],
|
|
4
|
-
"sourcesContent": ["import clsx from 'clsx';\nimport { createPortal, useCallback, useEffect, useRef, useState, forwardRef, useLayoutEffect, useContext } from '@wordpress/element';\nimport { useInstanceId, useFocusReturn, useFocusOnMount, useConstrainedTabbing, useMergeRefs } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\nimport { close } from '@wordpress/icons';\nimport { getScrollContainer } from '@wordpress/dom';\nimport * as ariaHelper from './aria-helper';\nimport Button from '../button';\nimport StyleProvider from '../style-provider';\nimport { withIgnoreIMEEvents } from '../utils/with-ignore-ime-events';\nimport { Spacer } from '../spacer';\nimport { useModalExitAnimation } from './use-modal-exit-animation';\nimport { ModalContext } from './context';\n\n// Used to track body class names applied while modals are open.\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nconst bodyOpenClasses = new Map();\nfunction UnforwardedModal(props, forwardedRef) {\n const {\n bodyOpenClassName = 'modal-open',\n role = 'dialog',\n title = null,\n focusOnMount = true,\n shouldCloseOnEsc = true,\n shouldCloseOnClickOutside = true,\n isDismissible = true,\n /* Accessibility. */\n aria = {\n labelledby: undefined,\n describedby: undefined\n },\n onRequestClose,\n icon,\n closeButtonLabel,\n children,\n style,\n overlayClassName: overlayClassnameProp,\n className,\n contentLabel,\n onKeyDown,\n isFullScreen = false,\n size,\n headerActions = null,\n __experimentalHideHeader = false\n } = props;\n const ref = useRef();\n const instanceId = useInstanceId(Modal);\n const headingId = title ? `components-modal-header-${instanceId}` : aria.labelledby;\n\n // The focus hook does not support 'firstContentElement' but this is a valid\n // value for the Modal's focusOnMount prop. The following code ensures the focus\n // hook will focus the first focusable node within the element to which it is applied.\n // When `firstContentElement` is passed as the value of the focusOnMount prop,\n // the focus hook is applied to the Modal's content element.\n // Otherwise, the focus hook is applied to the Modal's ref. This ensures that the\n // focus hook will focus the first element in the Modal's **content** when\n // `firstContentElement` is passed.\n const focusOnMountRef = useFocusOnMount(focusOnMount === 'firstContentElement' ? 'firstElement' : focusOnMount);\n const constrainedTabbingRef = useConstrainedTabbing();\n const focusReturnRef = useFocusReturn();\n const contentRef = useRef(null);\n const childrenContainerRef = useRef(null);\n const [hasScrolledContent, setHasScrolledContent] = useState(false);\n const [hasScrollableContent, setHasScrollableContent] = useState(false);\n let sizeClass;\n if (isFullScreen || size === 'fill') {\n sizeClass = 'is-full-screen';\n } else if (size) {\n sizeClass = `has-size-${size}`;\n }\n\n // Determines whether the Modal content is scrollable and updates the state.\n const isContentScrollable = useCallback(() => {\n if (!contentRef.current) {\n return;\n }\n const closestScrollContainer = getScrollContainer(contentRef.current);\n if (contentRef.current === closestScrollContainer) {\n setHasScrollableContent(true);\n } else {\n setHasScrollableContent(false);\n }\n }, [contentRef]);\n\n // Accessibly isolates/unisolates the modal.\n useEffect(() => {\n ariaHelper.modalize(ref.current);\n return () => ariaHelper.unmodalize();\n }, []);\n\n // Keeps a fresh ref for the subsequent effect.\n const onRequestCloseRef = useRef();\n useEffect(() => {\n onRequestCloseRef.current = onRequestClose;\n }, [onRequestClose]);\n\n // The list of `onRequestClose` callbacks of open (non-nested) Modals. Only\n // one should remain open at a time and the list enables closing prior ones.\n const dismissers = useContext(ModalContext);\n // Used for the tracking and dismissing any nested modals.\n const [nestedDismissers] = useState(() => new Set());\n\n // Updates the stack tracking open modals at this level and calls\n // onRequestClose for any prior and/or nested modals as applicable.\n useEffect(() => {\n // add this modal instance to the dismissers set\n dismissers.add(onRequestCloseRef);\n // request that all the other modals close themselves\n for (const dismisser of dismissers) {\n if (dismisser !== onRequestCloseRef) {\n dismisser.current?.();\n }\n }\n return () => {\n // request that all the nested modals close themselves\n for (const dismisser of nestedDismissers) {\n dismisser.current?.();\n }\n // remove this modal instance from the dismissers set\n dismissers.delete(onRequestCloseRef);\n };\n }, [dismissers, nestedDismissers]);\n\n // Adds/removes the value of bodyOpenClassName to body element.\n useEffect(() => {\n const theClass = bodyOpenClassName;\n const oneMore = 1 + (bodyOpenClasses.get(theClass) ?? 0);\n bodyOpenClasses.set(theClass, oneMore);\n document.body.classList.add(bodyOpenClassName);\n return () => {\n const oneLess = bodyOpenClasses.get(theClass) - 1;\n if (oneLess === 0) {\n document.body.classList.remove(theClass);\n bodyOpenClasses.delete(theClass);\n } else {\n bodyOpenClasses.set(theClass, oneLess);\n }\n };\n }, [bodyOpenClassName]);\n const {\n closeModal,\n frameRef,\n frameStyle,\n overlayClassname\n } = useModalExitAnimation();\n\n // Calls the isContentScrollable callback when the Modal children container resizes.\n useLayoutEffect(() => {\n if (!window.ResizeObserver || !childrenContainerRef.current) {\n return;\n }\n const resizeObserver = new ResizeObserver(isContentScrollable);\n resizeObserver.observe(childrenContainerRef.current);\n isContentScrollable();\n return () => {\n resizeObserver.disconnect();\n };\n }, [isContentScrollable, childrenContainerRef]);\n function handleEscapeKeyDown(event) {\n if (shouldCloseOnEsc && (event.code === 'Escape' || event.key === 'Escape') && !event.defaultPrevented) {\n event.preventDefault();\n closeModal().then(() => onRequestClose(event));\n }\n }\n const onContentContainerScroll = useCallback(e => {\n const scrollY = e?.currentTarget?.scrollTop ?? -1;\n if (!hasScrolledContent && scrollY > 0) {\n setHasScrolledContent(true);\n } else if (hasScrolledContent && scrollY <= 0) {\n setHasScrolledContent(false);\n }\n }, [hasScrolledContent]);\n let pressTarget = null;\n const overlayPressHandlers = {\n onPointerDown: event => {\n if (event.target === event.currentTarget) {\n pressTarget = event.target;\n // Avoids focus changing so that focus return works as expected.\n event.preventDefault();\n }\n },\n // Closes the modal with two exceptions. 1. Opening the context menu on\n // the overlay. 2. Pressing on the overlay then dragging the pointer\n // over the modal and releasing. Due to the modal being a child of the\n // overlay, such a gesture is a `click` on the overlay and cannot be\n // excepted by a `click` handler. Thus the tactic of handling\n // `pointerup` and comparing its target to that of the `pointerdown`.\n onPointerUp: ({\n target,\n button\n }) => {\n const isSameTarget = target === pressTarget;\n pressTarget = null;\n if (button === 0 && isSameTarget) {\n closeModal().then(() => onRequestClose());\n }\n }\n };\n const modal =\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n _jsx(\"div\", {\n ref: useMergeRefs([ref, forwardedRef]),\n className: clsx('components-modal__screen-overlay', overlayClassname, overlayClassnameProp),\n onKeyDown: withIgnoreIMEEvents(handleEscapeKeyDown),\n ...(shouldCloseOnClickOutside ? overlayPressHandlers : {}),\n children: /*#__PURE__*/_jsx(StyleProvider, {\n document: document,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: clsx('components-modal__frame', sizeClass, className),\n style: {\n ...frameStyle,\n ...style\n },\n ref: useMergeRefs([frameRef, constrainedTabbingRef, focusReturnRef, focusOnMount !== 'firstContentElement' ? focusOnMountRef : null]),\n role: role,\n \"aria-label\": contentLabel,\n \"aria-labelledby\": contentLabel ? undefined : headingId,\n \"aria-describedby\": aria.describedby,\n tabIndex: -1,\n onKeyDown: onKeyDown,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: clsx('components-modal__content', {\n 'hide-header': __experimentalHideHeader,\n 'is-scrollable': hasScrollableContent,\n 'has-scrolled-content': hasScrolledContent\n }),\n role: \"document\",\n onScroll: onContentContainerScroll,\n ref: contentRef,\n \"aria-label\": hasScrollableContent ? __('Scrollable section') : undefined,\n tabIndex: hasScrollableContent ? 0 : undefined,\n children: [!__experimentalHideHeader && /*#__PURE__*/_jsxs(\"div\", {\n className: \"components-modal__header\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"components-modal__header-heading-container\",\n children: [icon && /*#__PURE__*/_jsx(\"span\", {\n className: \"components-modal__icon-container\",\n \"aria-hidden\": true,\n children: icon\n }), title && /*#__PURE__*/_jsx(\"h1\", {\n id: headingId,\n className: \"components-modal__header-heading\",\n children: title\n })]\n }), headerActions, isDismissible && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Spacer, {\n marginBottom: 0,\n marginLeft: 2\n }), /*#__PURE__*/_jsx(Button, {\n size: \"compact\",\n onClick: event => closeModal().then(() => onRequestClose(event)),\n icon: close,\n label: closeButtonLabel || __('Close')\n })]\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n ref: useMergeRefs([childrenContainerRef, focusOnMount === 'firstContentElement' ? focusOnMountRef : null]),\n className: \"components-modal__children-container\",\n children: children\n })]\n })\n })\n })\n });\n return createPortal(/*#__PURE__*/_jsx(ModalContext.Provider, {\n value: nestedDismissers,\n children: modal\n }), document.body);\n}\n\n/**\n * Modals give users information and choices related to a task they\u2019re trying to\n * accomplish. They can contain critical information, require decisions, or\n * involve multiple tasks.\n *\n * ```jsx\n * import { Button, Modal } from '@wordpress/components';\n * import { useState } from '@wordpress/element';\n *\n * const MyModal = () => {\n * const [ isOpen, setOpen ] = useState( false );\n * const openModal = () => setOpen( true );\n * const closeModal = () => setOpen( false );\n *\n * return (\n * <>\n * <Button variant=\"secondary\" onClick={ openModal }>\n * Open Modal\n * </Button>\n * { isOpen && (\n * <Modal title=\"This is my modal\" onRequestClose={ closeModal }>\n * <Button variant=\"secondary\" onClick={ closeModal }>\n * My custom close button\n * </Button>\n * </Modal>\n * ) }\n * </>\n * );\n * };\n * ```\n */\nexport const Modal = forwardRef(UnforwardedModal);\nModal.displayName = 'Modal';\nexport default Modal;"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,qBAAgH;AAChH,qBAAoG;AACpG,kBAAmB;AACnB,mBAAsB;AACtB,iBAAmC;AACnC,iBAA4B;AAC5B,oBAAmB;AACnB,4BAA0B;AAC1B,oCAAoC;AACpC,oBAAuB;AACvB,sCAAsC;AACtC,qBAA6B;AAG7B,yBAAkE;AAClE,IAAM,kBAAkB,oBAAI,IAAI;AAChC,SAAS,iBAAiB,OAAO,cAAc;AAC7C,QAAM;AAAA,IACJ,oBAAoB;AAAA,IACpB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,4BAA4B;AAAA,IAC5B,gBAAgB;AAAA;AAAA,IAEhB,OAAO;AAAA,MACL,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA,gBAAgB;AAAA,IAChB,2BAA2B;AAAA,EAC7B,IAAI;AACJ,QAAM,UAAM,uBAAO;
|
|
4
|
+
"sourcesContent": ["import clsx from 'clsx';\nimport { createPortal, useCallback, useEffect, useRef, useState, forwardRef, useLayoutEffect, useContext } from '@wordpress/element';\nimport { useInstanceId, useFocusReturn, useFocusOnMount, useConstrainedTabbing, useMergeRefs } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\nimport { close } from '@wordpress/icons';\nimport { getScrollContainer } from '@wordpress/dom';\nimport * as ariaHelper from './aria-helper';\nimport Button from '../button';\nimport StyleProvider from '../style-provider';\nimport { withIgnoreIMEEvents } from '../utils/with-ignore-ime-events';\nimport { Spacer } from '../spacer';\nimport { useModalExitAnimation } from './use-modal-exit-animation';\nimport { ModalContext } from './context';\n\n// Used to track body class names applied while modals are open.\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nconst bodyOpenClasses = new Map();\nfunction UnforwardedModal(props, forwardedRef) {\n const {\n bodyOpenClassName = 'modal-open',\n role = 'dialog',\n title = null,\n focusOnMount = true,\n shouldCloseOnEsc = true,\n shouldCloseOnClickOutside = true,\n isDismissible = true,\n /* Accessibility. */\n aria = {\n labelledby: undefined,\n describedby: undefined\n },\n onRequestClose,\n icon,\n closeButtonLabel,\n children,\n style,\n overlayClassName: overlayClassnameProp,\n className,\n contentLabel,\n onKeyDown,\n isFullScreen = false,\n size,\n headerActions = null,\n __experimentalHideHeader = false\n } = props;\n const ref = useRef(null);\n const instanceId = useInstanceId(Modal);\n const headingId = title ? `components-modal-header-${instanceId}` : aria.labelledby;\n\n // The focus hook does not support 'firstContentElement' but this is a valid\n // value for the Modal's focusOnMount prop. The following code ensures the focus\n // hook will focus the first focusable node within the element to which it is applied.\n // When `firstContentElement` is passed as the value of the focusOnMount prop,\n // the focus hook is applied to the Modal's content element.\n // Otherwise, the focus hook is applied to the Modal's ref. This ensures that the\n // focus hook will focus the first element in the Modal's **content** when\n // `firstContentElement` is passed.\n const focusOnMountRef = useFocusOnMount(focusOnMount === 'firstContentElement' ? 'firstElement' : focusOnMount);\n const constrainedTabbingRef = useConstrainedTabbing();\n const focusReturnRef = useFocusReturn();\n const contentRef = useRef(null);\n const childrenContainerRef = useRef(null);\n const [hasScrolledContent, setHasScrolledContent] = useState(false);\n const [hasScrollableContent, setHasScrollableContent] = useState(false);\n let sizeClass;\n if (isFullScreen || size === 'fill') {\n sizeClass = 'is-full-screen';\n } else if (size) {\n sizeClass = `has-size-${size}`;\n }\n\n // Determines whether the Modal content is scrollable and updates the state.\n const isContentScrollable = useCallback(() => {\n if (!contentRef.current) {\n return;\n }\n const closestScrollContainer = getScrollContainer(contentRef.current);\n if (contentRef.current === closestScrollContainer) {\n setHasScrollableContent(true);\n } else {\n setHasScrollableContent(false);\n }\n }, [contentRef]);\n\n // Accessibly isolates/unisolates the modal.\n useEffect(() => {\n ariaHelper.modalize(ref.current);\n return () => ariaHelper.unmodalize();\n }, []);\n\n // Keeps a fresh ref for the subsequent effect.\n const onRequestCloseRef = useRef(undefined);\n useEffect(() => {\n onRequestCloseRef.current = onRequestClose;\n }, [onRequestClose]);\n\n // The list of `onRequestClose` callbacks of open (non-nested) Modals. Only\n // one should remain open at a time and the list enables closing prior ones.\n const dismissers = useContext(ModalContext);\n // Used for the tracking and dismissing any nested modals.\n const [nestedDismissers] = useState(() => new Set());\n\n // Updates the stack tracking open modals at this level and calls\n // onRequestClose for any prior and/or nested modals as applicable.\n useEffect(() => {\n // add this modal instance to the dismissers set\n dismissers.add(onRequestCloseRef);\n // request that all the other modals close themselves\n for (const dismisser of dismissers) {\n if (dismisser !== onRequestCloseRef) {\n dismisser.current?.();\n }\n }\n return () => {\n // request that all the nested modals close themselves\n for (const dismisser of nestedDismissers) {\n dismisser.current?.();\n }\n // remove this modal instance from the dismissers set\n dismissers.delete(onRequestCloseRef);\n };\n }, [dismissers, nestedDismissers]);\n\n // Adds/removes the value of bodyOpenClassName to body element.\n useEffect(() => {\n const theClass = bodyOpenClassName;\n const oneMore = 1 + (bodyOpenClasses.get(theClass) ?? 0);\n bodyOpenClasses.set(theClass, oneMore);\n document.body.classList.add(bodyOpenClassName);\n return () => {\n const oneLess = bodyOpenClasses.get(theClass) - 1;\n if (oneLess === 0) {\n document.body.classList.remove(theClass);\n bodyOpenClasses.delete(theClass);\n } else {\n bodyOpenClasses.set(theClass, oneLess);\n }\n };\n }, [bodyOpenClassName]);\n const {\n closeModal,\n frameRef,\n frameStyle,\n overlayClassname\n } = useModalExitAnimation();\n\n // Calls the isContentScrollable callback when the Modal children container resizes.\n useLayoutEffect(() => {\n if (!window.ResizeObserver || !childrenContainerRef.current) {\n return;\n }\n const resizeObserver = new ResizeObserver(isContentScrollable);\n resizeObserver.observe(childrenContainerRef.current);\n isContentScrollable();\n return () => {\n resizeObserver.disconnect();\n };\n }, [isContentScrollable, childrenContainerRef]);\n function handleEscapeKeyDown(event) {\n if (shouldCloseOnEsc && (event.code === 'Escape' || event.key === 'Escape') && !event.defaultPrevented) {\n event.preventDefault();\n closeModal().then(() => onRequestClose(event));\n }\n }\n const onContentContainerScroll = useCallback(e => {\n const scrollY = e?.currentTarget?.scrollTop ?? -1;\n if (!hasScrolledContent && scrollY > 0) {\n setHasScrolledContent(true);\n } else if (hasScrolledContent && scrollY <= 0) {\n setHasScrolledContent(false);\n }\n }, [hasScrolledContent]);\n let pressTarget = null;\n const overlayPressHandlers = {\n onPointerDown: event => {\n if (event.target === event.currentTarget) {\n pressTarget = event.target;\n // Avoids focus changing so that focus return works as expected.\n event.preventDefault();\n }\n },\n // Closes the modal with two exceptions. 1. Opening the context menu on\n // the overlay. 2. Pressing on the overlay then dragging the pointer\n // over the modal and releasing. Due to the modal being a child of the\n // overlay, such a gesture is a `click` on the overlay and cannot be\n // excepted by a `click` handler. Thus the tactic of handling\n // `pointerup` and comparing its target to that of the `pointerdown`.\n onPointerUp: ({\n target,\n button\n }) => {\n const isSameTarget = target === pressTarget;\n pressTarget = null;\n if (button === 0 && isSameTarget) {\n closeModal().then(() => onRequestClose());\n }\n }\n };\n const modal =\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n _jsx(\"div\", {\n ref: useMergeRefs([ref, forwardedRef]),\n className: clsx('components-modal__screen-overlay', overlayClassname, overlayClassnameProp),\n onKeyDown: withIgnoreIMEEvents(handleEscapeKeyDown),\n ...(shouldCloseOnClickOutside ? overlayPressHandlers : {}),\n children: /*#__PURE__*/_jsx(StyleProvider, {\n document: document,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: clsx('components-modal__frame', sizeClass, className),\n style: {\n ...frameStyle,\n ...style\n },\n ref: useMergeRefs([frameRef, constrainedTabbingRef, focusReturnRef, focusOnMount !== 'firstContentElement' ? focusOnMountRef : null]),\n role: role,\n \"aria-label\": contentLabel,\n \"aria-labelledby\": contentLabel ? undefined : headingId,\n \"aria-describedby\": aria.describedby,\n tabIndex: -1,\n onKeyDown: onKeyDown,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: clsx('components-modal__content', {\n 'hide-header': __experimentalHideHeader,\n 'is-scrollable': hasScrollableContent,\n 'has-scrolled-content': hasScrolledContent\n }),\n role: \"document\",\n onScroll: onContentContainerScroll,\n ref: contentRef,\n \"aria-label\": hasScrollableContent ? __('Scrollable section') : undefined,\n tabIndex: hasScrollableContent ? 0 : undefined,\n children: [!__experimentalHideHeader && /*#__PURE__*/_jsxs(\"div\", {\n className: \"components-modal__header\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"components-modal__header-heading-container\",\n children: [icon && /*#__PURE__*/_jsx(\"span\", {\n className: \"components-modal__icon-container\",\n \"aria-hidden\": true,\n children: icon\n }), title && /*#__PURE__*/_jsx(\"h1\", {\n id: headingId,\n className: \"components-modal__header-heading\",\n children: title\n })]\n }), headerActions, isDismissible && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Spacer, {\n marginBottom: 0,\n marginLeft: 2\n }), /*#__PURE__*/_jsx(Button, {\n size: \"compact\",\n onClick: event => closeModal().then(() => onRequestClose(event)),\n icon: close,\n label: closeButtonLabel || __('Close')\n })]\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n ref: useMergeRefs([childrenContainerRef, focusOnMount === 'firstContentElement' ? focusOnMountRef : null]),\n className: \"components-modal__children-container\",\n children: children\n })]\n })\n })\n })\n });\n return createPortal(/*#__PURE__*/_jsx(ModalContext.Provider, {\n value: nestedDismissers,\n children: modal\n }), document.body);\n}\n\n/**\n * Modals give users information and choices related to a task they\u2019re trying to\n * accomplish. They can contain critical information, require decisions, or\n * involve multiple tasks.\n *\n * ```jsx\n * import { Button, Modal } from '@wordpress/components';\n * import { useState } from '@wordpress/element';\n *\n * const MyModal = () => {\n * const [ isOpen, setOpen ] = useState( false );\n * const openModal = () => setOpen( true );\n * const closeModal = () => setOpen( false );\n *\n * return (\n * <>\n * <Button variant=\"secondary\" onClick={ openModal }>\n * Open Modal\n * </Button>\n * { isOpen && (\n * <Modal title=\"This is my modal\" onRequestClose={ closeModal }>\n * <Button variant=\"secondary\" onClick={ closeModal }>\n * My custom close button\n * </Button>\n * </Modal>\n * ) }\n * </>\n * );\n * };\n * ```\n */\nexport const Modal = forwardRef(UnforwardedModal);\nModal.displayName = 'Modal';\nexport default Modal;"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["_jsx", "clsx", "StyleProvider", "_jsxs", "_Fragment", "Button"]
|
|
7
7
|
}
|
|
@@ -35,13 +35,13 @@ __export(use_modal_exit_animation_exports, {
|
|
|
35
35
|
module.exports = __toCommonJS(use_modal_exit_animation_exports);
|
|
36
36
|
var import_compose = require("@wordpress/compose");
|
|
37
37
|
var import_element = require("@wordpress/element");
|
|
38
|
-
var import_utils = require("../utils/index.cjs");
|
|
39
38
|
var import_warning = __toESM(require("@wordpress/warning"));
|
|
39
|
+
var import_utils = require("../utils/index.cjs");
|
|
40
40
|
var FRAME_ANIMATION_DURATION = import_utils.CONFIG.transitionDuration;
|
|
41
41
|
var FRAME_ANIMATION_DURATION_NUMBER = Number.parseInt(import_utils.CONFIG.transitionDuration);
|
|
42
42
|
var EXIT_ANIMATION_NAME = "components-modal__disappear-animation";
|
|
43
43
|
function useModalExitAnimation() {
|
|
44
|
-
const frameRef = (0, import_element.useRef)();
|
|
44
|
+
const frameRef = (0, import_element.useRef)(null);
|
|
45
45
|
const [isAnimatingOut, setIsAnimatingOut] = (0, import_element.useState)(false);
|
|
46
46
|
const isReducedMotion = (0, import_compose.useReducedMotion)();
|
|
47
47
|
const closeModal = (0, import_element.useCallback)(() => new Promise((closeModalResolve) => {
|