@wordpress/element 5.19.3 → 5.20.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 +6 -0
- package/README.md +12 -77
- package/build/create-interpolate-element.js +33 -29
- package/build/create-interpolate-element.js.map +1 -1
- package/build/react-platform.js.map +1 -1
- package/build/react.js +11 -11
- package/build/react.js.map +1 -1
- package/build/serialize.js +6 -6
- package/build/serialize.js.map +1 -1
- package/build-module/create-interpolate-element.js +33 -29
- package/build-module/create-interpolate-element.js.map +1 -1
- package/build-module/react-platform.js +4 -4
- package/build-module/react-platform.js.map +1 -1
- package/build-module/react.js +11 -11
- package/build-module/react.js.map +1 -1
- package/build-module/serialize.js +6 -6
- package/build-module/serialize.js.map +1 -1
- package/build-types/create-interpolate-element.d.ts +11 -8
- package/build-types/create-interpolate-element.d.ts.map +1 -1
- package/build-types/react.d.ts +3 -3
- package/build-types/react.d.ts.map +1 -1
- package/build-types/serialize.d.ts +8 -8
- package/build-types/serialize.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/create-interpolate-element.js +33 -29
- package/src/react-platform.js +4 -4
- package/src/react.js +11 -11
- package/src/serialize.js +6 -6
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -1,17 +1,6 @@
|
|
|
1
1
|
# Element
|
|
2
2
|
|
|
3
|
-
Element is
|
|
4
|
-
|
|
5
|
-
You may find yourself asking, "Why an abstraction layer?". For a few reasons:
|
|
6
|
-
|
|
7
|
-
- In many applications, especially those extended by a rich plugin ecosystem as is the case with WordPress, it's wise to create interfaces to underlying third-party code. The thinking is that if ever a need arises to change or even replace the underlying implementation, it can be done without catastrophic rippling effects to dependent code, so long as the interface stays the same.
|
|
8
|
-
- It provides a mechanism to shield implementers by omitting features with uncertain futures (`createClass`, `PropTypes`).
|
|
9
|
-
- It helps avoid incompatibilities between versions by ensuring that every plugin operates on a single centralized version of the code.
|
|
10
|
-
|
|
11
|
-
On the `wp.element` global object, you will find the following, ordered roughly by the likelihood you'll encounter it in your code:
|
|
12
|
-
|
|
13
|
-
- [`createElement`](https://reactjs.org/docs/react-api.html#createelement)
|
|
14
|
-
- [`render`](https://reactjs.org/docs/react-dom.html#render)
|
|
3
|
+
Element is a package that builds on top of [React](https://reactjs.org/) and provide a set of utilities to work with React components and React elements.
|
|
15
4
|
|
|
16
5
|
## Installation
|
|
17
6
|
|
|
@@ -23,39 +12,6 @@ npm install @wordpress/element --save
|
|
|
23
12
|
|
|
24
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._
|
|
25
14
|
|
|
26
|
-
## Usage
|
|
27
|
-
|
|
28
|
-
Let's render a customized greeting into an empty element.
|
|
29
|
-
|
|
30
|
-
**Note:** `createRoot` was introduced with React 18, which is bundled with WordPress 6.2. Therefore it may be necessary to mount your component depending on which version of WordPress (and therefore React) you are currently using. This is possible by checking for an undefined import and falling back to the React 17 method of mounting an app using `render`.
|
|
31
|
-
|
|
32
|
-
Assuming the following root element is present in the page:
|
|
33
|
-
|
|
34
|
-
```html
|
|
35
|
-
<div id="greeting"></div>
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
We can mount our app:
|
|
39
|
-
|
|
40
|
-
```js
|
|
41
|
-
import { createRoot, render, createElement } from '@wordpress/element';
|
|
42
|
-
|
|
43
|
-
function Greeting( props ) {
|
|
44
|
-
return createElement( 'span', null, 'Hello ' + props.toWhom + '!' );
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const domElement = document.getElementById( 'greeting' );
|
|
48
|
-
const uiElement = createElement( Greeting, { toWhom: 'World' } );
|
|
49
|
-
|
|
50
|
-
if ( createRoot ) {
|
|
51
|
-
createRoot( domElement ).render( uiElement );
|
|
52
|
-
} else {
|
|
53
|
-
render( uiElement, domElement );
|
|
54
|
-
}
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Refer to the [official React Quick Start guide](https://reactjs.org/docs/hello-world.html) for a more thorough walkthrough, in most cases substituting `React` and `ReactDOM` with `wp.element` in code examples.
|
|
58
|
-
|
|
59
15
|
## Why React?
|
|
60
16
|
|
|
61
17
|
At the risk of igniting debate surrounding any single "best" front-end framework, the choice to use any tool should be motivated specifically to serve the requirements of the system. In modeling the concept of a [block](https://github.com/WordPress/gutenberg/tree/HEAD/packages/blocks/README.md), we observe the following technical requirements:
|
|
@@ -67,27 +23,6 @@ At its most basic, React provides a simple input / output mechanism. **Given a s
|
|
|
67
23
|
|
|
68
24
|
The offerings of any framework necessarily become more complex as these requirements increase; many front-end frameworks prescribe ideas around page routing, retrieving and updating data, and managing layout. React is not immune to this, but the introduced complexity is rarely caused by React itself, but instead managing an arrangement of supporting tools. By moving these concerns out of sight to the internals of the system (WordPress core code), we can minimize the responsibilities of plugin authors to a small, clear set of touch points.
|
|
69
25
|
|
|
70
|
-
## JSX
|
|
71
|
-
|
|
72
|
-
While not at all a requirement to use React, [JSX](https://reactjs.org/docs/introducing-jsx.html) is a recommended syntax extension to compose elements more expressively. Through a build process, JSX is converted back to the `createElement` syntax you see earlier in this document.
|
|
73
|
-
|
|
74
|
-
If you've configured [Babel](http://babeljs.io/) for your project, you can opt in to JSX syntax by specifying the `pragma` option of the [`transform-react-jsx` plugin](https://www.npmjs.com/package/babel-plugin-transform-react-jsx) in your [`.babelrc` configuration](http://babeljs.io/docs/usage/babelrc/).
|
|
75
|
-
|
|
76
|
-
```json
|
|
77
|
-
{
|
|
78
|
-
"plugins": [
|
|
79
|
-
[
|
|
80
|
-
"transform-react-jsx",
|
|
81
|
-
{
|
|
82
|
-
"pragma": "createElement"
|
|
83
|
-
}
|
|
84
|
-
]
|
|
85
|
-
]
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
This assumes that you will import the `createElement` function in any file where you use JSX. Alternatively, consider using the [`@wordpress/babel-plugin-import-jsx-pragma` Babel plugin](https://www.npmjs.com/package/@wordpress/babel-plugin-import-jsx-pragma) to automate the import of this function.
|
|
90
|
-
|
|
91
26
|
## API
|
|
92
27
|
|
|
93
28
|
<!-- START TOKEN(Autogenerated API docs) -->
|
|
@@ -102,12 +37,12 @@ Creates a copy of an element with extended props.
|
|
|
102
37
|
|
|
103
38
|
_Parameters_
|
|
104
39
|
|
|
105
|
-
- _element_ `
|
|
40
|
+
- _element_ `Element`: Element
|
|
106
41
|
- _props_ `?Object`: Props to apply to cloned element
|
|
107
42
|
|
|
108
43
|
_Returns_
|
|
109
44
|
|
|
110
|
-
- `
|
|
45
|
+
- `Element`: Cloned element.
|
|
111
46
|
|
|
112
47
|
### Component
|
|
113
48
|
|
|
@@ -145,11 +80,11 @@ _Parameters_
|
|
|
145
80
|
|
|
146
81
|
- _type_ `?(string|Function)`: Tag name or element creator
|
|
147
82
|
- _props_ `Object`: Element properties, either attribute set to apply to DOM node or values to pass through to element creator
|
|
148
|
-
- _children_ `...
|
|
83
|
+
- _children_ `...Element`: Descendant elements
|
|
149
84
|
|
|
150
85
|
_Returns_
|
|
151
86
|
|
|
152
|
-
- `
|
|
87
|
+
- `Element`: Element.
|
|
153
88
|
|
|
154
89
|
### createInterpolateElement
|
|
155
90
|
|
|
@@ -175,11 +110,11 @@ You would have something like this as the conversionMap value:
|
|
|
175
110
|
_Parameters_
|
|
176
111
|
|
|
177
112
|
- _interpolatedString_ `string`: The interpolation string to be parsed.
|
|
178
|
-
- _conversionMap_ `Record<string,
|
|
113
|
+
- _conversionMap_ `Record<string, Element>`: The map used to convert the string to a react element.
|
|
179
114
|
|
|
180
115
|
_Returns_
|
|
181
116
|
|
|
182
|
-
- `
|
|
117
|
+
- `Element`: A wp element.
|
|
183
118
|
|
|
184
119
|
### createPortal
|
|
185
120
|
|
|
@@ -191,7 +126,7 @@ _Related_
|
|
|
191
126
|
|
|
192
127
|
_Parameters_
|
|
193
128
|
|
|
194
|
-
- _child_ `import('
|
|
129
|
+
- _child_ `import('react').ReactElement`: Any renderable child, such as an element, string, or fragment.
|
|
195
130
|
- _container_ `HTMLElement`: DOM node into which element should be rendered.
|
|
196
131
|
|
|
197
132
|
### createRef
|
|
@@ -220,7 +155,7 @@ Finds the dom node of a React component.
|
|
|
220
155
|
|
|
221
156
|
_Parameters_
|
|
222
157
|
|
|
223
|
-
- _component_ `import('
|
|
158
|
+
- _component_ `import('react').ComponentType`: Component's instance.
|
|
224
159
|
|
|
225
160
|
### flushSync
|
|
226
161
|
|
|
@@ -240,7 +175,7 @@ _Parameters_
|
|
|
240
175
|
|
|
241
176
|
_Returns_
|
|
242
177
|
|
|
243
|
-
- `
|
|
178
|
+
- `Component`: Enhanced component.
|
|
244
179
|
|
|
245
180
|
### Fragment
|
|
246
181
|
|
|
@@ -282,7 +217,7 @@ _Returns_
|
|
|
282
217
|
|
|
283
218
|
### isValidElement
|
|
284
219
|
|
|
285
|
-
Checks if an object is a valid
|
|
220
|
+
Checks if an object is a valid React Element.
|
|
286
221
|
|
|
287
222
|
_Parameters_
|
|
288
223
|
|
|
@@ -290,7 +225,7 @@ _Parameters_
|
|
|
290
225
|
|
|
291
226
|
_Returns_
|
|
292
227
|
|
|
293
|
-
- `boolean`: true if objectToTest is a valid
|
|
228
|
+
- `boolean`: true if objectToTest is a valid React Element and false otherwise.
|
|
294
229
|
|
|
295
230
|
### lazy
|
|
296
231
|
|
|
@@ -9,7 +9,11 @@ var _react = require("./react");
|
|
|
9
9
|
* Internal dependencies
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Object containing a React element.
|
|
14
|
+
*
|
|
15
|
+
* @typedef {import('react').ReactElement} Element
|
|
16
|
+
*/
|
|
13
17
|
|
|
14
18
|
let indoc, offset, output, stack;
|
|
15
19
|
|
|
@@ -35,17 +39,17 @@ const tokenizer = /<(\/)?(\w+)\s*(\/)?>/g;
|
|
|
35
39
|
*
|
|
36
40
|
* @typedef Frame
|
|
37
41
|
*
|
|
38
|
-
* @property {
|
|
39
|
-
* @property {number}
|
|
40
|
-
*
|
|
41
|
-
* @property {number}
|
|
42
|
-
*
|
|
43
|
-
* @property {number}
|
|
44
|
-
*
|
|
45
|
-
* @property {number}
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* @property {
|
|
42
|
+
* @property {Element} element A parent element which may still have
|
|
43
|
+
* @property {number} tokenStart Offset at which parent element first
|
|
44
|
+
* appears.
|
|
45
|
+
* @property {number} tokenLength Length of string marking start of parent
|
|
46
|
+
* element.
|
|
47
|
+
* @property {number} [prevOffset] Running offset at which parsing should
|
|
48
|
+
* continue.
|
|
49
|
+
* @property {number} [leadingTextStart] Offset at which last closing element
|
|
50
|
+
* finished, used for finding text between
|
|
51
|
+
* elements.
|
|
52
|
+
* @property {Element[]} children Children.
|
|
49
53
|
*/
|
|
50
54
|
|
|
51
55
|
/**
|
|
@@ -55,17 +59,17 @@ const tokenizer = /<(\/)?(\w+)\s*(\/)?>/g;
|
|
|
55
59
|
* parsed.
|
|
56
60
|
*
|
|
57
61
|
* @private
|
|
58
|
-
* @param {
|
|
59
|
-
*
|
|
60
|
-
* @param {number}
|
|
61
|
-
*
|
|
62
|
-
* @param {number}
|
|
63
|
-
*
|
|
64
|
-
* @param {number}
|
|
65
|
-
*
|
|
66
|
-
* @param {number}
|
|
67
|
-
*
|
|
68
|
-
*
|
|
62
|
+
* @param {Element} element A parent element which may still have
|
|
63
|
+
* nested children not yet parsed.
|
|
64
|
+
* @param {number} tokenStart Offset at which parent element first
|
|
65
|
+
* appears.
|
|
66
|
+
* @param {number} tokenLength Length of string marking start of parent
|
|
67
|
+
* element.
|
|
68
|
+
* @param {number} [prevOffset] Running offset at which parsing should
|
|
69
|
+
* continue.
|
|
70
|
+
* @param {number} [leadingTextStart] Offset at which last closing element
|
|
71
|
+
* finished, used for finding text between
|
|
72
|
+
* elements.
|
|
69
73
|
*
|
|
70
74
|
* @return {Frame} The stack frame tracking parse progress.
|
|
71
75
|
*/
|
|
@@ -101,11 +105,11 @@ function createFrame(element, tokenStart, tokenLength, prevOffset, leadingTextSt
|
|
|
101
105
|
* }
|
|
102
106
|
* ```
|
|
103
107
|
*
|
|
104
|
-
* @param {string}
|
|
105
|
-
* @param {Record<string,
|
|
106
|
-
*
|
|
108
|
+
* @param {string} interpolatedString The interpolation string to be parsed.
|
|
109
|
+
* @param {Record<string, Element>} conversionMap The map used to convert the string to
|
|
110
|
+
* a react element.
|
|
107
111
|
* @throws {TypeError}
|
|
108
|
-
* @return {
|
|
112
|
+
* @return {Element} A wp element.
|
|
109
113
|
*/
|
|
110
114
|
const createInterpolateElement = (interpolatedString, conversionMap) => {
|
|
111
115
|
indoc = interpolatedString;
|
|
@@ -114,7 +118,7 @@ const createInterpolateElement = (interpolatedString, conversionMap) => {
|
|
|
114
118
|
stack = [];
|
|
115
119
|
tokenizer.lastIndex = 0;
|
|
116
120
|
if (!isValidConversionMap(conversionMap)) {
|
|
117
|
-
throw new TypeError('The conversionMap provided is not valid. It must be an object with values that are
|
|
121
|
+
throw new TypeError('The conversionMap provided is not valid. It must be an object with values that are React Elements');
|
|
118
122
|
}
|
|
119
123
|
do {
|
|
120
124
|
// twiddle our thumbs
|
|
@@ -126,7 +130,7 @@ const createInterpolateElement = (interpolatedString, conversionMap) => {
|
|
|
126
130
|
* Validate conversion map.
|
|
127
131
|
*
|
|
128
132
|
* A map is considered valid if it's an object and every value in the object
|
|
129
|
-
* is a
|
|
133
|
+
* is a React Element
|
|
130
134
|
*
|
|
131
135
|
* @private
|
|
132
136
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","indoc","offset","output","stack","tokenizer","createFrame","element","tokenStart","tokenLength","prevOffset","leadingTextStart","children","createInterpolateElement","interpolatedString","conversionMap","lastIndex","isValidConversionMap","TypeError","proceed","createElement","Fragment","isObject","values","Object","length","every","isValidElement","next","nextToken","tokenType","name","startOffset","stackDepth","addText","stackLeadingText","pop","push","substr","addChild","closeOuterElement","stackTop","text","frame","matches","exec","startedAt","index","match","isClosing","isSelfClosed","parent","cloneElement","endOffset","_default","exports","default"],"sources":["@wordpress/element/src/create-interpolate-element.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { createElement, cloneElement, Fragment, isValidElement } from './react';\n\n/** @typedef {import('./react').WPElement} WPElement */\n\nlet indoc, offset, output, stack;\n\n/**\n * Matches tags in the localized string\n *\n * This is used for extracting the tag pattern groups for parsing the localized\n * string and along with the map converting it to a react element.\n *\n * There are four references extracted using this tokenizer:\n *\n * match: Full match of the tag (i.e. <strong>, </strong>, <br/>)\n * isClosing: The closing slash, if it exists.\n * name: The name portion of the tag (strong, br) (if )\n * isSelfClosed: The slash on a self closing tag, if it exists.\n *\n * @type {RegExp}\n */\nconst tokenizer = /<(\\/)?(\\w+)\\s*(\\/)?>/g;\n\n/**\n * The stack frame tracking parse progress.\n *\n * @typedef Frame\n *\n * @property {WPElement} element A parent element which may still have\n * @property {number} tokenStart Offset at which parent element first\n * appears.\n * @property {number} tokenLength Length of string marking start of parent\n * element.\n * @property {number} [prevOffset] Running offset at which parsing should\n * continue.\n * @property {number} [leadingTextStart] Offset at which last closing element\n * finished, used for finding text between\n * elements.\n * @property {WPElement[]} children Children.\n */\n\n/**\n * Tracks recursive-descent parse state.\n *\n * This is a Stack frame holding parent elements until all children have been\n * parsed.\n *\n * @private\n * @param {WPElement} element A parent element which may still have\n * nested children not yet parsed.\n * @param {number} tokenStart Offset at which parent element first\n * appears.\n * @param {number} tokenLength Length of string marking start of parent\n * element.\n * @param {number} [prevOffset] Running offset at which parsing should\n * continue.\n * @param {number} [leadingTextStart] Offset at which last closing element\n * finished, used for finding text between\n * elements.\n *\n * @return {Frame} The stack frame tracking parse progress.\n */\nfunction createFrame(\n\telement,\n\ttokenStart,\n\ttokenLength,\n\tprevOffset,\n\tleadingTextStart\n) {\n\treturn {\n\t\telement,\n\t\ttokenStart,\n\t\ttokenLength,\n\t\tprevOffset,\n\t\tleadingTextStart,\n\t\tchildren: [],\n\t};\n}\n\n/**\n * This function creates an interpolated element from a passed in string with\n * specific tags matching how the string should be converted to an element via\n * the conversion map value.\n *\n * @example\n * For example, for the given string:\n *\n * \"This is a <span>string</span> with <a>a link</a> and a self-closing\n * <CustomComponentB/> tag\"\n *\n * You would have something like this as the conversionMap value:\n *\n * ```js\n * {\n * span: <span />,\n * a: <a href={ 'https://github.com' } />,\n * CustomComponentB: <CustomComponent />,\n * }\n * ```\n *\n * @param {string} interpolatedString The interpolation string to be parsed.\n * @param {Record<string, WPElement>} conversionMap The map used to convert the string to\n * a react element.\n * @throws {TypeError}\n * @return {WPElement} A wp element.\n */\nconst createInterpolateElement = ( interpolatedString, conversionMap ) => {\n\tindoc = interpolatedString;\n\toffset = 0;\n\toutput = [];\n\tstack = [];\n\ttokenizer.lastIndex = 0;\n\n\tif ( ! isValidConversionMap( conversionMap ) ) {\n\t\tthrow new TypeError(\n\t\t\t'The conversionMap provided is not valid. It must be an object with values that are WPElements'\n\t\t);\n\t}\n\n\tdo {\n\t\t// twiddle our thumbs\n\t} while ( proceed( conversionMap ) );\n\treturn createElement( Fragment, null, ...output );\n};\n\n/**\n * Validate conversion map.\n *\n * A map is considered valid if it's an object and every value in the object\n * is a WPElement\n *\n * @private\n *\n * @param {Object} conversionMap The map being validated.\n *\n * @return {boolean} True means the map is valid.\n */\nconst isValidConversionMap = ( conversionMap ) => {\n\tconst isObject = typeof conversionMap === 'object';\n\tconst values = isObject && Object.values( conversionMap );\n\treturn (\n\t\tisObject &&\n\t\tvalues.length &&\n\t\tvalues.every( ( element ) => isValidElement( element ) )\n\t);\n};\n\n/**\n * This is the iterator over the matches in the string.\n *\n * @private\n *\n * @param {Object} conversionMap The conversion map for the string.\n *\n * @return {boolean} true for continuing to iterate, false for finished.\n */\nfunction proceed( conversionMap ) {\n\tconst next = nextToken();\n\tconst [ tokenType, name, startOffset, tokenLength ] = next;\n\tconst stackDepth = stack.length;\n\tconst leadingTextStart = startOffset > offset ? offset : null;\n\tif ( ! conversionMap[ name ] ) {\n\t\taddText();\n\t\treturn false;\n\t}\n\tswitch ( tokenType ) {\n\t\tcase 'no-more-tokens':\n\t\t\tif ( stackDepth !== 0 ) {\n\t\t\t\tconst { leadingTextStart: stackLeadingText, tokenStart } =\n\t\t\t\t\tstack.pop();\n\t\t\t\toutput.push( indoc.substr( stackLeadingText, tokenStart ) );\n\t\t\t}\n\t\t\taddText();\n\t\t\treturn false;\n\n\t\tcase 'self-closed':\n\t\t\tif ( 0 === stackDepth ) {\n\t\t\t\tif ( null !== leadingTextStart ) {\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tindoc.substr(\n\t\t\t\t\t\t\tleadingTextStart,\n\t\t\t\t\t\t\tstartOffset - leadingTextStart\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\toutput.push( conversionMap[ name ] );\n\t\t\t\toffset = startOffset + tokenLength;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Otherwise we found an inner element.\n\t\t\taddChild(\n\t\t\t\tcreateFrame( conversionMap[ name ], startOffset, tokenLength )\n\t\t\t);\n\t\t\toffset = startOffset + tokenLength;\n\t\t\treturn true;\n\n\t\tcase 'opener':\n\t\t\tstack.push(\n\t\t\t\tcreateFrame(\n\t\t\t\t\tconversionMap[ name ],\n\t\t\t\t\tstartOffset,\n\t\t\t\t\ttokenLength,\n\t\t\t\t\tstartOffset + tokenLength,\n\t\t\t\t\tleadingTextStart\n\t\t\t\t)\n\t\t\t);\n\t\t\toffset = startOffset + tokenLength;\n\t\t\treturn true;\n\n\t\tcase 'closer':\n\t\t\t// If we're not nesting then this is easy - close the block.\n\t\t\tif ( 1 === stackDepth ) {\n\t\t\t\tcloseOuterElement( startOffset );\n\t\t\t\toffset = startOffset + tokenLength;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Otherwise we're nested and we have to close out the current\n\t\t\t// block and add it as a innerBlock to the parent.\n\t\t\tconst stackTop = stack.pop();\n\t\t\tconst text = indoc.substr(\n\t\t\t\tstackTop.prevOffset,\n\t\t\t\tstartOffset - stackTop.prevOffset\n\t\t\t);\n\t\t\tstackTop.children.push( text );\n\t\t\tstackTop.prevOffset = startOffset + tokenLength;\n\t\t\tconst frame = createFrame(\n\t\t\t\tstackTop.element,\n\t\t\t\tstackTop.tokenStart,\n\t\t\t\tstackTop.tokenLength,\n\t\t\t\tstartOffset + tokenLength\n\t\t\t);\n\t\t\tframe.children = stackTop.children;\n\t\t\taddChild( frame );\n\t\t\toffset = startOffset + tokenLength;\n\t\t\treturn true;\n\n\t\tdefault:\n\t\t\taddText();\n\t\t\treturn false;\n\t}\n}\n\n/**\n * Grabs the next token match in the string and returns it's details.\n *\n * @private\n *\n * @return {Array} An array of details for the token matched.\n */\nfunction nextToken() {\n\tconst matches = tokenizer.exec( indoc );\n\t// We have no more tokens.\n\tif ( null === matches ) {\n\t\treturn [ 'no-more-tokens' ];\n\t}\n\tconst startedAt = matches.index;\n\tconst [ match, isClosing, name, isSelfClosed ] = matches;\n\tconst length = match.length;\n\tif ( isSelfClosed ) {\n\t\treturn [ 'self-closed', name, startedAt, length ];\n\t}\n\tif ( isClosing ) {\n\t\treturn [ 'closer', name, startedAt, length ];\n\t}\n\treturn [ 'opener', name, startedAt, length ];\n}\n\n/**\n * Pushes text extracted from the indoc string to the output stack given the\n * current rawLength value and offset (if rawLength is provided ) or the\n * indoc.length and offset.\n *\n * @private\n */\nfunction addText() {\n\tconst length = indoc.length - offset;\n\tif ( 0 === length ) {\n\t\treturn;\n\t}\n\toutput.push( indoc.substr( offset, length ) );\n}\n\n/**\n * Pushes a child element to the associated parent element's children for the\n * parent currently active in the stack.\n *\n * @private\n *\n * @param {Frame} frame The Frame containing the child element and it's\n * token information.\n */\nfunction addChild( frame ) {\n\tconst { element, tokenStart, tokenLength, prevOffset, children } = frame;\n\tconst parent = stack[ stack.length - 1 ];\n\tconst text = indoc.substr(\n\t\tparent.prevOffset,\n\t\ttokenStart - parent.prevOffset\n\t);\n\n\tif ( text ) {\n\t\tparent.children.push( text );\n\t}\n\n\tparent.children.push( cloneElement( element, null, ...children ) );\n\tparent.prevOffset = prevOffset ? prevOffset : tokenStart + tokenLength;\n}\n\n/**\n * This is called for closing tags. It creates the element currently active in\n * the stack.\n *\n * @private\n *\n * @param {number} endOffset Offset at which the closing tag for the element\n * begins in the string. If this is greater than the\n * prevOffset attached to the element, then this\n * helps capture any remaining nested text nodes in\n * the element.\n */\nfunction closeOuterElement( endOffset ) {\n\tconst { element, leadingTextStart, prevOffset, tokenStart, children } =\n\t\tstack.pop();\n\n\tconst text = endOffset\n\t\t? indoc.substr( prevOffset, endOffset - prevOffset )\n\t\t: indoc.substr( prevOffset );\n\n\tif ( text ) {\n\t\tchildren.push( text );\n\t}\n\n\tif ( null !== leadingTextStart ) {\n\t\toutput.push(\n\t\t\tindoc.substr( leadingTextStart, tokenStart - leadingTextStart )\n\t\t);\n\t}\n\n\toutput.push( cloneElement( element, null, ...children ) );\n}\n\nexport default createInterpolateElement;\n"],"mappings":";;;;;;AAGA,IAAAA,MAAA,GAAAC,OAAA;AAHA;AACA;AACA;;AAGA;;AAEA,IAAIC,KAAK,EAAEC,MAAM,EAAEC,MAAM,EAAEC,KAAK;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,SAAS,GAAG,uBAAuB;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,WAAWA,CACnBC,OAAO,EACPC,UAAU,EACVC,WAAW,EACXC,UAAU,EACVC,gBAAgB,EACf;EACD,OAAO;IACNJ,OAAO;IACPC,UAAU;IACVC,WAAW;IACXC,UAAU;IACVC,gBAAgB;IAChBC,QAAQ,EAAE;EACX,CAAC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,wBAAwB,GAAGA,CAAEC,kBAAkB,EAAEC,aAAa,KAAM;EACzEd,KAAK,GAAGa,kBAAkB;EAC1BZ,MAAM,GAAG,CAAC;EACVC,MAAM,GAAG,EAAE;EACXC,KAAK,GAAG,EAAE;EACVC,SAAS,CAACW,SAAS,GAAG,CAAC;EAEvB,IAAK,CAAEC,oBAAoB,CAAEF,aAAc,CAAC,EAAG;IAC9C,MAAM,IAAIG,SAAS,CAClB,+FACD,CAAC;EACF;EAEA,GAAG;IACF;EAAA,CACA,QAASC,OAAO,CAAEJ,aAAc,CAAC;EAClC,OAAO,IAAAK,oBAAa,EAAEC,eAAQ,EAAE,IAAI,EAAE,GAAGlB,MAAO,CAAC;AAClD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMc,oBAAoB,GAAKF,aAAa,I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"}
|
|
1
|
+
{"version":3,"names":["_react","require","indoc","offset","output","stack","tokenizer","createFrame","element","tokenStart","tokenLength","prevOffset","leadingTextStart","children","createInterpolateElement","interpolatedString","conversionMap","lastIndex","isValidConversionMap","TypeError","proceed","createElement","Fragment","isObject","values","Object","length","every","isValidElement","next","nextToken","tokenType","name","startOffset","stackDepth","addText","stackLeadingText","pop","push","substr","addChild","closeOuterElement","stackTop","text","frame","matches","exec","startedAt","index","match","isClosing","isSelfClosed","parent","cloneElement","endOffset","_default","exports","default"],"sources":["@wordpress/element/src/create-interpolate-element.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { createElement, cloneElement, Fragment, isValidElement } from './react';\n\n/**\n * Object containing a React element.\n *\n * @typedef {import('react').ReactElement} Element\n */\n\nlet indoc, offset, output, stack;\n\n/**\n * Matches tags in the localized string\n *\n * This is used for extracting the tag pattern groups for parsing the localized\n * string and along with the map converting it to a react element.\n *\n * There are four references extracted using this tokenizer:\n *\n * match: Full match of the tag (i.e. <strong>, </strong>, <br/>)\n * isClosing: The closing slash, if it exists.\n * name: The name portion of the tag (strong, br) (if )\n * isSelfClosed: The slash on a self closing tag, if it exists.\n *\n * @type {RegExp}\n */\nconst tokenizer = /<(\\/)?(\\w+)\\s*(\\/)?>/g;\n\n/**\n * The stack frame tracking parse progress.\n *\n * @typedef Frame\n *\n * @property {Element} element A parent element which may still have\n * @property {number} tokenStart Offset at which parent element first\n * appears.\n * @property {number} tokenLength Length of string marking start of parent\n * element.\n * @property {number} [prevOffset] Running offset at which parsing should\n * continue.\n * @property {number} [leadingTextStart] Offset at which last closing element\n * finished, used for finding text between\n * elements.\n * @property {Element[]} children Children.\n */\n\n/**\n * Tracks recursive-descent parse state.\n *\n * This is a Stack frame holding parent elements until all children have been\n * parsed.\n *\n * @private\n * @param {Element} element A parent element which may still have\n * nested children not yet parsed.\n * @param {number} tokenStart Offset at which parent element first\n * appears.\n * @param {number} tokenLength Length of string marking start of parent\n * element.\n * @param {number} [prevOffset] Running offset at which parsing should\n * continue.\n * @param {number} [leadingTextStart] Offset at which last closing element\n * finished, used for finding text between\n * elements.\n *\n * @return {Frame} The stack frame tracking parse progress.\n */\nfunction createFrame(\n\telement,\n\ttokenStart,\n\ttokenLength,\n\tprevOffset,\n\tleadingTextStart\n) {\n\treturn {\n\t\telement,\n\t\ttokenStart,\n\t\ttokenLength,\n\t\tprevOffset,\n\t\tleadingTextStart,\n\t\tchildren: [],\n\t};\n}\n\n/**\n * This function creates an interpolated element from a passed in string with\n * specific tags matching how the string should be converted to an element via\n * the conversion map value.\n *\n * @example\n * For example, for the given string:\n *\n * \"This is a <span>string</span> with <a>a link</a> and a self-closing\n * <CustomComponentB/> tag\"\n *\n * You would have something like this as the conversionMap value:\n *\n * ```js\n * {\n * span: <span />,\n * a: <a href={ 'https://github.com' } />,\n * CustomComponentB: <CustomComponent />,\n * }\n * ```\n *\n * @param {string} interpolatedString The interpolation string to be parsed.\n * @param {Record<string, Element>} conversionMap The map used to convert the string to\n * a react element.\n * @throws {TypeError}\n * @return {Element} A wp element.\n */\nconst createInterpolateElement = ( interpolatedString, conversionMap ) => {\n\tindoc = interpolatedString;\n\toffset = 0;\n\toutput = [];\n\tstack = [];\n\ttokenizer.lastIndex = 0;\n\n\tif ( ! isValidConversionMap( conversionMap ) ) {\n\t\tthrow new TypeError(\n\t\t\t'The conversionMap provided is not valid. It must be an object with values that are React Elements'\n\t\t);\n\t}\n\n\tdo {\n\t\t// twiddle our thumbs\n\t} while ( proceed( conversionMap ) );\n\treturn createElement( Fragment, null, ...output );\n};\n\n/**\n * Validate conversion map.\n *\n * A map is considered valid if it's an object and every value in the object\n * is a React Element\n *\n * @private\n *\n * @param {Object} conversionMap The map being validated.\n *\n * @return {boolean} True means the map is valid.\n */\nconst isValidConversionMap = ( conversionMap ) => {\n\tconst isObject = typeof conversionMap === 'object';\n\tconst values = isObject && Object.values( conversionMap );\n\treturn (\n\t\tisObject &&\n\t\tvalues.length &&\n\t\tvalues.every( ( element ) => isValidElement( element ) )\n\t);\n};\n\n/**\n * This is the iterator over the matches in the string.\n *\n * @private\n *\n * @param {Object} conversionMap The conversion map for the string.\n *\n * @return {boolean} true for continuing to iterate, false for finished.\n */\nfunction proceed( conversionMap ) {\n\tconst next = nextToken();\n\tconst [ tokenType, name, startOffset, tokenLength ] = next;\n\tconst stackDepth = stack.length;\n\tconst leadingTextStart = startOffset > offset ? offset : null;\n\tif ( ! conversionMap[ name ] ) {\n\t\taddText();\n\t\treturn false;\n\t}\n\tswitch ( tokenType ) {\n\t\tcase 'no-more-tokens':\n\t\t\tif ( stackDepth !== 0 ) {\n\t\t\t\tconst { leadingTextStart: stackLeadingText, tokenStart } =\n\t\t\t\t\tstack.pop();\n\t\t\t\toutput.push( indoc.substr( stackLeadingText, tokenStart ) );\n\t\t\t}\n\t\t\taddText();\n\t\t\treturn false;\n\n\t\tcase 'self-closed':\n\t\t\tif ( 0 === stackDepth ) {\n\t\t\t\tif ( null !== leadingTextStart ) {\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tindoc.substr(\n\t\t\t\t\t\t\tleadingTextStart,\n\t\t\t\t\t\t\tstartOffset - leadingTextStart\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\toutput.push( conversionMap[ name ] );\n\t\t\t\toffset = startOffset + tokenLength;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Otherwise we found an inner element.\n\t\t\taddChild(\n\t\t\t\tcreateFrame( conversionMap[ name ], startOffset, tokenLength )\n\t\t\t);\n\t\t\toffset = startOffset + tokenLength;\n\t\t\treturn true;\n\n\t\tcase 'opener':\n\t\t\tstack.push(\n\t\t\t\tcreateFrame(\n\t\t\t\t\tconversionMap[ name ],\n\t\t\t\t\tstartOffset,\n\t\t\t\t\ttokenLength,\n\t\t\t\t\tstartOffset + tokenLength,\n\t\t\t\t\tleadingTextStart\n\t\t\t\t)\n\t\t\t);\n\t\t\toffset = startOffset + tokenLength;\n\t\t\treturn true;\n\n\t\tcase 'closer':\n\t\t\t// If we're not nesting then this is easy - close the block.\n\t\t\tif ( 1 === stackDepth ) {\n\t\t\t\tcloseOuterElement( startOffset );\n\t\t\t\toffset = startOffset + tokenLength;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Otherwise we're nested and we have to close out the current\n\t\t\t// block and add it as a innerBlock to the parent.\n\t\t\tconst stackTop = stack.pop();\n\t\t\tconst text = indoc.substr(\n\t\t\t\tstackTop.prevOffset,\n\t\t\t\tstartOffset - stackTop.prevOffset\n\t\t\t);\n\t\t\tstackTop.children.push( text );\n\t\t\tstackTop.prevOffset = startOffset + tokenLength;\n\t\t\tconst frame = createFrame(\n\t\t\t\tstackTop.element,\n\t\t\t\tstackTop.tokenStart,\n\t\t\t\tstackTop.tokenLength,\n\t\t\t\tstartOffset + tokenLength\n\t\t\t);\n\t\t\tframe.children = stackTop.children;\n\t\t\taddChild( frame );\n\t\t\toffset = startOffset + tokenLength;\n\t\t\treturn true;\n\n\t\tdefault:\n\t\t\taddText();\n\t\t\treturn false;\n\t}\n}\n\n/**\n * Grabs the next token match in the string and returns it's details.\n *\n * @private\n *\n * @return {Array} An array of details for the token matched.\n */\nfunction nextToken() {\n\tconst matches = tokenizer.exec( indoc );\n\t// We have no more tokens.\n\tif ( null === matches ) {\n\t\treturn [ 'no-more-tokens' ];\n\t}\n\tconst startedAt = matches.index;\n\tconst [ match, isClosing, name, isSelfClosed ] = matches;\n\tconst length = match.length;\n\tif ( isSelfClosed ) {\n\t\treturn [ 'self-closed', name, startedAt, length ];\n\t}\n\tif ( isClosing ) {\n\t\treturn [ 'closer', name, startedAt, length ];\n\t}\n\treturn [ 'opener', name, startedAt, length ];\n}\n\n/**\n * Pushes text extracted from the indoc string to the output stack given the\n * current rawLength value and offset (if rawLength is provided ) or the\n * indoc.length and offset.\n *\n * @private\n */\nfunction addText() {\n\tconst length = indoc.length - offset;\n\tif ( 0 === length ) {\n\t\treturn;\n\t}\n\toutput.push( indoc.substr( offset, length ) );\n}\n\n/**\n * Pushes a child element to the associated parent element's children for the\n * parent currently active in the stack.\n *\n * @private\n *\n * @param {Frame} frame The Frame containing the child element and it's\n * token information.\n */\nfunction addChild( frame ) {\n\tconst { element, tokenStart, tokenLength, prevOffset, children } = frame;\n\tconst parent = stack[ stack.length - 1 ];\n\tconst text = indoc.substr(\n\t\tparent.prevOffset,\n\t\ttokenStart - parent.prevOffset\n\t);\n\n\tif ( text ) {\n\t\tparent.children.push( text );\n\t}\n\n\tparent.children.push( cloneElement( element, null, ...children ) );\n\tparent.prevOffset = prevOffset ? prevOffset : tokenStart + tokenLength;\n}\n\n/**\n * This is called for closing tags. It creates the element currently active in\n * the stack.\n *\n * @private\n *\n * @param {number} endOffset Offset at which the closing tag for the element\n * begins in the string. If this is greater than the\n * prevOffset attached to the element, then this\n * helps capture any remaining nested text nodes in\n * the element.\n */\nfunction closeOuterElement( endOffset ) {\n\tconst { element, leadingTextStart, prevOffset, tokenStart, children } =\n\t\tstack.pop();\n\n\tconst text = endOffset\n\t\t? indoc.substr( prevOffset, endOffset - prevOffset )\n\t\t: indoc.substr( prevOffset );\n\n\tif ( text ) {\n\t\tchildren.push( text );\n\t}\n\n\tif ( null !== leadingTextStart ) {\n\t\toutput.push(\n\t\t\tindoc.substr( leadingTextStart, tokenStart - leadingTextStart )\n\t\t);\n\t}\n\n\toutput.push( cloneElement( element, null, ...children ) );\n}\n\nexport default createInterpolateElement;\n"],"mappings":";;;;;;AAGA,IAAAA,MAAA,GAAAC,OAAA;AAHA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;;AAEA,IAAIC,KAAK,EAAEC,MAAM,EAAEC,MAAM,EAAEC,KAAK;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,SAAS,GAAG,uBAAuB;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,WAAWA,CACnBC,OAAO,EACPC,UAAU,EACVC,WAAW,EACXC,UAAU,EACVC,gBAAgB,EACf;EACD,OAAO;IACNJ,OAAO;IACPC,UAAU;IACVC,WAAW;IACXC,UAAU;IACVC,gBAAgB;IAChBC,QAAQ,EAAE;EACX,CAAC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,wBAAwB,GAAGA,CAAEC,kBAAkB,EAAEC,aAAa,KAAM;EACzEd,KAAK,GAAGa,kBAAkB;EAC1BZ,MAAM,GAAG,CAAC;EACVC,MAAM,GAAG,EAAE;EACXC,KAAK,GAAG,EAAE;EACVC,SAAS,CAACW,SAAS,GAAG,CAAC;EAEvB,IAAK,CAAEC,oBAAoB,CAAEF,aAAc,CAAC,EAAG;IAC9C,MAAM,IAAIG,SAAS,CAClB,mGACD,CAAC;EACF;EAEA,GAAG;IACF;EAAA,CACA,QAASC,OAAO,CAAEJ,aAAc,CAAC;EAClC,OAAO,IAAAK,oBAAa,EAAEC,eAAQ,EAAE,IAAI,EAAE,GAAGlB,MAAO,CAAC;AAClD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMc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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactDom","require","_client"],"sources":["@wordpress/element/src/react-platform.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tcreatePortal,\n\tfindDOMNode,\n\tflushSync,\n\trender,\n\thydrate,\n\tunmountComponentAtNode,\n} from 'react-dom';\nimport { createRoot, hydrateRoot } from 'react-dom/client';\n\n/**\n * Creates a portal into which a component can be rendered.\n *\n * @see https://github.com/facebook/react/issues/10309#issuecomment-318433235\n *\n * @param {import('
|
|
1
|
+
{"version":3,"names":["_reactDom","require","_client"],"sources":["@wordpress/element/src/react-platform.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tcreatePortal,\n\tfindDOMNode,\n\tflushSync,\n\trender,\n\thydrate,\n\tunmountComponentAtNode,\n} from 'react-dom';\nimport { createRoot, hydrateRoot } from 'react-dom/client';\n\n/**\n * Creates a portal into which a component can be rendered.\n *\n * @see https://github.com/facebook/react/issues/10309#issuecomment-318433235\n *\n * @param {import('react').ReactElement} child Any renderable child, such as an element,\n * string, or fragment.\n * @param {HTMLElement} container DOM node into which element should be rendered.\n */\nexport { createPortal };\n\n/**\n * Finds the dom node of a React component.\n *\n * @param {import('react').ComponentType} component Component's instance.\n */\nexport { findDOMNode };\n\n/**\n * Forces React to flush any updates inside the provided callback synchronously.\n *\n * @param {Function} callback Callback to run synchronously.\n */\nexport { flushSync };\n\n/**\n * Renders a given element into the target DOM node.\n *\n * @deprecated since WordPress 6.2.0. Use `createRoot` instead.\n * @see https://react.dev/reference/react-dom/render\n */\nexport { render };\n\n/**\n * Hydrates a given element into the target DOM node.\n *\n * @deprecated since WordPress 6.2.0. Use `hydrateRoot` instead.\n * @see https://react.dev/reference/react-dom/hydrate\n */\nexport { hydrate };\n\n/**\n * Creates a new React root for the target DOM node.\n *\n * @since 6.2.0 Introduced in WordPress core.\n * @see https://react.dev/reference/react-dom/client/createRoot\n */\nexport { createRoot };\n\n/**\n * Creates a new React root for the target DOM node and hydrates it with a pre-generated markup.\n *\n * @since 6.2.0 Introduced in WordPress core.\n * @see https://react.dev/reference/react-dom/client/hydrateRoot\n */\nexport { hydrateRoot };\n\n/**\n * Removes any mounted element from the target DOM node.\n *\n * @deprecated since WordPress 6.2.0. Use `root.unmount()` instead.\n * @see https://react.dev/reference/react-dom/unmountComponentAtNode\n */\nexport { unmountComponentAtNode };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,IAAAA,SAAA,GAAAC,OAAA;AAQA,IAAAC,OAAA,GAAAD,OAAA"}
|
package/build/react.js
CHANGED
|
@@ -188,19 +188,19 @@ var _react = require("react");
|
|
|
188
188
|
/**
|
|
189
189
|
* Object containing a React element.
|
|
190
190
|
*
|
|
191
|
-
* @typedef {import('react').ReactElement}
|
|
191
|
+
* @typedef {import('react').ReactElement} Element
|
|
192
192
|
*/
|
|
193
193
|
|
|
194
194
|
/**
|
|
195
195
|
* Object containing a React component.
|
|
196
196
|
*
|
|
197
|
-
* @typedef {import('react').ComponentType}
|
|
197
|
+
* @typedef {import('react').ComponentType} ComponentType
|
|
198
198
|
*/
|
|
199
199
|
|
|
200
200
|
/**
|
|
201
201
|
* Object containing a React synthetic event.
|
|
202
202
|
*
|
|
203
|
-
* @typedef {import('react').SyntheticEvent}
|
|
203
|
+
* @typedef {import('react').SyntheticEvent} SyntheticEvent
|
|
204
204
|
*/
|
|
205
205
|
|
|
206
206
|
/**
|
|
@@ -217,10 +217,10 @@ var _react = require("react");
|
|
|
217
217
|
/**
|
|
218
218
|
* Creates a copy of an element with extended props.
|
|
219
219
|
*
|
|
220
|
-
* @param {
|
|
221
|
-
* @param {?Object}
|
|
220
|
+
* @param {Element} element Element
|
|
221
|
+
* @param {?Object} props Props to apply to cloned element
|
|
222
222
|
*
|
|
223
|
-
* @return {
|
|
223
|
+
* @return {Element} Cloned element.
|
|
224
224
|
*/
|
|
225
225
|
|
|
226
226
|
/**
|
|
@@ -243,9 +243,9 @@ var _react = require("react");
|
|
|
243
243
|
* @param {Object} props Element properties, either attribute
|
|
244
244
|
* set to apply to DOM node or values to
|
|
245
245
|
* pass through to element creator
|
|
246
|
-
* @param {...
|
|
246
|
+
* @param {...Element} children Descendant elements
|
|
247
247
|
*
|
|
248
|
-
* @return {
|
|
248
|
+
* @return {Element} Element.
|
|
249
249
|
*/
|
|
250
250
|
|
|
251
251
|
/**
|
|
@@ -265,7 +265,7 @@ var _react = require("react");
|
|
|
265
265
|
* @param {Function} forwarder Function passed `props` and `ref`, expected to
|
|
266
266
|
* return an element.
|
|
267
267
|
*
|
|
268
|
-
* @return {
|
|
268
|
+
* @return {Component} Enhanced component.
|
|
269
269
|
*/
|
|
270
270
|
|
|
271
271
|
/**
|
|
@@ -273,11 +273,11 @@ var _react = require("react");
|
|
|
273
273
|
*/
|
|
274
274
|
|
|
275
275
|
/**
|
|
276
|
-
* Checks if an object is a valid
|
|
276
|
+
* Checks if an object is a valid React Element.
|
|
277
277
|
*
|
|
278
278
|
* @param {Object} objectToCheck The object to be checked.
|
|
279
279
|
*
|
|
280
|
-
* @return {boolean} true if objectToTest is a valid
|
|
280
|
+
* @return {boolean} true if objectToTest is a valid React Element and false otherwise.
|
|
281
281
|
*/
|
|
282
282
|
|
|
283
283
|
/**
|
package/build/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","concatChildren","childrenArguments","reduce","accumulator","children","i","Children","forEach","child","j","cloneElement","key","join","push","switchChildrenNodeName","nodeName","map","elt","index","valueOf","createElement","childrenProp","props"],"sources":["@wordpress/element/src/react.js"],"sourcesContent":["/**\n * External dependencies\n */\n// eslint-disable-next-line @typescript-eslint/no-restricted-imports\nimport {\n\tChildren,\n\tcloneElement,\n\tComponent,\n\tcreateContext,\n\tcreateElement,\n\tcreateRef,\n\tforwardRef,\n\tFragment,\n\tisValidElement,\n\tmemo,\n\tStrictMode,\n\tuseCallback,\n\tuseContext,\n\tuseDebugValue,\n\tuseDeferredValue,\n\tuseEffect,\n\tuseId,\n\tuseMemo,\n\tuseImperativeHandle,\n\tuseInsertionEffect,\n\tuseLayoutEffect,\n\tuseReducer,\n\tuseRef,\n\tuseState,\n\tuseSyncExternalStore,\n\tuseTransition,\n\tstartTransition,\n\tlazy,\n\tSuspense,\n} from 'react';\n\n/**\n * Object containing a React element.\n *\n * @typedef {import('react').ReactElement}
|
|
1
|
+
{"version":3,"names":["_react","require","concatChildren","childrenArguments","reduce","accumulator","children","i","Children","forEach","child","j","cloneElement","key","join","push","switchChildrenNodeName","nodeName","map","elt","index","valueOf","createElement","childrenProp","props"],"sources":["@wordpress/element/src/react.js"],"sourcesContent":["/**\n * External dependencies\n */\n// eslint-disable-next-line @typescript-eslint/no-restricted-imports\nimport {\n\tChildren,\n\tcloneElement,\n\tComponent,\n\tcreateContext,\n\tcreateElement,\n\tcreateRef,\n\tforwardRef,\n\tFragment,\n\tisValidElement,\n\tmemo,\n\tStrictMode,\n\tuseCallback,\n\tuseContext,\n\tuseDebugValue,\n\tuseDeferredValue,\n\tuseEffect,\n\tuseId,\n\tuseMemo,\n\tuseImperativeHandle,\n\tuseInsertionEffect,\n\tuseLayoutEffect,\n\tuseReducer,\n\tuseRef,\n\tuseState,\n\tuseSyncExternalStore,\n\tuseTransition,\n\tstartTransition,\n\tlazy,\n\tSuspense,\n} from 'react';\n\n/**\n * Object containing a React element.\n *\n * @typedef {import('react').ReactElement} Element\n */\n\n/**\n * Object containing a React component.\n *\n * @typedef {import('react').ComponentType} ComponentType\n */\n\n/**\n * Object containing a React synthetic event.\n *\n * @typedef {import('react').SyntheticEvent} SyntheticEvent\n */\n\n/**\n * Object containing a React synthetic event.\n *\n * @template T\n * @typedef {import('react').RefObject<T>} RefObject<T>\n */\n\n/**\n * Object that provides utilities for dealing with React children.\n */\nexport { Children };\n\n/**\n * Creates a copy of an element with extended props.\n *\n * @param {Element} element Element\n * @param {?Object} props Props to apply to cloned element\n *\n * @return {Element} Cloned element.\n */\nexport { cloneElement };\n\n/**\n * A base class to create WordPress Components (Refs, state and lifecycle hooks)\n */\nexport { Component };\n\n/**\n * Creates a context object containing two components: a provider and consumer.\n *\n * @param {Object} defaultValue A default data stored in the context.\n *\n * @return {Object} Context object.\n */\nexport { createContext };\n\n/**\n * Returns a new element of given type. Type can be either a string tag name or\n * another function which itself returns an element.\n *\n * @param {?(string|Function)} type Tag name or element creator\n * @param {Object} props Element properties, either attribute\n * set to apply to DOM node or values to\n * pass through to element creator\n * @param {...Element} children Descendant elements\n *\n * @return {Element} Element.\n */\nexport { createElement };\n\n/**\n * Returns an object tracking a reference to a rendered element via its\n * `current` property as either a DOMElement or Element, dependent upon the\n * type of element rendered with the ref attribute.\n *\n * @return {Object} Ref object.\n */\nexport { createRef };\n\n/**\n * Component enhancer used to enable passing a ref to its wrapped component.\n * Pass a function argument which receives `props` and `ref` as its arguments,\n * returning an element using the forwarded ref. The return value is a new\n * component which forwards its ref.\n *\n * @param {Function} forwarder Function passed `props` and `ref`, expected to\n * return an element.\n *\n * @return {Component} Enhanced component.\n */\nexport { forwardRef };\n\n/**\n * A component which renders its children without any wrapping element.\n */\nexport { Fragment };\n\n/**\n * Checks if an object is a valid React Element.\n *\n * @param {Object} objectToCheck The object to be checked.\n *\n * @return {boolean} true if objectToTest is a valid React Element and false otherwise.\n */\nexport { isValidElement };\n\n/**\n * @see https://reactjs.org/docs/react-api.html#reactmemo\n */\nexport { memo };\n\n/**\n * Component that activates additional checks and warnings for its descendants.\n */\nexport { StrictMode };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usecallback\n */\nexport { useCallback };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usecontext\n */\nexport { useContext };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usedebugvalue\n */\nexport { useDebugValue };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usedeferredvalue\n */\nexport { useDeferredValue };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#useeffect\n */\nexport { useEffect };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#useid\n */\nexport { useId };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#useimperativehandle\n */\nexport { useImperativeHandle };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#useinsertioneffect\n */\nexport { useInsertionEffect };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nexport { useLayoutEffect };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usememo\n */\nexport { useMemo };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usereducer\n */\nexport { useReducer };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n */\nexport { useRef };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usestate\n */\nexport { useState };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usesyncexternalstore\n */\nexport { useSyncExternalStore };\n\n/**\n * @see https://reactjs.org/docs/hooks-reference.html#usetransition\n */\nexport { useTransition };\n\n/**\n * @see https://reactjs.org/docs/react-api.html#starttransition\n */\nexport { startTransition };\n\n/**\n * @see https://reactjs.org/docs/react-api.html#reactlazy\n */\nexport { lazy };\n\n/**\n * @see https://reactjs.org/docs/react-api.html#reactsuspense\n */\nexport { Suspense };\n\n/**\n * Concatenate two or more React children objects.\n *\n * @param {...?Object} childrenArguments Array of children arguments (array of arrays/strings/objects) to concatenate.\n *\n * @return {Array} The concatenated value.\n */\nexport function concatChildren( ...childrenArguments ) {\n\treturn childrenArguments.reduce( ( accumulator, children, i ) => {\n\t\tChildren.forEach( children, ( child, j ) => {\n\t\t\tif ( child && 'string' !== typeof child ) {\n\t\t\t\tchild = cloneElement( child, {\n\t\t\t\t\tkey: [ i, j ].join(),\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\taccumulator.push( child );\n\t\t} );\n\n\t\treturn accumulator;\n\t}, [] );\n}\n\n/**\n * Switches the nodeName of all the elements in the children object.\n *\n * @param {?Object} children Children object.\n * @param {string} nodeName Node name.\n *\n * @return {?Object} The updated children object.\n */\nexport function switchChildrenNodeName( children, nodeName ) {\n\treturn (\n\t\tchildren &&\n\t\tChildren.map( children, ( elt, index ) => {\n\t\t\tif ( typeof elt?.valueOf() === 'string' ) {\n\t\t\t\treturn createElement( nodeName, { key: index }, elt );\n\t\t\t}\n\t\t\tconst { children: childrenProp, ...props } = elt.props;\n\t\t\treturn createElement(\n\t\t\t\tnodeName,\n\t\t\t\t{ key: index, ...props },\n\t\t\t\tchildrenProp\n\t\t\t);\n\t\t} )\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AAJA;AACA;AACA;AACA;;AAiCA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,cAAcA,CAAE,GAAGC,iBAAiB,EAAG;EACtD,OAAOA,iBAAiB,CAACC,MAAM,CAAE,CAAEC,WAAW,EAAEC,QAAQ,EAAEC,CAAC,KAAM;IAChEC,eAAQ,CAACC,OAAO,CAAEH,QAAQ,EAAE,CAAEI,KAAK,EAAEC,CAAC,KAAM;MAC3C,IAAKD,KAAK,IAAI,QAAQ,KAAK,OAAOA,KAAK,EAAG;QACzCA,KAAK,GAAG,IAAAE,mBAAY,EAAEF,KAAK,EAAE;UAC5BG,GAAG,EAAE,CAAEN,CAAC,EAAEI,CAAC,CAAE,CAACG,IAAI,CAAC;QACpB,CAAE,CAAC;MACJ;MAEAT,WAAW,CAACU,IAAI,CAAEL,KAAM,CAAC;IAC1B,CAAE,CAAC;IAEH,OAAOL,WAAW;EACnB,CAAC,EAAE,EAAG,CAAC;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASW,sBAAsBA,CAAEV,QAAQ,EAAEW,QAAQ,EAAG;EAC5D,OACCX,QAAQ,IACRE,eAAQ,CAACU,GAAG,CAAEZ,QAAQ,EAAE,CAAEa,GAAG,EAAEC,KAAK,KAAM;IACzC,IAAK,OAAOD,GAAG,EAAEE,OAAO,CAAC,CAAC,KAAK,QAAQ,EAAG;MACzC,OAAO,IAAAC,oBAAa,EAAEL,QAAQ,EAAE;QAAEJ,GAAG,EAAEO;MAAM,CAAC,EAAED,GAAI,CAAC;IACtD;IACA,MAAM;MAAEb,QAAQ,EAAEiB,YAAY;MAAE,GAAGC;IAAM,CAAC,GAAGL,GAAG,CAACK,KAAK;IACtD,OAAO,IAAAF,oBAAa,EACnBL,QAAQ,EACR;MAAEJ,GAAG,EAAEO,KAAK;MAAE,GAAGI;IAAM,CAAC,EACxBD,YACD,CAAC;EACF,CAAE,CAAC;AAEL"}
|
package/build/serialize.js
CHANGED
|
@@ -55,7 +55,7 @@ var _rawHtml = _interopRequireDefault(require("./raw-html"));
|
|
|
55
55
|
* Internal dependencies
|
|
56
56
|
*/
|
|
57
57
|
|
|
58
|
-
/** @typedef {import('
|
|
58
|
+
/** @typedef {import('react').ReactElement} ReactElement */
|
|
59
59
|
|
|
60
60
|
const {
|
|
61
61
|
Provider,
|
|
@@ -375,15 +375,15 @@ function renderNativeComponent(type, props, context, legacyContext = {}) {
|
|
|
375
375
|
return '<' + type + attributes + '>' + content + '</' + type + '>';
|
|
376
376
|
}
|
|
377
377
|
|
|
378
|
-
/** @typedef {import('
|
|
378
|
+
/** @typedef {import('react').ComponentType} ComponentType */
|
|
379
379
|
|
|
380
380
|
/**
|
|
381
381
|
* Serializes a non-native component type to string.
|
|
382
382
|
*
|
|
383
|
-
* @param {
|
|
384
|
-
* @param {Object}
|
|
385
|
-
* @param {Object}
|
|
386
|
-
* @param {Object}
|
|
383
|
+
* @param {ComponentType} Component Component type to serialize.
|
|
384
|
+
* @param {Object} props Props object.
|
|
385
|
+
* @param {Object} [context] Context object.
|
|
386
|
+
* @param {Object} [legacyContext] Legacy context object.
|
|
387
387
|
*
|
|
388
388
|
* @return {string} Serialized element
|
|
389
389
|
*/
|