@wordpress/edit-site 6.3.0 → 6.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.
- package/CHANGELOG.md +2 -0
- package/build/components/add-new-pattern/index.js +8 -2
- package/build/components/add-new-pattern/index.js.map +1 -1
- package/build/components/add-new-template/index.js +3 -1
- package/build/components/add-new-template/index.js.map +1 -1
- package/build/components/block-editor/use-site-editor-settings.js +1 -82
- package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
- package/build/components/global-styles/block-preview-panel.js +14 -5
- package/build/components/global-styles/block-preview-panel.js.map +1 -1
- package/build/components/global-styles/font-families.js +42 -23
- package/build/components/global-styles/font-families.js.map +1 -1
- package/build/components/global-styles/font-library-modal/index.js +4 -4
- package/build/components/global-styles/font-library-modal/index.js.map +1 -1
- package/build/components/global-styles/font-library-modal/installed-fonts.js +58 -10
- package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
- package/build/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +39 -0
- package/build/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js.map +1 -0
- package/build/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +39 -0
- package/build/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js.map +1 -0
- package/build/components/global-styles/font-sizes/font-size-preview.js +44 -0
- package/build/components/global-styles/font-sizes/font-size-preview.js.map +1 -0
- package/build/components/global-styles/font-sizes/font-size.js +213 -0
- package/build/components/global-styles/font-sizes/font-size.js.map +1 -0
- package/build/components/global-styles/font-sizes/font-sizes-count.js +50 -0
- package/build/components/global-styles/font-sizes/font-sizes-count.js.map +1 -0
- package/build/components/global-styles/font-sizes/font-sizes.js +163 -0
- package/build/components/global-styles/font-sizes/font-sizes.js.map +1 -0
- package/build/components/global-styles/font-sizes/rename-font-size-dialog.js +67 -0
- package/build/components/global-styles/font-sizes/rename-font-size-dialog.js.map +1 -0
- package/build/components/global-styles/screen-block.js +10 -8
- package/build/components/global-styles/screen-block.js.map +1 -1
- package/build/components/global-styles/screen-style-variations.js +2 -2
- package/build/components/global-styles/screen-style-variations.js.map +1 -1
- package/build/components/global-styles/screen-typography.js +3 -2
- package/build/components/global-styles/screen-typography.js.map +1 -1
- package/build/components/global-styles/size-control/index.js +85 -0
- package/build/components/global-styles/size-control/index.js.map +1 -0
- package/build/components/global-styles/style-variations-container.js +3 -0
- package/build/components/global-styles/style-variations-container.js.map +1 -1
- package/build/components/global-styles/ui.js +8 -0
- package/build/components/global-styles/ui.js.map +1 -1
- package/build/components/global-styles/variations/variations-color.js.map +1 -1
- package/build/components/global-styles/variations/variations-typography.js +1 -1
- package/build/components/global-styles/variations/variations-typography.js.map +1 -1
- package/build/components/layout/index.js +6 -0
- package/build/components/layout/index.js.map +1 -1
- package/build/components/layout/router.js +14 -6
- package/build/components/layout/router.js.map +1 -1
- package/build/components/page-patterns/header.js +1 -1
- package/build/components/page-patterns/header.js.map +1 -1
- package/build/components/page-patterns/index.js +23 -11
- package/build/components/page-patterns/index.js.map +1 -1
- package/build/components/page-templates/index.js +41 -34
- package/build/components/page-templates/index.js.map +1 -1
- package/build/components/post-edit/index.js +105 -0
- package/build/components/post-edit/index.js.map +1 -0
- package/build/components/post-fields/index.js +314 -0
- package/build/components/post-fields/index.js.map +1 -0
- package/build/components/post-list/index.js +281 -0
- package/build/components/post-list/index.js.map +1 -0
- package/build/components/posts-app/router.js +3 -3
- package/build/components/posts-app/router.js.map +1 -1
- package/build/components/sidebar-dataviews/default-views.js +22 -10
- package/build/components/sidebar-dataviews/default-views.js.map +1 -1
- package/build/components/sidebar-dataviews/index.js +40 -1
- package/build/components/sidebar-dataviews/index.js.map +1 -1
- package/build/components/sidebar-navigation-screen-global-styles/content.js +64 -0
- package/build/components/sidebar-navigation-screen-global-styles/content.js.map +1 -0
- package/build/components/sidebar-navigation-screen-global-styles/index.js +2 -47
- package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
- package/build/hooks/push-changes-to-global-styles/index.js +1 -1
- package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
- package/build/index.js +5 -1
- package/build/index.js.map +1 -1
- package/build/store/selectors.js +34 -6
- package/build/store/selectors.js.map +1 -1
- package/build/utils/get-filtered-template-parts.js +64 -0
- package/build/utils/get-filtered-template-parts.js.map +1 -0
- package/build-module/components/add-new-pattern/index.js +8 -2
- package/build-module/components/add-new-pattern/index.js.map +1 -1
- package/build-module/components/add-new-template/index.js +3 -1
- package/build-module/components/add-new-template/index.js.map +1 -1
- package/build-module/components/block-editor/use-site-editor-settings.js +1 -82
- package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
- package/build-module/components/global-styles/block-preview-panel.js +14 -5
- package/build-module/components/global-styles/block-preview-panel.js.map +1 -1
- package/build-module/components/global-styles/font-families.js +44 -25
- package/build-module/components/global-styles/font-families.js.map +1 -1
- package/build-module/components/global-styles/font-library-modal/index.js +4 -4
- package/build-module/components/global-styles/font-library-modal/index.js.map +1 -1
- package/build-module/components/global-styles/font-library-modal/installed-fonts.js +61 -13
- package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
- package/build-module/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +32 -0
- package/build-module/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js.map +1 -0
- package/build-module/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +32 -0
- package/build-module/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js.map +1 -0
- package/build-module/components/global-styles/font-sizes/font-size-preview.js +37 -0
- package/build-module/components/global-styles/font-sizes/font-size-preview.js.map +1 -0
- package/build-module/components/global-styles/font-sizes/font-size.js +207 -0
- package/build-module/components/global-styles/font-sizes/font-size.js.map +1 -0
- package/build-module/components/global-styles/font-sizes/font-sizes-count.js +43 -0
- package/build-module/components/global-styles/font-sizes/font-sizes-count.js.map +1 -0
- package/build-module/components/global-styles/font-sizes/font-sizes.js +157 -0
- package/build-module/components/global-styles/font-sizes/font-sizes.js.map +1 -0
- package/build-module/components/global-styles/font-sizes/rename-font-size-dialog.js +61 -0
- package/build-module/components/global-styles/font-sizes/rename-font-size-dialog.js.map +1 -0
- package/build-module/components/global-styles/screen-block.js +10 -8
- package/build-module/components/global-styles/screen-block.js.map +1 -1
- package/build-module/components/global-styles/screen-style-variations.js +2 -2
- package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
- package/build-module/components/global-styles/screen-typography.js +3 -2
- package/build-module/components/global-styles/screen-typography.js.map +1 -1
- package/build-module/components/global-styles/size-control/index.js +79 -0
- package/build-module/components/global-styles/size-control/index.js.map +1 -0
- package/build-module/components/global-styles/style-variations-container.js +3 -0
- package/build-module/components/global-styles/style-variations-container.js.map +1 -1
- package/build-module/components/global-styles/ui.js +8 -0
- package/build-module/components/global-styles/ui.js.map +1 -1
- package/build-module/components/global-styles/variations/variations-color.js +1 -1
- package/build-module/components/global-styles/variations/variations-color.js.map +1 -1
- package/build-module/components/global-styles/variations/variations-typography.js +1 -2
- package/build-module/components/global-styles/variations/variations-typography.js.map +1 -1
- package/build-module/components/layout/index.js +6 -0
- package/build-module/components/layout/index.js.map +1 -1
- package/build-module/components/layout/router.js +14 -6
- package/build-module/components/layout/router.js.map +1 -1
- package/build-module/components/page-patterns/header.js +1 -1
- package/build-module/components/page-patterns/header.js.map +1 -1
- package/build-module/components/page-patterns/index.js +23 -11
- package/build-module/components/page-patterns/index.js.map +1 -1
- package/build-module/components/page-templates/index.js +43 -37
- package/build-module/components/page-templates/index.js.map +1 -1
- package/build-module/components/post-edit/index.js +98 -0
- package/build-module/components/post-edit/index.js.map +1 -0
- package/build-module/components/post-fields/index.js +306 -0
- package/build-module/components/post-fields/index.js.map +1 -0
- package/build-module/components/post-list/index.js +275 -0
- package/build-module/components/post-list/index.js.map +1 -0
- package/build-module/components/posts-app/router.js +3 -3
- package/build-module/components/posts-app/router.js.map +1 -1
- package/build-module/components/sidebar-dataviews/default-views.js +21 -9
- package/build-module/components/sidebar-dataviews/default-views.js.map +1 -1
- package/build-module/components/sidebar-dataviews/index.js +42 -3
- package/build-module/components/sidebar-dataviews/index.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-global-styles/content.js +57 -0
- package/build-module/components/sidebar-navigation-screen-global-styles/content.js.map +1 -0
- package/build-module/components/sidebar-navigation-screen-global-styles/index.js +2 -47
- package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
- package/build-module/hooks/push-changes-to-global-styles/index.js +1 -1
- package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
- package/build-module/index.js +5 -1
- package/build-module/index.js.map +1 -1
- package/build-module/store/selectors.js +35 -7
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/utils/get-filtered-template-parts.js +57 -0
- package/build-module/utils/get-filtered-template-parts.js.map +1 -0
- package/build-style/posts-rtl.css +581 -503
- package/build-style/posts.css +581 -503
- package/build-style/style-rtl.css +621 -519
- package/build-style/style.css +621 -519
- package/package.json +41 -41
- package/src/components/add-new-pattern/index.js +8 -2
- package/src/components/add-new-template/index.js +4 -1
- package/src/components/add-new-template/style.scss +4 -6
- package/src/components/block-editor/use-site-editor-settings.js +15 -111
- package/src/components/global-styles/block-preview-panel.js +22 -9
- package/src/components/global-styles/font-families.js +66 -31
- package/src/components/global-styles/font-library-modal/index.js +4 -2
- package/src/components/global-styles/font-library-modal/installed-fonts.js +92 -11
- package/src/components/global-styles/font-library-modal/style.scss +9 -0
- package/src/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js +43 -0
- package/src/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js +37 -0
- package/src/components/global-styles/font-sizes/font-size-preview.js +43 -0
- package/src/components/global-styles/font-sizes/font-size.js +250 -0
- package/src/components/global-styles/font-sizes/font-sizes-count.js +40 -0
- package/src/components/global-styles/font-sizes/font-sizes.js +263 -0
- package/src/components/global-styles/font-sizes/rename-font-size-dialog.js +70 -0
- package/src/components/global-styles/screen-block.js +12 -14
- package/src/components/global-styles/screen-style-variations.js +2 -2
- package/src/components/global-styles/screen-typography.js +3 -2
- package/src/components/global-styles/size-control/index.js +86 -0
- package/src/components/global-styles/style-variations-container.js +4 -0
- package/src/components/global-styles/style.scss +13 -3
- package/src/components/global-styles/ui.js +10 -0
- package/src/components/global-styles/variations/variations-color.js +1 -1
- package/src/components/global-styles/variations/variations-typography.js +1 -2
- package/src/components/layout/index.js +11 -0
- package/src/components/layout/router.js +13 -5
- package/src/components/layout/style.scss +26 -8
- package/src/components/page-patterns/header.js +1 -1
- package/src/components/page-patterns/index.js +15 -8
- package/src/components/page-templates/index.js +51 -46
- package/src/components/page-templates/style.scss +5 -3
- package/src/components/post-edit/index.js +96 -0
- package/src/components/post-edit/style.scss +9 -0
- package/src/components/post-fields/index.js +345 -0
- package/src/components/post-list/index.js +326 -0
- package/src/components/{posts-app → post-list}/style.scss +12 -9
- package/src/components/posts-app/router.js +3 -3
- package/src/components/sidebar-dataviews/default-views.js +21 -9
- package/src/components/sidebar-dataviews/index.js +36 -1
- package/src/components/sidebar-navigation-screen-global-styles/content.js +55 -0
- package/src/components/sidebar-navigation-screen-global-styles/index.js +1 -55
- package/src/hooks/push-changes-to-global-styles/index.js +1 -1
- package/src/index.js +7 -1
- package/src/posts.scss +1 -1
- package/src/store/selectors.js +53 -14
- package/src/store/test/selectors.js +1 -26
- package/src/style.scss +2 -1
- package/src/utils/get-filtered-template-parts.js +61 -0
- package/src/utils/test/get-filtered-template-parts.js +127 -0
- package/build/components/global-styles/screen-background.js +0 -36
- package/build/components/global-styles/screen-background.js.map +0 -1
- package/build/components/posts-app/posts-list.js +0 -568
- package/build/components/posts-app/posts-list.js.map +0 -1
- package/build-module/components/global-styles/screen-background.js +0 -30
- package/build-module/components/global-styles/screen-background.js.map +0 -1
- package/build-module/components/posts-app/posts-list.js +0 -560
- package/build-module/components/posts-app/posts-list.js.map +0 -1
- package/src/components/global-styles/screen-background.js +0 -29
- package/src/components/posts-app/posts-list.js +0 -651
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
|
|
5
|
+
import { __, sprintf, isRTL } from '@wordpress/i18n';
|
|
6
|
+
import {
|
|
7
|
+
privateApis as componentsPrivateApis,
|
|
8
|
+
__experimentalSpacer as Spacer,
|
|
9
|
+
__experimentalView as View,
|
|
10
|
+
__experimentalItemGroup as ItemGroup,
|
|
11
|
+
__experimentalVStack as VStack,
|
|
12
|
+
__experimentalHStack as HStack,
|
|
13
|
+
FlexItem,
|
|
14
|
+
FlexBlock,
|
|
15
|
+
Button,
|
|
16
|
+
} from '@wordpress/components';
|
|
17
|
+
import {
|
|
18
|
+
Icon,
|
|
19
|
+
plus,
|
|
20
|
+
moreVertical,
|
|
21
|
+
chevronLeft,
|
|
22
|
+
chevronRight,
|
|
23
|
+
} from '@wordpress/icons';
|
|
24
|
+
import { useState } from '@wordpress/element';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Internal dependencies
|
|
28
|
+
*/
|
|
29
|
+
import { unlock } from '../../../lock-unlock';
|
|
30
|
+
const {
|
|
31
|
+
DropdownMenuV2: DropdownMenu,
|
|
32
|
+
DropdownMenuItemV2: DropdownMenuItem,
|
|
33
|
+
DropdownMenuItemLabelV2: DropdownMenuItemLabel,
|
|
34
|
+
} = unlock( componentsPrivateApis );
|
|
35
|
+
const { useGlobalSetting } = unlock( blockEditorPrivateApis );
|
|
36
|
+
import Subtitle from '../subtitle';
|
|
37
|
+
import { NavigationButtonAsItem } from '../navigation-button';
|
|
38
|
+
import { getNewIndexFromPresets } from '../utils';
|
|
39
|
+
import ScreenHeader from '../header';
|
|
40
|
+
import ConfirmResetFontSizesDialog from './confirm-reset-font-sizes-dialog';
|
|
41
|
+
|
|
42
|
+
function FontSizeGroup( {
|
|
43
|
+
label,
|
|
44
|
+
origin,
|
|
45
|
+
sizes,
|
|
46
|
+
handleAddFontSize,
|
|
47
|
+
handleResetFontSizes,
|
|
48
|
+
} ) {
|
|
49
|
+
const [ isResetDialogOpen, setIsResetDialogOpen ] = useState( false );
|
|
50
|
+
|
|
51
|
+
const toggleResetDialog = () => setIsResetDialogOpen( ! isResetDialogOpen );
|
|
52
|
+
|
|
53
|
+
const resetDialogText =
|
|
54
|
+
origin === 'custom'
|
|
55
|
+
? __(
|
|
56
|
+
'Are you sure you want to remove all custom font size presets?'
|
|
57
|
+
)
|
|
58
|
+
: __(
|
|
59
|
+
'Are you sure you want to reset all font size presets to their default values?'
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<>
|
|
64
|
+
{ isResetDialogOpen && (
|
|
65
|
+
<ConfirmResetFontSizesDialog
|
|
66
|
+
text={ resetDialogText }
|
|
67
|
+
confirmButtonText={
|
|
68
|
+
origin === 'custom' ? __( 'Remove' ) : __( 'Reset' )
|
|
69
|
+
}
|
|
70
|
+
isOpen={ isResetDialogOpen }
|
|
71
|
+
toggleOpen={ toggleResetDialog }
|
|
72
|
+
onConfirm={ handleResetFontSizes }
|
|
73
|
+
/>
|
|
74
|
+
) }
|
|
75
|
+
<VStack spacing={ 4 }>
|
|
76
|
+
<HStack justify="space-between" align="center">
|
|
77
|
+
<Subtitle level={ 3 }>{ label }</Subtitle>
|
|
78
|
+
<FlexItem>
|
|
79
|
+
{ origin === 'custom' && (
|
|
80
|
+
<Button
|
|
81
|
+
label={ __( 'Add font size' ) }
|
|
82
|
+
icon={ plus }
|
|
83
|
+
size="small"
|
|
84
|
+
onClick={ handleAddFontSize }
|
|
85
|
+
/>
|
|
86
|
+
) }
|
|
87
|
+
{ !! handleResetFontSizes && (
|
|
88
|
+
<DropdownMenu
|
|
89
|
+
trigger={
|
|
90
|
+
<Button
|
|
91
|
+
size="small"
|
|
92
|
+
icon={ moreVertical }
|
|
93
|
+
label={ __(
|
|
94
|
+
'Font size presets options'
|
|
95
|
+
) }
|
|
96
|
+
/>
|
|
97
|
+
}
|
|
98
|
+
>
|
|
99
|
+
<DropdownMenuItem onClick={ toggleResetDialog }>
|
|
100
|
+
<DropdownMenuItemLabel>
|
|
101
|
+
{ origin === 'custom'
|
|
102
|
+
? __( 'Remove font size presets' )
|
|
103
|
+
: __( 'Reset font size presets' ) }
|
|
104
|
+
</DropdownMenuItemLabel>
|
|
105
|
+
</DropdownMenuItem>
|
|
106
|
+
</DropdownMenu>
|
|
107
|
+
) }
|
|
108
|
+
</FlexItem>
|
|
109
|
+
</HStack>
|
|
110
|
+
|
|
111
|
+
{ !! sizes.length && (
|
|
112
|
+
<ItemGroup isBordered isSeparated>
|
|
113
|
+
{ sizes.map( ( size ) => (
|
|
114
|
+
<NavigationButtonAsItem
|
|
115
|
+
key={ size.slug }
|
|
116
|
+
path={ `/typography/font-sizes/${ origin }/${ size.slug }` }
|
|
117
|
+
>
|
|
118
|
+
<HStack direction="row">
|
|
119
|
+
<FlexItem className="edit-site-font-size__item">
|
|
120
|
+
{ size.name }
|
|
121
|
+
</FlexItem>
|
|
122
|
+
<FlexItem>
|
|
123
|
+
<HStack justify="flex-end">
|
|
124
|
+
<FlexBlock className="edit-site-font-size__item edit-site-font-size__item-value">
|
|
125
|
+
{ size.size }
|
|
126
|
+
</FlexBlock>
|
|
127
|
+
<Icon
|
|
128
|
+
icon={
|
|
129
|
+
isRTL()
|
|
130
|
+
? chevronLeft
|
|
131
|
+
: chevronRight
|
|
132
|
+
}
|
|
133
|
+
/>
|
|
134
|
+
</HStack>
|
|
135
|
+
</FlexItem>
|
|
136
|
+
</HStack>
|
|
137
|
+
</NavigationButtonAsItem>
|
|
138
|
+
) ) }
|
|
139
|
+
</ItemGroup>
|
|
140
|
+
) }
|
|
141
|
+
</VStack>
|
|
142
|
+
</>
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function FontSizes() {
|
|
147
|
+
const [ themeFontSizes, setThemeFontSizes ] = useGlobalSetting(
|
|
148
|
+
'typography.fontSizes.theme'
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
const [ baseThemeFontSizes ] = useGlobalSetting(
|
|
152
|
+
'typography.fontSizes.theme',
|
|
153
|
+
null,
|
|
154
|
+
'base'
|
|
155
|
+
);
|
|
156
|
+
const [ defaultFontSizes, setDefaultFontSizes ] = useGlobalSetting(
|
|
157
|
+
'typography.fontSizes.default'
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
const [ baseDefaultFontSizes ] = useGlobalSetting(
|
|
161
|
+
'typography.fontSizes.default',
|
|
162
|
+
null,
|
|
163
|
+
'base'
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
const [ customFontSizes = [], setCustomFontSizes ] = useGlobalSetting(
|
|
167
|
+
'typography.fontSizes.custom'
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
const [ defaultFontSizesEnabled ] = useGlobalSetting(
|
|
171
|
+
'typography.defaultFontSizes'
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
const handleAddFontSize = () => {
|
|
175
|
+
const index = getNewIndexFromPresets( customFontSizes, 'custom-' );
|
|
176
|
+
const newFontSize = {
|
|
177
|
+
/* translators: %d: font size index */
|
|
178
|
+
name: sprintf( __( 'New Font Size %d' ), index ),
|
|
179
|
+
size: '16px',
|
|
180
|
+
slug: `custom-${ index }`,
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
setCustomFontSizes( [ ...customFontSizes, newFontSize ] );
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
const hasSameSizeValues = ( arr1, arr2 ) =>
|
|
187
|
+
arr1.map( ( item ) => item.size ).join( '' ) ===
|
|
188
|
+
arr2.map( ( item ) => item.size ).join( '' );
|
|
189
|
+
|
|
190
|
+
return (
|
|
191
|
+
<VStack spacing={ 2 }>
|
|
192
|
+
<ScreenHeader
|
|
193
|
+
title={ __( 'Font size presets' ) }
|
|
194
|
+
description={ __(
|
|
195
|
+
'Create and edit the presets used for font sizes across the site.'
|
|
196
|
+
) }
|
|
197
|
+
/>
|
|
198
|
+
|
|
199
|
+
<View>
|
|
200
|
+
<Spacer paddingX={ 4 }>
|
|
201
|
+
<VStack spacing={ 8 }>
|
|
202
|
+
{ !! themeFontSizes?.length && (
|
|
203
|
+
<FontSizeGroup
|
|
204
|
+
label={ __( 'Theme' ) }
|
|
205
|
+
origin="theme"
|
|
206
|
+
sizes={ themeFontSizes }
|
|
207
|
+
baseSizes={ baseThemeFontSizes }
|
|
208
|
+
handleAddFontSize={ handleAddFontSize }
|
|
209
|
+
handleResetFontSizes={
|
|
210
|
+
hasSameSizeValues(
|
|
211
|
+
themeFontSizes,
|
|
212
|
+
baseThemeFontSizes
|
|
213
|
+
)
|
|
214
|
+
? null
|
|
215
|
+
: () =>
|
|
216
|
+
setThemeFontSizes(
|
|
217
|
+
baseThemeFontSizes
|
|
218
|
+
)
|
|
219
|
+
}
|
|
220
|
+
/>
|
|
221
|
+
) }
|
|
222
|
+
|
|
223
|
+
{ defaultFontSizesEnabled &&
|
|
224
|
+
!! defaultFontSizes?.length && (
|
|
225
|
+
<FontSizeGroup
|
|
226
|
+
label={ __( 'Default' ) }
|
|
227
|
+
origin="default"
|
|
228
|
+
sizes={ defaultFontSizes }
|
|
229
|
+
baseSizes={ baseDefaultFontSizes }
|
|
230
|
+
handleAddFontSize={ handleAddFontSize }
|
|
231
|
+
handleResetFontSizes={
|
|
232
|
+
hasSameSizeValues(
|
|
233
|
+
defaultFontSizes,
|
|
234
|
+
baseDefaultFontSizes
|
|
235
|
+
)
|
|
236
|
+
? null
|
|
237
|
+
: () =>
|
|
238
|
+
setDefaultFontSizes(
|
|
239
|
+
baseDefaultFontSizes
|
|
240
|
+
)
|
|
241
|
+
}
|
|
242
|
+
/>
|
|
243
|
+
) }
|
|
244
|
+
|
|
245
|
+
<FontSizeGroup
|
|
246
|
+
label={ __( 'Custom' ) }
|
|
247
|
+
origin="custom"
|
|
248
|
+
sizes={ customFontSizes }
|
|
249
|
+
handleAddFontSize={ handleAddFontSize }
|
|
250
|
+
handleResetFontSizes={
|
|
251
|
+
customFontSizes.length > 0
|
|
252
|
+
? () => setCustomFontSizes( [] )
|
|
253
|
+
: null
|
|
254
|
+
}
|
|
255
|
+
/>
|
|
256
|
+
</VStack>
|
|
257
|
+
</Spacer>
|
|
258
|
+
</View>
|
|
259
|
+
</VStack>
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
export default FontSizes;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
__experimentalInputControl as InputControl,
|
|
6
|
+
__experimentalVStack as VStack,
|
|
7
|
+
__experimentalHStack as HStack,
|
|
8
|
+
Button,
|
|
9
|
+
Modal,
|
|
10
|
+
} from '@wordpress/components';
|
|
11
|
+
import { __ } from '@wordpress/i18n';
|
|
12
|
+
import { useState } from '@wordpress/element';
|
|
13
|
+
|
|
14
|
+
function RenameFontSizeDialog( { fontSize, toggleOpen, handleRename } ) {
|
|
15
|
+
const [ newName, setNewName ] = useState( fontSize.name );
|
|
16
|
+
|
|
17
|
+
const handleConfirm = () => {
|
|
18
|
+
// If the new name is not empty, call the handleRename function
|
|
19
|
+
if ( newName.trim() ) {
|
|
20
|
+
handleRename( newName );
|
|
21
|
+
}
|
|
22
|
+
toggleOpen();
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<Modal
|
|
27
|
+
onRequestClose={ toggleOpen }
|
|
28
|
+
focusOnMount="firstContentElement"
|
|
29
|
+
title={ __( 'Rename' ) }
|
|
30
|
+
size="small"
|
|
31
|
+
>
|
|
32
|
+
<form
|
|
33
|
+
onSubmit={ ( event ) => {
|
|
34
|
+
event.preventDefault();
|
|
35
|
+
handleConfirm();
|
|
36
|
+
toggleOpen();
|
|
37
|
+
} }
|
|
38
|
+
>
|
|
39
|
+
<VStack spacing="3">
|
|
40
|
+
<InputControl
|
|
41
|
+
__next40pxDefaultSize
|
|
42
|
+
autoComplete="off"
|
|
43
|
+
value={ newName }
|
|
44
|
+
onChange={ setNewName }
|
|
45
|
+
label={ __( 'Name' ) }
|
|
46
|
+
placeholder={ __( 'Font size preset name' ) }
|
|
47
|
+
/>
|
|
48
|
+
<HStack justify="right">
|
|
49
|
+
<Button
|
|
50
|
+
__next40pxDefaultSize
|
|
51
|
+
variant="tertiary"
|
|
52
|
+
onClick={ toggleOpen }
|
|
53
|
+
>
|
|
54
|
+
{ __( 'Cancel' ) }
|
|
55
|
+
</Button>
|
|
56
|
+
<Button
|
|
57
|
+
__next40pxDefaultSize
|
|
58
|
+
variant="primary"
|
|
59
|
+
type="submit"
|
|
60
|
+
>
|
|
61
|
+
{ __( 'Save' ) }
|
|
62
|
+
</Button>
|
|
63
|
+
</HStack>
|
|
64
|
+
</VStack>
|
|
65
|
+
</form>
|
|
66
|
+
</Modal>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export default RenameFontSizeDialog;
|
|
@@ -84,6 +84,7 @@ const {
|
|
|
84
84
|
FiltersPanel: StylesFiltersPanel,
|
|
85
85
|
ImageSettingsPanel,
|
|
86
86
|
AdvancedPanel: StylesAdvancedPanel,
|
|
87
|
+
useGlobalStyleLinks,
|
|
87
88
|
} = unlock( blockEditorPrivateApis );
|
|
88
89
|
|
|
89
90
|
function ScreenBlock( { name, variation } ) {
|
|
@@ -103,6 +104,7 @@ function ScreenBlock( { name, variation } ) {
|
|
|
103
104
|
const [ rawSettings, setSettings ] = useGlobalSetting( '', name );
|
|
104
105
|
const settings = useSettingsForBlockElement( rawSettings, name );
|
|
105
106
|
const blockType = getBlockType( name );
|
|
107
|
+
const _links = useGlobalStyleLinks();
|
|
106
108
|
|
|
107
109
|
// Only allow `blockGap` support if serialization has not been skipped, to be sure global spacing can be applied.
|
|
108
110
|
if (
|
|
@@ -262,6 +264,16 @@ function ScreenBlock( { name, variation } ) {
|
|
|
262
264
|
settings={ settings }
|
|
263
265
|
/>
|
|
264
266
|
) }
|
|
267
|
+
{ hasBackgroundPanel && (
|
|
268
|
+
<StylesBackgroundPanel
|
|
269
|
+
inheritedValue={ inheritedStyle }
|
|
270
|
+
value={ style }
|
|
271
|
+
onChange={ setStyle }
|
|
272
|
+
settings={ settings }
|
|
273
|
+
defaultValues={ BACKGROUND_BLOCK_DEFAULT_VALUES }
|
|
274
|
+
themeFileURIs={ _links?.[ 'wp:theme-file' ] }
|
|
275
|
+
/>
|
|
276
|
+
) }
|
|
265
277
|
{ hasTypographyPanel && (
|
|
266
278
|
<StylesTypographyPanel
|
|
267
279
|
inheritedValue={ inheritedStyle }
|
|
@@ -304,20 +316,6 @@ function ScreenBlock( { name, variation } ) {
|
|
|
304
316
|
/>
|
|
305
317
|
) }
|
|
306
318
|
|
|
307
|
-
{ hasBackgroundPanel && (
|
|
308
|
-
<StylesBackgroundPanel
|
|
309
|
-
inheritedValue={ inheritedStyle }
|
|
310
|
-
value={ style }
|
|
311
|
-
onChange={ setStyle }
|
|
312
|
-
settings={ settings }
|
|
313
|
-
defaultValues={ BACKGROUND_BLOCK_DEFAULT_VALUES }
|
|
314
|
-
defaultControls={
|
|
315
|
-
blockType?.supports?.background
|
|
316
|
-
?.__experimentalDefaultControls
|
|
317
|
-
}
|
|
318
|
-
/>
|
|
319
|
-
) }
|
|
320
|
-
|
|
321
319
|
{ canEditCSS && (
|
|
322
320
|
<PanelBody title={ __( 'Advanced' ) } initialOpen={ false }>
|
|
323
321
|
<p>
|
|
@@ -9,7 +9,7 @@ import { useZoomOut } from '@wordpress/block-editor';
|
|
|
9
9
|
* Internal dependencies
|
|
10
10
|
*/
|
|
11
11
|
import ScreenHeader from './header';
|
|
12
|
-
import
|
|
12
|
+
import SidebarNavigationScreenGlobalStylesContent from '../sidebar-navigation-screen-global-styles/content';
|
|
13
13
|
|
|
14
14
|
function ScreenStyleVariations() {
|
|
15
15
|
// Move to zoom out mode when this component is mounted
|
|
@@ -31,7 +31,7 @@ function ScreenStyleVariations() {
|
|
|
31
31
|
className="edit-site-global-styles-screen-style-variations"
|
|
32
32
|
>
|
|
33
33
|
<CardBody>
|
|
34
|
-
<
|
|
34
|
+
<SidebarNavigationScreenGlobalStylesContent />
|
|
35
35
|
</CardBody>
|
|
36
36
|
</Card>
|
|
37
37
|
</>
|
|
@@ -13,6 +13,7 @@ import TypographyElements from './typography-elements';
|
|
|
13
13
|
import TypographyVariations from './variations/variations-typography';
|
|
14
14
|
import FontFamilies from './font-families';
|
|
15
15
|
import ScreenHeader from './header';
|
|
16
|
+
import FontSizesCount from './font-sizes/font-sizes-count';
|
|
16
17
|
|
|
17
18
|
function ScreenTypography() {
|
|
18
19
|
const fontLibraryEnabled = useSelect(
|
|
@@ -31,10 +32,10 @@ function ScreenTypography() {
|
|
|
31
32
|
/>
|
|
32
33
|
<div className="edit-site-global-styles-screen">
|
|
33
34
|
<VStack spacing={ 7 }>
|
|
34
|
-
{
|
|
35
|
-
fontLibraryEnabled && <FontFamilies /> }
|
|
35
|
+
{ fontLibraryEnabled && <FontFamilies /> }
|
|
36
36
|
<TypographyElements />
|
|
37
37
|
<TypographyVariations title={ __( 'Presets' ) } />
|
|
38
|
+
<FontSizesCount />
|
|
38
39
|
</VStack>
|
|
39
40
|
</div>
|
|
40
41
|
</>
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import {
|
|
10
|
+
BaseControl,
|
|
11
|
+
RangeControl,
|
|
12
|
+
Flex,
|
|
13
|
+
FlexItem,
|
|
14
|
+
useBaseControlProps,
|
|
15
|
+
__experimentalUseCustomUnits as useCustomUnits,
|
|
16
|
+
__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,
|
|
17
|
+
__experimentalUnitControl as UnitControl,
|
|
18
|
+
__experimentalSpacer as Spacer,
|
|
19
|
+
} from '@wordpress/components';
|
|
20
|
+
|
|
21
|
+
const DEFAULT_UNITS = [ 'px', 'em', 'rem', 'vw', 'vh' ];
|
|
22
|
+
|
|
23
|
+
function SizeControl( props ) {
|
|
24
|
+
const { baseControlProps } = useBaseControlProps( props );
|
|
25
|
+
const { value, onChange, fallbackValue, disabled } = props;
|
|
26
|
+
|
|
27
|
+
const units = useCustomUnits( {
|
|
28
|
+
availableUnits: DEFAULT_UNITS,
|
|
29
|
+
} );
|
|
30
|
+
|
|
31
|
+
const [ valueQuantity, valueUnit = 'px' ] =
|
|
32
|
+
parseQuantityAndUnitFromRawValue( value, units );
|
|
33
|
+
|
|
34
|
+
const isValueUnitRelative =
|
|
35
|
+
!! valueUnit && [ 'em', 'rem', 'vw', 'vh' ].includes( valueUnit );
|
|
36
|
+
|
|
37
|
+
// Receives the new value from the UnitControl component as a string containing the value and unit.
|
|
38
|
+
const handleUnitControlChange = ( newValue ) => {
|
|
39
|
+
onChange( newValue );
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// Receives the new value from the RangeControl component as a number.
|
|
43
|
+
const handleRangeControlChange = ( newValue ) => {
|
|
44
|
+
onChange?.( newValue + valueUnit );
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<BaseControl { ...baseControlProps }>
|
|
49
|
+
<Flex>
|
|
50
|
+
<FlexItem isBlock>
|
|
51
|
+
<UnitControl
|
|
52
|
+
__next40pxDefaultSize
|
|
53
|
+
__nextHasNoMarginBottom
|
|
54
|
+
label={ __( 'Custom' ) }
|
|
55
|
+
hideLabelFromVision
|
|
56
|
+
value={ value }
|
|
57
|
+
onChange={ handleUnitControlChange }
|
|
58
|
+
units={ units }
|
|
59
|
+
min={ 0 }
|
|
60
|
+
disabled={ disabled }
|
|
61
|
+
/>
|
|
62
|
+
</FlexItem>
|
|
63
|
+
<FlexItem isBlock>
|
|
64
|
+
<Spacer marginX={ 2 } marginBottom={ 0 }>
|
|
65
|
+
<RangeControl
|
|
66
|
+
__next40pxDefaultSize
|
|
67
|
+
__nextHasNoMarginBottom
|
|
68
|
+
label={ __( 'Custom Size' ) }
|
|
69
|
+
hideLabelFromVision
|
|
70
|
+
value={ valueQuantity }
|
|
71
|
+
initialPosition={ fallbackValue }
|
|
72
|
+
withInputField={ false }
|
|
73
|
+
onChange={ handleRangeControlChange }
|
|
74
|
+
min={ 0 }
|
|
75
|
+
max={ isValueUnitRelative ? 10 : 100 }
|
|
76
|
+
step={ isValueUnitRelative ? 0.1 : 1 }
|
|
77
|
+
disabled={ disabled }
|
|
78
|
+
/>
|
|
79
|
+
</Spacer>
|
|
80
|
+
</FlexItem>
|
|
81
|
+
</Flex>
|
|
82
|
+
</BaseControl>
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export default SizeControl;
|
|
@@ -110,6 +110,10 @@ export default function StyleVariationsContainer( { gap = 2 } ) {
|
|
|
110
110
|
];
|
|
111
111
|
}, [ fullStyleVariations, userStyles?.blocks, userStyles?.css ] );
|
|
112
112
|
|
|
113
|
+
if ( ! fullStyleVariations || fullStyleVariations?.length < 1 ) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
|
|
113
117
|
return (
|
|
114
118
|
<Grid
|
|
115
119
|
columns={ 2 }
|
|
@@ -23,6 +23,17 @@
|
|
|
23
23
|
overflow: hidden;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
.edit-site-font-size__item {
|
|
27
|
+
white-space: nowrap;
|
|
28
|
+
text-overflow: ellipsis;
|
|
29
|
+
overflow: hidden;
|
|
30
|
+
line-break: anywhere;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.edit-site-font-size__item-value {
|
|
34
|
+
color: $gray-700;
|
|
35
|
+
}
|
|
36
|
+
|
|
26
37
|
.edit-site-global-styles-screen {
|
|
27
38
|
margin: $grid-unit-15 $grid-unit-20 $grid-unit-20;
|
|
28
39
|
}
|
|
@@ -41,7 +52,6 @@
|
|
|
41
52
|
color: $gray-700;
|
|
42
53
|
}
|
|
43
54
|
|
|
44
|
-
.edit-site-global-styles-font-families__add-fonts,
|
|
45
55
|
.edit-site-global-styles-font-families__manage-fonts {
|
|
46
56
|
justify-content: center;
|
|
47
57
|
}
|
|
@@ -102,13 +112,13 @@
|
|
|
102
112
|
.edit-site-global-styles__block-preview-panel {
|
|
103
113
|
position: relative;
|
|
104
114
|
width: 100%;
|
|
105
|
-
overflow: auto;
|
|
106
115
|
border: $gray-200 $border-width solid;
|
|
107
116
|
border-radius: $radius-block-ui;
|
|
117
|
+
overflow: hidden;
|
|
108
118
|
}
|
|
109
119
|
|
|
110
120
|
.edit-site-global-styles__shadow-preview-panel {
|
|
111
|
-
height:
|
|
121
|
+
height: $grid-unit-60 * 3;
|
|
112
122
|
border: $gray-200 $border-width solid;
|
|
113
123
|
border-radius: $radius-block-ui;
|
|
114
124
|
overflow: auto;
|
|
@@ -33,6 +33,8 @@ import {
|
|
|
33
33
|
import ScreenBlock from './screen-block';
|
|
34
34
|
import ScreenTypography from './screen-typography';
|
|
35
35
|
import ScreenTypographyElement from './screen-typography-element';
|
|
36
|
+
import FontSize from './font-sizes/font-size';
|
|
37
|
+
import FontSizes from './font-sizes/font-sizes';
|
|
36
38
|
import ScreenColors from './screen-colors';
|
|
37
39
|
import ScreenColorPalette from './screen-color-palette';
|
|
38
40
|
import { ScreenShadows, ScreenShadowsEdit } from './screen-shadows';
|
|
@@ -313,6 +315,14 @@ function GlobalStylesUI() {
|
|
|
313
315
|
<ScreenTypography />
|
|
314
316
|
</GlobalStylesNavigationScreen>
|
|
315
317
|
|
|
318
|
+
<GlobalStylesNavigationScreen path="/typography/font-sizes/">
|
|
319
|
+
<FontSizes />
|
|
320
|
+
</GlobalStylesNavigationScreen>
|
|
321
|
+
|
|
322
|
+
<GlobalStylesNavigationScreen path="/typography/font-sizes/:origin/:slug">
|
|
323
|
+
<FontSize />
|
|
324
|
+
</GlobalStylesNavigationScreen>
|
|
325
|
+
|
|
316
326
|
<GlobalStylesNavigationScreen path="/typography/text">
|
|
317
327
|
<ScreenTypographyElement element="text" />
|
|
318
328
|
</GlobalStylesNavigationScreen>
|
|
@@ -9,11 +9,10 @@ import {
|
|
|
9
9
|
/**
|
|
10
10
|
* Internal dependencies
|
|
11
11
|
*/
|
|
12
|
-
|
|
13
12
|
import StylesPreviewTypography from '../preview-typography';
|
|
14
13
|
import { useCurrentMergeThemeStyleVariationsWithUserConfig } from '../../../hooks/use-theme-style-variations/use-theme-style-variations-by-property';
|
|
15
|
-
import Variation from './variation';
|
|
16
14
|
import Subtitle from '../subtitle';
|
|
15
|
+
import Variation from './variation';
|
|
17
16
|
|
|
18
17
|
export default function TypographyVariations( { title, gap = 2 } ) {
|
|
19
18
|
const propertiesToFilter = [ 'typography' ];
|
|
@@ -201,6 +201,17 @@ export default function Layout( { route } ) {
|
|
|
201
201
|
</div>
|
|
202
202
|
) }
|
|
203
203
|
|
|
204
|
+
{ ! isMobileViewport && areas.edit && (
|
|
205
|
+
<div
|
|
206
|
+
className="edit-site-layout__area"
|
|
207
|
+
style={ {
|
|
208
|
+
maxWidth: widths?.edit,
|
|
209
|
+
} }
|
|
210
|
+
>
|
|
211
|
+
{ areas.edit }
|
|
212
|
+
</div>
|
|
213
|
+
) }
|
|
214
|
+
|
|
204
215
|
{ ! isMobileViewport && areas.preview && (
|
|
205
216
|
<div className="edit-site-layout__canvas-container">
|
|
206
217
|
{ canvasResizer }
|
|
@@ -9,7 +9,7 @@ import { useEffect } from '@wordpress/element';
|
|
|
9
9
|
*/
|
|
10
10
|
import { unlock } from '../../lock-unlock';
|
|
11
11
|
import Editor from '../editor';
|
|
12
|
-
import
|
|
12
|
+
import PostList from '../post-list';
|
|
13
13
|
import PagePatterns from '../page-patterns';
|
|
14
14
|
import PageTemplates from '../page-templates';
|
|
15
15
|
import SidebarNavigationScreen from '../sidebar-navigation-screen';
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
TEMPLATE_PART_POST_TYPE,
|
|
27
27
|
TEMPLATE_POST_TYPE,
|
|
28
28
|
} from '../../utils/constants';
|
|
29
|
+
import { PostEdit } from '../post-edit';
|
|
29
30
|
|
|
30
31
|
const { useLocation, useHistory } = unlock( routerPrivateApis );
|
|
31
32
|
|
|
@@ -74,13 +75,15 @@ function useRedirectOldPaths() {
|
|
|
74
75
|
|
|
75
76
|
export default function useLayoutAreas() {
|
|
76
77
|
const { params } = useLocation();
|
|
77
|
-
const { postType, postId, path, layout, isCustom, canvas } =
|
|
78
|
+
const { postType, postId, path, layout, isCustom, canvas, quickEdit } =
|
|
79
|
+
params;
|
|
78
80
|
const hasEditCanvasMode = canvas === 'edit';
|
|
79
81
|
useRedirectOldPaths();
|
|
80
82
|
|
|
81
83
|
// Page list
|
|
82
84
|
if ( postType === 'page' ) {
|
|
83
85
|
const isListLayout = layout === 'list' || ! layout;
|
|
86
|
+
const showQuickEdit = quickEdit && ! isListLayout;
|
|
84
87
|
return {
|
|
85
88
|
key: 'pages',
|
|
86
89
|
areas: {
|
|
@@ -91,16 +94,21 @@ export default function useLayoutAreas() {
|
|
|
91
94
|
content={ <DataViewsSidebarContent /> }
|
|
92
95
|
/>
|
|
93
96
|
),
|
|
94
|
-
content: <
|
|
95
|
-
preview:
|
|
97
|
+
content: <PostList postType={ postType } />,
|
|
98
|
+
preview: ! showQuickEdit &&
|
|
99
|
+
( isListLayout || hasEditCanvasMode ) && <Editor />,
|
|
96
100
|
mobile: hasEditCanvasMode ? (
|
|
97
101
|
<Editor />
|
|
98
102
|
) : (
|
|
99
|
-
<
|
|
103
|
+
<PostList postType={ postType } />
|
|
104
|
+
),
|
|
105
|
+
edit: showQuickEdit && (
|
|
106
|
+
<PostEdit postType={ postType } postId={ postId } />
|
|
100
107
|
),
|
|
101
108
|
},
|
|
102
109
|
widths: {
|
|
103
110
|
content: isListLayout ? 380 : undefined,
|
|
111
|
+
edit: showQuickEdit ? 380 : undefined,
|
|
104
112
|
},
|
|
105
113
|
};
|
|
106
114
|
}
|