@wordpress/fields 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +28 -0
  3. package/build/actions/delete-post.js +4 -4
  4. package/build/actions/delete-post.js.map +1 -1
  5. package/build/actions/duplicate-post.js +2 -2
  6. package/build/actions/duplicate-post.js.map +1 -1
  7. package/build/actions/utils.js +2 -2
  8. package/build/actions/utils.js.map +1 -1
  9. package/build/actions/view-post-revisions.js +1 -1
  10. package/build/actions/view-post-revisions.js.map +1 -1
  11. package/build/fields/comment-status/index.js +40 -0
  12. package/build/fields/comment-status/index.js.map +1 -0
  13. package/build/fields/date/date-view.js +69 -0
  14. package/build/fields/date/date-view.js.map +1 -0
  15. package/build/fields/date/index.js +29 -0
  16. package/build/fields/date/index.js.map +1 -0
  17. package/build/fields/featured-image/featured-image-edit.js +113 -0
  18. package/build/fields/featured-image/featured-image-edit.js.map +1 -0
  19. package/build/fields/featured-image/featured-image-view.js +41 -0
  20. package/build/fields/featured-image/featured-image-view.js.map +1 -0
  21. package/build/fields/featured-image/index.js +27 -0
  22. package/build/fields/featured-image/index.js.map +1 -0
  23. package/build/fields/index.js +49 -0
  24. package/build/fields/index.js.map +1 -1
  25. package/build/fields/order/index.js +1 -1
  26. package/build/fields/order/index.js.map +1 -1
  27. package/build/fields/parent/index.js +31 -0
  28. package/build/fields/parent/index.js.map +1 -0
  29. package/build/fields/parent/parent-edit.js +243 -0
  30. package/build/fields/parent/parent-edit.js.map +1 -0
  31. package/build/fields/parent/parent-view.js +39 -0
  32. package/build/fields/parent/parent-view.js.map +1 -0
  33. package/build/fields/parent/utils.js +20 -0
  34. package/build/fields/parent/utils.js.map +1 -0
  35. package/build/fields/password/edit.js +65 -0
  36. package/build/fields/password/edit.js.map +1 -0
  37. package/build/fields/password/index.js +30 -0
  38. package/build/fields/password/index.js.map +1 -0
  39. package/build/fields/slug/index.js +27 -0
  40. package/build/fields/slug/index.js.map +1 -0
  41. package/build/fields/slug/slug-edit.js +129 -0
  42. package/build/fields/slug/slug-edit.js.map +1 -0
  43. package/build/fields/slug/slug-view.js +31 -0
  44. package/build/fields/slug/slug-view.js.map +1 -0
  45. package/build/fields/slug/utils.js +21 -0
  46. package/build/fields/slug/utils.js.map +1 -0
  47. package/build/fields/status/index.js +37 -0
  48. package/build/fields/status/index.js.map +1 -0
  49. package/build/fields/status/status-elements.js +46 -0
  50. package/build/fields/status/status-elements.js.map +1 -0
  51. package/build/fields/status/status-view.js +41 -0
  52. package/build/fields/status/status-view.js.map +1 -0
  53. package/build/fields/title/index.js +5 -1
  54. package/build/fields/title/index.js.map +1 -1
  55. package/build/fields/title/title-view.js +61 -0
  56. package/build/fields/title/title-view.js.map +1 -0
  57. package/build/mutation/index.js +2 -2
  58. package/build/mutation/index.js.map +1 -1
  59. package/build/types.js.map +1 -1
  60. package/build-module/actions/delete-post.js +5 -5
  61. package/build-module/actions/delete-post.js.map +1 -1
  62. package/build-module/actions/duplicate-post.js +2 -2
  63. package/build-module/actions/duplicate-post.js.map +1 -1
  64. package/build-module/actions/utils.js +2 -2
  65. package/build-module/actions/utils.js.map +1 -1
  66. package/build-module/actions/view-post-revisions.js +1 -1
  67. package/build-module/actions/view-post-revisions.js.map +1 -1
  68. package/build-module/fields/comment-status/index.js +35 -0
  69. package/build-module/fields/comment-status/index.js.map +1 -0
  70. package/build-module/fields/date/date-view.js +62 -0
  71. package/build-module/fields/date/date-view.js.map +1 -0
  72. package/build-module/fields/date/index.js +23 -0
  73. package/build-module/fields/date/index.js.map +1 -0
  74. package/build-module/fields/featured-image/featured-image-edit.js +104 -0
  75. package/build-module/fields/featured-image/featured-image-edit.js.map +1 -0
  76. package/build-module/fields/featured-image/featured-image-view.js +33 -0
  77. package/build-module/fields/featured-image/featured-image-view.js.map +1 -0
  78. package/build-module/fields/featured-image/index.js +22 -0
  79. package/build-module/fields/featured-image/index.js.map +1 -0
  80. package/build-module/fields/index.js +7 -0
  81. package/build-module/fields/index.js.map +1 -1
  82. package/build-module/fields/order/index.js +2 -1
  83. package/build-module/fields/order/index.js.map +1 -1
  84. package/build-module/fields/parent/index.js +26 -0
  85. package/build-module/fields/parent/index.js.map +1 -0
  86. package/build-module/fields/parent/parent-edit.js +232 -0
  87. package/build-module/fields/parent/parent-edit.js.map +1 -0
  88. package/build-module/fields/parent/parent-view.js +32 -0
  89. package/build-module/fields/parent/parent-view.js.map +1 -0
  90. package/build-module/fields/parent/utils.js +14 -0
  91. package/build-module/fields/parent/utils.js.map +1 -0
  92. package/build-module/fields/password/edit.js +58 -0
  93. package/build-module/fields/password/edit.js.map +1 -0
  94. package/build-module/fields/password/index.js +23 -0
  95. package/build-module/fields/password/index.js.map +1 -0
  96. package/build-module/fields/slug/index.js +21 -0
  97. package/build-module/fields/slug/index.js.map +1 -0
  98. package/build-module/fields/slug/slug-edit.js +123 -0
  99. package/build-module/fields/slug/slug-edit.js.map +1 -0
  100. package/build-module/fields/slug/slug-view.js +25 -0
  101. package/build-module/fields/slug/slug-view.js.map +1 -0
  102. package/build-module/fields/slug/utils.js +13 -0
  103. package/build-module/fields/slug/utils.js.map +1 -0
  104. package/build-module/fields/status/index.js +31 -0
  105. package/build-module/fields/status/index.js.map +1 -0
  106. package/build-module/fields/status/status-elements.js +40 -0
  107. package/build-module/fields/status/status-elements.js.map +1 -0
  108. package/build-module/fields/status/status-view.js +34 -0
  109. package/build-module/fields/status/status-view.js.map +1 -0
  110. package/build-module/fields/title/index.js +4 -1
  111. package/build-module/fields/title/index.js.map +1 -1
  112. package/build-module/fields/title/title-view.js +55 -0
  113. package/build-module/fields/title/title-view.js.map +1 -0
  114. package/build-module/mutation/index.js +2 -2
  115. package/build-module/mutation/index.js.map +1 -1
  116. package/build-module/types.js.map +1 -1
  117. package/build-style/style-rtl.css +213 -0
  118. package/build-style/style.css +213 -0
  119. package/build-types/actions/delete-post.d.ts.map +1 -1
  120. package/build-types/fields/comment-status/index.d.ts +14 -0
  121. package/build-types/fields/comment-status/index.d.ts.map +1 -0
  122. package/build-types/fields/date/date-view.d.ts +9 -0
  123. package/build-types/fields/date/date-view.d.ts.map +1 -0
  124. package/build-types/fields/date/index.d.ts +14 -0
  125. package/build-types/fields/date/index.d.ts.map +1 -0
  126. package/build-types/fields/featured-image/featured-image-edit.d.ts +7 -0
  127. package/build-types/fields/featured-image/featured-image-edit.d.ts.map +1 -0
  128. package/build-types/fields/featured-image/featured-image-view.d.ts +7 -0
  129. package/build-types/fields/featured-image/featured-image-view.d.ts.map +1 -0
  130. package/build-types/fields/featured-image/index.d.ts +11 -0
  131. package/build-types/fields/featured-image/index.d.ts.map +1 -0
  132. package/build-types/fields/index.d.ts +7 -0
  133. package/build-types/fields/index.d.ts.map +1 -1
  134. package/build-types/fields/order/index.d.ts.map +1 -1
  135. package/build-types/fields/parent/index.d.ts +14 -0
  136. package/build-types/fields/parent/index.d.ts.map +1 -0
  137. package/build-types/fields/parent/parent-edit.d.ts +12 -0
  138. package/build-types/fields/parent/parent-edit.d.ts.map +1 -0
  139. package/build-types/fields/parent/parent-view.d.ts +7 -0
  140. package/build-types/fields/parent/parent-view.d.ts.map +1 -0
  141. package/build-types/fields/parent/utils.d.ts +6 -0
  142. package/build-types/fields/parent/utils.d.ts.map +1 -0
  143. package/build-types/fields/password/edit.d.ts +8 -0
  144. package/build-types/fields/password/edit.d.ts.map +1 -0
  145. package/build-types/fields/password/index.d.ts +14 -0
  146. package/build-types/fields/password/index.d.ts.map +1 -0
  147. package/build-types/fields/slug/index.d.ts +11 -0
  148. package/build-types/fields/slug/index.d.ts.map +1 -0
  149. package/build-types/fields/slug/slug-edit.d.ts +8 -0
  150. package/build-types/fields/slug/slug-edit.d.ts.map +1 -0
  151. package/build-types/fields/slug/slug-view.d.ts +9 -0
  152. package/build-types/fields/slug/slug-view.d.ts.map +1 -0
  153. package/build-types/fields/slug/utils.d.ts +6 -0
  154. package/build-types/fields/slug/utils.d.ts.map +1 -0
  155. package/build-types/fields/status/index.d.ts +14 -0
  156. package/build-types/fields/status/index.d.ts.map +1 -0
  157. package/build-types/fields/status/status-elements.d.ts +13 -0
  158. package/build-types/fields/status/status-elements.d.ts.map +1 -0
  159. package/build-types/fields/status/status-view.d.ts +9 -0
  160. package/build-types/fields/status/status-view.d.ts.map +1 -0
  161. package/build-types/fields/title/index.d.ts.map +1 -1
  162. package/build-types/fields/title/title-view.d.ts +9 -0
  163. package/build-types/fields/title/title-view.d.ts.map +1 -0
  164. package/build-types/lock-unlock.d.ts +1 -1
  165. package/build-types/lock-unlock.d.ts.map +1 -1
  166. package/build-types/types.d.ts +5 -1
  167. package/build-types/types.d.ts.map +1 -1
  168. package/package.json +27 -22
  169. package/src/actions/delete-post.tsx +8 -5
  170. package/src/actions/duplicate-post.tsx +2 -2
  171. package/src/actions/utils.ts +2 -2
  172. package/src/actions/view-post-revisions.tsx +1 -1
  173. package/src/fields/comment-status/index.tsx +40 -0
  174. package/src/fields/date/date-view.tsx +92 -0
  175. package/src/fields/date/index.tsx +23 -0
  176. package/src/fields/featured-image/featured-image-edit.tsx +123 -0
  177. package/src/fields/featured-image/featured-image-view.tsx +38 -0
  178. package/src/fields/featured-image/index.ts +23 -0
  179. package/src/fields/featured-image/style.scss +95 -0
  180. package/src/fields/index.ts +7 -0
  181. package/src/fields/order/index.ts +2 -1
  182. package/src/fields/parent/index.ts +26 -0
  183. package/src/fields/parent/parent-edit.tsx +348 -0
  184. package/src/fields/parent/parent-view.tsx +33 -0
  185. package/src/fields/parent/utils.ts +18 -0
  186. package/src/fields/password/edit.tsx +68 -0
  187. package/src/fields/password/index.tsx +24 -0
  188. package/src/fields/slug/index.ts +22 -0
  189. package/src/fields/slug/slug-edit.tsx +153 -0
  190. package/src/fields/slug/slug-view.tsx +27 -0
  191. package/src/fields/slug/style.scss +22 -0
  192. package/src/fields/slug/utils.ts +15 -0
  193. package/src/fields/status/index.tsx +32 -0
  194. package/src/fields/status/status-elements.tsx +50 -0
  195. package/src/fields/status/status-view.tsx +28 -0
  196. package/src/fields/title/index.ts +3 -0
  197. package/src/fields/title/title-view.tsx +62 -0
  198. package/src/mutation/index.ts +3 -3
  199. package/src/style.scss +2 -0
  200. package/src/types.ts +5 -1
  201. package/tsconfig.json +10 -7
  202. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["__","orderField","type","id","label","description"],"sources":["@wordpress/fields/src/fields/order/index.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport type { Field } from '@wordpress/dataviews';\nimport { __ } from '@wordpress/i18n';\n/**\n * Internal dependencies\n */\nimport type { BasePost } from '../../types';\n\nconst orderField: Field< BasePost > = {\n\ttype: 'integer',\n\tid: 'menu_order',\n\tlabel: __( 'Order' ),\n\tdescription: __( 'Determines the order of pages.' ),\n};\n\nexport default orderField;\n"],"mappings":"AAAA;AACA;AACA;;AAEA,SAASA,EAAE,QAAQ,iBAAiB;AACpC;AACA;AACA;;AAGA,MAAMC,UAA6B,GAAG;EACrCC,IAAI,EAAE,SAAS;EACfC,EAAE,EAAE,YAAY;EAChBC,KAAK,EAAEJ,EAAE,CAAE,OAAQ,CAAC;EACpBK,WAAW,EAAEL,EAAE,CAAE,gCAAiC;AACnD,CAAC;AAED,eAAeC,UAAU","ignoreList":[]}
1
+ {"version":3,"names":["__","orderField","id","type","label","description"],"sources":["@wordpress/fields/src/fields/order/index.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport type { Field } from '@wordpress/dataviews';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport type { BasePost } from '../../types';\n\nconst orderField: Field< BasePost > = {\n\tid: 'menu_order',\n\ttype: 'integer',\n\tlabel: __( 'Order' ),\n\tdescription: __( 'Determines the order of pages.' ),\n};\n\nexport default orderField;\n"],"mappings":"AAAA;AACA;AACA;;AAEA,SAASA,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;;AAGA,MAAMC,UAA6B,GAAG;EACrCC,EAAE,EAAE,YAAY;EAChBC,IAAI,EAAE,SAAS;EACfC,KAAK,EAAEJ,EAAE,CAAE,OAAQ,CAAC;EACpBK,WAAW,EAAEL,EAAE,CAAE,gCAAiC;AACnD,CAAC;AAED,eAAeC,UAAU","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+
5
+ import { __ } from '@wordpress/i18n';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+
11
+ import { ParentEdit } from './parent-edit';
12
+ import { ParentView } from './parent-view';
13
+ const parentField = {
14
+ id: 'parent',
15
+ type: 'text',
16
+ label: __('Parent'),
17
+ Edit: ParentEdit,
18
+ render: ParentView,
19
+ enableSorting: true
20
+ };
21
+
22
+ /**
23
+ * This field is used to display the post parent.
24
+ */
25
+ export default parentField;
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__","ParentEdit","ParentView","parentField","id","type","label","Edit","render","enableSorting"],"sources":["@wordpress/fields/src/fields/parent/index.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport type { Field } from '@wordpress/dataviews';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport type { BasePost } from '../../types';\nimport { ParentEdit } from './parent-edit';\nimport { ParentView } from './parent-view';\n\nconst parentField: Field< BasePost > = {\n\tid: 'parent',\n\ttype: 'text',\n\tlabel: __( 'Parent' ),\n\tEdit: ParentEdit,\n\trender: ParentView,\n\tenableSorting: true,\n};\n\n/**\n * This field is used to display the post parent.\n */\nexport default parentField;\n"],"mappings":"AAAA;AACA;AACA;;AAEA,SAASA,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;;AAEA,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASC,UAAU,QAAQ,eAAe;AAE1C,MAAMC,WAA8B,GAAG;EACtCC,EAAE,EAAE,QAAQ;EACZC,IAAI,EAAE,MAAM;EACZC,KAAK,EAAEN,EAAE,CAAE,QAAS,CAAC;EACrBO,IAAI,EAAEN,UAAU;EAChBO,MAAM,EAAEN,UAAU;EAClBO,aAAa,EAAE;AAChB,CAAC;;AAED;AACA;AACA;AACA,eAAeN,WAAW","ignoreList":[]}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import removeAccents from 'remove-accents';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { ComboboxControl, ExternalLink } from '@wordpress/components';
10
+ import { useSelect } from '@wordpress/data';
11
+ import { createInterpolateElement, useCallback, useMemo, useState } from '@wordpress/element';
12
+ // @ts-ignore
13
+ import { store as coreStore } from '@wordpress/core-data';
14
+ import { debounce } from '@wordpress/compose';
15
+ import { decodeEntities } from '@wordpress/html-entities';
16
+ import { __, sprintf } from '@wordpress/i18n';
17
+ import { filterURLForDisplay } from '@wordpress/url';
18
+
19
+ /**
20
+ * Internal dependencies
21
+ */
22
+
23
+ import { getTitleWithFallbackName } from './utils';
24
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
25
+ function buildTermsTree(flatTerms) {
26
+ const flatTermsWithParentAndChildren = flatTerms.map(term => {
27
+ return {
28
+ children: [],
29
+ ...term
30
+ };
31
+ });
32
+
33
+ // All terms should have a `parent` because we're about to index them by it.
34
+ if (flatTermsWithParentAndChildren.some(({
35
+ parent
36
+ }) => parent === null || parent === undefined)) {
37
+ return flatTermsWithParentAndChildren;
38
+ }
39
+ const termsByParent = flatTermsWithParentAndChildren.reduce((acc, term) => {
40
+ const {
41
+ parent
42
+ } = term;
43
+ if (!acc[parent]) {
44
+ acc[parent] = [];
45
+ }
46
+ acc[parent].push(term);
47
+ return acc;
48
+ }, {});
49
+ const fillWithChildren = terms => {
50
+ return terms.map(term => {
51
+ const children = termsByParent[term.id];
52
+ return {
53
+ ...term,
54
+ children: children && children.length ? fillWithChildren(children) : []
55
+ };
56
+ });
57
+ };
58
+ return fillWithChildren(termsByParent['0'] || []);
59
+ }
60
+ export const getItemPriority = (name, searchValue) => {
61
+ const normalizedName = removeAccents(name || '').toLowerCase();
62
+ const normalizedSearch = removeAccents(searchValue || '').toLowerCase();
63
+ if (normalizedName === normalizedSearch) {
64
+ return 0;
65
+ }
66
+ if (normalizedName.startsWith(normalizedSearch)) {
67
+ return normalizedName.length;
68
+ }
69
+ return Infinity;
70
+ };
71
+ export function PageAttributesParent({
72
+ data,
73
+ onChangeControl
74
+ }) {
75
+ const [fieldValue, setFieldValue] = useState(null);
76
+ const pageId = data.parent;
77
+ const postId = data.id;
78
+ const postTypeSlug = data.type;
79
+ const {
80
+ parentPostTitle,
81
+ pageItems,
82
+ isHierarchical
83
+ } = useSelect(select => {
84
+ // @ts-expect-error getPostType is not typed
85
+ const {
86
+ getEntityRecord,
87
+ getEntityRecords,
88
+ getPostType
89
+ } = select(coreStore);
90
+ const postTypeInfo = getPostType(postTypeSlug);
91
+ const postIsHierarchical = postTypeInfo?.hierarchical && postTypeInfo.viewable;
92
+ const parentPost = pageId ? getEntityRecord('postType', postTypeSlug, pageId) : null;
93
+ const query = {
94
+ per_page: 100,
95
+ exclude: postId,
96
+ parent_exclude: postId,
97
+ orderby: 'menu_order',
98
+ order: 'asc',
99
+ _fields: 'id,title,parent',
100
+ ...(fieldValue !== null && {
101
+ search: fieldValue
102
+ })
103
+ };
104
+ return {
105
+ isHierarchical: postIsHierarchical,
106
+ parentPostTitle: parentPost ? getTitleWithFallbackName(parentPost) : '',
107
+ pageItems: postIsHierarchical ? getEntityRecords('postType', postTypeSlug, query) : null
108
+ };
109
+ }, [fieldValue, pageId, postId, postTypeSlug]);
110
+
111
+ /**
112
+ * This logic has been copied from https://github.com/WordPress/gutenberg/blob/0249771b519d5646171fb9fae422006c8ab773f2/packages/editor/src/components/page-attributes/parent.js#L106.
113
+ */
114
+ const parentOptions = useMemo(() => {
115
+ const getOptionsFromTree = (tree, level = 0) => {
116
+ const mappedNodes = tree.map(treeNode => [{
117
+ value: treeNode.id,
118
+ label: '— '.repeat(level) + decodeEntities(treeNode.name),
119
+ rawName: treeNode.name
120
+ }, ...getOptionsFromTree(treeNode.children || [], level + 1)]);
121
+ const sortedNodes = mappedNodes.sort(([a], [b]) => {
122
+ const priorityA = getItemPriority(a.rawName, fieldValue !== null && fieldValue !== void 0 ? fieldValue : '');
123
+ const priorityB = getItemPriority(b.rawName, fieldValue !== null && fieldValue !== void 0 ? fieldValue : '');
124
+ return priorityA >= priorityB ? 1 : -1;
125
+ });
126
+ return sortedNodes.flat();
127
+ };
128
+ if (!pageItems) {
129
+ return [];
130
+ }
131
+ let tree = pageItems.map(item => {
132
+ var _item$parent;
133
+ return {
134
+ id: item.id,
135
+ parent: (_item$parent = item.parent) !== null && _item$parent !== void 0 ? _item$parent : null,
136
+ name: getTitleWithFallbackName(item)
137
+ };
138
+ });
139
+
140
+ // Only build a hierarchical tree when not searching.
141
+ if (!fieldValue) {
142
+ tree = buildTermsTree(tree);
143
+ }
144
+ const opts = getOptionsFromTree(tree);
145
+
146
+ // Ensure the current parent is in the options list.
147
+ const optsHasParent = opts.find(item => item.value === pageId);
148
+ if (pageId && parentPostTitle && !optsHasParent) {
149
+ opts.unshift({
150
+ value: pageId,
151
+ label: parentPostTitle,
152
+ rawName: ''
153
+ });
154
+ }
155
+ return opts.map(option => ({
156
+ ...option,
157
+ value: option.value.toString()
158
+ }));
159
+ }, [pageItems, fieldValue, parentPostTitle, pageId]);
160
+ if (!isHierarchical) {
161
+ return null;
162
+ }
163
+
164
+ /**
165
+ * Handle user input.
166
+ *
167
+ * @param {string} inputValue The current value of the input field.
168
+ */
169
+ const handleKeydown = inputValue => {
170
+ setFieldValue(inputValue);
171
+ };
172
+
173
+ /**
174
+ * Handle author selection.
175
+ *
176
+ * @param {Object} selectedPostId The selected Author.
177
+ */
178
+ const handleChange = selectedPostId => {
179
+ if (selectedPostId) {
180
+ var _parseInt;
181
+ return onChangeControl((_parseInt = parseInt(selectedPostId, 10)) !== null && _parseInt !== void 0 ? _parseInt : 0);
182
+ }
183
+ onChangeControl(0);
184
+ };
185
+ return /*#__PURE__*/_jsx(ComboboxControl, {
186
+ __nextHasNoMarginBottom: true,
187
+ __next40pxDefaultSize: true,
188
+ label: __('Parent'),
189
+ help: __('Choose a parent page.'),
190
+ value: pageId?.toString(),
191
+ options: parentOptions,
192
+ onFilterValueChange: debounce(value => handleKeydown(value), 300),
193
+ onChange: handleChange,
194
+ hideLabelFromVision: true
195
+ });
196
+ }
197
+ export const ParentEdit = ({
198
+ data,
199
+ field,
200
+ onChange
201
+ }) => {
202
+ const {
203
+ id
204
+ } = field;
205
+ const homeUrl = useSelect(select => {
206
+ // @ts-expect-error getEntityRecord is not typed with unstableBase as argument.
207
+ return select(coreStore).getEntityRecord('root', '__unstableBase')?.home;
208
+ }, []);
209
+ const onChangeControl = useCallback(newValue => onChange({
210
+ [id]: newValue
211
+ }), [id, onChange]);
212
+ return /*#__PURE__*/_jsx("fieldset", {
213
+ className: "fields-controls__parent",
214
+ children: /*#__PURE__*/_jsxs("div", {
215
+ children: [createInterpolateElement(sprintf(/* translators: %1$s The home URL of the WordPress installation without the scheme. */
216
+ __('Child pages inherit characteristics from their parent, such as URL structure. For instance, if "Pricing" is a child of "Services", its URL would be %1$s<wbr />/services<wbr />/pricing.'), filterURLForDisplay(homeUrl).replace(/([/.])/g, '<wbr />$1')), {
217
+ wbr: /*#__PURE__*/_jsx("wbr", {})
218
+ }), /*#__PURE__*/_jsx("p", {
219
+ children: createInterpolateElement(__('They also show up as sub-items in the default navigation menu. <a>Learn more.</a>'), {
220
+ a: /*#__PURE__*/_jsx(ExternalLink, {
221
+ href: __('https://wordpress.org/documentation/article/page-post-settings-sidebar/#page-attributes'),
222
+ children: undefined
223
+ })
224
+ })
225
+ }), /*#__PURE__*/_jsx(PageAttributesParent, {
226
+ data: data,
227
+ onChangeControl: onChangeControl
228
+ })]
229
+ })
230
+ });
231
+ };
232
+ //# sourceMappingURL=parent-edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["removeAccents","ComboboxControl","ExternalLink","useSelect","createInterpolateElement","useCallback","useMemo","useState","store","coreStore","debounce","decodeEntities","__","sprintf","filterURLForDisplay","getTitleWithFallbackName","jsx","_jsx","jsxs","_jsxs","buildTermsTree","flatTerms","flatTermsWithParentAndChildren","map","term","children","some","parent","undefined","termsByParent","reduce","acc","push","fillWithChildren","terms","id","length","getItemPriority","name","searchValue","normalizedName","toLowerCase","normalizedSearch","startsWith","Infinity","PageAttributesParent","data","onChangeControl","fieldValue","setFieldValue","pageId","postId","postTypeSlug","type","parentPostTitle","pageItems","isHierarchical","select","getEntityRecord","getEntityRecords","getPostType","postTypeInfo","postIsHierarchical","hierarchical","viewable","parentPost","query","per_page","exclude","parent_exclude","orderby","order","_fields","search","parentOptions","getOptionsFromTree","tree","level","mappedNodes","treeNode","value","label","repeat","rawName","sortedNodes","sort","a","b","priorityA","priorityB","flat","item","_item$parent","opts","optsHasParent","find","unshift","option","toString","handleKeydown","inputValue","handleChange","selectedPostId","_parseInt","parseInt","__nextHasNoMarginBottom","__next40pxDefaultSize","help","options","onFilterValueChange","onChange","hideLabelFromVision","ParentEdit","field","homeUrl","home","newValue","className","replace","wbr","href"],"sources":["@wordpress/fields/src/fields/parent/parent-edit.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport removeAccents from 'remove-accents';\n\n/**\n * WordPress dependencies\n */\nimport { ComboboxControl, ExternalLink } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tcreateInterpolateElement,\n\tuseCallback,\n\tuseMemo,\n\tuseState,\n} from '@wordpress/element';\n// @ts-ignore\nimport { store as coreStore } from '@wordpress/core-data';\nimport type { DataFormControlProps } from '@wordpress/dataviews';\nimport { debounce } from '@wordpress/compose';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { filterURLForDisplay } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport type { BasePost } from '../../types';\nimport { getTitleWithFallbackName } from './utils';\n\ntype TreeBase = {\n\tid: number;\n\tname: string;\n\t[ key: string ]: any;\n};\n\ntype TreeWithParent = TreeBase & {\n\tparent: number;\n};\n\ntype TreeWithoutParent = TreeBase & {\n\tparent: null;\n};\n\ntype Tree = TreeWithParent | TreeWithoutParent;\n\nfunction buildTermsTree( flatTerms: Tree[] ) {\n\tconst flatTermsWithParentAndChildren = flatTerms.map( ( term ) => {\n\t\treturn {\n\t\t\tchildren: [],\n\t\t\t...term,\n\t\t};\n\t} );\n\n\t// All terms should have a `parent` because we're about to index them by it.\n\tif (\n\t\tflatTermsWithParentAndChildren.some(\n\t\t\t( { parent } ) => parent === null || parent === undefined\n\t\t)\n\t) {\n\t\treturn flatTermsWithParentAndChildren as TreeWithParent[];\n\t}\n\n\tconst termsByParent = (\n\t\tflatTermsWithParentAndChildren as TreeWithParent[]\n\t ).reduce(\n\t\t( acc, term ) => {\n\t\t\tconst { parent } = term;\n\t\t\tif ( ! acc[ parent ] ) {\n\t\t\t\tacc[ parent ] = [];\n\t\t\t}\n\t\t\tacc[ parent ].push( term );\n\t\t\treturn acc;\n\t\t},\n\t\t{} as Record< string, Array< TreeWithParent > >\n\t);\n\n\tconst fillWithChildren = (\n\t\tterms: Array< TreeWithParent >\n\t): Array< TreeWithParent > => {\n\t\treturn terms.map( ( term ) => {\n\t\t\tconst children = termsByParent[ term.id ];\n\t\t\treturn {\n\t\t\t\t...term,\n\t\t\t\tchildren:\n\t\t\t\t\tchildren && children.length\n\t\t\t\t\t\t? fillWithChildren( children )\n\t\t\t\t\t\t: [],\n\t\t\t};\n\t\t} );\n\t};\n\n\treturn fillWithChildren( termsByParent[ '0' ] || [] );\n}\n\nexport const getItemPriority = ( name: string, searchValue: string ) => {\n\tconst normalizedName = removeAccents( name || '' ).toLowerCase();\n\tconst normalizedSearch = removeAccents( searchValue || '' ).toLowerCase();\n\tif ( normalizedName === normalizedSearch ) {\n\t\treturn 0;\n\t}\n\n\tif ( normalizedName.startsWith( normalizedSearch ) ) {\n\t\treturn normalizedName.length;\n\t}\n\n\treturn Infinity;\n};\n\nexport function PageAttributesParent( {\n\tdata,\n\tonChangeControl,\n}: {\n\tdata: BasePost;\n\tonChangeControl: ( newValue: number ) => void;\n} ) {\n\tconst [ fieldValue, setFieldValue ] = useState< null | string >( null );\n\n\tconst pageId = data.parent;\n\tconst postId = data.id;\n\tconst postTypeSlug = data.type;\n\n\tconst { parentPostTitle, pageItems, isHierarchical } = useSelect(\n\t\t( select ) => {\n\t\t\t// @ts-expect-error getPostType is not typed\n\t\t\tconst { getEntityRecord, getEntityRecords, getPostType } =\n\t\t\t\tselect( coreStore );\n\n\t\t\tconst postTypeInfo = getPostType( postTypeSlug );\n\n\t\t\tconst postIsHierarchical =\n\t\t\t\tpostTypeInfo?.hierarchical && postTypeInfo.viewable;\n\n\t\t\tconst parentPost = pageId\n\t\t\t\t? getEntityRecord< BasePost >(\n\t\t\t\t\t\t'postType',\n\t\t\t\t\t\tpostTypeSlug,\n\t\t\t\t\t\tpageId\n\t\t\t\t )\n\t\t\t\t: null;\n\n\t\t\tconst query = {\n\t\t\t\tper_page: 100,\n\t\t\t\texclude: postId,\n\t\t\t\tparent_exclude: postId,\n\t\t\t\torderby: 'menu_order',\n\t\t\t\torder: 'asc',\n\t\t\t\t_fields: 'id,title,parent',\n\t\t\t\t...( fieldValue !== null && {\n\t\t\t\t\tsearch: fieldValue,\n\t\t\t\t} ),\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\tisHierarchical: postIsHierarchical,\n\t\t\t\tparentPostTitle: parentPost\n\t\t\t\t\t? getTitleWithFallbackName( parentPost )\n\t\t\t\t\t: '',\n\t\t\t\tpageItems: postIsHierarchical\n\t\t\t\t\t? getEntityRecords< BasePost >(\n\t\t\t\t\t\t\t'postType',\n\t\t\t\t\t\t\tpostTypeSlug,\n\t\t\t\t\t\t\tquery\n\t\t\t\t\t )\n\t\t\t\t\t: null,\n\t\t\t};\n\t\t},\n\t\t[ fieldValue, pageId, postId, postTypeSlug ]\n\t);\n\n\t/**\n\t * This logic has been copied from https://github.com/WordPress/gutenberg/blob/0249771b519d5646171fb9fae422006c8ab773f2/packages/editor/src/components/page-attributes/parent.js#L106.\n\t */\n\tconst parentOptions = useMemo( () => {\n\t\tconst getOptionsFromTree = (\n\t\t\ttree: Array< Tree >,\n\t\t\tlevel = 0\n\t\t): Array< {\n\t\t\tvalue: number;\n\t\t\tlabel: string;\n\t\t\trawName: string;\n\t\t} > => {\n\t\t\tconst mappedNodes = tree.map( ( treeNode ) => [\n\t\t\t\t{\n\t\t\t\t\tvalue: treeNode.id,\n\t\t\t\t\tlabel:\n\t\t\t\t\t\t'— '.repeat( level ) + decodeEntities( treeNode.name ),\n\t\t\t\t\trawName: treeNode.name,\n\t\t\t\t},\n\t\t\t\t...getOptionsFromTree( treeNode.children || [], level + 1 ),\n\t\t\t] );\n\n\t\t\tconst sortedNodes = mappedNodes.sort( ( [ a ], [ b ] ) => {\n\t\t\t\tconst priorityA = getItemPriority(\n\t\t\t\t\ta.rawName,\n\t\t\t\t\tfieldValue ?? ''\n\t\t\t\t);\n\t\t\t\tconst priorityB = getItemPriority(\n\t\t\t\t\tb.rawName,\n\t\t\t\t\tfieldValue ?? ''\n\t\t\t\t);\n\t\t\t\treturn priorityA >= priorityB ? 1 : -1;\n\t\t\t} );\n\n\t\t\treturn sortedNodes.flat();\n\t\t};\n\n\t\tif ( ! pageItems ) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet tree = pageItems.map( ( item ) => ( {\n\t\t\tid: item.id as number,\n\t\t\tparent: item.parent ?? null,\n\t\t\tname: getTitleWithFallbackName( item ),\n\t\t} ) );\n\n\t\t// Only build a hierarchical tree when not searching.\n\t\tif ( ! fieldValue ) {\n\t\t\ttree = buildTermsTree( tree );\n\t\t}\n\n\t\tconst opts = getOptionsFromTree( tree );\n\n\t\t// Ensure the current parent is in the options list.\n\t\tconst optsHasParent = opts.find( ( item ) => item.value === pageId );\n\t\tif ( pageId && parentPostTitle && ! optsHasParent ) {\n\t\t\topts.unshift( {\n\t\t\t\tvalue: pageId,\n\t\t\t\tlabel: parentPostTitle,\n\t\t\t\trawName: '',\n\t\t\t} );\n\t\t}\n\t\treturn opts.map( ( option ) => ( {\n\t\t\t...option,\n\t\t\tvalue: option.value.toString(),\n\t\t} ) );\n\t}, [ pageItems, fieldValue, parentPostTitle, pageId ] );\n\n\tif ( ! isHierarchical ) {\n\t\treturn null;\n\t}\n\n\t/**\n\t * Handle user input.\n\t *\n\t * @param {string} inputValue The current value of the input field.\n\t */\n\tconst handleKeydown = ( inputValue: string ) => {\n\t\tsetFieldValue( inputValue );\n\t};\n\n\t/**\n\t * Handle author selection.\n\t *\n\t * @param {Object} selectedPostId The selected Author.\n\t */\n\tconst handleChange = ( selectedPostId: string | null | undefined ) => {\n\t\tif ( selectedPostId ) {\n\t\t\treturn onChangeControl( parseInt( selectedPostId, 10 ) ?? 0 );\n\t\t}\n\n\t\tonChangeControl( 0 );\n\t};\n\n\treturn (\n\t\t<ComboboxControl\n\t\t\t__nextHasNoMarginBottom\n\t\t\t__next40pxDefaultSize\n\t\t\tlabel={ __( 'Parent' ) }\n\t\t\thelp={ __( 'Choose a parent page.' ) }\n\t\t\tvalue={ pageId?.toString() }\n\t\t\toptions={ parentOptions }\n\t\t\tonFilterValueChange={ debounce(\n\t\t\t\t( value: unknown ) => handleKeydown( value as string ),\n\t\t\t\t300\n\t\t\t) }\n\t\t\tonChange={ handleChange }\n\t\t\thideLabelFromVision\n\t\t/>\n\t);\n}\n\nexport const ParentEdit = ( {\n\tdata,\n\tfield,\n\tonChange,\n}: DataFormControlProps< BasePost > ) => {\n\tconst { id } = field;\n\n\tconst homeUrl = useSelect( ( select ) => {\n\t\t// @ts-expect-error getEntityRecord is not typed with unstableBase as argument.\n\t\treturn select( coreStore ).getEntityRecord< {\n\t\t\thome: string;\n\t\t} >( 'root', '__unstableBase' )?.home as string;\n\t}, [] );\n\n\tconst onChangeControl = useCallback(\n\t\t( newValue?: number ) =>\n\t\t\tonChange( {\n\t\t\t\t[ id ]: newValue,\n\t\t\t} ),\n\t\t[ id, onChange ]\n\t);\n\n\treturn (\n\t\t<fieldset className=\"fields-controls__parent\">\n\t\t\t<div>\n\t\t\t\t{ createInterpolateElement(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t/* translators: %1$s The home URL of the WordPress installation without the scheme. */\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'Child pages inherit characteristics from their parent, such as URL structure. For instance, if \"Pricing\" is a child of \"Services\", its URL would be %1$s<wbr />/services<wbr />/pricing.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tfilterURLForDisplay( homeUrl ).replace(\n\t\t\t\t\t\t\t/([/.])/g,\n\t\t\t\t\t\t\t'<wbr />$1'\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\twbr: <wbr />,\n\t\t\t\t\t}\n\t\t\t\t) }\n\t\t\t\t<p>\n\t\t\t\t\t{ createInterpolateElement(\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'They also show up as sub-items in the default navigation menu. <a>Learn more.</a>'\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ta: (\n\t\t\t\t\t\t\t\t<ExternalLink\n\t\t\t\t\t\t\t\t\thref={ __(\n\t\t\t\t\t\t\t\t\t\t'https://wordpress.org/documentation/article/page-post-settings-sidebar/#page-attributes'\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\tchildren={ undefined }\n\t\t\t\t\t\t\t\t/>\n\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</p>\n\t\t\t\t<PageAttributesParent\n\t\t\t\t\tdata={ data }\n\t\t\t\t\tonChangeControl={ onChangeControl }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</fieldset>\n\t);\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useSelect } from '@wordpress/data';
5
+ import { store as coreStore } from '@wordpress/core-data';
6
+ import { __ } from '@wordpress/i18n';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+
12
+ import { getTitleWithFallbackName } from './utils';
13
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
14
+ export const ParentView = ({
15
+ item
16
+ }) => {
17
+ const parent = useSelect(select => {
18
+ const {
19
+ getEntityRecord
20
+ } = select(coreStore);
21
+ return item?.parent ? getEntityRecord('postType', item.type, item.parent) : null;
22
+ }, [item.parent, item.type]);
23
+ if (parent) {
24
+ return /*#__PURE__*/_jsx(_Fragment, {
25
+ children: getTitleWithFallbackName(parent)
26
+ });
27
+ }
28
+ return /*#__PURE__*/_jsx(_Fragment, {
29
+ children: __('None')
30
+ });
31
+ };
32
+ //# sourceMappingURL=parent-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useSelect","store","coreStore","__","getTitleWithFallbackName","Fragment","_Fragment","jsx","_jsx","ParentView","item","parent","select","getEntityRecord","type","children"],"sources":["@wordpress/fields/src/fields/parent/parent-view.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport type { DataViewRenderFieldProps } from '@wordpress/dataviews';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport type { BasePost } from '../../types';\nimport { getTitleWithFallbackName } from './utils';\n\nexport const ParentView = ( {\n\titem,\n}: DataViewRenderFieldProps< BasePost > ) => {\n\tconst parent = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecord } = select( coreStore );\n\t\t\treturn item?.parent\n\t\t\t\t? getEntityRecord( 'postType', item.type, item.parent )\n\t\t\t\t: null;\n\t\t},\n\t\t[ item.parent, item.type ]\n\t);\n\n\tif ( parent ) {\n\t\treturn <>{ getTitleWithFallbackName( parent ) }</>;\n\t}\n\n\treturn <>{ __( 'None' ) }</>;\n};\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,KAAK,IAAIC,SAAS,QAAQ,sBAAsB;AAEzD,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;;AAEA,SAASC,wBAAwB,QAAQ,SAAS;AAAC,SAAAC,QAAA,IAAAC,SAAA,EAAAC,GAAA,IAAAC,IAAA;AAEnD,OAAO,MAAMC,UAAU,GAAGA,CAAE;EAC3BC;AACqC,CAAC,KAAM;EAC5C,MAAMC,MAAM,GAAGX,SAAS,CACrBY,MAAM,IAAM;IACb,MAAM;MAAEC;IAAgB,CAAC,GAAGD,MAAM,CAAEV,SAAU,CAAC;IAC/C,OAAOQ,IAAI,EAAEC,MAAM,GAChBE,eAAe,CAAE,UAAU,EAAEH,IAAI,CAACI,IAAI,EAAEJ,IAAI,CAACC,MAAO,CAAC,GACrD,IAAI;EACR,CAAC,EACD,CAAED,IAAI,CAACC,MAAM,EAAED,IAAI,CAACI,IAAI,CACzB,CAAC;EAED,IAAKH,MAAM,EAAG;IACb,oBAAOH,IAAA,CAAAF,SAAA;MAAAS,QAAA,EAAIX,wBAAwB,CAAEO,MAAO;IAAC,CAAI,CAAC;EACnD;EAEA,oBAAOH,IAAA,CAAAF,SAAA;IAAAS,QAAA,EAAIZ,EAAE,CAAE,MAAO;EAAC,CAAI,CAAC;AAC7B,CAAC","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { decodeEntities } from '@wordpress/html-entities';
5
+ import { __ } from '@wordpress/i18n';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+
11
+ export function getTitleWithFallbackName(post) {
12
+ return typeof post.title === 'object' && 'rendered' in post.title && post.title.rendered ? decodeEntities(post.title.rendered) : `#${post?.id} (${__('no title')})`;
13
+ }
14
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["decodeEntities","__","getTitleWithFallbackName","post","title","rendered","id"],"sources":["@wordpress/fields/src/fields/parent/utils.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport type { BasePost } from '../../types';\n\nexport function getTitleWithFallbackName( post: BasePost ) {\n\treturn typeof post.title === 'object' &&\n\t\t'rendered' in post.title &&\n\t\tpost.title.rendered\n\t\t? decodeEntities( post.title.rendered )\n\t\t: `#${ post?.id } (${ __( 'no title' ) })`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,cAAc,QAAQ,0BAA0B;AACzD,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;;AAGA,OAAO,SAASC,wBAAwBA,CAAEC,IAAc,EAAG;EAC1D,OAAO,OAAOA,IAAI,CAACC,KAAK,KAAK,QAAQ,IACpC,UAAU,IAAID,IAAI,CAACC,KAAK,IACxBD,IAAI,CAACC,KAAK,CAACC,QAAQ,GACjBL,cAAc,CAAEG,IAAI,CAACC,KAAK,CAACC,QAAS,CAAC,GACrC,IAAKF,IAAI,EAAEG,EAAE,KAAOL,EAAE,CAAE,UAAW,CAAC,GAAI;AAC5C","ignoreList":[]}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { CheckboxControl, __experimentalVStack as VStack, TextControl } from '@wordpress/components';
5
+ import { useState } from '@wordpress/element';
6
+ import { __ } from '@wordpress/i18n';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
+ function PasswordEdit({
13
+ data,
14
+ onChange,
15
+ field
16
+ }) {
17
+ const [showPassword, setShowPassword] = useState(!!field.getValue({
18
+ item: data
19
+ }));
20
+ const handleTogglePassword = value => {
21
+ setShowPassword(value);
22
+ if (!value) {
23
+ onChange({
24
+ password: ''
25
+ });
26
+ }
27
+ };
28
+ return /*#__PURE__*/_jsxs(VStack, {
29
+ as: "fieldset",
30
+ spacing: 4,
31
+ className: "fields-controls__password",
32
+ children: [/*#__PURE__*/_jsx(CheckboxControl, {
33
+ __nextHasNoMarginBottom: true,
34
+ label: __('Password protected'),
35
+ help: __('Only visible to those who know the password'),
36
+ checked: showPassword,
37
+ onChange: handleTogglePassword
38
+ }), showPassword && /*#__PURE__*/_jsx("div", {
39
+ className: "fields-controls__password-input",
40
+ children: /*#__PURE__*/_jsx(TextControl, {
41
+ label: __('Password'),
42
+ onChange: value => onChange({
43
+ password: value
44
+ }),
45
+ value: field.getValue({
46
+ item: data
47
+ }) || '',
48
+ placeholder: __('Use a secure password'),
49
+ type: "text",
50
+ __next40pxDefaultSize: true,
51
+ __nextHasNoMarginBottom: true,
52
+ maxLength: 255
53
+ })
54
+ })]
55
+ });
56
+ }
57
+ export default PasswordEdit;
58
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CheckboxControl","__experimentalVStack","VStack","TextControl","useState","__","jsx","_jsx","jsxs","_jsxs","PasswordEdit","data","onChange","field","showPassword","setShowPassword","getValue","item","handleTogglePassword","value","password","as","spacing","className","children","__nextHasNoMarginBottom","label","help","checked","placeholder","type","__next40pxDefaultSize","maxLength"],"sources":["@wordpress/fields/src/fields/password/edit.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tCheckboxControl,\n\t__experimentalVStack as VStack,\n\tTextControl,\n} from '@wordpress/components';\nimport type { DataFormControlProps } from '@wordpress/dataviews';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport type { BasePost } from '../../types';\n\nfunction PasswordEdit( {\n\tdata,\n\tonChange,\n\tfield,\n}: DataFormControlProps< BasePost > ) {\n\tconst [ showPassword, setShowPassword ] = useState(\n\t\t!! field.getValue( { item: data } )\n\t);\n\n\tconst handleTogglePassword = ( value: boolean ) => {\n\t\tsetShowPassword( value );\n\t\tif ( ! value ) {\n\t\t\tonChange( { password: '' } );\n\t\t}\n\t};\n\n\treturn (\n\t\t<VStack\n\t\t\tas=\"fieldset\"\n\t\t\tspacing={ 4 }\n\t\t\tclassName=\"fields-controls__password\"\n\t\t>\n\t\t\t<CheckboxControl\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\tlabel={ __( 'Password protected' ) }\n\t\t\t\thelp={ __( 'Only visible to those who know the password' ) }\n\t\t\t\tchecked={ showPassword }\n\t\t\t\tonChange={ handleTogglePassword }\n\t\t\t/>\n\t\t\t{ showPassword && (\n\t\t\t\t<div className=\"fields-controls__password-input\">\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\tlabel={ __( 'Password' ) }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\tpassword: value,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue={ field.getValue( { item: data } ) || '' }\n\t\t\t\t\t\tplaceholder={ __( 'Use a secure password' ) }\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tmaxLength={ 255 }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t</VStack>\n\t);\n}\nexport default PasswordEdit;\n"],"mappings":"AAAA;AACA;AACA;AACA,SACCA,eAAe,EACfC,oBAAoB,IAAIC,MAAM,EAC9BC,WAAW,QACL,uBAAuB;AAE9B,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;AAFA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAKA,SAASC,YAAYA,CAAE;EACtBC,IAAI;EACJC,QAAQ;EACRC;AACiC,CAAC,EAAG;EACrC,MAAM,CAAEC,YAAY,EAAEC,eAAe,CAAE,GAAGX,QAAQ,CACjD,CAAC,CAAES,KAAK,CAACG,QAAQ,CAAE;IAAEC,IAAI,EAAEN;EAAK,CAAE,CACnC,CAAC;EAED,MAAMO,oBAAoB,GAAKC,KAAc,IAAM;IAClDJ,eAAe,CAAEI,KAAM,CAAC;IACxB,IAAK,CAAEA,KAAK,EAAG;MACdP,QAAQ,CAAE;QAAEQ,QAAQ,EAAE;MAAG,CAAE,CAAC;IAC7B;EACD,CAAC;EAED,oBACCX,KAAA,CAACP,MAAM;IACNmB,EAAE,EAAC,UAAU;IACbC,OAAO,EAAG,CAAG;IACbC,SAAS,EAAC,2BAA2B;IAAAC,QAAA,gBAErCjB,IAAA,CAACP,eAAe;MACfyB,uBAAuB;MACvBC,KAAK,EAAGrB,EAAE,CAAE,oBAAqB,CAAG;MACpCsB,IAAI,EAAGtB,EAAE,CAAE,6CAA8C,CAAG;MAC5DuB,OAAO,EAAGd,YAAc;MACxBF,QAAQ,EAAGM;IAAsB,CACjC,CAAC,EACAJ,YAAY,iBACbP,IAAA;MAAKgB,SAAS,EAAC,iCAAiC;MAAAC,QAAA,eAC/CjB,IAAA,CAACJ,WAAW;QACXuB,KAAK,EAAGrB,EAAE,CAAE,UAAW,CAAG;QAC1BO,QAAQ,EAAKO,KAAK,IACjBP,QAAQ,CAAE;UACTQ,QAAQ,EAAED;QACX,CAAE,CACF;QACDA,KAAK,EAAGN,KAAK,CAACG,QAAQ,CAAE;UAAEC,IAAI,EAAEN;QAAK,CAAE,CAAC,IAAI,EAAI;QAChDkB,WAAW,EAAGxB,EAAE,CAAE,uBAAwB,CAAG;QAC7CyB,IAAI,EAAC,MAAM;QACXC,qBAAqB;QACrBN,uBAAuB;QACvBO,SAAS,EAAG;MAAK,CACjB;IAAC,CACE,CACL;EAAA,CACM,CAAC;AAEX;AACA,eAAetB,YAAY","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+
5
+ /**
6
+ * Internal dependencies
7
+ */
8
+
9
+ import PasswordEdit from './edit';
10
+ const passwordField = {
11
+ id: 'password',
12
+ type: 'text',
13
+ Edit: PasswordEdit,
14
+ enableSorting: false,
15
+ enableHiding: false,
16
+ isVisible: item => item.status !== 'private'
17
+ };
18
+
19
+ /**
20
+ * This field is used to display the post password.
21
+ */
22
+ export default passwordField;
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PasswordEdit","passwordField","id","type","Edit","enableSorting","enableHiding","isVisible","item","status"],"sources":["@wordpress/fields/src/fields/password/index.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport type { Field } from '@wordpress/dataviews';\n\n/**\n * Internal dependencies\n */\nimport type { BasePost } from '../../types';\nimport PasswordEdit from './edit';\n\nconst passwordField: Field< BasePost > = {\n\tid: 'password',\n\ttype: 'text',\n\tEdit: PasswordEdit,\n\tenableSorting: false,\n\tenableHiding: false,\n\tisVisible: ( item ) => item.status !== 'private',\n};\n\n/**\n * This field is used to display the post password.\n */\nexport default passwordField;\n"],"mappings":"AAAA;AACA;AACA;;AAGA;AACA;AACA;;AAEA,OAAOA,YAAY,MAAM,QAAQ;AAEjC,MAAMC,aAAgC,GAAG;EACxCC,EAAE,EAAE,UAAU;EACdC,IAAI,EAAE,MAAM;EACZC,IAAI,EAAEJ,YAAY;EAClBK,aAAa,EAAE,KAAK;EACpBC,YAAY,EAAE,KAAK;EACnBC,SAAS,EAAIC,IAAI,IAAMA,IAAI,CAACC,MAAM,KAAK;AACxC,CAAC;;AAED;AACA;AACA;AACA,eAAeR,aAAa","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+
5
+ import { __ } from '@wordpress/i18n';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+
11
+ import SlugEdit from './slug-edit';
12
+ import SlugView from './slug-view';
13
+ const slugField = {
14
+ id: 'slug',
15
+ type: 'text',
16
+ label: __('Slug'),
17
+ Edit: SlugEdit,
18
+ render: SlugView
19
+ };
20
+ export default slugField;
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__","SlugEdit","SlugView","slugField","id","type","label","Edit","render"],"sources":["@wordpress/fields/src/fields/slug/index.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport type { Field } from '@wordpress/dataviews';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport type { BasePost } from '../../types';\nimport SlugEdit from './slug-edit';\nimport SlugView from './slug-view';\n\nconst slugField: Field< BasePost > = {\n\tid: 'slug',\n\ttype: 'text',\n\tlabel: __( 'Slug' ),\n\tEdit: SlugEdit,\n\trender: SlugView,\n};\n\nexport default slugField;\n"],"mappings":"AAAA;AACA;AACA;;AAEA,SAASA,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;;AAEA,OAAOC,QAAQ,MAAM,aAAa;AAClC,OAAOC,QAAQ,MAAM,aAAa;AAElC,MAAMC,SAA4B,GAAG;EACpCC,EAAE,EAAE,MAAM;EACVC,IAAI,EAAE,MAAM;EACZC,KAAK,EAAEN,EAAE,CAAE,MAAO,CAAC;EACnBO,IAAI,EAAEN,QAAQ;EACdO,MAAM,EAAEN;AACT,CAAC;AAED,eAAeC,SAAS","ignoreList":[]}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { Button, ExternalLink, __experimentalInputControl as InputControl, __experimentalInputControlPrefixWrapper as InputControlPrefixWrapper, __experimentalVStack as VStack } from '@wordpress/components';
5
+ import { copySmall } from '@wordpress/icons';
6
+ import { useCopyToClipboard, useInstanceId } from '@wordpress/compose';
7
+ import { useDispatch } from '@wordpress/data';
8
+ import { useCallback, useEffect, useRef } from '@wordpress/element';
9
+ import { store as noticesStore } from '@wordpress/notices';
10
+ import { safeDecodeURIComponent } from '@wordpress/url';
11
+ import { __ } from '@wordpress/i18n';
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+
17
+ import { getSlug } from './utils';
18
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
+ const SlugEdit = ({
20
+ field,
21
+ onChange,
22
+ data
23
+ }) => {
24
+ const {
25
+ id
26
+ } = field;
27
+ const slug = field.getValue({
28
+ item: data
29
+ }) || getSlug(data);
30
+ const permalinkTemplate = data.permalink_template || '';
31
+ const PERMALINK_POSTNAME_REGEX = /%(?:postname|pagename)%/;
32
+ const [prefix, suffix] = permalinkTemplate.split(PERMALINK_POSTNAME_REGEX);
33
+ const permalinkPrefix = prefix;
34
+ const permalinkSuffix = suffix;
35
+ const isEditable = PERMALINK_POSTNAME_REGEX.test(permalinkTemplate);
36
+ const originalSlugRef = useRef(slug);
37
+ const slugToDisplay = slug || originalSlugRef.current;
38
+ const permalink = isEditable ? `${permalinkPrefix}${slugToDisplay}${permalinkSuffix}` : safeDecodeURIComponent(data.link || '');
39
+ useEffect(() => {
40
+ if (slug && originalSlugRef.current === undefined) {
41
+ originalSlugRef.current = slug;
42
+ }
43
+ }, [slug]);
44
+ const onChangeControl = useCallback(newValue => onChange({
45
+ [id]: newValue
46
+ }), [id, onChange]);
47
+ const {
48
+ createNotice
49
+ } = useDispatch(noticesStore);
50
+ const copyButtonRef = useCopyToClipboard(permalink, () => {
51
+ createNotice('info', __('Copied Permalink to clipboard.'), {
52
+ isDismissible: true,
53
+ type: 'snackbar'
54
+ });
55
+ });
56
+ const postUrlSlugDescriptionId = 'editor-post-url__slug-description-' + useInstanceId(SlugEdit);
57
+ return /*#__PURE__*/_jsxs("fieldset", {
58
+ className: "fields-controls__slug",
59
+ children: [isEditable && /*#__PURE__*/_jsxs(VStack, {
60
+ children: [/*#__PURE__*/_jsxs(VStack, {
61
+ spacing: "0px",
62
+ children: [/*#__PURE__*/_jsx("span", {
63
+ children: __('Customize the last part of the Permalink.')
64
+ }), /*#__PURE__*/_jsx(ExternalLink, {
65
+ href: "https://wordpress.org/documentation/article/page-post-settings-sidebar/#permalink",
66
+ children: __('Learn more')
67
+ })]
68
+ }), /*#__PURE__*/_jsx(InputControl, {
69
+ __next40pxDefaultSize: true,
70
+ prefix: /*#__PURE__*/_jsx(InputControlPrefixWrapper, {
71
+ children: "/"
72
+ }),
73
+ suffix: /*#__PURE__*/_jsx(Button, {
74
+ __next40pxDefaultSize: true,
75
+ icon: copySmall,
76
+ ref: copyButtonRef,
77
+ label: __('Copy')
78
+ }),
79
+ label: __('Link'),
80
+ hideLabelFromVision: true,
81
+ value: slug,
82
+ autoComplete: "off",
83
+ spellCheck: "false",
84
+ type: "text",
85
+ className: "fields-controls__slug-input",
86
+ onChange: newValue => {
87
+ onChangeControl(newValue);
88
+ },
89
+ onBlur: () => {
90
+ if (slug === '') {
91
+ onChangeControl(originalSlugRef.current);
92
+ }
93
+ },
94
+ "aria-describedby": postUrlSlugDescriptionId
95
+ }), /*#__PURE__*/_jsxs("div", {
96
+ className: "fields-controls__slug-help",
97
+ children: [/*#__PURE__*/_jsx("span", {
98
+ className: "fields-controls__slug-help-visual-label",
99
+ children: __('Permalink:')
100
+ }), /*#__PURE__*/_jsxs(ExternalLink, {
101
+ className: "fields-controls__slug-help-link",
102
+ href: permalink,
103
+ children: [/*#__PURE__*/_jsx("span", {
104
+ className: "fields-controls__slug-help-prefix",
105
+ children: permalinkPrefix
106
+ }), /*#__PURE__*/_jsx("span", {
107
+ className: "fields-controls__slug-help-slug",
108
+ children: slugToDisplay
109
+ }), /*#__PURE__*/_jsx("span", {
110
+ className: "fields-controls__slug-help-suffix",
111
+ children: permalinkSuffix
112
+ })]
113
+ })]
114
+ })]
115
+ }), !isEditable && /*#__PURE__*/_jsx(ExternalLink, {
116
+ className: "fields-controls__slug-help",
117
+ href: permalink,
118
+ children: permalink
119
+ })]
120
+ });
121
+ };
122
+ export default SlugEdit;
123
+ //# sourceMappingURL=slug-edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Button","ExternalLink","__experimentalInputControl","InputControl","__experimentalInputControlPrefixWrapper","InputControlPrefixWrapper","__experimentalVStack","VStack","copySmall","useCopyToClipboard","useInstanceId","useDispatch","useCallback","useEffect","useRef","store","noticesStore","safeDecodeURIComponent","__","getSlug","jsx","_jsx","jsxs","_jsxs","SlugEdit","field","onChange","data","id","slug","getValue","item","permalinkTemplate","permalink_template","PERMALINK_POSTNAME_REGEX","prefix","suffix","split","permalinkPrefix","permalinkSuffix","isEditable","test","originalSlugRef","slugToDisplay","current","permalink","link","undefined","onChangeControl","newValue","createNotice","copyButtonRef","isDismissible","type","postUrlSlugDescriptionId","className","children","spacing","href","__next40pxDefaultSize","icon","ref","label","hideLabelFromVision","value","autoComplete","spellCheck","onBlur"],"sources":["@wordpress/fields/src/fields/slug/slug-edit.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tExternalLink,\n\t__experimentalInputControl as InputControl,\n\t__experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { copySmall } from '@wordpress/icons';\nimport { useCopyToClipboard, useInstanceId } from '@wordpress/compose';\nimport { useDispatch } from '@wordpress/data';\nimport { useCallback, useEffect, useRef } from '@wordpress/element';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { safeDecodeURIComponent } from '@wordpress/url';\nimport type { DataFormControlProps } from '@wordpress/dataviews';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport type { BasePost } from '../../types';\nimport { getSlug } from './utils';\n\nconst SlugEdit = ( {\n\tfield,\n\tonChange,\n\tdata,\n}: DataFormControlProps< BasePost > ) => {\n\tconst { id } = field;\n\n\tconst slug = field.getValue( { item: data } ) || getSlug( data );\n\tconst permalinkTemplate = data.permalink_template || '';\n\tconst PERMALINK_POSTNAME_REGEX = /%(?:postname|pagename)%/;\n\tconst [ prefix, suffix ] = permalinkTemplate.split(\n\t\tPERMALINK_POSTNAME_REGEX\n\t);\n\tconst permalinkPrefix = prefix;\n\tconst permalinkSuffix = suffix;\n\tconst isEditable = PERMALINK_POSTNAME_REGEX.test( permalinkTemplate );\n\tconst originalSlugRef = useRef( slug );\n\tconst slugToDisplay = slug || originalSlugRef.current;\n\tconst permalink = isEditable\n\t\t? `${ permalinkPrefix }${ slugToDisplay }${ permalinkSuffix }`\n\t\t: safeDecodeURIComponent( data.link || '' );\n\n\tuseEffect( () => {\n\t\tif ( slug && originalSlugRef.current === undefined ) {\n\t\t\toriginalSlugRef.current = slug;\n\t\t}\n\t}, [ slug ] );\n\n\tconst onChangeControl = useCallback(\n\t\t( newValue?: string ) =>\n\t\t\tonChange( {\n\t\t\t\t[ id ]: newValue,\n\t\t\t} ),\n\t\t[ id, onChange ]\n\t);\n\n\tconst { createNotice } = useDispatch( noticesStore );\n\n\tconst copyButtonRef = useCopyToClipboard( permalink, () => {\n\t\tcreateNotice( 'info', __( 'Copied Permalink to clipboard.' ), {\n\t\t\tisDismissible: true,\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t} );\n\n\tconst postUrlSlugDescriptionId =\n\t\t'editor-post-url__slug-description-' + useInstanceId( SlugEdit );\n\n\treturn (\n\t\t<fieldset className=\"fields-controls__slug\">\n\t\t\t{ isEditable && (\n\t\t\t\t<VStack>\n\t\t\t\t\t<VStack spacing=\"0px\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Customize the last part of the Permalink.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<ExternalLink href=\"https://wordpress.org/documentation/article/page-post-settings-sidebar/#permalink\">\n\t\t\t\t\t\t\t{ __( 'Learn more' ) }\n\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t</VStack>\n\t\t\t\t\t<InputControl\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tprefix={\n\t\t\t\t\t\t\t<InputControlPrefixWrapper>\n\t\t\t\t\t\t\t\t/\n\t\t\t\t\t\t\t</InputControlPrefixWrapper>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsuffix={\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\ticon={ copySmall }\n\t\t\t\t\t\t\t\tref={ copyButtonRef }\n\t\t\t\t\t\t\t\tlabel={ __( 'Copy' ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlabel={ __( 'Link' ) }\n\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\tvalue={ slug }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\tspellCheck=\"false\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclassName=\"fields-controls__slug-input\"\n\t\t\t\t\t\tonChange={ ( newValue?: string ) => {\n\t\t\t\t\t\t\tonChangeControl( newValue );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonBlur={ () => {\n\t\t\t\t\t\t\tif ( slug === '' ) {\n\t\t\t\t\t\t\t\tonChangeControl( originalSlugRef.current );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\taria-describedby={ postUrlSlugDescriptionId }\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"fields-controls__slug-help\">\n\t\t\t\t\t\t<span className=\"fields-controls__slug-help-visual-label\">\n\t\t\t\t\t\t\t{ __( 'Permalink:' ) }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<ExternalLink\n\t\t\t\t\t\t\tclassName=\"fields-controls__slug-help-link\"\n\t\t\t\t\t\t\thref={ permalink }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"fields-controls__slug-help-prefix\">\n\t\t\t\t\t\t\t\t{ permalinkPrefix }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span className=\"fields-controls__slug-help-slug\">\n\t\t\t\t\t\t\t\t{ slugToDisplay }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span className=\"fields-controls__slug-help-suffix\">\n\t\t\t\t\t\t\t\t{ permalinkSuffix }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t</div>\n\t\t\t\t</VStack>\n\t\t\t) }\n\t\t\t{ ! isEditable && (\n\t\t\t\t<ExternalLink\n\t\t\t\t\tclassName=\"fields-controls__slug-help\"\n\t\t\t\t\thref={ permalink }\n\t\t\t\t>\n\t\t\t\t\t{ permalink }\n\t\t\t\t</ExternalLink>\n\t\t\t) }\n\t\t</fieldset>\n\t);\n};\n\nexport default SlugEdit;\n"],"mappings":"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","ignoreList":[]}