@wordpress/interface 9.37.0 → 9.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/build/components/action-item/index.cjs.map +2 -2
  3. package/build/components/complementary-area/index.cjs +30 -25
  4. package/build/components/complementary-area/index.cjs.map +3 -3
  5. package/build/components/complementary-area-header/index.cjs.map +2 -2
  6. package/build/components/complementary-area-more-menu-item/index.cjs.map +2 -2
  7. package/build/components/complementary-area-toggle/index.cjs.map +2 -2
  8. package/build/components/fullscreen-mode/index.cjs.map +2 -2
  9. package/build/components/interface-skeleton/index.cjs +5 -11
  10. package/build/components/interface-skeleton/index.cjs.map +2 -2
  11. package/build/components/pinned-items/index.cjs.map +2 -2
  12. package/build/store/actions.cjs.map +2 -2
  13. package/build/store/deprecated.cjs.map +2 -2
  14. package/build/store/index.cjs.map +2 -2
  15. package/build/store/reducer.cjs.map +2 -2
  16. package/build/store/selectors.cjs.map +2 -2
  17. package/build-module/components/action-item/index.mjs.map +2 -2
  18. package/build-module/components/complementary-area/index.mjs +37 -26
  19. package/build-module/components/complementary-area/index.mjs.map +2 -2
  20. package/build-module/components/complementary-area-header/index.mjs.map +2 -2
  21. package/build-module/components/complementary-area-more-menu-item/index.mjs.map +2 -2
  22. package/build-module/components/complementary-area-toggle/index.mjs.map +2 -2
  23. package/build-module/components/fullscreen-mode/index.mjs.map +2 -2
  24. package/build-module/components/interface-skeleton/index.mjs +6 -16
  25. package/build-module/components/interface-skeleton/index.mjs.map +2 -2
  26. package/build-module/components/pinned-items/index.mjs.map +2 -2
  27. package/build-module/store/actions.mjs.map +2 -2
  28. package/build-module/store/deprecated.mjs.map +2 -2
  29. package/build-module/store/index.mjs.map +2 -2
  30. package/build-module/store/reducer.mjs.map +2 -2
  31. package/build-module/store/selectors.mjs.map +2 -2
  32. package/build-style/style-rtl.css +3 -2
  33. package/build-style/style.css +3 -2
  34. package/package.json +15 -15
  35. package/src/components/action-item/index.js +0 -3
  36. package/src/components/complementary-area/index.js +53 -45
  37. package/src/components/complementary-area/style.scss +1 -0
  38. package/src/components/complementary-area-header/index.js +0 -11
  39. package/src/components/complementary-area-more-menu-item/index.js +0 -7
  40. package/src/components/complementary-area-toggle/index.js +0 -7
  41. package/src/components/fullscreen-mode/index.js +0 -3
  42. package/src/components/fullscreen-mode/test/index.js +0 -6
  43. package/src/components/interface-skeleton/index.js +8 -19
  44. package/src/components/interface-skeleton/style.scss +2 -2
  45. package/src/components/pinned-items/index.js +0 -7
  46. package/src/store/actions.js +0 -7
  47. package/src/store/deprecated.js +0 -3
  48. package/src/store/index.js +0 -7
  49. package/src/store/reducer.js +0 -3
  50. package/src/store/selectors.js +0 -7
  51. package/src/store/test/actions.js +0 -7
  52. package/src/store/test/reducer.js +0 -3
  53. package/src/store/test/selectors.js +0 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/interface",
3
- "version": "9.37.0",
3
+ "version": "9.38.0",
4
4
  "description": "Interface module for WordPress. The package contains shared functionality across the modern JavaScript-based WordPress screens.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -52,19 +52,19 @@
52
52
  "build-module/store/index.mjs"
53
53
  ],
54
54
  "dependencies": {
55
- "@wordpress/a11y": "^4.52.0",
56
- "@wordpress/admin-ui": "^2.7.0",
57
- "@wordpress/base-styles": "^12.0.0",
58
- "@wordpress/components": "^38.0.0",
59
- "@wordpress/compose": "^8.5.0",
60
- "@wordpress/data": "^10.52.0",
61
- "@wordpress/deprecated": "^4.52.0",
62
- "@wordpress/element": "^8.4.0",
63
- "@wordpress/i18n": "^6.25.0",
64
- "@wordpress/icons": "^15.3.0",
65
- "@wordpress/plugins": "^7.52.0",
66
- "@wordpress/preferences": "^4.52.0",
67
- "@wordpress/viewport": "^6.52.0",
55
+ "@wordpress/a11y": "^4.53.0",
56
+ "@wordpress/admin-ui": "^2.8.0",
57
+ "@wordpress/base-styles": "^12.1.0",
58
+ "@wordpress/components": "^39.0.0",
59
+ "@wordpress/compose": "^8.6.0",
60
+ "@wordpress/data": "^10.53.0",
61
+ "@wordpress/deprecated": "^4.53.0",
62
+ "@wordpress/element": "^8.5.0",
63
+ "@wordpress/i18n": "^6.26.0",
64
+ "@wordpress/icons": "^15.4.0",
65
+ "@wordpress/plugins": "^7.53.0",
66
+ "@wordpress/preferences": "^4.53.0",
67
+ "@wordpress/viewport": "^6.53.0",
68
68
  "clsx": "^2.1.1"
69
69
  },
70
70
  "devDependencies": {
@@ -78,5 +78,5 @@
78
78
  "publishConfig": {
79
79
  "access": "public"
80
80
  },
81
- "gitHead": "7e8b17a983f9391d3ebc7717af2a1c9ed7efc7ab"
81
+ "gitHead": "989764d42ff93e33684aaf0b96a5b7f3d9bbff52"
82
82
  }
@@ -1,6 +1,3 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
1
  import { MenuGroup, Button, Slot, Fill } from '@wordpress/components';
5
2
  import { Children } from '@wordpress/element';
6
3
 
@@ -1,11 +1,4 @@
1
- /**
2
- * External dependencies
3
- */
4
1
  import clsx from 'clsx';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
2
  import {
10
3
  Button,
11
4
  Panel,
@@ -17,7 +10,13 @@ import {
17
10
  import { useDispatch, useSelect } from '@wordpress/data';
18
11
  import { __ } from '@wordpress/i18n';
19
12
  import { check, starEmpty, starFilled } from '@wordpress/icons';
20
- import { useEffect, useRef, useState } from '@wordpress/element';
13
+ import {
14
+ cloneElement,
15
+ isValidElement,
16
+ useEffect,
17
+ useRef,
18
+ useState,
19
+ } from '@wordpress/element';
21
20
  import { store as viewportStore } from '@wordpress/viewport';
22
21
  import { store as preferencesStore } from '@wordpress/preferences';
23
22
  import {
@@ -26,10 +25,6 @@ import {
26
25
  usePrevious,
27
26
  } from '@wordpress/compose';
28
27
  import { usePluginContext } from '@wordpress/plugins';
29
-
30
- /**
31
- * Internal dependencies
32
- */
33
28
  import ComplementaryAreaHeader from '../complementary-area-header';
34
29
  import ComplementaryAreaMoreMenuItem from '../complementary-area-more-menu-item';
35
30
  import ComplementaryAreaToggle from '../complementary-area-toggle';
@@ -42,13 +37,38 @@ function ComplementaryAreaSlot( { scope, ...props } ) {
42
37
  return <Slot name={ `ComplementaryArea/${ scope }` } { ...props } />;
43
38
  }
44
39
 
45
- const SIDEBAR_WIDTH = 280;
46
40
  const variants = {
47
- open: { width: SIDEBAR_WIDTH },
48
- closed: { width: 0 },
49
- mobileOpen: { width: '100vw' },
41
+ // `auto` leaves the width to the area's own stylesheet, so it stays in one
42
+ // place. framer-motion measures the element to animate, then restores
43
+ // `auto`.
44
+ open: { width: 'auto' },
45
+ // Resolved with the `custom` value passed to `AnimatePresence`, which is
46
+ // the only way an already removed element can be given a fresh transition.
47
+ closed: ( transition ) => ( { width: 0, transition } ),
50
48
  };
51
49
 
50
+ /**
51
+ * Renders the complementary area container, replacing the default `div` with
52
+ * the element given via the `render` prop.
53
+ *
54
+ * `className` and `style` are composed rather than overwritten, since the
55
+ * container is also the scroll container for the sidebar.
56
+ *
57
+ * @param {Object} [render] Replacement element.
58
+ * @param {Object} props Props for the container.
59
+ */
60
+ function renderContainer( render, props ) {
61
+ if ( isValidElement( render ) ) {
62
+ return cloneElement( render, {
63
+ ...props,
64
+ className: clsx( render.props.className, props.className ),
65
+ style: { ...render.props.style, ...props.style },
66
+ } );
67
+ }
68
+
69
+ return <div { ...props } />;
70
+ }
71
+
52
72
  function ComplementaryAreaFill( {
53
73
  activeArea,
54
74
  isActive,
@@ -56,27 +76,20 @@ function ComplementaryAreaFill( {
56
76
  children,
57
77
  className,
58
78
  id,
79
+ render,
59
80
  } ) {
60
81
  const disableMotion = useReducedMotion();
61
82
  const isMobileViewport = useViewportMatch( 'medium', '<' );
62
- // This is used to delay the exit animation to the next tick.
63
- // The reason this is done is to allow us to apply the right transition properties
64
- // When we switch from an open sidebar to another open sidebar.
65
- // we don't want to animate in this case.
83
+ // Swapping one open area straight for another should not animate.
66
84
  const previousActiveArea = usePrevious( activeArea );
67
- const previousIsActive = usePrevious( isActive );
68
- const [ , setState ] = useState( {} );
69
- useEffect( () => {
70
- setState( {} );
71
- }, [ isActive ] );
85
+ const isSwitchingAreas =
86
+ !! previousActiveArea &&
87
+ !! activeArea &&
88
+ activeArea !== previousActiveArea;
72
89
  const transition = {
73
90
  type: 'tween',
74
91
  duration:
75
- disableMotion ||
76
- isMobileViewport ||
77
- ( !! previousActiveArea &&
78
- !! activeArea &&
79
- activeArea !== previousActiveArea )
92
+ disableMotion || isMobileViewport || isSwitchingAreas
80
93
  ? 0
81
94
  : ANIMATION_DURATION,
82
95
  ease: [ 0.6, 0, 0.4, 1 ],
@@ -84,27 +97,21 @@ function ComplementaryAreaFill( {
84
97
 
85
98
  return (
86
99
  <Fill name={ `ComplementaryArea/${ scope }` }>
87
- <AnimatePresence initial={ false }>
88
- { ( previousIsActive || isActive ) && (
100
+ <AnimatePresence initial={ false } custom={ transition }>
101
+ { isActive && (
89
102
  <motion.div
90
103
  variants={ variants }
91
104
  initial="closed"
92
- animate={ isMobileViewport ? 'mobileOpen' : 'open' }
105
+ animate="open"
93
106
  exit="closed"
94
107
  transition={ transition }
95
108
  className="interface-complementary-area__fill"
96
109
  >
97
- <div
98
- id={ id }
99
- className={ className }
100
- style={ {
101
- width: isMobileViewport
102
- ? '100vw'
103
- : SIDEBAR_WIDTH,
104
- } }
105
- >
106
- { children }
107
- </div>
110
+ { renderContainer( render, {
111
+ id,
112
+ className,
113
+ children,
114
+ } ) }
108
115
  </motion.div>
109
116
  ) }
110
117
  </AnimatePresence>
@@ -177,6 +184,7 @@ function ComplementaryArea( {
177
184
  icon: iconProp,
178
185
  isPinnable = true,
179
186
  panelClassName,
187
+ render,
180
188
  scope,
181
189
  name,
182
190
  title,
@@ -302,6 +310,7 @@ function ComplementaryArea( {
302
310
  className={ clsx( 'interface-complementary-area', className ) }
303
311
  scope={ scope }
304
312
  id={ identifier.replace( '/', ':' ) }
313
+ render={ render }
305
314
  >
306
315
  <ComplementaryAreaHeader
307
316
  className={ headerClassName }
@@ -336,7 +345,6 @@ function ComplementaryArea( {
336
345
  )
337
346
  }
338
347
  isPressed={ isPinned }
339
- aria-expanded={ isPinned }
340
348
  size="compact"
341
349
  />
342
350
  ) }
@@ -7,6 +7,7 @@
7
7
  color: $gray-900;
8
8
  height: 100%;
9
9
  overflow: auto;
10
+ width: 100vw;
10
11
 
11
12
  @include break-medium() {
12
13
  width: $sidebar-width;
@@ -1,16 +1,5 @@
1
- /**
2
- * External dependencies
3
- */
4
1
  import clsx from 'clsx';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
2
  import { closeSmall } from '@wordpress/icons';
10
-
11
- /**
12
- * Internal dependencies
13
- */
14
3
  import ComplementaryAreaToggle from '../complementary-area-toggle';
15
4
 
16
5
  const ComplementaryAreaHeader = ( {
@@ -1,12 +1,5 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
1
  import { check } from '@wordpress/icons';
5
2
  import { MenuItem } from '@wordpress/components';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
3
  import ComplementaryAreaToggle from '../complementary-area-toggle';
11
4
  import ActionItem from '../action-item';
12
5
 
@@ -1,13 +1,6 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
1
  import { Button } from '@wordpress/components';
5
2
  import { useDispatch, useSelect } from '@wordpress/data';
6
3
  import { usePluginContext } from '@wordpress/plugins';
7
-
8
- /**
9
- * Internal dependencies
10
- */
11
4
  import { store as interfaceStore } from '../../store';
12
5
 
13
6
  /**
@@ -1,6 +1,3 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
1
  import { useEffect } from '@wordpress/element';
5
2
 
6
3
  const FullscreenMode = ( { isActive } ) => {
@@ -1,10 +1,4 @@
1
- /**
2
- * External dependencies
3
- */
4
1
  import { render } from '@testing-library/react';
5
- /**
6
- * Internal dependencies
7
- */
8
2
  import FullscreenMode from '..';
9
3
 
10
4
  describe( 'FullscreenMode', () => {
@@ -1,11 +1,4 @@
1
- /**
2
- * External dependencies
3
- */
4
1
  import clsx from 'clsx';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
2
  import { NavigableRegion } from '@wordpress/admin-ui';
10
3
  import { forwardRef, useEffect } from '@wordpress/element';
11
4
  import {
@@ -13,11 +6,7 @@ import {
13
6
  __unstableAnimatePresence as AnimatePresence,
14
7
  } from '@wordpress/components';
15
8
  import { __, _x } from '@wordpress/i18n';
16
- import {
17
- useReducedMotion,
18
- useViewportMatch,
19
- useResizeObserver,
20
- } from '@wordpress/compose';
9
+ import { useReducedMotion, useViewportMatch } from '@wordpress/compose';
21
10
 
22
11
  const ANIMATION_DURATION = 0.25;
23
12
  const commonTransition = {
@@ -82,8 +71,6 @@ function InterfaceSkeleton(
82
71
  },
83
72
  ref
84
73
  ) {
85
- const [ secondarySidebarResizeListener, secondarySidebarSize ] =
86
- useResizeObserver();
87
74
  const isMobileViewport = useViewportMatch( 'medium', '<' );
88
75
  const disableMotion = useReducedMotion();
89
76
  const defaultTransition = {
@@ -168,20 +155,23 @@ function InterfaceSkeleton(
168
155
  initial="closed"
169
156
  animate="open"
170
157
  exit="closed"
158
+ // `auto` leaves the open width to the panel, so a
159
+ // sidebar that is already open on page load is
160
+ // at its full width on the first paint instead
161
+ // of animating there. framer-motion measures
162
+ // the element to animate, then restores `auto`.
171
163
  variants={ {
172
- open: { width: secondarySidebarSize.width },
164
+ open: { width: 'auto' },
173
165
  closed: { width: 0 },
174
166
  } }
175
167
  transition={ defaultTransition }
176
168
  >
177
169
  <motion.div
178
170
  style={ {
179
- position: 'absolute',
180
171
  width: isMobileViewport
181
172
  ? '100vw'
182
- : 'fit-content',
173
+ : 'max-content',
183
174
  height: '100%',
184
- left: 0,
185
175
  } }
186
176
  variants={ {
187
177
  open: { x: 0 },
@@ -189,7 +179,6 @@ function InterfaceSkeleton(
189
179
  } }
190
180
  transition={ defaultTransition }
191
181
  >
192
- { secondarySidebarResizeListener }
193
182
  { secondarySidebar }
194
183
  </motion.div>
195
184
  </NavigableRegion>
@@ -75,7 +75,7 @@ html.interface-interface-skeleton__html-container {
75
75
  // Footer overlap prevention
76
76
  .has-footer & {
77
77
  @include break-medium() {
78
- padding-bottom: $button-size-small + $border-width;
78
+ padding-bottom: calc(var(--wpds-dimension-size-md) + #{$border-width});
79
79
  }
80
80
  }
81
81
  }
@@ -174,7 +174,7 @@ html.interface-interface-skeleton__html-container {
174
174
  z-index: z-index(".edit-post-layout__footer");
175
175
  display: flex;
176
176
  background: $white;
177
- height: $button-size-small;
177
+ height: var(--wpds-dimension-size-md);
178
178
  align-items: center;
179
179
  font-size: $default-font-size;
180
180
  padding: 0 ($grid-unit-15 + 6px);
@@ -1,11 +1,4 @@
1
- /**
2
- * External dependencies
3
- */
4
1
  import clsx from 'clsx';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
2
  import { Slot, Fill } from '@wordpress/components';
10
3
 
11
4
  function PinnedItems( { scope, ...props } ) {
@@ -1,12 +1,5 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
1
  import deprecated from '@wordpress/deprecated';
5
2
  import { store as preferencesStore } from '@wordpress/preferences';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
3
  import {
11
4
  normalizeComplementaryAreaScope,
12
5
  normalizeComplementaryAreaName,
@@ -1,6 +1,3 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
1
  import deprecated from '@wordpress/deprecated';
5
2
 
6
3
  export function normalizeComplementaryAreaScope( scope ) {
@@ -1,11 +1,4 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
1
  import { createReduxStore, register } from '@wordpress/data';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
2
  import * as actions from './actions';
10
3
  import * as selectors from './selectors';
11
4
  import reducer from './reducer';
@@ -1,6 +1,3 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
1
  import { combineReducers } from '@wordpress/data';
5
2
 
6
3
  export function complementaryAreas( state = {}, action ) {
@@ -1,13 +1,6 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
1
  import { createRegistrySelector } from '@wordpress/data';
5
2
  import deprecated from '@wordpress/deprecated';
6
3
  import { store as preferencesStore } from '@wordpress/preferences';
7
-
8
- /**
9
- * Internal dependencies
10
- */
11
4
  import {
12
5
  normalizeComplementaryAreaScope,
13
6
  normalizeComplementaryAreaName,
@@ -1,12 +1,5 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
1
  import { createRegistry } from '@wordpress/data';
5
2
  import { store as preferencesStore } from '@wordpress/preferences';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
3
  import { store as interfaceStore } from '../';
11
4
 
12
5
  function createRegistryWithStores() {
@@ -1,6 +1,3 @@
1
- /**
2
- * Internal dependencies
3
- */
4
1
  import { activeModal } from '../reducer';
5
2
 
6
3
  describe( 'state', () => {
@@ -1,6 +1,3 @@
1
- /**
2
- * Internal dependencies
3
- */
4
1
  import { isModalActive } from '../selectors';
5
2
 
6
3
  describe( 'selectors', () => {