@elementor/editor-styles-repository 0.1.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/.turbo/turbo-build.log +22 -0
- package/CHANGELOG.md +15 -0
- package/dist/index.d.mts +15 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +64 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +40 -0
- package/src/__tests__/elements-styles-provider.test.ts +41 -0
- package/src/elements-styles-provider.ts +27 -0
- package/src/index.ts +7 -0
- package/src/init.ts +6 -0
- package/src/styles-repository.ts +3 -0
- package/src/utils/__tests__/create-styles-repository.test.ts +84 -0
- package/src/utils/create-styles-repository.ts +38 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
> @elementor/editor-styles-repository@0.1.0 build
|
|
3
|
+
> tsup --config=../../tsup.build.ts
|
|
4
|
+
|
|
5
|
+
[34mCLI[39m Building entry: src/index.ts
|
|
6
|
+
[34mCLI[39m Using tsconfig: ../../../tsconfig.json
|
|
7
|
+
[34mCLI[39m tsup v8.3.5
|
|
8
|
+
[34mCLI[39m Using tsup config: /home/runner/work/elementor-packages/elementor-packages/tsup.build.ts
|
|
9
|
+
[34mCLI[39m Target: esnext
|
|
10
|
+
[34mCLI[39m Cleaning output folder
|
|
11
|
+
[34mESM[39m Build start
|
|
12
|
+
[34mCJS[39m Build start
|
|
13
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m1.62 KB[39m
|
|
14
|
+
[32mESM[39m [1mdist/index.mjs.map [22m[32m3.55 KB[39m
|
|
15
|
+
[32mESM[39m ⚡️ Build success in 30ms
|
|
16
|
+
[32mCJS[39m [1mdist/index.js [22m[32m2.74 KB[39m
|
|
17
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m3.59 KB[39m
|
|
18
|
+
[32mCJS[39m ⚡️ Build success in 31ms
|
|
19
|
+
[34mDTS[39m Build start
|
|
20
|
+
[32mDTS[39m ⚡️ Build success in 11031ms
|
|
21
|
+
[32mDTS[39m [1mdist/index.d.mts [22m[32m519.00 B[39m
|
|
22
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m519.00 B[39m
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# @elementor/editor-styles-repository
|
|
2
|
+
|
|
3
|
+
## 0.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 081bae8: Move the style renderer into editor-canvas and register the elements styles provider in editor-styles-repository
|
|
8
|
+
- f584292: Create editor styles repository
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- Updated dependencies [081bae8]
|
|
13
|
+
- Updated dependencies [f584292]
|
|
14
|
+
- @elementor/editor-elements@0.3.1
|
|
15
|
+
- @elementor/editor-styles@0.3.0
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as _elementor_editor_styles from '@elementor/editor-styles';
|
|
2
|
+
import { StyleDefinitionsMap } from '@elementor/editor-styles';
|
|
3
|
+
|
|
4
|
+
type StylesProvider = {
|
|
5
|
+
get: () => StyleDefinitionsMap;
|
|
6
|
+
subscribe: (callback: () => void) => () => void;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
declare const stylesRepository: {
|
|
10
|
+
registerProvider: (key: string, provider: StylesProvider) => void;
|
|
11
|
+
all: () => _elementor_editor_styles.StyleDefinitionsMap;
|
|
12
|
+
subscribe: (cb: () => void) => () => void;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { type StylesProvider, stylesRepository };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as _elementor_editor_styles from '@elementor/editor-styles';
|
|
2
|
+
import { StyleDefinitionsMap } from '@elementor/editor-styles';
|
|
3
|
+
|
|
4
|
+
type StylesProvider = {
|
|
5
|
+
get: () => StyleDefinitionsMap;
|
|
6
|
+
subscribe: (callback: () => void) => () => void;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
declare const stylesRepository: {
|
|
10
|
+
registerProvider: (key: string, provider: StylesProvider) => void;
|
|
11
|
+
all: () => _elementor_editor_styles.StyleDefinitionsMap;
|
|
12
|
+
subscribe: (cb: () => void) => () => void;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { type StylesProvider, stylesRepository };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
stylesRepository: () => stylesRepository
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(src_exports);
|
|
26
|
+
|
|
27
|
+
// src/utils/create-styles-repository.ts
|
|
28
|
+
var createStylesRepository = () => {
|
|
29
|
+
const providers = /* @__PURE__ */ new Map();
|
|
30
|
+
const registerProvider = (key, provider) => {
|
|
31
|
+
providers.set(key, provider);
|
|
32
|
+
};
|
|
33
|
+
const all = () => {
|
|
34
|
+
return Array.from(providers.values()).reduce((acc, provider) => {
|
|
35
|
+
const styles = provider.get();
|
|
36
|
+
return { ...acc, ...styles };
|
|
37
|
+
}, {});
|
|
38
|
+
};
|
|
39
|
+
const subscribe = (cb) => {
|
|
40
|
+
const unsubscribes = Array.from(providers.values()).map((provider) => {
|
|
41
|
+
return provider.subscribe(cb);
|
|
42
|
+
});
|
|
43
|
+
return () => {
|
|
44
|
+
unsubscribes.forEach((unsubscribe) => unsubscribe());
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
registerProvider,
|
|
49
|
+
all,
|
|
50
|
+
subscribe
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// src/styles-repository.ts
|
|
55
|
+
var stylesRepository = createStylesRepository();
|
|
56
|
+
|
|
57
|
+
// src/elements-styles-provider.ts
|
|
58
|
+
var import_editor_elements = require("@elementor/editor-elements");
|
|
59
|
+
var import_editor_v1_adapters = require("@elementor/editor-v1-adapters");
|
|
60
|
+
var elementsStylesProvider = {
|
|
61
|
+
get: () => {
|
|
62
|
+
const elements = (0, import_editor_elements.getElements)();
|
|
63
|
+
const entries = elements.flatMap((element) => {
|
|
64
|
+
const styles = element.model.get("styles");
|
|
65
|
+
return styles ? Object.entries(styles) : [];
|
|
66
|
+
});
|
|
67
|
+
return Object.fromEntries(entries);
|
|
68
|
+
},
|
|
69
|
+
subscribe: (cb) => {
|
|
70
|
+
return (0, import_editor_v1_adapters.__privateListenTo)(
|
|
71
|
+
[
|
|
72
|
+
(0, import_editor_v1_adapters.commandEndEvent)("editor/documents/attach-preview"),
|
|
73
|
+
(0, import_editor_v1_adapters.commandEndEvent)("document/atomic-widgets/styles")
|
|
74
|
+
],
|
|
75
|
+
cb
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// src/init.ts
|
|
81
|
+
function init() {
|
|
82
|
+
stylesRepository.registerProvider("elements", elementsStylesProvider);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// src/index.ts
|
|
86
|
+
init();
|
|
87
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
88
|
+
0 && (module.exports = {
|
|
89
|
+
stylesRepository
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/create-styles-repository.ts","../src/styles-repository.ts","../src/elements-styles-provider.ts","../src/init.ts"],"sourcesContent":["export { type StylesProvider } from './utils/create-styles-repository';\n\nexport { stylesRepository } from './styles-repository';\n\nimport { init } from './init';\n\ninit();\n","import { type StyleDefinitionsMap } from '@elementor/editor-styles';\n\nexport type StylesProvider = {\n\tget: () => StyleDefinitionsMap;\n\tsubscribe: ( callback: () => void ) => () => void;\n};\n\nexport const createStylesRepository = () => {\n\tconst providers = new Map< string, StylesProvider >();\n\n\tconst registerProvider = ( key: string, provider: StylesProvider ) => {\n\t\tproviders.set( key, provider );\n\t};\n\n\tconst all = () => {\n\t\treturn Array.from( providers.values() ).reduce< StyleDefinitionsMap >( ( acc, provider ) => {\n\t\t\tconst styles = provider.get();\n\n\t\t\treturn { ...acc, ...styles };\n\t\t}, {} );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = Array.from( providers.values() ).map( ( provider ) => {\n\t\t\treturn provider.subscribe( cb );\n\t\t} );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\treturn {\n\t\tregisterProvider,\n\t\tall,\n\t\tsubscribe,\n\t};\n};\n","import { createStylesRepository } from './utils/create-styles-repository';\n\nexport const stylesRepository = createStylesRepository();\n","import { getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\n\nimport { type StylesProvider } from './utils/create-styles-repository';\n\nexport const elementsStylesProvider: StylesProvider = {\n\tget: () => {\n\t\tconst elements = getElements();\n\n\t\tconst entries = elements.flatMap( ( element ) => {\n\t\t\tconst styles = element.model.get( 'styles' );\n\n\t\t\treturn styles ? Object.entries( styles ) : [];\n\t\t} );\n\n\t\treturn Object.fromEntries( entries );\n\t},\n\tsubscribe: ( cb ) => {\n\t\treturn listenTo(\n\t\t\t[\n\t\t\t\tcommandEndEvent( 'editor/documents/attach-preview' ),\n\t\t\t\tcommandEndEvent( 'document/atomic-widgets/styles' ),\n\t\t\t],\n\t\t\tcb\n\t\t);\n\t},\n};\n","import { elementsStylesProvider } from './elements-styles-provider';\nimport { stylesRepository } from './styles-repository';\n\nexport function init() {\n\tstylesRepository.registerProvider( 'elements', elementsStylesProvider );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACOO,IAAM,yBAAyB,MAAM;AAC3C,QAAM,YAAY,oBAAI,IAA8B;AAEpD,QAAM,mBAAmB,CAAE,KAAa,aAA8B;AACrE,cAAU,IAAK,KAAK,QAAS;AAAA,EAC9B;AAEA,QAAM,MAAM,MAAM;AACjB,WAAO,MAAM,KAAM,UAAU,OAAO,CAAE,EAAE,OAA+B,CAAE,KAAK,aAAc;AAC3F,YAAM,SAAS,SAAS,IAAI;AAE5B,aAAO,EAAE,GAAG,KAAK,GAAG,OAAO;AAAA,IAC5B,GAAG,CAAC,CAAE;AAAA,EACP;AAEA,QAAM,YAAY,CAAE,OAAoB;AACvC,UAAM,eAAe,MAAM,KAAM,UAAU,OAAO,CAAE,EAAE,IAAK,CAAE,aAAc;AAC1E,aAAO,SAAS,UAAW,EAAG;AAAA,IAC/B,CAAE;AAEF,WAAO,MAAM;AACZ,mBAAa,QAAS,CAAE,gBAAiB,YAAY,CAAE;AAAA,IACxD;AAAA,EACD;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;ACnCO,IAAM,mBAAmB,uBAAuB;;;ACFvD,6BAA4B;AAC5B,gCAA+D;AAIxD,IAAM,yBAAyC;AAAA,EACrD,KAAK,MAAM;AACV,UAAM,eAAW,oCAAY;AAE7B,UAAM,UAAU,SAAS,QAAS,CAAE,YAAa;AAChD,YAAM,SAAS,QAAQ,MAAM,IAAK,QAAS;AAE3C,aAAO,SAAS,OAAO,QAAS,MAAO,IAAI,CAAC;AAAA,IAC7C,CAAE;AAEF,WAAO,OAAO,YAAa,OAAQ;AAAA,EACpC;AAAA,EACA,WAAW,CAAE,OAAQ;AACpB,eAAO,0BAAAA;AAAA,MACN;AAAA,YACC,2CAAiB,iCAAkC;AAAA,YACnD,2CAAiB,gCAAiC;AAAA,MACnD;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;;;ACvBO,SAAS,OAAO;AACtB,mBAAiB,iBAAkB,YAAY,sBAAuB;AACvE;;;AJCA,KAAK;","names":["listenTo"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// src/utils/create-styles-repository.ts
|
|
2
|
+
var createStylesRepository = () => {
|
|
3
|
+
const providers = /* @__PURE__ */ new Map();
|
|
4
|
+
const registerProvider = (key, provider) => {
|
|
5
|
+
providers.set(key, provider);
|
|
6
|
+
};
|
|
7
|
+
const all = () => {
|
|
8
|
+
return Array.from(providers.values()).reduce((acc, provider) => {
|
|
9
|
+
const styles = provider.get();
|
|
10
|
+
return { ...acc, ...styles };
|
|
11
|
+
}, {});
|
|
12
|
+
};
|
|
13
|
+
const subscribe = (cb) => {
|
|
14
|
+
const unsubscribes = Array.from(providers.values()).map((provider) => {
|
|
15
|
+
return provider.subscribe(cb);
|
|
16
|
+
});
|
|
17
|
+
return () => {
|
|
18
|
+
unsubscribes.forEach((unsubscribe) => unsubscribe());
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
registerProvider,
|
|
23
|
+
all,
|
|
24
|
+
subscribe
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// src/styles-repository.ts
|
|
29
|
+
var stylesRepository = createStylesRepository();
|
|
30
|
+
|
|
31
|
+
// src/elements-styles-provider.ts
|
|
32
|
+
import { getElements } from "@elementor/editor-elements";
|
|
33
|
+
import { __privateListenTo as listenTo, commandEndEvent } from "@elementor/editor-v1-adapters";
|
|
34
|
+
var elementsStylesProvider = {
|
|
35
|
+
get: () => {
|
|
36
|
+
const elements = getElements();
|
|
37
|
+
const entries = elements.flatMap((element) => {
|
|
38
|
+
const styles = element.model.get("styles");
|
|
39
|
+
return styles ? Object.entries(styles) : [];
|
|
40
|
+
});
|
|
41
|
+
return Object.fromEntries(entries);
|
|
42
|
+
},
|
|
43
|
+
subscribe: (cb) => {
|
|
44
|
+
return listenTo(
|
|
45
|
+
[
|
|
46
|
+
commandEndEvent("editor/documents/attach-preview"),
|
|
47
|
+
commandEndEvent("document/atomic-widgets/styles")
|
|
48
|
+
],
|
|
49
|
+
cb
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// src/init.ts
|
|
55
|
+
function init() {
|
|
56
|
+
stylesRepository.registerProvider("elements", elementsStylesProvider);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// src/index.ts
|
|
60
|
+
init();
|
|
61
|
+
export {
|
|
62
|
+
stylesRepository
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/create-styles-repository.ts","../src/styles-repository.ts","../src/elements-styles-provider.ts","../src/init.ts","../src/index.ts"],"sourcesContent":["import { type StyleDefinitionsMap } from '@elementor/editor-styles';\n\nexport type StylesProvider = {\n\tget: () => StyleDefinitionsMap;\n\tsubscribe: ( callback: () => void ) => () => void;\n};\n\nexport const createStylesRepository = () => {\n\tconst providers = new Map< string, StylesProvider >();\n\n\tconst registerProvider = ( key: string, provider: StylesProvider ) => {\n\t\tproviders.set( key, provider );\n\t};\n\n\tconst all = () => {\n\t\treturn Array.from( providers.values() ).reduce< StyleDefinitionsMap >( ( acc, provider ) => {\n\t\t\tconst styles = provider.get();\n\n\t\t\treturn { ...acc, ...styles };\n\t\t}, {} );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = Array.from( providers.values() ).map( ( provider ) => {\n\t\t\treturn provider.subscribe( cb );\n\t\t} );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\treturn {\n\t\tregisterProvider,\n\t\tall,\n\t\tsubscribe,\n\t};\n};\n","import { createStylesRepository } from './utils/create-styles-repository';\n\nexport const stylesRepository = createStylesRepository();\n","import { getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\n\nimport { type StylesProvider } from './utils/create-styles-repository';\n\nexport const elementsStylesProvider: StylesProvider = {\n\tget: () => {\n\t\tconst elements = getElements();\n\n\t\tconst entries = elements.flatMap( ( element ) => {\n\t\t\tconst styles = element.model.get( 'styles' );\n\n\t\t\treturn styles ? Object.entries( styles ) : [];\n\t\t} );\n\n\t\treturn Object.fromEntries( entries );\n\t},\n\tsubscribe: ( cb ) => {\n\t\treturn listenTo(\n\t\t\t[\n\t\t\t\tcommandEndEvent( 'editor/documents/attach-preview' ),\n\t\t\t\tcommandEndEvent( 'document/atomic-widgets/styles' ),\n\t\t\t],\n\t\t\tcb\n\t\t);\n\t},\n};\n","import { elementsStylesProvider } from './elements-styles-provider';\nimport { stylesRepository } from './styles-repository';\n\nexport function init() {\n\tstylesRepository.registerProvider( 'elements', elementsStylesProvider );\n}\n","export { type StylesProvider } from './utils/create-styles-repository';\n\nexport { stylesRepository } from './styles-repository';\n\nimport { init } from './init';\n\ninit();\n"],"mappings":";AAOO,IAAM,yBAAyB,MAAM;AAC3C,QAAM,YAAY,oBAAI,IAA8B;AAEpD,QAAM,mBAAmB,CAAE,KAAa,aAA8B;AACrE,cAAU,IAAK,KAAK,QAAS;AAAA,EAC9B;AAEA,QAAM,MAAM,MAAM;AACjB,WAAO,MAAM,KAAM,UAAU,OAAO,CAAE,EAAE,OAA+B,CAAE,KAAK,aAAc;AAC3F,YAAM,SAAS,SAAS,IAAI;AAE5B,aAAO,EAAE,GAAG,KAAK,GAAG,OAAO;AAAA,IAC5B,GAAG,CAAC,CAAE;AAAA,EACP;AAEA,QAAM,YAAY,CAAE,OAAoB;AACvC,UAAM,eAAe,MAAM,KAAM,UAAU,OAAO,CAAE,EAAE,IAAK,CAAE,aAAc;AAC1E,aAAO,SAAS,UAAW,EAAG;AAAA,IAC/B,CAAE;AAEF,WAAO,MAAM;AACZ,mBAAa,QAAS,CAAE,gBAAiB,YAAY,CAAE;AAAA,IACxD;AAAA,EACD;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;ACnCO,IAAM,mBAAmB,uBAAuB;;;ACFvD,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB,UAAU,uBAAuB;AAIxD,IAAM,yBAAyC;AAAA,EACrD,KAAK,MAAM;AACV,UAAM,WAAW,YAAY;AAE7B,UAAM,UAAU,SAAS,QAAS,CAAE,YAAa;AAChD,YAAM,SAAS,QAAQ,MAAM,IAAK,QAAS;AAE3C,aAAO,SAAS,OAAO,QAAS,MAAO,IAAI,CAAC;AAAA,IAC7C,CAAE;AAEF,WAAO,OAAO,YAAa,OAAQ;AAAA,EACpC;AAAA,EACA,WAAW,CAAE,OAAQ;AACpB,WAAO;AAAA,MACN;AAAA,QACC,gBAAiB,iCAAkC;AAAA,QACnD,gBAAiB,gCAAiC;AAAA,MACnD;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;;;ACvBO,SAAS,OAAO;AACtB,mBAAiB,iBAAkB,YAAY,sBAAuB;AACvE;;;ACCA,KAAK;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@elementor/editor-styles-repository",
|
|
3
|
+
"description": "Elementor Editor Styles Repository",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"private": false,
|
|
6
|
+
"author": "Elementor Team",
|
|
7
|
+
"homepage": "https://elementor.com/",
|
|
8
|
+
"license": "GPL-3.0-or-later",
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"module": "dist/index.mjs",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.mjs",
|
|
16
|
+
"require": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./package.json": "./package.json"
|
|
19
|
+
},
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "https://github.com/elementor/elementor-packages.git",
|
|
23
|
+
"directory": "packages/core/editor-styles-repository"
|
|
24
|
+
},
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/elementor/elementor-packages/issues"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsup --config=../../tsup.build.ts",
|
|
33
|
+
"dev": "tsup --config=../../tsup.dev.ts"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@elementor/editor-elements": "^0.3.1",
|
|
37
|
+
"@elementor/editor-styles": "^0.3.0",
|
|
38
|
+
"@elementor/editor-v1-adapters": "^0.8.4"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { createMockElement, createMockStyleDefinition } from 'test-utils';
|
|
2
|
+
import { getElements } from '@elementor/editor-elements';
|
|
3
|
+
|
|
4
|
+
import { elementsStylesProvider } from '../elements-styles-provider';
|
|
5
|
+
|
|
6
|
+
jest.mock( '@elementor/editor-elements' );
|
|
7
|
+
|
|
8
|
+
describe( 'elementsStylesProvider', () => {
|
|
9
|
+
it( 'should return all the styles attached to all the document elements', () => {
|
|
10
|
+
// Arrange.
|
|
11
|
+
jest.mocked( getElements ).mockReturnValue( [
|
|
12
|
+
createMockElement( {
|
|
13
|
+
model: {
|
|
14
|
+
id: '1',
|
|
15
|
+
styles: {
|
|
16
|
+
's-1': createMockStyleDefinition( { id: 's-1' } ),
|
|
17
|
+
's-2': createMockStyleDefinition( { id: 's-2' } ),
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
} ),
|
|
21
|
+
createMockElement( {
|
|
22
|
+
model: {
|
|
23
|
+
id: '2',
|
|
24
|
+
styles: {
|
|
25
|
+
's-3': createMockStyleDefinition( { id: 's-3' } ),
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
} ),
|
|
29
|
+
] );
|
|
30
|
+
|
|
31
|
+
// Act.
|
|
32
|
+
const styles = elementsStylesProvider.get();
|
|
33
|
+
|
|
34
|
+
// Assert.
|
|
35
|
+
expect( styles ).toEqual( {
|
|
36
|
+
's-1': expect.objectContaining( { id: 's-1' } ),
|
|
37
|
+
's-2': expect.objectContaining( { id: 's-2' } ),
|
|
38
|
+
's-3': expect.objectContaining( { id: 's-3' } ),
|
|
39
|
+
} );
|
|
40
|
+
} );
|
|
41
|
+
} );
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { getElements } from '@elementor/editor-elements';
|
|
2
|
+
import { __privateListenTo as listenTo, commandEndEvent } from '@elementor/editor-v1-adapters';
|
|
3
|
+
|
|
4
|
+
import { type StylesProvider } from './utils/create-styles-repository';
|
|
5
|
+
|
|
6
|
+
export const elementsStylesProvider: StylesProvider = {
|
|
7
|
+
get: () => {
|
|
8
|
+
const elements = getElements();
|
|
9
|
+
|
|
10
|
+
const entries = elements.flatMap( ( element ) => {
|
|
11
|
+
const styles = element.model.get( 'styles' );
|
|
12
|
+
|
|
13
|
+
return styles ? Object.entries( styles ) : [];
|
|
14
|
+
} );
|
|
15
|
+
|
|
16
|
+
return Object.fromEntries( entries );
|
|
17
|
+
},
|
|
18
|
+
subscribe: ( cb ) => {
|
|
19
|
+
return listenTo(
|
|
20
|
+
[
|
|
21
|
+
commandEndEvent( 'editor/documents/attach-preview' ),
|
|
22
|
+
commandEndEvent( 'document/atomic-widgets/styles' ),
|
|
23
|
+
],
|
|
24
|
+
cb
|
|
25
|
+
);
|
|
26
|
+
},
|
|
27
|
+
};
|
package/src/index.ts
ADDED
package/src/init.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { createMockStyleDefinition } from 'test-utils';
|
|
2
|
+
import { type StyleDefinitionsMap } from '@elementor/editor-styles';
|
|
3
|
+
|
|
4
|
+
import { createStylesRepository, type StylesProvider } from '../create-styles-repository';
|
|
5
|
+
|
|
6
|
+
const styleDef1 = createMockStyleDefinition( { props: { color: { $$type: 'color', value: '#dddddd' } } } );
|
|
7
|
+
const styleDef2 = createMockStyleDefinition( { props: { color: { $$type: 'color', value: '#eeeeee' } } } );
|
|
8
|
+
|
|
9
|
+
describe( 'createStylesRepository', () => {
|
|
10
|
+
it( 'should register and get all styles from all providers', () => {
|
|
11
|
+
// Arrange
|
|
12
|
+
const repo = createStylesRepository();
|
|
13
|
+
|
|
14
|
+
repo.registerProvider( 'mock1', createMockProvider( { [ styleDef1.id ]: styleDef1 } ).provider );
|
|
15
|
+
repo.registerProvider( 'mock2', createMockProvider( { [ styleDef2.id ]: styleDef2 } ).provider );
|
|
16
|
+
|
|
17
|
+
// Assert
|
|
18
|
+
expect( repo.all() ).toEqual( {
|
|
19
|
+
[ styleDef1.id ]: styleDef1,
|
|
20
|
+
[ styleDef2.id ]: styleDef2,
|
|
21
|
+
} );
|
|
22
|
+
} );
|
|
23
|
+
|
|
24
|
+
it( 'should subscribe and unsubscribe to all style providers', () => {
|
|
25
|
+
// Arrange
|
|
26
|
+
const repo = createStylesRepository();
|
|
27
|
+
|
|
28
|
+
const { provider: mockStylesProvider1, notify: notify1 } = createMockProvider( {
|
|
29
|
+
[ styleDef1.id ]: styleDef1,
|
|
30
|
+
} );
|
|
31
|
+
|
|
32
|
+
const { provider: mockStylesProvider2, notify: notify2 } = createMockProvider( {
|
|
33
|
+
[ styleDef2.id ]: styleDef2,
|
|
34
|
+
} );
|
|
35
|
+
|
|
36
|
+
repo.registerProvider( 'mock1', mockStylesProvider1 );
|
|
37
|
+
repo.registerProvider( 'mock2', mockStylesProvider2 );
|
|
38
|
+
|
|
39
|
+
const cb = jest.fn();
|
|
40
|
+
const unsubscribe = repo.subscribe( cb );
|
|
41
|
+
|
|
42
|
+
// Act
|
|
43
|
+
notify1();
|
|
44
|
+
|
|
45
|
+
// Assert
|
|
46
|
+
expect( cb ).toHaveBeenCalledTimes( 1 );
|
|
47
|
+
|
|
48
|
+
// Act
|
|
49
|
+
notify2();
|
|
50
|
+
|
|
51
|
+
// Assert
|
|
52
|
+
expect( cb ).toHaveBeenCalledTimes( 2 );
|
|
53
|
+
|
|
54
|
+
// Act
|
|
55
|
+
unsubscribe();
|
|
56
|
+
|
|
57
|
+
notify1();
|
|
58
|
+
notify2();
|
|
59
|
+
|
|
60
|
+
// Assert
|
|
61
|
+
expect( cb ).toHaveBeenCalledTimes( 2 );
|
|
62
|
+
} );
|
|
63
|
+
} );
|
|
64
|
+
|
|
65
|
+
const createMockProvider = ( styleDefinitions: StyleDefinitionsMap ) => {
|
|
66
|
+
const subscribers = new Set< () => void >();
|
|
67
|
+
|
|
68
|
+
const notify = () => {
|
|
69
|
+
subscribers.forEach( ( cb ) => cb() );
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const provider: StylesProvider = {
|
|
73
|
+
get: () => styleDefinitions,
|
|
74
|
+
subscribe: ( cb ) => {
|
|
75
|
+
subscribers.add( cb );
|
|
76
|
+
|
|
77
|
+
return () => {
|
|
78
|
+
subscribers.delete( cb );
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
return { provider, notify };
|
|
84
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type StyleDefinitionsMap } from '@elementor/editor-styles';
|
|
2
|
+
|
|
3
|
+
export type StylesProvider = {
|
|
4
|
+
get: () => StyleDefinitionsMap;
|
|
5
|
+
subscribe: ( callback: () => void ) => () => void;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const createStylesRepository = () => {
|
|
9
|
+
const providers = new Map< string, StylesProvider >();
|
|
10
|
+
|
|
11
|
+
const registerProvider = ( key: string, provider: StylesProvider ) => {
|
|
12
|
+
providers.set( key, provider );
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const all = () => {
|
|
16
|
+
return Array.from( providers.values() ).reduce< StyleDefinitionsMap >( ( acc, provider ) => {
|
|
17
|
+
const styles = provider.get();
|
|
18
|
+
|
|
19
|
+
return { ...acc, ...styles };
|
|
20
|
+
}, {} );
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const subscribe = ( cb: () => void ) => {
|
|
24
|
+
const unsubscribes = Array.from( providers.values() ).map( ( provider ) => {
|
|
25
|
+
return provider.subscribe( cb );
|
|
26
|
+
} );
|
|
27
|
+
|
|
28
|
+
return () => {
|
|
29
|
+
unsubscribes.forEach( ( unsubscribe ) => unsubscribe() );
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
registerProvider,
|
|
35
|
+
all,
|
|
36
|
+
subscribe,
|
|
37
|
+
};
|
|
38
|
+
};
|