@plaudit/gutenberg-api-extensions 2.88.0 → 2.90.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 +16 -0
- package/dist/blocks/SNPFlexibleItemsListComponent.d.ts +2 -2
- package/dist/blocks/SNPFlexibleItemsListComponent.js +1 -1
- package/dist/blocks/SNPFlexibleItemsListComponent.js.map +1 -1
- package/dist/blocks/SNPGroupComponent.js +2 -2
- package/dist/blocks/SNPGroupComponent.js.map +1 -1
- package/dist/blocks/SNPListComponent.js +1 -1
- package/dist/blocks/SNPListComponent.js.map +1 -1
- package/dist/blocks/basic-custom-block-bindings-support.d.ts +1 -5
- package/dist/blocks/basic-custom-block-bindings-support.js +6 -6
- package/dist/blocks/basic-custom-block-bindings-support.js.map +1 -1
- package/dist/blocks/common-native-property-constructors.js +21 -14
- package/dist/blocks/common-native-property-constructors.js.map +1 -1
- package/dist/blocks/conditions.js +1 -1
- package/dist/blocks/conditions.js.map +1 -1
- package/dist/blocks/index.d.ts +2 -2
- package/dist/blocks/index.js.map +1 -1
- package/dist/blocks/layout/LaidOutProperty.d.ts +1 -1
- package/dist/blocks/layout/LaidOutPropertyRow.d.ts +5 -2
- package/dist/blocks/layout/LaidOutPropertyRow.js +5 -0
- package/dist/blocks/layout/LaidOutPropertyRow.js.map +1 -1
- package/dist/blocks/layout/PanelRoot.js +1 -4
- package/dist/blocks/layout/PanelRoot.js.map +1 -1
- package/dist/blocks/layout/TabsRoot.js +1 -1
- package/dist/blocks/layout/TabsRoot.js.map +1 -1
- package/dist/blocks/simple-block.d.ts +2 -2
- package/dist/blocks/simple-native-property-impl.js +5 -5
- package/dist/blocks/simple-native-property-impl.js.map +1 -1
- package/dist/controls/AsynchronousFormTokenField.js +1 -1
- package/dist/controls/AsynchronousFormTokenField.js.map +1 -1
- package/dist/controls/BaseSortableItemsControl.d.ts +1 -1
- package/dist/controls/BaseSortableItemsControl.js +2 -2
- package/dist/controls/BaseSortableItemsControl.js.map +1 -1
- package/dist/controls/ExtendedFormTokenField.js +1 -1
- package/dist/controls/ExtendedFormTokenField.js.map +1 -1
- package/dist/controls/ExtendedRadioControl.js +1 -1
- package/dist/controls/ExtendedRadioControl.js.map +1 -1
- package/dist/controls/ExtendedTextareaControl.js +1 -1
- package/dist/controls/ExtendedTextareaControl.js.map +1 -1
- package/dist/controls/FileControl.js +3 -3
- package/dist/controls/FileControl.js.map +1 -1
- package/dist/controls/FullSizeToggleControl.js +1 -0
- package/dist/controls/FullSizeToggleControl.js.map +1 -1
- package/dist/controls/ImageControl.js +5 -5
- package/dist/controls/ImageControl.js.map +1 -1
- package/dist/controls/LazySuggestionsComboboxControl.js +4 -4
- package/dist/controls/LazySuggestionsComboboxControl.js.map +1 -1
- package/dist/controls/PickOne.js +2 -2
- package/dist/controls/PickOne.js.map +1 -1
- package/dist/controls/ProperLinkControl.js +3 -3
- package/dist/controls/ProperLinkControl.js.map +1 -1
- package/dist/controls/SimpleToggle.js +1 -1
- package/dist/controls/SimpleToggle.js.map +1 -1
- package/dist/controls/SortableFlexibleItemsControl.d.ts +2 -2
- package/dist/controls/SortableFlexibleItemsControl.js +1 -1
- package/dist/controls/SortableFlexibleItemsControl.js.map +1 -1
- package/dist/controls/SortableItemsControl.js +1 -1
- package/dist/controls/SortableItemsControl.js.map +1 -1
- package/dist/controls/hooks/useSuggestions.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +25 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/compat-types.d.ts +34 -0
- package/dist/lib/compat-types.js +3 -0
- package/dist/lib/compat-types.js.map +1 -0
- package/dist/lib/gutenberg-api-extensions-state/custom-block-bindings-support-logic.d.ts +1 -1
- package/dist/lib/gutenberg-api-extensions-state.d.ts +3 -3
- package/dist/lib/helpers.d.ts +1 -0
- package/dist/lib/helpers.js +21 -2
- package/dist/lib/helpers.js.map +1 -1
- package/dist/lib/sectioned-cache-store.d.ts +42 -0
- package/dist/lib/sectioned-cache-store.js +78 -0
- package/dist/lib/sectioned-cache-store.js.map +1 -0
- package/dist/lib/useful-types.d.ts +5 -0
- package/package.json +13 -13
- package/src/blocks/SNPFlexibleItemsListComponent.tsx +4 -4
- package/src/blocks/SNPGroupComponent.tsx +3 -3
- package/src/blocks/SNPListComponent.tsx +2 -2
- package/src/blocks/basic-custom-block-bindings-support.tsx +12 -8
- package/src/blocks/common-native-property-constructors.tsx +48 -34
- package/src/blocks/conditions.ts +1 -1
- package/src/blocks/index.ts +2 -2
- package/src/blocks/layout/LaidOutPropertyRow.tsx +7 -1
- package/src/blocks/layout/PanelRoot.tsx +2 -5
- package/src/blocks/layout/TabsRoot.tsx +2 -2
- package/src/blocks/simple-block.tsx +2 -2
- package/src/blocks/simple-native-property-impl.tsx +5 -5
- package/src/controls/AsynchronousFormTokenField.tsx +1 -0
- package/src/controls/BaseSortableItemsControl.tsx +8 -8
- package/src/controls/ExtendedFormTokenField.tsx +2 -0
- package/src/controls/ExtendedRadioControl.tsx +2 -2
- package/src/controls/ExtendedTextareaControl.tsx +1 -1
- package/src/controls/FileControl.tsx +4 -4
- package/src/controls/FullSizeToggleControl.tsx +1 -0
- package/src/controls/ImageControl.tsx +5 -5
- package/src/controls/LazySuggestionsComboboxControl.tsx +11 -9
- package/src/controls/PickOne.tsx +2 -1
- package/src/controls/ProperLinkControl.tsx +11 -6
- package/src/controls/SimpleToggle.tsx +1 -1
- package/src/controls/SortableFlexibleItemsControl.tsx +5 -3
- package/src/controls/SortableItemsControl.tsx +5 -1
- package/src/controls/hooks/useSuggestions.ts +1 -1
- package/src/index.ts +2 -3
- package/src/lib/compat-types.ts +21 -0
- package/src/lib/helpers.ts +23 -3
- package/src/lib/sectioned-cache-store.ts +120 -0
- package/src/lib/useful-types.ts +2 -0
- package/styles/editor.pcss +0 -16
- package/dist/editor/post-featured-image.d.ts +0 -4
- package/dist/editor/post-featured-image.js +0 -125
- package/dist/editor/post-featured-image.js.map +0 -1
- package/src/editor/post-featured-image.tsx +0 -161
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import {Button, FocalPointPicker, Spinner} from "@wordpress/components";
|
|
2
|
-
import type {Attachment} from "@wordpress/core-data";
|
|
3
|
-
import {dispatch, select, useSelect, type SelectFunction} from "@wordpress/data";
|
|
4
|
-
import {PostFeaturedImageCheck, store as editorStore} from "@wordpress/editor";
|
|
5
|
-
import {memo, useCallback, useEffect, useMemo, useState} from "@wordpress/element";
|
|
6
|
-
import {addFilter, applyFilters} from "@wordpress/hooks";
|
|
7
|
-
import {__} from "@wordpress/i18n";
|
|
8
|
-
|
|
9
|
-
import type {ComponentType} from "react";
|
|
10
|
-
|
|
11
|
-
type MediaDetailsArgs = Omit<Attachment, 'media_details'>&{media_details: Record<string, any>};
|
|
12
|
-
function getMediaDetails(media: MediaDetailsArgs, postId: any) {
|
|
13
|
-
if (!media) {
|
|
14
|
-
return {};
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const sizes = (media?.media_details?.['sizes'] ?? {}) as Record<string, {width: any, height: any, source_url: string}>;
|
|
18
|
-
|
|
19
|
-
const activeSize = sizes[getImageSize('large', media, postId)];
|
|
20
|
-
if (activeSize !== undefined) {
|
|
21
|
-
return {
|
|
22
|
-
mediaWidth: activeSize.width,
|
|
23
|
-
mediaHeight: activeSize.height,
|
|
24
|
-
mediaSourceUrl: activeSize.source_url,
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Use fallbackSize when defaultSize is not available.
|
|
29
|
-
const fallbackSize = sizes[getImageSize('thumbnail', media, postId)];
|
|
30
|
-
if (fallbackSize !== undefined) {
|
|
31
|
-
return {
|
|
32
|
-
mediaWidth: fallbackSize.width,
|
|
33
|
-
mediaHeight: fallbackSize.height,
|
|
34
|
-
mediaSourceUrl: fallbackSize.source_url,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Use full image size when fallbackSize and defaultSize are not available.
|
|
39
|
-
return {
|
|
40
|
-
mediaWidth: media.media_details['width'],
|
|
41
|
-
mediaHeight: media.media_details['height'],
|
|
42
|
-
mediaSourceUrl: media.source_url,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
type Position = {x: number, y: number};
|
|
47
|
-
function getLivePosition(selectFunction: SelectFunction = select): Position {
|
|
48
|
-
const {x = 50, y = 50} = (selectFunction(editorStore).getEditedPostAttribute('meta')?.["plaudit_card-image_pos"] ?? {}) as Record<string, any>;
|
|
49
|
-
return {x: x / 100, y: y / 100};
|
|
50
|
-
}
|
|
51
|
-
function setLivePosition({x, y}: Position) {
|
|
52
|
-
dispatch(editorStore)
|
|
53
|
-
.editPost({
|
|
54
|
-
meta: {"plaudit_card-image_pos": {x: Math.round(x * 100), y: Math.round(y * 100)}}
|
|
55
|
-
})
|
|
56
|
-
.catch(e => {
|
|
57
|
-
console.error(e);
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function getRawLivePosition() {
|
|
62
|
-
return {x: 50, y: 50, ...((select(editorStore).getEditedPostAttribute('meta')?.["plaudit_card-image_pos"] ?? {}) as Partial<Position>)};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function getImageSize(defaultSize: string, media: MediaDetailsArgs, postId: any): string {
|
|
66
|
-
let filteredSize = applyFilters('editor.PostFeaturedImage.imageSize', defaultSize, media.id, postId);
|
|
67
|
-
if (typeof filteredSize !== 'string') {
|
|
68
|
-
console.error(`The 'editor.PostFeaturedImage.imageSize' filter returned a non-string size (${filteredSize}).`, `Using '${defaultSize}' as a fallback.`);
|
|
69
|
-
return defaultSize;
|
|
70
|
-
}
|
|
71
|
-
return filteredSize;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function wrapPostFeaturedImage(OriginalComponent: ComponentType) {
|
|
75
|
-
return (props: Record<string, any>) => {
|
|
76
|
-
const [inFocusMode, setInFocusMode] = useState(false);
|
|
77
|
-
// This useMemo call makes it so that we only update restorablePosition when the state changes.
|
|
78
|
-
const restorablePosition = useMemo(getLivePosition, [inFocusMode]);
|
|
79
|
-
|
|
80
|
-
const {mediaSourceUrl} = getMediaDetails(props.media, props.currentPostId);
|
|
81
|
-
|
|
82
|
-
if (!mediaSourceUrl) {
|
|
83
|
-
if (select(editorStore).getEditedPostAttribute('featured_media')) {
|
|
84
|
-
return <Spinner/>;
|
|
85
|
-
}
|
|
86
|
-
return <OriginalComponent {...props} />;
|
|
87
|
-
} else if (!inFocusMode) {
|
|
88
|
-
return <NotInFocusMode OriginalComponent={OriginalComponent} props={props} setInFocusMode={setInFocusMode} />;
|
|
89
|
-
}
|
|
90
|
-
return <InFocusMode mediaSourceUrl={mediaSourceUrl} props={props} restorablePosition={restorablePosition} setInFocusMode={setInFocusMode} />;
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
type NotInFocusModeProps = {OriginalComponent: ComponentType, props: Record<string, any>, setInFocusMode(value: boolean): void};
|
|
95
|
-
const NotInFocusMode = memo(({OriginalComponent, props, setInFocusMode}: NotInFocusModeProps) => {
|
|
96
|
-
const {x, y} = getRawLivePosition();
|
|
97
|
-
useEffect(() => {
|
|
98
|
-
let sheet = document.adoptedStyleSheets.find(s => (s as any).identifier === '__POST_FEATURED_IMAGE__');
|
|
99
|
-
if (!sheet) {
|
|
100
|
-
sheet = new CSSStyleSheet();
|
|
101
|
-
(sheet as any).identifier = '__POST_FEATURED_IMAGE__';
|
|
102
|
-
}
|
|
103
|
-
sheet.replace(`.plauditPostFeaturedImageWithFocalPoint__wrapper .editor-post-featured-image__preview-image {object-fit: ${x}% ${y}% !important;}`)
|
|
104
|
-
.catch(e => {
|
|
105
|
-
console.error(e);
|
|
106
|
-
});
|
|
107
|
-
return () => {
|
|
108
|
-
const sheet = document.adoptedStyleSheets.findIndex(s => (s as any).identifier === '__POST_FEATURED_IMAGE__');
|
|
109
|
-
if (sheet) {
|
|
110
|
-
document.adoptedStyleSheets.splice(sheet, 1);
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
}, [x, y]);
|
|
114
|
-
return <PostFeaturedImageCheck>
|
|
115
|
-
<div className="plauditPostFeaturedImageWithFocalPoint__wrapper">
|
|
116
|
-
<div className="plauditPostFeaturedImageWithFocalPoint__toggle">
|
|
117
|
-
<Button onClick={useCallback(() => setInFocusMode(true), [setInFocusMode])} className="editor-post-featured-image__action" text={__("Change Focal Point", 'plaudit')} />
|
|
118
|
-
</div>
|
|
119
|
-
<OriginalComponent {...props} />
|
|
120
|
-
</div>
|
|
121
|
-
</PostFeaturedImageCheck>;
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
type InFocusModeProps = {mediaSourceUrl: string, props: Record<string, any>, restorablePosition: Position, setInFocusMode(value: boolean): void};
|
|
125
|
-
const InFocusMode = memo(({mediaSourceUrl, props, restorablePosition, setInFocusMode}: InFocusModeProps) => {
|
|
126
|
-
// This assembly makes it so that we both get updates if something else triggers a position change while making the focus picker doesn't reset itself
|
|
127
|
-
const {x, y} = useSelect(getLivePosition, []);
|
|
128
|
-
const [position, setPosition] = useState({x, y});
|
|
129
|
-
useEffect(() => setPosition(getLivePosition()), [x, y]);
|
|
130
|
-
|
|
131
|
-
return <PostFeaturedImageCheck>
|
|
132
|
-
{props.noticeUI}
|
|
133
|
-
<div className="editor-post-featured-image">
|
|
134
|
-
<FocalPointPicker
|
|
135
|
-
onChange={useCallback(pos => {
|
|
136
|
-
setPosition(pos);
|
|
137
|
-
setLivePosition(pos);
|
|
138
|
-
}, [setPosition])}
|
|
139
|
-
url={mediaSourceUrl}
|
|
140
|
-
value={position}
|
|
141
|
-
/>
|
|
142
|
-
<div>
|
|
143
|
-
<Button text={__("Done", 'plaudit')} onClick={useCallback(() => setInFocusMode(false), [setInFocusMode])} variant="primary" />
|
|
144
|
-
<Button text={__('Cancel', 'plaudit')} onClick={useCallback(() => {
|
|
145
|
-
setLivePosition(restorablePosition);
|
|
146
|
-
setInFocusMode(false);
|
|
147
|
-
}, [setInFocusMode])} isDestructive />
|
|
148
|
-
</div>
|
|
149
|
-
</div>
|
|
150
|
-
</PostFeaturedImageCheck>;
|
|
151
|
-
})
|
|
152
|
-
|
|
153
|
-
export function installPostFeaturedImageCardFocusTargeting() {
|
|
154
|
-
if (!installPostFeaturedImageCardFocusTargeting.called) {
|
|
155
|
-
installPostFeaturedImageCardFocusTargeting.called = true;
|
|
156
|
-
addFilter('editor.PostFeaturedImage', 'plaudit-gutenberg-api-extensions/inject-post-featured-image-card-focus-targeting', wrapPostFeaturedImage);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
export namespace installPostFeaturedImageCardFocusTargeting {
|
|
160
|
-
export let called: boolean = false;
|
|
161
|
-
}
|