@wordpress/editor 14.13.0 → 14.13.1-next.cd6172eb0.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.
- package/README.md +8 -28
- package/build/bindings/post-meta.js +2 -3
- package/build/bindings/post-meta.js.map +1 -1
- package/build/components/autocompleters/user.js +1 -3
- package/build/components/autocompleters/user.js.map +1 -1
- package/build/components/collab-sidebar/constants.js +2 -1
- package/build/components/collab-sidebar/constants.js.map +1 -1
- package/build/components/collab-sidebar/index.js +108 -43
- package/build/components/collab-sidebar/index.js.map +1 -1
- package/build/components/collab-sidebar/utils.js +32 -0
- package/build/components/collab-sidebar/utils.js.map +1 -1
- package/build/components/entities-saved-states/index.js +6 -6
- package/build/components/entities-saved-states/index.js.map +1 -1
- package/build/components/header/index.js +5 -2
- package/build/components/header/index.js.map +1 -1
- package/build/components/index.js +10 -26
- package/build/components/index.js.map +1 -1
- package/build/components/post-actions/actions.js +29 -2
- package/build/components/post-actions/actions.js.map +1 -1
- package/build/components/post-actions/index.js +1 -1
- package/build/components/post-actions/index.js.map +1 -1
- package/build/components/post-actions/set-as-homepage.js +170 -0
- package/build/components/post-actions/set-as-homepage.js.map +1 -0
- package/build/components/post-author/constants.js +1 -1
- package/build/components/post-author/constants.js.map +1 -1
- package/build/components/post-author/hook.js +1 -0
- package/build/components/post-author/hook.js.map +1 -1
- package/build/components/post-fields/index.js +3 -3
- package/build/components/post-fields/index.js.map +1 -1
- package/build/components/post-publish-button/index.js +4 -2
- package/build/components/post-publish-button/index.js.map +1 -1
- package/build/components/post-publish-button/post-publish-button-or-toggle.js +32 -37
- package/build/components/post-publish-button/post-publish-button-or-toggle.js.map +1 -1
- package/build/components/post-publish-panel/maybe-upload-media.js +0 -1
- package/build/components/post-publish-panel/maybe-upload-media.js.map +1 -1
- package/build/components/post-publish-panel/media-util.js +0 -1
- package/build/components/post-publish-panel/media-util.js.map +1 -1
- package/build/components/post-publish-panel/postpublish.js +103 -117
- package/build/components/post-publish-panel/postpublish.js.map +1 -1
- package/build/components/post-trash/check.js +4 -4
- package/build/components/post-trash/check.js.map +1 -1
- package/build/components/post-url/index.js +2 -1
- package/build/components/post-url/index.js.map +1 -1
- package/build/components/provider/index.js +9 -1
- package/build/components/provider/index.js.map +1 -1
- package/build/components/save-publish-panels/index.js +3 -1
- package/build/components/save-publish-panels/index.js.map +1 -1
- package/build/components/template-part-menu-items/convert-to-template-part.js +2 -3
- package/build/components/template-part-menu-items/convert-to-template-part.js.map +1 -1
- package/build/components/visual-editor/index.js +2 -1
- package/build/components/visual-editor/index.js.map +1 -1
- package/build/dataviews/store/private-actions.js +3 -8
- package/build/dataviews/store/private-actions.js.map +1 -1
- package/build/private-apis.js +2 -2
- package/build/private-apis.js.map +1 -1
- package/build/store/constants.js +0 -1
- package/build/store/constants.js.map +1 -1
- package/build/store/private-actions.js +0 -1
- package/build/store/private-actions.js.map +1 -1
- package/build/store/selectors.js +1 -1
- package/build/store/selectors.js.map +1 -1
- package/build-module/bindings/post-meta.js +2 -3
- package/build-module/bindings/post-meta.js.map +1 -1
- package/build-module/components/autocompleters/user.js +1 -3
- package/build-module/components/autocompleters/user.js.map +1 -1
- package/build-module/components/collab-sidebar/constants.js +1 -0
- package/build-module/components/collab-sidebar/constants.js.map +1 -1
- package/build-module/components/collab-sidebar/index.js +111 -46
- package/build-module/components/collab-sidebar/index.js.map +1 -1
- package/build-module/components/collab-sidebar/utils.js +31 -0
- package/build-module/components/collab-sidebar/utils.js.map +1 -1
- package/build-module/components/entities-saved-states/index.js +6 -6
- package/build-module/components/entities-saved-states/index.js.map +1 -1
- package/build-module/components/header/index.js +5 -2
- package/build-module/components/header/index.js.map +1 -1
- package/build-module/components/index.js +0 -2
- package/build-module/components/index.js.map +1 -1
- package/build-module/components/post-actions/actions.js +29 -2
- package/build-module/components/post-actions/actions.js.map +1 -1
- package/build-module/components/post-actions/index.js +1 -1
- package/build-module/components/post-actions/index.js.map +1 -1
- package/build-module/components/post-actions/set-as-homepage.js +162 -0
- package/build-module/components/post-actions/set-as-homepage.js.map +1 -0
- package/build-module/components/post-author/constants.js +1 -1
- package/build-module/components/post-author/constants.js.map +1 -1
- package/build-module/components/post-author/hook.js +1 -0
- package/build-module/components/post-author/hook.js.map +1 -1
- package/build-module/components/post-fields/index.js +3 -3
- package/build-module/components/post-fields/index.js.map +1 -1
- package/build-module/components/post-publish-button/index.js +4 -2
- package/build-module/components/post-publish-button/index.js.map +1 -1
- package/build-module/components/post-publish-button/post-publish-button-or-toggle.js +34 -38
- package/build-module/components/post-publish-button/post-publish-button-or-toggle.js.map +1 -1
- package/build-module/components/post-publish-panel/maybe-upload-media.js +0 -1
- package/build-module/components/post-publish-panel/maybe-upload-media.js.map +1 -1
- package/build-module/components/post-publish-panel/media-util.js +0 -1
- package/build-module/components/post-publish-panel/media-util.js.map +1 -1
- package/build-module/components/post-publish-panel/postpublish.js +104 -118
- package/build-module/components/post-publish-panel/postpublish.js.map +1 -1
- package/build-module/components/post-trash/check.js +4 -4
- package/build-module/components/post-trash/check.js.map +1 -1
- package/build-module/components/post-url/index.js +2 -1
- package/build-module/components/post-url/index.js.map +1 -1
- package/build-module/components/provider/index.js +10 -2
- package/build-module/components/provider/index.js.map +1 -1
- package/build-module/components/save-publish-panels/index.js +3 -1
- package/build-module/components/save-publish-panels/index.js.map +1 -1
- package/build-module/components/template-part-menu-items/convert-to-template-part.js +1 -1
- package/build-module/components/template-part-menu-items/convert-to-template-part.js.map +1 -1
- package/build-module/components/visual-editor/index.js +2 -1
- package/build-module/components/visual-editor/index.js.map +1 -1
- package/build-module/dataviews/store/private-actions.js +4 -9
- package/build-module/dataviews/store/private-actions.js.map +1 -1
- package/build-module/private-apis.js +1 -1
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/constants.js +0 -1
- package/build-module/store/constants.js.map +1 -1
- package/build-module/store/private-actions.js +0 -1
- package/build-module/store/private-actions.js.map +1 -1
- package/build-module/store/selectors.js +1 -1
- package/build-module/store/selectors.js.map +1 -1
- package/build-style/style-rtl.css +31 -62
- package/build-style/style.css +31 -62
- package/build-types/bindings/post-meta.d.ts.map +1 -1
- package/build-types/components/autocompleters/user.d.ts +1 -3
- package/build-types/components/autocompleters/user.d.ts.map +1 -1
- package/build-types/components/collab-sidebar/constants.d.ts +1 -0
- package/build-types/components/collab-sidebar/constants.d.ts.map +1 -1
- package/build-types/components/collab-sidebar/index.d.ts.map +1 -1
- package/build-types/components/collab-sidebar/utils.d.ts +10 -0
- package/build-types/components/collab-sidebar/utils.d.ts.map +1 -1
- package/build-types/components/entities-saved-states/index.d.ts +5 -5
- package/build-types/components/entities-saved-states/index.d.ts.map +1 -1
- package/build-types/components/header/index.d.ts.map +1 -1
- package/build-types/components/index.d.ts +0 -2
- package/build-types/components/index.d.ts.map +1 -1
- package/build-types/components/post-actions/actions.d.ts +1 -1
- package/build-types/components/post-actions/actions.d.ts.map +1 -1
- package/build-types/components/post-actions/set-as-homepage.d.ts +10 -0
- package/build-types/components/post-actions/set-as-homepage.d.ts.map +1 -0
- package/build-types/components/post-author/hook.d.ts.map +1 -1
- package/build-types/components/post-fields/index.d.ts +3 -1
- package/build-types/components/post-fields/index.d.ts.map +1 -1
- package/build-types/components/post-publish-button/index.d.ts.map +1 -1
- package/build-types/components/post-publish-button/post-publish-button-or-toggle.d.ts +1 -13
- package/build-types/components/post-publish-button/post-publish-button-or-toggle.d.ts.map +1 -1
- package/build-types/components/post-publish-panel/postpublish.d.ts +4 -2
- package/build-types/components/post-publish-panel/postpublish.d.ts.map +1 -1
- package/build-types/components/post-trash/check.d.ts +6 -6
- package/build-types/components/post-trash/check.d.ts.map +1 -1
- package/build-types/components/post-url/index.d.ts +5 -2
- package/build-types/components/post-url/index.d.ts.map +1 -1
- package/build-types/components/provider/index.d.ts.map +1 -1
- package/build-types/components/save-publish-panels/index.d.ts.map +1 -1
- package/build-types/components/visual-editor/index.d.ts.map +1 -1
- package/build-types/dataviews/store/private-actions.d.ts.map +1 -1
- package/build-types/lock-unlock.d.ts +2 -2
- package/build-types/store/selectors.d.ts +1 -1
- package/build-types/store/selectors.d.ts.map +1 -1
- package/package.json +36 -36
- package/src/bindings/post-meta.js +2 -5
- package/src/components/autocompleters/user.js +1 -3
- package/src/components/collab-sidebar/constants.js +1 -0
- package/src/components/collab-sidebar/index.js +115 -47
- package/src/components/collab-sidebar/style.scss +13 -0
- package/src/components/collab-sidebar/utils.js +36 -0
- package/src/components/editor-interface/style.scss +2 -1
- package/src/components/entities-saved-states/index.js +6 -9
- package/src/components/header/index.js +17 -5
- package/src/components/header/style.scss +1 -1
- package/src/components/index.js +0 -2
- package/src/components/post-actions/actions.js +38 -2
- package/src/components/post-actions/index.js +1 -1
- package/src/components/post-actions/set-as-homepage.js +183 -0
- package/src/components/post-author/constants.js +1 -1
- package/src/components/post-author/hook.js +1 -0
- package/src/components/post-fields/index.ts +5 -3
- package/src/components/post-publish-button/index.js +2 -0
- package/src/components/post-publish-button/post-publish-button-or-toggle.js +38 -40
- package/src/components/post-publish-button/test/post-publish-button-or-toggle.js +24 -9
- package/src/components/post-publish-panel/postpublish.js +114 -124
- package/src/components/post-trash/check.js +4 -4
- package/src/components/post-url/index.js +2 -1
- package/src/components/provider/index.js +17 -3
- package/src/components/save-publish-panels/index.js +5 -1
- package/src/components/template-part-menu-items/convert-to-template-part.js +1 -1
- package/src/components/visual-editor/index.js +1 -0
- package/src/components/visual-editor/style.scss +29 -6
- package/src/dataviews/store/private-actions.ts +14 -13
- package/src/private-apis.js +1 -1
- package/src/store/selectors.js +1 -1
- package/src/style.scss +0 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/build/components/create-template-part-modal/index.js +0 -170
- package/build/components/create-template-part-modal/index.js.map +0 -1
- package/build/components/create-template-part-modal/utils.js +0 -64
- package/build/components/create-template-part-modal/utils.js.map +0 -1
- package/build/components/post-slug/check.js +0 -29
- package/build/components/post-slug/check.js.map +0 -1
- package/build/components/post-slug/index.js +0 -79
- package/build/components/post-slug/index.js.map +0 -1
- package/build/components/post-slug/panel.js +0 -30
- package/build/components/post-slug/panel.js.map +0 -1
- package/build/dataviews/actions/duplicate-template-part.js +0 -67
- package/build/dataviews/actions/duplicate-template-part.js.map +0 -1
- package/build/dataviews/actions/utils.js +0 -58
- package/build/dataviews/actions/utils.js.map +0 -1
- package/build/dataviews/types.js +0 -6
- package/build/dataviews/types.js.map +0 -1
- package/build-module/components/create-template-part-modal/index.js +0 -162
- package/build-module/components/create-template-part-modal/index.js.map +0 -1
- package/build-module/components/create-template-part-modal/utils.js +0 -54
- package/build-module/components/create-template-part-modal/utils.js.map +0 -1
- package/build-module/components/post-slug/check.js +0 -23
- package/build-module/components/post-slug/check.js.map +0 -1
- package/build-module/components/post-slug/index.js +0 -71
- package/build-module/components/post-slug/index.js.map +0 -1
- package/build-module/components/post-slug/panel.js +0 -21
- package/build-module/components/post-slug/panel.js.map +0 -1
- package/build-module/dataviews/actions/duplicate-template-part.js +0 -58
- package/build-module/dataviews/actions/duplicate-template-part.js.map +0 -1
- package/build-module/dataviews/actions/utils.js +0 -47
- package/build-module/dataviews/actions/utils.js.map +0 -1
- package/build-module/dataviews/types.js +0 -2
- package/build-module/dataviews/types.js.map +0 -1
- package/build-types/components/create-template-part-modal/index.d.ts +0 -14
- package/build-types/components/create-template-part-modal/index.d.ts.map +0 -1
- package/build-types/components/create-template-part-modal/utils.d.ts +0 -4
- package/build-types/components/create-template-part-modal/utils.d.ts.map +0 -1
- package/build-types/components/post-slug/check.d.ts +0 -12
- package/build-types/components/post-slug/check.d.ts.map +0 -1
- package/build-types/components/post-slug/index.d.ts +0 -7
- package/build-types/components/post-slug/index.d.ts.map +0 -1
- package/build-types/components/post-slug/panel.d.ts +0 -3
- package/build-types/components/post-slug/panel.d.ts.map +0 -1
- package/build-types/dataviews/actions/duplicate-template-part.d.ts +0 -5
- package/build-types/dataviews/actions/duplicate-template-part.d.ts.map +0 -1
- package/build-types/dataviews/actions/utils.d.ts +0 -13
- package/build-types/dataviews/actions/utils.d.ts.map +0 -1
- package/build-types/dataviews/types.d.ts +0 -92
- package/build-types/dataviews/types.d.ts.map +0 -1
- package/src/components/create-template-part-modal/index.js +0 -210
- package/src/components/create-template-part-modal/style.scss +0 -63
- package/src/components/create-template-part-modal/test/utils.js +0 -60
- package/src/components/create-template-part-modal/utils.js +0 -67
- package/src/components/post-slug/check.js +0 -20
- package/src/components/post-slug/index.js +0 -73
- package/src/components/post-slug/panel.js +0 -22
- package/src/components/post-slug/style.scss +0 -5
- package/src/components/post-slug/test/index.js +0 -53
- package/src/dataviews/actions/duplicate-template-part.tsx +0 -70
- package/src/dataviews/actions/utils.ts +0 -64
- package/src/dataviews/types.ts +0 -85
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WordPress dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { useSelect, useDispatch } from '@wordpress/data';
|
|
5
|
-
import { Icon, BaseControl, TextControl, Flex, FlexItem, FlexBlock, Button, Modal, __experimentalRadioGroup as RadioGroup, __experimentalRadio as Radio, __experimentalHStack as HStack, __experimentalVStack as VStack } from '@wordpress/components';
|
|
6
|
-
import { __ } from '@wordpress/i18n';
|
|
7
|
-
import { useState } from '@wordpress/element';
|
|
8
|
-
import { useInstanceId } from '@wordpress/compose';
|
|
9
|
-
import { store as noticesStore } from '@wordpress/notices';
|
|
10
|
-
import { store as coreStore } from '@wordpress/core-data';
|
|
11
|
-
import { check } from '@wordpress/icons';
|
|
12
|
-
import { serialize } from '@wordpress/blocks';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Internal dependencies
|
|
16
|
-
*/
|
|
17
|
-
import { TEMPLATE_PART_POST_TYPE, TEMPLATE_PART_AREA_DEFAULT_CATEGORY } from '../../store/constants';
|
|
18
|
-
import { useExistingTemplateParts, getUniqueTemplatePartTitle, getCleanTemplatePartSlug } from './utils';
|
|
19
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
20
|
-
export default function CreateTemplatePartModal({
|
|
21
|
-
modalTitle,
|
|
22
|
-
...restProps
|
|
23
|
-
}) {
|
|
24
|
-
const defaultModalTitle = useSelect(select => select(coreStore).getPostType(TEMPLATE_PART_POST_TYPE)?.labels?.add_new_item, []);
|
|
25
|
-
return /*#__PURE__*/_jsx(Modal, {
|
|
26
|
-
title: modalTitle || defaultModalTitle,
|
|
27
|
-
onRequestClose: restProps.closeModal,
|
|
28
|
-
overlayClassName: "editor-create-template-part-modal",
|
|
29
|
-
focusOnMount: "firstContentElement",
|
|
30
|
-
size: "medium",
|
|
31
|
-
children: /*#__PURE__*/_jsx(CreateTemplatePartModalContents, {
|
|
32
|
-
...restProps
|
|
33
|
-
})
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
export function CreateTemplatePartModalContents({
|
|
37
|
-
defaultArea = TEMPLATE_PART_AREA_DEFAULT_CATEGORY,
|
|
38
|
-
blocks = [],
|
|
39
|
-
confirmLabel = __('Add'),
|
|
40
|
-
closeModal,
|
|
41
|
-
onCreate,
|
|
42
|
-
onError,
|
|
43
|
-
defaultTitle = ''
|
|
44
|
-
}) {
|
|
45
|
-
const {
|
|
46
|
-
createErrorNotice
|
|
47
|
-
} = useDispatch(noticesStore);
|
|
48
|
-
const {
|
|
49
|
-
saveEntityRecord
|
|
50
|
-
} = useDispatch(coreStore);
|
|
51
|
-
const existingTemplateParts = useExistingTemplateParts();
|
|
52
|
-
const [title, setTitle] = useState(defaultTitle);
|
|
53
|
-
const [area, setArea] = useState(defaultArea);
|
|
54
|
-
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
55
|
-
const instanceId = useInstanceId(CreateTemplatePartModal);
|
|
56
|
-
const templatePartAreas = useSelect(select => select(coreStore).getEntityRecord('root', '__unstableBase')?.default_template_part_areas || [], []);
|
|
57
|
-
async function createTemplatePart() {
|
|
58
|
-
if (!title || isSubmitting) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
try {
|
|
62
|
-
setIsSubmitting(true);
|
|
63
|
-
const uniqueTitle = getUniqueTemplatePartTitle(title, existingTemplateParts);
|
|
64
|
-
const cleanSlug = getCleanTemplatePartSlug(uniqueTitle);
|
|
65
|
-
const templatePart = await saveEntityRecord('postType', TEMPLATE_PART_POST_TYPE, {
|
|
66
|
-
slug: cleanSlug,
|
|
67
|
-
title: uniqueTitle,
|
|
68
|
-
content: serialize(blocks),
|
|
69
|
-
area
|
|
70
|
-
}, {
|
|
71
|
-
throwOnError: true
|
|
72
|
-
});
|
|
73
|
-
await onCreate(templatePart);
|
|
74
|
-
|
|
75
|
-
// TODO: Add a success notice?
|
|
76
|
-
} catch (error) {
|
|
77
|
-
const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : __('An error occurred while creating the template part.');
|
|
78
|
-
createErrorNotice(errorMessage, {
|
|
79
|
-
type: 'snackbar'
|
|
80
|
-
});
|
|
81
|
-
onError?.();
|
|
82
|
-
} finally {
|
|
83
|
-
setIsSubmitting(false);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return /*#__PURE__*/_jsx("form", {
|
|
87
|
-
onSubmit: async event => {
|
|
88
|
-
event.preventDefault();
|
|
89
|
-
await createTemplatePart();
|
|
90
|
-
},
|
|
91
|
-
children: /*#__PURE__*/_jsxs(VStack, {
|
|
92
|
-
spacing: "4",
|
|
93
|
-
children: [/*#__PURE__*/_jsx(TextControl, {
|
|
94
|
-
__next40pxDefaultSize: true,
|
|
95
|
-
__nextHasNoMarginBottom: true,
|
|
96
|
-
label: __('Name'),
|
|
97
|
-
value: title,
|
|
98
|
-
onChange: setTitle,
|
|
99
|
-
required: true
|
|
100
|
-
}), /*#__PURE__*/_jsx(BaseControl, {
|
|
101
|
-
__nextHasNoMarginBottom: true,
|
|
102
|
-
label: __('Area'),
|
|
103
|
-
id: `editor-create-template-part-modal__area-selection-${instanceId}`,
|
|
104
|
-
className: "editor-create-template-part-modal__area-base-control",
|
|
105
|
-
children: /*#__PURE__*/_jsx(RadioGroup, {
|
|
106
|
-
label: __('Area'),
|
|
107
|
-
className: "editor-create-template-part-modal__area-radio-group",
|
|
108
|
-
id: `editor-create-template-part-modal__area-selection-${instanceId}`,
|
|
109
|
-
onChange: setArea,
|
|
110
|
-
checked: area,
|
|
111
|
-
children: templatePartAreas.map(({
|
|
112
|
-
icon,
|
|
113
|
-
label,
|
|
114
|
-
area: value,
|
|
115
|
-
description
|
|
116
|
-
}) => /*#__PURE__*/_jsx(Radio, {
|
|
117
|
-
__next40pxDefaultSize: true,
|
|
118
|
-
value: value,
|
|
119
|
-
className: "editor-create-template-part-modal__area-radio",
|
|
120
|
-
children: /*#__PURE__*/_jsxs(Flex, {
|
|
121
|
-
align: "start",
|
|
122
|
-
justify: "start",
|
|
123
|
-
children: [/*#__PURE__*/_jsx(FlexItem, {
|
|
124
|
-
children: /*#__PURE__*/_jsx(Icon, {
|
|
125
|
-
icon: icon
|
|
126
|
-
})
|
|
127
|
-
}), /*#__PURE__*/_jsxs(FlexBlock, {
|
|
128
|
-
className: "editor-create-template-part-modal__option-label",
|
|
129
|
-
children: [label, /*#__PURE__*/_jsx("div", {
|
|
130
|
-
children: description
|
|
131
|
-
})]
|
|
132
|
-
}), /*#__PURE__*/_jsx(FlexItem, {
|
|
133
|
-
className: "editor-create-template-part-modal__checkbox",
|
|
134
|
-
children: area === value && /*#__PURE__*/_jsx(Icon, {
|
|
135
|
-
icon: check
|
|
136
|
-
})
|
|
137
|
-
})]
|
|
138
|
-
})
|
|
139
|
-
}, label))
|
|
140
|
-
})
|
|
141
|
-
}), /*#__PURE__*/_jsxs(HStack, {
|
|
142
|
-
justify: "right",
|
|
143
|
-
children: [/*#__PURE__*/_jsx(Button, {
|
|
144
|
-
__next40pxDefaultSize: true,
|
|
145
|
-
variant: "tertiary",
|
|
146
|
-
onClick: () => {
|
|
147
|
-
closeModal();
|
|
148
|
-
},
|
|
149
|
-
children: __('Cancel')
|
|
150
|
-
}), /*#__PURE__*/_jsx(Button, {
|
|
151
|
-
__next40pxDefaultSize: true,
|
|
152
|
-
variant: "primary",
|
|
153
|
-
type: "submit",
|
|
154
|
-
"aria-disabled": !title || isSubmitting,
|
|
155
|
-
isBusy: isSubmitting,
|
|
156
|
-
children: confirmLabel
|
|
157
|
-
})]
|
|
158
|
-
})]
|
|
159
|
-
})
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useSelect","useDispatch","Icon","BaseControl","TextControl","Flex","FlexItem","FlexBlock","Button","Modal","__experimentalRadioGroup","RadioGroup","__experimentalRadio","Radio","__experimentalHStack","HStack","__experimentalVStack","VStack","__","useState","useInstanceId","store","noticesStore","coreStore","check","serialize","TEMPLATE_PART_POST_TYPE","TEMPLATE_PART_AREA_DEFAULT_CATEGORY","useExistingTemplateParts","getUniqueTemplatePartTitle","getCleanTemplatePartSlug","jsx","_jsx","jsxs","_jsxs","CreateTemplatePartModal","modalTitle","restProps","defaultModalTitle","select","getPostType","labels","add_new_item","title","onRequestClose","closeModal","overlayClassName","focusOnMount","size","children","CreateTemplatePartModalContents","defaultArea","blocks","confirmLabel","onCreate","onError","defaultTitle","createErrorNotice","saveEntityRecord","existingTemplateParts","setTitle","area","setArea","isSubmitting","setIsSubmitting","instanceId","templatePartAreas","getEntityRecord","default_template_part_areas","createTemplatePart","uniqueTitle","cleanSlug","templatePart","slug","content","throwOnError","error","errorMessage","message","code","type","onSubmit","event","preventDefault","spacing","__next40pxDefaultSize","__nextHasNoMarginBottom","label","value","onChange","required","id","className","checked","map","icon","description","align","justify","variant","onClick","isBusy"],"sources":["@wordpress/editor/src/components/create-template-part-modal/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tIcon,\n\tBaseControl,\n\tTextControl,\n\tFlex,\n\tFlexItem,\n\tFlexBlock,\n\tButton,\n\tModal,\n\t__experimentalRadioGroup as RadioGroup,\n\t__experimentalRadio as Radio,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useState } from '@wordpress/element';\nimport { useInstanceId } from '@wordpress/compose';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { check } from '@wordpress/icons';\nimport { serialize } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport {\n\tTEMPLATE_PART_POST_TYPE,\n\tTEMPLATE_PART_AREA_DEFAULT_CATEGORY,\n} from '../../store/constants';\nimport {\n\tuseExistingTemplateParts,\n\tgetUniqueTemplatePartTitle,\n\tgetCleanTemplatePartSlug,\n} from './utils';\n\nexport default function CreateTemplatePartModal( {\n\tmodalTitle,\n\t...restProps\n} ) {\n\tconst defaultModalTitle = useSelect(\n\t\t( select ) =>\n\t\t\tselect( coreStore ).getPostType( TEMPLATE_PART_POST_TYPE )?.labels\n\t\t\t\t?.add_new_item,\n\t\t[]\n\t);\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ modalTitle || defaultModalTitle }\n\t\t\tonRequestClose={ restProps.closeModal }\n\t\t\toverlayClassName=\"editor-create-template-part-modal\"\n\t\t\tfocusOnMount=\"firstContentElement\"\n\t\t\tsize=\"medium\"\n\t\t>\n\t\t\t<CreateTemplatePartModalContents { ...restProps } />\n\t\t</Modal>\n\t);\n}\n\nexport function CreateTemplatePartModalContents( {\n\tdefaultArea = TEMPLATE_PART_AREA_DEFAULT_CATEGORY,\n\tblocks = [],\n\tconfirmLabel = __( 'Add' ),\n\tcloseModal,\n\tonCreate,\n\tonError,\n\tdefaultTitle = '',\n} ) {\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\tconst existingTemplateParts = useExistingTemplateParts();\n\n\tconst [ title, setTitle ] = useState( defaultTitle );\n\tconst [ area, setArea ] = useState( defaultArea );\n\tconst [ isSubmitting, setIsSubmitting ] = useState( false );\n\tconst instanceId = useInstanceId( CreateTemplatePartModal );\n\n\tconst templatePartAreas = useSelect(\n\t\t( select ) =>\n\t\t\tselect( coreStore ).getEntityRecord( 'root', '__unstableBase' )\n\t\t\t\t?.default_template_part_areas || [],\n\t\t[]\n\t);\n\n\tasync function createTemplatePart() {\n\t\tif ( ! title || isSubmitting ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tsetIsSubmitting( true );\n\t\t\tconst uniqueTitle = getUniqueTemplatePartTitle(\n\t\t\t\ttitle,\n\t\t\t\texistingTemplateParts\n\t\t\t);\n\t\t\tconst cleanSlug = getCleanTemplatePartSlug( uniqueTitle );\n\n\t\t\tconst templatePart = await saveEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tTEMPLATE_PART_POST_TYPE,\n\t\t\t\t{\n\t\t\t\t\tslug: cleanSlug,\n\t\t\t\t\ttitle: uniqueTitle,\n\t\t\t\t\tcontent: serialize( blocks ),\n\t\t\t\t\tarea,\n\t\t\t\t},\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\t\t\tawait onCreate( templatePart );\n\n\t\t\t// TODO: Add a success notice?\n\t\t} catch ( error ) {\n\t\t\tconst errorMessage =\n\t\t\t\terror.message && error.code !== 'unknown_error'\n\t\t\t\t\t? error.message\n\t\t\t\t\t: __(\n\t\t\t\t\t\t\t'An error occurred while creating the template part.'\n\t\t\t\t\t );\n\n\t\t\tcreateErrorNotice( errorMessage, { type: 'snackbar' } );\n\n\t\t\tonError?.();\n\t\t} finally {\n\t\t\tsetIsSubmitting( false );\n\t\t}\n\t}\n\treturn (\n\t\t<form\n\t\t\tonSubmit={ async ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tawait createTemplatePart();\n\t\t\t} }\n\t\t>\n\t\t\t<VStack spacing=\"4\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Name' ) }\n\t\t\t\t\tvalue={ title }\n\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\trequired\n\t\t\t\t/>\n\t\t\t\t<BaseControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Area' ) }\n\t\t\t\t\tid={ `editor-create-template-part-modal__area-selection-${ instanceId }` }\n\t\t\t\t\tclassName=\"editor-create-template-part-modal__area-base-control\"\n\t\t\t\t>\n\t\t\t\t\t<RadioGroup\n\t\t\t\t\t\tlabel={ __( 'Area' ) }\n\t\t\t\t\t\tclassName=\"editor-create-template-part-modal__area-radio-group\"\n\t\t\t\t\t\tid={ `editor-create-template-part-modal__area-selection-${ instanceId }` }\n\t\t\t\t\t\tonChange={ setArea }\n\t\t\t\t\t\tchecked={ area }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ templatePartAreas.map(\n\t\t\t\t\t\t\t( { icon, label, area: value, description } ) => (\n\t\t\t\t\t\t\t\t<Radio\n\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\tkey={ label }\n\t\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\t\tclassName=\"editor-create-template-part-modal__area-radio\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Flex align=\"start\" justify=\"start\">\n\t\t\t\t\t\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t\t\t\t\t\t<Icon icon={ icon } />\n\t\t\t\t\t\t\t\t\t\t</FlexItem>\n\t\t\t\t\t\t\t\t\t\t<FlexBlock className=\"editor-create-template-part-modal__option-label\">\n\t\t\t\t\t\t\t\t\t\t\t{ label }\n\t\t\t\t\t\t\t\t\t\t\t<div>{ description }</div>\n\t\t\t\t\t\t\t\t\t\t</FlexBlock>\n\n\t\t\t\t\t\t\t\t\t\t<FlexItem className=\"editor-create-template-part-modal__checkbox\">\n\t\t\t\t\t\t\t\t\t\t\t{ area === value && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t</FlexItem>\n\t\t\t\t\t\t\t\t\t</Flex>\n\t\t\t\t\t\t\t\t</Radio>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) }\n\t\t\t\t\t</RadioGroup>\n\t\t\t\t</BaseControl>\n\t\t\t\t<HStack justify=\"right\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tcloseModal();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\taria-disabled={ ! title || isSubmitting }\n\t\t\t\t\t\tisBusy={ isSubmitting }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ confirmLabel }\n\t\t\t\t\t</Button>\n\t\t\t\t</HStack>\n\t\t\t</VStack>\n\t\t</form>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SACCC,IAAI,EACJC,WAAW,EACXC,WAAW,EACXC,IAAI,EACJC,QAAQ,EACRC,SAAS,EACTC,MAAM,EACNC,KAAK,EACLC,wBAAwB,IAAIC,UAAU,EACtCC,mBAAmB,IAAIC,KAAK,EAC5BC,oBAAoB,IAAIC,MAAM,EAC9BC,oBAAoB,IAAIC,MAAM,QACxB,uBAAuB;AAC9B,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,aAAa,QAAQ,oBAAoB;AAClD,SAASC,KAAK,IAAIC,YAAY,QAAQ,oBAAoB;AAC1D,SAASD,KAAK,IAAIE,SAAS,QAAQ,sBAAsB;AACzD,SAASC,KAAK,QAAQ,kBAAkB;AACxC,SAASC,SAAS,QAAQ,mBAAmB;;AAE7C;AACA;AACA;AACA,SACCC,uBAAuB,EACvBC,mCAAmC,QAC7B,uBAAuB;AAC9B,SACCC,wBAAwB,EACxBC,0BAA0B,EAC1BC,wBAAwB,QAClB,SAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEjB,eAAe,SAASC,uBAAuBA,CAAE;EAChDC,UAAU;EACV,GAAGC;AACJ,CAAC,EAAG;EACH,MAAMC,iBAAiB,GAAGtC,SAAS,CAChCuC,MAAM,IACPA,MAAM,CAAEhB,SAAU,CAAC,CAACiB,WAAW,CAAEd,uBAAwB,CAAC,EAAEe,MAAM,EAC/DC,YAAY,EAChB,EACD,CAAC;EACD,oBACCV,IAAA,CAACvB,KAAK;IACLkC,KAAK,EAAGP,UAAU,IAAIE,iBAAmB;IACzCM,cAAc,EAAGP,SAAS,CAACQ,UAAY;IACvCC,gBAAgB,EAAC,mCAAmC;IACpDC,YAAY,EAAC,qBAAqB;IAClCC,IAAI,EAAC,QAAQ;IAAAC,QAAA,eAEbjB,IAAA,CAACkB,+BAA+B;MAAA,GAAMb;IAAS,CAAI;EAAC,CAC9C,CAAC;AAEV;AAEA,OAAO,SAASa,+BAA+BA,CAAE;EAChDC,WAAW,GAAGxB,mCAAmC;EACjDyB,MAAM,GAAG,EAAE;EACXC,YAAY,GAAGnC,EAAE,CAAE,KAAM,CAAC;EAC1B2B,UAAU;EACVS,QAAQ;EACRC,OAAO;EACPC,YAAY,GAAG;AAChB,CAAC,EAAG;EACH,MAAM;IAAEC;EAAkB,CAAC,GAAGxD,WAAW,CAAEqB,YAAa,CAAC;EACzD,MAAM;IAAEoC;EAAiB,CAAC,GAAGzD,WAAW,CAAEsB,SAAU,CAAC;EACrD,MAAMoC,qBAAqB,GAAG/B,wBAAwB,CAAC,CAAC;EAExD,MAAM,CAAEe,KAAK,EAAEiB,QAAQ,CAAE,GAAGzC,QAAQ,CAAEqC,YAAa,CAAC;EACpD,MAAM,CAAEK,IAAI,EAAEC,OAAO,CAAE,GAAG3C,QAAQ,CAAEgC,WAAY,CAAC;EACjD,MAAM,CAAEY,YAAY,EAAEC,eAAe,CAAE,GAAG7C,QAAQ,CAAE,KAAM,CAAC;EAC3D,MAAM8C,UAAU,GAAG7C,aAAa,CAAEe,uBAAwB,CAAC;EAE3D,MAAM+B,iBAAiB,GAAGlE,SAAS,CAChCuC,MAAM,IACPA,MAAM,CAAEhB,SAAU,CAAC,CAAC4C,eAAe,CAAE,MAAM,EAAE,gBAAiB,CAAC,EAC5DC,2BAA2B,IAAI,EAAE,EACrC,EACD,CAAC;EAED,eAAeC,kBAAkBA,CAAA,EAAG;IACnC,IAAK,CAAE1B,KAAK,IAAIoB,YAAY,EAAG;MAC9B;IACD;IAEA,IAAI;MACHC,eAAe,CAAE,IAAK,CAAC;MACvB,MAAMM,WAAW,GAAGzC,0BAA0B,CAC7Cc,KAAK,EACLgB,qBACD,CAAC;MACD,MAAMY,SAAS,GAAGzC,wBAAwB,CAAEwC,WAAY,CAAC;MAEzD,MAAME,YAAY,GAAG,MAAMd,gBAAgB,CAC1C,UAAU,EACVhC,uBAAuB,EACvB;QACC+C,IAAI,EAAEF,SAAS;QACf5B,KAAK,EAAE2B,WAAW;QAClBI,OAAO,EAAEjD,SAAS,CAAE2B,MAAO,CAAC;QAC5BS;MACD,CAAC,EACD;QAAEc,YAAY,EAAE;MAAK,CACtB,CAAC;MACD,MAAMrB,QAAQ,CAAEkB,YAAa,CAAC;;MAE9B;IACD,CAAC,CAAC,OAAQI,KAAK,EAAG;MACjB,MAAMC,YAAY,GACjBD,KAAK,CAACE,OAAO,IAAIF,KAAK,CAACG,IAAI,KAAK,eAAe,GAC5CH,KAAK,CAACE,OAAO,GACb5D,EAAE,CACF,qDACA,CAAC;MAELuC,iBAAiB,CAAEoB,YAAY,EAAE;QAAEG,IAAI,EAAE;MAAW,CAAE,CAAC;MAEvDzB,OAAO,GAAG,CAAC;IACZ,CAAC,SAAS;MACTS,eAAe,CAAE,KAAM,CAAC;IACzB;EACD;EACA,oBACChC,IAAA;IACCiD,QAAQ,EAAG,MAAQC,KAAK,IAAM;MAC7BA,KAAK,CAACC,cAAc,CAAC,CAAC;MACtB,MAAMd,kBAAkB,CAAC,CAAC;IAC3B,CAAG;IAAApB,QAAA,eAEHf,KAAA,CAACjB,MAAM;MAACmE,OAAO,EAAC,GAAG;MAAAnC,QAAA,gBAClBjB,IAAA,CAAC5B,WAAW;QACXiF,qBAAqB;QACrBC,uBAAuB;QACvBC,KAAK,EAAGrE,EAAE,CAAE,MAAO,CAAG;QACtBsE,KAAK,EAAG7C,KAAO;QACf8C,QAAQ,EAAG7B,QAAU;QACrB8B,QAAQ;MAAA,CACR,CAAC,eACF1D,IAAA,CAAC7B,WAAW;QACXmF,uBAAuB;QACvBC,KAAK,EAAGrE,EAAE,CAAE,MAAO,CAAG;QACtByE,EAAE,EAAG,qDAAsD1B,UAAU,EAAK;QAC1E2B,SAAS,EAAC,sDAAsD;QAAA3C,QAAA,eAEhEjB,IAAA,CAACrB,UAAU;UACV4E,KAAK,EAAGrE,EAAE,CAAE,MAAO,CAAG;UACtB0E,SAAS,EAAC,qDAAqD;UAC/DD,EAAE,EAAG,qDAAsD1B,UAAU,EAAK;UAC1EwB,QAAQ,EAAG3B,OAAS;UACpB+B,OAAO,EAAGhC,IAAM;UAAAZ,QAAA,EAEdiB,iBAAiB,CAAC4B,GAAG,CACtB,CAAE;YAAEC,IAAI;YAAER,KAAK;YAAE1B,IAAI,EAAE2B,KAAK;YAAEQ;UAAY,CAAC,kBAC1ChE,IAAA,CAACnB,KAAK;YACLwE,qBAAqB;YAErBG,KAAK,EAAGA,KAAO;YACfI,SAAS,EAAC,+CAA+C;YAAA3C,QAAA,eAEzDf,KAAA,CAAC7B,IAAI;cAAC4F,KAAK,EAAC,OAAO;cAACC,OAAO,EAAC,OAAO;cAAAjD,QAAA,gBAClCjB,IAAA,CAAC1B,QAAQ;gBAAA2C,QAAA,eACRjB,IAAA,CAAC9B,IAAI;kBAAC6F,IAAI,EAAGA;gBAAM,CAAE;cAAC,CACb,CAAC,eACX7D,KAAA,CAAC3B,SAAS;gBAACqF,SAAS,EAAC,iDAAiD;gBAAA3C,QAAA,GACnEsC,KAAK,eACPvD,IAAA;kBAAAiB,QAAA,EAAO+C;gBAAW,CAAO,CAAC;cAAA,CAChB,CAAC,eAEZhE,IAAA,CAAC1B,QAAQ;gBAACsF,SAAS,EAAC,6CAA6C;gBAAA3C,QAAA,EAC9DY,IAAI,KAAK2B,KAAK,iBACfxD,IAAA,CAAC9B,IAAI;kBAAC6F,IAAI,EAAGvE;gBAAO,CAAE;cACtB,CACQ,CAAC;YAAA,CACN;UAAC,GAlBD+D,KAmBA,CAET;QAAC,CACU;MAAC,CACD,CAAC,eACdrD,KAAA,CAACnB,MAAM;QAACmF,OAAO,EAAC,OAAO;QAAAjD,QAAA,gBACtBjB,IAAA,CAACxB,MAAM;UACN6E,qBAAqB;UACrBc,OAAO,EAAC,UAAU;UAClBC,OAAO,EAAGA,CAAA,KAAM;YACfvD,UAAU,CAAC,CAAC;UACb,CAAG;UAAAI,QAAA,EAED/B,EAAE,CAAE,QAAS;QAAC,CACT,CAAC,eACTc,IAAA,CAACxB,MAAM;UACN6E,qBAAqB;UACrBc,OAAO,EAAC,SAAS;UACjBnB,IAAI,EAAC,QAAQ;UACb,iBAAgB,CAAErC,KAAK,IAAIoB,YAAc;UACzCsC,MAAM,EAAGtC,YAAc;UAAAd,QAAA,EAErBI;QAAY,CACP,CAAC;MAAA,CACF,CAAC;IAAA,CACF;EAAC,CACJ,CAAC;AAET","ignoreList":[]}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { paramCase as kebabCase } from 'change-case';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* WordPress dependencies
|
|
8
|
-
*/
|
|
9
|
-
import { useSelect } from '@wordpress/data';
|
|
10
|
-
import { store as coreStore } from '@wordpress/core-data';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Internal dependencies
|
|
14
|
-
*/
|
|
15
|
-
import { TEMPLATE_PART_POST_TYPE } from '../../store/constants';
|
|
16
|
-
export const useExistingTemplateParts = () => {
|
|
17
|
-
return useSelect(select => select(coreStore).getEntityRecords('postType', TEMPLATE_PART_POST_TYPE, {
|
|
18
|
-
per_page: -1
|
|
19
|
-
}), []);
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Return a unique template part title based on
|
|
24
|
-
* the given title and existing template parts.
|
|
25
|
-
*
|
|
26
|
-
* @param {string} title The original template part title.
|
|
27
|
-
* @param {Object} templateParts The array of template part entities.
|
|
28
|
-
* @return {string} A unique template part title.
|
|
29
|
-
*/
|
|
30
|
-
export const getUniqueTemplatePartTitle = (title, templateParts) => {
|
|
31
|
-
const lowercaseTitle = title.toLowerCase();
|
|
32
|
-
const existingTitles = templateParts.map(templatePart => templatePart.title.rendered.toLowerCase());
|
|
33
|
-
if (!existingTitles.includes(lowercaseTitle)) {
|
|
34
|
-
return title;
|
|
35
|
-
}
|
|
36
|
-
let suffix = 2;
|
|
37
|
-
while (existingTitles.includes(`${lowercaseTitle} ${suffix}`)) {
|
|
38
|
-
suffix++;
|
|
39
|
-
}
|
|
40
|
-
return `${title} ${suffix}`;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Get a valid slug for a template part.
|
|
45
|
-
* Currently template parts only allow latin chars.
|
|
46
|
-
* The fallback slug will receive suffix by default.
|
|
47
|
-
*
|
|
48
|
-
* @param {string} title The template part title.
|
|
49
|
-
* @return {string} A valid template part slug.
|
|
50
|
-
*/
|
|
51
|
-
export const getCleanTemplatePartSlug = title => {
|
|
52
|
-
return kebabCase(title).replace(/[^\w-]+/g, '') || 'wp-custom-part';
|
|
53
|
-
};
|
|
54
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["paramCase","kebabCase","useSelect","store","coreStore","TEMPLATE_PART_POST_TYPE","useExistingTemplateParts","select","getEntityRecords","per_page","getUniqueTemplatePartTitle","title","templateParts","lowercaseTitle","toLowerCase","existingTitles","map","templatePart","rendered","includes","suffix","getCleanTemplatePartSlug","replace"],"sources":["@wordpress/editor/src/components/create-template-part-modal/utils.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { paramCase as kebabCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { TEMPLATE_PART_POST_TYPE } from '../../store/constants';\n\nexport const useExistingTemplateParts = () => {\n\treturn useSelect(\n\t\t( select ) =>\n\t\t\tselect( coreStore ).getEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\tTEMPLATE_PART_POST_TYPE,\n\t\t\t\t{\n\t\t\t\t\tper_page: -1,\n\t\t\t\t}\n\t\t\t),\n\t\t[]\n\t);\n};\n\n/**\n * Return a unique template part title based on\n * the given title and existing template parts.\n *\n * @param {string} title The original template part title.\n * @param {Object} templateParts The array of template part entities.\n * @return {string} A unique template part title.\n */\nexport const getUniqueTemplatePartTitle = ( title, templateParts ) => {\n\tconst lowercaseTitle = title.toLowerCase();\n\tconst existingTitles = templateParts.map( ( templatePart ) =>\n\t\ttemplatePart.title.rendered.toLowerCase()\n\t);\n\n\tif ( ! existingTitles.includes( lowercaseTitle ) ) {\n\t\treturn title;\n\t}\n\n\tlet suffix = 2;\n\twhile ( existingTitles.includes( `${ lowercaseTitle } ${ suffix }` ) ) {\n\t\tsuffix++;\n\t}\n\n\treturn `${ title } ${ suffix }`;\n};\n\n/**\n * Get a valid slug for a template part.\n * Currently template parts only allow latin chars.\n * The fallback slug will receive suffix by default.\n *\n * @param {string} title The template part title.\n * @return {string} A valid template part slug.\n */\nexport const getCleanTemplatePartSlug = ( title ) => {\n\treturn kebabCase( title ).replace( /[^\\w-]+/g, '' ) || 'wp-custom-part';\n};\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAS,IAAIC,SAAS,QAAQ,aAAa;;AAEpD;AACA;AACA;AACA,SAASC,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,KAAK,IAAIC,SAAS,QAAQ,sBAAsB;;AAEzD;AACA;AACA;AACA,SAASC,uBAAuB,QAAQ,uBAAuB;AAE/D,OAAO,MAAMC,wBAAwB,GAAGA,CAAA,KAAM;EAC7C,OAAOJ,SAAS,CACbK,MAAM,IACPA,MAAM,CAAEH,SAAU,CAAC,CAACI,gBAAgB,CACnC,UAAU,EACVH,uBAAuB,EACvB;IACCI,QAAQ,EAAE,CAAC;EACZ,CACD,CAAC,EACF,EACD,CAAC;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,0BAA0B,GAAGA,CAAEC,KAAK,EAAEC,aAAa,KAAM;EACrE,MAAMC,cAAc,GAAGF,KAAK,CAACG,WAAW,CAAC,CAAC;EAC1C,MAAMC,cAAc,GAAGH,aAAa,CAACI,GAAG,CAAIC,YAAY,IACvDA,YAAY,CAACN,KAAK,CAACO,QAAQ,CAACJ,WAAW,CAAC,CACzC,CAAC;EAED,IAAK,CAAEC,cAAc,CAACI,QAAQ,CAAEN,cAAe,CAAC,EAAG;IAClD,OAAOF,KAAK;EACb;EAEA,IAAIS,MAAM,GAAG,CAAC;EACd,OAAQL,cAAc,CAACI,QAAQ,CAAE,GAAIN,cAAc,IAAMO,MAAM,EAAI,CAAC,EAAG;IACtEA,MAAM,EAAE;EACT;EAEA,OAAO,GAAIT,KAAK,IAAMS,MAAM,EAAG;AAChC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,wBAAwB,GAAKV,KAAK,IAAM;EACpD,OAAOV,SAAS,CAAEU,KAAM,CAAC,CAACW,OAAO,CAAE,UAAU,EAAE,EAAG,CAAC,IAAI,gBAAgB;AACxE,CAAC","ignoreList":[]}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Internal dependencies
|
|
3
|
-
*/
|
|
4
|
-
import PostTypeSupportCheck from '../post-type-support-check';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Wrapper component that renders its children only if the post type supports the slug.
|
|
8
|
-
*
|
|
9
|
-
* @param {Object} props Props.
|
|
10
|
-
* @param {React.ReactNode} props.children Children to be rendered.
|
|
11
|
-
*
|
|
12
|
-
* @return {React.ReactNode} The rendered component.
|
|
13
|
-
*/
|
|
14
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
|
-
export default function PostSlugCheck({
|
|
16
|
-
children
|
|
17
|
-
}) {
|
|
18
|
-
return /*#__PURE__*/_jsx(PostTypeSupportCheck, {
|
|
19
|
-
supportKeys: "slug",
|
|
20
|
-
children: children
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=check.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["PostTypeSupportCheck","jsx","_jsx","PostSlugCheck","children","supportKeys"],"sources":["@wordpress/editor/src/components/post-slug/check.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport PostTypeSupportCheck from '../post-type-support-check';\n\n/**\n * Wrapper component that renders its children only if the post type supports the slug.\n *\n * @param {Object} props Props.\n * @param {React.ReactNode} props.children Children to be rendered.\n *\n * @return {React.ReactNode} The rendered component.\n */\nexport default function PostSlugCheck( { children } ) {\n\treturn (\n\t\t<PostTypeSupportCheck supportKeys=\"slug\">\n\t\t\t{ children }\n\t\t</PostTypeSupportCheck>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,oBAAoB,MAAM,4BAA4B;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA,SAAAC,GAAA,IAAAC,IAAA;AAQA,eAAe,SAASC,aAAaA,CAAE;EAAEC;AAAS,CAAC,EAAG;EACrD,oBACCF,IAAA,CAACF,oBAAoB;IAACK,WAAW,EAAC,MAAM;IAAAD,QAAA,EACrCA;EAAQ,CACW,CAAC;AAEzB","ignoreList":[]}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WordPress dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { useDispatch, useSelect } from '@wordpress/data';
|
|
5
|
-
import { useState } from '@wordpress/element';
|
|
6
|
-
import { __ } from '@wordpress/i18n';
|
|
7
|
-
import { safeDecodeURIComponent, cleanForSlug } from '@wordpress/url';
|
|
8
|
-
import { TextControl } from '@wordpress/components';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Internal dependencies
|
|
12
|
-
*/
|
|
13
|
-
import PostSlugCheck from './check';
|
|
14
|
-
import { store as editorStore } from '../../store';
|
|
15
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
|
-
function PostSlugControl() {
|
|
17
|
-
const postSlug = useSelect(select => {
|
|
18
|
-
return safeDecodeURIComponent(select(editorStore).getEditedPostSlug());
|
|
19
|
-
}, []);
|
|
20
|
-
const {
|
|
21
|
-
editPost
|
|
22
|
-
} = useDispatch(editorStore);
|
|
23
|
-
const [forceEmptyField, setForceEmptyField] = useState(false);
|
|
24
|
-
return /*#__PURE__*/_jsx(TextControl, {
|
|
25
|
-
__next40pxDefaultSize: true,
|
|
26
|
-
__nextHasNoMarginBottom: true,
|
|
27
|
-
label: __('Slug'),
|
|
28
|
-
autoComplete: "off",
|
|
29
|
-
spellCheck: "false",
|
|
30
|
-
value: forceEmptyField ? '' : postSlug,
|
|
31
|
-
onChange: newValue => {
|
|
32
|
-
editPost({
|
|
33
|
-
slug: newValue
|
|
34
|
-
});
|
|
35
|
-
// When we delete the field the permalink gets
|
|
36
|
-
// reverted to the original value.
|
|
37
|
-
// The forceEmptyField logic allows the user to have
|
|
38
|
-
// the field temporarily empty while typing.
|
|
39
|
-
if (!newValue) {
|
|
40
|
-
if (!forceEmptyField) {
|
|
41
|
-
setForceEmptyField(true);
|
|
42
|
-
}
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if (forceEmptyField) {
|
|
46
|
-
setForceEmptyField(false);
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
onBlur: event => {
|
|
50
|
-
editPost({
|
|
51
|
-
slug: cleanForSlug(event.target.value)
|
|
52
|
-
});
|
|
53
|
-
if (forceEmptyField) {
|
|
54
|
-
setForceEmptyField(false);
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
className: "editor-post-slug"
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Renders the PostSlug component. It provide a control for editing the post slug.
|
|
63
|
-
*
|
|
64
|
-
* @return {React.ReactNode} The rendered component.
|
|
65
|
-
*/
|
|
66
|
-
export default function PostSlug() {
|
|
67
|
-
return /*#__PURE__*/_jsx(PostSlugCheck, {
|
|
68
|
-
children: /*#__PURE__*/_jsx(PostSlugControl, {})
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useDispatch","useSelect","useState","__","safeDecodeURIComponent","cleanForSlug","TextControl","PostSlugCheck","store","editorStore","jsx","_jsx","PostSlugControl","postSlug","select","getEditedPostSlug","editPost","forceEmptyField","setForceEmptyField","__next40pxDefaultSize","__nextHasNoMarginBottom","label","autoComplete","spellCheck","value","onChange","newValue","slug","onBlur","event","target","className","PostSlug","children"],"sources":["@wordpress/editor/src/components/post-slug/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { safeDecodeURIComponent, cleanForSlug } from '@wordpress/url';\nimport { TextControl } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport PostSlugCheck from './check';\nimport { store as editorStore } from '../../store';\n\nfunction PostSlugControl() {\n\tconst postSlug = useSelect( ( select ) => {\n\t\treturn safeDecodeURIComponent(\n\t\t\tselect( editorStore ).getEditedPostSlug()\n\t\t);\n\t}, [] );\n\tconst { editPost } = useDispatch( editorStore );\n\tconst [ forceEmptyField, setForceEmptyField ] = useState( false );\n\n\treturn (\n\t\t<TextControl\n\t\t\t__next40pxDefaultSize\n\t\t\t__nextHasNoMarginBottom\n\t\t\tlabel={ __( 'Slug' ) }\n\t\t\tautoComplete=\"off\"\n\t\t\tspellCheck=\"false\"\n\t\t\tvalue={ forceEmptyField ? '' : postSlug }\n\t\t\tonChange={ ( newValue ) => {\n\t\t\t\teditPost( { slug: newValue } );\n\t\t\t\t// When we delete the field the permalink gets\n\t\t\t\t// reverted to the original value.\n\t\t\t\t// The forceEmptyField logic allows the user to have\n\t\t\t\t// the field temporarily empty while typing.\n\t\t\t\tif ( ! newValue ) {\n\t\t\t\t\tif ( ! forceEmptyField ) {\n\t\t\t\t\t\tsetForceEmptyField( true );\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( forceEmptyField ) {\n\t\t\t\t\tsetForceEmptyField( false );\n\t\t\t\t}\n\t\t\t} }\n\t\t\tonBlur={ ( event ) => {\n\t\t\t\teditPost( {\n\t\t\t\t\tslug: cleanForSlug( event.target.value ),\n\t\t\t\t} );\n\t\t\t\tif ( forceEmptyField ) {\n\t\t\t\t\tsetForceEmptyField( false );\n\t\t\t\t}\n\t\t\t} }\n\t\t\tclassName=\"editor-post-slug\"\n\t\t/>\n\t);\n}\n\n/**\n * Renders the PostSlug component. It provide a control for editing the post slug.\n *\n * @return {React.ReactNode} The rendered component.\n */\nexport default function PostSlug() {\n\treturn (\n\t\t<PostSlugCheck>\n\t\t\t<PostSlugControl />\n\t\t</PostSlugCheck>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AACxD,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,sBAAsB,EAAEC,YAAY,QAAQ,gBAAgB;AACrE,SAASC,WAAW,QAAQ,uBAAuB;;AAEnD;AACA;AACA;AACA,OAAOC,aAAa,MAAM,SAAS;AACnC,SAASC,KAAK,IAAIC,WAAW,QAAQ,aAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEnD,SAASC,eAAeA,CAAA,EAAG;EAC1B,MAAMC,QAAQ,GAAGZ,SAAS,CAAIa,MAAM,IAAM;IACzC,OAAOV,sBAAsB,CAC5BU,MAAM,CAAEL,WAAY,CAAC,CAACM,iBAAiB,CAAC,CACzC,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;EACP,MAAM;IAAEC;EAAS,CAAC,GAAGhB,WAAW,CAAES,WAAY,CAAC;EAC/C,MAAM,CAAEQ,eAAe,EAAEC,kBAAkB,CAAE,GAAGhB,QAAQ,CAAE,KAAM,CAAC;EAEjE,oBACCS,IAAA,CAACL,WAAW;IACXa,qBAAqB;IACrBC,uBAAuB;IACvBC,KAAK,EAAGlB,EAAE,CAAE,MAAO,CAAG;IACtBmB,YAAY,EAAC,KAAK;IAClBC,UAAU,EAAC,OAAO;IAClBC,KAAK,EAAGP,eAAe,GAAG,EAAE,GAAGJ,QAAU;IACzCY,QAAQ,EAAKC,QAAQ,IAAM;MAC1BV,QAAQ,CAAE;QAAEW,IAAI,EAAED;MAAS,CAAE,CAAC;MAC9B;MACA;MACA;MACA;MACA,IAAK,CAAEA,QAAQ,EAAG;QACjB,IAAK,CAAET,eAAe,EAAG;UACxBC,kBAAkB,CAAE,IAAK,CAAC;QAC3B;QACA;MACD;MACA,IAAKD,eAAe,EAAG;QACtBC,kBAAkB,CAAE,KAAM,CAAC;MAC5B;IACD,CAAG;IACHU,MAAM,EAAKC,KAAK,IAAM;MACrBb,QAAQ,CAAE;QACTW,IAAI,EAAEtB,YAAY,CAAEwB,KAAK,CAACC,MAAM,CAACN,KAAM;MACxC,CAAE,CAAC;MACH,IAAKP,eAAe,EAAG;QACtBC,kBAAkB,CAAE,KAAM,CAAC;MAC5B;IACD,CAAG;IACHa,SAAS,EAAC;EAAkB,CAC5B,CAAC;AAEJ;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,QAAQA,CAAA,EAAG;EAClC,oBACCrB,IAAA,CAACJ,aAAa;IAAA0B,QAAA,eACbtB,IAAA,CAACC,eAAe,IAAE;EAAC,CACL,CAAC;AAElB","ignoreList":[]}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WordPress dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { PanelRow } from '@wordpress/components';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Internal dependencies
|
|
8
|
-
*/
|
|
9
|
-
import PostSlugForm from './';
|
|
10
|
-
import PostSlugCheck from './check';
|
|
11
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
-
export function PostSlug() {
|
|
13
|
-
return /*#__PURE__*/_jsx(PostSlugCheck, {
|
|
14
|
-
children: /*#__PURE__*/_jsx(PanelRow, {
|
|
15
|
-
className: "editor-post-slug",
|
|
16
|
-
children: /*#__PURE__*/_jsx(PostSlugForm, {})
|
|
17
|
-
})
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
export default PostSlug;
|
|
21
|
-
//# sourceMappingURL=panel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["PanelRow","PostSlugForm","PostSlugCheck","jsx","_jsx","PostSlug","children","className"],"sources":["@wordpress/editor/src/components/post-slug/panel.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { PanelRow } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport PostSlugForm from './';\nimport PostSlugCheck from './check';\n\nexport function PostSlug() {\n\treturn (\n\t\t<PostSlugCheck>\n\t\t\t<PanelRow className=\"editor-post-slug\">\n\t\t\t\t<PostSlugForm />\n\t\t\t</PanelRow>\n\t\t</PostSlugCheck>\n\t);\n}\n\nexport default PostSlug;\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,QAAQ,QAAQ,uBAAuB;;AAEhD;AACA;AACA;AACA,OAAOC,YAAY,MAAM,IAAI;AAC7B,OAAOC,aAAa,MAAM,SAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEpC,OAAO,SAASC,QAAQA,CAAA,EAAG;EAC1B,oBACCD,IAAA,CAACF,aAAa;IAAAI,QAAA,eACbF,IAAA,CAACJ,QAAQ;MAACO,SAAS,EAAC,kBAAkB;MAAAD,QAAA,eACrCF,IAAA,CAACH,YAAY,IAAE;IAAC,CACP;EAAC,CACG,CAAC;AAElB;AAEA,eAAeI,QAAQ","ignoreList":[]}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WordPress dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { useDispatch } from '@wordpress/data';
|
|
5
|
-
import { _x, sprintf } from '@wordpress/i18n';
|
|
6
|
-
import { store as noticesStore } from '@wordpress/notices';
|
|
7
|
-
import { useMemo } from '@wordpress/element';
|
|
8
|
-
// @ts-ignore
|
|
9
|
-
import { parse } from '@wordpress/blocks';
|
|
10
|
-
/**
|
|
11
|
-
* Internal dependencies
|
|
12
|
-
*/
|
|
13
|
-
import { TEMPLATE_PART_POST_TYPE } from '../../store/constants';
|
|
14
|
-
import { CreateTemplatePartModalContents } from '../../components/create-template-part-modal';
|
|
15
|
-
import { getItemTitle } from './utils';
|
|
16
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
17
|
-
const duplicateTemplatePart = {
|
|
18
|
-
id: 'duplicate-template-part',
|
|
19
|
-
label: _x('Duplicate', 'action label'),
|
|
20
|
-
isEligible: item => item.type === TEMPLATE_PART_POST_TYPE,
|
|
21
|
-
modalHeader: _x('Duplicate template part', 'action label'),
|
|
22
|
-
RenderModal: ({
|
|
23
|
-
items,
|
|
24
|
-
closeModal
|
|
25
|
-
}) => {
|
|
26
|
-
const [item] = items;
|
|
27
|
-
const blocks = useMemo(() => {
|
|
28
|
-
var _item$blocks;
|
|
29
|
-
return (_item$blocks = item.blocks) !== null && _item$blocks !== void 0 ? _item$blocks : parse(typeof item.content === 'string' ? item.content : item.content.raw, {
|
|
30
|
-
__unstableSkipMigrationLogs: true
|
|
31
|
-
});
|
|
32
|
-
}, [item.content, item.blocks]);
|
|
33
|
-
const {
|
|
34
|
-
createSuccessNotice
|
|
35
|
-
} = useDispatch(noticesStore);
|
|
36
|
-
function onTemplatePartSuccess() {
|
|
37
|
-
createSuccessNotice(sprintf(
|
|
38
|
-
// translators: %s: The new template part's title e.g. 'Call to action (copy)'.
|
|
39
|
-
_x('"%s" duplicated.', 'template part'), getItemTitle(item)), {
|
|
40
|
-
type: 'snackbar',
|
|
41
|
-
id: 'edit-site-patterns-success'
|
|
42
|
-
});
|
|
43
|
-
closeModal?.();
|
|
44
|
-
}
|
|
45
|
-
return /*#__PURE__*/_jsx(CreateTemplatePartModalContents, {
|
|
46
|
-
blocks: blocks,
|
|
47
|
-
defaultArea: item.area,
|
|
48
|
-
defaultTitle: sprintf(/* translators: %s: Existing template part title */
|
|
49
|
-
_x('%s (Copy)', 'template part'), getItemTitle(item)),
|
|
50
|
-
onCreate: onTemplatePartSuccess,
|
|
51
|
-
onError: closeModal,
|
|
52
|
-
confirmLabel: _x('Duplicate', 'action label'),
|
|
53
|
-
closeModal: closeModal
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
export default duplicateTemplatePart;
|
|
58
|
-
//# sourceMappingURL=duplicate-template-part.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useDispatch","_x","sprintf","store","noticesStore","useMemo","parse","TEMPLATE_PART_POST_TYPE","CreateTemplatePartModalContents","getItemTitle","jsx","_jsx","duplicateTemplatePart","id","label","isEligible","item","type","modalHeader","RenderModal","items","closeModal","blocks","_item$blocks","content","raw","__unstableSkipMigrationLogs","createSuccessNotice","onTemplatePartSuccess","defaultArea","area","defaultTitle","onCreate","onError","confirmLabel"],"sources":["@wordpress/editor/src/dataviews/actions/duplicate-template-part.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch } from '@wordpress/data';\nimport { _x, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { useMemo } from '@wordpress/element';\n// @ts-ignore\nimport { parse } from '@wordpress/blocks';\nimport type { Action } from '@wordpress/dataviews';\n\n/**\n * Internal dependencies\n */\nimport { TEMPLATE_PART_POST_TYPE } from '../../store/constants';\nimport { CreateTemplatePartModalContents } from '../../components/create-template-part-modal';\nimport { getItemTitle } from './utils';\nimport type { TemplatePart } from '../types';\n\nconst duplicateTemplatePart: Action< TemplatePart > = {\n\tid: 'duplicate-template-part',\n\tlabel: _x( 'Duplicate', 'action label' ),\n\tisEligible: ( item ) => item.type === TEMPLATE_PART_POST_TYPE,\n\tmodalHeader: _x( 'Duplicate template part', 'action label' ),\n\tRenderModal: ( { items, closeModal } ) => {\n\t\tconst [ item ] = items;\n\t\tconst blocks = useMemo( () => {\n\t\t\treturn (\n\t\t\t\titem.blocks ??\n\t\t\t\tparse(\n\t\t\t\t\ttypeof item.content === 'string'\n\t\t\t\t\t\t? item.content\n\t\t\t\t\t\t: item.content.raw,\n\t\t\t\t\t{\n\t\t\t\t\t\t__unstableSkipMigrationLogs: true,\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t);\n\t\t}, [ item.content, item.blocks ] );\n\t\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\t\tfunction onTemplatePartSuccess() {\n\t\t\tcreateSuccessNotice(\n\t\t\t\tsprintf(\n\t\t\t\t\t// translators: %s: The new template part's title e.g. 'Call to action (copy)'.\n\t\t\t\t\t_x( '\"%s\" duplicated.', 'template part' ),\n\t\t\t\t\tgetItemTitle( item )\n\t\t\t\t),\n\t\t\t\t{ type: 'snackbar', id: 'edit-site-patterns-success' }\n\t\t\t);\n\t\t\tcloseModal?.();\n\t\t}\n\t\treturn (\n\t\t\t<CreateTemplatePartModalContents\n\t\t\t\tblocks={ blocks }\n\t\t\t\tdefaultArea={ item.area }\n\t\t\t\tdefaultTitle={ sprintf(\n\t\t\t\t\t/* translators: %s: Existing template part title */\n\t\t\t\t\t_x( '%s (Copy)', 'template part' ),\n\t\t\t\t\tgetItemTitle( item )\n\t\t\t\t) }\n\t\t\t\tonCreate={ onTemplatePartSuccess }\n\t\t\t\tonError={ closeModal }\n\t\t\t\tconfirmLabel={ _x( 'Duplicate', 'action label' ) }\n\t\t\t\tcloseModal={ closeModal }\n\t\t\t/>\n\t\t);\n\t},\n};\n\nexport default duplicateTemplatePart;\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAW,QAAQ,iBAAiB;AAC7C,SAASC,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;AAC7C,SAASC,KAAK,IAAIC,YAAY,QAAQ,oBAAoB;AAC1D,SAASC,OAAO,QAAQ,oBAAoB;AAC5C;AACA,SAASC,KAAK,QAAQ,mBAAmB;AAGzC;AACA;AACA;AACA,SAASC,uBAAuB,QAAQ,uBAAuB;AAC/D,SAASC,+BAA+B,QAAQ,6CAA6C;AAC7F,SAASC,YAAY,QAAQ,SAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGvC,MAAMC,qBAA6C,GAAG;EACrDC,EAAE,EAAE,yBAAyB;EAC7BC,KAAK,EAAEb,EAAE,CAAE,WAAW,EAAE,cAAe,CAAC;EACxCc,UAAU,EAAIC,IAAI,IAAMA,IAAI,CAACC,IAAI,KAAKV,uBAAuB;EAC7DW,WAAW,EAAEjB,EAAE,CAAE,yBAAyB,EAAE,cAAe,CAAC;EAC5DkB,WAAW,EAAEA,CAAE;IAAEC,KAAK;IAAEC;EAAW,CAAC,KAAM;IACzC,MAAM,CAAEL,IAAI,CAAE,GAAGI,KAAK;IACtB,MAAME,MAAM,GAAGjB,OAAO,CAAE,MAAM;MAAA,IAAAkB,YAAA;MAC7B,QAAAA,YAAA,GACCP,IAAI,CAACM,MAAM,cAAAC,YAAA,cAAAA,YAAA,GACXjB,KAAK,CACJ,OAAOU,IAAI,CAACQ,OAAO,KAAK,QAAQ,GAC7BR,IAAI,CAACQ,OAAO,GACZR,IAAI,CAACQ,OAAO,CAACC,GAAG,EACnB;QACCC,2BAA2B,EAAE;MAC9B,CACD,CAAC;IAEH,CAAC,EAAE,CAAEV,IAAI,CAACQ,OAAO,EAAER,IAAI,CAACM,MAAM,CAAG,CAAC;IAClC,MAAM;MAAEK;IAAoB,CAAC,GAAG3B,WAAW,CAAEI,YAAa,CAAC;IAC3D,SAASwB,qBAAqBA,CAAA,EAAG;MAChCD,mBAAmB,CAClBzB,OAAO;MACN;MACAD,EAAE,CAAE,kBAAkB,EAAE,eAAgB,CAAC,EACzCQ,YAAY,CAAEO,IAAK,CACpB,CAAC,EACD;QAAEC,IAAI,EAAE,UAAU;QAAEJ,EAAE,EAAE;MAA6B,CACtD,CAAC;MACDQ,UAAU,GAAG,CAAC;IACf;IACA,oBACCV,IAAA,CAACH,+BAA+B;MAC/Bc,MAAM,EAAGA,MAAQ;MACjBO,WAAW,EAAGb,IAAI,CAACc,IAAM;MACzBC,YAAY,EAAG7B,OAAO,CACrB;MACAD,EAAE,CAAE,WAAW,EAAE,eAAgB,CAAC,EAClCQ,YAAY,CAAEO,IAAK,CACpB,CAAG;MACHgB,QAAQ,EAAGJ,qBAAuB;MAClCK,OAAO,EAAGZ,UAAY;MACtBa,YAAY,EAAGjC,EAAE,CAAE,WAAW,EAAE,cAAe,CAAG;MAClDoB,UAAU,EAAGA;IAAY,CACzB,CAAC;EAEJ;AACD,CAAC;AAED,eAAeT,qBAAqB","ignoreList":[]}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WordPress dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { decodeEntities } from '@wordpress/html-entities';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Internal dependencies
|
|
8
|
-
*/
|
|
9
|
-
import { TEMPLATE_ORIGINS, TEMPLATE_PART_POST_TYPE, TEMPLATE_POST_TYPE } from '../../store/constants';
|
|
10
|
-
export function isTemplate(post) {
|
|
11
|
-
return post.type === TEMPLATE_POST_TYPE;
|
|
12
|
-
}
|
|
13
|
-
export function isTemplatePart(post) {
|
|
14
|
-
return post.type === TEMPLATE_PART_POST_TYPE;
|
|
15
|
-
}
|
|
16
|
-
export function isTemplateOrTemplatePart(p) {
|
|
17
|
-
return p.type === TEMPLATE_POST_TYPE || p.type === TEMPLATE_PART_POST_TYPE;
|
|
18
|
-
}
|
|
19
|
-
export function getItemTitle(item) {
|
|
20
|
-
if (typeof item.title === 'string') {
|
|
21
|
-
return decodeEntities(item.title);
|
|
22
|
-
}
|
|
23
|
-
if ('rendered' in item.title) {
|
|
24
|
-
return decodeEntities(item.title.rendered);
|
|
25
|
-
}
|
|
26
|
-
if ('raw' in item.title) {
|
|
27
|
-
return decodeEntities(item.title.raw);
|
|
28
|
-
}
|
|
29
|
-
return '';
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Check if a template is removable.
|
|
34
|
-
*
|
|
35
|
-
* @param template The template entity to check.
|
|
36
|
-
* @return Whether the template is removable.
|
|
37
|
-
*/
|
|
38
|
-
export function isTemplateRemovable(template) {
|
|
39
|
-
if (!template) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
// In patterns list page we map the templates parts to a different object
|
|
43
|
-
// than the one returned from the endpoint. This is why we need to check for
|
|
44
|
-
// two props whether is custom or has a theme file.
|
|
45
|
-
return [template.source, template.source].includes(TEMPLATE_ORIGINS.custom) && !Boolean(template.type === 'wp_template' && template?.plugin) && !template.has_theme_file;
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["decodeEntities","TEMPLATE_ORIGINS","TEMPLATE_PART_POST_TYPE","TEMPLATE_POST_TYPE","isTemplate","post","type","isTemplatePart","isTemplateOrTemplatePart","p","getItemTitle","item","title","rendered","raw","isTemplateRemovable","template","source","includes","custom","Boolean","plugin","has_theme_file"],"sources":["@wordpress/editor/src/dataviews/actions/utils.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { decodeEntities } from '@wordpress/html-entities';\n\n/**\n * Internal dependencies\n */\nimport {\n\tTEMPLATE_ORIGINS,\n\tTEMPLATE_PART_POST_TYPE,\n\tTEMPLATE_POST_TYPE,\n} from '../../store/constants';\n\nimport type { Post, TemplatePart, Template } from '../types';\n\nexport function isTemplate( post: Post ): post is Template {\n\treturn post.type === TEMPLATE_POST_TYPE;\n}\n\nexport function isTemplatePart( post: Post ): post is TemplatePart {\n\treturn post.type === TEMPLATE_PART_POST_TYPE;\n}\n\nexport function isTemplateOrTemplatePart(\n\tp: Post\n): p is Template | TemplatePart {\n\treturn p.type === TEMPLATE_POST_TYPE || p.type === TEMPLATE_PART_POST_TYPE;\n}\n\nexport function getItemTitle( item: Post ) {\n\tif ( typeof item.title === 'string' ) {\n\t\treturn decodeEntities( item.title );\n\t}\n\tif ( 'rendered' in item.title ) {\n\t\treturn decodeEntities( item.title.rendered );\n\t}\n\tif ( 'raw' in item.title ) {\n\t\treturn decodeEntities( item.title.raw );\n\t}\n\treturn '';\n}\n\n/**\n * Check if a template is removable.\n *\n * @param template The template entity to check.\n * @return Whether the template is removable.\n */\nexport function isTemplateRemovable( template: Template | TemplatePart ) {\n\tif ( ! template ) {\n\t\treturn false;\n\t}\n\t// In patterns list page we map the templates parts to a different object\n\t// than the one returned from the endpoint. This is why we need to check for\n\t// two props whether is custom or has a theme file.\n\treturn (\n\t\t[ template.source, template.source ].includes(\n\t\t\tTEMPLATE_ORIGINS.custom\n\t\t) &&\n\t\t! Boolean( template.type === 'wp_template' && template?.plugin ) &&\n\t\t! template.has_theme_file\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,cAAc,QAAQ,0BAA0B;;AAEzD;AACA;AACA;AACA,SACCC,gBAAgB,EAChBC,uBAAuB,EACvBC,kBAAkB,QACZ,uBAAuB;AAI9B,OAAO,SAASC,UAAUA,CAAEC,IAAU,EAAqB;EAC1D,OAAOA,IAAI,CAACC,IAAI,KAAKH,kBAAkB;AACxC;AAEA,OAAO,SAASI,cAAcA,CAAEF,IAAU,EAAyB;EAClE,OAAOA,IAAI,CAACC,IAAI,KAAKJ,uBAAuB;AAC7C;AAEA,OAAO,SAASM,wBAAwBA,CACvCC,CAAO,EACwB;EAC/B,OAAOA,CAAC,CAACH,IAAI,KAAKH,kBAAkB,IAAIM,CAAC,CAACH,IAAI,KAAKJ,uBAAuB;AAC3E;AAEA,OAAO,SAASQ,YAAYA,CAAEC,IAAU,EAAG;EAC1C,IAAK,OAAOA,IAAI,CAACC,KAAK,KAAK,QAAQ,EAAG;IACrC,OAAOZ,cAAc,CAAEW,IAAI,CAACC,KAAM,CAAC;EACpC;EACA,IAAK,UAAU,IAAID,IAAI,CAACC,KAAK,EAAG;IAC/B,OAAOZ,cAAc,CAAEW,IAAI,CAACC,KAAK,CAACC,QAAS,CAAC;EAC7C;EACA,IAAK,KAAK,IAAIF,IAAI,CAACC,KAAK,EAAG;IAC1B,OAAOZ,cAAc,CAAEW,IAAI,CAACC,KAAK,CAACE,GAAI,CAAC;EACxC;EACA,OAAO,EAAE;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,mBAAmBA,CAAEC,QAAiC,EAAG;EACxE,IAAK,CAAEA,QAAQ,EAAG;IACjB,OAAO,KAAK;EACb;EACA;EACA;EACA;EACA,OACC,CAAEA,QAAQ,CAACC,MAAM,EAAED,QAAQ,CAACC,MAAM,CAAE,CAACC,QAAQ,CAC5CjB,gBAAgB,CAACkB,MAClB,CAAC,IACD,CAAEC,OAAO,CAAEJ,QAAQ,CAACV,IAAI,KAAK,aAAa,IAAIU,QAAQ,EAAEK,MAAO,CAAC,IAChE,CAAEL,QAAQ,CAACM,cAAc;AAE3B","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["@wordpress/editor/src/dataviews/types.ts"],"sourcesContent":["type PostStatus =\n\t| 'published'\n\t| 'draft'\n\t| 'pending'\n\t| 'private'\n\t| 'future'\n\t| 'auto-draft'\n\t| 'trash';\n\nexport interface CommonPost {\n\tstatus?: PostStatus;\n\ttitle: string | { rendered: string } | { raw: string };\n\tcontent: string | { raw: string; rendered: string };\n\ttype: string;\n\tid: string | number;\n\tblocks?: Object[];\n\t_links?: Links;\n}\n\ninterface Links {\n\t'predecessor-version'?: { href: string; id: number }[];\n\t'version-history'?: { href: string; count: number }[];\n\t[ key: string ]: { href: string }[] | undefined;\n}\n\nexport interface BasePost extends CommonPost {\n\tcomment_status?: 'open' | 'closed';\n\texcerpt?: string | { raw: string; rendered: string };\n\tmeta?: Record< string, any >;\n\tparent?: number;\n\tpassword?: string;\n\ttemplate?: string;\n\tformat?: string;\n\tfeatured_media?: number;\n\tmenu_order?: number;\n\tping_status?: 'open' | 'closed';\n\tlink?: string;\n}\n\nexport interface Template extends CommonPost {\n\ttype: 'wp_template';\n\tis_custom: boolean;\n\tsource: string;\n\torigin: string;\n\tplugin?: string;\n\thas_theme_file: boolean;\n\tid: string;\n}\n\nexport interface TemplatePart extends CommonPost {\n\ttype: 'wp_template_part';\n\tsource: string;\n\torigin: string;\n\thas_theme_file: boolean;\n\tid: string;\n\tarea: string;\n}\n\nexport interface Pattern extends CommonPost {\n\tslug: string;\n\ttitle: { raw: string };\n\twp_pattern_sync_status: string;\n}\n\nexport type Post = Template | TemplatePart | Pattern | BasePost;\n\nexport type PostWithPermissions = Post & {\n\tpermissions: {\n\t\tdelete: boolean;\n\t\tupdate: boolean;\n\t};\n};\n\nexport interface PostType {\n\tslug: string;\n\tviewable: boolean;\n\tsupports?: {\n\t\t'page-attributes'?: boolean;\n\t\ttitle?: boolean;\n\t\trevisions?: boolean;\n\t};\n}\n\n// Will be unnecessary after typescript 5.0 upgrade.\nexport type CoreDataError = { message?: string; code?: string };\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export default function CreateTemplatePartModal({ modalTitle, ...restProps }: {
|
|
2
|
-
[x: string]: any;
|
|
3
|
-
modalTitle: any;
|
|
4
|
-
}): import("react").JSX.Element;
|
|
5
|
-
export function CreateTemplatePartModalContents({ defaultArea, blocks, confirmLabel, closeModal, onCreate, onError, defaultTitle, }: {
|
|
6
|
-
defaultArea?: string | undefined;
|
|
7
|
-
blocks?: any[] | undefined;
|
|
8
|
-
confirmLabel?: string | undefined;
|
|
9
|
-
closeModal: any;
|
|
10
|
-
onCreate: any;
|
|
11
|
-
onError: any;
|
|
12
|
-
defaultTitle?: string | undefined;
|
|
13
|
-
}): import("react").JSX.Element;
|
|
14
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/create-template-part-modal/index.js"],"names":[],"mappings":"AAuCA;;;gCAqBC;AAED;;;;;;;;gCAmJC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export function useExistingTemplateParts(): (import("@wordpress/core-data").Attachment<any> | import("@wordpress/core-data").Comment<any> | import("@wordpress/core-data").GlobalStylesRevision<any> | import("@wordpress/core-data").MenuLocation<any> | import("@wordpress/core-data").NavMenu<any> | import("@wordpress/core-data").NavMenuItem<any> | import("@wordpress/core-data").Page<any> | import("@wordpress/core-data").Plugin<any> | import("@wordpress/core-data").Post<any> | import("@wordpress/core-data").PostRevision<any> | import("@wordpress/core-data").Settings<any> | import("@wordpress/core-data").Sidebar<any> | import("@wordpress/core-data").Taxonomy<any> | import("@wordpress/core-data").Theme<any> | import("@wordpress/core-data").User<any> | import("@wordpress/core-data").Type<any> | import("@wordpress/core-data").Widget<any> | import("@wordpress/core-data").WidgetType<any> | import("@wordpress/core-data").WpTemplate<any> | import("@wordpress/core-data").WpTemplatePart<any> | Partial<import("@wordpress/core-data").Attachment<any> | import("@wordpress/core-data").Comment<any> | import("@wordpress/core-data").GlobalStylesRevision<any> | import("@wordpress/core-data").MenuLocation<any> | import("@wordpress/core-data").NavMenu<any> | import("@wordpress/core-data").NavMenuItem<any> | import("@wordpress/core-data").Page<any> | import("@wordpress/core-data").Plugin<any> | import("@wordpress/core-data").Post<any> | import("@wordpress/core-data").PostRevision<any> | import("@wordpress/core-data").Settings<any> | import("@wordpress/core-data").Sidebar<any> | import("@wordpress/core-data").Taxonomy<any> | import("@wordpress/core-data").Theme<any> | import("@wordpress/core-data").User<any> | import("@wordpress/core-data").Type<any> | import("@wordpress/core-data").Widget<any> | import("@wordpress/core-data").WidgetType<any> | import("@wordpress/core-data").WpTemplate<any> | import("@wordpress/core-data").WpTemplatePart<any>>)[] | null;
|
|
2
|
-
export function getUniqueTemplatePartTitle(title: string, templateParts: Object): string;
|
|
3
|
-
export function getCleanTemplatePartSlug(title: string): string;
|
|
4
|
-
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/create-template-part-modal/utils.js"],"names":[],"mappings":"AAgBO,w6DAYN;AAUM,kDAJI,MAAM,iBACN,MAAM,GACL,MAAM,CAkBjB;AAUM,gDAHI,MAAM,GACL,MAAM,CAIjB"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wrapper component that renders its children only if the post type supports the slug.
|
|
3
|
-
*
|
|
4
|
-
* @param {Object} props Props.
|
|
5
|
-
* @param {React.ReactNode} props.children Children to be rendered.
|
|
6
|
-
*
|
|
7
|
-
* @return {React.ReactNode} The rendered component.
|
|
8
|
-
*/
|
|
9
|
-
export default function PostSlugCheck({ children }: {
|
|
10
|
-
children: React.ReactNode;
|
|
11
|
-
}): React.ReactNode;
|
|
12
|
-
//# sourceMappingURL=check.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/components/post-slug/check.js"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,oDAJG;IAA+B,QAAQ,EAA/B,KAAK,CAAC,SAAS;CAEvB,GAAS,KAAK,CAAC,SAAS,CAQ1B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/post-slug/index.js"],"names":[],"mappings":"AA6DA;;;;GAIG;AACH,oCAFY,KAAK,CAAC,SAAS,CAQ1B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../../src/components/post-slug/panel.js"],"names":[],"mappings":"AAWA,wDAQC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"duplicate-template-part.d.ts","sourceRoot":"","sources":["../../../src/dataviews/actions/duplicate-template-part.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAQnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,QAAA,MAAM,qBAAqB,EAAE,MAAM,CAAE,YAAY,CAgDhD,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Post, TemplatePart, Template } from '../types';
|
|
2
|
-
export declare function isTemplate(post: Post): post is Template;
|
|
3
|
-
export declare function isTemplatePart(post: Post): post is TemplatePart;
|
|
4
|
-
export declare function isTemplateOrTemplatePart(p: Post): p is Template | TemplatePart;
|
|
5
|
-
export declare function getItemTitle(item: Post): string;
|
|
6
|
-
/**
|
|
7
|
-
* Check if a template is removable.
|
|
8
|
-
*
|
|
9
|
-
* @param template The template entity to check.
|
|
10
|
-
* @return Whether the template is removable.
|
|
11
|
-
*/
|
|
12
|
-
export declare function isTemplateRemovable(template: Template | TemplatePart): boolean;
|
|
13
|
-
//# sourceMappingURL=utils.d.ts.map
|