@wordpress/block-library 8.9.0 → 8.10.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.
Files changed (284) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/comment-author-name/edit.js +1 -1
  3. package/build/comment-author-name/edit.js.map +1 -1
  4. package/build/comment-edit-link/edit.js +1 -1
  5. package/build/comment-edit-link/edit.js.map +1 -1
  6. package/build/cover/edit/inspector-controls.js +1 -1
  7. package/build/cover/edit/inspector-controls.js.map +1 -1
  8. package/build/cover/index.js +1 -1
  9. package/build/cover/variations.js +1 -1
  10. package/build/cover/variations.js.map +1 -1
  11. package/build/details/edit.js +19 -5
  12. package/build/details/edit.js.map +1 -1
  13. package/build/details/index.js +14 -10
  14. package/build/details/index.js.map +1 -1
  15. package/build/details/save.js +4 -1
  16. package/build/details/save.js.map +1 -1
  17. package/build/embed/variations.js +2 -2
  18. package/build/embed/variations.js.map +1 -1
  19. package/build/file/view.js +1 -1
  20. package/build/file/view.js.map +1 -1
  21. package/build/gallery/edit.js +2 -8
  22. package/build/gallery/edit.js.map +1 -1
  23. package/build/index.js +0 -6
  24. package/build/index.js.map +1 -1
  25. package/build/index.native.js +1 -1
  26. package/build/index.native.js.map +1 -1
  27. package/build/list-item/utils.js +5 -1
  28. package/build/list-item/utils.js.map +1 -1
  29. package/build/loginout/index.js +11 -1
  30. package/build/loginout/index.js.map +1 -1
  31. package/build/navigation/constants.js +13 -0
  32. package/build/navigation/constants.js.map +1 -0
  33. package/build/navigation/edit/index.js +16 -26
  34. package/build/navigation/edit/index.js.map +1 -1
  35. package/build/navigation/edit/inner-blocks.js +4 -7
  36. package/build/navigation/edit/inner-blocks.js.map +1 -1
  37. package/build/navigation/edit/unsaved-inner-blocks.js +4 -6
  38. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  39. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +1 -1
  40. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  41. package/build/navigation/interactivity.js +139 -0
  42. package/build/navigation/interactivity.js.map +1 -0
  43. package/build/navigation-link/edit.js +1 -1
  44. package/build/navigation-link/edit.js.map +1 -1
  45. package/build/navigation-submenu/edit.js +1 -1
  46. package/build/navigation-submenu/edit.js.map +1 -1
  47. package/build/paragraph/index.js +5 -1
  48. package/build/paragraph/index.js.map +1 -1
  49. package/build/paragraph/transforms.js +5 -1
  50. package/build/paragraph/transforms.js.map +1 -1
  51. package/build/post-author-name/edit.js +1 -1
  52. package/build/post-author-name/edit.js.map +1 -1
  53. package/build/post-featured-image/edit.js +1 -2
  54. package/build/post-featured-image/edit.js.map +1 -1
  55. package/build/post-featured-image/overlay.js +5 -0
  56. package/build/post-featured-image/overlay.js.map +1 -1
  57. package/build/post-title/edit.js +14 -4
  58. package/build/post-title/edit.js.map +1 -1
  59. package/build/preformatted/edit.native.js +3 -2
  60. package/build/preformatted/edit.native.js.map +1 -1
  61. package/build/quote/transforms.js +16 -27
  62. package/build/quote/transforms.js.map +1 -1
  63. package/build/read-more/edit.js +1 -1
  64. package/build/read-more/edit.js.map +1 -1
  65. package/build/search/edit.js +9 -1
  66. package/build/search/edit.js.map +1 -1
  67. package/build/site-title/edit/index.js +1 -1
  68. package/build/site-title/edit/index.js.map +1 -1
  69. package/build/social-links/edit.js +2 -2
  70. package/build/social-links/edit.js.map +1 -1
  71. package/build/utils/interactivity/constants.js +9 -0
  72. package/build/utils/interactivity/constants.js.map +1 -0
  73. package/build/utils/interactivity/directives.js +208 -0
  74. package/build/utils/interactivity/directives.js.map +1 -0
  75. package/build/utils/interactivity/hooks.js +112 -0
  76. package/build/utils/interactivity/hooks.js.map +1 -0
  77. package/build/utils/interactivity/hydration.js +34 -0
  78. package/build/utils/interactivity/hydration.js.map +1 -0
  79. package/build/utils/interactivity/index.js +34 -0
  80. package/build/utils/interactivity/index.js.map +1 -0
  81. package/build/utils/interactivity/store.js +67 -0
  82. package/build/utils/interactivity/store.js.map +1 -0
  83. package/build/utils/interactivity/utils.js +87 -0
  84. package/build/utils/interactivity/utils.js.map +1 -0
  85. package/build/utils/interactivity/vdom.js +109 -0
  86. package/build/utils/interactivity/vdom.js.map +1 -0
  87. package/build-module/comment-author-name/edit.js +1 -1
  88. package/build-module/comment-author-name/edit.js.map +1 -1
  89. package/build-module/comment-edit-link/edit.js +1 -1
  90. package/build-module/comment-edit-link/edit.js.map +1 -1
  91. package/build-module/cover/edit/inspector-controls.js +1 -1
  92. package/build-module/cover/edit/inspector-controls.js.map +1 -1
  93. package/build-module/cover/index.js +1 -1
  94. package/build-module/cover/variations.js +1 -1
  95. package/build-module/cover/variations.js.map +1 -1
  96. package/build-module/details/edit.js +20 -6
  97. package/build-module/details/edit.js.map +1 -1
  98. package/build-module/details/index.js +14 -10
  99. package/build-module/details/index.js.map +1 -1
  100. package/build-module/details/save.js +5 -2
  101. package/build-module/details/save.js.map +1 -1
  102. package/build-module/embed/variations.js +2 -2
  103. package/build-module/embed/variations.js.map +1 -1
  104. package/build-module/file/view.js +1 -1
  105. package/build-module/file/view.js.map +1 -1
  106. package/build-module/gallery/edit.js +2 -8
  107. package/build-module/gallery/edit.js.map +1 -1
  108. package/build-module/index.js +0 -4
  109. package/build-module/index.js.map +1 -1
  110. package/build-module/index.native.js +1 -1
  111. package/build-module/index.native.js.map +1 -1
  112. package/build-module/list-item/utils.js +5 -1
  113. package/build-module/list-item/utils.js.map +1 -1
  114. package/build-module/loginout/index.js +11 -1
  115. package/build-module/loginout/index.js.map +1 -1
  116. package/build-module/navigation/constants.js +5 -0
  117. package/build-module/navigation/constants.js.map +1 -0
  118. package/build-module/navigation/edit/index.js +18 -27
  119. package/build-module/navigation/edit/index.js.map +1 -1
  120. package/build-module/navigation/edit/inner-blocks.js +1 -4
  121. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  122. package/build-module/navigation/edit/unsaved-inner-blocks.js +1 -4
  123. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  124. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +1 -1
  125. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  126. package/build-module/navigation/interactivity.js +136 -0
  127. package/build-module/navigation/interactivity.js.map +1 -0
  128. package/build-module/navigation-link/edit.js +1 -1
  129. package/build-module/navigation-link/edit.js.map +1 -1
  130. package/build-module/navigation-submenu/edit.js +1 -1
  131. package/build-module/navigation-submenu/edit.js.map +1 -1
  132. package/build-module/paragraph/index.js +5 -1
  133. package/build-module/paragraph/index.js.map +1 -1
  134. package/build-module/paragraph/transforms.js +5 -1
  135. package/build-module/paragraph/transforms.js.map +1 -1
  136. package/build-module/post-author-name/edit.js +1 -1
  137. package/build-module/post-author-name/edit.js.map +1 -1
  138. package/build-module/post-featured-image/edit.js +1 -2
  139. package/build-module/post-featured-image/edit.js.map +1 -1
  140. package/build-module/post-featured-image/overlay.js +5 -0
  141. package/build-module/post-featured-image/overlay.js.map +1 -1
  142. package/build-module/post-title/edit.js +13 -4
  143. package/build-module/post-title/edit.js.map +1 -1
  144. package/build-module/preformatted/edit.native.js +3 -2
  145. package/build-module/preformatted/edit.native.js.map +1 -1
  146. package/build-module/quote/transforms.js +16 -27
  147. package/build-module/quote/transforms.js.map +1 -1
  148. package/build-module/read-more/edit.js +1 -1
  149. package/build-module/read-more/edit.js.map +1 -1
  150. package/build-module/search/edit.js +9 -1
  151. package/build-module/search/edit.js.map +1 -1
  152. package/build-module/site-title/edit/index.js +1 -1
  153. package/build-module/site-title/edit/index.js.map +1 -1
  154. package/build-module/social-links/edit.js +2 -2
  155. package/build-module/social-links/edit.js.map +1 -1
  156. package/build-module/utils/interactivity/constants.js +2 -0
  157. package/build-module/utils/interactivity/constants.js.map +1 -0
  158. package/build-module/utils/interactivity/directives.js +193 -0
  159. package/build-module/utils/interactivity/directives.js.map +1 -0
  160. package/build-module/utils/interactivity/hooks.js +98 -0
  161. package/build-module/utils/interactivity/hooks.js.map +1 -0
  162. package/build-module/utils/interactivity/hydration.js +21 -0
  163. package/build-module/utils/interactivity/hydration.js.map +1 -0
  164. package/build-module/utils/interactivity/index.js +17 -0
  165. package/build-module/utils/interactivity/index.js.map +1 -0
  166. package/build-module/utils/interactivity/store.js +56 -0
  167. package/build-module/utils/interactivity/store.js.map +1 -0
  168. package/build-module/utils/interactivity/utils.js +75 -0
  169. package/build-module/utils/interactivity/utils.js.map +1 -0
  170. package/build-module/utils/interactivity/vdom.js +97 -0
  171. package/build-module/utils/interactivity/vdom.js.map +1 -0
  172. package/build-style/cover/style-rtl.css +2 -0
  173. package/build-style/cover/style.css +2 -0
  174. package/build-style/{details-summary → details}/editor-rtl.css +1 -1
  175. package/build-style/{details-summary → details}/editor.css +1 -1
  176. package/build-style/details/style-rtl.css +14 -0
  177. package/build-style/details/style.css +14 -0
  178. package/build-style/editor-rtl.css +3 -5
  179. package/build-style/editor.css +3 -5
  180. package/build-style/gallery/editor-rtl.css +0 -4
  181. package/build-style/gallery/editor.css +0 -4
  182. package/build-style/search/editor-rtl.css +1 -0
  183. package/build-style/search/editor.css +1 -0
  184. package/build-style/site-logo/editor-rtl.css +1 -0
  185. package/build-style/site-logo/editor.css +1 -0
  186. package/build-style/style-rtl.css +13 -1
  187. package/build-style/style.css +13 -1
  188. package/package.json +36 -32
  189. package/src/comment-author-name/edit.js +1 -1
  190. package/src/comment-edit-link/edit.js +1 -1
  191. package/src/comment-template/index.php +8 -7
  192. package/src/cover/block.json +1 -1
  193. package/src/cover/edit/inspector-controls.js +56 -54
  194. package/src/cover/style.scss +5 -0
  195. package/src/cover/test/edit.js +56 -2
  196. package/src/cover/variations.js +1 -3
  197. package/src/details/block.json +8 -6
  198. package/src/details/edit.js +27 -5
  199. package/src/details/editor.scss +3 -0
  200. package/src/details/index.js +10 -5
  201. package/src/details/save.js +5 -1
  202. package/src/details/style.scss +16 -0
  203. package/src/editor.scss +1 -1
  204. package/src/embed/variations.js +2 -2
  205. package/src/file/view.js +4 -1
  206. package/src/gallery/edit.js +5 -8
  207. package/src/gallery/editor.scss +0 -6
  208. package/src/gallery/test/index.native.js +48 -3
  209. package/src/image/test/edit.native.js +38 -16
  210. package/src/index.js +0 -4
  211. package/src/index.native.js +1 -0
  212. package/src/loginout/block.json +11 -1
  213. package/src/navigation/constants.js +16 -0
  214. package/src/navigation/edit/index.js +71 -83
  215. package/src/navigation/edit/inner-blocks.js +1 -16
  216. package/src/navigation/edit/unsaved-inner-blocks.js +1 -16
  217. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +1 -1
  218. package/src/navigation/index.php +209 -203
  219. package/src/navigation/interactivity.js +144 -0
  220. package/src/navigation-link/edit.js +1 -1
  221. package/src/navigation-submenu/edit.js +1 -1
  222. package/src/paragraph/block.json +5 -1
  223. package/src/post-author-name/edit.js +1 -1
  224. package/src/post-featured-image/edit.js +1 -1
  225. package/src/post-featured-image/index.php +1 -1
  226. package/src/post-featured-image/overlay.js +4 -0
  227. package/src/post-terms/index.php +2 -2
  228. package/src/post-title/edit.js +8 -1
  229. package/src/preformatted/edit.native.js +1 -3
  230. package/src/quote/transforms.js +0 -6
  231. package/src/read-more/edit.js +1 -1
  232. package/src/search/edit.js +9 -4
  233. package/src/search/editor.scss +1 -0
  234. package/src/site-logo/editor.scss +2 -1
  235. package/src/site-title/edit/index.js +1 -1
  236. package/src/social-links/edit.js +33 -31
  237. package/src/style.scss +0 -1
  238. package/src/template-part/index.php +20 -5
  239. package/src/utils/interactivity/constants.js +1 -0
  240. package/src/utils/interactivity/directives.js +179 -0
  241. package/src/utils/interactivity/hooks.js +76 -0
  242. package/src/utils/interactivity/hydration.js +22 -0
  243. package/src/utils/interactivity/index.js +17 -0
  244. package/src/utils/interactivity/store.js +45 -0
  245. package/src/utils/interactivity/utils.js +66 -0
  246. package/src/utils/interactivity/vdom.js +94 -0
  247. package/tsconfig.json +1 -0
  248. package/tsconfig.tsbuildinfo +1 -1
  249. package/build/details-content/edit.js +0 -34
  250. package/build/details-content/edit.js.map +0 -1
  251. package/build/details-content/index.js +0 -94
  252. package/build/details-content/index.js.map +0 -1
  253. package/build/details-content/save.js +0 -20
  254. package/build/details-content/save.js.map +0 -1
  255. package/build/details-summary/edit.js +0 -42
  256. package/build/details-summary/edit.js.map +0 -1
  257. package/build/details-summary/index.js +0 -97
  258. package/build/details-summary/index.js.map +0 -1
  259. package/build/details-summary/save.js +0 -24
  260. package/build/details-summary/save.js.map +0 -1
  261. package/build-module/details-content/edit.js +0 -23
  262. package/build-module/details-content/edit.js.map +0 -1
  263. package/build-module/details-content/index.js +0 -76
  264. package/build-module/details-content/index.js.map +0 -1
  265. package/build-module/details-content/save.js +0 -11
  266. package/build-module/details-content/save.js.map +0 -1
  267. package/build-module/details-summary/edit.js +0 -30
  268. package/build-module/details-summary/edit.js.map +0 -1
  269. package/build-module/details-summary/index.js +0 -79
  270. package/build-module/details-summary/index.js.map +0 -1
  271. package/build-module/details-summary/save.js +0 -16
  272. package/build-module/details-summary/save.js.map +0 -1
  273. package/build-style/details-summary/style-rtl.css +0 -91
  274. package/build-style/details-summary/style.css +0 -91
  275. package/src/details-content/block.json +0 -50
  276. package/src/details-content/edit.js +0 -29
  277. package/src/details-content/index.js +0 -23
  278. package/src/details-content/save.js +0 -12
  279. package/src/details-summary/block.json +0 -53
  280. package/src/details-summary/edit.js +0 -27
  281. package/src/details-summary/editor.scss +0 -3
  282. package/src/details-summary/index.js +0 -23
  283. package/src/details-summary/save.js +0 -13
  284. package/src/details-summary/style.scss +0 -3
@@ -0,0 +1,193 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import { createElement } from "@wordpress/element";
3
+
4
+ /**
5
+ * External dependencies
6
+ */
7
+ import { useContext, useMemo, useEffect } from 'preact/hooks';
8
+ import { deepSignal, peek } from 'deepsignal';
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+
13
+ import { useSignalEffect } from './utils';
14
+ import { directive } from './hooks';
15
+
16
+ const isObject = item => item && typeof item === 'object' && !Array.isArray(item);
17
+
18
+ const mergeDeepSignals = (target, source) => {
19
+ for (const k in source) {
20
+ if (typeof peek(target, k) === 'undefined') {
21
+ target[`$${k}`] = source[`$${k}`];
22
+ } else if (isObject(peek(target, k)) && isObject(peek(source, k))) {
23
+ mergeDeepSignals(target[`$${k}`].peek(), source[`$${k}`].peek());
24
+ }
25
+ }
26
+ };
27
+
28
+ export default (() => {
29
+ // data-wp-context
30
+ directive('context', _ref => {
31
+ let {
32
+ directives: {
33
+ context: {
34
+ default: context
35
+ }
36
+ },
37
+ props: {
38
+ children
39
+ },
40
+ context: inherited
41
+ } = _ref;
42
+ const {
43
+ Provider
44
+ } = inherited;
45
+ const inheritedValue = useContext(inherited);
46
+ const value = useMemo(() => {
47
+ const localValue = deepSignal(context);
48
+ mergeDeepSignals(localValue, inheritedValue);
49
+ return localValue;
50
+ }, [context, inheritedValue]);
51
+ return createElement(Provider, {
52
+ value: value
53
+ }, children);
54
+ }); // data-wp-effect.[name]
55
+
56
+ directive('effect', _ref2 => {
57
+ let {
58
+ directives: {
59
+ effect
60
+ },
61
+ context,
62
+ evaluate
63
+ } = _ref2;
64
+ const contextValue = useContext(context);
65
+ Object.values(effect).forEach(path => {
66
+ useSignalEffect(() => {
67
+ return evaluate(path, {
68
+ context: contextValue
69
+ });
70
+ });
71
+ });
72
+ }); // data-wp-init.[name]
73
+
74
+ directive('init', _ref3 => {
75
+ let {
76
+ directives: {
77
+ init
78
+ },
79
+ context,
80
+ evaluate
81
+ } = _ref3;
82
+ const contextValue = useContext(context);
83
+ Object.values(init).forEach(path => {
84
+ useEffect(() => {
85
+ return evaluate(path, {
86
+ context: contextValue
87
+ });
88
+ }, []);
89
+ });
90
+ }); // data-wp-on.[event]
91
+
92
+ directive('on', _ref4 => {
93
+ let {
94
+ directives: {
95
+ on
96
+ },
97
+ element,
98
+ evaluate,
99
+ context
100
+ } = _ref4;
101
+ const contextValue = useContext(context);
102
+ Object.entries(on).forEach(_ref5 => {
103
+ let [name, path] = _ref5;
104
+
105
+ element.props[`on${name}`] = event => {
106
+ evaluate(path, {
107
+ event,
108
+ context: contextValue
109
+ });
110
+ };
111
+ });
112
+ }); // data-wp-class.[classname]
113
+
114
+ directive('class', _ref6 => {
115
+ let {
116
+ directives: {
117
+ class: className
118
+ },
119
+ element,
120
+ evaluate,
121
+ context
122
+ } = _ref6;
123
+ const contextValue = useContext(context);
124
+ Object.keys(className).filter(n => n !== 'default').forEach(name => {
125
+ const result = evaluate(className[name], {
126
+ className: name,
127
+ context: contextValue
128
+ });
129
+ const currentClass = element.props.class || '';
130
+ const classFinder = new RegExp(`(^|\\s)${name}(\\s|$)`, 'g');
131
+ if (!result) element.props.class = currentClass.replace(classFinder, ' ').trim();else if (!classFinder.test(currentClass)) element.props.class = currentClass ? `${currentClass} ${name}` : name;
132
+ useEffect(() => {
133
+ // This seems necessary because Preact doesn't change the class
134
+ // names on the hydration, so we have to do it manually. It doesn't
135
+ // need deps because it only needs to do it the first time.
136
+ if (!result) {
137
+ element.ref.current.classList.remove(name);
138
+ } else {
139
+ element.ref.current.classList.add(name);
140
+ }
141
+ }, []);
142
+ });
143
+ }); // data-wp-bind.[attribute]
144
+
145
+ directive('bind', _ref7 => {
146
+ let {
147
+ directives: {
148
+ bind
149
+ },
150
+ element,
151
+ context,
152
+ evaluate
153
+ } = _ref7;
154
+ const contextValue = useContext(context);
155
+ Object.entries(bind).filter(n => n !== 'default').forEach(_ref8 => {
156
+ let [attribute, path] = _ref8;
157
+ const result = evaluate(path, {
158
+ context: contextValue
159
+ });
160
+ element.props[attribute] = result;
161
+ useEffect(() => {
162
+ // This seems necessary because Preact doesn't change the attributes
163
+ // on the hydration, so we have to do it manually. It doesn't need
164
+ // deps because it only needs to do it the first time.
165
+ if (result === false) {
166
+ element.ref.current.removeAttribute(attribute);
167
+ } else {
168
+ element.ref.current.setAttribute(attribute, result === true ? '' : result);
169
+ }
170
+ }, []);
171
+ });
172
+ }); // data-wp-ignore
173
+
174
+ directive('ignore', _ref9 => {
175
+ let {
176
+ element: {
177
+ type: Type,
178
+ props: {
179
+ innerHTML,
180
+ ...rest
181
+ }
182
+ }
183
+ } = _ref9;
184
+ // Preserve the initial inner HTML.
185
+ const cached = useMemo(() => innerHTML, []);
186
+ return createElement(Type, _extends({
187
+ dangerouslySetInnerHTML: {
188
+ __html: cached
189
+ }
190
+ }, rest));
191
+ });
192
+ });
193
+ //# sourceMappingURL=directives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-library/src/utils/interactivity/directives.js"],"names":["useContext","useMemo","useEffect","deepSignal","peek","useSignalEffect","directive","isObject","item","Array","isArray","mergeDeepSignals","target","source","k","directives","context","default","props","children","inherited","Provider","inheritedValue","value","localValue","effect","evaluate","contextValue","Object","values","forEach","path","init","on","element","entries","name","event","class","className","keys","filter","n","result","currentClass","classFinder","RegExp","replace","trim","test","ref","current","classList","remove","add","bind","attribute","removeAttribute","setAttribute","type","Type","innerHTML","rest","cached","__html"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useContext, useMemo, useEffect } from 'preact/hooks';\nimport { deepSignal, peek } from 'deepsignal';\n\n/**\n * Internal dependencies\n */\nimport { useSignalEffect } from './utils';\nimport { directive } from './hooks';\n\nconst isObject = ( item ) =>\n\titem && typeof item === 'object' && ! Array.isArray( item );\n\nconst mergeDeepSignals = ( target, source ) => {\n\tfor ( const k in source ) {\n\t\tif ( typeof peek( target, k ) === 'undefined' ) {\n\t\t\ttarget[ `$${ k }` ] = source[ `$${ k }` ];\n\t\t} else if (\n\t\t\tisObject( peek( target, k ) ) &&\n\t\t\tisObject( peek( source, k ) )\n\t\t) {\n\t\t\tmergeDeepSignals(\n\t\t\t\ttarget[ `$${ k }` ].peek(),\n\t\t\t\tsource[ `$${ k }` ].peek()\n\t\t\t);\n\t\t}\n\t}\n};\n\nexport default () => {\n\t// data-wp-context\n\tdirective(\n\t\t'context',\n\t\t( {\n\t\t\tdirectives: {\n\t\t\t\tcontext: { default: context },\n\t\t\t},\n\t\t\tprops: { children },\n\t\t\tcontext: inherited,\n\t\t} ) => {\n\t\t\tconst { Provider } = inherited;\n\t\t\tconst inheritedValue = useContext( inherited );\n\t\t\tconst value = useMemo( () => {\n\t\t\t\tconst localValue = deepSignal( context );\n\t\t\t\tmergeDeepSignals( localValue, inheritedValue );\n\t\t\t\treturn localValue;\n\t\t\t}, [ context, inheritedValue ] );\n\n\t\t\treturn <Provider value={ value }>{ children }</Provider>;\n\t\t}\n\t);\n\n\t// data-wp-effect.[name]\n\tdirective( 'effect', ( { directives: { effect }, context, evaluate } ) => {\n\t\tconst contextValue = useContext( context );\n\t\tObject.values( effect ).forEach( ( path ) => {\n\t\t\tuseSignalEffect( () => {\n\t\t\t\treturn evaluate( path, { context: contextValue } );\n\t\t\t} );\n\t\t} );\n\t} );\n\n\t// data-wp-init.[name]\n\tdirective( 'init', ( { directives: { init }, context, evaluate } ) => {\n\t\tconst contextValue = useContext( context );\n\t\tObject.values( init ).forEach( ( path ) => {\n\t\t\tuseEffect( () => {\n\t\t\t\treturn evaluate( path, { context: contextValue } );\n\t\t\t}, [] );\n\t\t} );\n\t} );\n\n\t// data-wp-on.[event]\n\tdirective( 'on', ( { directives: { on }, element, evaluate, context } ) => {\n\t\tconst contextValue = useContext( context );\n\t\tObject.entries( on ).forEach( ( [ name, path ] ) => {\n\t\t\telement.props[ `on${ name }` ] = ( event ) => {\n\t\t\t\tevaluate( path, { event, context: contextValue } );\n\t\t\t};\n\t\t} );\n\t} );\n\n\t// data-wp-class.[classname]\n\tdirective(\n\t\t'class',\n\t\t( {\n\t\t\tdirectives: { class: className },\n\t\t\telement,\n\t\t\tevaluate,\n\t\t\tcontext,\n\t\t} ) => {\n\t\t\tconst contextValue = useContext( context );\n\t\t\tObject.keys( className )\n\t\t\t\t.filter( ( n ) => n !== 'default' )\n\t\t\t\t.forEach( ( name ) => {\n\t\t\t\t\tconst result = evaluate( className[ name ], {\n\t\t\t\t\t\tclassName: name,\n\t\t\t\t\t\tcontext: contextValue,\n\t\t\t\t\t} );\n\t\t\t\t\tconst currentClass = element.props.class || '';\n\t\t\t\t\tconst classFinder = new RegExp(\n\t\t\t\t\t\t`(^|\\\\s)${ name }(\\\\s|$)`,\n\t\t\t\t\t\t'g'\n\t\t\t\t\t);\n\t\t\t\t\tif ( ! result )\n\t\t\t\t\t\telement.props.class = currentClass\n\t\t\t\t\t\t\t.replace( classFinder, ' ' )\n\t\t\t\t\t\t\t.trim();\n\t\t\t\t\telse if ( ! classFinder.test( currentClass ) )\n\t\t\t\t\t\telement.props.class = currentClass\n\t\t\t\t\t\t\t? `${ currentClass } ${ name }`\n\t\t\t\t\t\t\t: name;\n\n\t\t\t\t\tuseEffect( () => {\n\t\t\t\t\t\t// This seems necessary because Preact doesn't change the class\n\t\t\t\t\t\t// names on the hydration, so we have to do it manually. It doesn't\n\t\t\t\t\t\t// need deps because it only needs to do it the first time.\n\t\t\t\t\t\tif ( ! result ) {\n\t\t\t\t\t\t\telement.ref.current.classList.remove( name );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.ref.current.classList.add( name );\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [] );\n\t\t\t\t} );\n\t\t}\n\t);\n\n\t// data-wp-bind.[attribute]\n\tdirective(\n\t\t'bind',\n\t\t( { directives: { bind }, element, context, evaluate } ) => {\n\t\t\tconst contextValue = useContext( context );\n\t\t\tObject.entries( bind )\n\t\t\t\t.filter( ( n ) => n !== 'default' )\n\t\t\t\t.forEach( ( [ attribute, path ] ) => {\n\t\t\t\t\tconst result = evaluate( path, {\n\t\t\t\t\t\tcontext: contextValue,\n\t\t\t\t\t} );\n\t\t\t\t\telement.props[ attribute ] = result;\n\n\t\t\t\t\tuseEffect( () => {\n\t\t\t\t\t\t// This seems necessary because Preact doesn't change the attributes\n\t\t\t\t\t\t// on the hydration, so we have to do it manually. It doesn't need\n\t\t\t\t\t\t// deps because it only needs to do it the first time.\n\t\t\t\t\t\tif ( result === false ) {\n\t\t\t\t\t\t\telement.ref.current.removeAttribute( attribute );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.ref.current.setAttribute(\n\t\t\t\t\t\t\t\tattribute,\n\t\t\t\t\t\t\t\tresult === true ? '' : result\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [] );\n\t\t\t\t} );\n\t\t}\n\t);\n\n\t// data-wp-ignore\n\tdirective(\n\t\t'ignore',\n\t\t( {\n\t\t\telement: {\n\t\t\t\ttype: Type,\n\t\t\t\tprops: { innerHTML, ...rest },\n\t\t\t},\n\t\t} ) => {\n\t\t\t// Preserve the initial inner HTML.\n\t\t\tconst cached = useMemo( () => innerHTML, [] );\n\t\t\treturn (\n\t\t\t\t<Type\n\t\t\t\t\tdangerouslySetInnerHTML={ { __html: cached } }\n\t\t\t\t\t{ ...rest }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t);\n};\n"]}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { h, options, createContext } from 'preact';
5
+ import { useRef, useMemo } from 'preact/hooks';
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+
10
+ import { rawStore as store } from './store'; // Main context.
11
+
12
+ const context = createContext({}); // WordPress Directives.
13
+
14
+ const directiveMap = {};
15
+ export const directive = (name, cb) => {
16
+ directiveMap[name] = cb;
17
+ }; // Resolve the path to some property of the store object.
18
+
19
+ const resolve = (path, ctx) => {
20
+ // If path starts with !, remove it and save a flag.
21
+ const hasNegationOperator = path[0] === '!' && !!(path = path.slice(1));
22
+ let current = { ...store,
23
+ context: ctx
24
+ };
25
+ path.split('.').forEach(p => current = current[p]);
26
+ return hasNegationOperator ? !current : current;
27
+ }; // Generate the evaluate function.
28
+
29
+
30
+ const getEvaluate = function () {
31
+ let {
32
+ ref
33
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
34
+ return function (path) {
35
+ let extraArgs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
36
+ const value = resolve(path, extraArgs.context);
37
+ return typeof value === 'function' ? value({
38
+ ref: ref.current,
39
+ ...store,
40
+ ...extraArgs
41
+ }) : value;
42
+ };
43
+ }; // Directive wrapper.
44
+
45
+
46
+ const Directive = _ref => {
47
+ let {
48
+ type,
49
+ directives,
50
+ props: originalProps
51
+ } = _ref;
52
+ const ref = useRef(null);
53
+ const element = h(type, { ...originalProps,
54
+ ref
55
+ });
56
+ const props = { ...originalProps,
57
+ children: element
58
+ };
59
+ const evaluate = useMemo(() => getEvaluate({
60
+ ref
61
+ }), []);
62
+ const directiveArgs = {
63
+ directives,
64
+ props,
65
+ element,
66
+ context,
67
+ evaluate
68
+ };
69
+
70
+ for (const d in directives) {
71
+ var _directiveMap$d;
72
+
73
+ const wrapper = (_directiveMap$d = directiveMap[d]) === null || _directiveMap$d === void 0 ? void 0 : _directiveMap$d.call(directiveMap, directiveArgs);
74
+ if (wrapper !== undefined) props.children = wrapper;
75
+ }
76
+
77
+ return props.children;
78
+ }; // Preact Options Hook called each time a vnode is created.
79
+
80
+
81
+ const old = options.vnode;
82
+
83
+ options.vnode = vnode => {
84
+ if (vnode.props.__directives) {
85
+ const props = vnode.props;
86
+ const directives = props.__directives;
87
+ delete props.__directives;
88
+ vnode.props = {
89
+ type: vnode.type,
90
+ directives,
91
+ props
92
+ };
93
+ vnode.type = Directive;
94
+ }
95
+
96
+ if (old) old(vnode);
97
+ };
98
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-library/src/utils/interactivity/hooks.js"],"names":["h","options","createContext","useRef","useMemo","rawStore","store","context","directiveMap","directive","name","cb","resolve","path","ctx","hasNegationOperator","slice","current","split","forEach","p","getEvaluate","ref","extraArgs","value","Directive","type","directives","props","originalProps","element","children","evaluate","directiveArgs","d","wrapper","undefined","old","vnode","__directives"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { h, options, createContext } from 'preact';\nimport { useRef, useMemo } from 'preact/hooks';\n/**\n * Internal dependencies\n */\nimport { rawStore as store } from './store';\n\n// Main context.\nconst context = createContext( {} );\n\n// WordPress Directives.\nconst directiveMap = {};\nexport const directive = ( name, cb ) => {\n\tdirectiveMap[ name ] = cb;\n};\n\n// Resolve the path to some property of the store object.\nconst resolve = ( path, ctx ) => {\n\t// If path starts with !, remove it and save a flag.\n\tconst hasNegationOperator =\n\t\tpath[ 0 ] === '!' && !! ( path = path.slice( 1 ) );\n\tlet current = { ...store, context: ctx };\n\tpath.split( '.' ).forEach( ( p ) => ( current = current[ p ] ) );\n\treturn hasNegationOperator ? ! current : current;\n};\n\n// Generate the evaluate function.\nconst getEvaluate =\n\t( { ref } = {} ) =>\n\t( path, extraArgs = {} ) => {\n\t\tconst value = resolve( path, extraArgs.context );\n\t\treturn typeof value === 'function'\n\t\t\t? value( {\n\t\t\t\t\tref: ref.current,\n\t\t\t\t\t...store,\n\t\t\t\t\t...extraArgs,\n\t\t\t } )\n\t\t\t: value;\n\t};\n\n// Directive wrapper.\nconst Directive = ( { type, directives, props: originalProps } ) => {\n\tconst ref = useRef( null );\n\tconst element = h( type, { ...originalProps, ref } );\n\tconst props = { ...originalProps, children: element };\n\tconst evaluate = useMemo( () => getEvaluate( { ref } ), [] );\n\tconst directiveArgs = { directives, props, element, context, evaluate };\n\n\tfor ( const d in directives ) {\n\t\tconst wrapper = directiveMap[ d ]?.( directiveArgs );\n\t\tif ( wrapper !== undefined ) props.children = wrapper;\n\t}\n\n\treturn props.children;\n};\n\n// Preact Options Hook called each time a vnode is created.\nconst old = options.vnode;\noptions.vnode = ( vnode ) => {\n\tif ( vnode.props.__directives ) {\n\t\tconst props = vnode.props;\n\t\tconst directives = props.__directives;\n\t\tdelete props.__directives;\n\t\tvnode.props = {\n\t\t\ttype: vnode.type,\n\t\t\tdirectives,\n\t\t\tprops,\n\t\t};\n\t\tvnode.type = Directive;\n\t}\n\n\tif ( old ) old( vnode );\n};\n"]}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { hydrate } from 'preact';
5
+ /**
6
+ * Internal dependencies
7
+ */
8
+
9
+ import { toVdom, hydratedIslands } from './vdom';
10
+ import { createRootFragment } from './utils';
11
+ import { directivePrefix } from './constants';
12
+ export const init = async () => {
13
+ document.querySelectorAll(`[${directivePrefix}island]`).forEach(node => {
14
+ if (!hydratedIslands.has(node)) {
15
+ const fragment = createRootFragment(node.parentNode, node);
16
+ const vdom = toVdom(node);
17
+ hydrate(vdom, fragment);
18
+ }
19
+ });
20
+ };
21
+ //# sourceMappingURL=hydration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-library/src/utils/interactivity/hydration.js"],"names":["hydrate","toVdom","hydratedIslands","createRootFragment","directivePrefix","init","document","querySelectorAll","forEach","node","has","fragment","parentNode","vdom"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAT,QAAwB,QAAxB;AACA;AACA;AACA;;AACA,SAASC,MAAT,EAAiBC,eAAjB,QAAwC,QAAxC;AACA,SAASC,kBAAT,QAAmC,SAAnC;AACA,SAASC,eAAT,QAAgC,aAAhC;AAEA,OAAO,MAAMC,IAAI,GAAG,YAAY;AAC/BC,EAAAA,QAAQ,CACNC,gBADF,CACqB,IAAIH,eAAiB,SAD1C,EAEEI,OAFF,CAEaC,IAAF,IAAY;AACrB,QAAK,CAAEP,eAAe,CAACQ,GAAhB,CAAqBD,IAArB,CAAP,EAAqC;AACpC,YAAME,QAAQ,GAAGR,kBAAkB,CAAEM,IAAI,CAACG,UAAP,EAAmBH,IAAnB,CAAnC;AACA,YAAMI,IAAI,GAAGZ,MAAM,CAAEQ,IAAF,CAAnB;AACAT,MAAAA,OAAO,CAAEa,IAAF,EAAQF,QAAR,CAAP;AACA;AACD,GARF;AASA,CAVM","sourcesContent":["/**\n * External dependencies\n */\nimport { hydrate } from 'preact';\n/**\n * Internal dependencies\n */\nimport { toVdom, hydratedIslands } from './vdom';\nimport { createRootFragment } from './utils';\nimport { directivePrefix } from './constants';\n\nexport const init = async () => {\n\tdocument\n\t\t.querySelectorAll( `[${ directivePrefix }island]` )\n\t\t.forEach( ( node ) => {\n\t\t\tif ( ! hydratedIslands.has( node ) ) {\n\t\t\t\tconst fragment = createRootFragment( node.parentNode, node );\n\t\t\t\tconst vdom = toVdom( node );\n\t\t\t\thydrate( vdom, fragment );\n\t\t\t}\n\t\t} );\n};\n"]}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import registerDirectives from './directives';
5
+ import { init } from './hydration';
6
+ export { store } from './store';
7
+ /**
8
+ * Initialize the Interactivity API.
9
+ */
10
+
11
+ registerDirectives();
12
+ document.addEventListener('DOMContentLoaded', async () => {
13
+ await init(); // eslint-disable-next-line no-console
14
+
15
+ console.log('Interactivity API started');
16
+ });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-library/src/utils/interactivity/index.js"],"names":["registerDirectives","init","store","document","addEventListener","console","log"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,kBAAP,MAA+B,cAA/B;AACA,SAASC,IAAT,QAAqB,aAArB;AACA,SAASC,KAAT,QAAsB,SAAtB;AAEA;AACA;AACA;;AACAF,kBAAkB;AAElBG,QAAQ,CAACC,gBAAT,CAA2B,kBAA3B,EAA+C,YAAY;AAC1D,QAAMH,IAAI,EAAV,CAD0D,CAE1D;;AACAI,EAAAA,OAAO,CAACC,GAAR,CAAa,2BAAb;AACA,CAJD","sourcesContent":["/**\n * Internal dependencies\n */\nimport registerDirectives from './directives';\nimport { init } from './hydration';\nexport { store } from './store';\n\n/**\n * Initialize the Interactivity API.\n */\nregisterDirectives();\n\ndocument.addEventListener( 'DOMContentLoaded', async () => {\n\tawait init();\n\t// eslint-disable-next-line no-console\n\tconsole.log( 'Interactivity API started' );\n} );\n"]}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { deepSignal } from 'deepsignal';
5
+
6
+ const isObject = item => item && typeof item === 'object' && !Array.isArray(item);
7
+
8
+ const deepMerge = (target, source) => {
9
+ if (isObject(target) && isObject(source)) {
10
+ for (const key in source) {
11
+ if (isObject(source[key])) {
12
+ if (!target[key]) Object.assign(target, {
13
+ [key]: {}
14
+ });
15
+ deepMerge(target[key], source[key]);
16
+ } else {
17
+ Object.assign(target, {
18
+ [key]: source[key]
19
+ });
20
+ }
21
+ }
22
+ }
23
+ };
24
+
25
+ const getSerializedState = () => {
26
+ // TODO: change the store tag ID for a better one.
27
+ const storeTag = document.querySelector(`script[type="application/json"]#store`);
28
+ if (!storeTag) return {};
29
+
30
+ try {
31
+ const {
32
+ state
33
+ } = JSON.parse(storeTag.textContent);
34
+ if (isObject(state)) return state;
35
+ throw Error('Parsed state is not an object');
36
+ } catch (e) {
37
+ // eslint-disable-next-line no-console
38
+ console.log(e);
39
+ }
40
+
41
+ return {};
42
+ };
43
+
44
+ const rawState = getSerializedState();
45
+ export const rawStore = {
46
+ state: deepSignal(rawState)
47
+ };
48
+ export const store = _ref => {
49
+ let {
50
+ state,
51
+ ...block
52
+ } = _ref;
53
+ deepMerge(rawStore, block);
54
+ deepMerge(rawState, state);
55
+ };
56
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-library/src/utils/interactivity/store.js"],"names":["deepSignal","isObject","item","Array","isArray","deepMerge","target","source","key","Object","assign","getSerializedState","storeTag","document","querySelector","state","JSON","parse","textContent","Error","e","console","log","rawState","rawStore","store","block"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,UAAT,QAA2B,YAA3B;;AAEA,MAAMC,QAAQ,GAAKC,IAAF,IAChBA,IAAI,IAAI,OAAOA,IAAP,KAAgB,QAAxB,IAAoC,CAAEC,KAAK,CAACC,OAAN,CAAeF,IAAf,CADvC;;AAGA,MAAMG,SAAS,GAAG,CAAEC,MAAF,EAAUC,MAAV,KAAsB;AACvC,MAAKN,QAAQ,CAAEK,MAAF,CAAR,IAAsBL,QAAQ,CAAEM,MAAF,CAAnC,EAAgD;AAC/C,SAAM,MAAMC,GAAZ,IAAmBD,MAAnB,EAA4B;AAC3B,UAAKN,QAAQ,CAAEM,MAAM,CAAEC,GAAF,CAAR,CAAb,EAAiC;AAChC,YAAK,CAAEF,MAAM,CAAEE,GAAF,CAAb,EAAuBC,MAAM,CAACC,MAAP,CAAeJ,MAAf,EAAuB;AAAE,WAAEE,GAAF,GAAS;AAAX,SAAvB;AACvBH,QAAAA,SAAS,CAAEC,MAAM,CAAEE,GAAF,CAAR,EAAiBD,MAAM,CAAEC,GAAF,CAAvB,CAAT;AACA,OAHD,MAGO;AACNC,QAAAA,MAAM,CAACC,MAAP,CAAeJ,MAAf,EAAuB;AAAE,WAAEE,GAAF,GAASD,MAAM,CAAEC,GAAF;AAAjB,SAAvB;AACA;AACD;AACD;AACD,CAXD;;AAaA,MAAMG,kBAAkB,GAAG,MAAM;AAChC;AACA,QAAMC,QAAQ,GAAGC,QAAQ,CAACC,aAAT,CACf,uCADe,CAAjB;AAGA,MAAK,CAAEF,QAAP,EAAkB,OAAO,EAAP;;AAClB,MAAI;AACH,UAAM;AAAEG,MAAAA;AAAF,QAAYC,IAAI,CAACC,KAAL,CAAYL,QAAQ,CAACM,WAArB,CAAlB;AACA,QAAKjB,QAAQ,CAAEc,KAAF,CAAb,EAAyB,OAAOA,KAAP;AACzB,UAAMI,KAAK,CAAE,+BAAF,CAAX;AACA,GAJD,CAIE,OAAQC,CAAR,EAAY;AACb;AACAC,IAAAA,OAAO,CAACC,GAAR,CAAaF,CAAb;AACA;;AACD,SAAO,EAAP;AACA,CAfD;;AAiBA,MAAMG,QAAQ,GAAGZ,kBAAkB,EAAnC;AACA,OAAO,MAAMa,QAAQ,GAAG;AAAET,EAAAA,KAAK,EAAEf,UAAU,CAAEuB,QAAF;AAAnB,CAAjB;AAEP,OAAO,MAAME,KAAK,GAAG,QAA2B;AAAA,MAAzB;AAAEV,IAAAA,KAAF;AAAS,OAAGW;AAAZ,GAAyB;AAC/CrB,EAAAA,SAAS,CAAEmB,QAAF,EAAYE,KAAZ,CAAT;AACArB,EAAAA,SAAS,CAAEkB,QAAF,EAAYR,KAAZ,CAAT;AACA,CAHM","sourcesContent":["/**\n * External dependencies\n */\nimport { deepSignal } from 'deepsignal';\n\nconst isObject = ( item ) =>\n\titem && typeof item === 'object' && ! Array.isArray( item );\n\nconst deepMerge = ( target, source ) => {\n\tif ( isObject( target ) && isObject( source ) ) {\n\t\tfor ( const key in source ) {\n\t\t\tif ( isObject( source[ key ] ) ) {\n\t\t\t\tif ( ! target[ key ] ) Object.assign( target, { [ key ]: {} } );\n\t\t\t\tdeepMerge( target[ key ], source[ key ] );\n\t\t\t} else {\n\t\t\t\tObject.assign( target, { [ key ]: source[ key ] } );\n\t\t\t}\n\t\t}\n\t}\n};\n\nconst getSerializedState = () => {\n\t// TODO: change the store tag ID for a better one.\n\tconst storeTag = document.querySelector(\n\t\t`script[type=\"application/json\"]#store`\n\t);\n\tif ( ! storeTag ) return {};\n\ttry {\n\t\tconst { state } = JSON.parse( storeTag.textContent );\n\t\tif ( isObject( state ) ) return state;\n\t\tthrow Error( 'Parsed state is not an object' );\n\t} catch ( e ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log( e );\n\t}\n\treturn {};\n};\n\nconst rawState = getSerializedState();\nexport const rawStore = { state: deepSignal( rawState ) };\n\nexport const store = ( { state, ...block } ) => {\n\tdeepMerge( rawStore, block );\n\tdeepMerge( rawState, state );\n};\n"]}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { useRef, useEffect } from 'preact/hooks';
5
+ import { effect } from '@preact/signals';
6
+
7
+ function afterNextFrame(callback) {
8
+ const done = () => {
9
+ window.cancelAnimationFrame(raf);
10
+ setTimeout(callback);
11
+ };
12
+
13
+ const raf = window.requestAnimationFrame(done);
14
+ } // Using the mangled properties:
15
+ // this.c: this._callback
16
+ // this.x: this._compute
17
+ // https://github.com/preactjs/signals/blob/main/mangle.json
18
+
19
+
20
+ function createFlusher(compute, notify) {
21
+ let flush;
22
+ const dispose = effect(function () {
23
+ flush = this.c.bind(this);
24
+ this.x = compute;
25
+ this.c = notify;
26
+ return compute();
27
+ });
28
+ return {
29
+ flush,
30
+ dispose
31
+ };
32
+ } // Version of `useSignalEffect` with a `useEffect`-like execution. This hook
33
+ // implementation comes from this PR:
34
+ // https://github.com/preactjs/signals/pull/290.
35
+ //
36
+ // We need to include it here in this repo until the mentioned PR is merged.
37
+
38
+
39
+ export function useSignalEffect(cb) {
40
+ const callback = useRef(cb);
41
+ callback.current = cb;
42
+ useEffect(() => {
43
+ const execute = () => callback.current();
44
+
45
+ const notify = () => afterNextFrame(eff.flush);
46
+
47
+ const eff = createFlusher(execute, notify);
48
+ return eff.dispose;
49
+ }, []);
50
+ } // For wrapperless hydration.
51
+ // See https://gist.github.com/developit/f4c67a2ede71dc2fab7f357f39cff28c
52
+
53
+ export const createRootFragment = (parent, replaceNode) => {
54
+ replaceNode = [].concat(replaceNode);
55
+ const s = replaceNode[replaceNode.length - 1].nextSibling;
56
+
57
+ function insert(c, r) {
58
+ parent.insertBefore(c, r || s);
59
+ }
60
+
61
+ return parent.__k = {
62
+ nodeType: 1,
63
+ parentNode: parent,
64
+ firstChild: replaceNode[0],
65
+ childNodes: replaceNode,
66
+ insertBefore: insert,
67
+ appendChild: insert,
68
+
69
+ removeChild(c) {
70
+ parent.removeChild(c);
71
+ }
72
+
73
+ };
74
+ };
75
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-library/src/utils/interactivity/utils.js"],"names":["useRef","useEffect","effect","afterNextFrame","callback","done","window","cancelAnimationFrame","raf","setTimeout","requestAnimationFrame","createFlusher","compute","notify","flush","dispose","c","bind","x","useSignalEffect","cb","current","execute","eff","createRootFragment","parent","replaceNode","concat","s","length","nextSibling","insert","r","insertBefore","__k","nodeType","parentNode","firstChild","childNodes","appendChild","removeChild"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,MAAT,EAAiBC,SAAjB,QAAkC,cAAlC;AACA,SAASC,MAAT,QAAuB,iBAAvB;;AAEA,SAASC,cAAT,CAAyBC,QAAzB,EAAoC;AACnC,QAAMC,IAAI,GAAG,MAAM;AAClBC,IAAAA,MAAM,CAACC,oBAAP,CAA6BC,GAA7B;AACAC,IAAAA,UAAU,CAAEL,QAAF,CAAV;AACA,GAHD;;AAIA,QAAMI,GAAG,GAAGF,MAAM,CAACI,qBAAP,CAA8BL,IAA9B,CAAZ;AACA,C,CAED;AACA;AACA;AACA;;;AACA,SAASM,aAAT,CAAwBC,OAAxB,EAAiCC,MAAjC,EAA0C;AACzC,MAAIC,KAAJ;AACA,QAAMC,OAAO,GAAGb,MAAM,CAAE,YAAY;AACnCY,IAAAA,KAAK,GAAG,KAAKE,CAAL,CAAOC,IAAP,CAAa,IAAb,CAAR;AACA,SAAKC,CAAL,GAASN,OAAT;AACA,SAAKI,CAAL,GAASH,MAAT;AACA,WAAOD,OAAO,EAAd;AACA,GALqB,CAAtB;AAMA,SAAO;AAAEE,IAAAA,KAAF;AAASC,IAAAA;AAAT,GAAP;AACA,C,CAED;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASI,eAAT,CAA0BC,EAA1B,EAA+B;AACrC,QAAMhB,QAAQ,GAAGJ,MAAM,CAAEoB,EAAF,CAAvB;AACAhB,EAAAA,QAAQ,CAACiB,OAAT,GAAmBD,EAAnB;AAEAnB,EAAAA,SAAS,CAAE,MAAM;AAChB,UAAMqB,OAAO,GAAG,MAAMlB,QAAQ,CAACiB,OAAT,EAAtB;;AACA,UAAMR,MAAM,GAAG,MAAMV,cAAc,CAAEoB,GAAG,CAACT,KAAN,CAAnC;;AACA,UAAMS,GAAG,GAAGZ,aAAa,CAAEW,OAAF,EAAWT,MAAX,CAAzB;AACA,WAAOU,GAAG,CAACR,OAAX;AACA,GALQ,EAKN,EALM,CAAT;AAMA,C,CAED;AACA;;AACA,OAAO,MAAMS,kBAAkB,GAAG,CAAEC,MAAF,EAAUC,WAAV,KAA2B;AAC5DA,EAAAA,WAAW,GAAG,GAAGC,MAAH,CAAWD,WAAX,CAAd;AACA,QAAME,CAAC,GAAGF,WAAW,CAAEA,WAAW,CAACG,MAAZ,GAAqB,CAAvB,CAAX,CAAsCC,WAAhD;;AACA,WAASC,MAAT,CAAiBf,CAAjB,EAAoBgB,CAApB,EAAwB;AACvBP,IAAAA,MAAM,CAACQ,YAAP,CAAqBjB,CAArB,EAAwBgB,CAAC,IAAIJ,CAA7B;AACA;;AACD,SAASH,MAAM,CAACS,GAAP,GAAa;AACrBC,IAAAA,QAAQ,EAAE,CADW;AAErBC,IAAAA,UAAU,EAAEX,MAFS;AAGrBY,IAAAA,UAAU,EAAEX,WAAW,CAAE,CAAF,CAHF;AAIrBY,IAAAA,UAAU,EAAEZ,WAJS;AAKrBO,IAAAA,YAAY,EAAEF,MALO;AAMrBQ,IAAAA,WAAW,EAAER,MANQ;;AAOrBS,IAAAA,WAAW,CAAExB,CAAF,EAAM;AAChBS,MAAAA,MAAM,CAACe,WAAP,CAAoBxB,CAApB;AACA;;AAToB,GAAtB;AAWA,CAjBM","sourcesContent":["/**\n * External dependencies\n */\nimport { useRef, useEffect } from 'preact/hooks';\nimport { effect } from '@preact/signals';\n\nfunction afterNextFrame( callback ) {\n\tconst done = () => {\n\t\twindow.cancelAnimationFrame( raf );\n\t\tsetTimeout( callback );\n\t};\n\tconst raf = window.requestAnimationFrame( done );\n}\n\n// Using the mangled properties:\n// this.c: this._callback\n// this.x: this._compute\n// https://github.com/preactjs/signals/blob/main/mangle.json\nfunction createFlusher( compute, notify ) {\n\tlet flush;\n\tconst dispose = effect( function () {\n\t\tflush = this.c.bind( this );\n\t\tthis.x = compute;\n\t\tthis.c = notify;\n\t\treturn compute();\n\t} );\n\treturn { flush, dispose };\n}\n\n// Version of `useSignalEffect` with a `useEffect`-like execution. This hook\n// implementation comes from this PR:\n// https://github.com/preactjs/signals/pull/290.\n//\n// We need to include it here in this repo until the mentioned PR is merged.\nexport function useSignalEffect( cb ) {\n\tconst callback = useRef( cb );\n\tcallback.current = cb;\n\n\tuseEffect( () => {\n\t\tconst execute = () => callback.current();\n\t\tconst notify = () => afterNextFrame( eff.flush );\n\t\tconst eff = createFlusher( execute, notify );\n\t\treturn eff.dispose;\n\t}, [] );\n}\n\n// For wrapperless hydration.\n// See https://gist.github.com/developit/f4c67a2ede71dc2fab7f357f39cff28c\nexport const createRootFragment = ( parent, replaceNode ) => {\n\treplaceNode = [].concat( replaceNode );\n\tconst s = replaceNode[ replaceNode.length - 1 ].nextSibling;\n\tfunction insert( c, r ) {\n\t\tparent.insertBefore( c, r || s );\n\t}\n\treturn ( parent.__k = {\n\t\tnodeType: 1,\n\t\tparentNode: parent,\n\t\tfirstChild: replaceNode[ 0 ],\n\t\tchildNodes: replaceNode,\n\t\tinsertBefore: insert,\n\t\tappendChild: insert,\n\t\tremoveChild( c ) {\n\t\t\tparent.removeChild( c );\n\t\t},\n\t} );\n};\n"]}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { h } from 'preact';
5
+ /**
6
+ * Internal dependencies
7
+ */
8
+
9
+ import { directivePrefix as p } from './constants';
10
+ const ignoreAttr = `${p}ignore`;
11
+ const islandAttr = `${p}island`;
12
+ const directiveParser = new RegExp(`${p}([^.]+)\.?(.*)$`);
13
+ export const hydratedIslands = new WeakSet(); // Recursive function that transforms a DOM tree into vDOM.
14
+
15
+ export function toVdom(root) {
16
+ const treeWalker = document.createTreeWalker(root, 205 // ELEMENT + TEXT + COMMENT + CDATA_SECTION + PROCESSING_INSTRUCTION
17
+ );
18
+
19
+ function walk(node) {
20
+ const {
21
+ attributes,
22
+ nodeType
23
+ } = node;
24
+ if (nodeType === 3) return [node.data];
25
+
26
+ if (nodeType === 4) {
27
+ const next = treeWalker.nextSibling();
28
+ node.replaceWith(new window.Text(node.nodeValue));
29
+ return [node.nodeValue, next];
30
+ }
31
+
32
+ if (nodeType === 8 || nodeType === 7) {
33
+ const next = treeWalker.nextSibling();
34
+ node.remove();
35
+ return [null, next];
36
+ }
37
+
38
+ const props = {};
39
+ const children = [];
40
+ const directives = {};
41
+ let hasDirectives = false;
42
+ let ignore = false;
43
+ let island = false;
44
+
45
+ for (let i = 0; i < attributes.length; i++) {
46
+ const n = attributes[i].name;
47
+
48
+ if (n[p.length] && n.slice(0, p.length) === p) {
49
+ if (n === ignoreAttr) {
50
+ ignore = true;
51
+ } else if (n === islandAttr) {
52
+ island = true;
53
+ } else {
54
+ hasDirectives = true;
55
+ let val = attributes[i].value;
56
+
57
+ try {
58
+ val = JSON.parse(val);
59
+ } catch (e) {}
60
+
61
+ const [, prefix, suffix] = directiveParser.exec(n);
62
+ directives[prefix] = directives[prefix] || {};
63
+ directives[prefix][suffix || 'default'] = val;
64
+ }
65
+ } else if (n === 'ref') {
66
+ continue;
67
+ }
68
+
69
+ props[n] = attributes[i].value;
70
+ }
71
+
72
+ if (ignore && !island) return [h(node.localName, { ...props,
73
+ innerHTML: node.innerHTML,
74
+ __directives: {
75
+ ignore: true
76
+ }
77
+ })];
78
+ if (island) hydratedIslands.add(node);
79
+ if (hasDirectives) props.__directives = directives;
80
+ let child = treeWalker.firstChild();
81
+
82
+ if (child) {
83
+ while (child) {
84
+ const [vnode, nextChild] = walk(child);
85
+ if (vnode) children.push(vnode);
86
+ child = nextChild || treeWalker.nextSibling();
87
+ }
88
+
89
+ treeWalker.parentNode();
90
+ }
91
+
92
+ return [h(node.localName, props, children)];
93
+ }
94
+
95
+ return walk(treeWalker.currentNode);
96
+ }
97
+ //# sourceMappingURL=vdom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-library/src/utils/interactivity/vdom.js"],"names":["h","directivePrefix","p","ignoreAttr","islandAttr","directiveParser","RegExp","hydratedIslands","WeakSet","toVdom","root","treeWalker","document","createTreeWalker","walk","node","attributes","nodeType","data","next","nextSibling","replaceWith","window","Text","nodeValue","remove","props","children","directives","hasDirectives","ignore","island","i","length","n","name","slice","val","value","JSON","parse","e","prefix","suffix","exec","localName","innerHTML","__directives","add","child","firstChild","vnode","nextChild","push","parentNode","currentNode"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { h } from 'preact';\n/**\n * Internal dependencies\n */\nimport { directivePrefix as p } from './constants';\n\nconst ignoreAttr = `${ p }ignore`;\nconst islandAttr = `${ p }island`;\nconst directiveParser = new RegExp( `${ p }([^.]+)\\.?(.*)$` );\n\nexport const hydratedIslands = new WeakSet();\n\n// Recursive function that transforms a DOM tree into vDOM.\nexport function toVdom( root ) {\n\tconst treeWalker = document.createTreeWalker(\n\t\troot,\n\t\t205 // ELEMENT + TEXT + COMMENT + CDATA_SECTION + PROCESSING_INSTRUCTION\n\t);\n\n\tfunction walk( node ) {\n\t\tconst { attributes, nodeType } = node;\n\n\t\tif ( nodeType === 3 ) return [ node.data ];\n\t\tif ( nodeType === 4 ) {\n\t\t\tconst next = treeWalker.nextSibling();\n\t\t\tnode.replaceWith( new window.Text( node.nodeValue ) );\n\t\t\treturn [ node.nodeValue, next ];\n\t\t}\n\t\tif ( nodeType === 8 || nodeType === 7 ) {\n\t\t\tconst next = treeWalker.nextSibling();\n\t\t\tnode.remove();\n\t\t\treturn [ null, next ];\n\t\t}\n\n\t\tconst props = {};\n\t\tconst children = [];\n\t\tconst directives = {};\n\t\tlet hasDirectives = false;\n\t\tlet ignore = false;\n\t\tlet island = false;\n\n\t\tfor ( let i = 0; i < attributes.length; i++ ) {\n\t\t\tconst n = attributes[ i ].name;\n\t\t\tif ( n[ p.length ] && n.slice( 0, p.length ) === p ) {\n\t\t\t\tif ( n === ignoreAttr ) {\n\t\t\t\t\tignore = true;\n\t\t\t\t} else if ( n === islandAttr ) {\n\t\t\t\t\tisland = true;\n\t\t\t\t} else {\n\t\t\t\t\thasDirectives = true;\n\t\t\t\t\tlet val = attributes[ i ].value;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tval = JSON.parse( val );\n\t\t\t\t\t} catch ( e ) {}\n\t\t\t\t\tconst [ , prefix, suffix ] = directiveParser.exec( n );\n\t\t\t\t\tdirectives[ prefix ] = directives[ prefix ] || {};\n\t\t\t\t\tdirectives[ prefix ][ suffix || 'default' ] = val;\n\t\t\t\t}\n\t\t\t} else if ( n === 'ref' ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tprops[ n ] = attributes[ i ].value;\n\t\t}\n\n\t\tif ( ignore && ! island )\n\t\t\treturn [\n\t\t\t\th( node.localName, {\n\t\t\t\t\t...props,\n\t\t\t\t\tinnerHTML: node.innerHTML,\n\t\t\t\t\t__directives: { ignore: true },\n\t\t\t\t} ),\n\t\t\t];\n\t\tif ( island ) hydratedIslands.add( node );\n\n\t\tif ( hasDirectives ) props.__directives = directives;\n\n\t\tlet child = treeWalker.firstChild();\n\t\tif ( child ) {\n\t\t\twhile ( child ) {\n\t\t\t\tconst [ vnode, nextChild ] = walk( child );\n\t\t\t\tif ( vnode ) children.push( vnode );\n\t\t\t\tchild = nextChild || treeWalker.nextSibling();\n\t\t\t}\n\t\t\ttreeWalker.parentNode();\n\t\t}\n\n\t\treturn [ h( node.localName, props, children ) ];\n\t}\n\n\treturn walk( treeWalker.currentNode );\n}\n"]}
@@ -95,6 +95,8 @@
95
95
  justify-content: center;
96
96
  align-items: center;
97
97
  padding: 1em;
98
+ overflow: hidden;
99
+ overflow: clip;
98
100
  box-sizing: border-box; direction: ltr;
99
101
  /**
100
102
  * Set a default background color for has-background-dim _unless_ it includes another
@@ -95,6 +95,8 @@
95
95
  justify-content: center;
96
96
  align-items: center;
97
97
  padding: 1em;
98
+ overflow: hidden;
99
+ overflow: clip;
98
100
  box-sizing: border-box;
99
101
  /*rtl:raw: direction: ltr; */
100
102
  /**