@wordpress/block-editor 11.3.2 → 11.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +4 -4
  3. package/build/components/block-actions/index.js +2 -7
  4. package/build/components/block-actions/index.js.map +1 -1
  5. package/build/components/block-alignment-control/use-available-alignments.js +5 -3
  6. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  7. package/build/components/block-popover/inbetween.js +10 -33
  8. package/build/components/block-popover/inbetween.js.map +1 -1
  9. package/build/components/block-tools/selected-block-popover.js +2 -2
  10. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  11. package/build/components/block-types-list/index.native.js +2 -0
  12. package/build/components/block-types-list/index.native.js.map +1 -1
  13. package/build/components/colors-gradients/control.js +6 -3
  14. package/build/components/colors-gradients/control.js.map +1 -1
  15. package/build/components/font-appearance-control/index.js +0 -3
  16. package/build/components/font-appearance-control/index.js.map +1 -1
  17. package/build/components/global-styles/hooks.js +106 -45
  18. package/build/components/global-styles/hooks.js.map +1 -1
  19. package/build/components/global-styles/index.js +24 -0
  20. package/build/components/global-styles/index.js.map +1 -1
  21. package/build/components/global-styles/typography-panel.js +421 -0
  22. package/build/components/global-styles/typography-panel.js.map +1 -0
  23. package/build/components/global-styles/use-global-styles-output.js +6 -2
  24. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  25. package/build/components/iframe/index.js +17 -11
  26. package/build/components/iframe/index.js.map +1 -1
  27. package/build/components/image-editor/aspect-ratio-dropdown.js +2 -1
  28. package/build/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  29. package/build/components/image-size-control/index.js +6 -11
  30. package/build/components/image-size-control/index.js.map +1 -1
  31. package/build/components/inserter/block-patterns-tab.js +9 -15
  32. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  33. package/build/components/inserter/block-types-tab.native.js +4 -1
  34. package/build/components/inserter/block-types-tab.native.js.map +1 -1
  35. package/build/components/inserter/reusable-blocks-tab.native.js +4 -1
  36. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  37. package/build/components/inserter/search-results.native.js +4 -1
  38. package/build/components/inserter/search-results.native.js.map +1 -1
  39. package/build/components/link-control/index.js +15 -15
  40. package/build/components/link-control/index.js.map +1 -1
  41. package/build/components/link-control/settings-drawer.js +72 -30
  42. package/build/components/link-control/settings-drawer.js.map +1 -1
  43. package/build/components/link-control/settings.js +52 -0
  44. package/build/components/link-control/settings.js.map +1 -0
  45. package/build/components/list-view/index.js +6 -1
  46. package/build/components/list-view/index.js.map +1 -1
  47. package/build/components/off-canvas-editor/block-contents.js +5 -4
  48. package/build/components/off-canvas-editor/block-contents.js.map +1 -1
  49. package/build/components/off-canvas-editor/leaf-more-menu.js +116 -0
  50. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -0
  51. package/build/components/off-canvas-editor/link-ui.js +1 -0
  52. package/build/components/off-canvas-editor/link-ui.js.map +1 -1
  53. package/build/components/provider/index.js +2 -2
  54. package/build/components/provider/index.js.map +1 -1
  55. package/build/components/rich-text/index.js +0 -2
  56. package/build/components/rich-text/index.js.map +1 -1
  57. package/build/components/url-input/index.js +2 -2
  58. package/build/components/url-input/index.js.map +1 -1
  59. package/build/components/url-popover/index.js +6 -1
  60. package/build/components/url-popover/index.js.map +1 -1
  61. package/build/hooks/dimensions.js +8 -2
  62. package/build/hooks/dimensions.js.map +1 -1
  63. package/build/hooks/font-family.js +2 -76
  64. package/build/hooks/font-family.js.map +1 -1
  65. package/build/hooks/font-size.js +3 -51
  66. package/build/hooks/font-size.js.map +1 -1
  67. package/build/hooks/gap.js +2 -1
  68. package/build/hooks/gap.js.map +1 -1
  69. package/build/hooks/index.js +2 -0
  70. package/build/hooks/index.js.map +1 -1
  71. package/build/hooks/line-height.js +0 -42
  72. package/build/hooks/line-height.js.map +1 -1
  73. package/build/hooks/metadata.js +6 -0
  74. package/build/hooks/metadata.js.map +1 -1
  75. package/build/hooks/position.js +6 -1
  76. package/build/hooks/position.js.map +1 -1
  77. package/build/hooks/typography.js +112 -127
  78. package/build/hooks/typography.js.map +1 -1
  79. package/build/index.js +6 -6
  80. package/build/index.js.map +1 -1
  81. package/build/layouts/flow.js +23 -2
  82. package/build/layouts/flow.js.map +1 -1
  83. package/build/lock-unlock.js +19 -0
  84. package/build/lock-unlock.js.map +1 -0
  85. package/build/{experiments.js → private-apis.js} +12 -19
  86. package/build/private-apis.js.map +1 -0
  87. package/build/{experiments.native.js → private-apis.native.js} +9 -19
  88. package/build/private-apis.native.js.map +1 -0
  89. package/build/store/index.js +3 -3
  90. package/build/store/index.js.map +1 -1
  91. package/build/store/selectors.js +18 -1
  92. package/build/store/selectors.js.map +1 -1
  93. package/build-module/components/block-actions/index.js +2 -7
  94. package/build-module/components/block-actions/index.js.map +1 -1
  95. package/build-module/components/block-alignment-control/use-available-alignments.js +5 -3
  96. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  97. package/build-module/components/block-popover/inbetween.js +10 -33
  98. package/build-module/components/block-popover/inbetween.js.map +1 -1
  99. package/build-module/components/block-tools/selected-block-popover.js +1 -1
  100. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  101. package/build-module/components/block-types-list/index.native.js +2 -0
  102. package/build-module/components/block-types-list/index.native.js.map +1 -1
  103. package/build-module/components/colors-gradients/control.js +6 -3
  104. package/build-module/components/colors-gradients/control.js.map +1 -1
  105. package/build-module/components/font-appearance-control/index.js +2 -1
  106. package/build-module/components/font-appearance-control/index.js.map +1 -1
  107. package/build-module/components/global-styles/hooks.js +100 -46
  108. package/build-module/components/global-styles/hooks.js.map +1 -1
  109. package/build-module/components/global-styles/index.js +2 -1
  110. package/build-module/components/global-styles/index.js.map +1 -1
  111. package/build-module/components/global-styles/typography-panel.js +400 -0
  112. package/build-module/components/global-styles/typography-panel.js.map +1 -0
  113. package/build-module/components/global-styles/use-global-styles-output.js +6 -2
  114. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  115. package/build-module/components/iframe/index.js +17 -11
  116. package/build-module/components/iframe/index.js.map +1 -1
  117. package/build-module/components/image-editor/aspect-ratio-dropdown.js +2 -1
  118. package/build-module/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  119. package/build-module/components/image-size-control/index.js +7 -12
  120. package/build-module/components/image-size-control/index.js.map +1 -1
  121. package/build-module/components/inserter/block-patterns-tab.js +9 -15
  122. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  123. package/build-module/components/inserter/block-types-tab.native.js +3 -1
  124. package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
  125. package/build-module/components/inserter/reusable-blocks-tab.native.js +3 -1
  126. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  127. package/build-module/components/inserter/search-results.native.js +3 -1
  128. package/build-module/components/inserter/search-results.native.js.map +1 -1
  129. package/build-module/components/link-control/index.js +16 -16
  130. package/build-module/components/link-control/index.js.map +1 -1
  131. package/build-module/components/link-control/settings-drawer.js +68 -30
  132. package/build-module/components/link-control/settings-drawer.js.map +1 -1
  133. package/build-module/components/link-control/settings.js +43 -0
  134. package/build-module/components/link-control/settings.js.map +1 -0
  135. package/build-module/components/list-view/index.js +6 -1
  136. package/build-module/components/list-view/index.js.map +1 -1
  137. package/build-module/components/off-canvas-editor/block-contents.js +4 -3
  138. package/build-module/components/off-canvas-editor/block-contents.js.map +1 -1
  139. package/build-module/components/off-canvas-editor/leaf-more-menu.js +99 -0
  140. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -0
  141. package/build-module/components/off-canvas-editor/link-ui.js +1 -0
  142. package/build-module/components/off-canvas-editor/link-ui.js.map +1 -1
  143. package/build-module/components/provider/index.js +1 -1
  144. package/build-module/components/provider/index.js.map +1 -1
  145. package/build-module/components/rich-text/index.js +0 -2
  146. package/build-module/components/rich-text/index.js.map +1 -1
  147. package/build-module/components/url-input/index.js +2 -2
  148. package/build-module/components/url-input/index.js.map +1 -1
  149. package/build-module/components/url-popover/index.js +6 -2
  150. package/build-module/components/url-popover/index.js.map +1 -1
  151. package/build-module/hooks/dimensions.js +7 -1
  152. package/build-module/hooks/dimensions.js.map +1 -1
  153. package/build-module/hooks/font-family.js +3 -69
  154. package/build-module/hooks/font-family.js.map +1 -1
  155. package/build-module/hooks/font-size.js +6 -47
  156. package/build-module/hooks/font-size.js.map +1 -1
  157. package/build-module/hooks/gap.js +3 -2
  158. package/build-module/hooks/gap.js.map +1 -1
  159. package/build-module/hooks/index.js +1 -0
  160. package/build-module/hooks/index.js.map +1 -1
  161. package/build-module/hooks/line-height.js +0 -38
  162. package/build-module/hooks/line-height.js.map +1 -1
  163. package/build-module/hooks/metadata.js +6 -0
  164. package/build-module/hooks/metadata.js.map +1 -1
  165. package/build-module/hooks/position.js +5 -1
  166. package/build-module/hooks/position.js.map +1 -1
  167. package/build-module/hooks/typography.js +110 -123
  168. package/build-module/hooks/typography.js.map +1 -1
  169. package/build-module/index.js +1 -1
  170. package/build-module/index.js.map +1 -1
  171. package/build-module/layouts/flow.js +23 -2
  172. package/build-module/layouts/flow.js.map +1 -1
  173. package/build-module/lock-unlock.js +9 -0
  174. package/build-module/lock-unlock.js.map +1 -0
  175. package/build-module/private-apis.js +19 -0
  176. package/build-module/private-apis.js.map +1 -0
  177. package/build-module/private-apis.native.js +15 -0
  178. package/build-module/private-apis.native.js.map +1 -0
  179. package/build-module/store/index.js +1 -1
  180. package/build-module/store/index.js.map +1 -1
  181. package/build-module/store/selectors.js +18 -1
  182. package/build-module/store/selectors.js.map +1 -1
  183. package/build-style/style-rtl.css +35 -22
  184. package/build-style/style.css +35 -22
  185. package/package.json +31 -31
  186. package/src/components/block-actions/index.js +0 -9
  187. package/src/components/block-alignment-control/use-available-alignments.js +17 -12
  188. package/src/components/block-popover/inbetween.js +21 -53
  189. package/src/components/block-tools/selected-block-popover.js +1 -1
  190. package/src/components/block-types-list/index.native.js +2 -0
  191. package/src/components/colors-gradients/control.js +3 -0
  192. package/src/components/font-appearance-control/index.js +1 -1
  193. package/src/components/global-styles/hooks.js +186 -66
  194. package/src/components/global-styles/index.js +5 -0
  195. package/src/components/global-styles/typography-panel.js +403 -0
  196. package/src/components/global-styles/use-global-styles-output.js +6 -2
  197. package/src/components/iframe/index.js +20 -18
  198. package/src/components/image-editor/aspect-ratio-dropdown.js +1 -0
  199. package/src/components/image-size-control/index.js +10 -12
  200. package/src/components/image-size-control/style.scss +3 -21
  201. package/src/components/inserter/block-patterns-tab.js +9 -23
  202. package/src/components/inserter/block-types-tab.native.js +2 -0
  203. package/src/components/inserter/reusable-blocks-tab.native.js +2 -0
  204. package/src/components/inserter/search-results.native.js +2 -0
  205. package/src/components/link-control/index.js +22 -22
  206. package/src/components/link-control/settings-drawer.js +85 -30
  207. package/src/components/link-control/settings.js +41 -0
  208. package/src/components/link-control/style.scss +39 -7
  209. package/src/components/link-control/test/index.js +213 -4
  210. package/src/components/list-view/index.js +5 -0
  211. package/src/components/off-canvas-editor/block-contents.js +3 -2
  212. package/src/components/off-canvas-editor/leaf-more-menu.js +115 -0
  213. package/src/components/off-canvas-editor/link-ui.js +1 -0
  214. package/src/components/provider/index.js +1 -1
  215. package/src/components/rich-text/index.js +0 -2
  216. package/src/components/url-input/index.js +3 -2
  217. package/src/components/url-popover/index.js +8 -2
  218. package/src/hooks/dimensions.js +13 -1
  219. package/src/hooks/font-family.js +0 -58
  220. package/src/hooks/font-size.js +1 -36
  221. package/src/hooks/gap.js +9 -2
  222. package/src/hooks/index.js +1 -0
  223. package/src/hooks/line-height.js +0 -33
  224. package/src/hooks/metadata.js +4 -0
  225. package/src/hooks/position.js +7 -1
  226. package/src/hooks/typography.js +133 -212
  227. package/src/index.js +1 -1
  228. package/src/layouts/flow.js +16 -1
  229. package/src/lock-unlock.js +10 -0
  230. package/src/private-apis.js +19 -0
  231. package/src/private-apis.native.js +15 -0
  232. package/src/store/index.js +1 -1
  233. package/src/store/selectors.js +16 -1
  234. package/tsconfig.json +20 -1
  235. package/build/experiments.js.map +0 -1
  236. package/build/experiments.native.js.map +0 -1
  237. package/build/hooks/font-appearance.js +0 -188
  238. package/build/hooks/font-appearance.js.map +0 -1
  239. package/build/hooks/letter-spacing.js +0 -129
  240. package/build/hooks/letter-spacing.js.map +0 -1
  241. package/build/hooks/text-decoration.js +0 -130
  242. package/build/hooks/text-decoration.js.map +0 -1
  243. package/build/hooks/text-transform.js +0 -130
  244. package/build/hooks/text-transform.js.map +0 -1
  245. package/build-module/experiments.js +0 -25
  246. package/build-module/experiments.js.map +0 -1
  247. package/build-module/experiments.native.js +0 -23
  248. package/build-module/experiments.native.js.map +0 -1
  249. package/build-module/hooks/font-appearance.js +0 -161
  250. package/build-module/hooks/font-appearance.js.map +0 -1
  251. package/build-module/hooks/letter-spacing.js +0 -107
  252. package/build-module/hooks/letter-spacing.js.map +0 -1
  253. package/build-module/hooks/text-decoration.js +0 -108
  254. package/build-module/hooks/text-decoration.js.map +0 -1
  255. package/build-module/hooks/text-transform.js +0 -108
  256. package/build-module/hooks/text-transform.js.map +0 -1
  257. package/src/experiments.js +0 -27
  258. package/src/experiments.native.js +0 -25
  259. package/src/hooks/font-appearance.js +0 -146
  260. package/src/hooks/letter-spacing.js +0 -101
  261. package/src/hooks/text-decoration.js +0 -102
  262. package/src/hooks/text-transform.js +0 -101
@@ -36,7 +36,7 @@ var _mobileTabNavigation = _interopRequireDefault(require("./mobile-tab-navigati
36
36
  /**
37
37
  * Internal dependencies
38
38
  */
39
- // Preffered order of pattern categories. Any other categories should
39
+ // Preferred order of pattern categories. Any other categories should
40
40
  // be at the bottom without any re-ordering.
41
41
  const patternCategoriesOrder = ['featured', 'posts', 'text', 'gallery', 'call-to-action', 'banner', 'header', 'footer'];
42
42
 
@@ -57,24 +57,18 @@ function usePatternsCategories(rootClientId) {
57
57
  return (_pattern$categories = pattern.categories) === null || _pattern$categories === void 0 ? void 0 : _pattern$categories.includes(category.name);
58
58
  })).sort((_ref, _ref2) => {
59
59
  let {
60
- name: currentName
60
+ name: aName
61
61
  } = _ref;
62
62
  let {
63
- name: nextName
63
+ name: bName
64
64
  } = _ref2;
65
+ // Sort categories according to `patternCategoriesOrder`.
66
+ let aIndex = patternCategoriesOrder.indexOf(aName);
67
+ let bIndex = patternCategoriesOrder.indexOf(bName); // All other categories should come after that.
65
68
 
66
- // The pattern categories should be ordered as follows:
67
- // 1. The categories from `patternCategoriesOrder` in that specific order should be at the top.
68
- // 2. The rest categories should be at the bottom without any re-ordering.
69
- if (![currentName, nextName].some(categoryName => patternCategoriesOrder.includes(categoryName))) {
70
- return 0;
71
- }
72
-
73
- if ([currentName, nextName].every(categoryName => patternCategoriesOrder.includes(categoryName))) {
74
- return patternCategoriesOrder.indexOf(currentName) - patternCategoriesOrder.indexOf(nextName);
75
- }
76
-
77
- return patternCategoriesOrder.includes(currentName) ? -1 : 1;
69
+ if (aIndex < 0) aIndex = patternCategoriesOrder.length;
70
+ if (bIndex < 0) bIndex = patternCategoriesOrder.length;
71
+ return aIndex - bIndex;
78
72
  });
79
73
 
80
74
  if (allPatterns.some(pattern => !hasRegisteredCategory(pattern)) && !categories.find(category => category.name === 'uncategorized')) {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-tab.js"],"names":["patternCategoriesOrder","usePatternsCategories","rootClientId","allPatterns","allCategories","undefined","hasRegisteredCategory","pattern","categories","length","some","cat","category","name","populatedCategories","filter","includes","sort","currentName","nextName","categoryName","every","indexOf","find","push","label","BlockPatternsCategoryDialog","onInsert","onHover","showTitlesAsTooltip","container","timeout","setTimeout","firstTabbable","focus","tabbable","current","clearTimeout","BlockPatternsCategoryPanel","onClick","availableCategories","currentCategoryPatterns","availablePatternCategories","availableCategory","currentShownPatterns","description","BlockPatternsTabs","onSelectCategory","selectedCategory","showPatternsExplorer","setShowPatternsExplorer","initialCategory","isMobile","map","chevronRight"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseMemo,\n\tuseState,\n\tuseCallback,\n\tuseRef,\n\tuseEffect,\n} from '@wordpress/element';\nimport { _x, __ } from '@wordpress/i18n';\nimport { useAsyncList, useViewportMatch } from '@wordpress/compose';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalHStack as HStack,\n\tFlexBlock,\n\tButton,\n} from '@wordpress/components';\nimport { Icon, chevronRight } from '@wordpress/icons';\nimport { focus } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport usePatternsState from './hooks/use-patterns-state';\nimport BlockPatternList from '../block-patterns-list';\nimport PatternsExplorerModal from './block-patterns-explorer/explorer';\nimport MobileTabNavigation from './mobile-tab-navigation';\n\n// Preffered order of pattern categories. Any other categories should\n// be at the bottom without any re-ordering.\nconst patternCategoriesOrder = [\n\t'featured',\n\t'posts',\n\t'text',\n\t'gallery',\n\t'call-to-action',\n\t'banner',\n\t'header',\n\t'footer',\n];\n\nfunction usePatternsCategories( rootClientId ) {\n\tconst [ allPatterns, allCategories ] = usePatternsState(\n\t\tundefined,\n\t\trootClientId\n\t);\n\n\tconst hasRegisteredCategory = useCallback(\n\t\t( pattern ) => {\n\t\t\tif ( ! pattern.categories || ! pattern.categories.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn pattern.categories.some( ( cat ) =>\n\t\t\t\tallCategories.some( ( category ) => category.name === cat )\n\t\t\t);\n\t\t},\n\t\t[ allCategories ]\n\t);\n\n\t// Remove any empty categories.\n\tconst populatedCategories = useMemo( () => {\n\t\tconst categories = allCategories\n\t\t\t.filter( ( category ) =>\n\t\t\t\tallPatterns.some( ( pattern ) =>\n\t\t\t\t\tpattern.categories?.includes( category.name )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.sort( ( { name: currentName }, { name: nextName } ) => {\n\t\t\t\t// The pattern categories should be ordered as follows:\n\t\t\t\t// 1. The categories from `patternCategoriesOrder` in that specific order should be at the top.\n\t\t\t\t// 2. The rest categories should be at the bottom without any re-ordering.\n\t\t\t\tif (\n\t\t\t\t\t! [ currentName, nextName ].some( ( categoryName ) =>\n\t\t\t\t\t\tpatternCategoriesOrder.includes( categoryName )\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t[ currentName, nextName ].every( ( categoryName ) =>\n\t\t\t\t\t\tpatternCategoriesOrder.includes( categoryName )\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tpatternCategoriesOrder.indexOf( currentName ) -\n\t\t\t\t\t\tpatternCategoriesOrder.indexOf( nextName )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn patternCategoriesOrder.includes( currentName ) ? -1 : 1;\n\t\t\t} );\n\n\t\tif (\n\t\t\tallPatterns.some(\n\t\t\t\t( pattern ) => ! hasRegisteredCategory( pattern )\n\t\t\t) &&\n\t\t\t! categories.find(\n\t\t\t\t( category ) => category.name === 'uncategorized'\n\t\t\t)\n\t\t) {\n\t\t\tcategories.push( {\n\t\t\t\tname: 'uncategorized',\n\t\t\t\tlabel: _x( 'Uncategorized' ),\n\t\t\t} );\n\t\t}\n\n\t\treturn categories;\n\t}, [ allPatterns, allCategories ] );\n\n\treturn populatedCategories;\n}\n\nexport function BlockPatternsCategoryDialog( {\n\trootClientId,\n\tonInsert,\n\tonHover,\n\tcategory,\n\tshowTitlesAsTooltip,\n} ) {\n\tconst container = useRef();\n\n\tuseEffect( () => {\n\t\tconst timeout = setTimeout( () => {\n\t\t\tconst [ firstTabbable ] = focus.tabbable.find( container.current );\n\t\t\tfirstTabbable?.focus();\n\t\t} );\n\t\treturn () => clearTimeout( timeout );\n\t}, [ category ] );\n\n\treturn (\n\t\t<div\n\t\t\tref={ container }\n\t\t\tclassName=\"block-editor-inserter__patterns-category-dialog\"\n\t\t>\n\t\t\t<BlockPatternsCategoryPanel\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tcategory={ category }\n\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nexport function BlockPatternsCategoryPanel( {\n\trootClientId,\n\tonInsert,\n\tonHover,\n\tcategory,\n\tshowTitlesAsTooltip,\n} ) {\n\tconst [ allPatterns, , onClick ] = usePatternsState(\n\t\tonInsert,\n\t\trootClientId\n\t);\n\n\tconst availableCategories = usePatternsCategories( rootClientId );\n\tconst currentCategoryPatterns = useMemo(\n\t\t() =>\n\t\t\tallPatterns.filter( ( pattern ) => {\n\t\t\t\tif ( category.name !== 'uncategorized' ) {\n\t\t\t\t\treturn pattern.categories?.includes( category.name );\n\t\t\t\t}\n\n\t\t\t\t// The uncategorized category should show all the patterns without any category\n\t\t\t\t// or with no available category.\n\t\t\t\tconst availablePatternCategories =\n\t\t\t\t\tpattern.categories?.filter( ( cat ) =>\n\t\t\t\t\t\tavailableCategories.find(\n\t\t\t\t\t\t\t( availableCategory ) =>\n\t\t\t\t\t\t\t\tavailableCategory.name === cat\n\t\t\t\t\t\t)\n\t\t\t\t\t) ?? [];\n\n\t\t\t\treturn availablePatternCategories.length === 0;\n\t\t\t} ),\n\t\t[ allPatterns, category ]\n\t);\n\n\tconst currentShownPatterns = useAsyncList( currentCategoryPatterns );\n\n\t// Hide block pattern preview on unmount.\n\tuseEffect( () => () => onHover( null ), [] );\n\n\tif ( ! currentCategoryPatterns.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"block-editor-inserter__patterns-category-panel\">\n\t\t\t<div className=\"block-editor-inserter__patterns-category-panel-title\">\n\t\t\t\t{ category.label }\n\t\t\t</div>\n\t\t\t<p>{ category.description }</p>\n\t\t\t<BlockPatternList\n\t\t\t\tshownPatterns={ currentShownPatterns }\n\t\t\t\tblockPatterns={ currentCategoryPatterns }\n\t\t\t\tonClickPattern={ onClick }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tlabel={ category.label }\n\t\t\t\torientation=\"vertical\"\n\t\t\t\tcategory={ category.label }\n\t\t\t\tisDraggable\n\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction BlockPatternsTabs( {\n\tonSelectCategory,\n\tselectedCategory,\n\tonInsert,\n\trootClientId,\n} ) {\n\tconst [ showPatternsExplorer, setShowPatternsExplorer ] = useState( false );\n\tconst categories = usePatternsCategories( rootClientId );\n\tconst initialCategory = selectedCategory || categories[ 0 ];\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn (\n\t\t<>\n\t\t\t{ ! isMobile && (\n\t\t\t\t<div className=\"block-editor-inserter__block-patterns-tabs-container\">\n\t\t\t\t\t<nav aria-label={ __( 'Block pattern categories' ) }>\n\t\t\t\t\t\t<ItemGroup\n\t\t\t\t\t\t\trole=\"list\"\n\t\t\t\t\t\t\tclassName=\"block-editor-inserter__block-patterns-tabs\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\t\t\trole=\"listitem\"\n\t\t\t\t\t\t\t\t\tkey={ category.name }\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tonSelectCategory( category )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\tcategory === selectedCategory\n\t\t\t\t\t\t\t\t\t\t\t? 'block-editor-inserter__patterns-category block-editor-inserter__patterns-selected-category'\n\t\t\t\t\t\t\t\t\t\t\t: 'block-editor-inserter__patterns-category'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taria-label={ category.label }\n\t\t\t\t\t\t\t\t\taria-current={\n\t\t\t\t\t\t\t\t\t\tcategory === selectedCategory\n\t\t\t\t\t\t\t\t\t\t\t? 'true'\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<HStack>\n\t\t\t\t\t\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t\t\t\t\t\t<Icon icon={ chevronRight } />\n\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t<div role=\"listitem\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-inserter__patterns-explore-button\"\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tsetShowPatternsExplorer( true )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Explore all patterns' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t</nav>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ isMobile && (\n\t\t\t\t<MobileTabNavigation categories={ categories }>\n\t\t\t\t\t{ ( category ) => (\n\t\t\t\t\t\t<BlockPatternsCategoryPanel\n\t\t\t\t\t\t\tonInsert={ onInsert }\n\t\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\t\tcategory={ category }\n\t\t\t\t\t\t\tshowTitlesAsTooltip={ false }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</MobileTabNavigation>\n\t\t\t) }\n\t\t\t{ showPatternsExplorer && (\n\t\t\t\t<PatternsExplorerModal\n\t\t\t\t\tinitialCategory={ initialCategory }\n\t\t\t\t\tpatternCategories={ categories }\n\t\t\t\t\tonModalClose={ () => setShowPatternsExplorer( false ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default BlockPatternsTabs;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/block-patterns-tab.js"],"names":["patternCategoriesOrder","usePatternsCategories","rootClientId","allPatterns","allCategories","undefined","hasRegisteredCategory","pattern","categories","length","some","cat","category","name","populatedCategories","filter","includes","sort","aName","bName","aIndex","indexOf","bIndex","find","push","label","BlockPatternsCategoryDialog","onInsert","onHover","showTitlesAsTooltip","container","timeout","setTimeout","firstTabbable","focus","tabbable","current","clearTimeout","BlockPatternsCategoryPanel","onClick","availableCategories","currentCategoryPatterns","availablePatternCategories","availableCategory","currentShownPatterns","description","BlockPatternsTabs","onSelectCategory","selectedCategory","showPatternsExplorer","setShowPatternsExplorer","initialCategory","isMobile","map","chevronRight"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseMemo,\n\tuseState,\n\tuseCallback,\n\tuseRef,\n\tuseEffect,\n} from '@wordpress/element';\nimport { _x, __ } from '@wordpress/i18n';\nimport { useAsyncList, useViewportMatch } from '@wordpress/compose';\nimport {\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalItem as Item,\n\t__experimentalHStack as HStack,\n\tFlexBlock,\n\tButton,\n} from '@wordpress/components';\nimport { Icon, chevronRight } from '@wordpress/icons';\nimport { focus } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport usePatternsState from './hooks/use-patterns-state';\nimport BlockPatternList from '../block-patterns-list';\nimport PatternsExplorerModal from './block-patterns-explorer/explorer';\nimport MobileTabNavigation from './mobile-tab-navigation';\n\n// Preferred order of pattern categories. Any other categories should\n// be at the bottom without any re-ordering.\nconst patternCategoriesOrder = [\n\t'featured',\n\t'posts',\n\t'text',\n\t'gallery',\n\t'call-to-action',\n\t'banner',\n\t'header',\n\t'footer',\n];\n\nfunction usePatternsCategories( rootClientId ) {\n\tconst [ allPatterns, allCategories ] = usePatternsState(\n\t\tundefined,\n\t\trootClientId\n\t);\n\n\tconst hasRegisteredCategory = useCallback(\n\t\t( pattern ) => {\n\t\t\tif ( ! pattern.categories || ! pattern.categories.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn pattern.categories.some( ( cat ) =>\n\t\t\t\tallCategories.some( ( category ) => category.name === cat )\n\t\t\t);\n\t\t},\n\t\t[ allCategories ]\n\t);\n\n\t// Remove any empty categories.\n\tconst populatedCategories = useMemo( () => {\n\t\tconst categories = allCategories\n\t\t\t.filter( ( category ) =>\n\t\t\t\tallPatterns.some( ( pattern ) =>\n\t\t\t\t\tpattern.categories?.includes( category.name )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.sort( ( { name: aName }, { name: bName } ) => {\n\t\t\t\t// Sort categories according to `patternCategoriesOrder`.\n\t\t\t\tlet aIndex = patternCategoriesOrder.indexOf( aName );\n\t\t\t\tlet bIndex = patternCategoriesOrder.indexOf( bName );\n\t\t\t\t// All other categories should come after that.\n\t\t\t\tif ( aIndex < 0 ) aIndex = patternCategoriesOrder.length;\n\t\t\t\tif ( bIndex < 0 ) bIndex = patternCategoriesOrder.length;\n\t\t\t\treturn aIndex - bIndex;\n\t\t\t} );\n\n\t\tif (\n\t\t\tallPatterns.some(\n\t\t\t\t( pattern ) => ! hasRegisteredCategory( pattern )\n\t\t\t) &&\n\t\t\t! categories.find(\n\t\t\t\t( category ) => category.name === 'uncategorized'\n\t\t\t)\n\t\t) {\n\t\t\tcategories.push( {\n\t\t\t\tname: 'uncategorized',\n\t\t\t\tlabel: _x( 'Uncategorized' ),\n\t\t\t} );\n\t\t}\n\n\t\treturn categories;\n\t}, [ allPatterns, allCategories ] );\n\n\treturn populatedCategories;\n}\n\nexport function BlockPatternsCategoryDialog( {\n\trootClientId,\n\tonInsert,\n\tonHover,\n\tcategory,\n\tshowTitlesAsTooltip,\n} ) {\n\tconst container = useRef();\n\n\tuseEffect( () => {\n\t\tconst timeout = setTimeout( () => {\n\t\t\tconst [ firstTabbable ] = focus.tabbable.find( container.current );\n\t\t\tfirstTabbable?.focus();\n\t\t} );\n\t\treturn () => clearTimeout( timeout );\n\t}, [ category ] );\n\n\treturn (\n\t\t<div\n\t\t\tref={ container }\n\t\t\tclassName=\"block-editor-inserter__patterns-category-dialog\"\n\t\t>\n\t\t\t<BlockPatternsCategoryPanel\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tcategory={ category }\n\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nexport function BlockPatternsCategoryPanel( {\n\trootClientId,\n\tonInsert,\n\tonHover,\n\tcategory,\n\tshowTitlesAsTooltip,\n} ) {\n\tconst [ allPatterns, , onClick ] = usePatternsState(\n\t\tonInsert,\n\t\trootClientId\n\t);\n\n\tconst availableCategories = usePatternsCategories( rootClientId );\n\tconst currentCategoryPatterns = useMemo(\n\t\t() =>\n\t\t\tallPatterns.filter( ( pattern ) => {\n\t\t\t\tif ( category.name !== 'uncategorized' ) {\n\t\t\t\t\treturn pattern.categories?.includes( category.name );\n\t\t\t\t}\n\n\t\t\t\t// The uncategorized category should show all the patterns without any category\n\t\t\t\t// or with no available category.\n\t\t\t\tconst availablePatternCategories =\n\t\t\t\t\tpattern.categories?.filter( ( cat ) =>\n\t\t\t\t\t\tavailableCategories.find(\n\t\t\t\t\t\t\t( availableCategory ) =>\n\t\t\t\t\t\t\t\tavailableCategory.name === cat\n\t\t\t\t\t\t)\n\t\t\t\t\t) ?? [];\n\n\t\t\t\treturn availablePatternCategories.length === 0;\n\t\t\t} ),\n\t\t[ allPatterns, category ]\n\t);\n\n\tconst currentShownPatterns = useAsyncList( currentCategoryPatterns );\n\n\t// Hide block pattern preview on unmount.\n\tuseEffect( () => () => onHover( null ), [] );\n\n\tif ( ! currentCategoryPatterns.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"block-editor-inserter__patterns-category-panel\">\n\t\t\t<div className=\"block-editor-inserter__patterns-category-panel-title\">\n\t\t\t\t{ category.label }\n\t\t\t</div>\n\t\t\t<p>{ category.description }</p>\n\t\t\t<BlockPatternList\n\t\t\t\tshownPatterns={ currentShownPatterns }\n\t\t\t\tblockPatterns={ currentCategoryPatterns }\n\t\t\t\tonClickPattern={ onClick }\n\t\t\t\tonHover={ onHover }\n\t\t\t\tlabel={ category.label }\n\t\t\t\torientation=\"vertical\"\n\t\t\t\tcategory={ category.label }\n\t\t\t\tisDraggable\n\t\t\t\tshowTitlesAsTooltip={ showTitlesAsTooltip }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction BlockPatternsTabs( {\n\tonSelectCategory,\n\tselectedCategory,\n\tonInsert,\n\trootClientId,\n} ) {\n\tconst [ showPatternsExplorer, setShowPatternsExplorer ] = useState( false );\n\tconst categories = usePatternsCategories( rootClientId );\n\tconst initialCategory = selectedCategory || categories[ 0 ];\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\treturn (\n\t\t<>\n\t\t\t{ ! isMobile && (\n\t\t\t\t<div className=\"block-editor-inserter__block-patterns-tabs-container\">\n\t\t\t\t\t<nav aria-label={ __( 'Block pattern categories' ) }>\n\t\t\t\t\t\t<ItemGroup\n\t\t\t\t\t\t\trole=\"list\"\n\t\t\t\t\t\t\tclassName=\"block-editor-inserter__block-patterns-tabs\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ categories.map( ( category ) => (\n\t\t\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\t\t\trole=\"listitem\"\n\t\t\t\t\t\t\t\t\tkey={ category.name }\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tonSelectCategory( category )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\tcategory === selectedCategory\n\t\t\t\t\t\t\t\t\t\t\t? 'block-editor-inserter__patterns-category block-editor-inserter__patterns-selected-category'\n\t\t\t\t\t\t\t\t\t\t\t: 'block-editor-inserter__patterns-category'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taria-label={ category.label }\n\t\t\t\t\t\t\t\t\taria-current={\n\t\t\t\t\t\t\t\t\t\tcategory === selectedCategory\n\t\t\t\t\t\t\t\t\t\t\t? 'true'\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<HStack>\n\t\t\t\t\t\t\t\t\t\t<FlexBlock>\n\t\t\t\t\t\t\t\t\t\t\t{ category.label }\n\t\t\t\t\t\t\t\t\t\t</FlexBlock>\n\t\t\t\t\t\t\t\t\t\t<Icon icon={ chevronRight } />\n\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t<div role=\"listitem\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-inserter__patterns-explore-button\"\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tsetShowPatternsExplorer( true )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Explore all patterns' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</ItemGroup>\n\t\t\t\t\t</nav>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ isMobile && (\n\t\t\t\t<MobileTabNavigation categories={ categories }>\n\t\t\t\t\t{ ( category ) => (\n\t\t\t\t\t\t<BlockPatternsCategoryPanel\n\t\t\t\t\t\t\tonInsert={ onInsert }\n\t\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\t\tcategory={ category }\n\t\t\t\t\t\t\tshowTitlesAsTooltip={ false }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</MobileTabNavigation>\n\t\t\t) }\n\t\t\t{ showPatternsExplorer && (\n\t\t\t\t<PatternsExplorerModal\n\t\t\t\t\tinitialCategory={ initialCategory }\n\t\t\t\t\tpatternCategories={ categories }\n\t\t\t\t\tonModalClose={ () => setShowPatternsExplorer( false ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default BlockPatternsTabs;\n"]}
@@ -9,6 +9,8 @@ exports.default = void 0;
9
9
 
10
10
  var _element = require("@wordpress/element");
11
11
 
12
+ var _i18n = require("@wordpress/i18n");
13
+
12
14
  var _blockTypesList = _interopRequireDefault(require("../block-types-list"));
13
15
 
14
16
  var _useClipboardBlock = _interopRequireDefault(require("./hooks/use-clipboard-block"));
@@ -74,7 +76,8 @@ function BlockTypesTab(_ref) {
74
76
  name: "Blocks",
75
77
  sections: sections,
76
78
  onSelect: handleSelect,
77
- listProps: listProps
79
+ listProps: listProps,
80
+ label: (0, _i18n.__)('Blocks menu')
78
81
  });
79
82
  }
80
83
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/block-types-tab.native.js"],"names":["getBlockNamespace","item","name","split","BlockTypesTab","onSelect","rootClientId","listProps","rawBlockTypes","collections","clipboardBlock","filteredBlockTypes","blockTypes","items","trackBlockTypeSelected","handleSelect","collectionSections","result","Object","keys","forEach","namespace","data","filter","length","push","key","metadata","icon","title","sections"],"mappings":";;;;;;;;;AAGA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AAZA;AACA;AACA;;AAGA;AACA;AACA;AAOA,MAAMA,iBAAiB,GAAKC,IAAF,IAAYA,IAAI,CAACC,IAAL,CAAUC,KAAV,CAAiB,GAAjB,EAAwB,CAAxB,CAAtC;;AAEA,SAASC,aAAT,OAAgE;AAAA,MAAxC;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,YAAZ;AAA0BC,IAAAA;AAA1B,GAAwC;AAC/D,QAAM,CAAEC,aAAF,GAAmBC,WAAnB,IAAmC,iCACxCH,YADwC,EAExCD,QAFwC,CAAzC;AAIA,QAAMK,cAAc,GAAG,gCAAmBJ,YAAnB,CAAvB;AACA,QAAMK,kBAAkB,GAAG,gCAAqBH,aAArB,CAA3B;AACA,QAAMI,UAAU,GAAGF,cAAc,GAC9B,CAAEA,cAAF,EAAkB,GAAGC,kBAArB,CAD8B,GAE9BA,kBAFH;AAGA,QAAM;AAAEE,IAAAA,KAAF;AAASC,IAAAA;AAAT,MACL,sCAAyBF,UAAzB,CADD;;AAGA,QAAMG,YAAY,GAAG,YAAe;AACnCD,IAAAA,sBAAsB,CAAE,YAAF,CAAtB;AACAT,IAAAA,QAAQ,CAAE,YAAF,CAAR;AACA,GAHD;;AAKA,QAAMW,kBAAkB,GAAG,sBAAS,MAAM;AACzC,UAAMC,MAAM,GAAG,EAAf;AACAC,IAAAA,MAAM,CAACC,IAAP,CAAaV,WAAb,EAA2BW,OAA3B,CAAsCC,SAAF,IAAiB;AACpD,YAAMC,IAAI,GAAGT,KAAK,CAACU,MAAN,CACVtB,IAAF,IAAYD,iBAAiB,CAAEC,IAAF,CAAjB,KAA8BoB,SAD9B,CAAb;;AAGA,UAAKC,IAAI,CAACE,MAAL,GAAc,CAAnB,EAAuB;AACtBP,QAAAA,MAAM,CAACQ,IAAP,CACC,kCAAuB;AACtBC,UAAAA,GAAG,EAAG,cAAcL,SAAW,EADT;AAEtBM,UAAAA,QAAQ,EAAE;AACTC,YAAAA,IAAI,EAAEnB,WAAW,CAAEY,SAAF,CAAX,CAAyBO,IADtB;AAETC,YAAAA,KAAK,EAAEpB,WAAW,CAAEY,SAAF,CAAX,CAAyBQ;AAFvB,WAFY;AAMtBhB,UAAAA,KAAK,EAAES;AANe,SAAvB,CADD;AAUA;AACD,KAhBD;AAkBA,WAAOL,MAAP;AACA,GArB0B,EAqBxB,CAAEJ,KAAF,EAASJ,WAAT,CArBwB,CAA3B;AAuBA,QAAMqB,QAAQ,GAAG,CAChB,kCAAuB;AAAEJ,IAAAA,GAAG,EAAE,SAAP;AAAkBb,IAAAA;AAAlB,GAAvB,CADgB,EAEhB,GAAGG,kBAFa,CAAjB;AAKA,SACC,4BAAC,uBAAD;AACC,IAAA,IAAI,EAAC,QADN;AAEC,IAAA,QAAQ,EAAGc,QAFZ;AAGC,IAAA,QAAQ,EAAGf,YAHZ;AAIC,IAAA,SAAS,EAAGR;AAJb,IADD;AAQA;;eAEcH,a","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport useClipboardBlock from './hooks/use-clipboard-block';\nimport useBlockTypeImpressions from './hooks/use-block-type-impressions';\nimport { createInserterSection, filterInserterItems } from './utils';\nimport useBlockTypesState from './hooks/use-block-types-state';\n\nconst getBlockNamespace = ( item ) => item.name.split( '/' )[ 0 ];\n\nfunction BlockTypesTab( { onSelect, rootClientId, listProps } ) {\n\tconst [ rawBlockTypes, , collections ] = useBlockTypesState(\n\t\trootClientId,\n\t\tonSelect\n\t);\n\tconst clipboardBlock = useClipboardBlock( rootClientId );\n\tconst filteredBlockTypes = filterInserterItems( rawBlockTypes );\n\tconst blockTypes = clipboardBlock\n\t\t? [ clipboardBlock, ...filteredBlockTypes ]\n\t\t: filteredBlockTypes;\n\tconst { items, trackBlockTypeSelected } =\n\t\tuseBlockTypeImpressions( blockTypes );\n\n\tconst handleSelect = ( ...args ) => {\n\t\ttrackBlockTypeSelected( ...args );\n\t\tonSelect( ...args );\n\t};\n\n\tconst collectionSections = useMemo( () => {\n\t\tconst result = [];\n\t\tObject.keys( collections ).forEach( ( namespace ) => {\n\t\t\tconst data = items.filter(\n\t\t\t\t( item ) => getBlockNamespace( item ) === namespace\n\t\t\t);\n\t\t\tif ( data.length > 0 ) {\n\t\t\t\tresult.push(\n\t\t\t\t\tcreateInserterSection( {\n\t\t\t\t\t\tkey: `collection-${ namespace }`,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\ticon: collections[ namespace ].icon,\n\t\t\t\t\t\t\ttitle: collections[ namespace ].title,\n\t\t\t\t\t\t},\n\t\t\t\t\t\titems: data,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t\treturn result;\n\t}, [ items, collections ] );\n\n\tconst sections = [\n\t\tcreateInserterSection( { key: 'default', items } ),\n\t\t...collectionSections,\n\t];\n\n\treturn (\n\t\t<BlockTypesList\n\t\t\tname=\"Blocks\"\n\t\t\tsections={ sections }\n\t\t\tonSelect={ handleSelect }\n\t\t\tlistProps={ listProps }\n\t\t/>\n\t);\n}\n\nexport default BlockTypesTab;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/block-types-tab.native.js"],"names":["getBlockNamespace","item","name","split","BlockTypesTab","onSelect","rootClientId","listProps","rawBlockTypes","collections","clipboardBlock","filteredBlockTypes","blockTypes","items","trackBlockTypeSelected","handleSelect","collectionSections","result","Object","keys","forEach","namespace","data","filter","length","push","key","metadata","icon","title","sections"],"mappings":";;;;;;;;;AAGA;;AACA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AAbA;AACA;AACA;;AAIA;AACA;AACA;AAOA,MAAMA,iBAAiB,GAAKC,IAAF,IAAYA,IAAI,CAACC,IAAL,CAAUC,KAAV,CAAiB,GAAjB,EAAwB,CAAxB,CAAtC;;AAEA,SAASC,aAAT,OAAgE;AAAA,MAAxC;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,YAAZ;AAA0BC,IAAAA;AAA1B,GAAwC;AAC/D,QAAM,CAAEC,aAAF,GAAmBC,WAAnB,IAAmC,iCACxCH,YADwC,EAExCD,QAFwC,CAAzC;AAIA,QAAMK,cAAc,GAAG,gCAAmBJ,YAAnB,CAAvB;AACA,QAAMK,kBAAkB,GAAG,gCAAqBH,aAArB,CAA3B;AACA,QAAMI,UAAU,GAAGF,cAAc,GAC9B,CAAEA,cAAF,EAAkB,GAAGC,kBAArB,CAD8B,GAE9BA,kBAFH;AAGA,QAAM;AAAEE,IAAAA,KAAF;AAASC,IAAAA;AAAT,MACL,sCAAyBF,UAAzB,CADD;;AAGA,QAAMG,YAAY,GAAG,YAAe;AACnCD,IAAAA,sBAAsB,CAAE,YAAF,CAAtB;AACAT,IAAAA,QAAQ,CAAE,YAAF,CAAR;AACA,GAHD;;AAKA,QAAMW,kBAAkB,GAAG,sBAAS,MAAM;AACzC,UAAMC,MAAM,GAAG,EAAf;AACAC,IAAAA,MAAM,CAACC,IAAP,CAAaV,WAAb,EAA2BW,OAA3B,CAAsCC,SAAF,IAAiB;AACpD,YAAMC,IAAI,GAAGT,KAAK,CAACU,MAAN,CACVtB,IAAF,IAAYD,iBAAiB,CAAEC,IAAF,CAAjB,KAA8BoB,SAD9B,CAAb;;AAGA,UAAKC,IAAI,CAACE,MAAL,GAAc,CAAnB,EAAuB;AACtBP,QAAAA,MAAM,CAACQ,IAAP,CACC,kCAAuB;AACtBC,UAAAA,GAAG,EAAG,cAAcL,SAAW,EADT;AAEtBM,UAAAA,QAAQ,EAAE;AACTC,YAAAA,IAAI,EAAEnB,WAAW,CAAEY,SAAF,CAAX,CAAyBO,IADtB;AAETC,YAAAA,KAAK,EAAEpB,WAAW,CAAEY,SAAF,CAAX,CAAyBQ;AAFvB,WAFY;AAMtBhB,UAAAA,KAAK,EAAES;AANe,SAAvB,CADD;AAUA;AACD,KAhBD;AAkBA,WAAOL,MAAP;AACA,GArB0B,EAqBxB,CAAEJ,KAAF,EAASJ,WAAT,CArBwB,CAA3B;AAuBA,QAAMqB,QAAQ,GAAG,CAChB,kCAAuB;AAAEJ,IAAAA,GAAG,EAAE,SAAP;AAAkBb,IAAAA;AAAlB,GAAvB,CADgB,EAEhB,GAAGG,kBAFa,CAAjB;AAKA,SACC,4BAAC,uBAAD;AACC,IAAA,IAAI,EAAC,QADN;AAEC,IAAA,QAAQ,EAAGc,QAFZ;AAGC,IAAA,QAAQ,EAAGf,YAHZ;AAIC,IAAA,SAAS,EAAGR,SAJb;AAKC,IAAA,KAAK,EAAG,cAAI,aAAJ;AALT,IADD;AASA;;eAEcH,a","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport useClipboardBlock from './hooks/use-clipboard-block';\nimport useBlockTypeImpressions from './hooks/use-block-type-impressions';\nimport { createInserterSection, filterInserterItems } from './utils';\nimport useBlockTypesState from './hooks/use-block-types-state';\n\nconst getBlockNamespace = ( item ) => item.name.split( '/' )[ 0 ];\n\nfunction BlockTypesTab( { onSelect, rootClientId, listProps } ) {\n\tconst [ rawBlockTypes, , collections ] = useBlockTypesState(\n\t\trootClientId,\n\t\tonSelect\n\t);\n\tconst clipboardBlock = useClipboardBlock( rootClientId );\n\tconst filteredBlockTypes = filterInserterItems( rawBlockTypes );\n\tconst blockTypes = clipboardBlock\n\t\t? [ clipboardBlock, ...filteredBlockTypes ]\n\t\t: filteredBlockTypes;\n\tconst { items, trackBlockTypeSelected } =\n\t\tuseBlockTypeImpressions( blockTypes );\n\n\tconst handleSelect = ( ...args ) => {\n\t\ttrackBlockTypeSelected( ...args );\n\t\tonSelect( ...args );\n\t};\n\n\tconst collectionSections = useMemo( () => {\n\t\tconst result = [];\n\t\tObject.keys( collections ).forEach( ( namespace ) => {\n\t\t\tconst data = items.filter(\n\t\t\t\t( item ) => getBlockNamespace( item ) === namespace\n\t\t\t);\n\t\t\tif ( data.length > 0 ) {\n\t\t\t\tresult.push(\n\t\t\t\t\tcreateInserterSection( {\n\t\t\t\t\t\tkey: `collection-${ namespace }`,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\ticon: collections[ namespace ].icon,\n\t\t\t\t\t\t\ttitle: collections[ namespace ].title,\n\t\t\t\t\t\t},\n\t\t\t\t\t\titems: data,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t\treturn result;\n\t}, [ items, collections ] );\n\n\tconst sections = [\n\t\tcreateInserterSection( { key: 'default', items } ),\n\t\t...collectionSections,\n\t];\n\n\treturn (\n\t\t<BlockTypesList\n\t\t\tname=\"Blocks\"\n\t\t\tsections={ sections }\n\t\t\tonSelect={ handleSelect }\n\t\t\tlistProps={ listProps }\n\t\t\tlabel={ __( 'Blocks menu' ) }\n\t\t/>\n\t);\n}\n\nexport default BlockTypesTab;\n"]}
@@ -11,6 +11,8 @@ var _element = require("@wordpress/element");
11
11
 
12
12
  var _data = require("@wordpress/data");
13
13
 
14
+ var _i18n = require("@wordpress/i18n");
15
+
14
16
  var _blockTypesList = _interopRequireDefault(require("../block-types-list"));
15
17
 
16
18
  var _store = require("../../store");
@@ -51,7 +53,8 @@ function ReusableBlocksTab(_ref) {
51
53
  name: "ReusableBlocks",
52
54
  sections: sections,
53
55
  onSelect: onSelect,
54
- listProps: listProps
56
+ listProps: listProps,
57
+ label: (0, _i18n.__)('Reusable blocks')
55
58
  });
56
59
  }
57
60
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/reusable-blocks-tab.native.js"],"names":["ReusableBlocksTab","onSelect","rootClientId","listProps","items","select","getInserterItems","blockEditorStore","allItems","onlyReusable","sections","key"],"mappings":";;;;;;;;;;;AAGA;;AAKA;;AACA;;AACA;;AAVA;AACA;AACA;;AAGA;AACA;AACA;AAKA,SAASA,iBAAT,OAAoE;AAAA,MAAxC;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,YAAZ;AAA0BC,IAAAA;AAA1B,GAAwC;AACnE,QAAM;AAAEC,IAAAA;AAAF,MAAY,qBACfC,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA;AAAF,QAAuBD,MAAM,CAAEE,YAAF,CAAnC;AACA,UAAMC,QAAQ,GAAGF,gBAAgB,CAAEJ,YAAF,CAAjC;AAEA,WAAO;AACNE,MAAAA,KAAK,EAAE,gCAAqBI,QAArB,EAA+B;AAAEC,QAAAA,YAAY,EAAE;AAAhB,OAA/B;AADD,KAAP;AAGA,GARgB,EASjB,CAAEP,YAAF,CATiB,CAAlB;AAYA,QAAMQ,QAAQ,GAAG,CAAE,kCAAuB;AAAEC,IAAAA,GAAG,EAAE,WAAP;AAAoBP,IAAAA;AAApB,GAAvB,CAAF,CAAjB;AAEA,SACC,4BAAC,uBAAD;AACC,IAAA,IAAI,EAAC,gBADN;AAEC,IAAA,QAAQ,EAAGM,QAFZ;AAGC,IAAA,QAAQ,EAAGT,QAHZ;AAIC,IAAA,SAAS,EAAGE;AAJb,IADD;AAQA;;eAEcH,iB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport { store as blockEditorStore } from '../../store';\nimport { createInserterSection, filterInserterItems } from './utils';\n\nfunction ReusableBlocksTab( { onSelect, rootClientId, listProps } ) {\n\tconst { items } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getInserterItems } = select( blockEditorStore );\n\t\t\tconst allItems = getInserterItems( rootClientId );\n\n\t\t\treturn {\n\t\t\t\titems: filterInserterItems( allItems, { onlyReusable: true } ),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst sections = [ createInserterSection( { key: 'reuseable', items } ) ];\n\n\treturn (\n\t\t<BlockTypesList\n\t\t\tname=\"ReusableBlocks\"\n\t\t\tsections={ sections }\n\t\t\tonSelect={ onSelect }\n\t\t\tlistProps={ listProps }\n\t\t/>\n\t);\n}\n\nexport default ReusableBlocksTab;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/reusable-blocks-tab.native.js"],"names":["ReusableBlocksTab","onSelect","rootClientId","listProps","items","select","getInserterItems","blockEditorStore","allItems","onlyReusable","sections","key"],"mappings":";;;;;;;;;;;AAGA;;AACA;;AAKA;;AACA;;AACA;;AAXA;AACA;AACA;;AAIA;AACA;AACA;AAKA,SAASA,iBAAT,OAAoE;AAAA,MAAxC;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,YAAZ;AAA0BC,IAAAA;AAA1B,GAAwC;AACnE,QAAM;AAAEC,IAAAA;AAAF,MAAY,qBACfC,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA;AAAF,QAAuBD,MAAM,CAAEE,YAAF,CAAnC;AACA,UAAMC,QAAQ,GAAGF,gBAAgB,CAAEJ,YAAF,CAAjC;AAEA,WAAO;AACNE,MAAAA,KAAK,EAAE,gCAAqBI,QAArB,EAA+B;AAAEC,QAAAA,YAAY,EAAE;AAAhB,OAA/B;AADD,KAAP;AAGA,GARgB,EASjB,CAAEP,YAAF,CATiB,CAAlB;AAYA,QAAMQ,QAAQ,GAAG,CAAE,kCAAuB;AAAEC,IAAAA,GAAG,EAAE,WAAP;AAAoBP,IAAAA;AAApB,GAAvB,CAAF,CAAjB;AAEA,SACC,4BAAC,uBAAD;AACC,IAAA,IAAI,EAAC,gBADN;AAEC,IAAA,QAAQ,EAAGM,QAFZ;AAGC,IAAA,QAAQ,EAAGT,QAHZ;AAIC,IAAA,SAAS,EAAGE,SAJb;AAKC,IAAA,KAAK,EAAG,cAAI,iBAAJ;AALT,IADD;AASA;;eAEcH,iB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockTypesList from '../block-types-list';\nimport { store as blockEditorStore } from '../../store';\nimport { createInserterSection, filterInserterItems } from './utils';\n\nfunction ReusableBlocksTab( { onSelect, rootClientId, listProps } ) {\n\tconst { items } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getInserterItems } = select( blockEditorStore );\n\t\t\tconst allItems = getInserterItems( rootClientId );\n\n\t\t\treturn {\n\t\t\t\titems: filterInserterItems( allItems, { onlyReusable: true } ),\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst sections = [ createInserterSection( { key: 'reuseable', items } ) ];\n\n\treturn (\n\t\t<BlockTypesList\n\t\t\tname=\"ReusableBlocks\"\n\t\t\tsections={ sections }\n\t\t\tonSelect={ onSelect }\n\t\t\tlistProps={ listProps }\n\t\t\tlabel={ __( 'Reusable blocks' ) }\n\t\t/>\n\t);\n}\n\nexport default ReusableBlocksTab;\n"]}
@@ -11,6 +11,8 @@ var _element = require("@wordpress/element");
11
11
 
12
12
  var _data = require("@wordpress/data");
13
13
 
14
+ var _i18n = require("@wordpress/i18n");
15
+
14
16
  var _searchItems = require("./search-items");
15
17
 
16
18
  var _blockTypesList = _interopRequireDefault(require("../block-types-list"));
@@ -72,7 +74,8 @@ function InserterSearchResults(_ref) {
72
74
  items
73
75
  })],
74
76
  onSelect: handleSelect,
75
- listProps: listProps
77
+ listProps: listProps,
78
+ label: (0, _i18n.__)('Blocks')
76
79
  });
77
80
  }
78
81
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/search-results.native.js"],"names":["InserterSearchResults","filterValue","onSelect","listProps","rootClientId","isFullScreen","blockTypes","select","allItems","blockEditorStore","getInserterItems","availableItems","allowReusable","filteredItems","items","trackBlockTypeSelected","length","handleSelect","key"],"mappings":";;;;;;;;;;;AAGA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAbA;AACA;AACA;;AAGA;AACA;AACA;AAQA,SAASA,qBAAT,OAMI;AAAA,MAN4B;AAC/BC,IAAAA,WAD+B;AAE/BC,IAAAA,QAF+B;AAG/BC,IAAAA,SAH+B;AAI/BC,IAAAA,YAJ+B;AAK/BC,IAAAA;AAL+B,GAM5B;AACH,QAAM;AAAEC,IAAAA;AAAF,MAAiB,qBACpBC,MAAF,IAAc;AACb,UAAMC,QAAQ,GACbD,MAAM,CAAEE,YAAF,CAAN,CAA2BC,gBAA3B,CAA6CN,YAA7C,CADD;AAGA,UAAMO,cAAc,GAAG,gCAAqBH,QAArB,EAA+B;AACrDI,MAAAA,aAAa,EAAE;AADsC,KAA/B,CAAvB;AAGA,UAAMC,aAAa,GAAG,8BAAaF,cAAb,EAA6BV,WAA7B,CAAtB;AAEA,WAAO;AAAEK,MAAAA,UAAU,EAAEO;AAAd,KAAP;AACA,GAXqB,EAYtB,CAAET,YAAF,EAAgBH,WAAhB,CAZsB,CAAvB;AAeA,QAAM;AAAEa,IAAAA,KAAF;AAASC,IAAAA;AAAT,MACL,sCAAyBT,UAAzB,CADD;;AAGA,MAAK,CAAEQ,KAAF,IAAW,CAAAA,KAAK,SAAL,IAAAA,KAAK,WAAL,YAAAA,KAAK,CAAEE,MAAP,MAAkB,CAAlC,EAAsC;AACrC,WAAO,4BAAC,kBAAD,OAAP;AACA;;AAED,QAAMC,YAAY,GAAG,YAAe;AACnCF,IAAAA,sBAAsB,CAAE,YAAF,CAAtB;AACAb,IAAAA,QAAQ,CAAE,YAAF,CAAR;AACA,GAHD;;AAKA,SACC,4BAAC,uBAAD;AACC,IAAA,IAAI,EAAC,QADN;AAEC,IAAA,kBAAkB,EAAGG,YAAY,GAAG,EAAH,GAAQ,CAF1C;AAGC,IAAA,QAAQ,EAAG,CAAE,kCAAuB;AAAEa,MAAAA,GAAG,EAAE,QAAP;AAAiBJ,MAAAA;AAAjB,KAAvB,CAAF,CAHZ;AAIC,IAAA,QAAQ,EAAGG,YAJZ;AAKC,IAAA,SAAS,EAAGd;AALb,IADD;AASA;;eAEcH,qB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { searchItems } from './search-items';\nimport BlockTypesList from '../block-types-list';\nimport InserterNoResults from './no-results';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockTypeImpressions from './hooks/use-block-type-impressions';\nimport { createInserterSection, filterInserterItems } from './utils';\n\nfunction InserterSearchResults( {\n\tfilterValue,\n\tonSelect,\n\tlistProps,\n\trootClientId,\n\tisFullScreen,\n} ) {\n\tconst { blockTypes } = useSelect(\n\t\t( select ) => {\n\t\t\tconst allItems =\n\t\t\t\tselect( blockEditorStore ).getInserterItems( rootClientId );\n\n\t\t\tconst availableItems = filterInserterItems( allItems, {\n\t\t\t\tallowReusable: true,\n\t\t\t} );\n\t\t\tconst filteredItems = searchItems( availableItems, filterValue );\n\n\t\t\treturn { blockTypes: filteredItems };\n\t\t},\n\t\t[ rootClientId, filterValue ]\n\t);\n\n\tconst { items, trackBlockTypeSelected } =\n\t\tuseBlockTypeImpressions( blockTypes );\n\n\tif ( ! items || items?.length === 0 ) {\n\t\treturn <InserterNoResults />;\n\t}\n\n\tconst handleSelect = ( ...args ) => {\n\t\ttrackBlockTypeSelected( ...args );\n\t\tonSelect( ...args );\n\t};\n\n\treturn (\n\t\t<BlockTypesList\n\t\t\tname=\"Blocks\"\n\t\t\tinitialNumToRender={ isFullScreen ? 10 : 3 }\n\t\t\tsections={ [ createInserterSection( { key: 'search', items } ) ] }\n\t\t\tonSelect={ handleSelect }\n\t\t\tlistProps={ listProps }\n\t\t/>\n\t);\n}\n\nexport default InserterSearchResults;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/inserter/search-results.native.js"],"names":["InserterSearchResults","filterValue","onSelect","listProps","rootClientId","isFullScreen","blockTypes","select","allItems","blockEditorStore","getInserterItems","availableItems","allowReusable","filteredItems","items","trackBlockTypeSelected","length","handleSelect","key"],"mappings":";;;;;;;;;;;AAGA;;AACA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAdA;AACA;AACA;;AAIA;AACA;AACA;AAQA,SAASA,qBAAT,OAMI;AAAA,MAN4B;AAC/BC,IAAAA,WAD+B;AAE/BC,IAAAA,QAF+B;AAG/BC,IAAAA,SAH+B;AAI/BC,IAAAA,YAJ+B;AAK/BC,IAAAA;AAL+B,GAM5B;AACH,QAAM;AAAEC,IAAAA;AAAF,MAAiB,qBACpBC,MAAF,IAAc;AACb,UAAMC,QAAQ,GACbD,MAAM,CAAEE,YAAF,CAAN,CAA2BC,gBAA3B,CAA6CN,YAA7C,CADD;AAGA,UAAMO,cAAc,GAAG,gCAAqBH,QAArB,EAA+B;AACrDI,MAAAA,aAAa,EAAE;AADsC,KAA/B,CAAvB;AAGA,UAAMC,aAAa,GAAG,8BAAaF,cAAb,EAA6BV,WAA7B,CAAtB;AAEA,WAAO;AAAEK,MAAAA,UAAU,EAAEO;AAAd,KAAP;AACA,GAXqB,EAYtB,CAAET,YAAF,EAAgBH,WAAhB,CAZsB,CAAvB;AAeA,QAAM;AAAEa,IAAAA,KAAF;AAASC,IAAAA;AAAT,MACL,sCAAyBT,UAAzB,CADD;;AAGA,MAAK,CAAEQ,KAAF,IAAW,CAAAA,KAAK,SAAL,IAAAA,KAAK,WAAL,YAAAA,KAAK,CAAEE,MAAP,MAAkB,CAAlC,EAAsC;AACrC,WAAO,4BAAC,kBAAD,OAAP;AACA;;AAED,QAAMC,YAAY,GAAG,YAAe;AACnCF,IAAAA,sBAAsB,CAAE,YAAF,CAAtB;AACAb,IAAAA,QAAQ,CAAE,YAAF,CAAR;AACA,GAHD;;AAKA,SACC,4BAAC,uBAAD;AACC,IAAA,IAAI,EAAC,QADN;AAEC,IAAA,kBAAkB,EAAGG,YAAY,GAAG,EAAH,GAAQ,CAF1C;AAGC,IAAA,QAAQ,EAAG,CAAE,kCAAuB;AAAEa,MAAAA,GAAG,EAAE,QAAP;AAAiBJ,MAAAA;AAAjB,KAAvB,CAAF,CAHZ;AAIC,IAAA,QAAQ,EAAGG,YAJZ;AAKC,IAAA,SAAS,EAAGd,SALb;AAMC,IAAA,KAAK,EAAG,cAAI,QAAJ;AANT,IADD;AAUA;;eAEcH,qB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { searchItems } from './search-items';\nimport BlockTypesList from '../block-types-list';\nimport InserterNoResults from './no-results';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockTypeImpressions from './hooks/use-block-type-impressions';\nimport { createInserterSection, filterInserterItems } from './utils';\n\nfunction InserterSearchResults( {\n\tfilterValue,\n\tonSelect,\n\tlistProps,\n\trootClientId,\n\tisFullScreen,\n} ) {\n\tconst { blockTypes } = useSelect(\n\t\t( select ) => {\n\t\t\tconst allItems =\n\t\t\t\tselect( blockEditorStore ).getInserterItems( rootClientId );\n\n\t\t\tconst availableItems = filterInserterItems( allItems, {\n\t\t\t\tallowReusable: true,\n\t\t\t} );\n\t\t\tconst filteredItems = searchItems( availableItems, filterValue );\n\n\t\t\treturn { blockTypes: filteredItems };\n\t\t},\n\t\t[ rootClientId, filterValue ]\n\t);\n\n\tconst { items, trackBlockTypeSelected } =\n\t\tuseBlockTypeImpressions( blockTypes );\n\n\tif ( ! items || items?.length === 0 ) {\n\t\treturn <InserterNoResults />;\n\t}\n\n\tconst handleSelect = ( ...args ) => {\n\t\ttrackBlockTypeSelected( ...args );\n\t\tonSelect( ...args );\n\t};\n\n\treturn (\n\t\t<BlockTypesList\n\t\t\tname=\"Blocks\"\n\t\t\tinitialNumToRender={ isFullScreen ? 10 : 3 }\n\t\t\tsections={ [ createInserterSection( { key: 'search', items } ) ] }\n\t\t\tonSelect={ handleSelect }\n\t\t\tlistProps={ listProps }\n\t\t\tlabel={ __( 'Blocks' ) }\n\t\t/>\n\t);\n}\n\nexport default InserterSearchResults;\n"]}
@@ -163,6 +163,7 @@ function LinkControl(_ref) {
163
163
  const wrapperNode = (0, _element.useRef)();
164
164
  const textInputRef = (0, _element.useRef)();
165
165
  const isEndingEditWithFocus = (0, _element.useRef)(false);
166
+ const [settingsOpen, setSettingsOpen] = (0, _element.useState)(false);
166
167
  const [internalUrlInputValue, setInternalUrlInputValue] = (0, _useInternalInputValue.default)((value === null || value === void 0 ? void 0 : value.url) || '');
167
168
  const [internalTextInputValue, setInternalTextInputValue] = (0, _useInternalInputValue.default)((value === null || value === void 0 ? void 0 : value.title) || '');
168
169
  const [isEditingLink, setIsEditingLink] = (0, _element.useState)(forceIsEditingLink !== undefined ? forceIsEditingLink : !value || !value.url);
@@ -210,6 +211,7 @@ function LinkControl(_ref) {
210
211
  var _wrapperNode$current;
211
212
 
212
213
  isEndingEditWithFocus.current = !!((_wrapperNode$current = wrapperNode.current) !== null && _wrapperNode$current !== void 0 && _wrapperNode$current.contains(wrapperNode.current.ownerDocument.activeElement));
214
+ setSettingsOpen(false);
213
215
  setIsEditingLink(false);
214
216
  };
215
217
 
@@ -268,7 +270,7 @@ function LinkControl(_ref) {
268
270
  const currentUrlInputValue = propInputValue || internalUrlInputValue;
269
271
  const currentInputIsEmpty = !(currentUrlInputValue !== null && currentUrlInputValue !== void 0 && (_currentUrlInputValue = currentUrlInputValue.trim()) !== null && _currentUrlInputValue !== void 0 && _currentUrlInputValue.length);
270
272
  const shownUnlinkControl = onRemove && value && !isEditingLink && !isCreatingPage;
271
- const showSettingsDrawer = !!(settings !== null && settings !== void 0 && settings.length); // Only show text control once a URL value has been committed
273
+ const showSettings = !!(settings !== null && settings !== void 0 && settings.length); // Only show text control once a URL value has been committed
272
274
  // and it isn't just empty whitespace.
273
275
  // See https://github.com/WordPress/gutenberg/pull/33849/#issuecomment-932194927.
274
276
 
@@ -285,15 +287,7 @@ function LinkControl(_ref) {
285
287
  'block-editor-link-control__search-input-wrapper': true,
286
288
  'has-text-control': showTextControl
287
289
  })
288
- }, showTextControl && (0, _element.createElement)(_components.TextControl, {
289
- __nextHasNoMarginBottom: true,
290
- ref: textInputRef,
291
- className: "block-editor-link-control__field block-editor-link-control__text-content",
292
- label: "Text",
293
- value: internalTextInputValue,
294
- onChange: setInternalTextInputValue,
295
- onKeyDown: handleSubmitWithEnter
296
- }), (0, _element.createElement)(_searchInput.default, {
290
+ }, (0, _element.createElement)(_searchInput.default, {
297
291
  currentLink: value,
298
292
  className: "block-editor-link-control__field block-editor-link-control__search-input",
299
293
  placeholder: searchInputPlaceholder,
@@ -321,15 +315,21 @@ function LinkControl(_ref) {
321
315
  hasRichPreviews: hasRichPreviews,
322
316
  hasUnlinkControl: shownUnlinkControl,
323
317
  onRemove: onRemove
324
- }), (0, _element.createElement)("div", {
325
- className: "block-editor-link-control__drawer"
326
- }, showSettingsDrawer && (0, _element.createElement)("div", {
318
+ }), isEditing && (0, _element.createElement)("div", {
327
319
  className: "block-editor-link-control__tools"
328
- }, (0, _element.createElement)(_settingsDrawer.default, {
320
+ }, (showSettings || showTextControl) && (0, _element.createElement)(_settingsDrawer.default, {
321
+ settingsOpen: settingsOpen,
322
+ setSettingsOpen: setSettingsOpen,
323
+ showTextControl: showTextControl,
324
+ showSettings: showSettings,
325
+ textInputRef: textInputRef,
326
+ internalTextInputValue: internalTextInputValue,
327
+ setInternalTextInputValue: setInternalTextInputValue,
328
+ handleSubmitWithEnter: handleSubmitWithEnter,
329
329
  value: value,
330
330
  settings: settings,
331
331
  onChange: onChange
332
- })), isEditing && (0, _element.createElement)("div", {
332
+ }), (0, _element.createElement)("div", {
333
333
  className: "block-editor-link-control__search-actions"
334
334
  }, (0, _element.createElement)(_components.Button, {
335
335
  variant: "primary",
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/link-control/index.js"],"names":["noop","LinkControl","searchInputPlaceholder","value","settings","DEFAULT_LINK_SETTINGS","onChange","onRemove","onCancel","noDirectEntry","showSuggestions","showInitialSuggestions","forceIsEditingLink","createSuggestion","withCreateSuggestion","inputValue","propInputValue","suggestionsQuery","noURLSuggestion","createSuggestionButtonText","hasRichPreviews","hasTextControl","renderControlBottom","undefined","isMounting","wrapperNode","textInputRef","isEndingEditWithFocus","internalUrlInputValue","setInternalUrlInputValue","url","internalTextInputValue","setInternalTextInputValue","title","isEditingLink","setIsEditingLink","createPage","isCreatingPage","errorMessage","current","whichFocusTargetIndex","nextFocusTarget","focus","focusable","find","hasLinkValue","trim","length","stopEditing","contains","ownerDocument","activeElement","handleSelectSuggestion","updatedValue","handleSubmit","currentUrlInputValue","handleSubmitWithEnter","event","keyCode","ENTER","currentInputIsEmpty","preventDefault","resetInternalValues","handleCancel","stopPropagation","shownUnlinkControl","showSettingsDrawer","showTextControl","isEditing","ViewerFill"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { Button, Spinner, Notice, TextControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useRef, useState, useEffect } from '@wordpress/element';\nimport { focus } from '@wordpress/dom';\nimport { ENTER } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport LinkControlSettingsDrawer from './settings-drawer';\nimport LinkControlSearchInput from './search-input';\nimport LinkPreview from './link-preview';\nimport useCreatePage from './use-create-page';\nimport useInternalInputValue from './use-internal-input-value';\nimport { ViewerFill } from './viewer-slot';\nimport { DEFAULT_LINK_SETTINGS } from './constants';\n\n/**\n * Default properties associated with a link control value.\n *\n * @typedef WPLinkControlDefaultValue\n *\n * @property {string} url Link URL.\n * @property {string=} title Link title.\n * @property {boolean=} opensInNewTab Whether link should open in a new browser\n * tab. This value is only assigned if not\n * providing a custom `settings` prop.\n */\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Custom settings values associated with a link.\n *\n * @typedef {{[setting:string]:any}} WPLinkControlSettingsValue\n */\n/* eslint-enable */\n\n/**\n * Custom settings values associated with a link.\n *\n * @typedef WPLinkControlSetting\n *\n * @property {string} id Identifier to use as property for setting value.\n * @property {string} title Human-readable label to show in user interface.\n */\n\n/**\n * Properties associated with a link control value, composed as a union of the\n * default properties and any custom settings values.\n *\n * @typedef {WPLinkControlDefaultValue&WPLinkControlSettingsValue} WPLinkControlValue\n */\n\n/** @typedef {(nextValue:WPLinkControlValue)=>void} WPLinkControlOnChangeProp */\n\n/**\n * Properties associated with a search suggestion used within the LinkControl.\n *\n * @typedef WPLinkControlSuggestion\n *\n * @property {string} id Identifier to use to uniquely identify the suggestion.\n * @property {string} type Identifies the type of the suggestion (eg: `post`,\n * `page`, `url`...etc)\n * @property {string} title Human-readable label to show in user interface.\n * @property {string} url A URL for the suggestion.\n */\n\n/** @typedef {(title:string)=>WPLinkControlSuggestion} WPLinkControlCreateSuggestionProp */\n\n/**\n * @typedef WPLinkControlProps\n *\n * @property {(WPLinkControlSetting[])=} settings An array of settings objects. Each object will used to\n * render a `ToggleControl` for that setting.\n * @property {boolean=} forceIsEditingLink If passed as either `true` or `false`, controls the\n * internal editing state of the component to respective\n * show or not show the URL input field.\n * @property {WPLinkControlValue=} value Current link value.\n * @property {WPLinkControlOnChangeProp=} onChange Value change handler, called with the updated value if\n * the user selects a new link or updates settings.\n * @property {boolean=} noDirectEntry Whether to allow turning a URL-like search query directly into a link.\n * @property {boolean=} showSuggestions Whether to present suggestions when typing the URL.\n * @property {boolean=} showInitialSuggestions Whether to present initial suggestions immediately.\n * @property {boolean=} withCreateSuggestion Whether to allow creation of link value from suggestion.\n * @property {Object=} suggestionsQuery Query parameters to pass along to wp.blockEditor.__experimentalFetchLinkSuggestions.\n * @property {boolean=} noURLSuggestion Whether to add a fallback suggestion which treats the search query as a URL.\n * @property {boolean=} hasTextControl Whether to add a text field to the UI to update the value.title.\n * @property {string|Function|undefined} createSuggestionButtonText The text to use in the button that calls createSuggestion.\n * @property {Function} renderControlBottom Optional controls to be rendered at the bottom of the component.\n */\n\nconst noop = () => {};\n\n/**\n * Renders a link control. A link control is a controlled input which maintains\n * a value associated with a link (HTML anchor element) and relevant settings\n * for how that link is expected to behave.\n *\n * @param {WPLinkControlProps} props Component props.\n */\nfunction LinkControl( {\n\tsearchInputPlaceholder,\n\tvalue,\n\tsettings = DEFAULT_LINK_SETTINGS,\n\tonChange = noop,\n\tonRemove,\n\tonCancel,\n\tnoDirectEntry = false,\n\tshowSuggestions = true,\n\tshowInitialSuggestions,\n\tforceIsEditingLink,\n\tcreateSuggestion,\n\twithCreateSuggestion,\n\tinputValue: propInputValue = '',\n\tsuggestionsQuery = {},\n\tnoURLSuggestion = false,\n\tcreateSuggestionButtonText,\n\thasRichPreviews = false,\n\thasTextControl = false,\n\trenderControlBottom = null,\n} ) {\n\tif ( withCreateSuggestion === undefined && createSuggestion ) {\n\t\twithCreateSuggestion = true;\n\t}\n\n\tconst isMounting = useRef( true );\n\tconst wrapperNode = useRef();\n\tconst textInputRef = useRef();\n\tconst isEndingEditWithFocus = useRef( false );\n\n\tconst [ internalUrlInputValue, setInternalUrlInputValue ] =\n\t\tuseInternalInputValue( value?.url || '' );\n\n\tconst [ internalTextInputValue, setInternalTextInputValue ] =\n\t\tuseInternalInputValue( value?.title || '' );\n\n\tconst [ isEditingLink, setIsEditingLink ] = useState(\n\t\tforceIsEditingLink !== undefined\n\t\t\t? forceIsEditingLink\n\t\t\t: ! value || ! value.url\n\t);\n\n\tconst { createPage, isCreatingPage, errorMessage } =\n\t\tuseCreatePage( createSuggestion );\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\tforceIsEditingLink !== undefined &&\n\t\t\tforceIsEditingLink !== isEditingLink\n\t\t) {\n\t\t\tsetIsEditingLink( forceIsEditingLink );\n\t\t}\n\t}, [ forceIsEditingLink ] );\n\n\tuseEffect( () => {\n\t\t// We don't auto focus into the Link UI on mount\n\t\t// because otherwise using the keyboard to select text\n\t\t// *within* the link format is not possible.\n\t\tif ( isMounting.current ) {\n\t\t\tisMounting.current = false;\n\t\t\treturn;\n\t\t}\n\t\t// Unless we are mounting, we always want to focus either:\n\t\t// - the URL input\n\t\t// - the first focusable element in the Link UI.\n\t\t// But in editing mode if there is a text input present then\n\t\t// the URL input is at index 1. If not then it is at index 0.\n\t\tconst whichFocusTargetIndex = textInputRef?.current ? 1 : 0;\n\n\t\t// Scenario - when:\n\t\t// - switching between editable and non editable LinkControl\n\t\t// - clicking on a link\n\t\t// ...then move focus to the *first* element to avoid focus loss\n\t\t// and to ensure focus is *within* the Link UI.\n\t\tconst nextFocusTarget =\n\t\t\tfocus.focusable.find( wrapperNode.current )[\n\t\t\t\twhichFocusTargetIndex\n\t\t\t] || wrapperNode.current;\n\n\t\tnextFocusTarget.focus();\n\n\t\tisEndingEditWithFocus.current = false;\n\t}, [ isEditingLink, isCreatingPage ] );\n\n\tconst hasLinkValue = value?.url?.trim()?.length > 0;\n\n\t/**\n\t * Cancels editing state and marks that focus may need to be restored after\n\t * the next render, if focus was within the wrapper when editing finished.\n\t */\n\tconst stopEditing = () => {\n\t\tisEndingEditWithFocus.current = !! wrapperNode.current?.contains(\n\t\t\twrapperNode.current.ownerDocument.activeElement\n\t\t);\n\n\t\tsetIsEditingLink( false );\n\t};\n\n\tconst handleSelectSuggestion = ( updatedValue ) => {\n\t\tonChange( {\n\t\t\t...updatedValue,\n\t\t\ttitle: internalTextInputValue || updatedValue?.title,\n\t\t} );\n\t\tstopEditing();\n\t};\n\n\tconst handleSubmit = () => {\n\t\tif (\n\t\t\tcurrentUrlInputValue !== value?.url ||\n\t\t\tinternalTextInputValue !== value?.title\n\t\t) {\n\t\t\tonChange( {\n\t\t\t\t...value,\n\t\t\t\turl: currentUrlInputValue,\n\t\t\t\ttitle: internalTextInputValue,\n\t\t\t} );\n\t\t}\n\t\tstopEditing();\n\t};\n\n\tconst handleSubmitWithEnter = ( event ) => {\n\t\tconst { keyCode } = event;\n\t\tif (\n\t\t\tkeyCode === ENTER &&\n\t\t\t! currentInputIsEmpty // Disallow submitting empty values.\n\t\t) {\n\t\t\tevent.preventDefault();\n\t\t\thandleSubmit();\n\t\t}\n\t};\n\n\tconst resetInternalValues = () => {\n\t\tsetInternalUrlInputValue( value?.url );\n\t\tsetInternalTextInputValue( value?.title );\n\t};\n\n\tconst handleCancel = ( event ) => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t// Ensure that any unsubmitted input changes are reset.\n\t\tresetInternalValues();\n\n\t\tif ( hasLinkValue ) {\n\t\t\t// If there is a link then exist editing mode and show preview.\n\t\t\tstopEditing();\n\t\t} else {\n\t\t\t// If there is no link value, then remove the link entirely.\n\t\t\tonRemove?.();\n\t\t}\n\n\t\tonCancel?.();\n\t};\n\n\tconst currentUrlInputValue = propInputValue || internalUrlInputValue;\n\n\tconst currentInputIsEmpty = ! currentUrlInputValue?.trim()?.length;\n\n\tconst shownUnlinkControl =\n\t\tonRemove && value && ! isEditingLink && ! isCreatingPage;\n\n\tconst showSettingsDrawer = !! settings?.length;\n\n\t// Only show text control once a URL value has been committed\n\t// and it isn't just empty whitespace.\n\t// See https://github.com/WordPress/gutenberg/pull/33849/#issuecomment-932194927.\n\tconst showTextControl = hasLinkValue && hasTextControl;\n\n\tconst isEditing = ( isEditingLink || ! value ) && ! isCreatingPage;\n\treturn (\n\t\t<div\n\t\t\ttabIndex={ -1 }\n\t\t\tref={ wrapperNode }\n\t\t\tclassName=\"block-editor-link-control\"\n\t\t>\n\t\t\t{ isCreatingPage && (\n\t\t\t\t<div className=\"block-editor-link-control__loading\">\n\t\t\t\t\t<Spinner /> { __( 'Creating' ) }…\n\t\t\t\t</div>\n\t\t\t) }\n\n\t\t\t{ isEditing && (\n\t\t\t\t<>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={ classnames( {\n\t\t\t\t\t\t\t'block-editor-link-control__search-input-wrapper': true,\n\t\t\t\t\t\t\t'has-text-control': showTextControl,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ showTextControl && (\n\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tref={ textInputRef }\n\t\t\t\t\t\t\t\tclassName=\"block-editor-link-control__field block-editor-link-control__text-content\"\n\t\t\t\t\t\t\t\tlabel=\"Text\"\n\t\t\t\t\t\t\t\tvalue={ internalTextInputValue }\n\t\t\t\t\t\t\t\tonChange={ setInternalTextInputValue }\n\t\t\t\t\t\t\t\tonKeyDown={ handleSubmitWithEnter }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\n\t\t\t\t\t\t<LinkControlSearchInput\n\t\t\t\t\t\t\tcurrentLink={ value }\n\t\t\t\t\t\t\tclassName=\"block-editor-link-control__field block-editor-link-control__search-input\"\n\t\t\t\t\t\t\tplaceholder={ searchInputPlaceholder }\n\t\t\t\t\t\t\tvalue={ currentUrlInputValue }\n\t\t\t\t\t\t\twithCreateSuggestion={ withCreateSuggestion }\n\t\t\t\t\t\t\tonCreateSuggestion={ createPage }\n\t\t\t\t\t\t\tonChange={ setInternalUrlInputValue }\n\t\t\t\t\t\t\tonSelect={ handleSelectSuggestion }\n\t\t\t\t\t\t\tshowInitialSuggestions={ showInitialSuggestions }\n\t\t\t\t\t\t\tallowDirectEntry={ ! noDirectEntry }\n\t\t\t\t\t\t\tshowSuggestions={ showSuggestions }\n\t\t\t\t\t\t\tsuggestionsQuery={ suggestionsQuery }\n\t\t\t\t\t\t\twithURLSuggestion={ ! noURLSuggestion }\n\t\t\t\t\t\t\tcreateSuggestionButtonText={\n\t\t\t\t\t\t\t\tcreateSuggestionButtonText\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tuseLabel={ showTextControl }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t{ errorMessage && (\n\t\t\t\t\t\t<Notice\n\t\t\t\t\t\t\tclassName=\"block-editor-link-control__search-error\"\n\t\t\t\t\t\t\tstatus=\"error\"\n\t\t\t\t\t\t\tisDismissible={ false }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ errorMessage }\n\t\t\t\t\t\t</Notice>\n\t\t\t\t\t) }\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ value && ! isEditingLink && ! isCreatingPage && (\n\t\t\t\t<LinkPreview\n\t\t\t\t\tkey={ value?.url } // force remount when URL changes to avoid race conditions for rich previews\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonEditClick={ () => setIsEditingLink( true ) }\n\t\t\t\t\thasRichPreviews={ hasRichPreviews }\n\t\t\t\t\thasUnlinkControl={ shownUnlinkControl }\n\t\t\t\t\tonRemove={ onRemove }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t<div className=\"block-editor-link-control__drawer\">\n\t\t\t\t{ showSettingsDrawer && (\n\t\t\t\t\t<div className=\"block-editor-link-control__tools\">\n\t\t\t\t\t\t<LinkControlSettingsDrawer\n\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\tsettings={ settings }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\n\t\t\t\t{ isEditing && (\n\t\t\t\t\t<div className=\"block-editor-link-control__search-actions\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tonClick={ handleSubmit }\n\t\t\t\t\t\t\tclassName=\"xblock-editor-link-control__search-submit\"\n\t\t\t\t\t\t\tdisabled={ currentInputIsEmpty } // Disallow submitting empty values.\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ handleCancel }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</div>\n\n\t\t\t{ renderControlBottom && renderControlBottom() }\n\t\t</div>\n\t);\n}\n\nLinkControl.ViewerFill = ViewerFill;\n\nexport default LinkControl;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/link-control/index.js"],"names":["noop","LinkControl","searchInputPlaceholder","value","settings","DEFAULT_LINK_SETTINGS","onChange","onRemove","onCancel","noDirectEntry","showSuggestions","showInitialSuggestions","forceIsEditingLink","createSuggestion","withCreateSuggestion","inputValue","propInputValue","suggestionsQuery","noURLSuggestion","createSuggestionButtonText","hasRichPreviews","hasTextControl","renderControlBottom","undefined","isMounting","wrapperNode","textInputRef","isEndingEditWithFocus","settingsOpen","setSettingsOpen","internalUrlInputValue","setInternalUrlInputValue","url","internalTextInputValue","setInternalTextInputValue","title","isEditingLink","setIsEditingLink","createPage","isCreatingPage","errorMessage","current","whichFocusTargetIndex","nextFocusTarget","focus","focusable","find","hasLinkValue","trim","length","stopEditing","contains","ownerDocument","activeElement","handleSelectSuggestion","updatedValue","handleSubmit","currentUrlInputValue","handleSubmitWithEnter","event","keyCode","ENTER","currentInputIsEmpty","preventDefault","resetInternalValues","handleCancel","stopPropagation","shownUnlinkControl","showSettings","showTextControl","isEditing","ViewerFill"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { Button, Spinner, Notice } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useRef, useState, useEffect } from '@wordpress/element';\nimport { focus } from '@wordpress/dom';\nimport { ENTER } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport LinkControlSettingsDrawer from './settings-drawer';\nimport LinkControlSearchInput from './search-input';\nimport LinkPreview from './link-preview';\nimport useCreatePage from './use-create-page';\nimport useInternalInputValue from './use-internal-input-value';\nimport { ViewerFill } from './viewer-slot';\nimport { DEFAULT_LINK_SETTINGS } from './constants';\n\n/**\n * Default properties associated with a link control value.\n *\n * @typedef WPLinkControlDefaultValue\n *\n * @property {string} url Link URL.\n * @property {string=} title Link title.\n * @property {boolean=} opensInNewTab Whether link should open in a new browser\n * tab. This value is only assigned if not\n * providing a custom `settings` prop.\n */\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Custom settings values associated with a link.\n *\n * @typedef {{[setting:string]:any}} WPLinkControlSettingsValue\n */\n/* eslint-enable */\n\n/**\n * Custom settings values associated with a link.\n *\n * @typedef WPLinkControlSetting\n *\n * @property {string} id Identifier to use as property for setting value.\n * @property {string} title Human-readable label to show in user interface.\n */\n\n/**\n * Properties associated with a link control value, composed as a union of the\n * default properties and any custom settings values.\n *\n * @typedef {WPLinkControlDefaultValue&WPLinkControlSettingsValue} WPLinkControlValue\n */\n\n/** @typedef {(nextValue:WPLinkControlValue)=>void} WPLinkControlOnChangeProp */\n\n/**\n * Properties associated with a search suggestion used within the LinkControl.\n *\n * @typedef WPLinkControlSuggestion\n *\n * @property {string} id Identifier to use to uniquely identify the suggestion.\n * @property {string} type Identifies the type of the suggestion (eg: `post`,\n * `page`, `url`...etc)\n * @property {string} title Human-readable label to show in user interface.\n * @property {string} url A URL for the suggestion.\n */\n\n/** @typedef {(title:string)=>WPLinkControlSuggestion} WPLinkControlCreateSuggestionProp */\n\n/**\n * @typedef WPLinkControlProps\n *\n * @property {(WPLinkControlSetting[])=} settings An array of settings objects. Each object will used to\n * render a `ToggleControl` for that setting.\n * @property {boolean=} forceIsEditingLink If passed as either `true` or `false`, controls the\n * internal editing state of the component to respective\n * show or not show the URL input field.\n * @property {WPLinkControlValue=} value Current link value.\n * @property {WPLinkControlOnChangeProp=} onChange Value change handler, called with the updated value if\n * the user selects a new link or updates settings.\n * @property {boolean=} noDirectEntry Whether to allow turning a URL-like search query directly into a link.\n * @property {boolean=} showSuggestions Whether to present suggestions when typing the URL.\n * @property {boolean=} showInitialSuggestions Whether to present initial suggestions immediately.\n * @property {boolean=} withCreateSuggestion Whether to allow creation of link value from suggestion.\n * @property {Object=} suggestionsQuery Query parameters to pass along to wp.blockEditor.__experimentalFetchLinkSuggestions.\n * @property {boolean=} noURLSuggestion Whether to add a fallback suggestion which treats the search query as a URL.\n * @property {boolean=} hasTextControl Whether to add a text field to the UI to update the value.title.\n * @property {string|Function|undefined} createSuggestionButtonText The text to use in the button that calls createSuggestion.\n * @property {Function} renderControlBottom Optional controls to be rendered at the bottom of the component.\n */\n\nconst noop = () => {};\n\n/**\n * Renders a link control. A link control is a controlled input which maintains\n * a value associated with a link (HTML anchor element) and relevant settings\n * for how that link is expected to behave.\n *\n * @param {WPLinkControlProps} props Component props.\n */\nfunction LinkControl( {\n\tsearchInputPlaceholder,\n\tvalue,\n\tsettings = DEFAULT_LINK_SETTINGS,\n\tonChange = noop,\n\tonRemove,\n\tonCancel,\n\tnoDirectEntry = false,\n\tshowSuggestions = true,\n\tshowInitialSuggestions,\n\tforceIsEditingLink,\n\tcreateSuggestion,\n\twithCreateSuggestion,\n\tinputValue: propInputValue = '',\n\tsuggestionsQuery = {},\n\tnoURLSuggestion = false,\n\tcreateSuggestionButtonText,\n\thasRichPreviews = false,\n\thasTextControl = false,\n\trenderControlBottom = null,\n} ) {\n\tif ( withCreateSuggestion === undefined && createSuggestion ) {\n\t\twithCreateSuggestion = true;\n\t}\n\n\tconst isMounting = useRef( true );\n\tconst wrapperNode = useRef();\n\tconst textInputRef = useRef();\n\tconst isEndingEditWithFocus = useRef( false );\n\n\tconst [ settingsOpen, setSettingsOpen ] = useState( false );\n\n\tconst [ internalUrlInputValue, setInternalUrlInputValue ] =\n\t\tuseInternalInputValue( value?.url || '' );\n\n\tconst [ internalTextInputValue, setInternalTextInputValue ] =\n\t\tuseInternalInputValue( value?.title || '' );\n\n\tconst [ isEditingLink, setIsEditingLink ] = useState(\n\t\tforceIsEditingLink !== undefined\n\t\t\t? forceIsEditingLink\n\t\t\t: ! value || ! value.url\n\t);\n\n\tconst { createPage, isCreatingPage, errorMessage } =\n\t\tuseCreatePage( createSuggestion );\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\tforceIsEditingLink !== undefined &&\n\t\t\tforceIsEditingLink !== isEditingLink\n\t\t) {\n\t\t\tsetIsEditingLink( forceIsEditingLink );\n\t\t}\n\t}, [ forceIsEditingLink ] );\n\n\tuseEffect( () => {\n\t\t// We don't auto focus into the Link UI on mount\n\t\t// because otherwise using the keyboard to select text\n\t\t// *within* the link format is not possible.\n\t\tif ( isMounting.current ) {\n\t\t\tisMounting.current = false;\n\t\t\treturn;\n\t\t}\n\t\t// Unless we are mounting, we always want to focus either:\n\t\t// - the URL input\n\t\t// - the first focusable element in the Link UI.\n\t\t// But in editing mode if there is a text input present then\n\t\t// the URL input is at index 1. If not then it is at index 0.\n\t\tconst whichFocusTargetIndex = textInputRef?.current ? 1 : 0;\n\n\t\t// Scenario - when:\n\t\t// - switching between editable and non editable LinkControl\n\t\t// - clicking on a link\n\t\t// ...then move focus to the *first* element to avoid focus loss\n\t\t// and to ensure focus is *within* the Link UI.\n\t\tconst nextFocusTarget =\n\t\t\tfocus.focusable.find( wrapperNode.current )[\n\t\t\t\twhichFocusTargetIndex\n\t\t\t] || wrapperNode.current;\n\n\t\tnextFocusTarget.focus();\n\n\t\tisEndingEditWithFocus.current = false;\n\t}, [ isEditingLink, isCreatingPage ] );\n\n\tconst hasLinkValue = value?.url?.trim()?.length > 0;\n\n\t/**\n\t * Cancels editing state and marks that focus may need to be restored after\n\t * the next render, if focus was within the wrapper when editing finished.\n\t */\n\tconst stopEditing = () => {\n\t\tisEndingEditWithFocus.current = !! wrapperNode.current?.contains(\n\t\t\twrapperNode.current.ownerDocument.activeElement\n\t\t);\n\n\t\tsetSettingsOpen( false );\n\t\tsetIsEditingLink( false );\n\t};\n\n\tconst handleSelectSuggestion = ( updatedValue ) => {\n\t\tonChange( {\n\t\t\t...updatedValue,\n\t\t\ttitle: internalTextInputValue || updatedValue?.title,\n\t\t} );\n\t\tstopEditing();\n\t};\n\n\tconst handleSubmit = () => {\n\t\tif (\n\t\t\tcurrentUrlInputValue !== value?.url ||\n\t\t\tinternalTextInputValue !== value?.title\n\t\t) {\n\t\t\tonChange( {\n\t\t\t\t...value,\n\t\t\t\turl: currentUrlInputValue,\n\t\t\t\ttitle: internalTextInputValue,\n\t\t\t} );\n\t\t}\n\t\tstopEditing();\n\t};\n\n\tconst handleSubmitWithEnter = ( event ) => {\n\t\tconst { keyCode } = event;\n\t\tif (\n\t\t\tkeyCode === ENTER &&\n\t\t\t! currentInputIsEmpty // Disallow submitting empty values.\n\t\t) {\n\t\t\tevent.preventDefault();\n\t\t\thandleSubmit();\n\t\t}\n\t};\n\n\tconst resetInternalValues = () => {\n\t\tsetInternalUrlInputValue( value?.url );\n\t\tsetInternalTextInputValue( value?.title );\n\t};\n\n\tconst handleCancel = ( event ) => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t// Ensure that any unsubmitted input changes are reset.\n\t\tresetInternalValues();\n\n\t\tif ( hasLinkValue ) {\n\t\t\t// If there is a link then exist editing mode and show preview.\n\t\t\tstopEditing();\n\t\t} else {\n\t\t\t// If there is no link value, then remove the link entirely.\n\t\t\tonRemove?.();\n\t\t}\n\n\t\tonCancel?.();\n\t};\n\n\tconst currentUrlInputValue = propInputValue || internalUrlInputValue;\n\n\tconst currentInputIsEmpty = ! currentUrlInputValue?.trim()?.length;\n\n\tconst shownUnlinkControl =\n\t\tonRemove && value && ! isEditingLink && ! isCreatingPage;\n\n\tconst showSettings = !! settings?.length;\n\n\t// Only show text control once a URL value has been committed\n\t// and it isn't just empty whitespace.\n\t// See https://github.com/WordPress/gutenberg/pull/33849/#issuecomment-932194927.\n\tconst showTextControl = hasLinkValue && hasTextControl;\n\n\tconst isEditing = ( isEditingLink || ! value ) && ! isCreatingPage;\n\n\treturn (\n\t\t<div\n\t\t\ttabIndex={ -1 }\n\t\t\tref={ wrapperNode }\n\t\t\tclassName=\"block-editor-link-control\"\n\t\t>\n\t\t\t{ isCreatingPage && (\n\t\t\t\t<div className=\"block-editor-link-control__loading\">\n\t\t\t\t\t<Spinner /> { __( 'Creating' ) }…\n\t\t\t\t</div>\n\t\t\t) }\n\n\t\t\t{ isEditing && (\n\t\t\t\t<>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={ classnames( {\n\t\t\t\t\t\t\t'block-editor-link-control__search-input-wrapper': true,\n\t\t\t\t\t\t\t'has-text-control': showTextControl,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<LinkControlSearchInput\n\t\t\t\t\t\t\tcurrentLink={ value }\n\t\t\t\t\t\t\tclassName=\"block-editor-link-control__field block-editor-link-control__search-input\"\n\t\t\t\t\t\t\tplaceholder={ searchInputPlaceholder }\n\t\t\t\t\t\t\tvalue={ currentUrlInputValue }\n\t\t\t\t\t\t\twithCreateSuggestion={ withCreateSuggestion }\n\t\t\t\t\t\t\tonCreateSuggestion={ createPage }\n\t\t\t\t\t\t\tonChange={ setInternalUrlInputValue }\n\t\t\t\t\t\t\tonSelect={ handleSelectSuggestion }\n\t\t\t\t\t\t\tshowInitialSuggestions={ showInitialSuggestions }\n\t\t\t\t\t\t\tallowDirectEntry={ ! noDirectEntry }\n\t\t\t\t\t\t\tshowSuggestions={ showSuggestions }\n\t\t\t\t\t\t\tsuggestionsQuery={ suggestionsQuery }\n\t\t\t\t\t\t\twithURLSuggestion={ ! noURLSuggestion }\n\t\t\t\t\t\t\tcreateSuggestionButtonText={\n\t\t\t\t\t\t\t\tcreateSuggestionButtonText\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tuseLabel={ showTextControl }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t{ errorMessage && (\n\t\t\t\t\t\t<Notice\n\t\t\t\t\t\t\tclassName=\"block-editor-link-control__search-error\"\n\t\t\t\t\t\t\tstatus=\"error\"\n\t\t\t\t\t\t\tisDismissible={ false }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ errorMessage }\n\t\t\t\t\t\t</Notice>\n\t\t\t\t\t) }\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ value && ! isEditingLink && ! isCreatingPage && (\n\t\t\t\t<LinkPreview\n\t\t\t\t\tkey={ value?.url } // force remount when URL changes to avoid race conditions for rich previews\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonEditClick={ () => setIsEditingLink( true ) }\n\t\t\t\t\thasRichPreviews={ hasRichPreviews }\n\t\t\t\t\thasUnlinkControl={ shownUnlinkControl }\n\t\t\t\t\tonRemove={ onRemove }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ isEditing && (\n\t\t\t\t<div className=\"block-editor-link-control__tools\">\n\t\t\t\t\t{ ( showSettings || showTextControl ) && (\n\t\t\t\t\t\t<LinkControlSettingsDrawer\n\t\t\t\t\t\t\tsettingsOpen={ settingsOpen }\n\t\t\t\t\t\t\tsetSettingsOpen={ setSettingsOpen }\n\t\t\t\t\t\t\tshowTextControl={ showTextControl }\n\t\t\t\t\t\t\tshowSettings={ showSettings }\n\t\t\t\t\t\t\ttextInputRef={ textInputRef }\n\t\t\t\t\t\t\tinternalTextInputValue={ internalTextInputValue }\n\t\t\t\t\t\t\tsetInternalTextInputValue={\n\t\t\t\t\t\t\t\tsetInternalTextInputValue\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thandleSubmitWithEnter={ handleSubmitWithEnter }\n\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\tsettings={ settings }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t<div className=\"block-editor-link-control__search-actions\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tonClick={ handleSubmit }\n\t\t\t\t\t\t\tclassName=\"xblock-editor-link-control__search-submit\"\n\t\t\t\t\t\t\tdisabled={ currentInputIsEmpty } // Disallow submitting empty values.\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ handleCancel }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t) }\n\n\t\t\t{ renderControlBottom && renderControlBottom() }\n\t\t</div>\n\t);\n}\n\nLinkControl.ViewerFill = ViewerFill;\n\nexport default LinkControl;\n"]}
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
@@ -7,46 +9,86 @@ exports.default = void 0;
7
9
 
8
10
  var _element = require("@wordpress/element");
9
11
 
12
+ var _components = require("@wordpress/components");
13
+
14
+ var _icons = require("@wordpress/icons");
15
+
16
+ var _compose = require("@wordpress/compose");
17
+
10
18
  var _i18n = require("@wordpress/i18n");
11
19
 
12
- var _components = require("@wordpress/components");
20
+ var _settings = _interopRequireDefault(require("./settings"));
13
21
 
14
22
  /**
15
23
  * WordPress dependencies
16
24
  */
17
- const noop = () => {};
18
25
 
19
- const LinkControlSettingsDrawer = _ref => {
26
+ /**
27
+ * Internal dependencies
28
+ */
29
+ function LinkSettingsDrawer(_ref) {
20
30
  let {
31
+ settingsOpen,
32
+ setSettingsOpen,
33
+ showTextControl,
34
+ showSettings,
35
+ textInputRef,
36
+ internalTextInputValue,
37
+ setInternalTextInputValue,
38
+ handleSubmitWithEnter,
21
39
  value,
22
- onChange = noop,
23
- settings
40
+ settings,
41
+ onChange
24
42
  } = _ref;
43
+ const prefersReducedMotion = (0, _compose.useReducedMotion)();
44
+ const MaybeAnimatePresence = prefersReducedMotion ? _element.Fragment : _components.__unstableAnimatePresence;
45
+ const MaybeMotionDiv = prefersReducedMotion ? 'div' : _components.__unstableMotion.div;
46
+ const id = (0, _compose.useInstanceId)(LinkSettingsDrawer);
47
+ const settingsDrawerId = `link-control-settings-drawer-${id}`;
48
+ return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_components.Button, {
49
+ className: "block-editor-link-control__drawer-toggle",
50
+ "aria-expanded": settingsOpen,
51
+ onClick: () => setSettingsOpen(!settingsOpen),
52
+ icon: _icons.settings,
53
+ label: (0, _i18n.__)('Toggle link settings'),
54
+ "aria-controls": settingsDrawerId
55
+ }), (0, _element.createElement)(MaybeAnimatePresence, null, settingsOpen && (0, _element.createElement)(MaybeMotionDiv, {
56
+ className: "block-editor-link-control__drawer",
57
+ hidden: !settingsOpen,
58
+ id: settingsDrawerId,
59
+ initial: "collapsed",
60
+ animate: "open",
61
+ exit: "collapsed",
62
+ variants: {
63
+ open: {
64
+ opacity: 1,
65
+ height: 'auto'
66
+ },
67
+ collapsed: {
68
+ opacity: 0,
69
+ height: 0
70
+ }
71
+ },
72
+ transition: {
73
+ duration: 0.1
74
+ }
75
+ }, (0, _element.createElement)("div", {
76
+ className: "block-editor-link-control__drawer-inner"
77
+ }, showTextControl && (0, _element.createElement)(_components.TextControl, {
78
+ __nextHasNoMarginBottom: true,
79
+ ref: textInputRef,
80
+ className: "block-editor-link-control__setting block-editor-link-control__text-content",
81
+ label: "Text",
82
+ value: internalTextInputValue,
83
+ onChange: setInternalTextInputValue,
84
+ onKeyDown: handleSubmitWithEnter
85
+ }), showSettings && (0, _element.createElement)(_settings.default, {
86
+ value: value,
87
+ settings: settings,
88
+ onChange: onChange
89
+ })))));
90
+ }
25
91
 
26
- if (!settings || !settings.length) {
27
- return null;
28
- }
29
-
30
- const handleSettingChange = setting => newValue => {
31
- onChange({ ...value,
32
- [setting.id]: newValue
33
- });
34
- };
35
-
36
- const theSettings = settings.map(setting => (0, _element.createElement)(_components.ToggleControl, {
37
- className: "block-editor-link-control__setting",
38
- key: setting.id,
39
- label: setting.title,
40
- onChange: handleSettingChange(setting),
41
- checked: value ? !!value[setting.id] : false
42
- }));
43
- return (0, _element.createElement)("fieldset", {
44
- className: "block-editor-link-control__settings"
45
- }, (0, _element.createElement)(_components.VisuallyHidden, {
46
- as: "legend"
47
- }, (0, _i18n.__)('Currently selected link settings')), theSettings);
48
- };
49
-
50
- var _default = LinkControlSettingsDrawer;
92
+ var _default = LinkSettingsDrawer;
51
93
  exports.default = _default;
52
94
  //# sourceMappingURL=settings-drawer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/link-control/settings-drawer.js"],"names":["noop","LinkControlSettingsDrawer","value","onChange","settings","length","handleSettingChange","setting","newValue","id","theSettings","map","title"],"mappings":";;;;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;AAIA,MAAMA,IAAI,GAAG,MAAM,CAAE,CAArB;;AAEA,MAAMC,yBAAyB,GAAG,QAA4C;AAAA,MAA1C;AAAEC,IAAAA,KAAF;AAASC,IAAAA,QAAQ,GAAGH,IAApB;AAA0BI,IAAAA;AAA1B,GAA0C;;AAC7E,MAAK,CAAEA,QAAF,IAAc,CAAEA,QAAQ,CAACC,MAA9B,EAAuC;AACtC,WAAO,IAAP;AACA;;AAED,QAAMC,mBAAmB,GAAKC,OAAF,IAAiBC,QAAF,IAAgB;AAC1DL,IAAAA,QAAQ,CAAE,EACT,GAAGD,KADM;AAET,OAAEK,OAAO,CAACE,EAAV,GAAgBD;AAFP,KAAF,CAAR;AAIA,GALD;;AAOA,QAAME,WAAW,GAAGN,QAAQ,CAACO,GAAT,CAAgBJ,OAAF,IACjC,4BAAC,yBAAD;AACC,IAAA,SAAS,EAAC,oCADX;AAEC,IAAA,GAAG,EAAGA,OAAO,CAACE,EAFf;AAGC,IAAA,KAAK,EAAGF,OAAO,CAACK,KAHjB;AAIC,IAAA,QAAQ,EAAGN,mBAAmB,CAAEC,OAAF,CAJ/B;AAKC,IAAA,OAAO,EAAGL,KAAK,GAAG,CAAC,CAAEA,KAAK,CAAEK,OAAO,CAACE,EAAV,CAAX,GAA4B;AAL5C,IADmB,CAApB;AAUA,SACC;AAAU,IAAA,SAAS,EAAC;AAApB,KACC,4BAAC,0BAAD;AAAgB,IAAA,EAAE,EAAC;AAAnB,KACG,cAAI,kCAAJ,CADH,CADD,EAIGC,WAJH,CADD;AAQA,CA9BD;;eAgCeT,yB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { ToggleControl, VisuallyHidden } from '@wordpress/components';\n\nconst noop = () => {};\n\nconst LinkControlSettingsDrawer = ( { value, onChange = noop, settings } ) => {\n\tif ( ! settings || ! settings.length ) {\n\t\treturn null;\n\t}\n\n\tconst handleSettingChange = ( setting ) => ( newValue ) => {\n\t\tonChange( {\n\t\t\t...value,\n\t\t\t[ setting.id ]: newValue,\n\t\t} );\n\t};\n\n\tconst theSettings = settings.map( ( setting ) => (\n\t\t<ToggleControl\n\t\t\tclassName=\"block-editor-link-control__setting\"\n\t\t\tkey={ setting.id }\n\t\t\tlabel={ setting.title }\n\t\t\tonChange={ handleSettingChange( setting ) }\n\t\t\tchecked={ value ? !! value[ setting.id ] : false }\n\t\t/>\n\t) );\n\n\treturn (\n\t\t<fieldset className=\"block-editor-link-control__settings\">\n\t\t\t<VisuallyHidden as=\"legend\">\n\t\t\t\t{ __( 'Currently selected link settings' ) }\n\t\t\t</VisuallyHidden>\n\t\t\t{ theSettings }\n\t\t</fieldset>\n\t);\n};\n\nexport default LinkControlSettingsDrawer;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/link-control/settings-drawer.js"],"names":["LinkSettingsDrawer","settingsOpen","setSettingsOpen","showTextControl","showSettings","textInputRef","internalTextInputValue","setInternalTextInputValue","handleSubmitWithEnter","value","settings","onChange","prefersReducedMotion","MaybeAnimatePresence","Fragment","AnimatePresence","MaybeMotionDiv","motion","div","id","settingsDrawerId","settingsIcon","open","opacity","height","collapsed","duration"],"mappings":";;;;;;;;;AAYA;;AATA;;AAMA;;AACA;;AACA;;AAKA;;AAhBA;AACA;AACA;;AAWA;AACA;AACA;AAGA,SAASA,kBAAT,OAYI;AAAA,MAZyB;AAC5BC,IAAAA,YAD4B;AAE5BC,IAAAA,eAF4B;AAG5BC,IAAAA,eAH4B;AAI5BC,IAAAA,YAJ4B;AAK5BC,IAAAA,YAL4B;AAM5BC,IAAAA,sBAN4B;AAO5BC,IAAAA,yBAP4B;AAQ5BC,IAAAA,qBAR4B;AAS5BC,IAAAA,KAT4B;AAU5BC,IAAAA,QAV4B;AAW5BC,IAAAA;AAX4B,GAYzB;AACH,QAAMC,oBAAoB,GAAG,gCAA7B;AACA,QAAMC,oBAAoB,GAAGD,oBAAoB,GAC9CE,iBAD8C,GAE9CC,qCAFH;AAGA,QAAMC,cAAc,GAAGJ,oBAAoB,GAAG,KAAH,GAAWK,6BAAOC,GAA7D;AAEA,QAAMC,EAAE,GAAG,4BAAenB,kBAAf,CAAX;AAEA,QAAMoB,gBAAgB,GAAI,gCAAgCD,EAAI,EAA9D;AAEA,SACC,qDACC,4BAAC,kBAAD;AACC,IAAA,SAAS,EAAC,0CADX;AAEC,qBAAgBlB,YAFjB;AAGC,IAAA,OAAO,EAAG,MAAMC,eAAe,CAAE,CAAED,YAAJ,CAHhC;AAIC,IAAA,IAAI,EAAGoB,eAJR;AAKC,IAAA,KAAK,EAAG,cAAI,sBAAJ,CALT;AAMC,qBAAgBD;AANjB,IADD,EASC,4BAAC,oBAAD,QACGnB,YAAY,IACb,4BAAC,cAAD;AACC,IAAA,SAAS,EAAC,mCADX;AAEC,IAAA,MAAM,EAAG,CAAEA,YAFZ;AAGC,IAAA,EAAE,EAAGmB,gBAHN;AAIC,IAAA,OAAO,EAAC,WAJT;AAKC,IAAA,OAAO,EAAC,MALT;AAMC,IAAA,IAAI,EAAC,WANN;AAOC,IAAA,QAAQ,EAAG;AACVE,MAAAA,IAAI,EAAE;AAAEC,QAAAA,OAAO,EAAE,CAAX;AAAcC,QAAAA,MAAM,EAAE;AAAtB,OADI;AAEVC,MAAAA,SAAS,EAAE;AAAEF,QAAAA,OAAO,EAAE,CAAX;AAAcC,QAAAA,MAAM,EAAE;AAAtB;AAFD,KAPZ;AAWC,IAAA,UAAU,EAAG;AACZE,MAAAA,QAAQ,EAAE;AADE;AAXd,KAeC;AAAK,IAAA,SAAS,EAAC;AAAf,KACGvB,eAAe,IAChB,4BAAC,uBAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,GAAG,EAAGE,YAFP;AAGC,IAAA,SAAS,EAAC,4EAHX;AAIC,IAAA,KAAK,EAAC,MAJP;AAKC,IAAA,KAAK,EAAGC,sBALT;AAMC,IAAA,QAAQ,EAAGC,yBANZ;AAOC,IAAA,SAAS,EAAGC;AAPb,IAFF,EAYGJ,YAAY,IACb,4BAAC,iBAAD;AACC,IAAA,KAAK,EAAGK,KADT;AAEC,IAAA,QAAQ,EAAGC,QAFZ;AAGC,IAAA,QAAQ,EAAGC;AAHZ,IAbF,CAfD,CAFF,CATD,CADD;AAoDA;;eAEcX,kB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tTextControl,\n\t__unstableMotion as motion,\n\t__unstableAnimatePresence as AnimatePresence,\n} from '@wordpress/components';\nimport { settings as settingsIcon } from '@wordpress/icons';\nimport { useReducedMotion, useInstanceId } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\nimport { Fragment } from '@wordpress/element';\n/**\n * Internal dependencies\n */\nimport Settings from './settings';\n\nfunction LinkSettingsDrawer( {\n\tsettingsOpen,\n\tsetSettingsOpen,\n\tshowTextControl,\n\tshowSettings,\n\ttextInputRef,\n\tinternalTextInputValue,\n\tsetInternalTextInputValue,\n\thandleSubmitWithEnter,\n\tvalue,\n\tsettings,\n\tonChange,\n} ) {\n\tconst prefersReducedMotion = useReducedMotion();\n\tconst MaybeAnimatePresence = prefersReducedMotion\n\t\t? Fragment\n\t\t: AnimatePresence;\n\tconst MaybeMotionDiv = prefersReducedMotion ? 'div' : motion.div;\n\n\tconst id = useInstanceId( LinkSettingsDrawer );\n\n\tconst settingsDrawerId = `link-control-settings-drawer-${ id }`;\n\n\treturn (\n\t\t<>\n\t\t\t<Button\n\t\t\t\tclassName=\"block-editor-link-control__drawer-toggle\"\n\t\t\t\taria-expanded={ settingsOpen }\n\t\t\t\tonClick={ () => setSettingsOpen( ! settingsOpen ) }\n\t\t\t\ticon={ settingsIcon }\n\t\t\t\tlabel={ __( 'Toggle link settings' ) }\n\t\t\t\taria-controls={ settingsDrawerId }\n\t\t\t/>\n\t\t\t<MaybeAnimatePresence>\n\t\t\t\t{ settingsOpen && (\n\t\t\t\t\t<MaybeMotionDiv\n\t\t\t\t\t\tclassName=\"block-editor-link-control__drawer\"\n\t\t\t\t\t\thidden={ ! settingsOpen }\n\t\t\t\t\t\tid={ settingsDrawerId }\n\t\t\t\t\t\tinitial=\"collapsed\"\n\t\t\t\t\t\tanimate=\"open\"\n\t\t\t\t\t\texit=\"collapsed\"\n\t\t\t\t\t\tvariants={ {\n\t\t\t\t\t\t\topen: { opacity: 1, height: 'auto' },\n\t\t\t\t\t\t\tcollapsed: { opacity: 0, height: 0 },\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ttransition={ {\n\t\t\t\t\t\t\tduration: 0.1,\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"block-editor-link-control__drawer-inner\">\n\t\t\t\t\t\t\t{ showTextControl && (\n\t\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\t\tref={ textInputRef }\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-link-control__setting block-editor-link-control__text-content\"\n\t\t\t\t\t\t\t\t\tlabel=\"Text\"\n\t\t\t\t\t\t\t\t\tvalue={ internalTextInputValue }\n\t\t\t\t\t\t\t\t\tonChange={ setInternalTextInputValue }\n\t\t\t\t\t\t\t\t\tonKeyDown={ handleSubmitWithEnter }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t{ showSettings && (\n\t\t\t\t\t\t\t\t<Settings\n\t\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\t\tsettings={ settings }\n\t\t\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</MaybeMotionDiv>\n\t\t\t\t) }\n\t\t\t</MaybeAnimatePresence>\n\t\t</>\n\t);\n}\n\nexport default LinkSettingsDrawer;\n"]}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _element = require("@wordpress/element");
9
+
10
+ var _i18n = require("@wordpress/i18n");
11
+
12
+ var _components = require("@wordpress/components");
13
+
14
+ /**
15
+ * WordPress dependencies
16
+ */
17
+ const noop = () => {};
18
+
19
+ const LinkControlSettings = _ref => {
20
+ let {
21
+ value,
22
+ onChange = noop,
23
+ settings
24
+ } = _ref;
25
+
26
+ if (!settings || !settings.length) {
27
+ return null;
28
+ }
29
+
30
+ const handleSettingChange = setting => newValue => {
31
+ onChange({ ...value,
32
+ [setting.id]: newValue
33
+ });
34
+ };
35
+
36
+ const theSettings = settings.map(setting => (0, _element.createElement)(_components.ToggleControl, {
37
+ className: "block-editor-link-control__setting",
38
+ key: setting.id,
39
+ label: setting.title,
40
+ onChange: handleSettingChange(setting),
41
+ checked: value ? !!value[setting.id] : false
42
+ }));
43
+ return (0, _element.createElement)("fieldset", {
44
+ className: "block-editor-link-control__settings"
45
+ }, (0, _element.createElement)(_components.VisuallyHidden, {
46
+ as: "legend"
47
+ }, (0, _i18n.__)('Currently selected link settings')), theSettings);
48
+ };
49
+
50
+ var _default = LinkControlSettings;
51
+ exports.default = _default;
52
+ //# sourceMappingURL=settings.js.map