@wordpress/style-engine 0.2.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 +9 -0
- package/LICENSE.md +788 -0
- package/README.md +62 -0
- package/build/index.js +53 -0
- package/build/index.js.map +1 -0
- package/build/styles/index.js +17 -0
- package/build/styles/index.js.map +1 -0
- package/build/styles/padding.js +21 -0
- package/build/styles/padding.js.map +1 -0
- package/build/styles/utils.js +47 -0
- package/build/styles/utils.js.map +1 -0
- package/build/types.js +6 -0
- package/build/types.js.map +1 -0
- package/build-module/index.js +44 -0
- package/build-module/index.js.map +1 -0
- package/build-module/styles/index.js +6 -0
- package/build-module/styles/index.js.map +1 -0
- package/build-module/styles/padding.js +12 -0
- package/build-module/styles/padding.js.map +1 -0
- package/build-module/styles/utils.js +43 -0
- package/build-module/styles/utils.js.map +1 -0
- package/build-module/types.js +2 -0
- package/build-module/types.js.map +1 -0
- package/build-types/index.d.ts +23 -0
- package/build-types/index.d.ts.map +1 -0
- package/build-types/styles/index.d.ts +5 -0
- package/build-types/styles/index.d.ts.map +1 -0
- package/build-types/styles/padding.d.ts +10 -0
- package/build-types/styles/padding.d.ts.map +1 -0
- package/build-types/styles/utils.d.ts +6 -0
- package/build-types/styles/utils.d.ts.map +1 -0
- package/build-types/types.d.ts +48 -0
- package/build-types/types.d.ts.map +1 -0
- package/package.json +38 -0
- package/src/index.ts +64 -0
- package/src/styles/index.ts +6 -0
- package/src/styles/padding.ts +19 -0
- package/src/styles/utils.ts +48 -0
- package/src/test/index.js +83 -0
- package/src/types.ts +51 -0
- package/tsconfig.json +8 -0
- package/tsconfig.tsbuildinfo +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Style Engine
|
|
2
|
+
|
|
3
|
+
The Style Engine powering global styles and block customizations.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Install the module
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @wordpress/style-engine --save
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for such language features and APIs, you should include [the polyfill shipped in `@wordpress/babel-preset-default`](https://github.com/WordPress/gutenberg/tree/HEAD/packages/babel-preset-default#polyfill) in your code._
|
|
14
|
+
|
|
15
|
+
## Important
|
|
16
|
+
|
|
17
|
+
This Package is considered experimental at the moment. The idea is to have a package used to generate styles based on a style object that is consistent between: backend, frontend, block style object and theme.json.
|
|
18
|
+
|
|
19
|
+
Currently it's not a package that generates a wp.styleEngine global because it's not ready yet, it's still a bundled package but ultimately, we want it to be so, once the roadmap is finished:
|
|
20
|
+
|
|
21
|
+
**TODO List:**
|
|
22
|
+
|
|
23
|
+
- Add style definitions for all the currently supported styles in blocks and theme.json.
|
|
24
|
+
- the CSS variable shortcuts for values (for presets...)
|
|
25
|
+
- Support generating styles in the frontend.
|
|
26
|
+
- Support generating styles in the backend (block supports and theme.json stylesheet).
|
|
27
|
+
- Refactor all block styles to use the style engine server side.
|
|
28
|
+
- Refactor all blocks to consistently use the "style" attribute for all customizations (get rid of the preset specific attributes).
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
<!-- START TOKEN(Autogenerated API docs) -->
|
|
33
|
+
|
|
34
|
+
### generate
|
|
35
|
+
|
|
36
|
+
Generates a stylesheet for a given style object and selector.
|
|
37
|
+
|
|
38
|
+
_Parameters_
|
|
39
|
+
|
|
40
|
+
- _style_ `Style`: Style object.
|
|
41
|
+
- _options_ `StyleOptions`: Options object with settings to adjust how the styles are generated.
|
|
42
|
+
|
|
43
|
+
_Returns_
|
|
44
|
+
|
|
45
|
+
- `string`: generated stylesheet.
|
|
46
|
+
|
|
47
|
+
### getCSSRules
|
|
48
|
+
|
|
49
|
+
Returns a JSON representation of the generated CSS rules.
|
|
50
|
+
|
|
51
|
+
_Parameters_
|
|
52
|
+
|
|
53
|
+
- _style_ `Style`: Style object.
|
|
54
|
+
- _options_ `StyleOptions`: Options object with settings to adjust how the styles are generated.
|
|
55
|
+
|
|
56
|
+
_Returns_
|
|
57
|
+
|
|
58
|
+
- `GeneratedCSSRule[]`: generated styles.
|
|
59
|
+
|
|
60
|
+
<!-- END TOKEN(Autogenerated API docs) -->
|
|
61
|
+
|
|
62
|
+
<br/><br/><p align="center"><img src="https://s.w.org/style/images/codeispoetry.png?1" alt="Code is Poetry." /></p>
|
package/build/index.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.generate = generate;
|
|
7
|
+
exports.getCSSRules = getCSSRules;
|
|
8
|
+
|
|
9
|
+
var _lodash = require("lodash");
|
|
10
|
+
|
|
11
|
+
var _styles = require("./styles");
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* External dependencies
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Generates a stylesheet for a given style object and selector.
|
|
19
|
+
*
|
|
20
|
+
* @param style Style object.
|
|
21
|
+
* @param options Options object with settings to adjust how the styles are generated.
|
|
22
|
+
*
|
|
23
|
+
* @return generated stylesheet.
|
|
24
|
+
*/
|
|
25
|
+
function generate(style, options) {
|
|
26
|
+
const rules = getCSSRules(style, options);
|
|
27
|
+
const groupedRules = (0, _lodash.groupBy)(rules, 'selector');
|
|
28
|
+
const selectorRules = Object.keys(groupedRules).reduce((acc, subSelector) => {
|
|
29
|
+
acc.push(`${subSelector} { ${groupedRules[subSelector].map(rule => `${(0, _lodash.kebabCase)(rule.key)}: ${rule.value};`).join(' ')} }`);
|
|
30
|
+
return acc;
|
|
31
|
+
}, []);
|
|
32
|
+
return selectorRules.join('\n');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Returns a JSON representation of the generated CSS rules.
|
|
36
|
+
*
|
|
37
|
+
* @param style Style object.
|
|
38
|
+
* @param options Options object with settings to adjust how the styles are generated.
|
|
39
|
+
*
|
|
40
|
+
* @return generated styles.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
function getCSSRules(style, options) {
|
|
45
|
+
const rules = [];
|
|
46
|
+
|
|
47
|
+
_styles.styleDefinitions.forEach(definition => {
|
|
48
|
+
rules.push(...definition.generate(style, options));
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
return rules;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/style-engine/src/index.ts"],"names":["generate","style","options","rules","getCSSRules","groupedRules","selectorRules","Object","keys","reduce","acc","subSelector","push","map","rule","key","value","join","styleDefinitions","forEach","definition"],"mappings":";;;;;;;;AAGA;;AAWA;;AAdA;AACA;AACA;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,QAAT,CAAmBC,KAAnB,EAAiCC,OAAjC,EAAiE;AACvE,QAAMC,KAAK,GAAGC,WAAW,CAAEH,KAAF,EAASC,OAAT,CAAzB;AACA,QAAMG,YAAY,GAAG,qBAASF,KAAT,EAAgB,UAAhB,CAArB;AACA,QAAMG,aAAa,GAAGC,MAAM,CAACC,IAAP,CAAaH,YAAb,EAA4BI,MAA5B,CACrB,CAAEC,GAAF,EAAiBC,WAAjB,KAA0C;AACzCD,IAAAA,GAAG,CAACE,IAAJ,CACE,GAAGD,WAAa,MAAMN,YAAY,CAAEM,WAAF,CAAZ,CACrBE,GADqB,CAEnBC,IAAF,IACE,GAAG,uBAAWA,IAAI,CAACC,GAAhB,CAAuB,KAAKD,IAAI,CAACE,KAAO,GAHxB,EAKrBC,IALqB,CAKf,GALe,CAKR,IANhB;AAQA,WAAOP,GAAP;AACA,GAXoB,EAYrB,EAZqB,CAAtB;AAeA,SAAOJ,aAAa,CAACW,IAAd,CAAoB,IAApB,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASb,WAAT,CACNH,KADM,EAENC,OAFM,EAGe;AACrB,QAAMC,KAAyB,GAAG,EAAlC;;AACAe,2BAAiBC,OAAjB,CAA4BC,UAAF,IAAmC;AAC5DjB,IAAAA,KAAK,CAACS,IAAN,CAAY,GAAGQ,UAAU,CAACpB,QAAX,CAAqBC,KAArB,EAA4BC,OAA5B,CAAf;AACA,GAFD;;AAIA,SAAOC,KAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\nimport { groupBy, kebabCase } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tStyle,\n\tStyleOptions,\n\tGeneratedCSSRule,\n\tStyleDefinition,\n} from './types';\nimport { styleDefinitions } from './styles';\n\n/**\n * Generates a stylesheet for a given style object and selector.\n *\n * @param style Style object.\n * @param options Options object with settings to adjust how the styles are generated.\n *\n * @return generated stylesheet.\n */\nexport function generate( style: Style, options: StyleOptions ): string {\n\tconst rules = getCSSRules( style, options );\n\tconst groupedRules = groupBy( rules, 'selector' );\n\tconst selectorRules = Object.keys( groupedRules ).reduce(\n\t\t( acc: string[], subSelector: string ) => {\n\t\t\tacc.push(\n\t\t\t\t`${ subSelector } { ${ groupedRules[ subSelector ]\n\t\t\t\t\t.map(\n\t\t\t\t\t\t( rule: GeneratedCSSRule ) =>\n\t\t\t\t\t\t\t`${ kebabCase( rule.key ) }: ${ rule.value };`\n\t\t\t\t\t)\n\t\t\t\t\t.join( ' ' ) } }`\n\t\t\t);\n\t\t\treturn acc;\n\t\t},\n\t\t[]\n\t);\n\n\treturn selectorRules.join( '\\n' );\n}\n\n/**\n * Returns a JSON representation of the generated CSS rules.\n *\n * @param style Style object.\n * @param options Options object with settings to adjust how the styles are generated.\n *\n * @return generated styles.\n */\nexport function getCSSRules(\n\tstyle: Style,\n\toptions: StyleOptions\n): GeneratedCSSRule[] {\n\tconst rules: GeneratedCSSRule[] = [];\n\tstyleDefinitions.forEach( ( definition: StyleDefinition ) => {\n\t\trules.push( ...definition.generate( style, options ) );\n\t} );\n\n\treturn rules;\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.styleDefinitions = void 0;
|
|
9
|
+
|
|
10
|
+
var _padding = _interopRequireDefault(require("./padding"));
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Internal dependencies
|
|
14
|
+
*/
|
|
15
|
+
const styleDefinitions = [_padding.default];
|
|
16
|
+
exports.styleDefinitions = styleDefinitions;
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/style-engine/src/styles/index.ts"],"names":["styleDefinitions","padding"],"mappings":";;;;;;;;;AAGA;;AAHA;AACA;AACA;AAGO,MAAMA,gBAAgB,GAAG,CAAEC,gBAAF,CAAzB","sourcesContent":["/**\n * Internal dependencies\n */\nimport padding from './padding';\n\nexport const styleDefinitions = [ padding ];\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _utils = require("./utils");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Internal dependencies
|
|
12
|
+
*/
|
|
13
|
+
const padding = {
|
|
14
|
+
name: 'padding',
|
|
15
|
+
generate: (style, options) => {
|
|
16
|
+
return (0, _utils.generateBoxRules)(style, options, ['spacing', 'padding'], 'padding');
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
var _default = padding;
|
|
20
|
+
exports.default = _default;
|
|
21
|
+
//# sourceMappingURL=padding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/style-engine/src/styles/padding.ts"],"names":["padding","name","generate","style","options"],"mappings":";;;;;;;AAIA;;AAJA;AACA;AACA;AAIA,MAAMA,OAAO,GAAG;AACfC,EAAAA,IAAI,EAAE,SADS;AAEfC,EAAAA,QAAQ,EAAE,CAAEC,KAAF,EAAgBC,OAAhB,KAA2C;AACpD,WAAO,6BACND,KADM,EAENC,OAFM,EAGN,CAAE,SAAF,EAAa,SAAb,CAHM,EAIN,SAJM,CAAP;AAMA;AATc,CAAhB;eAYeJ,O","sourcesContent":["/**\n * Internal dependencies\n */\nimport type { Style, StyleOptions } from '../types';\nimport { generateBoxRules } from './utils';\n\nconst padding = {\n\tname: 'padding',\n\tgenerate: ( style: Style, options: StyleOptions ) => {\n\t\treturn generateBoxRules(\n\t\t\tstyle,\n\t\t\toptions,\n\t\t\t[ 'spacing', 'padding' ],\n\t\t\t'padding'\n\t\t);\n\t},\n};\n\nexport default padding;\n"]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.generateBoxRules = generateBoxRules;
|
|
7
|
+
|
|
8
|
+
var _lodash = require("lodash");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* External dependencies
|
|
12
|
+
*/
|
|
13
|
+
function generateBoxRules(style, options, path, ruleKey) {
|
|
14
|
+
const boxStyle = (0, _lodash.get)(style, path);
|
|
15
|
+
|
|
16
|
+
if (!boxStyle) {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const rules = [];
|
|
21
|
+
|
|
22
|
+
if (typeof boxStyle === 'string') {
|
|
23
|
+
rules.push({
|
|
24
|
+
selector: options.selector,
|
|
25
|
+
key: ruleKey,
|
|
26
|
+
value: boxStyle
|
|
27
|
+
});
|
|
28
|
+
} else {
|
|
29
|
+
const sideRules = ['top', 'right', 'bottom', 'left'].reduce((acc, side) => {
|
|
30
|
+
const value = (0, _lodash.get)(boxStyle, [side]);
|
|
31
|
+
|
|
32
|
+
if (value) {
|
|
33
|
+
acc.push({
|
|
34
|
+
selector: options.selector,
|
|
35
|
+
key: `${ruleKey}${(0, _lodash.upperFirst)(side)}`,
|
|
36
|
+
value
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return acc;
|
|
41
|
+
}, []);
|
|
42
|
+
rules.push(...sideRules);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return rules;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/style-engine/src/styles/utils.ts"],"names":["generateBoxRules","style","options","path","ruleKey","boxStyle","rules","push","selector","key","value","sideRules","reduce","acc","side"],"mappings":";;;;;;;AAGA;;AAHA;AACA;AACA;AAQO,SAASA,gBAAT,CACNC,KADM,EAENC,OAFM,EAGNC,IAHM,EAINC,OAJM,EAKe;AACrB,QAAMC,QAAkC,GAAG,iBAAKJ,KAAL,EAAYE,IAAZ,CAA3C;;AACA,MAAK,CAAEE,QAAP,EAAkB;AACjB,WAAO,EAAP;AACA;;AAED,QAAMC,KAAyB,GAAG,EAAlC;;AACA,MAAK,OAAOD,QAAP,KAAoB,QAAzB,EAAoC;AACnCC,IAAAA,KAAK,CAACC,IAAN,CAAY;AACXC,MAAAA,QAAQ,EAAEN,OAAO,CAACM,QADP;AAEXC,MAAAA,GAAG,EAAEL,OAFM;AAGXM,MAAAA,KAAK,EAAEL;AAHI,KAAZ;AAKA,GAND,MAMO;AACN,UAAMM,SAAS,GAAG,CAAE,KAAF,EAAS,OAAT,EAAkB,QAAlB,EAA4B,MAA5B,EAAqCC,MAArC,CACjB,CAAEC,GAAF,EAA2BC,IAA3B,KAA6C;AAC5C,YAAMJ,KAAyB,GAAG,iBAAKL,QAAL,EAAe,CAAES,IAAF,CAAf,CAAlC;;AACA,UAAKJ,KAAL,EAAa;AACZG,QAAAA,GAAG,CAACN,IAAJ,CAAU;AACTC,UAAAA,QAAQ,EAAEN,OAAO,CAACM,QADT;AAETC,UAAAA,GAAG,EAAG,GAAGL,OAAS,GAAG,wBAAYU,IAAZ,CAAoB,EAFhC;AAGTJ,UAAAA;AAHS,SAAV;AAKA;;AACD,aAAOG,GAAP;AACA,KAXgB,EAYjB,EAZiB,CAAlB;AAcAP,IAAAA,KAAK,CAACC,IAAN,CAAY,GAAGI,SAAf;AACA;;AAED,SAAOL,KAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\nimport { get, upperFirst } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport type { GeneratedCSSRule, Style, Box, StyleOptions } from '../types';\n\nexport function generateBoxRules(\n\tstyle: Style,\n\toptions: StyleOptions,\n\tpath: string[],\n\truleKey: string\n): GeneratedCSSRule[] {\n\tconst boxStyle: Box | string | undefined = get( style, path );\n\tif ( ! boxStyle ) {\n\t\treturn [];\n\t}\n\n\tconst rules: GeneratedCSSRule[] = [];\n\tif ( typeof boxStyle === 'string' ) {\n\t\trules.push( {\n\t\t\tselector: options.selector,\n\t\t\tkey: ruleKey,\n\t\t\tvalue: boxStyle,\n\t\t} );\n\t} else {\n\t\tconst sideRules = [ 'top', 'right', 'bottom', 'left' ].reduce(\n\t\t\t( acc: GeneratedCSSRule[], side: string ) => {\n\t\t\t\tconst value: string | undefined = get( boxStyle, [ side ] );\n\t\t\t\tif ( value ) {\n\t\t\t\t\tacc.push( {\n\t\t\t\t\t\tselector: options.selector,\n\t\t\t\t\t\tkey: `${ ruleKey }${ upperFirst( side ) }`,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t[]\n\t\t);\n\t\trules.push( ...sideRules );\n\t}\n\n\treturn rules;\n}\n"]}
|
package/build/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { groupBy, kebabCase } from 'lodash';
|
|
5
|
+
/**
|
|
6
|
+
* Internal dependencies
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { styleDefinitions } from './styles';
|
|
10
|
+
/**
|
|
11
|
+
* Generates a stylesheet for a given style object and selector.
|
|
12
|
+
*
|
|
13
|
+
* @param style Style object.
|
|
14
|
+
* @param options Options object with settings to adjust how the styles are generated.
|
|
15
|
+
*
|
|
16
|
+
* @return generated stylesheet.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export function generate(style, options) {
|
|
20
|
+
const rules = getCSSRules(style, options);
|
|
21
|
+
const groupedRules = groupBy(rules, 'selector');
|
|
22
|
+
const selectorRules = Object.keys(groupedRules).reduce((acc, subSelector) => {
|
|
23
|
+
acc.push(`${subSelector} { ${groupedRules[subSelector].map(rule => `${kebabCase(rule.key)}: ${rule.value};`).join(' ')} }`);
|
|
24
|
+
return acc;
|
|
25
|
+
}, []);
|
|
26
|
+
return selectorRules.join('\n');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Returns a JSON representation of the generated CSS rules.
|
|
30
|
+
*
|
|
31
|
+
* @param style Style object.
|
|
32
|
+
* @param options Options object with settings to adjust how the styles are generated.
|
|
33
|
+
*
|
|
34
|
+
* @return generated styles.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
export function getCSSRules(style, options) {
|
|
38
|
+
const rules = [];
|
|
39
|
+
styleDefinitions.forEach(definition => {
|
|
40
|
+
rules.push(...definition.generate(style, options));
|
|
41
|
+
});
|
|
42
|
+
return rules;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/style-engine/src/index.ts"],"names":["groupBy","kebabCase","styleDefinitions","generate","style","options","rules","getCSSRules","groupedRules","selectorRules","Object","keys","reduce","acc","subSelector","push","map","rule","key","value","join","forEach","definition"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAT,EAAkBC,SAAlB,QAAmC,QAAnC;AAEA;AACA;AACA;;AAOA,SAASC,gBAAT,QAAiC,UAAjC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,QAAT,CAAmBC,KAAnB,EAAiCC,OAAjC,EAAiE;AACvE,QAAMC,KAAK,GAAGC,WAAW,CAAEH,KAAF,EAASC,OAAT,CAAzB;AACA,QAAMG,YAAY,GAAGR,OAAO,CAAEM,KAAF,EAAS,UAAT,CAA5B;AACA,QAAMG,aAAa,GAAGC,MAAM,CAACC,IAAP,CAAaH,YAAb,EAA4BI,MAA5B,CACrB,CAAEC,GAAF,EAAiBC,WAAjB,KAA0C;AACzCD,IAAAA,GAAG,CAACE,IAAJ,CACE,GAAGD,WAAa,MAAMN,YAAY,CAAEM,WAAF,CAAZ,CACrBE,GADqB,CAEnBC,IAAF,IACE,GAAGhB,SAAS,CAAEgB,IAAI,CAACC,GAAP,CAAc,KAAKD,IAAI,CAACE,KAAO,GAHxB,EAKrBC,IALqB,CAKf,GALe,CAKR,IANhB;AAQA,WAAOP,GAAP;AACA,GAXoB,EAYrB,EAZqB,CAAtB;AAeA,SAAOJ,aAAa,CAACW,IAAd,CAAoB,IAApB,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASb,WAAT,CACNH,KADM,EAENC,OAFM,EAGe;AACrB,QAAMC,KAAyB,GAAG,EAAlC;AACAJ,EAAAA,gBAAgB,CAACmB,OAAjB,CAA4BC,UAAF,IAAmC;AAC5DhB,IAAAA,KAAK,CAACS,IAAN,CAAY,GAAGO,UAAU,CAACnB,QAAX,CAAqBC,KAArB,EAA4BC,OAA5B,CAAf;AACA,GAFD;AAIA,SAAOC,KAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\nimport { groupBy, kebabCase } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tStyle,\n\tStyleOptions,\n\tGeneratedCSSRule,\n\tStyleDefinition,\n} from './types';\nimport { styleDefinitions } from './styles';\n\n/**\n * Generates a stylesheet for a given style object and selector.\n *\n * @param style Style object.\n * @param options Options object with settings to adjust how the styles are generated.\n *\n * @return generated stylesheet.\n */\nexport function generate( style: Style, options: StyleOptions ): string {\n\tconst rules = getCSSRules( style, options );\n\tconst groupedRules = groupBy( rules, 'selector' );\n\tconst selectorRules = Object.keys( groupedRules ).reduce(\n\t\t( acc: string[], subSelector: string ) => {\n\t\t\tacc.push(\n\t\t\t\t`${ subSelector } { ${ groupedRules[ subSelector ]\n\t\t\t\t\t.map(\n\t\t\t\t\t\t( rule: GeneratedCSSRule ) =>\n\t\t\t\t\t\t\t`${ kebabCase( rule.key ) }: ${ rule.value };`\n\t\t\t\t\t)\n\t\t\t\t\t.join( ' ' ) } }`\n\t\t\t);\n\t\t\treturn acc;\n\t\t},\n\t\t[]\n\t);\n\n\treturn selectorRules.join( '\\n' );\n}\n\n/**\n * Returns a JSON representation of the generated CSS rules.\n *\n * @param style Style object.\n * @param options Options object with settings to adjust how the styles are generated.\n *\n * @return generated styles.\n */\nexport function getCSSRules(\n\tstyle: Style,\n\toptions: StyleOptions\n): GeneratedCSSRule[] {\n\tconst rules: GeneratedCSSRule[] = [];\n\tstyleDefinitions.forEach( ( definition: StyleDefinition ) => {\n\t\trules.push( ...definition.generate( style, options ) );\n\t} );\n\n\treturn rules;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/style-engine/src/styles/index.ts"],"names":["padding","styleDefinitions"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,OAAP,MAAoB,WAApB;AAEA,OAAO,MAAMC,gBAAgB,GAAG,CAAED,OAAF,CAAzB","sourcesContent":["/**\n * Internal dependencies\n */\nimport padding from './padding';\n\nexport const styleDefinitions = [ padding ];\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { generateBoxRules } from './utils';
|
|
5
|
+
const padding = {
|
|
6
|
+
name: 'padding',
|
|
7
|
+
generate: (style, options) => {
|
|
8
|
+
return generateBoxRules(style, options, ['spacing', 'padding'], 'padding');
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
export default padding;
|
|
12
|
+
//# sourceMappingURL=padding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/style-engine/src/styles/padding.ts"],"names":["generateBoxRules","padding","name","generate","style","options"],"mappings":"AAAA;AACA;AACA;AAEA,SAASA,gBAAT,QAAiC,SAAjC;AAEA,MAAMC,OAAO,GAAG;AACfC,EAAAA,IAAI,EAAE,SADS;AAEfC,EAAAA,QAAQ,EAAE,CAAEC,KAAF,EAAgBC,OAAhB,KAA2C;AACpD,WAAOL,gBAAgB,CACtBI,KADsB,EAEtBC,OAFsB,EAGtB,CAAE,SAAF,EAAa,SAAb,CAHsB,EAItB,SAJsB,CAAvB;AAMA;AATc,CAAhB;AAYA,eAAeJ,OAAf","sourcesContent":["/**\n * Internal dependencies\n */\nimport type { Style, StyleOptions } from '../types';\nimport { generateBoxRules } from './utils';\n\nconst padding = {\n\tname: 'padding',\n\tgenerate: ( style: Style, options: StyleOptions ) => {\n\t\treturn generateBoxRules(\n\t\t\tstyle,\n\t\t\toptions,\n\t\t\t[ 'spacing', 'padding' ],\n\t\t\t'padding'\n\t\t);\n\t},\n};\n\nexport default padding;\n"]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { get, upperFirst } from 'lodash';
|
|
5
|
+
/**
|
|
6
|
+
* Internal dependencies
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export function generateBoxRules(style, options, path, ruleKey) {
|
|
10
|
+
const boxStyle = get(style, path);
|
|
11
|
+
|
|
12
|
+
if (!boxStyle) {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const rules = [];
|
|
17
|
+
|
|
18
|
+
if (typeof boxStyle === 'string') {
|
|
19
|
+
rules.push({
|
|
20
|
+
selector: options.selector,
|
|
21
|
+
key: ruleKey,
|
|
22
|
+
value: boxStyle
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
const sideRules = ['top', 'right', 'bottom', 'left'].reduce((acc, side) => {
|
|
26
|
+
const value = get(boxStyle, [side]);
|
|
27
|
+
|
|
28
|
+
if (value) {
|
|
29
|
+
acc.push({
|
|
30
|
+
selector: options.selector,
|
|
31
|
+
key: `${ruleKey}${upperFirst(side)}`,
|
|
32
|
+
value
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return acc;
|
|
37
|
+
}, []);
|
|
38
|
+
rules.push(...sideRules);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return rules;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/style-engine/src/styles/utils.ts"],"names":["get","upperFirst","generateBoxRules","style","options","path","ruleKey","boxStyle","rules","push","selector","key","value","sideRules","reduce","acc","side"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,GAAT,EAAcC,UAAd,QAAgC,QAAhC;AAEA;AACA;AACA;;AAGA,OAAO,SAASC,gBAAT,CACNC,KADM,EAENC,OAFM,EAGNC,IAHM,EAINC,OAJM,EAKe;AACrB,QAAMC,QAAkC,GAAGP,GAAG,CAAEG,KAAF,EAASE,IAAT,CAA9C;;AACA,MAAK,CAAEE,QAAP,EAAkB;AACjB,WAAO,EAAP;AACA;;AAED,QAAMC,KAAyB,GAAG,EAAlC;;AACA,MAAK,OAAOD,QAAP,KAAoB,QAAzB,EAAoC;AACnCC,IAAAA,KAAK,CAACC,IAAN,CAAY;AACXC,MAAAA,QAAQ,EAAEN,OAAO,CAACM,QADP;AAEXC,MAAAA,GAAG,EAAEL,OAFM;AAGXM,MAAAA,KAAK,EAAEL;AAHI,KAAZ;AAKA,GAND,MAMO;AACN,UAAMM,SAAS,GAAG,CAAE,KAAF,EAAS,OAAT,EAAkB,QAAlB,EAA4B,MAA5B,EAAqCC,MAArC,CACjB,CAAEC,GAAF,EAA2BC,IAA3B,KAA6C;AAC5C,YAAMJ,KAAyB,GAAGZ,GAAG,CAAEO,QAAF,EAAY,CAAES,IAAF,CAAZ,CAArC;;AACA,UAAKJ,KAAL,EAAa;AACZG,QAAAA,GAAG,CAACN,IAAJ,CAAU;AACTC,UAAAA,QAAQ,EAAEN,OAAO,CAACM,QADT;AAETC,UAAAA,GAAG,EAAG,GAAGL,OAAS,GAAGL,UAAU,CAAEe,IAAF,CAAU,EAFhC;AAGTJ,UAAAA;AAHS,SAAV;AAKA;;AACD,aAAOG,GAAP;AACA,KAXgB,EAYjB,EAZiB,CAAlB;AAcAP,IAAAA,KAAK,CAACC,IAAN,CAAY,GAAGI,SAAf;AACA;;AAED,SAAOL,KAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\nimport { get, upperFirst } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport type { GeneratedCSSRule, Style, Box, StyleOptions } from '../types';\n\nexport function generateBoxRules(\n\tstyle: Style,\n\toptions: StyleOptions,\n\tpath: string[],\n\truleKey: string\n): GeneratedCSSRule[] {\n\tconst boxStyle: Box | string | undefined = get( style, path );\n\tif ( ! boxStyle ) {\n\t\treturn [];\n\t}\n\n\tconst rules: GeneratedCSSRule[] = [];\n\tif ( typeof boxStyle === 'string' ) {\n\t\trules.push( {\n\t\t\tselector: options.selector,\n\t\t\tkey: ruleKey,\n\t\t\tvalue: boxStyle,\n\t\t} );\n\t} else {\n\t\tconst sideRules = [ 'top', 'right', 'bottom', 'left' ].reduce(\n\t\t\t( acc: GeneratedCSSRule[], side: string ) => {\n\t\t\t\tconst value: string | undefined = get( boxStyle, [ side ] );\n\t\t\t\tif ( value ) {\n\t\t\t\t\tacc.push( {\n\t\t\t\t\t\tselector: options.selector,\n\t\t\t\t\t\tkey: `${ ruleKey }${ upperFirst( side ) }`,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t[]\n\t\t);\n\t\trules.push( ...sideRules );\n\t}\n\n\treturn rules;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { Style, StyleOptions, GeneratedCSSRule } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Generates a stylesheet for a given style object and selector.
|
|
7
|
+
*
|
|
8
|
+
* @param style Style object.
|
|
9
|
+
* @param options Options object with settings to adjust how the styles are generated.
|
|
10
|
+
*
|
|
11
|
+
* @return generated stylesheet.
|
|
12
|
+
*/
|
|
13
|
+
export declare function generate(style: Style, options: StyleOptions): string;
|
|
14
|
+
/**
|
|
15
|
+
* Returns a JSON representation of the generated CSS rules.
|
|
16
|
+
*
|
|
17
|
+
* @param style Style object.
|
|
18
|
+
* @param options Options object with settings to adjust how the styles are generated.
|
|
19
|
+
*
|
|
20
|
+
* @return generated styles.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getCSSRules(style: Style, options: StyleOptions): GeneratedCSSRule[];
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,OAAO,KAAK,EACX,KAAK,EACL,YAAY,EACZ,gBAAgB,EAEhB,MAAM,SAAS,CAAC;AAGjB;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,GAAI,MAAM,CAmBtE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAC1B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,YAAY,GACnB,gBAAgB,EAAE,CAOpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/styles/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB;;;GAAc,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { Style, StyleOptions } from '../types';
|
|
5
|
+
declare const padding: {
|
|
6
|
+
name: string;
|
|
7
|
+
generate: (style: Style, options: StyleOptions) => import("../types").GeneratedCSSRule[];
|
|
8
|
+
};
|
|
9
|
+
export default padding;
|
|
10
|
+
//# sourceMappingURL=padding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"padding.d.ts","sourceRoot":"","sources":["../../src/styles/padding.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGpD,QAAA,MAAM,OAAO;;sBAEO,KAAK,WAAW,YAAY;CAQ/C,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { GeneratedCSSRule, Style, StyleOptions } from '../types';
|
|
5
|
+
export declare function generateBoxRules(style: Style, options: StyleOptions, path: string[], ruleKey: string): GeneratedCSSRule[];
|
|
6
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/styles/utils.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAO,YAAY,EAAE,MAAM,UAAU,CAAC;AAE3E,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,MAAM,GACb,gBAAgB,EAAE,CAgCpB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { CSSProperties } from 'react';
|
|
5
|
+
declare type BoxVariants = 'margin' | 'padding' | undefined;
|
|
6
|
+
export declare type Box<T extends BoxVariants = undefined> = {
|
|
7
|
+
top?: CSSProperties[T extends undefined ? 'top' : `${T}Top`];
|
|
8
|
+
right?: CSSProperties[T extends undefined ? 'right' : `${T}Right`];
|
|
9
|
+
bottom?: CSSProperties[T extends undefined ? 'bottom' : `${T}Bottom`];
|
|
10
|
+
left?: CSSProperties[T extends undefined ? 'left' : `${T}Left`];
|
|
11
|
+
};
|
|
12
|
+
export interface Style {
|
|
13
|
+
spacing?: {
|
|
14
|
+
margin?: CSSProperties['margin'] | Box<'margin'>;
|
|
15
|
+
padding?: CSSProperties['padding'] | Box<'padding'>;
|
|
16
|
+
};
|
|
17
|
+
typography?: {
|
|
18
|
+
fontSize?: CSSProperties['fontSize'];
|
|
19
|
+
fontFamily?: CSSProperties['fontFamily'];
|
|
20
|
+
fontWeight?: CSSProperties['fontWeight'];
|
|
21
|
+
fontStyle?: CSSProperties['fontStyle'];
|
|
22
|
+
letterSpacing?: CSSProperties['letterSpacing'];
|
|
23
|
+
lineHeight?: CSSProperties['lineHeight'];
|
|
24
|
+
textDecoration?: CSSProperties['textDecoration'];
|
|
25
|
+
textTransform?: CSSProperties['textTransform'];
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export declare type StyleOptions = {
|
|
29
|
+
/**
|
|
30
|
+
* CSS selector for the generated style.
|
|
31
|
+
*/
|
|
32
|
+
selector: string;
|
|
33
|
+
};
|
|
34
|
+
export declare type GeneratedCSSRule = {
|
|
35
|
+
selector: string;
|
|
36
|
+
value: string;
|
|
37
|
+
/**
|
|
38
|
+
* The CSS key in JS style attribute format, compatible with React.
|
|
39
|
+
* E.g. `paddingTop` instead of `padding-top`.
|
|
40
|
+
*/
|
|
41
|
+
key: string;
|
|
42
|
+
};
|
|
43
|
+
export interface StyleDefinition {
|
|
44
|
+
name: string;
|
|
45
|
+
generate: (style: Style, options: StyleOptions) => GeneratedCSSRule[];
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,aAAK,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AACpD,oBAAY,GAAG,CAAE,CAAC,SAAS,WAAW,GAAG,SAAS,IAAK;IACtD,GAAG,CAAC,EAAE,aAAa,CAAE,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,GAAI,CAAE,KAAK,CAAE,CAAC;IACjE,KAAK,CAAC,EAAE,aAAa,CAAE,CAAC,SAAS,SAAS,GAAG,OAAO,GAAG,GAAI,CAAE,OAAO,CAAE,CAAC;IACvE,MAAM,CAAC,EAAE,aAAa,CAAE,CAAC,SAAS,SAAS,GAAG,QAAQ,GAAG,GAAI,CAAE,QAAQ,CAAE,CAAC;IAC1E,IAAI,CAAC,EAAE,aAAa,CAAE,CAAC,SAAS,SAAS,GAAG,MAAM,GAAG,GAAI,CAAE,MAAM,CAAE,CAAC;CACpE,CAAC;AAEF,MAAM,WAAW,KAAK;IACrB,OAAO,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,aAAa,CAAE,QAAQ,CAAE,GAAG,GAAG,CAAE,QAAQ,CAAE,CAAC;QACrD,OAAO,CAAC,EAAE,aAAa,CAAE,SAAS,CAAE,GAAG,GAAG,CAAE,SAAS,CAAE,CAAC;KACxD,CAAC;IACF,UAAU,CAAC,EAAE;QACZ,QAAQ,CAAC,EAAE,aAAa,CAAE,UAAU,CAAE,CAAC;QACvC,UAAU,CAAC,EAAE,aAAa,CAAE,YAAY,CAAE,CAAC;QAC3C,UAAU,CAAC,EAAE,aAAa,CAAE,YAAY,CAAE,CAAC;QAC3C,SAAS,CAAC,EAAE,aAAa,CAAE,WAAW,CAAE,CAAC;QACzC,aAAa,CAAC,EAAE,aAAa,CAAE,eAAe,CAAE,CAAC;QACjD,UAAU,CAAC,EAAE,aAAa,CAAE,YAAY,CAAE,CAAC;QAC3C,cAAc,CAAC,EAAE,aAAa,CAAE,gBAAgB,CAAE,CAAC;QACnD,aAAa,CAAC,EAAE,aAAa,CAAE,eAAe,CAAE,CAAC;KACjD,CAAC;CACF;AAED,oBAAY,YAAY,GAAG;IAC1B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,oBAAY,gBAAgB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,CAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,KAAM,gBAAgB,EAAE,CAAC;CACxE"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@wordpress/style-engine",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "WordPress Style engine.",
|
|
5
|
+
"author": "The WordPress Contributors",
|
|
6
|
+
"license": "GPL-2.0-or-later",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"wordpress",
|
|
9
|
+
"gutenberg",
|
|
10
|
+
"styles",
|
|
11
|
+
"global styles"
|
|
12
|
+
],
|
|
13
|
+
"homepage": "https://github.com/WordPress/gutenberg/tree/HEAD/packages/style-engine/README.md",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/WordPress/gutenberg.git",
|
|
17
|
+
"directory": "packages/style-engine"
|
|
18
|
+
},
|
|
19
|
+
"bugs": {
|
|
20
|
+
"url": "https://github.com/WordPress/gutenberg/issues"
|
|
21
|
+
},
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=12"
|
|
24
|
+
},
|
|
25
|
+
"main": "build/index.js",
|
|
26
|
+
"module": "build-module/index.js",
|
|
27
|
+
"react-native": "src/index",
|
|
28
|
+
"types": "build-types",
|
|
29
|
+
"sideEffects": false,
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@babel/runtime": "^7.16.0",
|
|
32
|
+
"lodash": "^4.17.21"
|
|
33
|
+
},
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public"
|
|
36
|
+
},
|
|
37
|
+
"gitHead": "4566ac290359553d04de4eb574545309343f790b"
|
|
38
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { groupBy, kebabCase } from 'lodash';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import type {
|
|
10
|
+
Style,
|
|
11
|
+
StyleOptions,
|
|
12
|
+
GeneratedCSSRule,
|
|
13
|
+
StyleDefinition,
|
|
14
|
+
} from './types';
|
|
15
|
+
import { styleDefinitions } from './styles';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Generates a stylesheet for a given style object and selector.
|
|
19
|
+
*
|
|
20
|
+
* @param style Style object.
|
|
21
|
+
* @param options Options object with settings to adjust how the styles are generated.
|
|
22
|
+
*
|
|
23
|
+
* @return generated stylesheet.
|
|
24
|
+
*/
|
|
25
|
+
export function generate( style: Style, options: StyleOptions ): string {
|
|
26
|
+
const rules = getCSSRules( style, options );
|
|
27
|
+
const groupedRules = groupBy( rules, 'selector' );
|
|
28
|
+
const selectorRules = Object.keys( groupedRules ).reduce(
|
|
29
|
+
( acc: string[], subSelector: string ) => {
|
|
30
|
+
acc.push(
|
|
31
|
+
`${ subSelector } { ${ groupedRules[ subSelector ]
|
|
32
|
+
.map(
|
|
33
|
+
( rule: GeneratedCSSRule ) =>
|
|
34
|
+
`${ kebabCase( rule.key ) }: ${ rule.value };`
|
|
35
|
+
)
|
|
36
|
+
.join( ' ' ) } }`
|
|
37
|
+
);
|
|
38
|
+
return acc;
|
|
39
|
+
},
|
|
40
|
+
[]
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
return selectorRules.join( '\n' );
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Returns a JSON representation of the generated CSS rules.
|
|
48
|
+
*
|
|
49
|
+
* @param style Style object.
|
|
50
|
+
* @param options Options object with settings to adjust how the styles are generated.
|
|
51
|
+
*
|
|
52
|
+
* @return generated styles.
|
|
53
|
+
*/
|
|
54
|
+
export function getCSSRules(
|
|
55
|
+
style: Style,
|
|
56
|
+
options: StyleOptions
|
|
57
|
+
): GeneratedCSSRule[] {
|
|
58
|
+
const rules: GeneratedCSSRule[] = [];
|
|
59
|
+
styleDefinitions.forEach( ( definition: StyleDefinition ) => {
|
|
60
|
+
rules.push( ...definition.generate( style, options ) );
|
|
61
|
+
} );
|
|
62
|
+
|
|
63
|
+
return rules;
|
|
64
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { Style, StyleOptions } from '../types';
|
|
5
|
+
import { generateBoxRules } from './utils';
|
|
6
|
+
|
|
7
|
+
const padding = {
|
|
8
|
+
name: 'padding',
|
|
9
|
+
generate: ( style: Style, options: StyleOptions ) => {
|
|
10
|
+
return generateBoxRules(
|
|
11
|
+
style,
|
|
12
|
+
options,
|
|
13
|
+
[ 'spacing', 'padding' ],
|
|
14
|
+
'padding'
|
|
15
|
+
);
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export default padding;
|