@webstudio-is/react-sdk 0.51.0 → 0.52.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 (346) hide show
  1. package/lib/cjs/components/{blockquote.cjs → blockquote.js} +2 -1
  2. package/lib/cjs/components/{blockquote.ws.cjs → blockquote.ws.js} +57 -35
  3. package/lib/cjs/components/{body.cjs → body.js} +2 -1
  4. package/lib/cjs/components/{body.ws.cjs → body.ws.js} +30 -46
  5. package/lib/cjs/components/{bold.cjs → bold.js} +2 -1
  6. package/lib/cjs/components/{bold.ws.cjs → bold.ws.js} +6 -1
  7. package/lib/cjs/components/{box.ws.cjs → box.ws.js} +11 -4
  8. package/lib/cjs/components/{button.cjs → button.js} +2 -1
  9. package/lib/cjs/components/{button.ws.cjs → button.ws.js} +6 -1
  10. package/lib/cjs/components/{code.cjs → code.js} +1 -0
  11. package/lib/cjs/components/{code.ws.cjs → code.ws.js} +31 -25
  12. package/lib/cjs/components/{form.cjs → form.js} +2 -1
  13. package/lib/cjs/components/{form.ws.cjs → form.ws.js} +8 -8
  14. package/lib/cjs/components/{heading.ws.cjs → heading.ws.js} +11 -1
  15. package/lib/cjs/components/{image.cjs → image.js} +2 -1
  16. package/lib/cjs/components/{image.ws.cjs → image.ws.js} +15 -11
  17. package/lib/cjs/components/{input.cjs → input.js} +2 -1
  18. package/lib/cjs/components/{input.ws.cjs → input.ws.js} +6 -1
  19. package/lib/cjs/components/{italic.cjs → italic.js} +2 -1
  20. package/lib/cjs/components/{italic.ws.cjs → italic.ws.js} +8 -4
  21. package/lib/cjs/components/{link-block.cjs → link-block.js} +3 -1
  22. package/lib/cjs/components/{link-block.ws.cjs → link-block.ws.js} +7 -7
  23. package/lib/cjs/components/{link.cjs → link.js} +3 -1
  24. package/lib/cjs/components/{link.ws.cjs → link.ws.js} +13 -9
  25. package/lib/cjs/components/{list-item.cjs → list-item.js} +2 -1
  26. package/lib/cjs/components/{list-item.ws.cjs → list-item.ws.js} +6 -1
  27. package/lib/cjs/components/{list.ws.cjs → list.ws.js} +29 -10
  28. package/lib/cjs/components/{paragraph.cjs → paragraph.js} +2 -1
  29. package/lib/cjs/components/{paragraph.ws.cjs → paragraph.ws.js} +6 -1
  30. package/lib/cjs/components/{separator.cjs → separator.js} +2 -1
  31. package/lib/cjs/components/{separator.ws.cjs → separator.ws.js} +27 -11
  32. package/lib/cjs/components/{span.cjs → span.js} +2 -1
  33. package/lib/cjs/components/{span.ws.cjs → span.ws.js} +6 -1
  34. package/lib/cjs/components/{subscript.cjs → subscript.js} +2 -1
  35. package/lib/cjs/components/{subscript.ws.cjs → subscript.ws.js} +6 -1
  36. package/lib/cjs/components/{superscript.cjs → superscript.js} +2 -1
  37. package/lib/cjs/components/{superscript.ws.cjs → superscript.ws.js} +6 -1
  38. package/lib/cjs/components/{text-block.cjs → text-block.js} +2 -1
  39. package/lib/cjs/components/{text-block.ws.cjs → text-block.ws.js} +9 -5
  40. package/lib/cjs/css/css.js +64 -0
  41. package/lib/cjs/css/global-rules.js +37 -0
  42. package/lib/cjs/css/{index.cjs → index.js} +3 -1
  43. package/lib/cjs/css/normalize-type-check.js +26 -0
  44. package/lib/cjs/css/normalize.js +358 -0
  45. package/lib/cjs/css/presets.js +61 -0
  46. package/lib/cjs/css/style-rules.js +62 -0
  47. package/lib/cjs/package.json +1 -0
  48. package/lib/cjs/pubsub/{create.cjs → create.js} +6 -35
  49. package/lib/cjs/pubsub/raf-queue.js +45 -0
  50. package/lib/cjs/tree/{webstudio-component.cjs → webstudio-component.js} +1 -0
  51. package/lib/components/blockquote.js +2 -1
  52. package/lib/components/blockquote.ws.js +57 -35
  53. package/lib/components/body.js +2 -1
  54. package/lib/components/body.ws.js +30 -46
  55. package/lib/components/bold.js +2 -1
  56. package/lib/components/bold.ws.js +7 -2
  57. package/lib/components/box.ws.js +22 -4
  58. package/lib/components/button.js +2 -1
  59. package/lib/components/button.ws.js +7 -2
  60. package/lib/components/code.js +1 -0
  61. package/lib/components/code.ws.js +31 -25
  62. package/lib/components/form.js +2 -1
  63. package/lib/components/form.ws.js +8 -8
  64. package/lib/components/heading.ws.js +11 -1
  65. package/lib/components/image.js +2 -1
  66. package/lib/components/image.ws.js +15 -11
  67. package/lib/components/input.js +2 -1
  68. package/lib/components/input.ws.js +7 -2
  69. package/lib/components/italic.js +2 -1
  70. package/lib/components/italic.ws.js +9 -5
  71. package/lib/components/link-block.js +3 -1
  72. package/lib/components/link-block.ws.js +7 -7
  73. package/lib/components/link.js +3 -1
  74. package/lib/components/link.ws.js +14 -10
  75. package/lib/components/list-item.js +2 -1
  76. package/lib/components/list-item.ws.js +6 -1
  77. package/lib/components/list.ws.js +29 -10
  78. package/lib/components/paragraph.js +2 -1
  79. package/lib/components/paragraph.ws.js +6 -1
  80. package/lib/components/separator.js +2 -1
  81. package/lib/components/separator.ws.js +27 -11
  82. package/lib/components/span.js +2 -1
  83. package/lib/components/span.ws.js +7 -2
  84. package/lib/components/subscript.js +2 -1
  85. package/lib/components/subscript.ws.js +6 -1
  86. package/lib/components/superscript.js +2 -1
  87. package/lib/components/superscript.ws.js +6 -1
  88. package/lib/components/text-block.js +2 -1
  89. package/lib/components/text-block.ws.js +10 -6
  90. package/lib/css/css.js +44 -0
  91. package/lib/css/get-browser-style.js +3 -1
  92. package/lib/css/global-rules.js +20 -0
  93. package/lib/css/index.js +3 -1
  94. package/lib/css/normalize-type-check.js +3 -0
  95. package/lib/css/normalize.js +338 -0
  96. package/lib/css/presets.js +41 -0
  97. package/lib/css/style-rules.js +42 -0
  98. package/lib/pubsub/create.js +6 -25
  99. package/lib/pubsub/raf-queue.js +25 -0
  100. package/lib/tree/webstudio-component.js +1 -0
  101. package/lib/types/app/custom-components/image.d.ts +6 -0
  102. package/lib/types/app/custom-components/index.d.ts +26 -0
  103. package/lib/types/app/custom-components/link-block.d.ts +6 -0
  104. package/lib/types/app/custom-components/link.d.ts +6 -0
  105. package/lib/types/app/custom-components/rich-text-link.d.ts +6 -0
  106. package/lib/types/app/custom-components/shared/remix-link.d.ts +10 -0
  107. package/lib/types/app/handle-request.server.d.ts +2 -0
  108. package/lib/types/app/index.d.ts +3 -0
  109. package/lib/types/app/params.d.ts +5 -0
  110. package/lib/types/app/root.d.ts +8 -0
  111. package/lib/types/components/__generated__/blockquote.props.d.ts +2 -0
  112. package/lib/types/components/__generated__/body.props.d.ts +2 -0
  113. package/lib/types/components/__generated__/bold.props.d.ts +2 -0
  114. package/lib/types/components/__generated__/box.props.d.ts +2 -0
  115. package/lib/types/components/__generated__/button.props.d.ts +2 -0
  116. package/lib/types/components/__generated__/code.props.d.ts +2 -0
  117. package/lib/types/components/__generated__/form.props.d.ts +2 -0
  118. package/lib/types/components/__generated__/fragment.props.d.ts +2 -0
  119. package/lib/types/components/__generated__/heading.props.d.ts +2 -0
  120. package/lib/types/components/__generated__/image.props.d.ts +2 -0
  121. package/lib/types/components/__generated__/input.props.d.ts +2 -0
  122. package/lib/types/components/__generated__/italic.props.d.ts +2 -0
  123. package/lib/types/components/__generated__/link-block.props.d.ts +2 -0
  124. package/lib/types/components/__generated__/link.props.d.ts +2 -0
  125. package/lib/types/components/__generated__/list-item.props.d.ts +2 -0
  126. package/lib/types/components/__generated__/list.props.d.ts +2 -0
  127. package/lib/types/components/__generated__/paragraph.props.d.ts +2 -0
  128. package/lib/types/components/__generated__/rich-text-link.props.d.ts +2 -0
  129. package/lib/types/components/__generated__/separator.props.d.ts +2 -0
  130. package/lib/types/components/__generated__/slot.props.d.ts +2 -0
  131. package/lib/types/components/__generated__/span.props.d.ts +2 -0
  132. package/lib/types/components/__generated__/subscript.props.d.ts +2 -0
  133. package/lib/types/components/__generated__/superscript.props.d.ts +2 -0
  134. package/lib/types/components/__generated__/text-block.props.d.ts +2 -0
  135. package/lib/types/components/blockquote.d.ts +3 -0
  136. package/lib/types/components/blockquote.stories.d.ts +5 -0
  137. package/lib/types/components/blockquote.ws.d.ts +3 -0
  138. package/lib/types/components/body.d.ts +3 -0
  139. package/lib/types/components/body.stories.d.ts +6 -0
  140. package/lib/types/components/body.ws.d.ts +3 -0
  141. package/lib/types/components/bold.d.ts +3 -0
  142. package/lib/types/components/bold.stories.d.ts +5 -0
  143. package/lib/types/components/bold.ws.d.ts +3 -0
  144. package/lib/types/components/box.d.ts +7 -0
  145. package/lib/types/components/box.stories.d.ts +9 -0
  146. package/lib/types/components/box.ws.d.ts +3 -0
  147. package/lib/types/components/button.d.ts +7 -0
  148. package/lib/types/components/button.stories.d.ts +9 -0
  149. package/lib/types/components/button.ws.d.ts +3 -0
  150. package/lib/types/components/code.d.ts +9 -0
  151. package/lib/types/components/code.stories.d.ts +11 -0
  152. package/lib/types/components/code.ws.d.ts +3 -0
  153. package/lib/types/components/component-meta.d.ts +605 -0
  154. package/lib/types/components/components-utils.d.ts +34 -0
  155. package/lib/types/components/components.d.ts +31 -0
  156. package/lib/types/components/form.d.ts +3 -0
  157. package/lib/types/components/form.stories.d.ts +5 -0
  158. package/lib/types/components/form.ws.d.ts +3 -0
  159. package/lib/types/components/fragment.d.ts +6 -0
  160. package/lib/types/components/fragment.ws.d.ts +3 -0
  161. package/lib/types/components/heading.d.ts +7 -0
  162. package/lib/types/components/heading.stories.d.ts +9 -0
  163. package/lib/types/components/heading.ws.d.ts +3 -0
  164. package/lib/types/components/image.d.ts +3 -0
  165. package/lib/types/components/image.stories.d.ts +5 -0
  166. package/lib/types/components/image.ws.d.ts +3 -0
  167. package/lib/types/components/index.d.ts +17 -0
  168. package/lib/types/components/input.d.ts +3 -0
  169. package/lib/types/components/input.stories.d.ts +5 -0
  170. package/lib/types/components/input.ws.d.ts +3 -0
  171. package/lib/types/components/italic.d.ts +3 -0
  172. package/lib/types/components/italic.stories.d.ts +5 -0
  173. package/lib/types/components/italic.ws.d.ts +3 -0
  174. package/lib/types/components/link-block.d.ts +3 -0
  175. package/lib/types/components/link-block.stories.d.ts +13 -0
  176. package/lib/types/components/link-block.ws.d.ts +3 -0
  177. package/lib/types/components/link.d.ts +9 -0
  178. package/lib/types/components/link.stories.d.ts +13 -0
  179. package/lib/types/components/link.ws.d.ts +3 -0
  180. package/lib/types/components/list-item.d.ts +3 -0
  181. package/lib/types/components/list-item.stories.d.ts +5 -0
  182. package/lib/types/components/list-item.ws.d.ts +3 -0
  183. package/lib/types/components/list.d.ts +9 -0
  184. package/lib/types/components/list.stories.d.ts +9 -0
  185. package/lib/types/components/list.ws.d.ts +3 -0
  186. package/lib/types/components/paragraph.d.ts +3 -0
  187. package/lib/types/components/paragraph.stories.d.ts +5 -0
  188. package/lib/types/components/paragraph.ws.d.ts +3 -0
  189. package/lib/types/components/rich-text-link.d.ts +2 -0
  190. package/lib/types/components/rich-text-link.stories.d.ts +13 -0
  191. package/lib/types/components/rich-text-link.ws.d.ts +3 -0
  192. package/lib/types/components/separator.d.ts +3 -0
  193. package/lib/types/components/separator.stories.d.ts +5 -0
  194. package/lib/types/components/separator.ws.d.ts +3 -0
  195. package/lib/types/components/slot.d.ts +6 -0
  196. package/lib/types/components/slot.stories.d.ts +9 -0
  197. package/lib/types/components/slot.ws.d.ts +3 -0
  198. package/lib/types/components/span.d.ts +3 -0
  199. package/lib/types/components/span.stories.d.ts +5 -0
  200. package/lib/types/components/span.ws.d.ts +3 -0
  201. package/lib/types/components/subscript.d.ts +3 -0
  202. package/lib/types/components/subscript.stories.d.ts +5 -0
  203. package/lib/types/components/subscript.ws.d.ts +3 -0
  204. package/lib/types/components/superscript.d.ts +3 -0
  205. package/lib/types/components/superscript.stories.d.ts +5 -0
  206. package/lib/types/components/superscript.ws.d.ts +3 -0
  207. package/lib/types/components/text-block.d.ts +3 -0
  208. package/lib/types/components/text-block.stories.d.ts +5 -0
  209. package/lib/types/components/text-block.ws.d.ts +3 -0
  210. package/lib/types/context.d.ts +9 -0
  211. package/lib/types/css/css.d.ts +10 -0
  212. package/lib/types/css/get-browser-style.d.ts +2 -0
  213. package/lib/types/css/global-rules.d.ts +44 -0
  214. package/lib/types/css/index.d.ts +4 -0
  215. package/lib/types/css/normalize-type-check.d.ts +1 -0
  216. package/lib/types/css/normalize.d.ts +2429 -0
  217. package/lib/types/css/presets.d.ts +38 -0
  218. package/lib/types/css/style-rules.d.ts +248 -0
  219. package/lib/types/css/style-rules.test.d.ts +1 -0
  220. package/lib/types/index.d.ts +9 -0
  221. package/lib/types/props.d.ts +97 -0
  222. package/lib/types/props.test.d.ts +1 -0
  223. package/lib/types/pubsub/create.d.ts +28 -0
  224. package/lib/types/pubsub/index.d.ts +1 -0
  225. package/lib/types/pubsub/raf-queue.d.ts +1 -0
  226. package/lib/types/tree/create-elements-tree.d.ts +16 -0
  227. package/lib/types/tree/index.d.ts +3 -0
  228. package/lib/types/tree/root.d.ts +25 -0
  229. package/lib/types/tree/session-storage-polyfill.d.ts +2 -0
  230. package/lib/types/tree/webstudio-component.d.ts +15 -0
  231. package/package.json +20 -19
  232. package/src/components/blockquote.tsx +1 -1
  233. package/src/components/blockquote.ws.tsx +63 -36
  234. package/src/components/body.tsx +1 -1
  235. package/src/components/body.ws.tsx +39 -47
  236. package/src/components/bold.tsx +1 -1
  237. package/src/components/bold.ws.tsx +10 -2
  238. package/src/components/box.ws.ts +28 -5
  239. package/src/components/button.tsx +1 -1
  240. package/src/components/button.ws.tsx +10 -2
  241. package/src/components/code.tsx +1 -1
  242. package/src/components/code.ws.tsx +36 -28
  243. package/src/components/component-meta.ts +4 -1
  244. package/src/components/form.tsx +1 -1
  245. package/src/components/form.ws.tsx +11 -9
  246. package/src/components/heading.ws.tsx +16 -0
  247. package/src/components/image.tsx +1 -1
  248. package/src/components/image.ws.tsx +19 -12
  249. package/src/components/input.tsx +1 -1
  250. package/src/components/input.ws.tsx +10 -2
  251. package/src/components/italic.tsx +1 -1
  252. package/src/components/italic.ws.tsx +12 -6
  253. package/src/components/link-block.tsx +1 -0
  254. package/src/components/link-block.ws.tsx +10 -8
  255. package/src/components/link.tsx +2 -0
  256. package/src/components/link.ws.tsx +17 -11
  257. package/src/components/list-item.tsx +1 -1
  258. package/src/components/list-item.ws.tsx +8 -0
  259. package/src/components/list.tsx +2 -0
  260. package/src/components/list.ws.tsx +32 -11
  261. package/src/components/paragraph.tsx +1 -1
  262. package/src/components/paragraph.ws.tsx +8 -0
  263. package/src/components/separator.tsx +1 -1
  264. package/src/components/separator.ws.tsx +33 -12
  265. package/src/components/span.tsx +1 -1
  266. package/src/components/span.ws.tsx +10 -2
  267. package/src/components/subscript.tsx +1 -1
  268. package/src/components/subscript.ws.tsx +8 -0
  269. package/src/components/superscript.tsx +1 -1
  270. package/src/components/superscript.ws.tsx +8 -0
  271. package/src/components/text-block.tsx +1 -1
  272. package/src/components/text-block.ws.tsx +14 -7
  273. package/src/context.tsx +2 -1
  274. package/src/css/css.ts +57 -0
  275. package/src/css/get-browser-style.ts +6 -1
  276. package/src/css/global-rules.ts +29 -0
  277. package/src/css/index.ts +3 -1
  278. package/src/css/normalize-type-check.ts +13 -0
  279. package/src/css/normalize.ts +519 -0
  280. package/src/css/presets.ts +42 -0
  281. package/src/css/style-rules.test.ts +147 -0
  282. package/src/css/style-rules.ts +66 -0
  283. package/src/props.ts +0 -2
  284. package/src/pubsub/create.ts +7 -38
  285. package/src/pubsub/raf-queue.ts +31 -0
  286. package/src/tree/create-elements-tree.tsx +2 -1
  287. package/src/tree/webstudio-component.tsx +1 -0
  288. package/lib/cjs/css/categories.cjs +0 -250
  289. package/lib/css/categories.js +0 -230
  290. package/src/css/categories.ts +0 -254
  291. /package/lib/cjs/app/custom-components/{image.cjs → image.js} +0 -0
  292. /package/lib/cjs/app/custom-components/{index.cjs → index.js} +0 -0
  293. /package/lib/cjs/app/custom-components/{link-block.cjs → link-block.js} +0 -0
  294. /package/lib/cjs/app/custom-components/{link.cjs → link.js} +0 -0
  295. /package/lib/cjs/app/custom-components/{rich-text-link.cjs → rich-text-link.js} +0 -0
  296. /package/lib/cjs/app/custom-components/shared/{remix-link.cjs → remix-link.js} +0 -0
  297. /package/lib/cjs/app/{handle-request.server.cjs → handle-request.server.js} +0 -0
  298. /package/lib/cjs/app/{index.cjs → index.js} +0 -0
  299. /package/lib/cjs/app/{params.cjs → params.js} +0 -0
  300. /package/lib/cjs/app/{root.cjs → root.js} +0 -0
  301. /package/lib/cjs/components/__generated__/{blockquote.props.cjs → blockquote.props.js} +0 -0
  302. /package/lib/cjs/components/__generated__/{body.props.cjs → body.props.js} +0 -0
  303. /package/lib/cjs/components/__generated__/{bold.props.cjs → bold.props.js} +0 -0
  304. /package/lib/cjs/components/__generated__/{box.props.cjs → box.props.js} +0 -0
  305. /package/lib/cjs/components/__generated__/{button.props.cjs → button.props.js} +0 -0
  306. /package/lib/cjs/components/__generated__/{code.props.cjs → code.props.js} +0 -0
  307. /package/lib/cjs/components/__generated__/{form.props.cjs → form.props.js} +0 -0
  308. /package/lib/cjs/components/__generated__/{fragment.props.cjs → fragment.props.js} +0 -0
  309. /package/lib/cjs/components/__generated__/{heading.props.cjs → heading.props.js} +0 -0
  310. /package/lib/cjs/components/__generated__/{image.props.cjs → image.props.js} +0 -0
  311. /package/lib/cjs/components/__generated__/{input.props.cjs → input.props.js} +0 -0
  312. /package/lib/cjs/components/__generated__/{italic.props.cjs → italic.props.js} +0 -0
  313. /package/lib/cjs/components/__generated__/{link-block.props.cjs → link-block.props.js} +0 -0
  314. /package/lib/cjs/components/__generated__/{link.props.cjs → link.props.js} +0 -0
  315. /package/lib/cjs/components/__generated__/{list-item.props.cjs → list-item.props.js} +0 -0
  316. /package/lib/cjs/components/__generated__/{list.props.cjs → list.props.js} +0 -0
  317. /package/lib/cjs/components/__generated__/{paragraph.props.cjs → paragraph.props.js} +0 -0
  318. /package/lib/cjs/components/__generated__/{rich-text-link.props.cjs → rich-text-link.props.js} +0 -0
  319. /package/lib/cjs/components/__generated__/{separator.props.cjs → separator.props.js} +0 -0
  320. /package/lib/cjs/components/__generated__/{slot.props.cjs → slot.props.js} +0 -0
  321. /package/lib/cjs/components/__generated__/{span.props.cjs → span.props.js} +0 -0
  322. /package/lib/cjs/components/__generated__/{subscript.props.cjs → subscript.props.js} +0 -0
  323. /package/lib/cjs/components/__generated__/{superscript.props.cjs → superscript.props.js} +0 -0
  324. /package/lib/cjs/components/__generated__/{text-block.props.cjs → text-block.props.js} +0 -0
  325. /package/lib/cjs/components/{box.cjs → box.js} +0 -0
  326. /package/lib/cjs/components/{component-meta.cjs → component-meta.js} +0 -0
  327. /package/lib/cjs/components/{components-utils.cjs → components-utils.js} +0 -0
  328. /package/lib/cjs/components/{components.cjs → components.js} +0 -0
  329. /package/lib/cjs/components/{fragment.cjs → fragment.js} +0 -0
  330. /package/lib/cjs/components/{fragment.ws.cjs → fragment.ws.js} +0 -0
  331. /package/lib/cjs/components/{heading.cjs → heading.js} +0 -0
  332. /package/lib/cjs/components/{index.cjs → index.js} +0 -0
  333. /package/lib/cjs/components/{list.cjs → list.js} +0 -0
  334. /package/lib/cjs/components/{rich-text-link.cjs → rich-text-link.js} +0 -0
  335. /package/lib/cjs/components/{rich-text-link.ws.cjs → rich-text-link.ws.js} +0 -0
  336. /package/lib/cjs/components/{slot.cjs → slot.js} +0 -0
  337. /package/lib/cjs/components/{slot.ws.cjs → slot.ws.js} +0 -0
  338. /package/lib/cjs/{context.cjs → context.js} +0 -0
  339. /package/lib/cjs/css/{get-browser-style.cjs → get-browser-style.js} +0 -0
  340. /package/lib/cjs/{index.cjs → index.js} +0 -0
  341. /package/lib/cjs/{props.cjs → props.js} +0 -0
  342. /package/lib/cjs/pubsub/{index.cjs → index.js} +0 -0
  343. /package/lib/cjs/tree/{create-elements-tree.cjs → create-elements-tree.js} +0 -0
  344. /package/lib/cjs/tree/{index.cjs → index.js} +0 -0
  345. /package/lib/cjs/tree/{root.cjs → root.js} +0 -0
  346. /package/lib/cjs/tree/{session-storage-polyfill.cjs → session-storage-polyfill.js} +0 -0
@@ -0,0 +1,66 @@
1
+ import type { Style } from "@webstudio-is/css-data";
2
+ import type {
3
+ Breakpoint,
4
+ StyleDecl,
5
+ Styles,
6
+ StyleSource,
7
+ StyleSourceSelections,
8
+ } from "@webstudio-is/project-build";
9
+
10
+ type StyleRule = {
11
+ instanceId: string;
12
+ breakpointId: string;
13
+ style: Style;
14
+ };
15
+
16
+ /**
17
+ * Merge styles from different style sources
18
+ * and group by instance and breakpoint
19
+ */
20
+ export const getStyleRules = (
21
+ styles: Styles,
22
+ styleSourceSelections: StyleSourceSelections
23
+ ) => {
24
+ if (styles === undefined || styleSourceSelections === undefined) {
25
+ return [];
26
+ }
27
+ const stylesByStyleSourceId = new Map<StyleSource["id"], StyleDecl[]>();
28
+ for (const styleDecl of styles.values()) {
29
+ const { styleSourceId } = styleDecl;
30
+ let styleSourceStyles = stylesByStyleSourceId.get(styleSourceId);
31
+ // instance can be undefined when style is from other tree
32
+ if (styleSourceStyles === undefined) {
33
+ styleSourceStyles = [];
34
+ stylesByStyleSourceId.set(styleSourceId, styleSourceStyles);
35
+ }
36
+ styleSourceStyles.push(styleDecl);
37
+ }
38
+
39
+ const styleRules: StyleRule[] = [];
40
+ for (const { instanceId, values } of styleSourceSelections.values()) {
41
+ const styleRuleByBreakpointId = new Map<Breakpoint["id"], StyleRule>();
42
+
43
+ for (const styleSourceId of values) {
44
+ const styleSourceStyles = stylesByStyleSourceId.get(styleSourceId);
45
+ // instance can be undefined when style is from other tree
46
+ if (styleSourceStyles === undefined) {
47
+ continue;
48
+ }
49
+ for (const { breakpointId, property, value } of styleSourceStyles) {
50
+ let styleRule = styleRuleByBreakpointId.get(breakpointId);
51
+ if (styleRule === undefined) {
52
+ styleRule = {
53
+ instanceId,
54
+ breakpointId,
55
+ style: {},
56
+ };
57
+ styleRuleByBreakpointId.set(breakpointId, styleRule);
58
+ }
59
+ styleRule.style[property] = value;
60
+ }
61
+ }
62
+ styleRules.push(...styleRuleByBreakpointId.values());
63
+ }
64
+
65
+ return styleRules;
66
+ };
package/src/props.ts CHANGED
@@ -2,13 +2,11 @@ import { useContext, useMemo } from "react";
2
2
  import { computed } from "nanostores";
3
3
  import { useStore } from "@nanostores/react";
4
4
  import type { Instance, Page, Prop, Props } from "@webstudio-is/project-build";
5
- import type { Asset } from "@webstudio-is/asset-uploader";
6
5
  import { ReactSdkContext } from "./context";
7
6
  import { idAttribute } from "./tree/webstudio-component";
8
7
 
9
8
  export type PropsByInstanceId = Map<Instance["id"], Prop[]>;
10
9
 
11
- export type Assets = Map<Asset["id"], Asset>;
12
10
  export type Pages = Map<Page["id"], Page>;
13
11
 
14
12
  export const getPropsByInstanceId = (props: Props) => {
@@ -1,5 +1,6 @@
1
- import mitt from "mitt";
1
+ import { createNanoEvents } from "nanoevents";
2
2
  import { useCallback, useEffect, useRef } from "react";
3
+ import { batchUpdate } from "./raf-queue";
3
4
 
4
5
  export const createPubsub = <PublishMap>() => {
5
6
  type Action<Type extends keyof PublishMap> =
@@ -7,9 +8,8 @@ export const createPubsub = <PublishMap>() => {
7
8
  ? { type: Type; payload?: PublishMap[Type] }
8
9
  : { type: Type; payload: PublishMap[Type] };
9
10
 
10
- // `mitt` has a somewhat annoying overload for `*` type that makes it hard to wrap in a generic context
11
11
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
- const emitter = mitt<Record<any, any>>();
12
+ const emitter = createNanoEvents<Record<any, any>>();
13
13
 
14
14
  if (typeof window === "object") {
15
15
  window.addEventListener(
@@ -19,7 +19,8 @@ export const createPubsub = <PublishMap>() => {
19
19
  // we could potentially maintain a list of valid event types at runtime
20
20
  // at the very least we could add a brand property or something to our events
21
21
  if (typeof event.data?.type === "string") {
22
- emitter.emit(event.data.type, event.data.payload);
22
+ // Execute all updates within a single batch to improve performance
23
+ batchUpdate(() => emitter.emit(event.data.type, event.data.payload));
23
24
  }
24
25
  },
25
26
  false
@@ -62,47 +63,15 @@ export const createPubsub = <PublishMap>() => {
62
63
  onAction: (payload: PublishMap[Type]) => void
63
64
  ) {
64
65
  useEffect(() => {
65
- emitter.on(type, onAction);
66
- return () => {
67
- emitter.off(type, onAction);
68
- };
66
+ return emitter.on(type, onAction);
69
67
  }, [type, onAction]);
70
68
  },
71
69
 
72
- useSubscribeAll(
73
- onAction: <Type extends keyof PublishMap>(
74
- type: Type,
75
- payload: PublishMap[Type]
76
- ) => void
77
- ) {
78
- useEffect(() => {
79
- emitter.on("*", onAction);
80
- return () => {
81
- emitter.off("*", onAction);
82
- };
83
- }, [onAction]);
84
- },
85
-
86
70
  subscribe<Type extends keyof PublishMap>(
87
71
  type: Type,
88
72
  onAction: (payload: PublishMap[Type]) => void
89
73
  ) {
90
- emitter.on(type, onAction);
91
- return () => {
92
- emitter.off(type, onAction);
93
- };
94
- },
95
-
96
- subscribeAll(
97
- onAction: <Type extends keyof PublishMap>(
98
- type: Type,
99
- payload: PublishMap[Type]
100
- ) => void
101
- ) {
102
- emitter.on("*", onAction);
103
- return () => {
104
- emitter.off("*", onAction);
105
- };
74
+ return emitter.on(type, onAction);
106
75
  },
107
76
  };
108
77
  };
@@ -0,0 +1,31 @@
1
+ import { unstable_batchedUpdates as batchedUpdates } from "react-dom";
2
+
3
+ type Task = () => void;
4
+
5
+ let handle: ReturnType<typeof requestAnimationFrame> | undefined;
6
+ let updateQueue: Task[] = [];
7
+
8
+ const processUpdates = (updates: Task[]) => {
9
+ // Prior to React v18, updates not called within React event handlers would not be batched
10
+ // To ensure all updates are batched into a single React update, we wrap them in a batchedUpdates callback
11
+ batchedUpdates(() => {
12
+ for (const update of updates) {
13
+ update();
14
+ }
15
+ });
16
+ };
17
+
18
+ export const batchUpdate = (update: () => void) => {
19
+ updateQueue.push(update);
20
+
21
+ if (handle !== undefined) {
22
+ return;
23
+ }
24
+
25
+ handle = requestAnimationFrame(() => {
26
+ const updates = updateQueue;
27
+ updateQueue = [];
28
+ handle = undefined;
29
+ processUpdates(updates);
30
+ });
31
+ };
@@ -1,10 +1,11 @@
1
1
  import { type ComponentProps, Fragment } from "react";
2
2
  import type { ReadableAtom } from "nanostores";
3
3
  import { Scripts, ScrollRestoration } from "@remix-run/react";
4
+ import type { Assets } from "@webstudio-is/asset-uploader";
4
5
  import type { Instance } from "@webstudio-is/project-build";
5
6
  import type { GetComponent } from "../components/components-utils";
6
7
  import { ReactSdkContext } from "../context";
7
- import type { Assets, Pages, PropsByInstanceId } from "../props";
8
+ import type { Pages, PropsByInstanceId } from "../props";
8
9
  import type { WebstudioComponent } from "./webstudio-component";
9
10
  import { SessionStoragePolyfill } from "./session-storage-polyfill";
10
11
 
@@ -35,6 +35,7 @@ type WebstudioComponentProps = {
35
35
 
36
36
  export const WebstudioComponent = ({
37
37
  instance,
38
+ instanceSelector,
38
39
  children,
39
40
  getComponent,
40
41
  ...rest
@@ -1,250 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var categories_exports = {};
20
- __export(categories_exports, {
21
- categories: () => categories,
22
- propertyCategoryMap: () => propertyCategoryMap
23
- });
24
- module.exports = __toCommonJS(categories_exports);
25
- const layout = [
26
- "display",
27
- // Flex
28
- "flexDirection",
29
- "flexWrap",
30
- // Flex or grid
31
- "alignItems",
32
- "justifyContent",
33
- "alignContent",
34
- // Grid
35
- "justifyItems",
36
- "rowGap",
37
- "columnGap",
38
- "gridAutoFlow",
39
- "gridAutoRows",
40
- "gridAutoColumns",
41
- "gridTemplateColumns",
42
- "gridTemplateRows",
43
- "gridTemplateAreas"
44
- ];
45
- const flexChild = [
46
- "flexShrink",
47
- "flexGrow",
48
- "flexBasis",
49
- "alignSelf",
50
- "order"
51
- ];
52
- const gridChild = [
53
- "gridRowEnd",
54
- "gridRowStart",
55
- "gridColumnStart",
56
- "gridColumnEnd",
57
- "alignSelf",
58
- "justifySelf",
59
- "order"
60
- ];
61
- const space = [
62
- "marginTop",
63
- "marginRight",
64
- "marginBottom",
65
- "marginLeft",
66
- "paddingTop",
67
- "paddingRight",
68
- "paddingBottom",
69
- "paddingLeft"
70
- ];
71
- const size = [
72
- "width",
73
- "height",
74
- "minWidth",
75
- "minHeight",
76
- "maxWidth",
77
- "maxHeight",
78
- "overflow",
79
- "objectFit",
80
- "objectPosition",
81
- "aspectRatio"
82
- ];
83
- const position = [
84
- "position",
85
- "top",
86
- "right",
87
- "bottom",
88
- "left",
89
- "zIndex",
90
- "float",
91
- "clear"
92
- ];
93
- const typography = [
94
- "fontFamily",
95
- "fontWeight",
96
- "fontSize",
97
- "lineHeight",
98
- "color",
99
- "textAlign",
100
- "fontStyle",
101
- "textDecorationColor",
102
- "textDecorationLine",
103
- "textDecorationStyle",
104
- "letterSpacing",
105
- "textIndent",
106
- "columnCount",
107
- "columnGap",
108
- "columnRuleStyle",
109
- "columnRuleWidth",
110
- "columnRuleColor",
111
- "textTransform",
112
- "direction",
113
- "whiteSpace",
114
- "textShadow",
115
- // More
116
- "fontSizeAdjust",
117
- "fontStretch",
118
- "fontVariant",
119
- "textAlignLast",
120
- "textJustify",
121
- "textOverflow",
122
- "textSizeAdjust",
123
- "verticalAlign",
124
- "wordSpacing",
125
- "wordBreak",
126
- "wordWrap"
127
- ];
128
- const backgrounds = [
129
- "backgroundAttachment",
130
- "backgroundClip",
131
- "backgroundColor",
132
- "backgroundImage",
133
- "backgroundOrigin",
134
- "backgroundPosition",
135
- "backgroundRepeat",
136
- "backgroundSize",
137
- "backgroundBlendMode"
138
- ];
139
- const borders = [
140
- "borderTopLeftRadius",
141
- "borderTopRightRadius",
142
- "borderBottomLeftRadius",
143
- "borderBottomRightRadius",
144
- "borderTopStyle",
145
- "borderRightStyle",
146
- "borderBottomStyle",
147
- "borderLeftStyle",
148
- "borderTopColor",
149
- "borderRightColor",
150
- "borderBottomColor",
151
- "borderLeftColor",
152
- "borderTopWidth",
153
- "borderRightWidth",
154
- "borderBottomWidth",
155
- "borderLeftWidth",
156
- // More
157
- "borderImageSlice",
158
- "borderImageWidth",
159
- "borderImageOutset",
160
- "borderImageRepeat",
161
- "borderImageSource"
162
- ];
163
- const effects = [
164
- "mixBlendMode",
165
- "opacity",
166
- "outlineColor",
167
- "outlineOffset",
168
- "outlineStyle",
169
- "outlineWidth",
170
- "boxShadow",
171
- "transform",
172
- "filter",
173
- "backdropFilter",
174
- "cursor",
175
- // More
176
- "animationDelay",
177
- "animationDirection",
178
- "animationDuration",
179
- "animationFillMode",
180
- "animationIterationCount",
181
- "animationName",
182
- "animationPlayState",
183
- "animationTimingFunction",
184
- "transitionDelay",
185
- "transitionDuration",
186
- "transitionProperty",
187
- "transitionTimingFunction"
188
- ];
189
- const other = [
190
- "resize",
191
- "clip",
192
- "visibility",
193
- "boxSizing",
194
- "content",
195
- "quotes",
196
- "counterReset",
197
- "counterIncrement",
198
- "inlineSize",
199
- "blockSize",
200
- "minInlineSize",
201
- "minBlockSize",
202
- "maxInlineSize",
203
- "maxBlockSize",
204
- "userSelect",
205
- "pointerEvents"
206
- ];
207
- const categories = {
208
- layout: {
209
- label: "Layout",
210
- properties: layout,
211
- moreFrom: ""
212
- },
213
- flexChild: {
214
- label: "Flex Child",
215
- properties: flexChild,
216
- moreFrom: ""
217
- },
218
- gridChild: {
219
- label: "Grid Child",
220
- properties: gridChild,
221
- moreFrom: ""
222
- },
223
- space: { label: "Space", properties: space, moreFrom: "" },
224
- size: { label: "Size", properties: size, moreFrom: "" },
225
- position: { label: "Position", properties: position, moreFrom: "" },
226
- typography: {
227
- label: "Typography",
228
- properties: typography,
229
- moreFrom: "fontSizeAdjust"
230
- },
231
- backgrounds: { label: "Backgrounds", properties: backgrounds, moreFrom: "" },
232
- borders: {
233
- label: "Borders",
234
- properties: borders,
235
- moreFrom: "borderImageSlice"
236
- },
237
- effects: {
238
- label: "Effects",
239
- properties: effects,
240
- moreFrom: "animationDelay"
241
- },
242
- other: { label: "Other", properties: other, moreFrom: "" }
243
- };
244
- const propertyCategoryMap = {};
245
- let category;
246
- for (category in categories) {
247
- for (const property of categories[category].properties) {
248
- propertyCategoryMap[property] = category;
249
- }
250
- }
@@ -1,230 +0,0 @@
1
- const layout = [
2
- "display",
3
- // Flex
4
- "flexDirection",
5
- "flexWrap",
6
- // Flex or grid
7
- "alignItems",
8
- "justifyContent",
9
- "alignContent",
10
- // Grid
11
- "justifyItems",
12
- "rowGap",
13
- "columnGap",
14
- "gridAutoFlow",
15
- "gridAutoRows",
16
- "gridAutoColumns",
17
- "gridTemplateColumns",
18
- "gridTemplateRows",
19
- "gridTemplateAreas"
20
- ];
21
- const flexChild = [
22
- "flexShrink",
23
- "flexGrow",
24
- "flexBasis",
25
- "alignSelf",
26
- "order"
27
- ];
28
- const gridChild = [
29
- "gridRowEnd",
30
- "gridRowStart",
31
- "gridColumnStart",
32
- "gridColumnEnd",
33
- "alignSelf",
34
- "justifySelf",
35
- "order"
36
- ];
37
- const space = [
38
- "marginTop",
39
- "marginRight",
40
- "marginBottom",
41
- "marginLeft",
42
- "paddingTop",
43
- "paddingRight",
44
- "paddingBottom",
45
- "paddingLeft"
46
- ];
47
- const size = [
48
- "width",
49
- "height",
50
- "minWidth",
51
- "minHeight",
52
- "maxWidth",
53
- "maxHeight",
54
- "overflow",
55
- "objectFit",
56
- "objectPosition",
57
- "aspectRatio"
58
- ];
59
- const position = [
60
- "position",
61
- "top",
62
- "right",
63
- "bottom",
64
- "left",
65
- "zIndex",
66
- "float",
67
- "clear"
68
- ];
69
- const typography = [
70
- "fontFamily",
71
- "fontWeight",
72
- "fontSize",
73
- "lineHeight",
74
- "color",
75
- "textAlign",
76
- "fontStyle",
77
- "textDecorationColor",
78
- "textDecorationLine",
79
- "textDecorationStyle",
80
- "letterSpacing",
81
- "textIndent",
82
- "columnCount",
83
- "columnGap",
84
- "columnRuleStyle",
85
- "columnRuleWidth",
86
- "columnRuleColor",
87
- "textTransform",
88
- "direction",
89
- "whiteSpace",
90
- "textShadow",
91
- // More
92
- "fontSizeAdjust",
93
- "fontStretch",
94
- "fontVariant",
95
- "textAlignLast",
96
- "textJustify",
97
- "textOverflow",
98
- "textSizeAdjust",
99
- "verticalAlign",
100
- "wordSpacing",
101
- "wordBreak",
102
- "wordWrap"
103
- ];
104
- const backgrounds = [
105
- "backgroundAttachment",
106
- "backgroundClip",
107
- "backgroundColor",
108
- "backgroundImage",
109
- "backgroundOrigin",
110
- "backgroundPosition",
111
- "backgroundRepeat",
112
- "backgroundSize",
113
- "backgroundBlendMode"
114
- ];
115
- const borders = [
116
- "borderTopLeftRadius",
117
- "borderTopRightRadius",
118
- "borderBottomLeftRadius",
119
- "borderBottomRightRadius",
120
- "borderTopStyle",
121
- "borderRightStyle",
122
- "borderBottomStyle",
123
- "borderLeftStyle",
124
- "borderTopColor",
125
- "borderRightColor",
126
- "borderBottomColor",
127
- "borderLeftColor",
128
- "borderTopWidth",
129
- "borderRightWidth",
130
- "borderBottomWidth",
131
- "borderLeftWidth",
132
- // More
133
- "borderImageSlice",
134
- "borderImageWidth",
135
- "borderImageOutset",
136
- "borderImageRepeat",
137
- "borderImageSource"
138
- ];
139
- const effects = [
140
- "mixBlendMode",
141
- "opacity",
142
- "outlineColor",
143
- "outlineOffset",
144
- "outlineStyle",
145
- "outlineWidth",
146
- "boxShadow",
147
- "transform",
148
- "filter",
149
- "backdropFilter",
150
- "cursor",
151
- // More
152
- "animationDelay",
153
- "animationDirection",
154
- "animationDuration",
155
- "animationFillMode",
156
- "animationIterationCount",
157
- "animationName",
158
- "animationPlayState",
159
- "animationTimingFunction",
160
- "transitionDelay",
161
- "transitionDuration",
162
- "transitionProperty",
163
- "transitionTimingFunction"
164
- ];
165
- const other = [
166
- "resize",
167
- "clip",
168
- "visibility",
169
- "boxSizing",
170
- "content",
171
- "quotes",
172
- "counterReset",
173
- "counterIncrement",
174
- "inlineSize",
175
- "blockSize",
176
- "minInlineSize",
177
- "minBlockSize",
178
- "maxInlineSize",
179
- "maxBlockSize",
180
- "userSelect",
181
- "pointerEvents"
182
- ];
183
- const categories = {
184
- layout: {
185
- label: "Layout",
186
- properties: layout,
187
- moreFrom: ""
188
- },
189
- flexChild: {
190
- label: "Flex Child",
191
- properties: flexChild,
192
- moreFrom: ""
193
- },
194
- gridChild: {
195
- label: "Grid Child",
196
- properties: gridChild,
197
- moreFrom: ""
198
- },
199
- space: { label: "Space", properties: space, moreFrom: "" },
200
- size: { label: "Size", properties: size, moreFrom: "" },
201
- position: { label: "Position", properties: position, moreFrom: "" },
202
- typography: {
203
- label: "Typography",
204
- properties: typography,
205
- moreFrom: "fontSizeAdjust"
206
- },
207
- backgrounds: { label: "Backgrounds", properties: backgrounds, moreFrom: "" },
208
- borders: {
209
- label: "Borders",
210
- properties: borders,
211
- moreFrom: "borderImageSlice"
212
- },
213
- effects: {
214
- label: "Effects",
215
- properties: effects,
216
- moreFrom: "animationDelay"
217
- },
218
- other: { label: "Other", properties: other, moreFrom: "" }
219
- };
220
- const propertyCategoryMap = {};
221
- let category;
222
- for (category in categories) {
223
- for (const property of categories[category].properties) {
224
- propertyCategoryMap[property] = category;
225
- }
226
- }
227
- export {
228
- categories,
229
- propertyCategoryMap
230
- };