@wordpress/edit-site 6.4.0 → 6.6.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 (234) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/add-new-pattern/index.js +6 -1
  3. package/build/components/add-new-pattern/index.js.map +1 -1
  4. package/build/components/add-new-post/index.js +2 -1
  5. package/build/components/add-new-post/index.js.map +1 -1
  6. package/build/components/add-new-template/utils.js +2 -2
  7. package/build/components/add-new-template/utils.js.map +1 -1
  8. package/build/components/editor/index.js +71 -20
  9. package/build/components/editor/index.js.map +1 -1
  10. package/build/components/global-styles/background-panel.js +1 -4
  11. package/build/components/global-styles/background-panel.js.map +1 -1
  12. package/build/components/global-styles/font-families.js +3 -4
  13. package/build/components/global-styles/font-families.js.map +1 -1
  14. package/build/components/global-styles/font-library-modal/context.js +0 -5
  15. package/build/components/global-styles/font-library-modal/context.js.map +1 -1
  16. package/build/components/global-styles/font-library-modal/font-collection.js +25 -5
  17. package/build/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  18. package/build/components/global-styles/font-library-modal/index.js +1 -8
  19. package/build/components/global-styles/font-library-modal/index.js.map +1 -1
  20. package/build/components/global-styles/font-library-modal/installed-fonts.js +23 -7
  21. package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  22. package/build/components/global-styles/font-library-modal/upload-fonts.js +2 -3
  23. package/build/components/global-styles/font-library-modal/upload-fonts.js.map +1 -1
  24. package/build/components/global-styles/screen-block.js +5 -7
  25. package/build/components/global-styles/screen-block.js.map +1 -1
  26. package/build/components/global-styles/screen-css.js +1 -1
  27. package/build/components/global-styles/screen-css.js.map +1 -1
  28. package/build/components/global-styles/screen-typeset.js +40 -0
  29. package/build/components/global-styles/screen-typeset.js.map +1 -0
  30. package/build/components/global-styles/screen-typography-element.js +14 -0
  31. package/build/components/global-styles/screen-typography-element.js.map +1 -1
  32. package/build/components/global-styles/screen-typography.js +4 -6
  33. package/build/components/global-styles/screen-typography.js.map +1 -1
  34. package/build/components/global-styles/shadows-edit-panel.js +51 -59
  35. package/build/components/global-styles/shadows-edit-panel.js.map +1 -1
  36. package/build/components/global-styles/size-control/index.js +10 -5
  37. package/build/components/global-styles/size-control/index.js.map +1 -1
  38. package/build/components/global-styles/typeset-button.js +97 -0
  39. package/build/components/global-styles/typeset-button.js.map +1 -0
  40. package/build/components/global-styles/typeset.js +80 -0
  41. package/build/components/global-styles/typeset.js.map +1 -0
  42. package/build/components/global-styles/ui.js +4 -0
  43. package/build/components/global-styles/ui.js.map +1 -1
  44. package/build/components/global-styles/utils.js +10 -1
  45. package/build/components/global-styles/utils.js.map +1 -1
  46. package/build/components/page-patterns/fields.js +230 -0
  47. package/build/components/page-patterns/fields.js.map +1 -0
  48. package/build/components/page-patterns/index.js +13 -228
  49. package/build/components/page-patterns/index.js.map +1 -1
  50. package/build/components/page-patterns/use-patterns.js +29 -1
  51. package/build/components/page-patterns/use-patterns.js.map +1 -1
  52. package/build/components/page-templates/fields.js +169 -0
  53. package/build/components/page-templates/fields.js.map +1 -0
  54. package/build/components/page-templates/index.js +10 -177
  55. package/build/components/page-templates/index.js.map +1 -1
  56. package/build/components/post-edit/index.js +46 -34
  57. package/build/components/post-edit/index.js.map +1 -1
  58. package/build/components/post-fields/index.js +50 -28
  59. package/build/components/post-fields/index.js.map +1 -1
  60. package/build/components/post-list/index.js +126 -68
  61. package/build/components/post-list/index.js.map +1 -1
  62. package/build/components/sidebar-dataviews/add-new-view.js +3 -2
  63. package/build/components/sidebar-dataviews/add-new-view.js.map +1 -1
  64. package/build/components/sidebar-dataviews/custom-dataviews-list.js +1 -0
  65. package/build/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -1
  66. package/build/components/sidebar-dataviews/dataview-item.js +2 -3
  67. package/build/components/sidebar-dataviews/dataview-item.js.map +1 -1
  68. package/build/components/sidebar-dataviews/default-views.js +81 -81
  69. package/build/components/sidebar-dataviews/default-views.js.map +1 -1
  70. package/build/components/sidebar-dataviews/index.js +3 -42
  71. package/build/components/sidebar-dataviews/index.js.map +1 -1
  72. package/build/components/site-hub/index.js +6 -3
  73. package/build/components/site-hub/index.js.map +1 -1
  74. package/build/components/style-book/index.js +22 -25
  75. package/build/components/style-book/index.js.map +1 -1
  76. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js +5 -0
  77. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  78. package/build/hooks/push-changes-to-global-styles/index.js +3 -3
  79. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  80. package/build/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +2 -4
  81. package/build/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js.map +1 -1
  82. package/build/index.js +0 -2
  83. package/build/index.js.map +1 -1
  84. package/build/utils/is-template-removable.js +2 -2
  85. package/build/utils/is-template-removable.js.map +1 -1
  86. package/build/utils/is-template-revertable.js +1 -1
  87. package/build/utils/is-template-revertable.js.map +1 -1
  88. package/build-module/components/add-new-pattern/index.js +6 -1
  89. package/build-module/components/add-new-pattern/index.js.map +1 -1
  90. package/build-module/components/add-new-post/index.js +2 -1
  91. package/build-module/components/add-new-post/index.js.map +1 -1
  92. package/build-module/components/add-new-template/utils.js +2 -2
  93. package/build-module/components/add-new-template/utils.js.map +1 -1
  94. package/build-module/components/editor/index.js +73 -22
  95. package/build-module/components/editor/index.js.map +1 -1
  96. package/build-module/components/global-styles/background-panel.js +1 -4
  97. package/build-module/components/global-styles/background-panel.js.map +1 -1
  98. package/build-module/components/global-styles/font-families.js +3 -4
  99. package/build-module/components/global-styles/font-families.js.map +1 -1
  100. package/build-module/components/global-styles/font-library-modal/context.js +0 -5
  101. package/build-module/components/global-styles/font-library-modal/context.js.map +1 -1
  102. package/build-module/components/global-styles/font-library-modal/font-collection.js +26 -6
  103. package/build-module/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  104. package/build-module/components/global-styles/font-library-modal/index.js +1 -8
  105. package/build-module/components/global-styles/font-library-modal/index.js.map +1 -1
  106. package/build-module/components/global-styles/font-library-modal/installed-fonts.js +23 -7
  107. package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  108. package/build-module/components/global-styles/font-library-modal/upload-fonts.js +2 -3
  109. package/build-module/components/global-styles/font-library-modal/upload-fonts.js.map +1 -1
  110. package/build-module/components/global-styles/screen-block.js +5 -7
  111. package/build-module/components/global-styles/screen-block.js.map +1 -1
  112. package/build-module/components/global-styles/screen-css.js +1 -1
  113. package/build-module/components/global-styles/screen-css.js.map +1 -1
  114. package/build-module/components/global-styles/screen-typeset.js +34 -0
  115. package/build-module/components/global-styles/screen-typeset.js.map +1 -0
  116. package/build-module/components/global-styles/screen-typography-element.js +14 -0
  117. package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
  118. package/build-module/components/global-styles/screen-typography.js +4 -6
  119. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  120. package/build-module/components/global-styles/shadows-edit-panel.js +52 -60
  121. package/build-module/components/global-styles/shadows-edit-panel.js.map +1 -1
  122. package/build-module/components/global-styles/size-control/index.js +10 -5
  123. package/build-module/components/global-styles/size-control/index.js.map +1 -1
  124. package/build-module/components/global-styles/typeset-button.js +89 -0
  125. package/build-module/components/global-styles/typeset-button.js.map +1 -0
  126. package/build-module/components/global-styles/typeset.js +71 -0
  127. package/build-module/components/global-styles/typeset.js.map +1 -0
  128. package/build-module/components/global-styles/ui.js +4 -0
  129. package/build-module/components/global-styles/ui.js.map +1 -1
  130. package/build-module/components/global-styles/utils.js +10 -1
  131. package/build-module/components/global-styles/utils.js.map +1 -1
  132. package/build-module/components/page-patterns/fields.js +223 -0
  133. package/build-module/components/page-patterns/fields.js.map +1 -0
  134. package/build-module/components/page-patterns/index.js +14 -231
  135. package/build-module/components/page-patterns/index.js.map +1 -1
  136. package/build-module/components/page-patterns/use-patterns.js +26 -0
  137. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  138. package/build-module/components/page-templates/fields.js +160 -0
  139. package/build-module/components/page-templates/fields.js.map +1 -0
  140. package/build-module/components/page-templates/index.js +12 -178
  141. package/build-module/components/page-templates/index.js.map +1 -1
  142. package/build-module/components/post-edit/index.js +49 -37
  143. package/build-module/components/post-edit/index.js.map +1 -1
  144. package/build-module/components/post-fields/index.js +50 -28
  145. package/build-module/components/post-fields/index.js.map +1 -1
  146. package/build-module/components/post-list/index.js +128 -70
  147. package/build-module/components/post-list/index.js.map +1 -1
  148. package/build-module/components/sidebar-dataviews/add-new-view.js +3 -2
  149. package/build-module/components/sidebar-dataviews/add-new-view.js.map +1 -1
  150. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js +1 -0
  151. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -1
  152. package/build-module/components/sidebar-dataviews/dataview-item.js +2 -3
  153. package/build-module/components/sidebar-dataviews/dataview-item.js.map +1 -1
  154. package/build-module/components/sidebar-dataviews/default-views.js +81 -81
  155. package/build-module/components/sidebar-dataviews/default-views.js.map +1 -1
  156. package/build-module/components/sidebar-dataviews/index.js +3 -42
  157. package/build-module/components/sidebar-dataviews/index.js.map +1 -1
  158. package/build-module/components/site-hub/index.js +7 -4
  159. package/build-module/components/site-hub/index.js.map +1 -1
  160. package/build-module/components/style-book/index.js +23 -26
  161. package/build-module/components/style-book/index.js.map +1 -1
  162. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js +5 -0
  163. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  164. package/build-module/hooks/push-changes-to-global-styles/index.js +3 -3
  165. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  166. package/build-module/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +2 -3
  167. package/build-module/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js.map +1 -1
  168. package/build-module/index.js +0 -2
  169. package/build-module/index.js.map +1 -1
  170. package/build-module/utils/is-template-removable.js +2 -2
  171. package/build-module/utils/is-template-removable.js.map +1 -1
  172. package/build-module/utils/is-template-revertable.js +1 -1
  173. package/build-module/utils/is-template-revertable.js.map +1 -1
  174. package/build-style/posts-rtl.css +201 -25
  175. package/build-style/posts.css +201 -25
  176. package/build-style/style-rtl.css +307 -69
  177. package/build-style/style.css +307 -69
  178. package/package.json +41 -41
  179. package/src/components/add-new-pattern/index.js +8 -3
  180. package/src/components/add-new-post/index.js +2 -1
  181. package/src/components/add-new-template/style.scss +1 -1
  182. package/src/components/add-new-template/utils.js +10 -6
  183. package/src/components/editor/index.js +80 -22
  184. package/src/components/editor/style.scss +60 -2
  185. package/src/components/global-styles/background-panel.js +0 -3
  186. package/src/components/global-styles/font-families.js +3 -5
  187. package/src/components/global-styles/font-library-modal/context.js +0 -5
  188. package/src/components/global-styles/font-library-modal/font-collection.js +34 -10
  189. package/src/components/global-styles/font-library-modal/index.js +2 -7
  190. package/src/components/global-styles/font-library-modal/installed-fonts.js +26 -6
  191. package/src/components/global-styles/font-library-modal/style.scss +2 -2
  192. package/src/components/global-styles/font-library-modal/upload-fonts.js +2 -2
  193. package/src/components/global-styles/screen-block.js +2 -4
  194. package/src/components/global-styles/screen-css.js +3 -1
  195. package/src/components/global-styles/screen-typeset.js +42 -0
  196. package/src/components/global-styles/screen-typography-element.js +14 -0
  197. package/src/components/global-styles/screen-typography.js +4 -4
  198. package/src/components/global-styles/shadows-edit-panel.js +67 -73
  199. package/src/components/global-styles/size-control/index.js +9 -6
  200. package/src/components/global-styles/style.scss +4 -7
  201. package/src/components/global-styles/typeset-button.js +93 -0
  202. package/src/components/global-styles/typeset.js +73 -0
  203. package/src/components/global-styles/ui.js +5 -0
  204. package/src/components/global-styles/utils.js +13 -1
  205. package/src/components/layout/style.scss +8 -0
  206. package/src/components/page-patterns/fields.js +251 -0
  207. package/src/components/page-patterns/index.js +19 -246
  208. package/src/components/page-patterns/style.scss +82 -85
  209. package/src/components/page-patterns/use-patterns.js +33 -0
  210. package/src/components/page-templates/fields.js +157 -0
  211. package/src/components/page-templates/index.js +19 -170
  212. package/src/components/page-templates/style.scss +14 -5
  213. package/src/components/post-edit/index.js +58 -35
  214. package/src/components/post-fields/index.js +88 -25
  215. package/src/components/post-list/index.js +135 -79
  216. package/src/components/sidebar-dataviews/add-new-view.js +3 -4
  217. package/src/components/sidebar-dataviews/custom-dataviews-list.js +1 -0
  218. package/src/components/sidebar-dataviews/dataview-item.js +2 -2
  219. package/src/components/sidebar-dataviews/default-views.js +95 -95
  220. package/src/components/sidebar-dataviews/index.js +3 -37
  221. package/src/components/site-hub/index.js +11 -2
  222. package/src/components/site-icon/style.scss +4 -1
  223. package/src/components/style-book/index.js +27 -32
  224. package/src/components/sync-state-with-url/use-init-edited-entity-from-url.js +5 -0
  225. package/src/hooks/push-changes-to-global-styles/index.js +3 -3
  226. package/src/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +2 -3
  227. package/src/index.js +0 -2
  228. package/src/utils/is-template-removable.js +4 -2
  229. package/src/utils/is-template-revertable.js +2 -1
  230. package/build/utils/clone-deep.js +0 -15
  231. package/build/utils/clone-deep.js.map +0 -1
  232. package/build-module/utils/clone-deep.js +0 -9
  233. package/build-module/utils/clone-deep.js.map +0 -1
  234. package/src/utils/clone-deep.js +0 -8
@@ -46,7 +46,16 @@ function getFontFamilyFromSetting(fontFamilies, setting) {
46
46
  return fontFamilies.find(fontFamily => fontFamily.slug === fontFamilySlug);
47
47
  }
48
48
  export function getFontFamilies(themeJson) {
49
- const fontFamilies = themeJson?.settings?.typography?.fontFamilies?.theme; // TODO this could not be under theme.
49
+ const themeFontFamilies = themeJson?.settings?.typography?.fontFamilies?.theme;
50
+ const customFontFamilies = themeJson?.settings?.typography?.fontFamilies?.custom;
51
+ let fontFamilies = [];
52
+ if (themeFontFamilies && customFontFamilies) {
53
+ fontFamilies = [...themeFontFamilies, ...customFontFamilies];
54
+ } else if (themeFontFamilies) {
55
+ fontFamilies = themeFontFamilies;
56
+ } else if (customFontFamilies) {
57
+ fontFamilies = customFontFamilies;
58
+ }
50
59
  const bodyFontFamilySetting = themeJson?.styles?.typography?.fontFamily;
51
60
  const bodyFontFamily = getFontFamilyFromSetting(fontFamilies, bodyFontFamilySetting);
52
61
  const headingFontFamilySetting = themeJson?.styles?.elements?.heading?.typography?.fontFamily;
@@ -1 +1 @@
1
- {"version":3,"names":["getVariationClassName","variation","getNewIndexFromPresets","presets","slugPrefix","nameRegex","RegExp","highestPresetValue","reduce","currentHighest","preset","slug","matches","match","id","parseInt","getFontFamilyFromSetting","fontFamilies","setting","Array","isArray","fontFamilyVariable","replace","fontFamilySlug","split","slice","find","fontFamily","getFontFamilies","themeJson","settings","typography","theme","bodyFontFamilySetting","styles","bodyFontFamily","headingFontFamilySetting","elements","heading","headingFontFamily"],"sources":["@wordpress/edit-site/src/components/global-styles/utils.js"],"sourcesContent":["/**\n *\n * @param {string} variation The variation name.\n *\n * @return {string} The variation class name.\n */\nexport function getVariationClassName( variation ) {\n\tif ( ! variation ) {\n\t\treturn '';\n\t}\n\treturn `is-style-${ variation }`;\n}\n\n/**\n * Iterates through the presets array and searches for slugs that start with the specified\n * slugPrefix followed by a numerical suffix. It identifies the highest numerical suffix found\n * and returns one greater than the highest found suffix, ensuring that the new index is unique.\n *\n * @param {Array} presets The array of preset objects, each potentially containing a slug property.\n * @param {string} slugPrefix The prefix to look for in the preset slugs.\n *\n * @return {number} The next available index for a preset with the specified slug prefix, or 1 if no matching slugs are found.\n */\nexport function getNewIndexFromPresets( presets, slugPrefix ) {\n\tconst nameRegex = new RegExp( `^${ slugPrefix }([\\\\d]+)$` );\n\tconst highestPresetValue = presets.reduce( ( currentHighest, preset ) => {\n\t\tif ( typeof preset?.slug === 'string' ) {\n\t\t\tconst matches = preset?.slug.match( nameRegex );\n\t\t\tif ( matches ) {\n\t\t\t\tconst id = parseInt( matches[ 1 ], 10 );\n\t\t\t\tif ( id > currentHighest ) {\n\t\t\t\t\treturn id;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn currentHighest;\n\t}, 0 );\n\treturn highestPresetValue + 1;\n}\n\nfunction getFontFamilyFromSetting( fontFamilies, setting ) {\n\tif ( ! Array.isArray( fontFamilies ) || ! setting ) {\n\t\treturn null;\n\t}\n\n\tconst fontFamilyVariable = setting.replace( 'var(', '' ).replace( ')', '' );\n\tconst fontFamilySlug = fontFamilyVariable?.split( '--' ).slice( -1 )[ 0 ];\n\n\treturn fontFamilies.find(\n\t\t( fontFamily ) => fontFamily.slug === fontFamilySlug\n\t);\n}\n\nexport function getFontFamilies( themeJson ) {\n\tconst fontFamilies = themeJson?.settings?.typography?.fontFamilies?.theme; // TODO this could not be under theme.\n\tconst bodyFontFamilySetting = themeJson?.styles?.typography?.fontFamily;\n\tconst bodyFontFamily = getFontFamilyFromSetting(\n\t\tfontFamilies,\n\t\tbodyFontFamilySetting\n\t);\n\n\tconst headingFontFamilySetting =\n\t\tthemeJson?.styles?.elements?.heading?.typography?.fontFamily;\n\n\tlet headingFontFamily;\n\tif ( ! headingFontFamilySetting ) {\n\t\theadingFontFamily = bodyFontFamily;\n\t} else {\n\t\theadingFontFamily = getFontFamilyFromSetting(\n\t\t\tfontFamilies,\n\t\t\tthemeJson?.styles?.elements?.heading?.typography?.fontFamily\n\t\t);\n\t}\n\n\treturn [ bodyFontFamily, headingFontFamily ];\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,qBAAqBA,CAAEC,SAAS,EAAG;EAClD,IAAK,CAAEA,SAAS,EAAG;IAClB,OAAO,EAAE;EACV;EACA,OAAQ,YAAYA,SAAW,EAAC;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CAAEC,OAAO,EAAEC,UAAU,EAAG;EAC7D,MAAMC,SAAS,GAAG,IAAIC,MAAM,CAAG,IAAIF,UAAY,WAAW,CAAC;EAC3D,MAAMG,kBAAkB,GAAGJ,OAAO,CAACK,MAAM,CAAE,CAAEC,cAAc,EAAEC,MAAM,KAAM;IACxE,IAAK,OAAOA,MAAM,EAAEC,IAAI,KAAK,QAAQ,EAAG;MACvC,MAAMC,OAAO,GAAGF,MAAM,EAAEC,IAAI,CAACE,KAAK,CAAER,SAAU,CAAC;MAC/C,IAAKO,OAAO,EAAG;QACd,MAAME,EAAE,GAAGC,QAAQ,CAAEH,OAAO,CAAE,CAAC,CAAE,EAAE,EAAG,CAAC;QACvC,IAAKE,EAAE,GAAGL,cAAc,EAAG;UAC1B,OAAOK,EAAE;QACV;MACD;IACD;IACA,OAAOL,cAAc;EACtB,CAAC,EAAE,CAAE,CAAC;EACN,OAAOF,kBAAkB,GAAG,CAAC;AAC9B;AAEA,SAASS,wBAAwBA,CAAEC,YAAY,EAAEC,OAAO,EAAG;EAC1D,IAAK,CAAEC,KAAK,CAACC,OAAO,CAAEH,YAAa,CAAC,IAAI,CAAEC,OAAO,EAAG;IACnD,OAAO,IAAI;EACZ;EAEA,MAAMG,kBAAkB,GAAGH,OAAO,CAACI,OAAO,CAAE,MAAM,EAAE,EAAG,CAAC,CAACA,OAAO,CAAE,GAAG,EAAE,EAAG,CAAC;EAC3E,MAAMC,cAAc,GAAGF,kBAAkB,EAAEG,KAAK,CAAE,IAAK,CAAC,CAACC,KAAK,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE;EAEzE,OAAOR,YAAY,CAACS,IAAI,CACrBC,UAAU,IAAMA,UAAU,CAAChB,IAAI,KAAKY,cACvC,CAAC;AACF;AAEA,OAAO,SAASK,eAAeA,CAAEC,SAAS,EAAG;EAC5C,MAAMZ,YAAY,GAAGY,SAAS,EAAEC,QAAQ,EAAEC,UAAU,EAAEd,YAAY,EAAEe,KAAK,CAAC,CAAC;EAC3E,MAAMC,qBAAqB,GAAGJ,SAAS,EAAEK,MAAM,EAAEH,UAAU,EAAEJ,UAAU;EACvE,MAAMQ,cAAc,GAAGnB,wBAAwB,CAC9CC,YAAY,EACZgB,qBACD,CAAC;EAED,MAAMG,wBAAwB,GAC7BP,SAAS,EAAEK,MAAM,EAAEG,QAAQ,EAAEC,OAAO,EAAEP,UAAU,EAAEJ,UAAU;EAE7D,IAAIY,iBAAiB;EACrB,IAAK,CAAEH,wBAAwB,EAAG;IACjCG,iBAAiB,GAAGJ,cAAc;EACnC,CAAC,MAAM;IACNI,iBAAiB,GAAGvB,wBAAwB,CAC3CC,YAAY,EACZY,SAAS,EAAEK,MAAM,EAAEG,QAAQ,EAAEC,OAAO,EAAEP,UAAU,EAAEJ,UACnD,CAAC;EACF;EAEA,OAAO,CAAEQ,cAAc,EAAEI,iBAAiB,CAAE;AAC7C","ignoreList":[]}
1
+ {"version":3,"names":["getVariationClassName","variation","getNewIndexFromPresets","presets","slugPrefix","nameRegex","RegExp","highestPresetValue","reduce","currentHighest","preset","slug","matches","match","id","parseInt","getFontFamilyFromSetting","fontFamilies","setting","Array","isArray","fontFamilyVariable","replace","fontFamilySlug","split","slice","find","fontFamily","getFontFamilies","themeJson","themeFontFamilies","settings","typography","theme","customFontFamilies","custom","bodyFontFamilySetting","styles","bodyFontFamily","headingFontFamilySetting","elements","heading","headingFontFamily"],"sources":["@wordpress/edit-site/src/components/global-styles/utils.js"],"sourcesContent":["/**\n *\n * @param {string} variation The variation name.\n *\n * @return {string} The variation class name.\n */\nexport function getVariationClassName( variation ) {\n\tif ( ! variation ) {\n\t\treturn '';\n\t}\n\treturn `is-style-${ variation }`;\n}\n\n/**\n * Iterates through the presets array and searches for slugs that start with the specified\n * slugPrefix followed by a numerical suffix. It identifies the highest numerical suffix found\n * and returns one greater than the highest found suffix, ensuring that the new index is unique.\n *\n * @param {Array} presets The array of preset objects, each potentially containing a slug property.\n * @param {string} slugPrefix The prefix to look for in the preset slugs.\n *\n * @return {number} The next available index for a preset with the specified slug prefix, or 1 if no matching slugs are found.\n */\nexport function getNewIndexFromPresets( presets, slugPrefix ) {\n\tconst nameRegex = new RegExp( `^${ slugPrefix }([\\\\d]+)$` );\n\tconst highestPresetValue = presets.reduce( ( currentHighest, preset ) => {\n\t\tif ( typeof preset?.slug === 'string' ) {\n\t\t\tconst matches = preset?.slug.match( nameRegex );\n\t\t\tif ( matches ) {\n\t\t\t\tconst id = parseInt( matches[ 1 ], 10 );\n\t\t\t\tif ( id > currentHighest ) {\n\t\t\t\t\treturn id;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn currentHighest;\n\t}, 0 );\n\treturn highestPresetValue + 1;\n}\n\nfunction getFontFamilyFromSetting( fontFamilies, setting ) {\n\tif ( ! Array.isArray( fontFamilies ) || ! setting ) {\n\t\treturn null;\n\t}\n\n\tconst fontFamilyVariable = setting.replace( 'var(', '' ).replace( ')', '' );\n\tconst fontFamilySlug = fontFamilyVariable?.split( '--' ).slice( -1 )[ 0 ];\n\n\treturn fontFamilies.find(\n\t\t( fontFamily ) => fontFamily.slug === fontFamilySlug\n\t);\n}\n\nexport function getFontFamilies( themeJson ) {\n\tconst themeFontFamilies =\n\t\tthemeJson?.settings?.typography?.fontFamilies?.theme;\n\tconst customFontFamilies =\n\t\tthemeJson?.settings?.typography?.fontFamilies?.custom;\n\n\tlet fontFamilies = [];\n\tif ( themeFontFamilies && customFontFamilies ) {\n\t\tfontFamilies = [ ...themeFontFamilies, ...customFontFamilies ];\n\t} else if ( themeFontFamilies ) {\n\t\tfontFamilies = themeFontFamilies;\n\t} else if ( customFontFamilies ) {\n\t\tfontFamilies = customFontFamilies;\n\t}\n\tconst bodyFontFamilySetting = themeJson?.styles?.typography?.fontFamily;\n\tconst bodyFontFamily = getFontFamilyFromSetting(\n\t\tfontFamilies,\n\t\tbodyFontFamilySetting\n\t);\n\n\tconst headingFontFamilySetting =\n\t\tthemeJson?.styles?.elements?.heading?.typography?.fontFamily;\n\n\tlet headingFontFamily;\n\tif ( ! headingFontFamilySetting ) {\n\t\theadingFontFamily = bodyFontFamily;\n\t} else {\n\t\theadingFontFamily = getFontFamilyFromSetting(\n\t\t\tfontFamilies,\n\t\t\tthemeJson?.styles?.elements?.heading?.typography?.fontFamily\n\t\t);\n\t}\n\n\treturn [ bodyFontFamily, headingFontFamily ];\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { __experimentalHStack as HStack, Button, Tooltip, Flex } from '@wordpress/components';
10
+ import { __, _x } from '@wordpress/i18n';
11
+ import { useState, useMemo, useId } from '@wordpress/element';
12
+ import { BlockPreview, privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
13
+ import { Icon, lockSmall } from '@wordpress/icons';
14
+ import { parse } from '@wordpress/blocks';
15
+ import { decodeEntities } from '@wordpress/html-entities';
16
+
17
+ /**
18
+ * Internal dependencies
19
+ */
20
+ import { Async } from '../async';
21
+ import { PATTERN_TYPES, TEMPLATE_PART_POST_TYPE, PATTERN_SYNC_TYPES, OPERATOR_IS } from '../../utils/constants';
22
+ import { unlock } from '../../lock-unlock';
23
+ import { useLink } from '../routes/link';
24
+ import { useAddedBy } from '../page-templates/hooks';
25
+ import { defaultGetTitle } from './search-items';
26
+ import { jsx as _jsx } from "react/jsx-runtime";
27
+ import { jsxs as _jsxs } from "react/jsx-runtime";
28
+ const {
29
+ useGlobalStyle
30
+ } = unlock(blockEditorPrivateApis);
31
+ function PreviewWrapper({
32
+ item,
33
+ onClick,
34
+ ariaDescribedBy,
35
+ children
36
+ }) {
37
+ return /*#__PURE__*/_jsx("button", {
38
+ className: "page-patterns-preview-field__button",
39
+ type: "button",
40
+ onClick: item.type !== PATTERN_TYPES.theme ? onClick : undefined,
41
+ "aria-label": item.title,
42
+ "aria-describedby": ariaDescribedBy,
43
+ "aria-disabled": item.type === PATTERN_TYPES.theme,
44
+ children: children
45
+ });
46
+ }
47
+ function PreviewField({
48
+ item
49
+ }) {
50
+ const descriptionId = useId();
51
+ const description = item.description || item?.excerpt?.raw;
52
+ const isUserPattern = item.type === PATTERN_TYPES.user;
53
+ const isTemplatePart = item.type === TEMPLATE_PART_POST_TYPE;
54
+ const [backgroundColor] = useGlobalStyle('color.background');
55
+ const {
56
+ onClick
57
+ } = useLink({
58
+ postType: item.type,
59
+ postId: isUserPattern || isTemplatePart ? item.id : item.name,
60
+ canvas: 'edit'
61
+ });
62
+ const blocks = useMemo(() => {
63
+ var _item$blocks;
64
+ return (_item$blocks = item.blocks) !== null && _item$blocks !== void 0 ? _item$blocks : parse(item.content.raw, {
65
+ __unstableSkipMigrationLogs: true
66
+ });
67
+ }, [item?.content?.raw, item.blocks]);
68
+ const isEmpty = !blocks?.length;
69
+ return /*#__PURE__*/_jsxs("div", {
70
+ className: "page-patterns-preview-field",
71
+ style: {
72
+ backgroundColor
73
+ },
74
+ children: [/*#__PURE__*/_jsxs(PreviewWrapper, {
75
+ item: item,
76
+ onClick: onClick,
77
+ ariaDescribedBy: !!description ? descriptionId : undefined,
78
+ children: [isEmpty && isTemplatePart && __('Empty template part'), isEmpty && !isTemplatePart && __('Empty pattern'), !isEmpty && /*#__PURE__*/_jsx(Async, {
79
+ children: /*#__PURE__*/_jsx(BlockPreview, {
80
+ blocks: blocks,
81
+ viewportWidth: item.viewportWidth
82
+ })
83
+ })]
84
+ }), !!description && /*#__PURE__*/_jsx("div", {
85
+ hidden: true,
86
+ id: descriptionId,
87
+ children: description
88
+ })]
89
+ });
90
+ }
91
+ export const previewField = {
92
+ label: __('Preview'),
93
+ id: 'preview',
94
+ render: PreviewField,
95
+ enableSorting: false
96
+ };
97
+ function TitleField({
98
+ item
99
+ }) {
100
+ const isUserPattern = item.type === PATTERN_TYPES.user;
101
+ const isTemplatePart = item.type === TEMPLATE_PART_POST_TYPE;
102
+ const {
103
+ onClick
104
+ } = useLink({
105
+ postType: item.type,
106
+ postId: isUserPattern || isTemplatePart ? item.id : item.name,
107
+ canvas: 'edit'
108
+ });
109
+ const title = decodeEntities(defaultGetTitle(item));
110
+ return /*#__PURE__*/_jsxs(HStack, {
111
+ alignment: "center",
112
+ justify: "flex-start",
113
+ spacing: 2,
114
+ children: [/*#__PURE__*/_jsx(Flex, {
115
+ as: "div",
116
+ gap: 0,
117
+ justify: "left",
118
+ className: "edit-site-patterns__pattern-title",
119
+ children: item.type === PATTERN_TYPES.theme ? title : /*#__PURE__*/_jsx(Button, {
120
+ variant: "link",
121
+ onClick: onClick
122
+ // Required for the grid's roving tab index system.
123
+ // See https://github.com/WordPress/gutenberg/pull/51898#discussion_r1243399243.
124
+ ,
125
+ tabIndex: "-1",
126
+ children: title
127
+ })
128
+ }), item.type === PATTERN_TYPES.theme && /*#__PURE__*/_jsx(Tooltip, {
129
+ placement: "top",
130
+ text: __('This pattern cannot be edited.'),
131
+ children: /*#__PURE__*/_jsx(Icon, {
132
+ className: "edit-site-patterns__pattern-lock-icon",
133
+ icon: lockSmall,
134
+ size: 24
135
+ })
136
+ })]
137
+ });
138
+ }
139
+ export const titleField = {
140
+ label: __('Title'),
141
+ id: 'title',
142
+ getValue: ({
143
+ item
144
+ }) => item.title?.raw || item.title,
145
+ render: TitleField,
146
+ enableHiding: false
147
+ };
148
+ const SYNC_FILTERS = [{
149
+ value: PATTERN_SYNC_TYPES.full,
150
+ label: _x('Synced', 'pattern (singular)'),
151
+ description: __('Patterns that are kept in sync across the site.')
152
+ }, {
153
+ value: PATTERN_SYNC_TYPES.unsynced,
154
+ label: _x('Not synced', 'pattern (singular)'),
155
+ description: __('Patterns that can be changed freely without affecting the site.')
156
+ }];
157
+ export const patternStatusField = {
158
+ label: __('Sync status'),
159
+ id: 'sync-status',
160
+ render: ({
161
+ item
162
+ }) => {
163
+ const syncStatus = 'wp_pattern_sync_status' in item ? item.wp_pattern_sync_status || PATTERN_SYNC_TYPES.full : PATTERN_SYNC_TYPES.unsynced;
164
+ // User patterns can have their sync statuses checked directly.
165
+ // Non-user patterns are all unsynced for the time being.
166
+ return /*#__PURE__*/_jsx("span", {
167
+ className: `edit-site-patterns__field-sync-status-${syncStatus}`,
168
+ children: SYNC_FILTERS.find(({
169
+ value
170
+ }) => value === syncStatus).label
171
+ });
172
+ },
173
+ elements: SYNC_FILTERS,
174
+ filterBy: {
175
+ operators: [OPERATOR_IS],
176
+ isPrimary: true
177
+ },
178
+ enableSorting: false
179
+ };
180
+ function AuthorField({
181
+ item
182
+ }) {
183
+ const [isImageLoaded, setIsImageLoaded] = useState(false);
184
+ const {
185
+ text,
186
+ icon,
187
+ imageUrl
188
+ } = useAddedBy(item.type, item.id);
189
+ return /*#__PURE__*/_jsxs(HStack, {
190
+ alignment: "left",
191
+ spacing: 0,
192
+ children: [imageUrl && /*#__PURE__*/_jsx("div", {
193
+ className: clsx('page-templates-author-field__avatar', {
194
+ 'is-loaded': isImageLoaded
195
+ }),
196
+ children: /*#__PURE__*/_jsx("img", {
197
+ onLoad: () => setIsImageLoaded(true),
198
+ alt: "",
199
+ src: imageUrl
200
+ })
201
+ }), !imageUrl && /*#__PURE__*/_jsx("div", {
202
+ className: "page-templates-author-field__icon",
203
+ children: /*#__PURE__*/_jsx(Icon, {
204
+ icon: icon
205
+ })
206
+ }), /*#__PURE__*/_jsx("span", {
207
+ className: "page-templates-author-field__name",
208
+ children: text
209
+ })]
210
+ });
211
+ }
212
+ export const templatePartAuthorField = {
213
+ label: __('Author'),
214
+ id: 'author',
215
+ getValue: ({
216
+ item
217
+ }) => item.author_text,
218
+ render: AuthorField,
219
+ filterBy: {
220
+ isPrimary: true
221
+ }
222
+ };
223
+ //# sourceMappingURL=fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["clsx","__experimentalHStack","HStack","Button","Tooltip","Flex","__","_x","useState","useMemo","useId","BlockPreview","privateApis","blockEditorPrivateApis","Icon","lockSmall","parse","decodeEntities","Async","PATTERN_TYPES","TEMPLATE_PART_POST_TYPE","PATTERN_SYNC_TYPES","OPERATOR_IS","unlock","useLink","useAddedBy","defaultGetTitle","jsx","_jsx","jsxs","_jsxs","useGlobalStyle","PreviewWrapper","item","onClick","ariaDescribedBy","children","className","type","theme","undefined","title","PreviewField","descriptionId","description","excerpt","raw","isUserPattern","user","isTemplatePart","backgroundColor","postType","postId","id","name","canvas","blocks","_item$blocks","content","__unstableSkipMigrationLogs","isEmpty","length","style","viewportWidth","hidden","previewField","label","render","enableSorting","TitleField","alignment","justify","spacing","as","gap","variant","tabIndex","placement","text","icon","size","titleField","getValue","enableHiding","SYNC_FILTERS","value","full","unsynced","patternStatusField","syncStatus","wp_pattern_sync_status","find","elements","filterBy","operators","isPrimary","AuthorField","isImageLoaded","setIsImageLoaded","imageUrl","onLoad","alt","src","templatePartAuthorField","author_text"],"sources":["@wordpress/edit-site/src/components/page-patterns/fields.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalHStack as HStack,\n\tButton,\n\tTooltip,\n\tFlex,\n} from '@wordpress/components';\nimport { __, _x } from '@wordpress/i18n';\nimport { useState, useMemo, useId } from '@wordpress/element';\nimport {\n\tBlockPreview,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { Icon, lockSmall } from '@wordpress/icons';\nimport { parse } from '@wordpress/blocks';\nimport { decodeEntities } from '@wordpress/html-entities';\n\n/**\n * Internal dependencies\n */\nimport { Async } from '../async';\nimport {\n\tPATTERN_TYPES,\n\tTEMPLATE_PART_POST_TYPE,\n\tPATTERN_SYNC_TYPES,\n\tOPERATOR_IS,\n} from '../../utils/constants';\nimport { unlock } from '../../lock-unlock';\nimport { useLink } from '../routes/link';\nimport { useAddedBy } from '../page-templates/hooks';\nimport { defaultGetTitle } from './search-items';\n\nconst { useGlobalStyle } = unlock( blockEditorPrivateApis );\n\nfunction PreviewWrapper( { item, onClick, ariaDescribedBy, children } ) {\n\treturn (\n\t\t<button\n\t\t\tclassName=\"page-patterns-preview-field__button\"\n\t\t\ttype=\"button\"\n\t\t\tonClick={ item.type !== PATTERN_TYPES.theme ? onClick : undefined }\n\t\t\taria-label={ item.title }\n\t\t\taria-describedby={ ariaDescribedBy }\n\t\t\taria-disabled={ item.type === PATTERN_TYPES.theme }\n\t\t>\n\t\t\t{ children }\n\t\t</button>\n\t);\n}\n\nfunction PreviewField( { item } ) {\n\tconst descriptionId = useId();\n\tconst description = item.description || item?.excerpt?.raw;\n\tconst isUserPattern = item.type === PATTERN_TYPES.user;\n\tconst isTemplatePart = item.type === TEMPLATE_PART_POST_TYPE;\n\tconst [ backgroundColor ] = useGlobalStyle( 'color.background' );\n\tconst { onClick } = useLink( {\n\t\tpostType: item.type,\n\t\tpostId: isUserPattern || isTemplatePart ? item.id : item.name,\n\t\tcanvas: 'edit',\n\t} );\n\tconst blocks = useMemo( () => {\n\t\treturn (\n\t\t\titem.blocks ??\n\t\t\tparse( item.content.raw, {\n\t\t\t\t__unstableSkipMigrationLogs: true,\n\t\t\t} )\n\t\t);\n\t}, [ item?.content?.raw, item.blocks ] );\n\tconst isEmpty = ! blocks?.length;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"page-patterns-preview-field\"\n\t\t\tstyle={ { backgroundColor } }\n\t\t>\n\t\t\t<PreviewWrapper\n\t\t\t\titem={ item }\n\t\t\t\tonClick={ onClick }\n\t\t\t\tariaDescribedBy={ !! description ? descriptionId : undefined }\n\t\t\t>\n\t\t\t\t{ isEmpty && isTemplatePart && __( 'Empty template part' ) }\n\t\t\t\t{ isEmpty && ! isTemplatePart && __( 'Empty pattern' ) }\n\t\t\t\t{ ! isEmpty && (\n\t\t\t\t\t<Async>\n\t\t\t\t\t\t<BlockPreview\n\t\t\t\t\t\t\tblocks={ blocks }\n\t\t\t\t\t\t\tviewportWidth={ item.viewportWidth }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Async>\n\t\t\t\t) }\n\t\t\t</PreviewWrapper>\n\t\t\t{ !! description && (\n\t\t\t\t<div hidden id={ descriptionId }>\n\t\t\t\t\t{ description }\n\t\t\t\t</div>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n\nexport const previewField = {\n\tlabel: __( 'Preview' ),\n\tid: 'preview',\n\trender: PreviewField,\n\tenableSorting: false,\n};\n\nfunction TitleField( { item } ) {\n\tconst isUserPattern = item.type === PATTERN_TYPES.user;\n\tconst isTemplatePart = item.type === TEMPLATE_PART_POST_TYPE;\n\tconst { onClick } = useLink( {\n\t\tpostType: item.type,\n\t\tpostId: isUserPattern || isTemplatePart ? item.id : item.name,\n\t\tcanvas: 'edit',\n\t} );\n\tconst title = decodeEntities( defaultGetTitle( item ) );\n\treturn (\n\t\t<HStack alignment=\"center\" justify=\"flex-start\" spacing={ 2 }>\n\t\t\t<Flex\n\t\t\t\tas=\"div\"\n\t\t\t\tgap={ 0 }\n\t\t\t\tjustify=\"left\"\n\t\t\t\tclassName=\"edit-site-patterns__pattern-title\"\n\t\t\t>\n\t\t\t\t{ item.type === PATTERN_TYPES.theme ? (\n\t\t\t\t\ttitle\n\t\t\t\t) : (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"link\"\n\t\t\t\t\t\tonClick={ onClick }\n\t\t\t\t\t\t// Required for the grid's roving tab index system.\n\t\t\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/51898#discussion_r1243399243.\n\t\t\t\t\t\ttabIndex=\"-1\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ title }\n\t\t\t\t\t</Button>\n\t\t\t\t) }\n\t\t\t</Flex>\n\t\t\t{ item.type === PATTERN_TYPES.theme && (\n\t\t\t\t<Tooltip\n\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\ttext={ __( 'This pattern cannot be edited.' ) }\n\t\t\t\t>\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tclassName=\"edit-site-patterns__pattern-lock-icon\"\n\t\t\t\t\t\ticon={ lockSmall }\n\t\t\t\t\t\tsize={ 24 }\n\t\t\t\t\t/>\n\t\t\t\t</Tooltip>\n\t\t\t) }\n\t\t</HStack>\n\t);\n}\n\nexport const titleField = {\n\tlabel: __( 'Title' ),\n\tid: 'title',\n\tgetValue: ( { item } ) => item.title?.raw || item.title,\n\trender: TitleField,\n\tenableHiding: false,\n};\n\nconst SYNC_FILTERS = [\n\t{\n\t\tvalue: PATTERN_SYNC_TYPES.full,\n\t\tlabel: _x( 'Synced', 'pattern (singular)' ),\n\t\tdescription: __( 'Patterns that are kept in sync across the site.' ),\n\t},\n\t{\n\t\tvalue: PATTERN_SYNC_TYPES.unsynced,\n\t\tlabel: _x( 'Not synced', 'pattern (singular)' ),\n\t\tdescription: __(\n\t\t\t'Patterns that can be changed freely without affecting the site.'\n\t\t),\n\t},\n];\n\nexport const patternStatusField = {\n\tlabel: __( 'Sync status' ),\n\tid: 'sync-status',\n\trender: ( { item } ) => {\n\t\tconst syncStatus =\n\t\t\t'wp_pattern_sync_status' in item\n\t\t\t\t? item.wp_pattern_sync_status || PATTERN_SYNC_TYPES.full\n\t\t\t\t: PATTERN_SYNC_TYPES.unsynced;\n\t\t// User patterns can have their sync statuses checked directly.\n\t\t// Non-user patterns are all unsynced for the time being.\n\t\treturn (\n\t\t\t<span\n\t\t\t\tclassName={ `edit-site-patterns__field-sync-status-${ syncStatus }` }\n\t\t\t>\n\t\t\t\t{\n\t\t\t\t\tSYNC_FILTERS.find( ( { value } ) => value === syncStatus )\n\t\t\t\t\t\t.label\n\t\t\t\t}\n\t\t\t</span>\n\t\t);\n\t},\n\telements: SYNC_FILTERS,\n\tfilterBy: {\n\t\toperators: [ OPERATOR_IS ],\n\t\tisPrimary: true,\n\t},\n\tenableSorting: false,\n};\n\nfunction AuthorField( { item } ) {\n\tconst [ isImageLoaded, setIsImageLoaded ] = useState( false );\n\tconst { text, icon, imageUrl } = useAddedBy( item.type, item.id );\n\n\treturn (\n\t\t<HStack alignment=\"left\" spacing={ 0 }>\n\t\t\t{ imageUrl && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={ clsx( 'page-templates-author-field__avatar', {\n\t\t\t\t\t\t'is-loaded': isImageLoaded,\n\t\t\t\t\t} ) }\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tonLoad={ () => setIsImageLoaded( true ) }\n\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\tsrc={ imageUrl }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ ! imageUrl && (\n\t\t\t\t<div className=\"page-templates-author-field__icon\">\n\t\t\t\t\t<Icon icon={ icon } />\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t<span className=\"page-templates-author-field__name\">{ text }</span>\n\t\t</HStack>\n\t);\n}\n\nexport const templatePartAuthorField = {\n\tlabel: __( 'Author' ),\n\tid: 'author',\n\tgetValue: ( { item } ) => item.author_text,\n\trender: AuthorField,\n\tfilterBy: {\n\t\tisPrimary: true,\n\t},\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,43 +1,30 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
9
- import { __experimentalHStack as HStack, Button, Tooltip, Flex } from '@wordpress/components';
10
- import { __, _x } from '@wordpress/i18n';
4
+ import { __ } from '@wordpress/i18n';
11
5
  import { useState, useMemo, useId, useEffect } from '@wordpress/element';
12
- import { BlockPreview, privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
6
+ import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
13
7
  import { DataViews, filterSortAndPaginate } from '@wordpress/dataviews';
14
- import { Icon, lockSmall } from '@wordpress/icons';
15
8
  import { usePrevious } from '@wordpress/compose';
16
9
  import { useEntityRecords } from '@wordpress/core-data';
17
10
  import { privateApis as editorPrivateApis } from '@wordpress/editor';
18
11
  import { privateApis as routerPrivateApis } from '@wordpress/router';
19
- import { parse } from '@wordpress/blocks';
20
- import { decodeEntities } from '@wordpress/html-entities';
21
12
 
22
13
  /**
23
14
  * Internal dependencies
24
15
  */
25
- import { Async } from '../async';
26
16
  import Page from '../page';
27
- import { LAYOUT_GRID, LAYOUT_TABLE, LAYOUT_LIST, PATTERN_TYPES, TEMPLATE_PART_POST_TYPE, PATTERN_SYNC_TYPES, PATTERN_DEFAULT_CATEGORY, OPERATOR_IS } from '../../utils/constants';
17
+ import { LAYOUT_GRID, LAYOUT_TABLE, PATTERN_TYPES, TEMPLATE_PART_POST_TYPE, PATTERN_DEFAULT_CATEGORY } from '../../utils/constants';
28
18
  import usePatternSettings from './use-pattern-settings';
29
19
  import { unlock } from '../../lock-unlock';
30
- import usePatterns from './use-patterns';
20
+ import usePatterns, { useAugmentPatternsWithPermissions } from './use-patterns';
31
21
  import PatternsHeader from './header';
32
- import { useLink } from '../routes/link';
33
- import { useAddedBy } from '../page-templates/hooks';
34
22
  import { useEditPostAction } from '../dataviews-actions';
35
- import { defaultGetTitle } from './search-items';
23
+ import { patternStatusField, previewField, titleField, templatePartAuthorField } from './fields';
36
24
  import { jsx as _jsx } from "react/jsx-runtime";
37
25
  import { jsxs as _jsxs } from "react/jsx-runtime";
38
26
  const {
39
- ExperimentalBlockEditorProvider,
40
- useGlobalStyle
27
+ ExperimentalBlockEditorProvider
41
28
  } = unlock(blockEditorPrivateApis);
42
29
  const {
43
30
  usePostActions
@@ -77,152 +64,6 @@ const DEFAULT_VIEW = {
77
64
  fields: ['title', 'sync-status'],
78
65
  filters: []
79
66
  };
80
- const SYNC_FILTERS = [{
81
- value: PATTERN_SYNC_TYPES.full,
82
- label: _x('Synced', 'pattern (singular)'),
83
- description: __('Patterns that are kept in sync across the site.')
84
- }, {
85
- value: PATTERN_SYNC_TYPES.unsynced,
86
- label: _x('Not synced', 'pattern (singular)'),
87
- description: __('Patterns that can be changed freely without affecting the site.')
88
- }];
89
- function PreviewWrapper({
90
- item,
91
- onClick,
92
- ariaDescribedBy,
93
- children
94
- }) {
95
- return /*#__PURE__*/_jsx("button", {
96
- className: "page-patterns-preview-field__button",
97
- type: "button",
98
- onClick: item.type !== PATTERN_TYPES.theme ? onClick : undefined,
99
- "aria-label": item.title,
100
- "aria-describedby": ariaDescribedBy,
101
- "aria-disabled": item.type === PATTERN_TYPES.theme,
102
- children: children
103
- });
104
- }
105
- function Preview({
106
- item,
107
- viewType
108
- }) {
109
- const descriptionId = useId();
110
- const description = item.description || item?.excerpt?.raw;
111
- const isUserPattern = item.type === PATTERN_TYPES.user;
112
- const isTemplatePart = item.type === TEMPLATE_PART_POST_TYPE;
113
- const [backgroundColor] = useGlobalStyle('color.background');
114
- const {
115
- onClick
116
- } = useLink({
117
- postType: item.type,
118
- postId: isUserPattern || isTemplatePart ? item.id : item.name,
119
- canvas: 'edit'
120
- });
121
- const blocks = useMemo(() => {
122
- var _item$blocks;
123
- return (_item$blocks = item.blocks) !== null && _item$blocks !== void 0 ? _item$blocks : parse(item.content.raw, {
124
- __unstableSkipMigrationLogs: true
125
- });
126
- }, [item?.content?.raw, item.blocks]);
127
- const isEmpty = !blocks?.length;
128
- return /*#__PURE__*/_jsxs("div", {
129
- className: `page-patterns-preview-field is-viewtype-${viewType}`,
130
- style: {
131
- backgroundColor
132
- },
133
- children: [/*#__PURE__*/_jsxs(PreviewWrapper, {
134
- item: item,
135
- onClick: onClick,
136
- ariaDescribedBy: !!description ? descriptionId : undefined,
137
- children: [isEmpty && isTemplatePart && __('Empty template part'), isEmpty && !isTemplatePart && __('Empty pattern'), !isEmpty && /*#__PURE__*/_jsx(Async, {
138
- children: /*#__PURE__*/_jsx(BlockPreview, {
139
- blocks: blocks,
140
- viewportWidth: item.viewportWidth
141
- })
142
- })]
143
- }), !!description && /*#__PURE__*/_jsx("div", {
144
- hidden: true,
145
- id: descriptionId,
146
- children: description
147
- })]
148
- });
149
- }
150
- function Author({
151
- item,
152
- viewType
153
- }) {
154
- const [isImageLoaded, setIsImageLoaded] = useState(false);
155
- const {
156
- text,
157
- icon,
158
- imageUrl
159
- } = useAddedBy(item.type, item.id);
160
- const withIcon = viewType !== LAYOUT_LIST;
161
- return /*#__PURE__*/_jsxs(HStack, {
162
- alignment: "left",
163
- spacing: 0,
164
- children: [withIcon && imageUrl && /*#__PURE__*/_jsx("div", {
165
- className: clsx('page-templates-author-field__avatar', {
166
- 'is-loaded': isImageLoaded
167
- }),
168
- children: /*#__PURE__*/_jsx("img", {
169
- onLoad: () => setIsImageLoaded(true),
170
- alt: "",
171
- src: imageUrl
172
- })
173
- }), withIcon && !imageUrl && /*#__PURE__*/_jsx("div", {
174
- className: "page-templates-author-field__icon",
175
- children: /*#__PURE__*/_jsx(Icon, {
176
- icon: icon
177
- })
178
- }), /*#__PURE__*/_jsx("span", {
179
- className: "page-templates-author-field__name",
180
- children: text
181
- })]
182
- });
183
- }
184
- function Title({
185
- item
186
- }) {
187
- const isUserPattern = item.type === PATTERN_TYPES.user;
188
- const isTemplatePart = item.type === TEMPLATE_PART_POST_TYPE;
189
- const {
190
- onClick
191
- } = useLink({
192
- postType: item.type,
193
- postId: isUserPattern || isTemplatePart ? item.id : item.name,
194
- canvas: 'edit'
195
- });
196
- const title = decodeEntities(defaultGetTitle(item));
197
- return /*#__PURE__*/_jsxs(HStack, {
198
- alignment: "center",
199
- justify: "flex-start",
200
- spacing: 2,
201
- children: [/*#__PURE__*/_jsx(Flex, {
202
- as: "div",
203
- gap: 0,
204
- justify: "left",
205
- className: "edit-site-patterns__pattern-title",
206
- children: item.type === PATTERN_TYPES.theme ? title : /*#__PURE__*/_jsx(Button, {
207
- variant: "link",
208
- onClick: onClick
209
- // Required for the grid's roving tab index system.
210
- // See https://github.com/WordPress/gutenberg/pull/51898#discussion_r1243399243.
211
- ,
212
- tabIndex: "-1",
213
- children: title
214
- })
215
- }), item.type === PATTERN_TYPES.theme && /*#__PURE__*/_jsx(Tooltip, {
216
- placement: "top",
217
- text: __('This pattern cannot be edited.'),
218
- children: /*#__PURE__*/_jsx(Icon, {
219
- className: "edit-site-patterns__pattern-lock-icon",
220
- icon: lockSmall,
221
- size: 24
222
- })
223
- })]
224
- });
225
- }
226
67
  export default function DataviewsPatterns() {
227
68
  const {
228
69
  params: {
@@ -263,76 +104,17 @@ export default function DataviewsPatterns() {
263
104
  }));
264
105
  }, [records]);
265
106
  const fields = useMemo(() => {
266
- const _fields = [{
267
- label: __('Preview'),
268
- id: 'preview',
269
- render: ({
270
- item
271
- }) => /*#__PURE__*/_jsx(Preview, {
272
- item: item,
273
- viewType: view.type
274
- }),
275
- enableSorting: false
276
- }, {
277
- label: __('Title'),
278
- id: 'title',
279
- getValue: ({
280
- item
281
- }) => item.title?.raw || item.title,
282
- render: ({
283
- item
284
- }) => /*#__PURE__*/_jsx(Title, {
285
- item: item
286
- }),
287
- enableHiding: false
288
- }];
107
+ const _fields = [previewField, titleField];
289
108
  if (type === PATTERN_TYPES.user) {
290
- _fields.push({
291
- label: __('Sync status'),
292
- id: 'sync-status',
293
- render: ({
294
- item
295
- }) => {
296
- const syncStatus = 'wp_pattern_sync_status' in item ? item.wp_pattern_sync_status || PATTERN_SYNC_TYPES.full : PATTERN_SYNC_TYPES.unsynced;
297
- // User patterns can have their sync statuses checked directly.
298
- // Non-user patterns are all unsynced for the time being.
299
- return /*#__PURE__*/_jsx("span", {
300
- className: `edit-site-patterns__field-sync-status-${syncStatus}`,
301
- children: SYNC_FILTERS.find(({
302
- value
303
- }) => value === syncStatus).label
304
- });
305
- },
306
- elements: SYNC_FILTERS,
307
- filterBy: {
308
- operators: [OPERATOR_IS],
309
- isPrimary: true
310
- },
311
- enableSorting: false
312
- });
109
+ _fields.push(patternStatusField);
313
110
  } else if (type === TEMPLATE_PART_POST_TYPE) {
314
111
  _fields.push({
315
- label: __('Author'),
316
- id: 'author',
317
- getValue: ({
318
- item
319
- }) => item.author_text,
320
- render: ({
321
- item
322
- }) => {
323
- return /*#__PURE__*/_jsx(Author, {
324
- viewType: view.type,
325
- item: item
326
- });
327
- },
328
- elements: authors,
329
- filterBy: {
330
- isPrimary: true
331
- }
112
+ ...templatePartAuthorField,
113
+ elements: authors
332
114
  });
333
115
  }
334
116
  return _fields;
335
- }, [view.type, type, authors]);
117
+ }, [type, authors]);
336
118
 
337
119
  // Reset the page number when the category changes.
338
120
  useEffect(() => {
@@ -358,6 +140,7 @@ export default function DataviewsPatterns() {
358
140
  }
359
141
  return filterSortAndPaginate(patterns, viewWithoutFilters, fields);
360
142
  }, [patterns, view, fields, type]);
143
+ const dataWithPermissions = useAugmentPatternsWithPermissions(data);
361
144
  const templatePartActions = usePostActions({
362
145
  postType: TEMPLATE_PART_POST_TYPE,
363
146
  context: 'list'
@@ -393,7 +176,7 @@ export default function DataviewsPatterns() {
393
176
  paginationInfo: paginationInfo,
394
177
  fields: fields,
395
178
  actions: actions,
396
- data: data || EMPTY_ARRAY,
179
+ data: dataWithPermissions || EMPTY_ARRAY,
397
180
  getItemId: item => {
398
181
  var _item$name;
399
182
  return (_item$name = item.name) !== null && _item$name !== void 0 ? _item$name : item.id;
@@ -402,7 +185,7 @@ export default function DataviewsPatterns() {
402
185
  view: view,
403
186
  onChangeView: setView,
404
187
  defaultLayouts: defaultLayouts
405
- })]
188
+ }, categoryId + postType)]
406
189
  })
407
190
  });
408
191
  }