@wordpress/components 33.1.1-next.v.202605131032.0 → 35.0.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 (287) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/build/autocomplete/index.cjs +5 -4
  3. package/build/autocomplete/index.cjs.map +3 -3
  4. package/build/box-control/index.cjs +0 -6
  5. package/build/box-control/index.cjs.map +2 -2
  6. package/build/box-control/utils.cjs +0 -38
  7. package/build/box-control/utils.cjs.map +3 -3
  8. package/build/custom-gradient-picker/gradient-bar/index.cjs.map +2 -2
  9. package/build/draggable/index.cjs +101 -7
  10. package/build/draggable/index.cjs.map +3 -3
  11. package/build/form-token-field/index.cjs +41 -7
  12. package/build/form-token-field/index.cjs.map +2 -2
  13. package/build/index.cjs +0 -17
  14. package/build/index.cjs.map +2 -2
  15. package/build/notice/index.cjs +33 -35
  16. package/build/notice/index.cjs.map +2 -2
  17. package/build/popover/index.cjs +12 -0
  18. package/build/popover/index.cjs.map +2 -2
  19. package/build/tabs/styles.cjs +5 -5
  20. package/build/tabs/styles.cjs.map +2 -2
  21. package/build-module/autocomplete/index.mjs +6 -5
  22. package/build-module/autocomplete/index.mjs.map +2 -2
  23. package/build-module/box-control/index.mjs +0 -2
  24. package/build-module/box-control/index.mjs.map +2 -2
  25. package/build-module/box-control/utils.mjs +0 -27
  26. package/build-module/box-control/utils.mjs.map +2 -2
  27. package/build-module/custom-gradient-picker/gradient-bar/index.mjs.map +2 -2
  28. package/build-module/draggable/index.mjs +101 -7
  29. package/build-module/draggable/index.mjs.map +3 -3
  30. package/build-module/form-token-field/index.mjs +41 -7
  31. package/build-module/form-token-field/index.mjs.map +2 -2
  32. package/build-module/index.mjs +87 -99
  33. package/build-module/index.mjs.map +2 -2
  34. package/build-module/notice/index.mjs +34 -36
  35. package/build-module/notice/index.mjs.map +2 -2
  36. package/build-module/popover/index.mjs +12 -0
  37. package/build-module/popover/index.mjs.map +2 -2
  38. package/build-module/tabs/styles.mjs +5 -5
  39. package/build-module/tabs/styles.mjs.map +2 -2
  40. package/build-style/style-rtl.css +64 -66
  41. package/build-style/style.css +64 -66
  42. package/build-types/autocomplete/index.d.ts.map +1 -1
  43. package/build-types/badge/stories/e2e/index.story.d.ts +7 -0
  44. package/build-types/badge/stories/e2e/index.story.d.ts.map +1 -0
  45. package/build-types/box-control/index.d.ts +0 -1
  46. package/build-types/box-control/index.d.ts.map +1 -1
  47. package/build-types/box-control/styles/box-control-styles.d.ts +1 -2
  48. package/build-types/box-control/styles/box-control-styles.d.ts.map +1 -1
  49. package/build-types/box-control/utils.d.ts +0 -13
  50. package/build-types/box-control/utils.d.ts.map +1 -1
  51. package/build-types/button/stories/e2e/index.story.d.ts +1 -0
  52. package/build-types/button/stories/e2e/index.story.d.ts.map +1 -1
  53. package/build-types/color-picker/styles.d.ts +1 -2
  54. package/build-types/color-picker/styles.d.ts.map +1 -1
  55. package/build-types/custom-gradient-picker/gradient-bar/index.d.ts.map +1 -1
  56. package/build-types/draggable/index.d.ts.map +1 -1
  57. package/build-types/draggable/stories/index.story.d.ts +4 -5
  58. package/build-types/draggable/stories/index.story.d.ts.map +1 -1
  59. package/build-types/draggable/types.d.ts +4 -0
  60. package/build-types/draggable/types.d.ts.map +1 -1
  61. package/build-types/form-token-field/index.d.ts.map +1 -1
  62. package/build-types/icon/stories/index.story.d.ts +0 -6
  63. package/build-types/icon/stories/index.story.d.ts.map +1 -1
  64. package/build-types/index.d.ts +1 -6
  65. package/build-types/index.d.ts.map +1 -1
  66. package/build-types/notice/index.d.ts.map +1 -1
  67. package/build-types/notice/types.d.ts +1 -2
  68. package/build-types/notice/types.d.ts.map +1 -1
  69. package/build-types/popover/index.d.ts.map +1 -1
  70. package/build-types/range-control/index.d.ts +1 -2
  71. package/build-types/range-control/index.d.ts.map +1 -1
  72. package/build-types/range-control/stories/index.story.d.ts.map +1 -1
  73. package/build-types/range-control/types.d.ts +0 -4
  74. package/build-types/range-control/types.d.ts.map +1 -1
  75. package/build-types/tab-panel/stories/index.story.d.ts +0 -6
  76. package/build-types/tab-panel/stories/index.story.d.ts.map +1 -1
  77. package/build-types/tabs/stories/index.story.d.ts +0 -6
  78. package/build-types/tabs/stories/index.story.d.ts.map +1 -1
  79. package/build-types/tabs/styles.d.ts.map +1 -1
  80. package/build-types/validated-form-controls/components/range-control.d.ts +1 -2
  81. package/build-types/validated-form-controls/components/range-control.d.ts.map +1 -1
  82. package/package.json +24 -22
  83. package/src/autocomplete/index.tsx +25 -7
  84. package/src/badge/stories/e2e/index.story.tsx +21 -0
  85. package/src/box-control/index.tsx +0 -1
  86. package/src/box-control/utils.ts +0 -43
  87. package/src/button/stories/e2e/index.story.tsx +11 -0
  88. package/src/custom-gradient-picker/gradient-bar/index.tsx +1 -1
  89. package/src/draggable/index.tsx +32 -10
  90. package/src/draggable/stories/index.story.tsx +11 -6
  91. package/src/draggable/style.module.scss +29 -0
  92. package/src/draggable/types.ts +4 -0
  93. package/src/form-token-field/index.tsx +84 -8
  94. package/src/form-token-field/test/index.tsx +189 -0
  95. package/src/icon/stories/index.story.tsx +2 -14
  96. package/src/index.ts +0 -6
  97. package/src/menu/test/index.tsx +9 -4
  98. package/src/modal/style.scss +2 -1
  99. package/src/notice/README.md +1 -2
  100. package/src/notice/index.tsx +57 -64
  101. package/src/notice/style.scss +49 -41
  102. package/src/notice/test/__snapshots__/index.tsx.snap +23 -23
  103. package/src/notice/test/index.tsx +5 -5
  104. package/src/notice/types.ts +1 -2
  105. package/src/popover/index.tsx +28 -0
  106. package/src/popover/test/index.tsx +138 -1
  107. package/src/range-control/stories/index.story.tsx +0 -1
  108. package/src/range-control/types.ts +0 -4
  109. package/src/style.scss +0 -1
  110. package/src/tab-panel/stories/index.story.tsx +2 -13
  111. package/src/tab-panel/style.scss +36 -14
  112. package/src/tabs/stories/index.story.tsx +2 -13
  113. package/src/tabs/styles.ts +3 -8
  114. package/build/navigation/back-button/index.cjs +0 -86
  115. package/build/navigation/back-button/index.cjs.map +0 -7
  116. package/build/navigation/constants.cjs +0 -34
  117. package/build/navigation/constants.cjs.map +0 -7
  118. package/build/navigation/context.cjs +0 -58
  119. package/build/navigation/context.cjs.map +0 -7
  120. package/build/navigation/group/context.cjs +0 -38
  121. package/build/navigation/group/context.cjs.map +0 -7
  122. package/build/navigation/group/index.cjs +0 -88
  123. package/build/navigation/group/index.cjs.map +0 -7
  124. package/build/navigation/index.cjs +0 -113
  125. package/build/navigation/index.cjs.map +0 -7
  126. package/build/navigation/item/base-content.cjs +0 -44
  127. package/build/navigation/item/base-content.cjs.map +0 -7
  128. package/build/navigation/item/base.cjs +0 -66
  129. package/build/navigation/item/base.cjs.map +0 -7
  130. package/build/navigation/item/index.cjs +0 -119
  131. package/build/navigation/item/index.cjs.map +0 -7
  132. package/build/navigation/item/use-navigation-tree-item.cjs +0 -64
  133. package/build/navigation/item/use-navigation-tree-item.cjs.map +0 -7
  134. package/build/navigation/menu/context.cjs +0 -39
  135. package/build/navigation/menu/context.cjs.map +0 -7
  136. package/build/navigation/menu/index.cjs +0 -114
  137. package/build/navigation/menu/index.cjs.map +0 -7
  138. package/build/navigation/menu/menu-title-search.cjs +0 -111
  139. package/build/navigation/menu/menu-title-search.cjs.map +0 -7
  140. package/build/navigation/menu/menu-title.cjs +0 -104
  141. package/build/navigation/menu/menu-title.cjs.map +0 -7
  142. package/build/navigation/menu/search-no-results-found.cjs +0 -48
  143. package/build/navigation/menu/search-no-results-found.cjs.map +0 -7
  144. package/build/navigation/menu/use-navigation-tree-menu.cjs +0 -51
  145. package/build/navigation/menu/use-navigation-tree-menu.cjs.map +0 -7
  146. package/build/navigation/styles/navigation-styles.cjs +0 -170
  147. package/build/navigation/styles/navigation-styles.cjs.map +0 -7
  148. package/build/navigation/types.cjs +0 -19
  149. package/build/navigation/types.cjs.map +0 -7
  150. package/build/navigation/use-create-navigation-tree.cjs +0 -103
  151. package/build/navigation/use-create-navigation-tree.cjs.map +0 -7
  152. package/build/navigation/use-navigation-tree-nodes.cjs +0 -60
  153. package/build/navigation/use-navigation-tree-nodes.cjs.map +0 -7
  154. package/build/navigation/utils.cjs +0 -45
  155. package/build/navigation/utils.cjs.map +0 -7
  156. package/build-module/navigation/back-button/index.mjs +0 -51
  157. package/build-module/navigation/back-button/index.mjs.map +0 -7
  158. package/build-module/navigation/constants.mjs +0 -8
  159. package/build-module/navigation/constants.mjs.map +0 -7
  160. package/build-module/navigation/context.mjs +0 -32
  161. package/build-module/navigation/context.mjs.map +0 -7
  162. package/build-module/navigation/group/context.mjs +0 -12
  163. package/build-module/navigation/group/context.mjs.map +0 -7
  164. package/build-module/navigation/group/index.mjs +0 -53
  165. package/build-module/navigation/group/index.mjs.map +0 -7
  166. package/build-module/navigation/index.mjs +0 -78
  167. package/build-module/navigation/index.mjs.map +0 -7
  168. package/build-module/navigation/item/base-content.mjs +0 -23
  169. package/build-module/navigation/item/base-content.mjs.map +0 -7
  170. package/build-module/navigation/item/base.mjs +0 -35
  171. package/build-module/navigation/item/base.mjs.map +0 -7
  172. package/build-module/navigation/item/index.mjs +0 -84
  173. package/build-module/navigation/item/index.mjs.map +0 -7
  174. package/build-module/navigation/item/use-navigation-tree-item.mjs +0 -39
  175. package/build-module/navigation/item/use-navigation-tree-item.mjs.map +0 -7
  176. package/build-module/navigation/menu/context.mjs +0 -13
  177. package/build-module/navigation/menu/context.mjs.map +0 -7
  178. package/build-module/navigation/menu/index.mjs +0 -79
  179. package/build-module/navigation/menu/index.mjs.map +0 -7
  180. package/build-module/navigation/menu/menu-title-search.mjs +0 -80
  181. package/build-module/navigation/menu/menu-title-search.mjs.map +0 -7
  182. package/build-module/navigation/menu/menu-title.mjs +0 -73
  183. package/build-module/navigation/menu/menu-title.mjs.map +0 -7
  184. package/build-module/navigation/menu/search-no-results-found.mjs +0 -27
  185. package/build-module/navigation/menu/search-no-results-found.mjs.map +0 -7
  186. package/build-module/navigation/menu/use-navigation-tree-menu.mjs +0 -26
  187. package/build-module/navigation/menu/use-navigation-tree-menu.mjs.map +0 -7
  188. package/build-module/navigation/styles/navigation-styles.mjs +0 -124
  189. package/build-module/navigation/styles/navigation-styles.mjs.map +0 -7
  190. package/build-module/navigation/types.mjs +0 -1
  191. package/build-module/navigation/types.mjs.map +0 -7
  192. package/build-module/navigation/use-create-navigation-tree.mjs +0 -78
  193. package/build-module/navigation/use-create-navigation-tree.mjs.map +0 -7
  194. package/build-module/navigation/use-navigation-tree-nodes.mjs +0 -35
  195. package/build-module/navigation/use-navigation-tree-nodes.mjs.map +0 -7
  196. package/build-module/navigation/utils.mjs +0 -9
  197. package/build-module/navigation/utils.mjs.map +0 -7
  198. package/build-types/navigation/back-button/index.d.ts +0 -7
  199. package/build-types/navigation/back-button/index.d.ts.map +0 -1
  200. package/build-types/navigation/constants.d.ts +0 -3
  201. package/build-types/navigation/constants.d.ts.map +0 -1
  202. package/build-types/navigation/context.d.ts +0 -4
  203. package/build-types/navigation/context.d.ts.map +0 -1
  204. package/build-types/navigation/group/context.d.ts +0 -7
  205. package/build-types/navigation/group/context.d.ts.map +0 -1
  206. package/build-types/navigation/group/index.d.ts +0 -7
  207. package/build-types/navigation/group/index.d.ts.map +0 -1
  208. package/build-types/navigation/index.d.ts +0 -46
  209. package/build-types/navigation/index.d.ts.map +0 -1
  210. package/build-types/navigation/item/base-content.d.ts +0 -3
  211. package/build-types/navigation/item/base-content.d.ts.map +0 -1
  212. package/build-types/navigation/item/base.d.ts +0 -3
  213. package/build-types/navigation/item/base.d.ts.map +0 -1
  214. package/build-types/navigation/item/index.d.ts +0 -7
  215. package/build-types/navigation/item/index.d.ts.map +0 -1
  216. package/build-types/navigation/item/use-navigation-tree-item.d.ts +0 -3
  217. package/build-types/navigation/item/use-navigation-tree-item.d.ts.map +0 -1
  218. package/build-types/navigation/menu/context.d.ts +0 -7
  219. package/build-types/navigation/menu/context.d.ts.map +0 -1
  220. package/build-types/navigation/menu/index.d.ts +0 -7
  221. package/build-types/navigation/menu/index.d.ts.map +0 -1
  222. package/build-types/navigation/menu/menu-title-search.d.ts +0 -3
  223. package/build-types/navigation/menu/menu-title-search.d.ts.map +0 -1
  224. package/build-types/navigation/menu/menu-title.d.ts +0 -3
  225. package/build-types/navigation/menu/menu-title.d.ts.map +0 -1
  226. package/build-types/navigation/menu/search-no-results-found.d.ts +0 -3
  227. package/build-types/navigation/menu/search-no-results-found.d.ts.map +0 -1
  228. package/build-types/navigation/menu/use-navigation-tree-menu.d.ts +0 -3
  229. package/build-types/navigation/menu/use-navigation-tree-menu.d.ts.map +0 -1
  230. package/build-types/navigation/stories/index.story.d.ts +0 -23
  231. package/build-types/navigation/stories/index.story.d.ts.map +0 -1
  232. package/build-types/navigation/stories/utils/controlled-state.d.ts +0 -7
  233. package/build-types/navigation/stories/utils/controlled-state.d.ts.map +0 -1
  234. package/build-types/navigation/stories/utils/default.d.ts +0 -10
  235. package/build-types/navigation/stories/utils/default.d.ts.map +0 -1
  236. package/build-types/navigation/stories/utils/group.d.ts +0 -10
  237. package/build-types/navigation/stories/utils/group.d.ts.map +0 -1
  238. package/build-types/navigation/stories/utils/hide-if-empty.d.ts +0 -10
  239. package/build-types/navigation/stories/utils/hide-if-empty.d.ts.map +0 -1
  240. package/build-types/navigation/stories/utils/more-examples.d.ts +0 -10
  241. package/build-types/navigation/stories/utils/more-examples.d.ts.map +0 -1
  242. package/build-types/navigation/stories/utils/search.d.ts +0 -10
  243. package/build-types/navigation/stories/utils/search.d.ts.map +0 -1
  244. package/build-types/navigation/styles/navigation-styles.d.ts +0 -55
  245. package/build-types/navigation/styles/navigation-styles.d.ts.map +0 -1
  246. package/build-types/navigation/test/index.d.ts +0 -2
  247. package/build-types/navigation/test/index.d.ts.map +0 -1
  248. package/build-types/navigation/types.d.ts +0 -266
  249. package/build-types/navigation/types.d.ts.map +0 -1
  250. package/build-types/navigation/use-create-navigation-tree.d.ts +0 -15
  251. package/build-types/navigation/use-create-navigation-tree.d.ts.map +0 -1
  252. package/build-types/navigation/use-navigation-tree-nodes.d.ts +0 -10
  253. package/build-types/navigation/use-navigation-tree-nodes.d.ts.map +0 -1
  254. package/build-types/navigation/utils.d.ts +0 -3
  255. package/build-types/navigation/utils.d.ts.map +0 -1
  256. package/src/draggable/style.scss +0 -21
  257. package/src/navigation/README.md +0 -267
  258. package/src/navigation/back-button/index.tsx +0 -73
  259. package/src/navigation/constants.tsx +0 -2
  260. package/src/navigation/context.tsx +0 -40
  261. package/src/navigation/group/context.tsx +0 -16
  262. package/src/navigation/group/index.tsx +0 -73
  263. package/src/navigation/index.tsx +0 -152
  264. package/src/navigation/item/base-content.tsx +0 -31
  265. package/src/navigation/item/base.tsx +0 -42
  266. package/src/navigation/item/index.tsx +0 -112
  267. package/src/navigation/item/use-navigation-tree-item.tsx +0 -47
  268. package/src/navigation/menu/context.tsx +0 -20
  269. package/src/navigation/menu/index.tsx +0 -105
  270. package/src/navigation/menu/menu-title-search.tsx +0 -99
  271. package/src/navigation/menu/menu-title.tsx +0 -100
  272. package/src/navigation/menu/search-no-results-found.tsx +0 -34
  273. package/src/navigation/menu/use-navigation-tree-menu.tsx +0 -29
  274. package/src/navigation/stories/index.story.tsx +0 -62
  275. package/src/navigation/stories/style.css +0 -25
  276. package/src/navigation/stories/utils/controlled-state.tsx +0 -149
  277. package/src/navigation/stories/utils/default.tsx +0 -92
  278. package/src/navigation/stories/utils/group.tsx +0 -61
  279. package/src/navigation/stories/utils/hide-if-empty.tsx +0 -66
  280. package/src/navigation/stories/utils/more-examples.tsx +0 -162
  281. package/src/navigation/stories/utils/search.tsx +0 -91
  282. package/src/navigation/styles/navigation-styles.tsx +0 -197
  283. package/src/navigation/test/index.tsx +0 -347
  284. package/src/navigation/types.ts +0 -325
  285. package/src/navigation/use-create-navigation-tree.tsx +0 -110
  286. package/src/navigation/use-navigation-tree-nodes.tsx +0 -31
  287. package/src/navigation/utils.tsx +0 -11
@@ -1,40 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { createContext, useContext } from '@wordpress/element';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import { ROOT_MENU } from './constants';
10
-
11
- import type { NavigationContext as NavigationContextType } from './types';
12
-
13
- const noop = () => {};
14
- const defaultIsEmpty = () => false;
15
- const defaultGetter = () => undefined;
16
-
17
- export const NavigationContext = createContext< NavigationContextType >( {
18
- activeItem: undefined,
19
- activeMenu: ROOT_MENU,
20
- setActiveMenu: noop,
21
-
22
- navigationTree: {
23
- items: {},
24
- getItem: defaultGetter,
25
- addItem: noop,
26
- removeItem: noop,
27
-
28
- menus: {},
29
- getMenu: defaultGetter,
30
- addMenu: noop,
31
- removeMenu: noop,
32
- childMenu: {},
33
- traverseMenu: noop,
34
- isMenuEmpty: defaultIsEmpty,
35
- },
36
- } );
37
-
38
- NavigationContext.displayName = 'NavigationContext';
39
-
40
- export const useNavigationContext = () => useContext( NavigationContext );
@@ -1,16 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { createContext, useContext } from '@wordpress/element';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import type { NavigationGroupContext as NavigationGroupContextType } from '../types';
10
-
11
- export const NavigationGroupContext =
12
- createContext< NavigationGroupContextType >( { group: undefined } );
13
- NavigationGroupContext.displayName = 'NavigationGroupContext';
14
-
15
- export const useNavigationGroupContext = () =>
16
- useContext( NavigationGroupContext );
@@ -1,73 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
- import { useState } from '@wordpress/element';
10
-
11
- /**
12
- * Internal dependencies
13
- */
14
- import { NavigationGroupContext } from './context';
15
- import { GroupTitleUI } from '../styles/navigation-styles';
16
- import { useNavigationContext } from '../context';
17
-
18
- import type { NavigationGroupProps } from '../types';
19
-
20
- let uniqueId = 0;
21
-
22
- /**
23
- * @deprecated Use `Navigator` instead.
24
- */
25
- export function NavigationGroup( {
26
- children,
27
- className,
28
- title,
29
- }: NavigationGroupProps ) {
30
- const [ groupId ] = useState( `group-${ ++uniqueId }` );
31
- const {
32
- navigationTree: { items },
33
- } = useNavigationContext();
34
-
35
- const context = { group: groupId };
36
-
37
- // Keep the children rendered to make sure invisible items are included in the navigation tree.
38
- if (
39
- ! Object.values( items ).some(
40
- ( item ) => item.group === groupId && item._isVisible
41
- )
42
- ) {
43
- return (
44
- <NavigationGroupContext.Provider value={ context }>
45
- { children }
46
- </NavigationGroupContext.Provider>
47
- );
48
- }
49
-
50
- const groupTitleId = `components-navigation__group-title-${ groupId }`;
51
- const classes = clsx( 'components-navigation__group', className );
52
-
53
- return (
54
- <NavigationGroupContext.Provider value={ context }>
55
- <li className={ classes }>
56
- { title && (
57
- <GroupTitleUI
58
- className="components-navigation__group-title"
59
- id={ groupTitleId }
60
- level={ 3 }
61
- >
62
- { title }
63
- </GroupTitleUI>
64
- ) }
65
- <ul aria-labelledby={ groupTitleId } role="group">
66
- { children }
67
- </ul>
68
- </li>
69
- </NavigationGroupContext.Provider>
70
- );
71
- }
72
-
73
- export default NavigationGroup;
@@ -1,152 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
- import deprecated from '@wordpress/deprecated';
10
- import { useEffect, useRef, useState } from '@wordpress/element';
11
- import { isRTL } from '@wordpress/i18n';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
- import { getAnimateClassName } from '../animate';
17
- import { ROOT_MENU } from './constants';
18
- import { NavigationContext } from './context';
19
- import { NavigationUI } from './styles/navigation-styles';
20
- import { useCreateNavigationTree } from './use-create-navigation-tree';
21
-
22
- import type {
23
- NavigationProps,
24
- NavigationContext as NavigationContextType,
25
- } from './types';
26
-
27
- const noop = () => {};
28
-
29
- /**
30
- * Render a navigation list with optional groupings and hierarchy.
31
- *
32
- * @deprecated Use `Navigator` instead.
33
- *
34
- * ```jsx
35
- * import {
36
- * __experimentalNavigation as Navigation,
37
- * __experimentalNavigationGroup as NavigationGroup,
38
- * __experimentalNavigationItem as NavigationItem,
39
- * __experimentalNavigationMenu as NavigationMenu,
40
- * } from '@wordpress/components';
41
- *
42
- * const MyNavigation = () => (
43
- * <Navigation>
44
- * <NavigationMenu title="Home">
45
- * <NavigationGroup title="Group 1">
46
- * <NavigationItem item="item-1" title="Item 1" />
47
- * <NavigationItem item="item-2" title="Item 2" />
48
- * </NavigationGroup>
49
- * <NavigationGroup title="Group 2">
50
- * <NavigationItem
51
- * item="item-3"
52
- * navigateToMenu="category"
53
- * title="Category"
54
- * />
55
- * </NavigationGroup>
56
- * </NavigationMenu>
57
- *
58
- * <NavigationMenu
59
- * backButtonLabel="Home"
60
- * menu="category"
61
- * parentMenu="root"
62
- * title="Category"
63
- * >
64
- * <NavigationItem badge="1" item="child-1" title="Child 1" />
65
- * <NavigationItem item="child-2" title="Child 2" />
66
- * </NavigationMenu>
67
- * </Navigation>
68
- * );
69
- * ```
70
- */
71
- export function Navigation( {
72
- activeItem,
73
- activeMenu = ROOT_MENU,
74
- children,
75
- className,
76
- onActivateMenu = noop,
77
- }: NavigationProps ) {
78
- const [ menu, setMenu ] = useState( activeMenu );
79
- const [ slideOrigin, setSlideOrigin ] = useState< 'left' | 'right' >();
80
- const navigationTree = useCreateNavigationTree();
81
- const defaultSlideOrigin = isRTL() ? 'right' : 'left';
82
-
83
- deprecated( 'wp.components.Navigation (and all subcomponents)', {
84
- since: '6.8',
85
- version: '7.1',
86
- alternative: 'wp.components.Navigator',
87
- } );
88
-
89
- const setActiveMenu: NavigationContextType[ 'setActiveMenu' ] = (
90
- menuId,
91
- slideInOrigin = defaultSlideOrigin
92
- ) => {
93
- if ( ! navigationTree.getMenu( menuId ) ) {
94
- return;
95
- }
96
-
97
- setSlideOrigin( slideInOrigin );
98
- setMenu( menuId );
99
- onActivateMenu( menuId );
100
- };
101
-
102
- // Used to prevent the sliding animation on mount
103
- const isMountedRef = useRef( false );
104
- useEffect( () => {
105
- if ( ! isMountedRef.current ) {
106
- isMountedRef.current = true;
107
- }
108
- }, [] );
109
-
110
- useEffect( () => {
111
- if ( activeMenu !== menu ) {
112
- setActiveMenu( activeMenu );
113
- }
114
- // Not adding deps for now, as it would require either a larger refactor or some questionable workarounds.
115
- // See https://github.com/WordPress/gutenberg/pull/41612 for context.
116
- }, [ activeMenu ] );
117
-
118
- const context = {
119
- activeItem,
120
- activeMenu: menu,
121
- setActiveMenu,
122
- navigationTree,
123
- };
124
-
125
- const classes = clsx( 'components-navigation', className );
126
- const animateClassName = getAnimateClassName( {
127
- type: 'slide-in',
128
- origin: slideOrigin,
129
- } );
130
-
131
- return (
132
- <NavigationUI className={ classes }>
133
- <div
134
- key={ menu }
135
- className={
136
- animateClassName
137
- ? clsx( {
138
- [ animateClassName ]:
139
- isMountedRef.current && slideOrigin,
140
- } )
141
- : undefined
142
- }
143
- >
144
- <NavigationContext.Provider value={ context }>
145
- { children }
146
- </NavigationContext.Provider>
147
- </div>
148
- </NavigationUI>
149
- );
150
- }
151
-
152
- export default Navigation;
@@ -1,31 +0,0 @@
1
- /**
2
- * Internal dependencies
3
- */
4
- import { ItemBadgeUI, ItemTitleUI } from '../styles/navigation-styles';
5
-
6
- import type { NavigationItemBaseContentProps } from '../types';
7
-
8
- export default function NavigationItemBaseContent(
9
- props: NavigationItemBaseContentProps
10
- ) {
11
- const { badge, title } = props;
12
-
13
- return (
14
- <>
15
- { title && (
16
- <ItemTitleUI
17
- className="components-navigation__item-title"
18
- as="span"
19
- >
20
- { title }
21
- </ItemTitleUI>
22
- ) }
23
-
24
- { badge && (
25
- <ItemBadgeUI className="components-navigation__item-badge">
26
- { badge }
27
- </ItemBadgeUI>
28
- ) }
29
- </>
30
- );
31
- }
@@ -1,42 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
- import { useState } from '@wordpress/element';
10
-
11
- /**
12
- * Internal dependencies
13
- */
14
- import { useNavigationContext } from '../context';
15
- import { useNavigationTreeItem } from './use-navigation-tree-item';
16
- import { ItemBaseUI } from '../styles/navigation-styles';
17
-
18
- import type { NavigationItemBaseProps } from '../types';
19
-
20
- let uniqueId = 0;
21
-
22
- export default function NavigationItemBase( props: NavigationItemBaseProps ) {
23
- // Also avoid to pass the `title` and `href` props to the ItemBaseUI styled component.
24
- const { children, className, title, href, ...restProps } = props;
25
-
26
- const [ itemId ] = useState( `item-${ ++uniqueId }` );
27
-
28
- useNavigationTreeItem( itemId, props );
29
- const { navigationTree } = useNavigationContext();
30
-
31
- if ( ! navigationTree.getItem( itemId )?._isVisible ) {
32
- return null;
33
- }
34
-
35
- const classes = clsx( 'components-navigation__item', className );
36
-
37
- return (
38
- <ItemBaseUI className={ classes } { ...restProps }>
39
- { children }
40
- </ItemBaseUI>
41
- );
42
- }
@@ -1,112 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
- import { Icon, chevronLeft, chevronRight } from '@wordpress/icons';
10
- import { isRTL } from '@wordpress/i18n';
11
-
12
- /**
13
- * Internal dependencies
14
- */
15
- import Button from '../../button';
16
- import { useNavigationContext } from '../context';
17
- import { ItemUI, ItemIconUI } from '../styles/navigation-styles';
18
- import NavigationItemBaseContent from './base-content';
19
- import NavigationItemBase from './base';
20
-
21
- import type { NavigationItemProps } from '../types';
22
-
23
- const noop = () => {};
24
-
25
- /**
26
- * @deprecated Use `Navigator` instead.
27
- */
28
- export function NavigationItem( props: NavigationItemProps ) {
29
- const {
30
- badge,
31
- children,
32
- className,
33
- href,
34
- item,
35
- navigateToMenu,
36
- onClick = noop,
37
- title,
38
- icon,
39
- hideIfTargetMenuEmpty,
40
- isText,
41
- ...restProps
42
- } = props;
43
-
44
- const {
45
- activeItem,
46
- setActiveMenu,
47
- navigationTree: { isMenuEmpty },
48
- } = useNavigationContext();
49
-
50
- // If hideIfTargetMenuEmpty prop is true
51
- // And the menu we are supposed to navigate to
52
- // Is marked as empty, then we skip rendering the item.
53
- if (
54
- hideIfTargetMenuEmpty &&
55
- navigateToMenu &&
56
- isMenuEmpty( navigateToMenu )
57
- ) {
58
- return null;
59
- }
60
-
61
- const isActive = item && activeItem === item;
62
-
63
- const classes = clsx( className, {
64
- 'is-active': isActive,
65
- } );
66
-
67
- const onItemClick: React.MouseEventHandler<
68
- HTMLButtonElement | HTMLAnchorElement
69
- > = ( event ) => {
70
- if ( navigateToMenu ) {
71
- setActiveMenu( navigateToMenu );
72
- }
73
-
74
- onClick( event );
75
- };
76
- const navigationIcon = isRTL() ? chevronLeft : chevronRight;
77
- const baseProps = children ? props : { ...props, onClick: undefined };
78
- const itemProps = isText
79
- ? restProps
80
- : {
81
- as: Button,
82
- __next40pxDefaultSize:
83
- 'as' in restProps ? restProps.as === undefined : true,
84
- href,
85
- onClick: onItemClick,
86
- 'aria-current': isActive ? 'page' : undefined,
87
- ...restProps,
88
- };
89
-
90
- return (
91
- <NavigationItemBase { ...baseProps } className={ classes }>
92
- { children || (
93
- <ItemUI { ...itemProps }>
94
- { icon && (
95
- <ItemIconUI>
96
- <Icon icon={ icon } />
97
- </ItemIconUI>
98
- ) }
99
-
100
- <NavigationItemBaseContent
101
- title={ title }
102
- badge={ badge }
103
- />
104
-
105
- { navigateToMenu && <Icon icon={ navigationIcon } /> }
106
- </ItemUI>
107
- ) }
108
- </NavigationItemBase>
109
- );
110
- }
111
-
112
- export default NavigationItem;
@@ -1,47 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { useEffect } from '@wordpress/element';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import { useNavigationContext } from '../context';
10
- import { useNavigationGroupContext } from '../group/context';
11
- import { useNavigationMenuContext } from '../menu/context';
12
- import { normalizedSearch } from '../utils';
13
-
14
- import type { NavigationItemProps } from '../types';
15
-
16
- export const useNavigationTreeItem = (
17
- itemId: string,
18
- props: NavigationItemProps
19
- ) => {
20
- const {
21
- activeMenu,
22
- navigationTree: { addItem, removeItem },
23
- } = useNavigationContext();
24
- const { group } = useNavigationGroupContext();
25
- const { menu, search } = useNavigationMenuContext();
26
-
27
- useEffect( () => {
28
- const isMenuActive = activeMenu === menu;
29
- const isItemVisible =
30
- ! search ||
31
- ( props.title !== undefined &&
32
- normalizedSearch( props.title, search ) );
33
-
34
- addItem( itemId, {
35
- ...props,
36
- group,
37
- menu,
38
- _isVisible: isMenuActive && isItemVisible,
39
- } );
40
-
41
- return () => {
42
- removeItem( itemId );
43
- };
44
- // Not adding deps for now, as it would require either a larger refactor.
45
- // See https://github.com/WordPress/gutenberg/pull/41639
46
- }, [ activeMenu, search ] );
47
- };
@@ -1,20 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { createContext, useContext } from '@wordpress/element';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import type { NavigationMenuContext as NavigationMenuContextType } from '../types';
10
-
11
- export const NavigationMenuContext = createContext< NavigationMenuContextType >(
12
- {
13
- menu: undefined,
14
- search: '',
15
- }
16
- );
17
- NavigationMenuContext.displayName = 'NavigationMenuContext';
18
-
19
- export const useNavigationMenuContext = () =>
20
- useContext( NavigationMenuContext );
@@ -1,105 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
- import { useState } from '@wordpress/element';
10
-
11
- /**
12
- * Internal dependencies
13
- */
14
- import { ROOT_MENU } from '../constants';
15
- import { NavigationMenuContext } from './context';
16
- import { useNavigationContext } from '../context';
17
- import { useNavigationTreeMenu } from './use-navigation-tree-menu';
18
- import NavigationBackButton from '../back-button';
19
- import NavigationMenuTitle from './menu-title';
20
- import NavigationSearchNoResultsFound from './search-no-results-found';
21
- import { NavigableMenu } from '../../navigable-container';
22
- import { MenuUI } from '../styles/navigation-styles';
23
-
24
- import type { NavigationMenuProps } from '../types';
25
-
26
- /**
27
- * @deprecated Use `Navigator` instead.
28
- */
29
- export function NavigationMenu( props: NavigationMenuProps ) {
30
- const {
31
- backButtonLabel,
32
- children,
33
- className,
34
- hasSearch,
35
- menu = ROOT_MENU,
36
- onBackButtonClick,
37
- onSearch: setControlledSearch,
38
- parentMenu,
39
- search: controlledSearch,
40
- isSearchDebouncing,
41
- title,
42
- titleAction,
43
- } = props;
44
- const [ uncontrolledSearch, setUncontrolledSearch ] = useState( '' );
45
- useNavigationTreeMenu( props );
46
- const { activeMenu } = useNavigationContext();
47
-
48
- const context = {
49
- menu,
50
- search: uncontrolledSearch,
51
- };
52
-
53
- // Keep the children rendered to make sure invisible items are included in the navigation tree.
54
- if ( activeMenu !== menu ) {
55
- return (
56
- <NavigationMenuContext.Provider value={ context }>
57
- { children }
58
- </NavigationMenuContext.Provider>
59
- );
60
- }
61
-
62
- const isControlledSearch = !! setControlledSearch;
63
- const search = isControlledSearch ? controlledSearch : uncontrolledSearch;
64
- const onSearch = isControlledSearch
65
- ? setControlledSearch
66
- : setUncontrolledSearch;
67
-
68
- const menuTitleId = `components-navigation__menu-title-${ menu }`;
69
- const classes = clsx( 'components-navigation__menu', className );
70
-
71
- return (
72
- <NavigationMenuContext.Provider value={ context }>
73
- <MenuUI className={ classes }>
74
- { ( parentMenu || onBackButtonClick ) && (
75
- <NavigationBackButton
76
- backButtonLabel={ backButtonLabel }
77
- parentMenu={ parentMenu }
78
- onClick={ onBackButtonClick }
79
- />
80
- ) }
81
-
82
- { title && (
83
- <NavigationMenuTitle
84
- hasSearch={ hasSearch }
85
- onSearch={ onSearch }
86
- search={ search }
87
- title={ title }
88
- titleAction={ titleAction }
89
- />
90
- ) }
91
-
92
- <NavigableMenu>
93
- <ul aria-labelledby={ menuTitleId }>
94
- { children }
95
- { search && ! isSearchDebouncing && (
96
- <NavigationSearchNoResultsFound search={ search } />
97
- ) }
98
- </ul>
99
- </NavigableMenu>
100
- </MenuUI>
101
- </NavigationMenuContext.Provider>
102
- );
103
- }
104
-
105
- export default NavigationMenu;