@wordpress/edit-site 5.12.6 → 5.12.8

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 (209) hide show
  1. package/build/components/block-editor/editor-canvas.js +1 -1
  2. package/build/components/block-editor/editor-canvas.js.map +1 -1
  3. package/build/components/block-editor/use-site-editor-settings.js +10 -5
  4. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  5. package/build/components/create-pattern-modal/index.js +8 -4
  6. package/build/components/create-pattern-modal/index.js.map +1 -1
  7. package/build/components/global-styles/palette.js +1 -1
  8. package/build/components/global-styles/palette.js.map +1 -1
  9. package/build/components/header-edit-mode/index.js +6 -2
  10. package/build/components/header-edit-mode/index.js.map +1 -1
  11. package/build/components/layout/index.js +1 -1
  12. package/build/components/layout/index.js.map +1 -1
  13. package/build/components/page/header.js +1 -1
  14. package/build/components/page/header.js.map +1 -1
  15. package/build/components/page-content-focus-manager/disable-non-page-content-blocks.js +5 -5
  16. package/build/components/page-content-focus-manager/disable-non-page-content-blocks.js.map +1 -1
  17. package/build/components/page-patterns/duplicate-menu-item.js +163 -0
  18. package/build/components/page-patterns/duplicate-menu-item.js.map +1 -0
  19. package/build/components/page-patterns/grid-item.js +84 -60
  20. package/build/components/page-patterns/grid-item.js.map +1 -1
  21. package/build/components/page-patterns/grid.js +21 -13
  22. package/build/components/page-patterns/grid.js.map +1 -1
  23. package/build/components/page-patterns/header.js +69 -0
  24. package/build/components/page-patterns/header.js.map +1 -0
  25. package/build/components/page-patterns/index.js +3 -1
  26. package/build/components/page-patterns/index.js.map +1 -1
  27. package/build/components/page-patterns/patterns-list.js +67 -27
  28. package/build/components/page-patterns/patterns-list.js.map +1 -1
  29. package/build/components/page-patterns/rename-menu-item.js +109 -0
  30. package/build/components/page-patterns/rename-menu-item.js.map +1 -0
  31. package/build/components/page-patterns/use-patterns.js +99 -126
  32. package/build/components/page-patterns/use-patterns.js.map +1 -1
  33. package/build/components/page-template-parts/index.js +1 -0
  34. package/build/components/page-template-parts/index.js.map +1 -1
  35. package/build/components/page-templates/index.js +1 -0
  36. package/build/components/page-templates/index.js.map +1 -1
  37. package/build/components/sidebar-edit-mode/page-panels/page-content.js +4 -3
  38. package/build/components/sidebar-edit-mode/page-panels/page-content.js.map +1 -1
  39. package/build/components/sidebar-navigation-screen/index.js +1 -1
  40. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  41. package/build/components/sidebar-navigation-screen-global-styles/index.js +57 -17
  42. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  43. package/build/components/sidebar-navigation-screen-main/index.js +4 -2
  44. package/build/components/sidebar-navigation-screen-main/index.js.map +1 -1
  45. package/build/components/sidebar-navigation-screen-main/template-part-hint.js +45 -0
  46. package/build/components/sidebar-navigation-screen-main/template-part-hint.js.map +1 -0
  47. package/build/components/sidebar-navigation-screen-navigation-menu/edit-button.js +10 -11
  48. package/build/components/sidebar-navigation-screen-navigation-menu/edit-button.js.map +1 -1
  49. package/build/components/sidebar-navigation-screen-navigation-menu/single-navigation-menu.js +6 -2
  50. package/build/components/sidebar-navigation-screen-navigation-menu/single-navigation-menu.js.map +1 -1
  51. package/build/components/sidebar-navigation-screen-page/status-label.js +2 -35
  52. package/build/components/sidebar-navigation-screen-page/status-label.js.map +1 -1
  53. package/build/components/sidebar-navigation-screen-pattern/use-pattern-details.js +3 -3
  54. package/build/components/sidebar-navigation-screen-pattern/use-pattern-details.js.map +1 -1
  55. package/build/components/sidebar-navigation-screen-patterns/index.js +68 -43
  56. package/build/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  57. package/build/components/sidebar-navigation-screen-patterns/use-my-patterns.js +9 -5
  58. package/build/components/sidebar-navigation-screen-patterns/use-my-patterns.js.map +1 -1
  59. package/build/components/sidebar-navigation-screen-patterns/use-template-part-areas.js +20 -9
  60. package/build/components/sidebar-navigation-screen-patterns/use-template-part-areas.js.map +1 -1
  61. package/build/components/site-hub/index.js +2 -2
  62. package/build/components/site-hub/index.js.map +1 -1
  63. package/build/components/template-actions/index.js +25 -7
  64. package/build/components/template-actions/index.js.map +1 -1
  65. package/build/components/template-actions/rename-menu-item.js +9 -6
  66. package/build/components/template-actions/rename-menu-item.js.map +1 -1
  67. package/build/components/welcome-guide/page.js +2 -2
  68. package/build/components/welcome-guide/page.js.map +1 -1
  69. package/build/components/welcome-guide/template.js +2 -2
  70. package/build/components/welcome-guide/template.js.map +1 -1
  71. package/build/hooks/commands/use-edit-mode-commands.js +1 -2
  72. package/build/hooks/commands/use-edit-mode-commands.js.map +1 -1
  73. package/build/hooks/push-changes-to-global-styles/index.js +3 -1
  74. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  75. package/build/store/private-actions.js +7 -1
  76. package/build/store/private-actions.js.map +1 -1
  77. package/build/utils/use-activate-theme.js +1 -1
  78. package/build/utils/use-activate-theme.js.map +1 -1
  79. package/build-module/components/block-editor/editor-canvas.js +1 -1
  80. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  81. package/build-module/components/block-editor/use-site-editor-settings.js +10 -5
  82. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  83. package/build-module/components/create-pattern-modal/index.js +7 -4
  84. package/build-module/components/create-pattern-modal/index.js.map +1 -1
  85. package/build-module/components/global-styles/palette.js +1 -1
  86. package/build-module/components/global-styles/palette.js.map +1 -1
  87. package/build-module/components/header-edit-mode/index.js +6 -2
  88. package/build-module/components/header-edit-mode/index.js.map +1 -1
  89. package/build-module/components/layout/index.js +1 -1
  90. package/build-module/components/layout/index.js.map +1 -1
  91. package/build-module/components/page/header.js +1 -1
  92. package/build-module/components/page/header.js.map +1 -1
  93. package/build-module/components/page-content-focus-manager/disable-non-page-content-blocks.js +5 -3
  94. package/build-module/components/page-content-focus-manager/disable-non-page-content-blocks.js.map +1 -1
  95. package/build-module/components/page-patterns/duplicate-menu-item.js +147 -0
  96. package/build-module/components/page-patterns/duplicate-menu-item.js.map +1 -0
  97. package/build-module/components/page-patterns/grid-item.js +85 -66
  98. package/build-module/components/page-patterns/grid-item.js.map +1 -1
  99. package/build-module/components/page-patterns/grid.js +22 -15
  100. package/build-module/components/page-patterns/grid.js.map +1 -1
  101. package/build-module/components/page-patterns/header.js +54 -0
  102. package/build-module/components/page-patterns/header.js.map +1 -0
  103. package/build-module/components/page-patterns/index.js +3 -1
  104. package/build-module/components/page-patterns/index.js.map +1 -1
  105. package/build-module/components/page-patterns/patterns-list.js +70 -31
  106. package/build-module/components/page-patterns/patterns-list.js.map +1 -1
  107. package/build-module/components/page-patterns/rename-menu-item.js +97 -0
  108. package/build-module/components/page-patterns/rename-menu-item.js.map +1 -0
  109. package/build-module/components/page-patterns/use-patterns.js +100 -127
  110. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  111. package/build-module/components/page-template-parts/index.js +1 -0
  112. package/build-module/components/page-template-parts/index.js.map +1 -1
  113. package/build-module/components/page-templates/index.js +1 -0
  114. package/build-module/components/page-templates/index.js.map +1 -1
  115. package/build-module/components/sidebar-edit-mode/page-panels/page-content.js +5 -2
  116. package/build-module/components/sidebar-edit-mode/page-panels/page-content.js.map +1 -1
  117. package/build-module/components/sidebar-navigation-screen/index.js +1 -1
  118. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  119. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +57 -17
  120. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  121. package/build-module/components/sidebar-navigation-screen-main/index.js +4 -3
  122. package/build-module/components/sidebar-navigation-screen-main/index.js.map +1 -1
  123. package/build-module/components/sidebar-navigation-screen-main/template-part-hint.js +33 -0
  124. package/build-module/components/sidebar-navigation-screen-main/template-part-hint.js.map +1 -0
  125. package/build-module/components/sidebar-navigation-screen-navigation-menu/edit-button.js +10 -9
  126. package/build-module/components/sidebar-navigation-screen-navigation-menu/edit-button.js.map +1 -1
  127. package/build-module/components/sidebar-navigation-screen-navigation-menu/single-navigation-menu.js +6 -3
  128. package/build-module/components/sidebar-navigation-screen-navigation-menu/single-navigation-menu.js.map +1 -1
  129. package/build-module/components/sidebar-navigation-screen-page/status-label.js +2 -33
  130. package/build-module/components/sidebar-navigation-screen-page/status-label.js.map +1 -1
  131. package/build-module/components/sidebar-navigation-screen-pattern/use-pattern-details.js +3 -3
  132. package/build-module/components/sidebar-navigation-screen-pattern/use-pattern-details.js.map +1 -1
  133. package/build-module/components/sidebar-navigation-screen-patterns/index.js +71 -44
  134. package/build-module/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  135. package/build-module/components/sidebar-navigation-screen-patterns/use-my-patterns.js +9 -5
  136. package/build-module/components/sidebar-navigation-screen-patterns/use-my-patterns.js.map +1 -1
  137. package/build-module/components/sidebar-navigation-screen-patterns/use-template-part-areas.js +18 -9
  138. package/build-module/components/sidebar-navigation-screen-patterns/use-template-part-areas.js.map +1 -1
  139. package/build-module/components/site-hub/index.js +2 -2
  140. package/build-module/components/site-hub/index.js.map +1 -1
  141. package/build-module/components/template-actions/index.js +26 -8
  142. package/build-module/components/template-actions/index.js.map +1 -1
  143. package/build-module/components/template-actions/rename-menu-item.js +8 -6
  144. package/build-module/components/template-actions/rename-menu-item.js.map +1 -1
  145. package/build-module/components/welcome-guide/page.js +2 -2
  146. package/build-module/components/welcome-guide/page.js.map +1 -1
  147. package/build-module/components/welcome-guide/template.js +2 -2
  148. package/build-module/components/welcome-guide/template.js.map +1 -1
  149. package/build-module/hooks/commands/use-edit-mode-commands.js +1 -2
  150. package/build-module/hooks/commands/use-edit-mode-commands.js.map +1 -1
  151. package/build-module/hooks/push-changes-to-global-styles/index.js +4 -2
  152. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  153. package/build-module/store/private-actions.js +7 -1
  154. package/build-module/store/private-actions.js.map +1 -1
  155. package/build-module/utils/use-activate-theme.js +1 -1
  156. package/build-module/utils/use-activate-theme.js.map +1 -1
  157. package/build-style/style-rtl.css +149 -50
  158. package/build-style/style.css +149 -50
  159. package/package.json +19 -19
  160. package/src/components/block-editor/editor-canvas.js +1 -1
  161. package/src/components/block-editor/use-site-editor-settings.js +8 -4
  162. package/src/components/create-pattern-modal/index.js +6 -3
  163. package/src/components/global-styles/palette.js +10 -9
  164. package/src/components/header-edit-mode/document-actions/style.scss +12 -0
  165. package/src/components/header-edit-mode/index.js +17 -9
  166. package/src/components/layout/index.js +1 -1
  167. package/src/components/layout/style.scss +0 -11
  168. package/src/components/page/header.js +1 -1
  169. package/src/components/page-content-focus-manager/disable-non-page-content-blocks.js +12 -3
  170. package/src/components/page-patterns/duplicate-menu-item.js +196 -0
  171. package/src/components/page-patterns/grid-item.js +187 -132
  172. package/src/components/page-patterns/grid.js +35 -22
  173. package/src/components/page-patterns/header.js +69 -0
  174. package/src/components/page-patterns/index.js +6 -1
  175. package/src/components/page-patterns/patterns-list.js +89 -47
  176. package/src/components/page-patterns/rename-menu-item.js +115 -0
  177. package/src/components/page-patterns/style.scss +86 -26
  178. package/src/components/page-patterns/use-patterns.js +99 -176
  179. package/src/components/page-template-parts/index.js +1 -1
  180. package/src/components/page-templates/index.js +1 -1
  181. package/src/components/sidebar-edit-mode/page-panels/page-content.js +7 -5
  182. package/src/components/sidebar-navigation-screen/index.js +1 -1
  183. package/src/components/sidebar-navigation-screen/style.scss +19 -1
  184. package/src/components/sidebar-navigation-screen-global-styles/index.js +56 -39
  185. package/src/components/sidebar-navigation-screen-main/index.js +44 -40
  186. package/src/components/sidebar-navigation-screen-main/template-part-hint.js +36 -0
  187. package/src/components/sidebar-navigation-screen-navigation-menu/edit-button.js +8 -11
  188. package/src/components/sidebar-navigation-screen-navigation-menu/single-navigation-menu.js +10 -6
  189. package/src/components/sidebar-navigation-screen-page/status-label.js +2 -36
  190. package/src/components/sidebar-navigation-screen-pattern/use-pattern-details.js +3 -3
  191. package/src/components/sidebar-navigation-screen-patterns/index.js +79 -75
  192. package/src/components/sidebar-navigation-screen-patterns/style.scss +23 -1
  193. package/src/components/sidebar-navigation-screen-patterns/use-my-patterns.js +7 -6
  194. package/src/components/sidebar-navigation-screen-patterns/use-template-part-areas.js +31 -9
  195. package/src/components/site-hub/index.js +2 -2
  196. package/src/components/template-actions/index.js +40 -9
  197. package/src/components/template-actions/rename-menu-item.js +8 -6
  198. package/src/components/welcome-guide/page.js +2 -2
  199. package/src/components/welcome-guide/template.js +2 -2
  200. package/src/hooks/commands/use-edit-mode-commands.js +0 -1
  201. package/src/hooks/push-changes-to-global-styles/index.js +8 -1
  202. package/src/store/private-actions.js +5 -1
  203. package/src/style.scss +10 -12
  204. package/src/utils/use-activate-theme.js +1 -1
  205. package/build/components/page-content-focus-manager/constants.js +0 -9
  206. package/build/components/page-content-focus-manager/constants.js.map +0 -1
  207. package/build-module/components/page-content-focus-manager/constants.js +0 -2
  208. package/build-module/components/page-content-focus-manager/constants.js.map +0 -1
  209. package/src/components/page-content-focus-manager/constants.js +0 -5
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = DuplicateMenuItem;
7
+
8
+ var _element = require("@wordpress/element");
9
+
10
+ var _components = require("@wordpress/components");
11
+
12
+ var _coreData = require("@wordpress/core-data");
13
+
14
+ var _data = require("@wordpress/data");
15
+
16
+ var _i18n = require("@wordpress/i18n");
17
+
18
+ var _notices = require("@wordpress/notices");
19
+
20
+ var _router = require("@wordpress/router");
21
+
22
+ var _utils = require("./utils");
23
+
24
+ var _templatePartCreate = require("../../utils/template-part-create");
25
+
26
+ var _lockUnlock = require("../../lock-unlock");
27
+
28
+ /**
29
+ * WordPress dependencies
30
+ */
31
+
32
+ /**
33
+ * Internal dependencies
34
+ */
35
+ const {
36
+ useHistory
37
+ } = (0, _lockUnlock.unlock)(_router.privateApis);
38
+
39
+ function getPatternMeta(item) {
40
+ if (item.type === _utils.PATTERNS) {
41
+ return {
42
+ wp_pattern_sync_status: _utils.SYNC_TYPES.unsynced
43
+ };
44
+ }
45
+
46
+ const syncStatus = item.reusableBlock.wp_pattern_sync_status;
47
+ const isUnsynced = syncStatus === _utils.SYNC_TYPES.unsynced;
48
+ return { ...item.reusableBlock.meta,
49
+ wp_pattern_sync_status: isUnsynced ? syncStatus : undefined
50
+ };
51
+ }
52
+
53
+ function DuplicateMenuItem({
54
+ categoryId,
55
+ item,
56
+ label = (0, _i18n.__)('Duplicate'),
57
+ onClose
58
+ }) {
59
+ const {
60
+ saveEntityRecord
61
+ } = (0, _data.useDispatch)(_coreData.store);
62
+ const {
63
+ createErrorNotice,
64
+ createSuccessNotice
65
+ } = (0, _data.useDispatch)(_notices.store);
66
+ const history = useHistory();
67
+ const existingTemplateParts = (0, _templatePartCreate.useExistingTemplateParts)();
68
+
69
+ async function createTemplatePart() {
70
+ try {
71
+ const copiedTitle = (0, _i18n.sprintf)(
72
+ /* translators: %s: Existing template part title */
73
+ (0, _i18n.__)('%s (Copy)'), item.title);
74
+ const title = (0, _templatePartCreate.getUniqueTemplatePartTitle)(copiedTitle, existingTemplateParts);
75
+ const slug = (0, _templatePartCreate.getCleanTemplatePartSlug)(title);
76
+ const {
77
+ area,
78
+ content
79
+ } = item.templatePart;
80
+ const result = await saveEntityRecord('postType', 'wp_template_part', {
81
+ slug,
82
+ title,
83
+ content,
84
+ area
85
+ }, {
86
+ throwOnError: true
87
+ });
88
+ createSuccessNotice((0, _i18n.sprintf)( // translators: %s: The new template part's title e.g. 'Call to action (copy)'.
89
+ (0, _i18n.__)('"%s" created.'), title), {
90
+ type: 'snackbar',
91
+ id: 'edit-site-patterns-success',
92
+ actions: [{
93
+ label: (0, _i18n.__)('Edit'),
94
+ onClick: () => history.push({
95
+ postType: _utils.TEMPLATE_PARTS,
96
+ postId: result?.id,
97
+ categoryType: _utils.TEMPLATE_PARTS,
98
+ categoryId
99
+ })
100
+ }]
101
+ });
102
+ onClose();
103
+ } catch (error) {
104
+ const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : (0, _i18n.__)('An error occurred while creating the template part.');
105
+ createErrorNotice(errorMessage, {
106
+ type: 'snackbar',
107
+ id: 'edit-site-patterns-error'
108
+ });
109
+ onClose();
110
+ }
111
+ }
112
+
113
+ async function createPattern() {
114
+ try {
115
+ const isThemePattern = item.type === _utils.PATTERNS;
116
+ const title = (0, _i18n.sprintf)(
117
+ /* translators: %s: Existing pattern title */
118
+ (0, _i18n.__)('%s (Copy)'), item.title);
119
+ const result = await saveEntityRecord('postType', 'wp_block', {
120
+ content: isThemePattern ? item.content : item.reusableBlock.content,
121
+ meta: getPatternMeta(item),
122
+ status: 'publish',
123
+ title
124
+ }, {
125
+ throwOnError: true
126
+ });
127
+ const actionLabel = isThemePattern ? (0, _i18n.__)('View my patterns') : (0, _i18n.__)('Edit');
128
+ const newLocation = isThemePattern ? {
129
+ categoryType: _utils.USER_PATTERNS,
130
+ categoryId: _utils.USER_PATTERN_CATEGORY,
131
+ path: '/patterns'
132
+ } : {
133
+ categoryType: _utils.USER_PATTERNS,
134
+ categoryId: _utils.USER_PATTERN_CATEGORY,
135
+ postType: _utils.USER_PATTERNS,
136
+ postId: result?.id
137
+ };
138
+ createSuccessNotice((0, _i18n.sprintf)( // translators: %s: The new pattern's title e.g. 'Call to action (copy)'.
139
+ (0, _i18n.__)('"%s" added to my patterns.'), title), {
140
+ type: 'snackbar',
141
+ id: 'edit-site-patterns-success',
142
+ actions: [{
143
+ label: actionLabel,
144
+ onClick: () => history.push(newLocation)
145
+ }]
146
+ });
147
+ onClose();
148
+ } catch (error) {
149
+ const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : (0, _i18n.__)('An error occurred while creating the pattern.');
150
+ createErrorNotice(errorMessage, {
151
+ type: 'snackbar',
152
+ id: 'edit-site-patterns-error'
153
+ });
154
+ onClose();
155
+ }
156
+ }
157
+
158
+ const createItem = item.type === _utils.TEMPLATE_PARTS ? createTemplatePart : createPattern;
159
+ return (0, _element.createElement)(_components.MenuItem, {
160
+ onClick: createItem
161
+ }, label);
162
+ }
163
+ //# sourceMappingURL=duplicate-menu-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/page-patterns/duplicate-menu-item.js"],"names":["useHistory","routerPrivateApis","getPatternMeta","item","type","PATTERNS","wp_pattern_sync_status","SYNC_TYPES","unsynced","syncStatus","reusableBlock","isUnsynced","meta","undefined","DuplicateMenuItem","categoryId","label","onClose","saveEntityRecord","coreStore","createErrorNotice","createSuccessNotice","noticesStore","history","existingTemplateParts","createTemplatePart","copiedTitle","title","slug","area","content","templatePart","result","throwOnError","id","actions","onClick","push","postType","TEMPLATE_PARTS","postId","categoryType","error","errorMessage","message","code","createPattern","isThemePattern","status","actionLabel","newLocation","USER_PATTERNS","USER_PATTERN_CATEGORY","path","createItem"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDispatch } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { privateApis as routerPrivateApis } from '@wordpress/router';\n\n/**\n * Internal dependencies\n */\nimport {\n\tTEMPLATE_PARTS,\n\tPATTERNS,\n\tSYNC_TYPES,\n\tUSER_PATTERNS,\n\tUSER_PATTERN_CATEGORY,\n} from './utils';\nimport {\n\tuseExistingTemplateParts,\n\tgetUniqueTemplatePartTitle,\n\tgetCleanTemplatePartSlug,\n} from '../../utils/template-part-create';\nimport { unlock } from '../../lock-unlock';\n\nconst { useHistory } = unlock( routerPrivateApis );\n\nfunction getPatternMeta( item ) {\n\tif ( item.type === PATTERNS ) {\n\t\treturn { wp_pattern_sync_status: SYNC_TYPES.unsynced };\n\t}\n\n\tconst syncStatus = item.reusableBlock.wp_pattern_sync_status;\n\tconst isUnsynced = syncStatus === SYNC_TYPES.unsynced;\n\n\treturn {\n\t\t...item.reusableBlock.meta,\n\t\twp_pattern_sync_status: isUnsynced ? syncStatus : undefined,\n\t};\n}\n\nexport default function DuplicateMenuItem( {\n\tcategoryId,\n\titem,\n\tlabel = __( 'Duplicate' ),\n\tonClose,\n} ) {\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\n\tconst history = useHistory();\n\tconst existingTemplateParts = useExistingTemplateParts();\n\n\tasync function createTemplatePart() {\n\t\ttry {\n\t\t\tconst copiedTitle = sprintf(\n\t\t\t\t/* translators: %s: Existing template part title */\n\t\t\t\t__( '%s (Copy)' ),\n\t\t\t\titem.title\n\t\t\t);\n\t\t\tconst title = getUniqueTemplatePartTitle(\n\t\t\t\tcopiedTitle,\n\t\t\t\texistingTemplateParts\n\t\t\t);\n\t\t\tconst slug = getCleanTemplatePartSlug( title );\n\t\t\tconst { area, content } = item.templatePart;\n\n\t\t\tconst result = await saveEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_template_part',\n\t\t\t\t{ slug, title, content, area },\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\n\t\t\tcreateSuccessNotice(\n\t\t\t\tsprintf(\n\t\t\t\t\t// translators: %s: The new template part's title e.g. 'Call to action (copy)'.\n\t\t\t\t\t__( '\"%s\" created.' ),\n\t\t\t\t\ttitle\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tid: 'edit-site-patterns-success',\n\t\t\t\t\tactions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: __( 'Edit' ),\n\t\t\t\t\t\t\tonClick: () =>\n\t\t\t\t\t\t\t\thistory.push( {\n\t\t\t\t\t\t\t\t\tpostType: TEMPLATE_PARTS,\n\t\t\t\t\t\t\t\t\tpostId: result?.id,\n\t\t\t\t\t\t\t\t\tcategoryType: TEMPLATE_PARTS,\n\t\t\t\t\t\t\t\t\tcategoryId,\n\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tonClose();\n\t\t} catch ( error ) {\n\t\t\tconst errorMessage =\n\t\t\t\terror.message && error.code !== 'unknown_error'\n\t\t\t\t\t? error.message\n\t\t\t\t\t: __(\n\t\t\t\t\t\t\t'An error occurred while creating the template part.'\n\t\t\t\t\t );\n\n\t\t\tcreateErrorNotice( errorMessage, {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'edit-site-patterns-error',\n\t\t\t} );\n\t\t\tonClose();\n\t\t}\n\t}\n\n\tasync function createPattern() {\n\t\ttry {\n\t\t\tconst isThemePattern = item.type === PATTERNS;\n\t\t\tconst title = sprintf(\n\t\t\t\t/* translators: %s: Existing pattern title */\n\t\t\t\t__( '%s (Copy)' ),\n\t\t\t\titem.title\n\t\t\t);\n\n\t\t\tconst result = await saveEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_block',\n\t\t\t\t{\n\t\t\t\t\tcontent: isThemePattern\n\t\t\t\t\t\t? item.content\n\t\t\t\t\t\t: item.reusableBlock.content,\n\t\t\t\t\tmeta: getPatternMeta( item ),\n\t\t\t\t\tstatus: 'publish',\n\t\t\t\t\ttitle,\n\t\t\t\t},\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\n\t\t\tconst actionLabel = isThemePattern\n\t\t\t\t? __( 'View my patterns' )\n\t\t\t\t: __( 'Edit' );\n\n\t\t\tconst newLocation = isThemePattern\n\t\t\t\t? {\n\t\t\t\t\t\tcategoryType: USER_PATTERNS,\n\t\t\t\t\t\tcategoryId: USER_PATTERN_CATEGORY,\n\t\t\t\t\t\tpath: '/patterns',\n\t\t\t\t }\n\t\t\t\t: {\n\t\t\t\t\t\tcategoryType: USER_PATTERNS,\n\t\t\t\t\t\tcategoryId: USER_PATTERN_CATEGORY,\n\t\t\t\t\t\tpostType: USER_PATTERNS,\n\t\t\t\t\t\tpostId: result?.id,\n\t\t\t\t };\n\n\t\t\tcreateSuccessNotice(\n\t\t\t\tsprintf(\n\t\t\t\t\t// translators: %s: The new pattern's title e.g. 'Call to action (copy)'.\n\t\t\t\t\t__( '\"%s\" added to my patterns.' ),\n\t\t\t\t\ttitle\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\tid: 'edit-site-patterns-success',\n\t\t\t\t\tactions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: actionLabel,\n\t\t\t\t\t\t\tonClick: () => history.push( newLocation ),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tonClose();\n\t\t} catch ( error ) {\n\t\t\tconst errorMessage =\n\t\t\t\terror.message && error.code !== 'unknown_error'\n\t\t\t\t\t? error.message\n\t\t\t\t\t: __( 'An error occurred while creating the pattern.' );\n\n\t\t\tcreateErrorNotice( errorMessage, {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'edit-site-patterns-error',\n\t\t\t} );\n\t\t\tonClose();\n\t\t}\n\t}\n\n\tconst createItem =\n\t\titem.type === TEMPLATE_PARTS ? createTemplatePart : createPattern;\n\n\treturn <MenuItem onClick={ createItem }>{ label }</MenuItem>;\n}\n"]}
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = GridItem;
8
+ exports.default = void 0;
9
9
 
10
10
  var _element = require("@wordpress/element");
11
11
 
@@ -25,10 +25,14 @@ var _notices = require("@wordpress/notices");
25
25
 
26
26
  var _reusableBlocks = require("@wordpress/reusable-blocks");
27
27
 
28
- var _keycodes = require("@wordpress/keycodes");
28
+ var _renameMenuItem = _interopRequireDefault(require("./rename-menu-item"));
29
+
30
+ var _duplicateMenuItem = _interopRequireDefault(require("./duplicate-menu-item"));
29
31
 
30
32
  var _utils = require("./utils");
31
33
 
34
+ var _store = require("../../store");
35
+
32
36
  var _link = require("../routes/link");
33
37
 
34
38
  /**
@@ -42,16 +46,22 @@ var _link = require("../routes/link");
42
46
  /**
43
47
  * Internal dependencies
44
48
  */
45
- const THEME_PATTERN_TOOLTIP = (0, _i18n.__)('Theme patterns cannot be edited.');
49
+ const templatePartIcons = {
50
+ header: _icons.header,
51
+ footer: _icons.footer,
52
+ uncategorized: _icons.symbolFilled
53
+ };
46
54
 
47
55
  function GridItem({
48
56
  categoryId,
49
- composite,
50
- icon,
51
- item
57
+ item,
58
+ ...props
52
59
  }) {
53
60
  const descriptionId = (0, _element.useId)();
54
61
  const [isDeleteDialogOpen, setIsDeleteDialogOpen] = (0, _element.useState)(false);
62
+ const {
63
+ removeTemplate
64
+ } = (0, _data.useDispatch)(_store.store);
55
65
  const {
56
66
  __experimentalDeleteReusableBlock
57
67
  } = (0, _data.useDispatch)(_reusableBlocks.store);
@@ -59,78 +69,76 @@ function GridItem({
59
69
  createErrorNotice,
60
70
  createSuccessNotice
61
71
  } = (0, _data.useDispatch)(_notices.store);
72
+ const isUserPattern = item.type === _utils.USER_PATTERNS;
73
+ const isNonUserPattern = item.type === _utils.PATTERNS;
74
+ const isTemplatePart = item.type === _utils.TEMPLATE_PARTS;
62
75
  const {
63
76
  onClick
64
77
  } = (0, _link.useLink)({
65
78
  postType: item.type,
66
- postId: item.type === _utils.USER_PATTERNS ? item.id : item.name,
79
+ postId: isUserPattern ? item.id : item.name,
67
80
  categoryId,
68
81
  categoryType: item.type
69
82
  });
70
-
71
- const onKeyDown = event => {
72
- if (_keycodes.DELETE === event.keyCode || _keycodes.BACKSPACE === event.keyCode) {
73
- setIsDeleteDialogOpen(true);
74
- }
75
- };
76
-
77
83
  const isEmpty = !item.blocks?.length;
78
84
  const patternClassNames = (0, _classnames.default)('edit-site-patterns__pattern', {
79
85
  'is-placeholder': isEmpty
80
86
  });
81
87
  const previewClassNames = (0, _classnames.default)('edit-site-patterns__preview', {
82
- 'is-inactive': item.type === _utils.PATTERNS
88
+ 'is-inactive': isNonUserPattern
83
89
  });
84
90
 
85
91
  const deletePattern = async () => {
86
92
  try {
87
93
  await __experimentalDeleteReusableBlock(item.id);
88
- createSuccessNotice((0, _i18n.__)('Pattern successfully deleted.'), {
89
- type: 'snackbar'
94
+ createSuccessNotice((0, _i18n.sprintf)( // translators: %s: The pattern's title e.g. 'Call to action'.
95
+ (0, _i18n.__)('"%s" deleted.'), item.title), {
96
+ type: 'snackbar',
97
+ id: 'edit-site-patterns-success'
90
98
  });
91
99
  } catch (error) {
92
100
  const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : (0, _i18n.__)('An error occurred while deleting the pattern.');
93
101
  createErrorNotice(errorMessage, {
94
- type: 'snackbar'
102
+ type: 'snackbar',
103
+ id: 'edit-site-patterns-error'
95
104
  });
96
105
  }
97
106
  };
98
107
 
99
- const isUserPattern = item.type === _utils.USER_PATTERNS;
108
+ const deleteItem = () => isTemplatePart ? removeTemplate(item) : deletePattern(); // Only custom patterns or custom template parts can be renamed or deleted.
109
+
110
+
111
+ const isCustomPattern = isUserPattern || isTemplatePart && item.isCustom;
112
+ const hasThemeFile = isTemplatePart && item.templatePart.has_theme_file;
100
113
  const ariaDescriptions = [];
101
114
 
102
- if (isUserPattern) {
115
+ if (isCustomPattern) {
103
116
  // User patterns don't have descriptions, but can be edited and deleted, so include some help text.
104
117
  ariaDescriptions.push((0, _i18n.__)('Press Enter to edit, or Delete to delete the pattern.'));
105
118
  } else if (item.description) {
106
119
  ariaDescriptions.push(item.description);
107
120
  }
108
121
 
109
- if (item.type === _utils.PATTERNS) {
110
- ariaDescriptions.push(THEME_PATTERN_TOOLTIP);
111
- }
112
-
113
- let itemIcon = icon;
114
-
115
- if (categoryId === 'header') {
116
- itemIcon = _icons.header;
117
- } else if (categoryId === 'footer') {
118
- itemIcon = _icons.footer;
119
- } else if (categoryId === 'uncategorized') {
120
- itemIcon = _icons.symbolFilled;
122
+ if (isNonUserPattern) {
123
+ ariaDescriptions.push((0, _i18n.__)('Theme patterns cannot be edited.'));
121
124
  }
122
125
 
123
- return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)("div", {
126
+ const itemIcon = templatePartIcons[categoryId] || (item.syncStatus === _utils.SYNC_TYPES.full ? _icons.symbol : undefined);
127
+ const confirmButtonText = hasThemeFile ? (0, _i18n.__)('Clear') : (0, _i18n.__)('Delete');
128
+ const confirmPrompt = hasThemeFile ? (0, _i18n.__)('Are you sure you want to clear these customizations?') : (0, _i18n.sprintf)( // translators: %s: The pattern or template part's title e.g. 'Call to action'.
129
+ (0, _i18n.__)('Are you sure you want to delete "%s"?'), item.title);
130
+ return (0, _element.createElement)("li", {
124
131
  className: patternClassNames
125
- }, (0, _element.createElement)(_components.__unstableCompositeItem, {
126
- className: previewClassNames,
127
- role: "option",
128
- as: "div",
129
- ...composite,
132
+ }, (0, _element.createElement)("button", {
133
+ className: previewClassNames // Even though still incomplete, passing ids helps performance.
134
+ // @see https://reakit.io/docs/composite/#performance.
135
+ ,
136
+ id: `edit-site-patterns-${item.name}`,
137
+ ...props,
130
138
  onClick: item.type !== _utils.PATTERNS ? onClick : undefined,
131
- onKeyDown: isUserPattern ? onKeyDown : undefined,
139
+ "aria-disabled": item.type !== _utils.PATTERNS ? 'false' : 'true',
132
140
  "aria-label": item.title,
133
- "aria-describedby": ariaDescriptions.length ? ariaDescriptions.join(' ') : undefined
141
+ "aria-describedby": ariaDescriptions.length ? ariaDescriptions.map((_, index) => `${descriptionId}-${index}`).join(' ') : undefined
134
142
  }, isEmpty && (0, _i18n.__)('Empty pattern'), !isEmpty && (0, _element.createElement)(_blockEditor.BlockPreview, {
135
143
  blocks: item.blocks
136
144
  })), ariaDescriptions.map((ariaDescription, index) => (0, _element.createElement)("div", {
@@ -138,7 +146,6 @@ function GridItem({
138
146
  hidden: true,
139
147
  id: `${descriptionId}-${index}`
140
148
  }, ariaDescription)), (0, _element.createElement)(_components.__experimentalHStack, {
141
- "aria-hidden": "true",
142
149
  className: "edit-site-patterns__footer",
143
150
  justify: "space-between"
144
151
  }, (0, _element.createElement)(_components.__experimentalHStack, {
@@ -146,26 +153,33 @@ function GridItem({
146
153
  justify: "left",
147
154
  spacing: 3,
148
155
  className: "edit-site-patterns__pattern-title"
149
- }, icon && (0, _element.createElement)(_icons.Icon, {
156
+ }, itemIcon && (0, _element.createElement)(_components.Tooltip, {
157
+ position: "top center",
158
+ text: (0, _i18n.__)('Editing this pattern will also update anywhere it is used')
159
+ }, (0, _element.createElement)("span", null, (0, _element.createElement)(_icons.Icon, {
150
160
  className: "edit-site-patterns__pattern-icon",
151
161
  icon: itemIcon
152
- }), (0, _element.createElement)(_components.Flex, {
153
- as: _components.__experimentalHeading,
154
- level: 5,
162
+ }))), (0, _element.createElement)(_components.Flex, {
163
+ as: "span",
155
164
  gap: 0,
156
165
  justify: "left"
157
- }, item.title, item.type === _utils.PATTERNS && (0, _element.createElement)(_components.Tooltip, {
166
+ }, item.type === _utils.PATTERNS ? item.title : (0, _element.createElement)(_components.__experimentalHeading, {
167
+ level: 5
168
+ }, (0, _element.createElement)(_components.Button, {
169
+ variant: "link",
170
+ onClick: onClick // Required for the grid's roving tab index system.
171
+ // See https://github.com/WordPress/gutenberg/pull/51898#discussion_r1243399243.
172
+ ,
173
+ tabIndex: "-1"
174
+ }, item.title)), item.type === _utils.PATTERNS && (0, _element.createElement)(_components.Tooltip, {
158
175
  position: "top center",
159
176
  text: (0, _i18n.__)('Theme patterns cannot be edited.')
160
177
  }, (0, _element.createElement)("span", {
161
178
  className: "edit-site-patterns__pattern-lock-icon"
162
179
  }, (0, _element.createElement)(_icons.Icon, {
163
- style: {
164
- fill: 'currentcolor'
165
- },
166
180
  icon: _icons.lockSmall,
167
181
  size: 24
168
- }))))), item.type === _utils.USER_PATTERNS && (0, _element.createElement)(_components.DropdownMenu, {
182
+ }))))), (0, _element.createElement)(_components.DropdownMenu, {
169
183
  icon: _icons.moreHorizontal,
170
184
  label: (0, _i18n.__)('Actions'),
171
185
  className: "edit-site-patterns__dropdown",
@@ -177,18 +191,28 @@ function GridItem({
177
191
  isSmall: true,
178
192
  describedBy: (0, _i18n.sprintf)(
179
193
  /* translators: %s: pattern name */
180
- (0, _i18n.__)('Action menu for %s pattern'), item.title),
181
- // The dropdown menu is not focusable using the
182
- // keyboard as this would interfere with the grid's
183
- // roving tab index system. Instead, keyboard users
184
- // use keyboard shortcuts to trigger actions.
185
- tabIndex: -1
194
+ (0, _i18n.__)('Action menu for %s pattern'), item.title)
186
195
  }
187
- }, () => (0, _element.createElement)(_components.MenuGroup, null, (0, _element.createElement)(_components.MenuItem, {
196
+ }, ({
197
+ onClose
198
+ }) => (0, _element.createElement)(_components.MenuGroup, null, isCustomPattern && !hasThemeFile && (0, _element.createElement)(_renameMenuItem.default, {
199
+ item: item,
200
+ onClose: onClose
201
+ }), (0, _element.createElement)(_duplicateMenuItem.default, {
202
+ categoryId: categoryId,
203
+ item: item,
204
+ onClose: onClose,
205
+ label: isNonUserPattern ? (0, _i18n.__)('Copy to My patterns') : (0, _i18n.__)('Duplicate')
206
+ }), isCustomPattern && (0, _element.createElement)(_components.MenuItem, {
188
207
  onClick: () => setIsDeleteDialogOpen(true)
189
- }, (0, _i18n.__)('Delete')))))), isDeleteDialogOpen && (0, _element.createElement)(_components.__experimentalConfirmDialog, {
190
- onConfirm: deletePattern,
208
+ }, hasThemeFile ? (0, _i18n.__)('Clear customizations') : (0, _i18n.__)('Delete'))))), isDeleteDialogOpen && (0, _element.createElement)(_components.__experimentalConfirmDialog, {
209
+ confirmButtonText: confirmButtonText,
210
+ onConfirm: deleteItem,
191
211
  onCancel: () => setIsDeleteDialogOpen(false)
192
- }, (0, _i18n.__)('Are you sure you want to delete this pattern?')));
212
+ }, confirmPrompt));
193
213
  }
214
+
215
+ var _default = (0, _element.memo)(GridItem);
216
+
217
+ exports.default = _default;
194
218
  //# sourceMappingURL=grid-item.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/page-patterns/grid-item.js"],"names":["THEME_PATTERN_TOOLTIP","GridItem","categoryId","composite","icon","item","descriptionId","isDeleteDialogOpen","setIsDeleteDialogOpen","__experimentalDeleteReusableBlock","reusableBlocksStore","createErrorNotice","createSuccessNotice","noticesStore","onClick","postType","type","postId","USER_PATTERNS","id","name","categoryType","onKeyDown","event","DELETE","keyCode","BACKSPACE","isEmpty","blocks","length","patternClassNames","previewClassNames","PATTERNS","deletePattern","error","errorMessage","message","code","isUserPattern","ariaDescriptions","push","description","itemIcon","header","footer","symbolFilled","undefined","title","join","map","ariaDescription","index","Heading","fill","lockSmall","moreHorizontal","placement","className","isSmall","describedBy","tabIndex"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { BlockPreview } from '@wordpress/block-editor';\nimport {\n\t__experimentalConfirmDialog as ConfirmDialog,\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItem,\n\t__experimentalHeading as Heading,\n\t__experimentalHStack as HStack,\n\t__unstableCompositeItem as CompositeItem,\n\tTooltip,\n\tFlex,\n} from '@wordpress/components';\nimport { useDispatch } from '@wordpress/data';\nimport { useState, useId } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tIcon,\n\theader,\n\tfooter,\n\tsymbolFilled,\n\tmoreHorizontal,\n\tlockSmall,\n} from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as reusableBlocksStore } from '@wordpress/reusable-blocks';\nimport { DELETE, BACKSPACE } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport { PATTERNS, USER_PATTERNS } from './utils';\nimport { useLink } from '../routes/link';\n\nconst THEME_PATTERN_TOOLTIP = __( 'Theme patterns cannot be edited.' );\n\nexport default function GridItem( { categoryId, composite, icon, item } ) {\n\tconst descriptionId = useId();\n\tconst [ isDeleteDialogOpen, setIsDeleteDialogOpen ] = useState( false );\n\n\tconst { __experimentalDeleteReusableBlock } =\n\t\tuseDispatch( reusableBlocksStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\n\tconst { onClick } = useLink( {\n\t\tpostType: item.type,\n\t\tpostId: item.type === USER_PATTERNS ? item.id : item.name,\n\t\tcategoryId,\n\t\tcategoryType: item.type,\n\t} );\n\n\tconst onKeyDown = ( event ) => {\n\t\tif ( DELETE === event.keyCode || BACKSPACE === event.keyCode ) {\n\t\t\tsetIsDeleteDialogOpen( true );\n\t\t}\n\t};\n\n\tconst isEmpty = ! item.blocks?.length;\n\tconst patternClassNames = classnames( 'edit-site-patterns__pattern', {\n\t\t'is-placeholder': isEmpty,\n\t} );\n\tconst previewClassNames = classnames( 'edit-site-patterns__preview', {\n\t\t'is-inactive': item.type === PATTERNS,\n\t} );\n\n\tconst deletePattern = async () => {\n\t\ttry {\n\t\t\tawait __experimentalDeleteReusableBlock( item.id );\n\t\t\tcreateSuccessNotice( __( 'Pattern successfully deleted.' ), {\n\t\t\t\ttype: 'snackbar',\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\tconst errorMessage =\n\t\t\t\terror.message && error.code !== 'unknown_error'\n\t\t\t\t\t? error.message\n\t\t\t\t\t: __( 'An error occurred while deleting the pattern.' );\n\t\t\tcreateErrorNotice( errorMessage, { type: 'snackbar' } );\n\t\t}\n\t};\n\n\tconst isUserPattern = item.type === USER_PATTERNS;\n\tconst ariaDescriptions = [];\n\tif ( isUserPattern ) {\n\t\t// User patterns don't have descriptions, but can be edited and deleted, so include some help text.\n\t\tariaDescriptions.push(\n\t\t\t__( 'Press Enter to edit, or Delete to delete the pattern.' )\n\t\t);\n\t} else if ( item.description ) {\n\t\tariaDescriptions.push( item.description );\n\t}\n\tif ( item.type === PATTERNS ) {\n\t\tariaDescriptions.push( THEME_PATTERN_TOOLTIP );\n\t}\n\n\tlet itemIcon = icon;\n\tif ( categoryId === 'header' ) {\n\t\titemIcon = header;\n\t} else if ( categoryId === 'footer' ) {\n\t\titemIcon = footer;\n\t} else if ( categoryId === 'uncategorized' ) {\n\t\titemIcon = symbolFilled;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<div className={ patternClassNames }>\n\t\t\t\t<CompositeItem\n\t\t\t\t\tclassName={ previewClassNames }\n\t\t\t\t\trole=\"option\"\n\t\t\t\t\tas=\"div\"\n\t\t\t\t\t{ ...composite }\n\t\t\t\t\tonClick={ item.type !== PATTERNS ? onClick : undefined }\n\t\t\t\t\tonKeyDown={ isUserPattern ? onKeyDown : undefined }\n\t\t\t\t\taria-label={ item.title }\n\t\t\t\t\taria-describedby={\n\t\t\t\t\t\tariaDescriptions.length\n\t\t\t\t\t\t\t? ariaDescriptions.join( ' ' )\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{ isEmpty && __( 'Empty pattern' ) }\n\t\t\t\t\t{ ! isEmpty && <BlockPreview blocks={ item.blocks } /> }\n\t\t\t\t</CompositeItem>\n\t\t\t\t{ ariaDescriptions.map( ( ariaDescription, index ) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={ index }\n\t\t\t\t\t\thidden\n\t\t\t\t\t\tid={ `${ descriptionId }-${ index }` }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ ariaDescription }\n\t\t\t\t\t</div>\n\t\t\t\t) ) }\n\t\t\t\t<HStack\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"edit-site-patterns__footer\"\n\t\t\t\t\tjustify=\"space-between\"\n\t\t\t\t>\n\t\t\t\t\t<HStack\n\t\t\t\t\t\talignment=\"center\"\n\t\t\t\t\t\tjustify=\"left\"\n\t\t\t\t\t\tspacing={ 3 }\n\t\t\t\t\t\tclassName=\"edit-site-patterns__pattern-title\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ icon && (\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\tclassName=\"edit-site-patterns__pattern-icon\"\n\t\t\t\t\t\t\t\ticon={ itemIcon }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<Flex\n\t\t\t\t\t\t\tas={ Heading }\n\t\t\t\t\t\t\tlevel={ 5 }\n\t\t\t\t\t\t\tgap={ 0 }\n\t\t\t\t\t\t\tjustify=\"left\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ item.title }\n\t\t\t\t\t\t\t{ item.type === PATTERNS && (\n\t\t\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\t\t\tposition=\"top center\"\n\t\t\t\t\t\t\t\t\ttext={ __(\n\t\t\t\t\t\t\t\t\t\t'Theme patterns cannot be edited.'\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<span className=\"edit-site-patterns__pattern-lock-icon\">\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\tstyle={ { fill: 'currentcolor' } }\n\t\t\t\t\t\t\t\t\t\t\ticon={ lockSmall }\n\t\t\t\t\t\t\t\t\t\t\tsize={ 24 }\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Flex>\n\t\t\t\t\t</HStack>\n\t\t\t\t\t{ item.type === USER_PATTERNS && (\n\t\t\t\t\t\t<DropdownMenu\n\t\t\t\t\t\t\ticon={ moreHorizontal }\n\t\t\t\t\t\t\tlabel={ __( 'Actions' ) }\n\t\t\t\t\t\t\tclassName=\"edit-site-patterns__dropdown\"\n\t\t\t\t\t\t\tpopoverProps={ { placement: 'bottom-end' } }\n\t\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\t\tclassName: 'edit-site-patterns__button',\n\t\t\t\t\t\t\t\tisSmall: true,\n\t\t\t\t\t\t\t\tdescribedBy: sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: %s: pattern name */\n\t\t\t\t\t\t\t\t\t__( 'Action menu for %s pattern' ),\n\t\t\t\t\t\t\t\t\titem.title\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t// The dropdown menu is not focusable using the\n\t\t\t\t\t\t\t\t// keyboard as this would interfere with the grid's\n\t\t\t\t\t\t\t\t// roving tab index system. Instead, keyboard users\n\t\t\t\t\t\t\t\t// use keyboard shortcuts to trigger actions.\n\t\t\t\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ () => (\n\t\t\t\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\t\tsetIsDeleteDialogOpen( true )\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Delete' ) }\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</DropdownMenu>\n\t\t\t\t\t) }\n\t\t\t\t</HStack>\n\t\t\t</div>\n\t\t\t{ isDeleteDialogOpen && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\tonConfirm={ deletePattern }\n\t\t\t\t\tonCancel={ () => setIsDeleteDialogOpen( false ) }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Are you sure you want to delete this pattern?' ) }\n\t\t\t\t</ConfirmDialog>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/page-patterns/grid-item.js"],"names":["templatePartIcons","header","footer","uncategorized","GridItem","categoryId","item","props","descriptionId","isDeleteDialogOpen","setIsDeleteDialogOpen","removeTemplate","editSiteStore","__experimentalDeleteReusableBlock","reusableBlocksStore","createErrorNotice","createSuccessNotice","noticesStore","isUserPattern","type","USER_PATTERNS","isNonUserPattern","PATTERNS","isTemplatePart","TEMPLATE_PARTS","onClick","postType","postId","id","name","categoryType","isEmpty","blocks","length","patternClassNames","previewClassNames","deletePattern","title","error","errorMessage","message","code","deleteItem","isCustomPattern","isCustom","hasThemeFile","templatePart","has_theme_file","ariaDescriptions","push","description","itemIcon","syncStatus","SYNC_TYPES","full","symbol","undefined","confirmButtonText","confirmPrompt","map","_","index","join","ariaDescription","lockSmall","moreHorizontal","placement","className","isSmall","describedBy","onClose"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { BlockPreview } from '@wordpress/block-editor';\nimport {\n\tButton,\n\t__experimentalConfirmDialog as ConfirmDialog,\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItem,\n\t__experimentalHeading as Heading,\n\t__experimentalHStack as HStack,\n\tTooltip,\n\tFlex,\n} from '@wordpress/components';\nimport { useDispatch } from '@wordpress/data';\nimport { useState, useId, memo } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tIcon,\n\theader,\n\tfooter,\n\tsymbolFilled as uncategorized,\n\tsymbol,\n\tmoreHorizontal,\n\tlockSmall,\n} from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as reusableBlocksStore } from '@wordpress/reusable-blocks';\n\n/**\n * Internal dependencies\n */\nimport RenameMenuItem from './rename-menu-item';\nimport DuplicateMenuItem from './duplicate-menu-item';\nimport { PATTERNS, TEMPLATE_PARTS, USER_PATTERNS, SYNC_TYPES } from './utils';\nimport { store as editSiteStore } from '../../store';\nimport { useLink } from '../routes/link';\n\nconst templatePartIcons = { header, footer, uncategorized };\n\nfunction GridItem( { categoryId, item, ...props } ) {\n\tconst descriptionId = useId();\n\tconst [ isDeleteDialogOpen, setIsDeleteDialogOpen ] = useState( false );\n\n\tconst { removeTemplate } = useDispatch( editSiteStore );\n\tconst { __experimentalDeleteReusableBlock } =\n\t\tuseDispatch( reusableBlocksStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\n\tconst isUserPattern = item.type === USER_PATTERNS;\n\tconst isNonUserPattern = item.type === PATTERNS;\n\tconst isTemplatePart = item.type === TEMPLATE_PARTS;\n\n\tconst { onClick } = useLink( {\n\t\tpostType: item.type,\n\t\tpostId: isUserPattern ? item.id : item.name,\n\t\tcategoryId,\n\t\tcategoryType: item.type,\n\t} );\n\n\tconst isEmpty = ! item.blocks?.length;\n\tconst patternClassNames = classnames( 'edit-site-patterns__pattern', {\n\t\t'is-placeholder': isEmpty,\n\t} );\n\tconst previewClassNames = classnames( 'edit-site-patterns__preview', {\n\t\t'is-inactive': isNonUserPattern,\n\t} );\n\n\tconst deletePattern = async () => {\n\t\ttry {\n\t\t\tawait __experimentalDeleteReusableBlock( item.id );\n\t\t\tcreateSuccessNotice(\n\t\t\t\tsprintf(\n\t\t\t\t\t// translators: %s: The pattern's title e.g. 'Call to action'.\n\t\t\t\t\t__( '\"%s\" deleted.' ),\n\t\t\t\t\titem.title\n\t\t\t\t),\n\t\t\t\t{ type: 'snackbar', id: 'edit-site-patterns-success' }\n\t\t\t);\n\t\t} catch ( error ) {\n\t\t\tconst errorMessage =\n\t\t\t\terror.message && error.code !== 'unknown_error'\n\t\t\t\t\t? error.message\n\t\t\t\t\t: __( 'An error occurred while deleting the pattern.' );\n\t\t\tcreateErrorNotice( errorMessage, {\n\t\t\t\ttype: 'snackbar',\n\t\t\t\tid: 'edit-site-patterns-error',\n\t\t\t} );\n\t\t}\n\t};\n\tconst deleteItem = () =>\n\t\tisTemplatePart ? removeTemplate( item ) : deletePattern();\n\n\t// Only custom patterns or custom template parts can be renamed or deleted.\n\tconst isCustomPattern =\n\t\tisUserPattern || ( isTemplatePart && item.isCustom );\n\tconst hasThemeFile = isTemplatePart && item.templatePart.has_theme_file;\n\tconst ariaDescriptions = [];\n\n\tif ( isCustomPattern ) {\n\t\t// User patterns don't have descriptions, but can be edited and deleted, so include some help text.\n\t\tariaDescriptions.push(\n\t\t\t__( 'Press Enter to edit, or Delete to delete the pattern.' )\n\t\t);\n\t} else if ( item.description ) {\n\t\tariaDescriptions.push( item.description );\n\t}\n\n\tif ( isNonUserPattern ) {\n\t\tariaDescriptions.push( __( 'Theme patterns cannot be edited.' ) );\n\t}\n\n\tconst itemIcon =\n\t\ttemplatePartIcons[ categoryId ] ||\n\t\t( item.syncStatus === SYNC_TYPES.full ? symbol : undefined );\n\n\tconst confirmButtonText = hasThemeFile ? __( 'Clear' ) : __( 'Delete' );\n\tconst confirmPrompt = hasThemeFile\n\t\t? __( 'Are you sure you want to clear these customizations?' )\n\t\t: sprintf(\n\t\t\t\t// translators: %s: The pattern or template part's title e.g. 'Call to action'.\n\t\t\t\t__( 'Are you sure you want to delete \"%s\"?' ),\n\t\t\t\titem.title\n\t\t );\n\n\treturn (\n\t\t<li className={ patternClassNames }>\n\t\t\t<button\n\t\t\t\tclassName={ previewClassNames }\n\t\t\t\t// Even though still incomplete, passing ids helps performance.\n\t\t\t\t// @see https://reakit.io/docs/composite/#performance.\n\t\t\t\tid={ `edit-site-patterns-${ item.name }` }\n\t\t\t\t{ ...props }\n\t\t\t\tonClick={ item.type !== PATTERNS ? onClick : undefined }\n\t\t\t\taria-disabled={ item.type !== PATTERNS ? 'false' : 'true' }\n\t\t\t\taria-label={ item.title }\n\t\t\t\taria-describedby={\n\t\t\t\t\tariaDescriptions.length\n\t\t\t\t\t\t? ariaDescriptions\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t( _, index ) =>\n\t\t\t\t\t\t\t\t\t\t`${ descriptionId }-${ index }`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.join( ' ' )\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ isEmpty && __( 'Empty pattern' ) }\n\t\t\t\t{ ! isEmpty && <BlockPreview blocks={ item.blocks } /> }\n\t\t\t</button>\n\t\t\t{ ariaDescriptions.map( ( ariaDescription, index ) => (\n\t\t\t\t<div\n\t\t\t\t\tkey={ index }\n\t\t\t\t\thidden\n\t\t\t\t\tid={ `${ descriptionId }-${ index }` }\n\t\t\t\t>\n\t\t\t\t\t{ ariaDescription }\n\t\t\t\t</div>\n\t\t\t) ) }\n\t\t\t<HStack\n\t\t\t\tclassName=\"edit-site-patterns__footer\"\n\t\t\t\tjustify=\"space-between\"\n\t\t\t>\n\t\t\t\t<HStack\n\t\t\t\t\talignment=\"center\"\n\t\t\t\t\tjustify=\"left\"\n\t\t\t\t\tspacing={ 3 }\n\t\t\t\t\tclassName=\"edit-site-patterns__pattern-title\"\n\t\t\t\t>\n\t\t\t\t\t{ itemIcon && (\n\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\tposition=\"top center\"\n\t\t\t\t\t\t\ttext={ __(\n\t\t\t\t\t\t\t\t'Editing this pattern will also update anywhere it is used'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\tclassName=\"edit-site-patterns__pattern-icon\"\n\t\t\t\t\t\t\t\t\ticon={ itemIcon }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t) }\n\t\t\t\t\t<Flex as=\"span\" gap={ 0 } justify=\"left\">\n\t\t\t\t\t\t{ item.type === PATTERNS ? (\n\t\t\t\t\t\t\titem.title\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Heading level={ 5 }>\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tvariant=\"link\"\n\t\t\t\t\t\t\t\t\tonClick={ onClick }\n\t\t\t\t\t\t\t\t\t// Required for the grid's roving tab index system.\n\t\t\t\t\t\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/51898#discussion_r1243399243.\n\t\t\t\t\t\t\t\t\ttabIndex=\"-1\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ item.title }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ item.type === PATTERNS && (\n\t\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\t\tposition=\"top center\"\n\t\t\t\t\t\t\t\ttext={ __(\n\t\t\t\t\t\t\t\t\t'Theme patterns cannot be edited.'\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\t<span className=\"edit-site-patterns__pattern-lock-icon\">\n\t\t\t\t\t\t\t\t\t<Icon icon={ lockSmall } size={ 24 } />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Flex>\n\t\t\t\t</HStack>\n\t\t\t\t<DropdownMenu\n\t\t\t\t\ticon={ moreHorizontal }\n\t\t\t\t\tlabel={ __( 'Actions' ) }\n\t\t\t\t\tclassName=\"edit-site-patterns__dropdown\"\n\t\t\t\t\tpopoverProps={ { placement: 'bottom-end' } }\n\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\tclassName: 'edit-site-patterns__button',\n\t\t\t\t\t\tisSmall: true,\n\t\t\t\t\t\tdescribedBy: sprintf(\n\t\t\t\t\t\t\t/* translators: %s: pattern name */\n\t\t\t\t\t\t\t__( 'Action menu for %s pattern' ),\n\t\t\t\t\t\t\titem.title\n\t\t\t\t\t\t),\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ ( { onClose } ) => (\n\t\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t\t{ isCustomPattern && ! hasThemeFile && (\n\t\t\t\t\t\t\t\t<RenameMenuItem\n\t\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t\t\tonClose={ onClose }\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<DuplicateMenuItem\n\t\t\t\t\t\t\t\tcategoryId={ categoryId }\n\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t\tonClose={ onClose }\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\tisNonUserPattern\n\t\t\t\t\t\t\t\t\t\t? __( 'Copy to My patterns' )\n\t\t\t\t\t\t\t\t\t\t: __( 'Duplicate' )\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{ isCustomPattern && (\n\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tsetIsDeleteDialogOpen( true )\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{ hasThemeFile\n\t\t\t\t\t\t\t\t\t\t? __( 'Clear customizations' )\n\t\t\t\t\t\t\t\t\t\t: __( 'Delete' ) }\n\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t) }\n\t\t\t\t</DropdownMenu>\n\t\t\t</HStack>\n\n\t\t\t{ isDeleteDialogOpen && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\tconfirmButtonText={ confirmButtonText }\n\t\t\t\t\tonConfirm={ deleteItem }\n\t\t\t\t\tonCancel={ () => setIsDeleteDialogOpen( false ) }\n\t\t\t\t>\n\t\t\t\t\t{ confirmPrompt }\n\t\t\t\t</ConfirmDialog>\n\t\t\t) }\n\t\t</li>\n\t);\n}\n\nexport default memo( GridItem );\n"]}
@@ -11,6 +11,8 @@ var _element = require("@wordpress/element");
11
11
 
12
12
  var _components = require("@wordpress/components");
13
13
 
14
+ var _i18n = require("@wordpress/i18n");
15
+
14
16
  var _gridItem = _interopRequireDefault(require("./grid-item"));
15
17
 
16
18
  /**
@@ -20,30 +22,36 @@ var _gridItem = _interopRequireDefault(require("./grid-item"));
20
22
  /**
21
23
  * Internal dependencies
22
24
  */
25
+ const PAGE_SIZE = 100;
26
+
23
27
  function Grid({
24
28
  categoryId,
25
- label,
26
- icon,
27
- items
29
+ items,
30
+ ...props
28
31
  }) {
29
- const composite = (0, _components.__unstableUseCompositeState)({
30
- orientation: 'vertical'
31
- });
32
+ const gridRef = (0, _element.useRef)();
32
33
 
33
34
  if (!items?.length) {
34
35
  return null;
35
36
  }
36
37
 
37
- return (0, _element.createElement)(_components.__unstableComposite, { ...composite,
38
+ const list = items.slice(0, PAGE_SIZE);
39
+ const restLength = items.length - PAGE_SIZE;
40
+ return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)("ul", {
38
41
  role: "listbox",
39
42
  className: "edit-site-patterns__grid",
40
- "aria-label": label
41
- }, items.map(item => (0, _element.createElement)(_gridItem.default, {
43
+ ...props,
44
+ ref: gridRef
45
+ }, list.map(item => (0, _element.createElement)(_gridItem.default, {
42
46
  key: item.name,
43
- icon: icon,
44
47
  item: item,
45
- categoryId: categoryId,
46
- composite: composite
47
- })));
48
+ categoryId: categoryId
49
+ }))), restLength > 0 && (0, _element.createElement)(_components.__experimentalText, {
50
+ variant: "muted",
51
+ as: "p",
52
+ align: "center"
53
+ }, (0, _i18n.sprintf)(
54
+ /* translators: %d: number of patterns */
55
+ (0, _i18n.__)('+ %d more patterns discoverable by searching'), restLength)));
48
56
  }
49
57
  //# sourceMappingURL=grid.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/page-patterns/grid.js"],"names":["Grid","categoryId","label","icon","items","composite","orientation","length","map","item","name"],"mappings":";;;;;;;;;;;AAGA;;AAQA;;AAXA;AACA;AACA;;AAMA;AACA;AACA;AAGe,SAASA,IAAT,CAAe;AAAEC,EAAAA,UAAF;AAAcC,EAAAA,KAAd;AAAqBC,EAAAA,IAArB;AAA2BC,EAAAA;AAA3B,CAAf,EAAoD;AAClE,QAAMC,SAAS,GAAG,6CAAmB;AAAEC,IAAAA,WAAW,EAAE;AAAf,GAAnB,CAAlB;;AAEA,MAAK,CAAEF,KAAK,EAAEG,MAAd,EAAuB;AACtB,WAAO,IAAP;AACA;;AAED,SACC,4BAAC,+BAAD,OACMF,SADN;AAEC,IAAA,IAAI,EAAC,SAFN;AAGC,IAAA,SAAS,EAAC,0BAHX;AAIC,kBAAaH;AAJd,KAMGE,KAAK,CAACI,GAAN,CAAaC,IAAF,IACZ,4BAAC,iBAAD;AACC,IAAA,GAAG,EAAGA,IAAI,CAACC,IADZ;AAEC,IAAA,IAAI,EAAGP,IAFR;AAGC,IAAA,IAAI,EAAGM,IAHR;AAIC,IAAA,UAAU,EAAGR,UAJd;AAKC,IAAA,SAAS,EAAGI;AALb,IADC,CANH,CADD;AAkBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__unstableComposite as Composite,\n\t__unstableUseCompositeState as useCompositeState,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport GridItem from './grid-item';\n\nexport default function Grid( { categoryId, label, icon, items } ) {\n\tconst composite = useCompositeState( { orientation: 'vertical' } );\n\n\tif ( ! items?.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Composite\n\t\t\t{ ...composite }\n\t\t\trole=\"listbox\"\n\t\t\tclassName=\"edit-site-patterns__grid\"\n\t\t\taria-label={ label }\n\t\t>\n\t\t\t{ items.map( ( item ) => (\n\t\t\t\t<GridItem\n\t\t\t\t\tkey={ item.name }\n\t\t\t\t\ticon={ icon }\n\t\t\t\t\titem={ item }\n\t\t\t\t\tcategoryId={ categoryId }\n\t\t\t\t\tcomposite={ composite }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</Composite>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-site/src/components/page-patterns/grid.js"],"names":["PAGE_SIZE","Grid","categoryId","items","props","gridRef","length","list","slice","restLength","map","item","name"],"mappings":";;;;;;;;;AAIA;;AADA;;AAEA;;AAKA;;AAVA;AACA;AACA;;AAKA;AACA;AACA;AAGA,MAAMA,SAAS,GAAG,GAAlB;;AAEe,SAASC,IAAT,CAAe;AAAEC,EAAAA,UAAF;AAAcC,EAAAA,KAAd;AAAqB,KAAGC;AAAxB,CAAf,EAAiD;AAC/D,QAAMC,OAAO,GAAG,sBAAhB;;AAEA,MAAK,CAAEF,KAAK,EAAEG,MAAd,EAAuB;AACtB,WAAO,IAAP;AACA;;AAED,QAAMC,IAAI,GAAGJ,KAAK,CAACK,KAAN,CAAa,CAAb,EAAgBR,SAAhB,CAAb;AACA,QAAMS,UAAU,GAAGN,KAAK,CAACG,MAAN,GAAeN,SAAlC;AAEA,SACC,qDACC;AACC,IAAA,IAAI,EAAC,SADN;AAEC,IAAA,SAAS,EAAC,0BAFX;AAAA,OAGMI,KAHN;AAIC,IAAA,GAAG,EAAGC;AAJP,KAMGE,IAAI,CAACG,GAAL,CAAYC,IAAF,IACX,4BAAC,iBAAD;AACC,IAAA,GAAG,EAAGA,IAAI,CAACC,IADZ;AAEC,IAAA,IAAI,EAAGD,IAFR;AAGC,IAAA,UAAU,EAAGT;AAHd,IADC,CANH,CADD,EAeGO,UAAU,GAAG,CAAb,IACD,4BAAC,8BAAD;AAAM,IAAA,OAAO,EAAC,OAAd;AAAsB,IAAA,EAAE,EAAC,GAAzB;AAA6B,IAAA,KAAK,EAAC;AAAnC,KACG;AACD;AACA,gBAAI,8CAAJ,CAFC,EAGDA,UAHC,CADH,CAhBF,CADD;AA2BA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __experimentalText as Text } from '@wordpress/components';\nimport { useRef } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport GridItem from './grid-item';\n\nconst PAGE_SIZE = 100;\n\nexport default function Grid( { categoryId, items, ...props } ) {\n\tconst gridRef = useRef();\n\n\tif ( ! items?.length ) {\n\t\treturn null;\n\t}\n\n\tconst list = items.slice( 0, PAGE_SIZE );\n\tconst restLength = items.length - PAGE_SIZE;\n\n\treturn (\n\t\t<>\n\t\t\t<ul\n\t\t\t\trole=\"listbox\"\n\t\t\t\tclassName=\"edit-site-patterns__grid\"\n\t\t\t\t{ ...props }\n\t\t\t\tref={ gridRef }\n\t\t\t>\n\t\t\t\t{ list.map( ( item ) => (\n\t\t\t\t\t<GridItem\n\t\t\t\t\t\tkey={ item.name }\n\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\tcategoryId={ categoryId }\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t</ul>\n\t\t\t{ restLength > 0 && (\n\t\t\t\t<Text variant=\"muted\" as=\"p\" align=\"center\">\n\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t/* translators: %d: number of patterns */\n\t\t\t\t\t\t__( '+ %d more patterns discoverable by searching' ),\n\t\t\t\t\t\trestLength\n\t\t\t\t\t) }\n\t\t\t\t</Text>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = PatternsHeader;
9
+
10
+ var _element = require("@wordpress/element");
11
+
12
+ var _components = require("@wordpress/components");
13
+
14
+ var _i18n = require("@wordpress/i18n");
15
+
16
+ var _editor = require("@wordpress/editor");
17
+
18
+ var _data = require("@wordpress/data");
19
+
20
+ var _usePatternCategories = _interopRequireDefault(require("../sidebar-navigation-screen-patterns/use-pattern-categories"));
21
+
22
+ var _utils = require("./utils");
23
+
24
+ /**
25
+ * WordPress dependencies
26
+ */
27
+
28
+ /**
29
+ * Internal dependencies
30
+ */
31
+ function PatternsHeader({
32
+ categoryId,
33
+ type,
34
+ titleId,
35
+ descriptionId
36
+ }) {
37
+ const {
38
+ patternCategories
39
+ } = (0, _usePatternCategories.default)();
40
+ const templatePartAreas = (0, _data.useSelect)(select => select(_editor.store).__experimentalGetDefaultTemplatePartAreas(), []);
41
+ let title, description;
42
+
43
+ if (categoryId === _utils.USER_PATTERN_CATEGORY && type === _utils.USER_PATTERNS) {
44
+ title = (0, _i18n.__)('My Patterns');
45
+ description = '';
46
+ } else if (type === _utils.TEMPLATE_PARTS) {
47
+ const templatePartArea = templatePartAreas.find(area => area.area === categoryId);
48
+ title = templatePartArea?.label;
49
+ description = templatePartArea?.description;
50
+ } else if (type === _utils.PATTERNS) {
51
+ const patternCategory = patternCategories.find(category => category.name === categoryId);
52
+ title = patternCategory?.label;
53
+ description = patternCategory?.description;
54
+ }
55
+
56
+ if (!title) return null;
57
+ return (0, _element.createElement)(_components.__experimentalVStack, {
58
+ className: "edit-site-patterns__section-header"
59
+ }, (0, _element.createElement)(_components.__experimentalHeading, {
60
+ as: "h2",
61
+ level: 4,
62
+ id: titleId
63
+ }, title), description ? (0, _element.createElement)(_components.__experimentalText, {
64
+ variant: "muted",
65
+ as: "p",
66
+ id: descriptionId
67
+ }, description) : null);
68
+ }
69
+ //# sourceMappingURL=header.js.map