@plaudit/gutenberg-api-extensions 2.88.0 → 2.89.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 +12 -0
- package/dist/blocks/basic-custom-block-bindings-support.d.ts +1 -5
- package/dist/blocks/basic-custom-block-bindings-support.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/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 +2 -2
- package/src/blocks/basic-custom-block-bindings-support.tsx +1 -2
- package/src/blocks/index.ts +2 -2
- 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
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.89.0] - 2026-03-24
|
|
9
|
+
### Added
|
|
10
|
+
- `SectionedCacheStore` to allow easier creation of WordPress-compatible LRU caches
|
|
11
|
+
|
|
12
|
+
### Removed
|
|
13
|
+
- The code that added a focal point picker to post's featured image interface
|
|
14
|
+
- It has been moved to `plaudit-base`
|
|
15
|
+
|
|
16
|
+
### Internals
|
|
17
|
+
- Updated to TypeScript v6
|
|
18
|
+
- A few things had to get shuffled around as a result
|
|
19
|
+
|
|
8
20
|
## [2.88.0] - 2026-03-23
|
|
9
21
|
### Added
|
|
10
22
|
- The `TemporalLRUCache` class to the list of exports
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-custom-block-bindings-support.js","sourceRoot":"","sources":["../../src/blocks/basic-custom-block-bindings-support.tsx"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"basic-custom-block-bindings-support.js","sourceRoot":"","sources":["../../src/blocks/basic-custom-block-bindings-support.tsx"],"names":[],"mappings":"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"}
|
package/dist/blocks/index.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ export * from "./simple-native-property-api";
|
|
|
5
5
|
export * from "./snp-data-store";
|
|
6
6
|
export * from "./utilities";
|
|
7
7
|
export type { SuspendableOptionsHandler } from "./hooks/useSuspendableOptions";
|
|
8
|
-
export {
|
|
9
|
-
export type { BlockName } from "../lib/useful-types";
|
|
8
|
+
export { installCustomBlockBindingsSupport, registerCustomBlockBindingsSource } from "./basic-custom-block-bindings-support";
|
|
9
|
+
export type { DbSource, BlockName } from "../lib/useful-types";
|
|
10
10
|
/**
|
|
11
11
|
* @deprecated use installGutenbergExtensions() instead
|
|
12
12
|
*/
|
package/dist/blocks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blocks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAiBA,0EAEC;AAnBD,uDAAqC;AACrC,iDAA+B;AAC/B,4DAA0C;AAC1C,+DAA6C;AAC7C,mDAAiC;AACjC,8CAA4B;AAI5B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blocks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAiBA,0EAEC;AAnBD,uDAAqC;AACrC,iDAA+B;AAC/B,4DAA0C;AAC1C,+DAA6C;AAC7C,mDAAiC;AACjC,8CAA4B;AAI5B,6FAA2H;AAAnH,wJAAA,iCAAiC,OAAA;AAAE,wJAAA,iCAAiC,OAAA;AAG5E,oCAAoD;AAEpD;;GAEG;AACH,SAAgB,+BAA+B;IAC9C,IAAA,kCAA0B,GAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -3,4 +3,4 @@ export type LaidOutPropertyProps = {
|
|
|
3
3
|
property: HydratedSimpleNativeProperty;
|
|
4
4
|
inToolsPanel?: boolean;
|
|
5
5
|
};
|
|
6
|
-
export declare const LaidOutProperty: import("react").
|
|
6
|
+
export declare const LaidOutProperty: import("react").MemoExoticComponent<({ property, inToolsPanel }: LaidOutPropertyProps) => import("react/jsx-runtime").JSX.Element | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSuggestions.js","sourceRoot":"","sources":["../../../src/controls/hooks/useSuggestions.ts"],"names":[],"mappings":";;AA6BA,wCAoDC;AAjFD,gDAA4E;AAE5E,qEAAgE;AAEhE,iCAAiC;AAYjC,SAAS,kBAAkB,CAAC,KAAa;IACxC,MAAM,OAAO,GAAG,IAAA,gBAAM,
|
|
1
|
+
{"version":3,"file":"useSuggestions.js","sourceRoot":"","sources":["../../../src/controls/hooks/useSuggestions.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,8 +3,9 @@ import { type store as apiStore } from "./lib/gutenberg-api-extensions-state";
|
|
|
3
3
|
export * from "./blocks";
|
|
4
4
|
export * from "./controls";
|
|
5
5
|
export * from "./editor/simple-gutenberg-endpoints-api";
|
|
6
|
-
export { TemporalLRUCache } from "./lib/helpers";
|
|
6
|
+
export { TemporalLRUCache, useAdoptedStyleSheet } from "./lib/helpers";
|
|
7
7
|
export * from "./lib/plaudit-icons";
|
|
8
|
+
export * as SectionedCacheStore from "./lib/sectioned-cache-store";
|
|
8
9
|
export * from "./lib/suspense";
|
|
9
10
|
export type * from "./lib/useful-types";
|
|
10
11
|
export declare function installGutenbergExtensions(): void;
|
package/dist/index.js
CHANGED
|
@@ -10,14 +10,35 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
10
10
|
if (k2 === undefined) k2 = k;
|
|
11
11
|
o[k2] = m[k];
|
|
12
12
|
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
13
18
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
19
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
20
|
};
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
16
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.TemporalLRUCache = void 0;
|
|
39
|
+
exports.SectionedCacheStore = exports.useAdoptedStyleSheet = exports.TemporalLRUCache = void 0;
|
|
18
40
|
exports.installGutenbergExtensions = installGutenbergExtensions;
|
|
19
41
|
const simple_native_property_impl_1 = require("./blocks/simple-native-property-impl");
|
|
20
|
-
const post_featured_image_1 = require("./editor/post-featured-image");
|
|
21
42
|
const simple_gutenberg_endpoints_impl_1 = require("./editor/simple-gutenberg-endpoints-impl");
|
|
22
43
|
const gutenberg_api_extensions_state_1 = require("./lib/gutenberg-api-extensions-state");
|
|
23
44
|
__exportStar(require("./blocks"), exports);
|
|
@@ -25,14 +46,15 @@ __exportStar(require("./controls"), exports);
|
|
|
25
46
|
__exportStar(require("./editor/simple-gutenberg-endpoints-api"), exports);
|
|
26
47
|
var helpers_1 = require("./lib/helpers");
|
|
27
48
|
Object.defineProperty(exports, "TemporalLRUCache", { enumerable: true, get: function () { return helpers_1.TemporalLRUCache; } });
|
|
49
|
+
Object.defineProperty(exports, "useAdoptedStyleSheet", { enumerable: true, get: function () { return helpers_1.useAdoptedStyleSheet; } });
|
|
28
50
|
__exportStar(require("./lib/plaudit-icons"), exports);
|
|
51
|
+
exports.SectionedCacheStore = __importStar(require("./lib/sectioned-cache-store"));
|
|
29
52
|
__exportStar(require("./lib/suspense"), exports);
|
|
30
53
|
function installGutenbergExtensions() {
|
|
31
54
|
if (!installGutenbergExtensions.called) {
|
|
32
55
|
installGutenbergExtensions.called = true;
|
|
33
56
|
(0, gutenberg_api_extensions_state_1.registerStore)();
|
|
34
57
|
(0, simple_native_property_impl_1.installSimpleNativePropertiesSupport)();
|
|
35
|
-
(0, post_featured_image_1.installPostFeaturedImageCardFocusTargeting)();
|
|
36
58
|
(0, simple_gutenberg_endpoints_impl_1.installSimpleGutenbergApisSupport)();
|
|
37
59
|
}
|
|
38
60
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,gEAOC;AApBD,sFAA0F;AAC1F,8FAAwH;AACxH,yFAA2F;AAE3F,2CAAyB;AACzB,6CAA2B;AAC3B,0EAAwD;AACxD,yCAAqE;AAA7D,2GAAA,gBAAgB,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAC9C,sDAAoC;AACpC,mFAAmE;AACnE,iDAA+B;AAG/B,SAAgB,0BAA0B;IACzC,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,CAAC;QACxC,0BAA0B,CAAC,MAAM,GAAG,IAAI,CAAC;QACzC,IAAA,8CAAa,GAAE,CAAC;QAChB,IAAA,kEAAoC,GAAE,CAAC;QACvC,IAAA,mEAAiC,GAAE,CAAC;IACrC,CAAC;AACF,CAAC;AACD,WAAiB,0BAA0B;IAC/B,iCAAM,GAAY,KAAK,CAAC;AACpC,CAAC,EAFgB,0BAA0B,0CAA1B,0BAA0B,QAE1C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { DbSource } from "./useful-types";
|
|
2
|
+
declare module '@wordpress/blocks' {
|
|
3
|
+
type BaseRegisterBlockBindingsSourceFunctionArgs = {
|
|
4
|
+
bindings?: {
|
|
5
|
+
[key: string]: string | {
|
|
6
|
+
[key in string]: unknown;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
clientId?: string;
|
|
10
|
+
context: {
|
|
11
|
+
[key in string]: any;
|
|
12
|
+
};
|
|
13
|
+
select: unknown;
|
|
14
|
+
};
|
|
15
|
+
type ExtendedRegisterBlockBindingsSourceFunctionArgs = BaseRegisterBlockBindingsSourceFunctionArgs & {
|
|
16
|
+
dispatch: {
|
|
17
|
+
[key in string]: (...args: unknown[]) => unknown;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
type RegisterBlockBindingsSourceArgs = {
|
|
21
|
+
name: string;
|
|
22
|
+
label: string;
|
|
23
|
+
usesContext?: string[];
|
|
24
|
+
getValues?(args: BaseRegisterBlockBindingsSourceFunctionArgs): unknown;
|
|
25
|
+
setValues?: unknown;
|
|
26
|
+
getFieldsList?(args: BaseRegisterBlockBindingsSourceFunctionArgs): unknown;
|
|
27
|
+
canUserEditValue(args: BaseRegisterBlockBindingsSourceFunctionArgs): boolean;
|
|
28
|
+
dbSources?: DbSource[];
|
|
29
|
+
};
|
|
30
|
+
function registerBlockBindingsSource(args: RegisterBlockBindingsSourceArgs): void;
|
|
31
|
+
function getBlockBindingsSources(): {
|
|
32
|
+
[key: string]: RegisterBlockBindingsSourceArgs;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compat-types.js","sourceRoot":"","sources":["../../src/lib/compat-types.ts"],"names":[],"mappings":""}
|
|
@@ -28,12 +28,12 @@ export declare const store: import("@wordpress/data").StoreDescriptor<import("@w
|
|
|
28
28
|
properties: import("../blocks").PDSimpleNativeProperty[];
|
|
29
29
|
};
|
|
30
30
|
registerCustomBlockBindingsSource(args: Parameters<typeof import("@wordpress/blocks").registerBlockBindingsSource>[0] & {
|
|
31
|
-
dbSources?: import("
|
|
31
|
+
dbSources?: import("./useful-types").DbSource[];
|
|
32
32
|
}): {
|
|
33
33
|
type: string;
|
|
34
34
|
name: string;
|
|
35
35
|
value: {
|
|
36
|
-
dbSources:
|
|
36
|
+
dbSources: import("./useful-types").DbSource[] | undefined;
|
|
37
37
|
};
|
|
38
38
|
};
|
|
39
39
|
}, {
|
|
@@ -43,7 +43,7 @@ export declare const store: import("@wordpress/data").StoreDescriptor<import("@w
|
|
|
43
43
|
snpLogic: SNPLogicState;
|
|
44
44
|
generalLogic: GeneralLogicState;
|
|
45
45
|
}, name: string) => {
|
|
46
|
-
dbSources?: import("
|
|
46
|
+
dbSources?: import("./useful-types").DbSource[];
|
|
47
47
|
} | undefined;
|
|
48
48
|
} & {
|
|
49
49
|
blockStylesLayer: (state: {
|
package/dist/lib/helpers.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ type SelectorsArg<S extends {}> = {
|
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
20
|
export declare function combineSelectors<S extends SelectorsArg<any>>(selectors: S): CombinedSelectors<typeof selectors>;
|
|
21
|
+
export declare function useAdoptedStyleSheet(): CSSStyleSheet;
|
|
21
22
|
export declare class TemporalLRUCache<K, V extends NonNullable<any> | undefined> {
|
|
22
23
|
private readonly capacity;
|
|
23
24
|
private readonly minDroppableAccessTime;
|
package/dist/lib/helpers.js
CHANGED
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TemporalLRUCache = void 0;
|
|
4
4
|
exports.clone = clone;
|
|
5
5
|
exports.combineSelectors = combineSelectors;
|
|
6
|
+
exports.useAdoptedStyleSheet = useAdoptedStyleSheet;
|
|
7
|
+
const element_1 = require("@wordpress/element");
|
|
6
8
|
function clone(value) {
|
|
7
9
|
if (value === null || value === undefined) {
|
|
8
10
|
return value;
|
|
@@ -22,6 +24,23 @@ function combineSelectors(selectors) {
|
|
|
22
24
|
});
|
|
23
25
|
}));
|
|
24
26
|
}
|
|
27
|
+
function useAdoptedStyleSheet() {
|
|
28
|
+
const sheet = (0, element_1.useRef)();
|
|
29
|
+
if (sheet.current === undefined) {
|
|
30
|
+
sheet.current = new CSSStyleSheet();
|
|
31
|
+
}
|
|
32
|
+
(0, element_1.useEffect)(() => {
|
|
33
|
+
if (sheet.current !== undefined && !document.adoptedStyleSheets.includes(sheet.current)) {
|
|
34
|
+
document.adoptedStyleSheets.push(sheet.current);
|
|
35
|
+
}
|
|
36
|
+
return () => {
|
|
37
|
+
if (sheet.current !== undefined) {
|
|
38
|
+
document.adoptedStyleSheets.splice(document.adoptedStyleSheets.indexOf(sheet.current), 1);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
return sheet.current;
|
|
43
|
+
}
|
|
25
44
|
class TemporalLRUCache {
|
|
26
45
|
capacity;
|
|
27
46
|
minDroppableAccessTime;
|
|
@@ -50,12 +69,12 @@ class TemporalLRUCache {
|
|
|
50
69
|
}
|
|
51
70
|
cancelTimeout() {
|
|
52
71
|
if (this.timeout !== undefined) {
|
|
53
|
-
|
|
72
|
+
clearTimeout(this.timeout);
|
|
54
73
|
this.timeout = undefined;
|
|
55
74
|
}
|
|
56
75
|
}
|
|
57
76
|
beginTimeout() {
|
|
58
|
-
this.timeout =
|
|
77
|
+
this.timeout = setTimeout(() => {
|
|
59
78
|
const now = Date.now();
|
|
60
79
|
const droppableItems = [...this.cache.entries()]
|
|
61
80
|
.filter(([_, v]) => now - v[1] >= this.minDroppableAccessTime)
|
package/dist/lib/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/lib/helpers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/lib/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createReduxStore } from "@wordpress/data";
|
|
2
|
+
import { TemporalLRUCache } from "./helpers";
|
|
3
|
+
import { type WrappedPromise } from "./suspense/promise-handlers";
|
|
4
|
+
type SelectorsBuilder<PROPS, DATA, SELECTORS extends {
|
|
5
|
+
[name in string]: (...args: any[]) => any;
|
|
6
|
+
}> = (handleCacheMiss: (props: PROPS) => Promise<SectionedCacheFetchResult<DATA>>) => SELECTORS;
|
|
7
|
+
type SectionedCacheFetchResult<DATA> = {
|
|
8
|
+
error?: false;
|
|
9
|
+
data: DATA;
|
|
10
|
+
} | {
|
|
11
|
+
error: true;
|
|
12
|
+
data: string;
|
|
13
|
+
};
|
|
14
|
+
type GetCacheForPropsFunction<PROPS, DATA, KEY> = (props: PROPS) => TemporalLRUCache<KEY, WrappedPromise<SectionedCacheFetchResult<DATA>>>;
|
|
15
|
+
type WarmingPromiseGetter<PROPS, DATA, KEY> = (storeChanged: () => void, props: FetchWarmingDataArgs<PROPS, DATA, KEY>[0], ...args: DropFirst<FetchWarmingDataArgs<PROPS, DATA, KEY>>) => WrappedPromise<void> | undefined;
|
|
16
|
+
type SectionedCacheStoreArgs<PROPS, DATA, KEY, SELECTORS extends {
|
|
17
|
+
[name in string]: (...args: any[]) => any;
|
|
18
|
+
}> = {
|
|
19
|
+
keyify: (props: PROPS) => KEY;
|
|
20
|
+
name: string;
|
|
21
|
+
selectorsBuilder: SelectorsBuilder<PROPS, DATA, SELECTORS>;
|
|
22
|
+
getCacheForProps?: GetCacheForPropsFunction<PROPS, DATA, KEY>;
|
|
23
|
+
getIndividualItemFetchPromise: (props: PROPS) => Promise<SectionedCacheFetchResult<DATA>>;
|
|
24
|
+
getWarmingPromise: WarmingPromiseGetter<PROPS, DATA, KEY>;
|
|
25
|
+
};
|
|
26
|
+
type AddBSStateArg<S extends {
|
|
27
|
+
[name in string]: (...args: any[]) => any;
|
|
28
|
+
}> = {
|
|
29
|
+
[name in keyof S]: (state: any, ...args: Parameters<S[name]>) => ReturnType<S[name]>;
|
|
30
|
+
};
|
|
31
|
+
export declare function create<PROPS, DATA, KEY, SELECTORS extends {
|
|
32
|
+
[name in string]: (...args: any[]) => any;
|
|
33
|
+
}>(args: SectionedCacheStoreArgs<PROPS, DATA, KEY, SELECTORS>): ReturnType<typeof createReduxStore<{}, {}, AddBSStateArg<SELECTORS>>>;
|
|
34
|
+
type DropFirst<A extends any[]> = A extends [any, ...infer R] ? R : never;
|
|
35
|
+
type FetchWarmingDataArgs<PROPS, DATA, KEY> = [props: PROPS, getCacheForProps: GetCacheForPropsFunction<PROPS, DATA, KEY>, keyify: (props: PROPS) => KEY];
|
|
36
|
+
type MakeSimpleWarmingPromisesGetterArgs<PROPS, DATA, KEY> = {
|
|
37
|
+
warmingPromisesKeyify: (props: PROPS) => string | number | undefined;
|
|
38
|
+
fetchWarmingData: (...args: FetchWarmingDataArgs<PROPS, DATA, KEY>) => Promise<void>;
|
|
39
|
+
shouldWarm?: ((props: PROPS) => boolean);
|
|
40
|
+
};
|
|
41
|
+
export declare function makeSimpleWarmingPromisesGetter<PROPS, DATA, KEY>({ warmingPromisesKeyify, fetchWarmingData, shouldWarm }: MakeSimpleWarmingPromisesGetterArgs<PROPS, DATA, KEY>): WarmingPromiseGetter<PROPS, DATA, KEY>;
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.create = create;
|
|
4
|
+
exports.makeSimpleWarmingPromisesGetter = makeSimpleWarmingPromisesGetter;
|
|
5
|
+
const helpers_1 = require("./helpers");
|
|
6
|
+
const promise_handlers_1 = require("./suspense/promise-handlers");
|
|
7
|
+
function create(args) {
|
|
8
|
+
const { getCacheForProps = makeDefaultCacheForPropsGetter(), getIndividualItemFetchPromise, getWarmingPromise, keyify, name, selectorsBuilder } = args;
|
|
9
|
+
return {
|
|
10
|
+
name,
|
|
11
|
+
instantiate: () => {
|
|
12
|
+
const listeners = new Set();
|
|
13
|
+
const storeChanged = () => {
|
|
14
|
+
for (const listener of listeners) {
|
|
15
|
+
listener();
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const warmCache = (props) => {
|
|
19
|
+
const warmingPromise = getWarmingPromise(storeChanged, props, getCacheForProps, keyify);
|
|
20
|
+
if (warmingPromise !== undefined) {
|
|
21
|
+
return (0, promise_handlers_1.use)(warmingPromise);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const fetchItemContents = async (props) => {
|
|
25
|
+
try {
|
|
26
|
+
return await getIndividualItemFetchPromise(props);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
return { error: true, data: err?.toString() ?? "EMPTY_RESPONSE" };
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const handleCacheMiss = (props) => {
|
|
33
|
+
const key = keyify(props);
|
|
34
|
+
warmCache(props);
|
|
35
|
+
const cache = getCacheForProps(props);
|
|
36
|
+
const existingPromise = cache.get(key);
|
|
37
|
+
if (existingPromise !== null) {
|
|
38
|
+
return existingPromise;
|
|
39
|
+
}
|
|
40
|
+
const res = (0, promise_handlers_1.wrapPromise)(fetchItemContents(props));
|
|
41
|
+
res.finally(storeChanged);
|
|
42
|
+
cache.set(key, res);
|
|
43
|
+
return res;
|
|
44
|
+
};
|
|
45
|
+
const selectors = selectorsBuilder(handleCacheMiss);
|
|
46
|
+
return {
|
|
47
|
+
getSelectors: () => selectors,
|
|
48
|
+
getSuspendSelectors: () => selectors,
|
|
49
|
+
getActions: () => ({}),
|
|
50
|
+
subscribe: (listener) => {
|
|
51
|
+
listeners.add(listener);
|
|
52
|
+
return () => listeners.delete(listener);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function makeDefaultCacheForPropsGetter() {
|
|
59
|
+
const cache = new helpers_1.TemporalLRUCache(10);
|
|
60
|
+
return () => cache;
|
|
61
|
+
}
|
|
62
|
+
function makeSimpleWarmingPromisesGetter({ warmingPromisesKeyify, fetchWarmingData, shouldWarm = () => true }) {
|
|
63
|
+
const warmingPromises = {};
|
|
64
|
+
return (storeChanged, props, ...args) => {
|
|
65
|
+
const key = warmingPromisesKeyify(props);
|
|
66
|
+
if (key === undefined) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (!warmingPromises[key]) {
|
|
70
|
+
if (!shouldWarm(props)) {
|
|
71
|
+
return; // We don't want to go back to the server for the entire dataset unless we're going to be working with most of it
|
|
72
|
+
}
|
|
73
|
+
warmingPromises[key] = (0, promise_handlers_1.wrapPromise)(fetchWarmingData(props, ...args).finally(storeChanged));
|
|
74
|
+
}
|
|
75
|
+
return warmingPromises[key];
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=sectioned-cache-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sectioned-cache-store.js","sourceRoot":"","sources":["../../src/lib/sectioned-cache-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plaudit/gutenberg-api-extensions",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.89.0",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
5
5
|
"files": [
|
|
6
6
|
"./dist",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"redux": "^5.0.1"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"typescript": "^
|
|
48
|
+
"typescript": "^6.0.2"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
51
|
"build": "tsc",
|
|
@@ -15,7 +15,7 @@ import {addFilter} from "@wordpress/hooks";
|
|
|
15
15
|
import {registerSimpleGutenbergApiEndpoint} from "../editor/simple-gutenberg-endpoints-api";
|
|
16
16
|
import {store as endpointsStore} from "../editor/simple-gutenberg-endpoints-impl";
|
|
17
17
|
import {store as apiExtensionsStore} from "../lib/gutenberg-api-extensions-state";
|
|
18
|
-
import type {ActualBlockEditProps, BlockName} from "../lib/useful-types";
|
|
18
|
+
import type {ActualBlockEditProps, BlockName, DbSource} from "../lib/useful-types";
|
|
19
19
|
|
|
20
20
|
import {type ReactElement, Suspense} from "react";
|
|
21
21
|
import {ErrorBoundary, FallbackProps} from "react-error-boundary";
|
|
@@ -27,7 +27,6 @@ const BLOCK_BINDINGS_ALLOWED_BLOCKS: {[key: BlockName]: string[]} = {
|
|
|
27
27
|
'core/button': ['url', 'text', 'linkTarget', 'rel']
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
export type DbSource = {label: string, value: string, help?: string};
|
|
31
30
|
type CBBParams = {dbSources?: DbSource[]/*, supportsContext?: boolean*/};
|
|
32
31
|
export function registerCustomBlockBindingsSource(args: Parameters<typeof registerBlockBindingsSource>[0]&CBBParams) {
|
|
33
32
|
installCustomBlockBindingsSupport();
|
package/src/blocks/index.ts
CHANGED
|
@@ -7,8 +7,8 @@ export * from "./utilities";
|
|
|
7
7
|
|
|
8
8
|
export type {SuspendableOptionsHandler} from "./hooks/useSuspendableOptions";
|
|
9
9
|
|
|
10
|
-
export {
|
|
11
|
-
export type {BlockName} from "../lib/useful-types"; // This is for backwards compatibility
|
|
10
|
+
export {installCustomBlockBindingsSupport, registerCustomBlockBindingsSource} from "./basic-custom-block-bindings-support";
|
|
11
|
+
export type {DbSource, BlockName} from "../lib/useful-types"; // This is for backwards compatibility
|
|
12
12
|
|
|
13
13
|
import {installGutenbergExtensions} from "../index";
|
|
14
14
|
|
|
@@ -15,7 +15,7 @@ type SuggestionState<T> = {
|
|
|
15
15
|
requestId: number
|
|
16
16
|
};
|
|
17
17
|
function useSimpleDebouncer(delay: number) {
|
|
18
|
-
const timerId = useRef<ReturnType<typeof
|
|
18
|
+
const timerId = useRef<ReturnType<typeof setTimeout>>(undefined);
|
|
19
19
|
return useCallback((action: () => void) => {
|
|
20
20
|
if (timerId.current !== undefined) {
|
|
21
21
|
clearTimeout(timerId.current);
|
package/src/index.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {installSimpleNativePropertiesSupport} from "./blocks/simple-native-property-impl";
|
|
2
|
-
import {installPostFeaturedImageCardFocusTargeting} from "./editor/post-featured-image";
|
|
3
2
|
import {installSimpleGutenbergApisSupport, type store as endpointStore} from "./editor/simple-gutenberg-endpoints-impl";
|
|
4
3
|
import {registerStore, type store as apiStore} from "./lib/gutenberg-api-extensions-state";
|
|
5
4
|
|
|
6
5
|
export * from "./blocks";
|
|
7
6
|
export * from "./controls";
|
|
8
7
|
export * from "./editor/simple-gutenberg-endpoints-api";
|
|
9
|
-
export {TemporalLRUCache} from "./lib/helpers";
|
|
8
|
+
export {TemporalLRUCache, useAdoptedStyleSheet} from "./lib/helpers";
|
|
10
9
|
export * from "./lib/plaudit-icons";
|
|
10
|
+
export * as SectionedCacheStore from "./lib/sectioned-cache-store";
|
|
11
11
|
export * from "./lib/suspense";
|
|
12
12
|
export type * from "./lib/useful-types";
|
|
13
13
|
|
|
@@ -16,7 +16,6 @@ export function installGutenbergExtensions() {
|
|
|
16
16
|
installGutenbergExtensions.called = true;
|
|
17
17
|
registerStore();
|
|
18
18
|
installSimpleNativePropertiesSupport();
|
|
19
|
-
installPostFeaturedImageCardFocusTargeting();
|
|
20
19
|
installSimpleGutenbergApisSupport();
|
|
21
20
|
}
|
|
22
21
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {DbSource} from "./useful-types";
|
|
2
|
+
|
|
3
|
+
declare module '@wordpress/blocks' {
|
|
4
|
+
type BaseRegisterBlockBindingsSourceFunctionArgs = {
|
|
5
|
+
bindings?: {[key: string]: string|{[key in string]: unknown}}, clientId?: string,
|
|
6
|
+
context: {[key in string]: any}, select: unknown
|
|
7
|
+
};
|
|
8
|
+
type ExtendedRegisterBlockBindingsSourceFunctionArgs = BaseRegisterBlockBindingsSourceFunctionArgs&{dispatch: {[key in string]: (...args: unknown[]) => unknown}};
|
|
9
|
+
|
|
10
|
+
type RegisterBlockBindingsSourceArgs = {
|
|
11
|
+
name: string, label: string, usesContext?: string[],
|
|
12
|
+
getValues?(args: BaseRegisterBlockBindingsSourceFunctionArgs): unknown,
|
|
13
|
+
setValues?: unknown,
|
|
14
|
+
getFieldsList?(args: BaseRegisterBlockBindingsSourceFunctionArgs): unknown,
|
|
15
|
+
canUserEditValue(args: BaseRegisterBlockBindingsSourceFunctionArgs): boolean,
|
|
16
|
+
dbSources?: DbSource[]
|
|
17
|
+
};
|
|
18
|
+
function registerBlockBindingsSource(args: RegisterBlockBindingsSourceArgs): void;
|
|
19
|
+
|
|
20
|
+
function getBlockBindingsSources(): {[key: string]: RegisterBlockBindingsSourceArgs};
|
|
21
|
+
}
|
package/src/lib/helpers.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import {useEffect, useRef} from "@wordpress/element";
|
|
2
|
+
|
|
1
3
|
import type {SubsequentArgsOfFunc} from "./useful-types";
|
|
2
4
|
|
|
3
5
|
export function clone<T>(value: T): T {
|
|
@@ -37,9 +39,27 @@ export function combineSelectors<S extends SelectorsArg<any>>(selectors: S) {
|
|
|
37
39
|
})) as CombinedSelectors<typeof selectors>;
|
|
38
40
|
}
|
|
39
41
|
|
|
42
|
+
export function useAdoptedStyleSheet() {
|
|
43
|
+
const sheet = useRef<CSSStyleSheet>();
|
|
44
|
+
if (sheet.current === undefined) {
|
|
45
|
+
sheet.current = new CSSStyleSheet();
|
|
46
|
+
}
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (sheet.current !== undefined && !document.adoptedStyleSheets.includes(sheet.current)) {
|
|
49
|
+
document.adoptedStyleSheets.push(sheet.current);
|
|
50
|
+
}
|
|
51
|
+
return () => {
|
|
52
|
+
if (sheet.current !== undefined) {
|
|
53
|
+
document.adoptedStyleSheets.splice(document.adoptedStyleSheets.indexOf(sheet.current), 1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
return sheet.current;
|
|
58
|
+
}
|
|
59
|
+
|
|
40
60
|
export class TemporalLRUCache<K, V extends NonNullable<any>|undefined> {
|
|
41
61
|
private readonly cache: Map<K, [V, number]> = new Map();
|
|
42
|
-
private timeout?: ReturnType<
|
|
62
|
+
private timeout?: ReturnType<typeof setTimeout>;
|
|
43
63
|
|
|
44
64
|
public constructor(
|
|
45
65
|
private readonly capacity: number,
|
|
@@ -68,12 +88,12 @@ export class TemporalLRUCache<K, V extends NonNullable<any>|undefined> {
|
|
|
68
88
|
|
|
69
89
|
cancelTimeout() {
|
|
70
90
|
if (this.timeout !== undefined) {
|
|
71
|
-
|
|
91
|
+
clearTimeout(this.timeout);
|
|
72
92
|
this.timeout = undefined;
|
|
73
93
|
}
|
|
74
94
|
}
|
|
75
95
|
private beginTimeout() {
|
|
76
|
-
this.timeout =
|
|
96
|
+
this.timeout = setTimeout(() => {
|
|
77
97
|
const now = Date.now();
|
|
78
98
|
const droppableItems = [...this.cache.entries()]
|
|
79
99
|
.filter(([_, v]) => now - v[1] >= this.minDroppableAccessTime)
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import {createReduxStore} from "@wordpress/data";
|
|
2
|
+
|
|
3
|
+
import {TemporalLRUCache} from "./helpers";
|
|
4
|
+
import {use, type WrappedPromise, wrapPromise} from "./suspense/promise-handlers";
|
|
5
|
+
|
|
6
|
+
type SelectorsBuilder<
|
|
7
|
+
PROPS,
|
|
8
|
+
DATA,
|
|
9
|
+
SELECTORS extends { [name in string]: (...args: any[]) => any }
|
|
10
|
+
> = (handleCacheMiss: (props: PROPS) => Promise<SectionedCacheFetchResult<DATA>>) => SELECTORS;
|
|
11
|
+
type SectionedCacheFetchResult<DATA> = {error?: false, data: DATA}|{error: true, data: string};
|
|
12
|
+
type GetCacheForPropsFunction<PROPS, DATA, KEY> = (props: PROPS) => TemporalLRUCache<KEY, WrappedPromise<SectionedCacheFetchResult<DATA>>>;
|
|
13
|
+
type WarmingPromiseGetter<PROPS, DATA, KEY> = (
|
|
14
|
+
storeChanged: () => void, props: FetchWarmingDataArgs<PROPS, DATA, KEY>[0], ...args: DropFirst<FetchWarmingDataArgs<PROPS, DATA, KEY>>
|
|
15
|
+
) => WrappedPromise<void>|undefined;
|
|
16
|
+
|
|
17
|
+
type SectionedCacheStoreArgs<
|
|
18
|
+
PROPS,
|
|
19
|
+
DATA,
|
|
20
|
+
KEY,
|
|
21
|
+
SELECTORS extends { [name in string]: (...args: any[]) => any }
|
|
22
|
+
> = {
|
|
23
|
+
keyify: (props: PROPS) => KEY
|
|
24
|
+
name: string
|
|
25
|
+
selectorsBuilder: SelectorsBuilder<PROPS, DATA, SELECTORS>
|
|
26
|
+
getCacheForProps?: GetCacheForPropsFunction<PROPS, DATA, KEY>
|
|
27
|
+
getIndividualItemFetchPromise: (props: PROPS) => Promise<SectionedCacheFetchResult<DATA>>
|
|
28
|
+
getWarmingPromise: WarmingPromiseGetter<PROPS, DATA, KEY>
|
|
29
|
+
}
|
|
30
|
+
type AddBSStateArg<S extends {[name in string]: (...args: any[]) => any}> = {[name in keyof S]: (state: any, ...args: Parameters<S[name]>) => ReturnType<S[name]>};
|
|
31
|
+
export function create<PROPS, DATA, KEY, SELECTORS extends { [name in string]: (...args: any[]) => any }>(
|
|
32
|
+
args: SectionedCacheStoreArgs<PROPS, DATA, KEY, SELECTORS>
|
|
33
|
+
) {
|
|
34
|
+
type ReduxSelectors = AddBSStateArg<SELECTORS>;
|
|
35
|
+
const {getCacheForProps = makeDefaultCacheForPropsGetter(), getIndividualItemFetchPromise, getWarmingPromise, keyify, name, selectorsBuilder} = args;
|
|
36
|
+
return {
|
|
37
|
+
name,
|
|
38
|
+
instantiate: () => {
|
|
39
|
+
const listeners = new Set<() => void>();
|
|
40
|
+
|
|
41
|
+
const storeChanged = () => {
|
|
42
|
+
for (const listener of listeners) {
|
|
43
|
+
listener();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const warmCache = (props: PROPS) => {
|
|
48
|
+
const warmingPromise = getWarmingPromise(storeChanged, props, getCacheForProps, keyify);
|
|
49
|
+
if (warmingPromise !== undefined) {
|
|
50
|
+
return use(warmingPromise);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const fetchItemContents = async (props: PROPS) => {
|
|
55
|
+
try {
|
|
56
|
+
return await getIndividualItemFetchPromise(props);
|
|
57
|
+
} catch (err) {
|
|
58
|
+
return ({error: true, data: (err?.toString() as string|undefined) ?? "EMPTY_RESPONSE"} as const) satisfies SectionedCacheFetchResult<DATA>;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const handleCacheMiss = (props: PROPS): Promise<SectionedCacheFetchResult<DATA>> => {
|
|
63
|
+
const key = keyify(props);
|
|
64
|
+
warmCache(props);
|
|
65
|
+
const cache = getCacheForProps(props);
|
|
66
|
+
const existingPromise = cache.get(key);
|
|
67
|
+
if (existingPromise !== null) {
|
|
68
|
+
return existingPromise;
|
|
69
|
+
}
|
|
70
|
+
const res = wrapPromise(fetchItemContents(props));
|
|
71
|
+
res.finally(storeChanged);
|
|
72
|
+
cache.set(key, res);
|
|
73
|
+
return res;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const selectors = selectorsBuilder(handleCacheMiss);
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
getSelectors: () => selectors,
|
|
80
|
+
getSuspendSelectors: () => selectors,
|
|
81
|
+
getActions: () => ({}),
|
|
82
|
+
subscribe: (listener: () => void) => {
|
|
83
|
+
listeners.add(listener);
|
|
84
|
+
return () => listeners.delete(listener);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
} satisfies ReturnType<typeof createReduxStore<{}, {}, ReduxSelectors>> as ReturnType<typeof createReduxStore<{}, {}, ReduxSelectors>>;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function makeDefaultCacheForPropsGetter<PROPS, DATA, KEY>() {
|
|
92
|
+
const cache: ReturnType<GetCacheForPropsFunction<PROPS, DATA, KEY>> = new TemporalLRUCache(10);
|
|
93
|
+
return () => cache;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
type DropFirst<A extends any[]> = A extends [any, ...infer R] ? R : never;
|
|
97
|
+
type FetchWarmingDataArgs<PROPS, DATA, KEY> = [props: PROPS, getCacheForProps: GetCacheForPropsFunction<PROPS, DATA, KEY>, keyify: (props: PROPS) => KEY];
|
|
98
|
+
type MakeSimpleWarmingPromisesGetterArgs<PROPS, DATA, KEY> = {
|
|
99
|
+
warmingPromisesKeyify: (props: PROPS) => string|number|undefined, // Returning undefined short-circuits the rest of the function, skipping any waiting at all
|
|
100
|
+
fetchWarmingData: (...args: FetchWarmingDataArgs<PROPS, DATA, KEY>) => Promise<void>,
|
|
101
|
+
shouldWarm?: ((props: PROPS) => boolean)
|
|
102
|
+
};
|
|
103
|
+
export function makeSimpleWarmingPromisesGetter<PROPS, DATA, KEY>(
|
|
104
|
+
{warmingPromisesKeyify, fetchWarmingData, shouldWarm = () => true}: MakeSimpleWarmingPromisesGetterArgs<PROPS, DATA, KEY>
|
|
105
|
+
): WarmingPromiseGetter<PROPS, DATA, KEY> {
|
|
106
|
+
const warmingPromises: Record<string|number, WrappedPromise<void>> = {};
|
|
107
|
+
return (storeChanged, props, ...args) => {
|
|
108
|
+
const key = warmingPromisesKeyify(props);
|
|
109
|
+
if (key === undefined) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (!warmingPromises[key]) {
|
|
113
|
+
if (!shouldWarm(props)) {
|
|
114
|
+
return; // We don't want to go back to the server for the entire dataset unless we're going to be working with most of it
|
|
115
|
+
}
|
|
116
|
+
warmingPromises[key] = wrapPromise(fetchWarmingData(props, ...args).finally(storeChanged));
|
|
117
|
+
}
|
|
118
|
+
return warmingPromises[key];
|
|
119
|
+
};
|
|
120
|
+
}
|
package/src/lib/useful-types.ts
CHANGED
|
@@ -47,3 +47,5 @@ export type WPTaxonomyQuery = {
|
|
|
47
47
|
}|WPTaxonomyQueryFirstOrderClause;
|
|
48
48
|
type WPTaxonomyQueryFirstOrderClause = {include_children?: boolean, operator?: 'AND'|'IN'|'NOT IN'|'EXISTS'|'NOT EXISTS'}&
|
|
49
49
|
(({taxonomy: string}&({terms: number|number[], field?: 'term_id'}|{terms: string|string[], field: 'slug'|'name'}))|{taxonomy?: string, terms: number|number[], field: 'term_taxonomy_id'});
|
|
50
|
+
|
|
51
|
+
export type DbSource = {label: string, value: string, help?: string};
|
package/styles/editor.pcss
CHANGED
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
.plauditPostFeaturedImageWithFocalPoint__wrapper {
|
|
2
|
-
position: relative;
|
|
3
|
-
|
|
4
|
-
&:hover .plauditPostFeaturedImageWithFocalPoint__toggle, &:hover .editor-post-featured-image__actions {
|
|
5
|
-
opacity: 1;
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
.plauditPostFeaturedImageWithFocalPoint__toggle {
|
|
9
|
-
position: absolute;
|
|
10
|
-
z-index: 10000;
|
|
11
|
-
top: 0;
|
|
12
|
-
right: 0;
|
|
13
|
-
opacity: 0;
|
|
14
|
-
padding: 8px;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
1
|
.plaudit-snp-laid-out-properties-wrapper {
|
|
18
2
|
min-width: 240px;
|
|
19
3
|
}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.installPostFeaturedImageCardFocusTargeting = installPostFeaturedImageCardFocusTargeting;
|
|
4
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const components_1 = require("@wordpress/components");
|
|
6
|
-
const data_1 = require("@wordpress/data");
|
|
7
|
-
const editor_1 = require("@wordpress/editor");
|
|
8
|
-
const element_1 = require("@wordpress/element");
|
|
9
|
-
const hooks_1 = require("@wordpress/hooks");
|
|
10
|
-
const i18n_1 = require("@wordpress/i18n");
|
|
11
|
-
function getMediaDetails(media, postId) {
|
|
12
|
-
if (!media) {
|
|
13
|
-
return {};
|
|
14
|
-
}
|
|
15
|
-
const sizes = (media?.media_details?.['sizes'] ?? {});
|
|
16
|
-
const activeSize = sizes[getImageSize('large', media, postId)];
|
|
17
|
-
if (activeSize !== undefined) {
|
|
18
|
-
return {
|
|
19
|
-
mediaWidth: activeSize.width,
|
|
20
|
-
mediaHeight: activeSize.height,
|
|
21
|
-
mediaSourceUrl: activeSize.source_url,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
// Use fallbackSize when defaultSize is not available.
|
|
25
|
-
const fallbackSize = sizes[getImageSize('thumbnail', media, postId)];
|
|
26
|
-
if (fallbackSize !== undefined) {
|
|
27
|
-
return {
|
|
28
|
-
mediaWidth: fallbackSize.width,
|
|
29
|
-
mediaHeight: fallbackSize.height,
|
|
30
|
-
mediaSourceUrl: fallbackSize.source_url,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
// Use full image size when fallbackSize and defaultSize are not available.
|
|
34
|
-
return {
|
|
35
|
-
mediaWidth: media.media_details['width'],
|
|
36
|
-
mediaHeight: media.media_details['height'],
|
|
37
|
-
mediaSourceUrl: media.source_url,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
function getLivePosition(selectFunction = data_1.select) {
|
|
41
|
-
const { x = 50, y = 50 } = (selectFunction(editor_1.store).getEditedPostAttribute('meta')?.["plaudit_card-image_pos"] ?? {});
|
|
42
|
-
return { x: x / 100, y: y / 100 };
|
|
43
|
-
}
|
|
44
|
-
function setLivePosition({ x, y }) {
|
|
45
|
-
(0, data_1.dispatch)(editor_1.store)
|
|
46
|
-
.editPost({
|
|
47
|
-
meta: { "plaudit_card-image_pos": { x: Math.round(x * 100), y: Math.round(y * 100) } }
|
|
48
|
-
})
|
|
49
|
-
.catch(e => {
|
|
50
|
-
console.error(e);
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
function getRawLivePosition() {
|
|
54
|
-
return { x: 50, y: 50, ...((0, data_1.select)(editor_1.store).getEditedPostAttribute('meta')?.["plaudit_card-image_pos"] ?? {}) };
|
|
55
|
-
}
|
|
56
|
-
function getImageSize(defaultSize, media, postId) {
|
|
57
|
-
let filteredSize = (0, hooks_1.applyFilters)('editor.PostFeaturedImage.imageSize', defaultSize, media.id, postId);
|
|
58
|
-
if (typeof filteredSize !== 'string') {
|
|
59
|
-
console.error(`The 'editor.PostFeaturedImage.imageSize' filter returned a non-string size (${filteredSize}).`, `Using '${defaultSize}' as a fallback.`);
|
|
60
|
-
return defaultSize;
|
|
61
|
-
}
|
|
62
|
-
return filteredSize;
|
|
63
|
-
}
|
|
64
|
-
function wrapPostFeaturedImage(OriginalComponent) {
|
|
65
|
-
return (props) => {
|
|
66
|
-
const [inFocusMode, setInFocusMode] = (0, element_1.useState)(false);
|
|
67
|
-
// This useMemo call makes it so that we only update restorablePosition when the state changes.
|
|
68
|
-
const restorablePosition = (0, element_1.useMemo)(getLivePosition, [inFocusMode]);
|
|
69
|
-
const { mediaSourceUrl } = getMediaDetails(props.media, props.currentPostId);
|
|
70
|
-
if (!mediaSourceUrl) {
|
|
71
|
-
if ((0, data_1.select)(editor_1.store).getEditedPostAttribute('featured_media')) {
|
|
72
|
-
return (0, jsx_runtime_1.jsx)(components_1.Spinner, {});
|
|
73
|
-
}
|
|
74
|
-
return (0, jsx_runtime_1.jsx)(OriginalComponent, { ...props });
|
|
75
|
-
}
|
|
76
|
-
else if (!inFocusMode) {
|
|
77
|
-
return (0, jsx_runtime_1.jsx)(NotInFocusMode, { OriginalComponent: OriginalComponent, props: props, setInFocusMode: setInFocusMode });
|
|
78
|
-
}
|
|
79
|
-
return (0, jsx_runtime_1.jsx)(InFocusMode, { mediaSourceUrl: mediaSourceUrl, props: props, restorablePosition: restorablePosition, setInFocusMode: setInFocusMode });
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
const NotInFocusMode = (0, element_1.memo)(({ OriginalComponent, props, setInFocusMode }) => {
|
|
83
|
-
const { x, y } = getRawLivePosition();
|
|
84
|
-
(0, element_1.useEffect)(() => {
|
|
85
|
-
let sheet = document.adoptedStyleSheets.find(s => s.identifier === '__POST_FEATURED_IMAGE__');
|
|
86
|
-
if (!sheet) {
|
|
87
|
-
sheet = new CSSStyleSheet();
|
|
88
|
-
sheet.identifier = '__POST_FEATURED_IMAGE__';
|
|
89
|
-
}
|
|
90
|
-
sheet.replace(`.plauditPostFeaturedImageWithFocalPoint__wrapper .editor-post-featured-image__preview-image {object-fit: ${x}% ${y}% !important;}`)
|
|
91
|
-
.catch(e => {
|
|
92
|
-
console.error(e);
|
|
93
|
-
});
|
|
94
|
-
return () => {
|
|
95
|
-
const sheet = document.adoptedStyleSheets.findIndex(s => s.identifier === '__POST_FEATURED_IMAGE__');
|
|
96
|
-
if (sheet) {
|
|
97
|
-
document.adoptedStyleSheets.splice(sheet, 1);
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
}, [x, y]);
|
|
101
|
-
return (0, jsx_runtime_1.jsx)(editor_1.PostFeaturedImageCheck, { children: (0, jsx_runtime_1.jsxs)("div", { className: "plauditPostFeaturedImageWithFocalPoint__wrapper", children: [(0, jsx_runtime_1.jsx)("div", { className: "plauditPostFeaturedImageWithFocalPoint__toggle", children: (0, jsx_runtime_1.jsx)(components_1.Button, { onClick: (0, element_1.useCallback)(() => setInFocusMode(true), [setInFocusMode]), className: "editor-post-featured-image__action", text: (0, i18n_1.__)("Change Focal Point", 'plaudit') }) }), (0, jsx_runtime_1.jsx)(OriginalComponent, { ...props })] }) });
|
|
102
|
-
});
|
|
103
|
-
const InFocusMode = (0, element_1.memo)(({ mediaSourceUrl, props, restorablePosition, setInFocusMode }) => {
|
|
104
|
-
// 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
|
|
105
|
-
const { x, y } = (0, data_1.useSelect)(getLivePosition, []);
|
|
106
|
-
const [position, setPosition] = (0, element_1.useState)({ x, y });
|
|
107
|
-
(0, element_1.useEffect)(() => setPosition(getLivePosition()), [x, y]);
|
|
108
|
-
return (0, jsx_runtime_1.jsxs)(editor_1.PostFeaturedImageCheck, { children: [props.noticeUI, (0, jsx_runtime_1.jsxs)("div", { className: "editor-post-featured-image", children: [(0, jsx_runtime_1.jsx)(components_1.FocalPointPicker, { onChange: (0, element_1.useCallback)(pos => {
|
|
109
|
-
setPosition(pos);
|
|
110
|
-
setLivePosition(pos);
|
|
111
|
-
}, [setPosition]), url: mediaSourceUrl, value: position }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(components_1.Button, { text: (0, i18n_1.__)("Done", 'plaudit'), onClick: (0, element_1.useCallback)(() => setInFocusMode(false), [setInFocusMode]), variant: "primary" }), (0, jsx_runtime_1.jsx)(components_1.Button, { text: (0, i18n_1.__)('Cancel', 'plaudit'), onClick: (0, element_1.useCallback)(() => {
|
|
112
|
-
setLivePosition(restorablePosition);
|
|
113
|
-
setInFocusMode(false);
|
|
114
|
-
}, [setInFocusMode]), isDestructive: true })] })] })] });
|
|
115
|
-
});
|
|
116
|
-
function installPostFeaturedImageCardFocusTargeting() {
|
|
117
|
-
if (!installPostFeaturedImageCardFocusTargeting.called) {
|
|
118
|
-
installPostFeaturedImageCardFocusTargeting.called = true;
|
|
119
|
-
(0, hooks_1.addFilter)('editor.PostFeaturedImage', 'plaudit-gutenberg-api-extensions/inject-post-featured-image-card-focus-targeting', wrapPostFeaturedImage);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
(function (installPostFeaturedImageCardFocusTargeting) {
|
|
123
|
-
installPostFeaturedImageCardFocusTargeting.called = false;
|
|
124
|
-
})(installPostFeaturedImageCardFocusTargeting || (exports.installPostFeaturedImageCardFocusTargeting = installPostFeaturedImageCardFocusTargeting = {}));
|
|
125
|
-
//# sourceMappingURL=post-featured-image.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"post-featured-image.js","sourceRoot":"","sources":["../../src/editor/post-featured-image.tsx"],"names":[],"mappings":"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"}
|
|
@@ -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
|
-
}
|