@webstudio-is/react-sdk 0.8.0 → 0.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 (612) hide show
  1. package/lib/app/custom-components/image.js +46 -0
  2. package/lib/app/custom-components/index.js +18 -0
  3. package/lib/app/custom-components/link.js +6 -0
  4. package/lib/app/custom-components/rich-text-link.js +6 -0
  5. package/lib/app/custom-components/shared/remix-link.js +29 -0
  6. package/lib/app/handle-request.server.js +19 -0
  7. package/lib/{remix → app}/index.js +1 -0
  8. package/lib/app/params.js +10 -0
  9. package/lib/app/root.js +40 -0
  10. package/lib/cjs/app/custom-components/image.cjs +63 -0
  11. package/lib/cjs/app/custom-components/index.cjs +38 -0
  12. package/lib/cjs/app/custom-components/link.cjs +26 -0
  13. package/lib/cjs/app/custom-components/rich-text-link.cjs +26 -0
  14. package/lib/cjs/app/custom-components/shared/remix-link.cjs +49 -0
  15. package/lib/cjs/app/handle-request.server.cjs +39 -0
  16. package/lib/cjs/app/index.cjs +20 -0
  17. package/lib/cjs/app/params.cjs +30 -0
  18. package/lib/cjs/app/root.cjs +60 -0
  19. package/lib/cjs/components/__generated__/body.props.json +491 -0
  20. package/lib/cjs/components/__generated__/bold.props.json +491 -0
  21. package/lib/cjs/components/__generated__/box.props.json +508 -0
  22. package/lib/cjs/components/__generated__/button.props.json +547 -0
  23. package/lib/cjs/components/__generated__/form.props.json +531 -0
  24. package/lib/cjs/components/__generated__/heading.props.json +497 -0
  25. package/lib/cjs/components/__generated__/image.props.json +560 -0
  26. package/lib/cjs/components/__generated__/input.props.json +657 -0
  27. package/lib/cjs/components/__generated__/italic.props.json +491 -0
  28. package/lib/cjs/components/__generated__/link.props.json +547 -0
  29. package/lib/cjs/components/__generated__/paragraph.props.json +491 -0
  30. package/lib/cjs/components/__generated__/rich-text-link.props.json +547 -0
  31. package/lib/cjs/components/__generated__/span.props.json +491 -0
  32. package/lib/cjs/components/__generated__/subscript.props.json +491 -0
  33. package/lib/cjs/components/__generated__/superscript.props.json +491 -0
  34. package/lib/cjs/components/__generated__/text-block.props.json +491 -0
  35. package/lib/cjs/components/body.cjs +29 -6
  36. package/lib/cjs/components/body.ws.cjs +83 -59
  37. package/lib/cjs/components/bold.cjs +29 -6
  38. package/lib/cjs/components/bold.ws.cjs +35 -11
  39. package/lib/cjs/components/box.cjs +29 -7
  40. package/lib/cjs/components/box.ws.cjs +40 -16
  41. package/lib/cjs/components/button.cjs +33 -8
  42. package/lib/cjs/components/button.ws.cjs +36 -12
  43. package/lib/cjs/components/component-type.cjs +77 -27
  44. package/lib/cjs/components/form.cjs +29 -6
  45. package/lib/cjs/components/form.ws.cjs +45 -21
  46. package/lib/cjs/components/heading.cjs +29 -7
  47. package/lib/cjs/components/heading.ws.cjs +36 -12
  48. package/lib/cjs/components/image.cjs +39 -14
  49. package/lib/cjs/components/image.ws.cjs +45 -24
  50. package/lib/cjs/components/index.cjs +145 -35
  51. package/lib/cjs/components/input.cjs +29 -6
  52. package/lib/cjs/components/input.ws.cjs +35 -11
  53. package/lib/cjs/components/italic.cjs +29 -6
  54. package/lib/cjs/components/italic.ws.cjs +40 -16
  55. package/lib/cjs/components/link.cjs +32 -7
  56. package/lib/cjs/components/link.ws.cjs +46 -22
  57. package/lib/cjs/components/paragraph.cjs +29 -6
  58. package/lib/cjs/components/paragraph.ws.cjs +36 -12
  59. package/lib/cjs/components/rich-text-link.cjs +33 -0
  60. package/lib/cjs/components/rich-text-link.ws.cjs +38 -0
  61. package/lib/cjs/components/span.cjs +29 -6
  62. package/lib/cjs/components/span.ws.cjs +35 -11
  63. package/lib/cjs/components/subscript.cjs +29 -6
  64. package/lib/cjs/components/subscript.ws.cjs +35 -11
  65. package/lib/cjs/components/superscript.cjs +29 -6
  66. package/lib/cjs/components/superscript.ws.cjs +35 -11
  67. package/lib/cjs/components/text-block.cjs +29 -6
  68. package/lib/cjs/components/text-block.ws.cjs +42 -18
  69. package/lib/cjs/css/breakpoints.cjs +27 -7
  70. package/lib/cjs/css/categories.cjs +218 -203
  71. package/lib/cjs/css/get-browser-style.cjs +56 -40
  72. package/lib/cjs/css/index.cjs +18 -17
  73. package/lib/cjs/db/index.cjs +17 -16
  74. package/lib/cjs/db/instance.cjs +37 -17
  75. package/lib/cjs/db/types.cjs +15 -1
  76. package/lib/cjs/index.cjs +30 -34
  77. package/lib/cjs/pubsub/create.cjs +76 -61
  78. package/lib/cjs/pubsub/index.cjs +16 -15
  79. package/lib/cjs/tree/create-elements-tree.cjs +90 -48
  80. package/lib/cjs/tree/index.cjs +18 -17
  81. package/lib/cjs/tree/root.cjs +43 -15
  82. package/lib/cjs/tree/session-storage-polyfill.cjs +60 -37
  83. package/lib/cjs/tree/wrapper-component.cjs +53 -46
  84. package/lib/cjs/user-props/all-user-props.cjs +35 -17
  85. package/lib/cjs/user-props/index.cjs +19 -18
  86. package/lib/cjs/user-props/schema.cjs +52 -31
  87. package/lib/cjs/user-props/types.cjs +15 -1
  88. package/lib/cjs/user-props/use-user-props-asset.cjs +41 -0
  89. package/lib/cjs/user-props/use-user-props.cjs +38 -30
  90. package/lib/components/__generated__/body.props.json +491 -0
  91. package/lib/components/__generated__/bold.props.json +491 -0
  92. package/lib/components/__generated__/box.props.json +508 -0
  93. package/lib/components/__generated__/button.props.json +547 -0
  94. package/lib/components/__generated__/form.props.json +531 -0
  95. package/lib/components/__generated__/heading.props.json +497 -0
  96. package/lib/components/__generated__/image.props.json +560 -0
  97. package/lib/components/__generated__/input.props.json +657 -0
  98. package/lib/components/__generated__/italic.props.json +491 -0
  99. package/lib/components/__generated__/link.props.json +547 -0
  100. package/lib/components/__generated__/paragraph.props.json +491 -0
  101. package/lib/components/__generated__/rich-text-link.props.json +547 -0
  102. package/lib/components/__generated__/span.props.json +491 -0
  103. package/lib/components/__generated__/subscript.props.json +491 -0
  104. package/lib/components/__generated__/superscript.props.json +491 -0
  105. package/lib/components/__generated__/text-block.props.json +491 -0
  106. package/lib/components/body.js +8 -2
  107. package/lib/components/body.ws.js +57 -57
  108. package/lib/components/bold.js +8 -2
  109. package/lib/components/bold.ws.js +9 -9
  110. package/lib/components/box.js +11 -3
  111. package/lib/components/box.ws.js +14 -14
  112. package/lib/components/button.js +11 -3
  113. package/lib/components/button.ws.js +10 -10
  114. package/lib/components/component-type.js +54 -21
  115. package/lib/components/form.js +8 -2
  116. package/lib/components/form.ws.js +19 -19
  117. package/lib/components/heading.js +11 -3
  118. package/lib/components/heading.ws.js +10 -10
  119. package/lib/components/image.js +17 -9
  120. package/lib/components/image.ws.js +19 -22
  121. package/lib/components/index.js +120 -15
  122. package/lib/components/input.js +8 -2
  123. package/lib/components/input.ws.js +9 -9
  124. package/lib/components/italic.js +8 -2
  125. package/lib/components/italic.ws.js +14 -14
  126. package/lib/components/link.js +11 -3
  127. package/lib/components/link.ws.js +20 -20
  128. package/lib/components/paragraph.js +8 -2
  129. package/lib/components/paragraph.ws.js +10 -10
  130. package/lib/components/rich-text-link.js +13 -0
  131. package/lib/components/rich-text-link.ws.js +12 -0
  132. package/lib/components/span.js +8 -2
  133. package/lib/components/span.ws.js +9 -9
  134. package/lib/components/subscript.js +8 -2
  135. package/lib/components/subscript.ws.js +9 -9
  136. package/lib/components/superscript.js +8 -2
  137. package/lib/components/superscript.ws.js +9 -9
  138. package/lib/components/text-block.js +8 -2
  139. package/lib/components/text-block.ws.js +16 -16
  140. package/lib/css/breakpoints.js +8 -5
  141. package/lib/css/categories.js +198 -200
  142. package/lib/css/get-browser-style.js +35 -35
  143. package/lib/db/instance.js +14 -10
  144. package/lib/db/types.js +0 -1
  145. package/lib/index.js +10 -3
  146. package/lib/pubsub/create.js +51 -55
  147. package/lib/tree/create-elements-tree.js +68 -42
  148. package/lib/tree/root.js +21 -9
  149. package/lib/tree/session-storage-polyfill.js +41 -34
  150. package/lib/tree/wrapper-component.js +34 -19
  151. package/lib/user-props/all-user-props.js +15 -13
  152. package/lib/user-props/schema.js +33 -29
  153. package/lib/user-props/types.js +0 -1
  154. package/lib/user-props/use-user-props-asset.js +21 -0
  155. package/lib/user-props/use-user-props.js +19 -27
  156. package/package.json +14 -24
  157. package/src/app/custom-components/image.tsx +62 -0
  158. package/src/app/custom-components/index.ts +17 -0
  159. package/src/app/custom-components/link.tsx +4 -0
  160. package/src/app/custom-components/rich-text-link.tsx +4 -0
  161. package/src/app/custom-components/shared/remix-link.tsx +40 -0
  162. package/src/app/handle-request.server.tsx +21 -0
  163. package/{lib/cjs/remix/index.d.ts → src/app/index.ts} +1 -1
  164. package/src/app/params.ts +13 -0
  165. package/src/app/root.tsx +27 -0
  166. package/src/components/__generated__/body.props.json +491 -0
  167. package/src/components/__generated__/bold.props.json +491 -0
  168. package/src/components/__generated__/box.props.json +508 -0
  169. package/src/components/__generated__/button.props.json +547 -0
  170. package/src/components/__generated__/form.props.json +531 -0
  171. package/src/components/__generated__/heading.props.json +497 -0
  172. package/src/components/__generated__/image.props.json +560 -0
  173. package/src/components/__generated__/input.props.json +657 -0
  174. package/src/components/__generated__/italic.props.json +491 -0
  175. package/src/components/__generated__/link.props.json +547 -0
  176. package/src/components/__generated__/paragraph.props.json +491 -0
  177. package/src/components/__generated__/rich-text-link.props.json +547 -0
  178. package/src/components/__generated__/span.props.json +491 -0
  179. package/src/components/__generated__/subscript.props.json +491 -0
  180. package/src/components/__generated__/superscript.props.json +491 -0
  181. package/src/components/__generated__/text-block.props.json +491 -0
  182. package/src/components/body.stories.tsx +11 -0
  183. package/src/components/body.tsx +10 -0
  184. package/src/components/body.ws.tsx +63 -0
  185. package/src/components/bold.stories.tsx +16 -0
  186. package/src/components/bold.tsx +10 -0
  187. package/src/components/bold.ws.tsx +12 -0
  188. package/src/components/box.stories.tsx +17 -0
  189. package/src/components/box.tsx +31 -0
  190. package/src/components/box.ws.ts +20 -0
  191. package/src/components/button.stories.tsx +17 -0
  192. package/src/components/button.tsx +14 -0
  193. package/src/components/button.ws.tsx +13 -0
  194. package/src/components/component-type.ts +89 -0
  195. package/src/components/form.stories.tsx +14 -0
  196. package/src/components/form.tsx +10 -0
  197. package/src/components/form.ws.tsx +25 -0
  198. package/src/components/heading.stories.tsx +16 -0
  199. package/src/components/heading.tsx +20 -0
  200. package/src/components/heading.ws.tsx +13 -0
  201. package/src/components/image.stories.tsx +15 -0
  202. package/src/components/image.tsx +52 -0
  203. package/src/components/image.ws.tsx +28 -0
  204. package/src/components/index.test.ts +28 -0
  205. package/src/components/index.ts +159 -0
  206. package/src/components/input.stories.tsx +14 -0
  207. package/src/components/input.tsx +11 -0
  208. package/src/components/input.ws.tsx +12 -0
  209. package/src/components/italic.stories.tsx +16 -0
  210. package/src/components/italic.tsx +10 -0
  211. package/src/components/italic.ws.tsx +20 -0
  212. package/src/components/link.stories.tsx +16 -0
  213. package/src/components/link.tsx +9 -0
  214. package/src/components/link.ws.tsx +26 -0
  215. package/src/components/paragraph.stories.tsx +16 -0
  216. package/src/components/paragraph.tsx +10 -0
  217. package/src/components/paragraph.ws.tsx +13 -0
  218. package/src/components/rich-text-link.stories.tsx +16 -0
  219. package/src/components/rich-text-link.tsx +9 -0
  220. package/src/components/rich-text-link.ws.tsx +12 -0
  221. package/src/components/span.stories.tsx +16 -0
  222. package/src/components/span.tsx +10 -0
  223. package/src/components/span.ws.tsx +12 -0
  224. package/src/components/subscript.stories.tsx +16 -0
  225. package/src/components/subscript.tsx +10 -0
  226. package/src/components/subscript.ws.tsx +12 -0
  227. package/src/components/superscript.stories.tsx +16 -0
  228. package/src/components/superscript.tsx +10 -0
  229. package/src/components/superscript.ws.tsx +12 -0
  230. package/src/components/text-block.stories.tsx +16 -0
  231. package/src/components/text-block.tsx +10 -0
  232. package/src/components/text-block.ws.tsx +22 -0
  233. package/src/css/breakpoints.ts +10 -0
  234. package/src/css/categories.ts +254 -0
  235. package/src/css/get-browser-style.ts +50 -0
  236. package/{lib/cjs/css/index.d.ts → src/css/index.ts} +0 -1
  237. package/{lib/cjs/db/index.d.ts → src/db/index.ts} +0 -1
  238. package/src/db/instance.ts +34 -0
  239. package/src/db/types.ts +18 -0
  240. package/src/index.ts +12 -0
  241. package/src/pubsub/create.ts +84 -0
  242. package/src/pubsub/index.ts +1 -0
  243. package/src/tree/create-elements-tree.tsx +102 -0
  244. package/{lib/tree/index.d.ts → src/tree/index.ts} +0 -1
  245. package/src/tree/root.ts +45 -0
  246. package/src/tree/session-storage-polyfill.tsx +50 -0
  247. package/src/tree/wrapper-component.tsx +48 -0
  248. package/src/user-props/all-user-props.ts +22 -0
  249. package/{lib/cjs/user-props/index.d.ts → src/user-props/index.ts} +0 -1
  250. package/src/user-props/schema.ts +35 -0
  251. package/src/user-props/types.ts +14 -0
  252. package/src/user-props/use-user-props-asset.ts +31 -0
  253. package/src/user-props/use-user-props.ts +30 -0
  254. package/lib/arg-types/utils.d.ts +0 -10
  255. package/lib/arg-types/utils.d.ts.map +0 -1
  256. package/lib/arg-types/utils.js +0 -83
  257. package/lib/cjs/arg-types/utils.cjs +0 -88
  258. package/lib/cjs/arg-types/utils.d.ts +0 -10
  259. package/lib/cjs/arg-types/utils.d.ts.map +0 -1
  260. package/lib/cjs/components/body.d.ts +0 -3
  261. package/lib/cjs/components/body.d.ts.map +0 -1
  262. package/lib/cjs/components/body.props.json +0 -491
  263. package/lib/cjs/components/body.stories.cjs +0 -11
  264. package/lib/cjs/components/body.stories.d.ts +0 -7
  265. package/lib/cjs/components/body.stories.d.ts.map +0 -1
  266. package/lib/cjs/components/body.ws.d.ts +0 -5
  267. package/lib/cjs/components/body.ws.d.ts.map +0 -1
  268. package/lib/cjs/components/bold.d.ts +0 -3
  269. package/lib/cjs/components/bold.d.ts.map +0 -1
  270. package/lib/cjs/components/bold.props.json +0 -491
  271. package/lib/cjs/components/bold.stories.cjs +0 -14
  272. package/lib/cjs/components/bold.stories.d.ts +0 -6
  273. package/lib/cjs/components/bold.stories.d.ts.map +0 -1
  274. package/lib/cjs/components/bold.ws.d.ts +0 -5
  275. package/lib/cjs/components/bold.ws.d.ts.map +0 -1
  276. package/lib/cjs/components/box.d.ts +0 -8
  277. package/lib/cjs/components/box.d.ts.map +0 -1
  278. package/lib/cjs/components/box.props.json +0 -508
  279. package/lib/cjs/components/box.stories.cjs +0 -12
  280. package/lib/cjs/components/box.stories.d.ts +0 -10
  281. package/lib/cjs/components/box.stories.d.ts.map +0 -1
  282. package/lib/cjs/components/box.ws.d.ts +0 -5
  283. package/lib/cjs/components/box.ws.d.ts.map +0 -1
  284. package/lib/cjs/components/button.d.ts +0 -3
  285. package/lib/cjs/components/button.d.ts.map +0 -1
  286. package/lib/cjs/components/button.props.json +0 -547
  287. package/lib/cjs/components/button.stories.cjs +0 -14
  288. package/lib/cjs/components/button.stories.d.ts +0 -6
  289. package/lib/cjs/components/button.stories.d.ts.map +0 -1
  290. package/lib/cjs/components/button.ws.d.ts +0 -5
  291. package/lib/cjs/components/button.ws.d.ts.map +0 -1
  292. package/lib/cjs/components/component-type.d.ts +0 -17
  293. package/lib/cjs/components/component-type.d.ts.map +0 -1
  294. package/lib/cjs/components/form.d.ts +0 -3
  295. package/lib/cjs/components/form.d.ts.map +0 -1
  296. package/lib/cjs/components/form.props.json +0 -531
  297. package/lib/cjs/components/form.stories.cjs +0 -12
  298. package/lib/cjs/components/form.stories.d.ts +0 -6
  299. package/lib/cjs/components/form.stories.d.ts.map +0 -1
  300. package/lib/cjs/components/form.ws.d.ts +0 -5
  301. package/lib/cjs/components/form.ws.d.ts.map +0 -1
  302. package/lib/cjs/components/heading.d.ts +0 -8
  303. package/lib/cjs/components/heading.d.ts.map +0 -1
  304. package/lib/cjs/components/heading.props.json +0 -497
  305. package/lib/cjs/components/heading.stories.cjs +0 -14
  306. package/lib/cjs/components/heading.stories.d.ts +0 -10
  307. package/lib/cjs/components/heading.stories.d.ts.map +0 -1
  308. package/lib/cjs/components/heading.ws.d.ts +0 -5
  309. package/lib/cjs/components/heading.ws.d.ts.map +0 -1
  310. package/lib/cjs/components/image.d.ts +0 -3
  311. package/lib/cjs/components/image.d.ts.map +0 -1
  312. package/lib/cjs/components/image.props.json +0 -575
  313. package/lib/cjs/components/image.stories.cjs +0 -12
  314. package/lib/cjs/components/image.stories.d.ts +0 -6
  315. package/lib/cjs/components/image.stories.d.ts.map +0 -1
  316. package/lib/cjs/components/image.ws.d.ts +0 -5
  317. package/lib/cjs/components/image.ws.d.ts.map +0 -1
  318. package/lib/cjs/components/index.d.ts +0 -16
  319. package/lib/cjs/components/index.d.ts.map +0 -1
  320. package/lib/cjs/components/index.test.cjs +0 -33
  321. package/lib/cjs/components/index.test.d.ts +0 -2
  322. package/lib/cjs/components/index.test.d.ts.map +0 -1
  323. package/lib/cjs/components/input.d.ts +0 -3
  324. package/lib/cjs/components/input.d.ts.map +0 -1
  325. package/lib/cjs/components/input.props.json +0 -657
  326. package/lib/cjs/components/input.stories.cjs +0 -12
  327. package/lib/cjs/components/input.stories.d.ts +0 -6
  328. package/lib/cjs/components/input.stories.d.ts.map +0 -1
  329. package/lib/cjs/components/input.ws.d.ts +0 -5
  330. package/lib/cjs/components/input.ws.d.ts.map +0 -1
  331. package/lib/cjs/components/italic.d.ts +0 -3
  332. package/lib/cjs/components/italic.d.ts.map +0 -1
  333. package/lib/cjs/components/italic.props.json +0 -491
  334. package/lib/cjs/components/italic.stories.cjs +0 -14
  335. package/lib/cjs/components/italic.stories.d.ts +0 -6
  336. package/lib/cjs/components/italic.stories.d.ts.map +0 -1
  337. package/lib/cjs/components/italic.ws.d.ts +0 -5
  338. package/lib/cjs/components/italic.ws.d.ts.map +0 -1
  339. package/lib/cjs/components/link.d.ts +0 -8
  340. package/lib/cjs/components/link.d.ts.map +0 -1
  341. package/lib/cjs/components/link.props.json +0 -547
  342. package/lib/cjs/components/link.stories.cjs +0 -14
  343. package/lib/cjs/components/link.stories.d.ts +0 -10
  344. package/lib/cjs/components/link.stories.d.ts.map +0 -1
  345. package/lib/cjs/components/link.ws.d.ts +0 -5
  346. package/lib/cjs/components/link.ws.d.ts.map +0 -1
  347. package/lib/cjs/components/meta.cjs +0 -40
  348. package/lib/cjs/components/meta.d.ts +0 -7479
  349. package/lib/cjs/components/meta.d.ts.map +0 -1
  350. package/lib/cjs/components/paragraph.d.ts +0 -3
  351. package/lib/cjs/components/paragraph.d.ts.map +0 -1
  352. package/lib/cjs/components/paragraph.props.json +0 -491
  353. package/lib/cjs/components/paragraph.stories.cjs +0 -14
  354. package/lib/cjs/components/paragraph.stories.d.ts +0 -6
  355. package/lib/cjs/components/paragraph.stories.d.ts.map +0 -1
  356. package/lib/cjs/components/paragraph.ws.d.ts +0 -5
  357. package/lib/cjs/components/paragraph.ws.d.ts.map +0 -1
  358. package/lib/cjs/components/span.d.ts +0 -3
  359. package/lib/cjs/components/span.d.ts.map +0 -1
  360. package/lib/cjs/components/span.props.json +0 -491
  361. package/lib/cjs/components/span.stories.cjs +0 -14
  362. package/lib/cjs/components/span.stories.d.ts +0 -6
  363. package/lib/cjs/components/span.stories.d.ts.map +0 -1
  364. package/lib/cjs/components/span.ws.d.ts +0 -5
  365. package/lib/cjs/components/span.ws.d.ts.map +0 -1
  366. package/lib/cjs/components/subscript.d.ts +0 -3
  367. package/lib/cjs/components/subscript.d.ts.map +0 -1
  368. package/lib/cjs/components/subscript.props.json +0 -491
  369. package/lib/cjs/components/subscript.stories.cjs +0 -14
  370. package/lib/cjs/components/subscript.stories.d.ts +0 -6
  371. package/lib/cjs/components/subscript.stories.d.ts.map +0 -1
  372. package/lib/cjs/components/subscript.ws.d.ts +0 -5
  373. package/lib/cjs/components/subscript.ws.d.ts.map +0 -1
  374. package/lib/cjs/components/superscript.d.ts +0 -3
  375. package/lib/cjs/components/superscript.d.ts.map +0 -1
  376. package/lib/cjs/components/superscript.props.json +0 -491
  377. package/lib/cjs/components/superscript.stories.cjs +0 -14
  378. package/lib/cjs/components/superscript.stories.d.ts +0 -6
  379. package/lib/cjs/components/superscript.stories.d.ts.map +0 -1
  380. package/lib/cjs/components/superscript.ws.d.ts +0 -5
  381. package/lib/cjs/components/superscript.ws.d.ts.map +0 -1
  382. package/lib/cjs/components/text-block.d.ts +0 -3
  383. package/lib/cjs/components/text-block.d.ts.map +0 -1
  384. package/lib/cjs/components/text-block.props.json +0 -491
  385. package/lib/cjs/components/text-block.stories.cjs +0 -14
  386. package/lib/cjs/components/text-block.stories.d.ts +0 -6
  387. package/lib/cjs/components/text-block.stories.d.ts.map +0 -1
  388. package/lib/cjs/components/text-block.ws.d.ts +0 -5
  389. package/lib/cjs/components/text-block.ws.d.ts.map +0 -1
  390. package/lib/cjs/css/breakpoints.d.ts +0 -4
  391. package/lib/cjs/css/breakpoints.d.ts.map +0 -1
  392. package/lib/cjs/css/categories.d.ts +0 -408
  393. package/lib/cjs/css/categories.d.ts.map +0 -1
  394. package/lib/cjs/css/get-browser-style.d.ts +0 -3
  395. package/lib/cjs/css/get-browser-style.d.ts.map +0 -1
  396. package/lib/cjs/css/index.d.ts.map +0 -1
  397. package/lib/cjs/db/index.d.ts.map +0 -1
  398. package/lib/cjs/db/instance.d.ts +0 -14
  399. package/lib/cjs/db/instance.d.ts.map +0 -1
  400. package/lib/cjs/db/types.d.ts +0 -17
  401. package/lib/cjs/db/types.d.ts.map +0 -1
  402. package/lib/cjs/index.d.ts +0 -9
  403. package/lib/cjs/index.d.ts.map +0 -1
  404. package/lib/cjs/pubsub/create.d.ts +0 -29
  405. package/lib/cjs/pubsub/create.d.ts.map +0 -1
  406. package/lib/cjs/pubsub/index.d.ts +0 -2
  407. package/lib/cjs/pubsub/index.d.ts.map +0 -1
  408. package/lib/cjs/remix/handle-request.server.cjs +0 -15
  409. package/lib/cjs/remix/handle-request.server.d.ts +0 -3
  410. package/lib/cjs/remix/handle-request.server.d.ts.map +0 -1
  411. package/lib/cjs/remix/index.cjs +0 -18
  412. package/lib/cjs/remix/index.d.ts.map +0 -1
  413. package/lib/cjs/remix/root.cjs +0 -13
  414. package/lib/cjs/remix/root.d.ts +0 -8
  415. package/lib/cjs/remix/root.d.ts.map +0 -1
  416. package/lib/cjs/tree/create-elements-tree.d.ts +0 -19
  417. package/lib/cjs/tree/create-elements-tree.d.ts.map +0 -1
  418. package/lib/cjs/tree/index.d.ts +0 -4
  419. package/lib/cjs/tree/index.d.ts.map +0 -1
  420. package/lib/cjs/tree/root.d.ts +0 -18
  421. package/lib/cjs/tree/root.d.ts.map +0 -1
  422. package/lib/cjs/tree/session-storage-polyfill.d.ts +0 -2
  423. package/lib/cjs/tree/session-storage-polyfill.d.ts.map +0 -1
  424. package/lib/cjs/tree/wrapper-component.d.ts +0 -12
  425. package/lib/cjs/tree/wrapper-component.d.ts.map +0 -1
  426. package/lib/cjs/user-props/all-user-props.d.ts +0 -8
  427. package/lib/cjs/user-props/all-user-props.d.ts.map +0 -1
  428. package/lib/cjs/user-props/index.d.ts.map +0 -1
  429. package/lib/cjs/user-props/schema.d.ts +0 -72
  430. package/lib/cjs/user-props/schema.d.ts.map +0 -1
  431. package/lib/cjs/user-props/types.d.ts +0 -13
  432. package/lib/cjs/user-props/types.d.ts.map +0 -1
  433. package/lib/cjs/user-props/use-user-props.d.ts +0 -12
  434. package/lib/cjs/user-props/use-user-props.d.ts.map +0 -1
  435. package/lib/components/body.d.ts +0 -3
  436. package/lib/components/body.d.ts.map +0 -1
  437. package/lib/components/body.props.json +0 -491
  438. package/lib/components/body.stories.d.ts +0 -7
  439. package/lib/components/body.stories.d.ts.map +0 -1
  440. package/lib/components/body.stories.js +0 -7
  441. package/lib/components/body.ws.d.ts +0 -5
  442. package/lib/components/body.ws.d.ts.map +0 -1
  443. package/lib/components/bold.d.ts +0 -3
  444. package/lib/components/bold.d.ts.map +0 -1
  445. package/lib/components/bold.props.json +0 -491
  446. package/lib/components/bold.stories.d.ts +0 -6
  447. package/lib/components/bold.stories.d.ts.map +0 -1
  448. package/lib/components/bold.stories.js +0 -11
  449. package/lib/components/bold.ws.d.ts +0 -5
  450. package/lib/components/bold.ws.d.ts.map +0 -1
  451. package/lib/components/box.d.ts +0 -8
  452. package/lib/components/box.d.ts.map +0 -1
  453. package/lib/components/box.props.json +0 -508
  454. package/lib/components/box.stories.d.ts +0 -10
  455. package/lib/components/box.stories.d.ts.map +0 -1
  456. package/lib/components/box.stories.js +0 -9
  457. package/lib/components/box.ws.d.ts +0 -5
  458. package/lib/components/box.ws.d.ts.map +0 -1
  459. package/lib/components/button.d.ts +0 -3
  460. package/lib/components/button.d.ts.map +0 -1
  461. package/lib/components/button.props.json +0 -547
  462. package/lib/components/button.stories.d.ts +0 -6
  463. package/lib/components/button.stories.d.ts.map +0 -1
  464. package/lib/components/button.stories.js +0 -11
  465. package/lib/components/button.ws.d.ts +0 -5
  466. package/lib/components/button.ws.d.ts.map +0 -1
  467. package/lib/components/component-type.d.ts +0 -17
  468. package/lib/components/component-type.d.ts.map +0 -1
  469. package/lib/components/form.d.ts +0 -3
  470. package/lib/components/form.d.ts.map +0 -1
  471. package/lib/components/form.props.json +0 -531
  472. package/lib/components/form.stories.d.ts +0 -6
  473. package/lib/components/form.stories.d.ts.map +0 -1
  474. package/lib/components/form.stories.js +0 -9
  475. package/lib/components/form.ws.d.ts +0 -5
  476. package/lib/components/form.ws.d.ts.map +0 -1
  477. package/lib/components/heading.d.ts +0 -8
  478. package/lib/components/heading.d.ts.map +0 -1
  479. package/lib/components/heading.props.json +0 -497
  480. package/lib/components/heading.stories.d.ts +0 -10
  481. package/lib/components/heading.stories.d.ts.map +0 -1
  482. package/lib/components/heading.stories.js +0 -11
  483. package/lib/components/heading.ws.d.ts +0 -5
  484. package/lib/components/heading.ws.d.ts.map +0 -1
  485. package/lib/components/image.d.ts +0 -3
  486. package/lib/components/image.d.ts.map +0 -1
  487. package/lib/components/image.props.json +0 -575
  488. package/lib/components/image.stories.d.ts +0 -6
  489. package/lib/components/image.stories.d.ts.map +0 -1
  490. package/lib/components/image.stories.js +0 -9
  491. package/lib/components/image.ws.d.ts +0 -5
  492. package/lib/components/image.ws.d.ts.map +0 -1
  493. package/lib/components/index.d.ts +0 -16
  494. package/lib/components/index.d.ts.map +0 -1
  495. package/lib/components/index.test.d.ts +0 -2
  496. package/lib/components/index.test.d.ts.map +0 -1
  497. package/lib/components/index.test.js +0 -8
  498. package/lib/components/input.d.ts +0 -3
  499. package/lib/components/input.d.ts.map +0 -1
  500. package/lib/components/input.props.json +0 -657
  501. package/lib/components/input.stories.d.ts +0 -6
  502. package/lib/components/input.stories.d.ts.map +0 -1
  503. package/lib/components/input.stories.js +0 -9
  504. package/lib/components/input.ws.d.ts +0 -5
  505. package/lib/components/input.ws.d.ts.map +0 -1
  506. package/lib/components/italic.d.ts +0 -3
  507. package/lib/components/italic.d.ts.map +0 -1
  508. package/lib/components/italic.props.json +0 -491
  509. package/lib/components/italic.stories.d.ts +0 -6
  510. package/lib/components/italic.stories.d.ts.map +0 -1
  511. package/lib/components/italic.stories.js +0 -11
  512. package/lib/components/italic.ws.d.ts +0 -5
  513. package/lib/components/italic.ws.d.ts.map +0 -1
  514. package/lib/components/link.d.ts +0 -8
  515. package/lib/components/link.d.ts.map +0 -1
  516. package/lib/components/link.props.json +0 -547
  517. package/lib/components/link.stories.d.ts +0 -10
  518. package/lib/components/link.stories.d.ts.map +0 -1
  519. package/lib/components/link.stories.js +0 -11
  520. package/lib/components/link.ws.d.ts +0 -5
  521. package/lib/components/link.ws.d.ts.map +0 -1
  522. package/lib/components/meta.d.ts +0 -7479
  523. package/lib/components/meta.d.ts.map +0 -1
  524. package/lib/components/meta.js +0 -34
  525. package/lib/components/paragraph.d.ts +0 -3
  526. package/lib/components/paragraph.d.ts.map +0 -1
  527. package/lib/components/paragraph.props.json +0 -491
  528. package/lib/components/paragraph.stories.d.ts +0 -6
  529. package/lib/components/paragraph.stories.d.ts.map +0 -1
  530. package/lib/components/paragraph.stories.js +0 -11
  531. package/lib/components/paragraph.ws.d.ts +0 -5
  532. package/lib/components/paragraph.ws.d.ts.map +0 -1
  533. package/lib/components/span.d.ts +0 -3
  534. package/lib/components/span.d.ts.map +0 -1
  535. package/lib/components/span.props.json +0 -491
  536. package/lib/components/span.stories.d.ts +0 -6
  537. package/lib/components/span.stories.d.ts.map +0 -1
  538. package/lib/components/span.stories.js +0 -11
  539. package/lib/components/span.ws.d.ts +0 -5
  540. package/lib/components/span.ws.d.ts.map +0 -1
  541. package/lib/components/subscript.d.ts +0 -3
  542. package/lib/components/subscript.d.ts.map +0 -1
  543. package/lib/components/subscript.props.json +0 -491
  544. package/lib/components/subscript.stories.d.ts +0 -6
  545. package/lib/components/subscript.stories.d.ts.map +0 -1
  546. package/lib/components/subscript.stories.js +0 -11
  547. package/lib/components/subscript.ws.d.ts +0 -5
  548. package/lib/components/subscript.ws.d.ts.map +0 -1
  549. package/lib/components/superscript.d.ts +0 -3
  550. package/lib/components/superscript.d.ts.map +0 -1
  551. package/lib/components/superscript.props.json +0 -491
  552. package/lib/components/superscript.stories.d.ts +0 -6
  553. package/lib/components/superscript.stories.d.ts.map +0 -1
  554. package/lib/components/superscript.stories.js +0 -11
  555. package/lib/components/superscript.ws.d.ts +0 -5
  556. package/lib/components/superscript.ws.d.ts.map +0 -1
  557. package/lib/components/text-block.d.ts +0 -3
  558. package/lib/components/text-block.d.ts.map +0 -1
  559. package/lib/components/text-block.props.json +0 -491
  560. package/lib/components/text-block.stories.d.ts +0 -6
  561. package/lib/components/text-block.stories.d.ts.map +0 -1
  562. package/lib/components/text-block.stories.js +0 -11
  563. package/lib/components/text-block.ws.d.ts +0 -5
  564. package/lib/components/text-block.ws.d.ts.map +0 -1
  565. package/lib/css/breakpoints.d.ts +0 -4
  566. package/lib/css/breakpoints.d.ts.map +0 -1
  567. package/lib/css/categories.d.ts +0 -408
  568. package/lib/css/categories.d.ts.map +0 -1
  569. package/lib/css/get-browser-style.d.ts +0 -3
  570. package/lib/css/get-browser-style.d.ts.map +0 -1
  571. package/lib/css/index.d.ts +0 -4
  572. package/lib/css/index.d.ts.map +0 -1
  573. package/lib/db/index.d.ts +0 -3
  574. package/lib/db/index.d.ts.map +0 -1
  575. package/lib/db/instance.d.ts +0 -14
  576. package/lib/db/instance.d.ts.map +0 -1
  577. package/lib/db/types.d.ts +0 -17
  578. package/lib/db/types.d.ts.map +0 -1
  579. package/lib/index.d.ts +0 -9
  580. package/lib/index.d.ts.map +0 -1
  581. package/lib/pubsub/create.d.ts +0 -29
  582. package/lib/pubsub/create.d.ts.map +0 -1
  583. package/lib/pubsub/index.d.ts +0 -2
  584. package/lib/pubsub/index.d.ts.map +0 -1
  585. package/lib/remix/handle-request.server.d.ts +0 -3
  586. package/lib/remix/handle-request.server.d.ts.map +0 -1
  587. package/lib/remix/handle-request.server.js +0 -11
  588. package/lib/remix/index.d.ts +0 -3
  589. package/lib/remix/index.d.ts.map +0 -1
  590. package/lib/remix/root.d.ts +0 -8
  591. package/lib/remix/root.d.ts.map +0 -1
  592. package/lib/remix/root.js +0 -9
  593. package/lib/tree/create-elements-tree.d.ts +0 -19
  594. package/lib/tree/create-elements-tree.d.ts.map +0 -1
  595. package/lib/tree/index.d.ts.map +0 -1
  596. package/lib/tree/root.d.ts +0 -18
  597. package/lib/tree/root.d.ts.map +0 -1
  598. package/lib/tree/session-storage-polyfill.d.ts +0 -2
  599. package/lib/tree/session-storage-polyfill.d.ts.map +0 -1
  600. package/lib/tree/wrapper-component.d.ts +0 -12
  601. package/lib/tree/wrapper-component.d.ts.map +0 -1
  602. package/lib/tsconfig.tsbuildinfo +0 -1
  603. package/lib/user-props/all-user-props.d.ts +0 -8
  604. package/lib/user-props/all-user-props.d.ts.map +0 -1
  605. package/lib/user-props/index.d.ts +0 -5
  606. package/lib/user-props/index.d.ts.map +0 -1
  607. package/lib/user-props/schema.d.ts +0 -72
  608. package/lib/user-props/schema.d.ts.map +0 -1
  609. package/lib/user-props/types.d.ts +0 -13
  610. package/lib/user-props/types.d.ts.map +0 -1
  611. package/lib/user-props/use-user-props.d.ts +0 -12
  612. package/lib/user-props/use-user-props.d.ts.map +0 -1
@@ -0,0 +1,84 @@
1
+ import mitt from "mitt";
2
+ import { useCallback, useEffect, useRef } from "react";
3
+
4
+ export const createPubsub = <PublishMap>() => {
5
+ type Action<Type extends keyof PublishMap> =
6
+ undefined extends PublishMap[Type]
7
+ ? { type: Type; payload?: PublishMap[Type] }
8
+ : { type: Type; payload: PublishMap[Type] };
9
+
10
+ // `mitt` has a somewhat annoying overload for `*` type that makes it hard to wrap in a generic context
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ const emitter = mitt<Record<any, any>>();
13
+
14
+ if (typeof window === "object") {
15
+ window.addEventListener(
16
+ "message",
17
+ (event: MessageEvent) => {
18
+ // @todo this has no type safety built in, could be anything from any source.
19
+ // we could potentially maintain a list of valid event types at runtime
20
+ // at the very least we could add a brand property or something to our events
21
+ if (typeof event.data?.type === "string") {
22
+ emitter.emit(event.data.type, event.data.payload);
23
+ }
24
+ },
25
+ false
26
+ );
27
+ }
28
+
29
+ return {
30
+ /**
31
+ * To publish a postMessage event on the current window and parent window from the iframe.
32
+ */
33
+ publish<Type extends keyof PublishMap>(action: Action<Type>) {
34
+ window.parent.postMessage(action, "*");
35
+ window.postMessage(action, "*");
36
+ },
37
+
38
+ /**
39
+ * To publish a postMessage event on the iframe and parent window from the parent window.
40
+ */
41
+ usePublish() {
42
+ const iframeRef = useRef<HTMLIFrameElement | null>(null);
43
+ const publishCallback = useCallback(
44
+ <Type extends keyof PublishMap>(action: Action<Type>) => {
45
+ const element = iframeRef.current;
46
+ if (element?.contentWindow == null) return;
47
+ element.contentWindow.postMessage(action, "*");
48
+ window.postMessage(action, "*");
49
+ },
50
+ [iframeRef]
51
+ );
52
+ return [publishCallback, iframeRef] as const;
53
+ },
54
+
55
+ /**
56
+ * To subscribe a message event on the current window.
57
+ */
58
+ useSubscribe<Type extends keyof PublishMap>(
59
+ type: Type,
60
+ onAction: (payload: PublishMap[Type]) => void
61
+ ) {
62
+ useEffect(() => {
63
+ emitter.on(type, onAction);
64
+ return () => {
65
+ emitter.off(type, onAction);
66
+ };
67
+ }, [type, onAction]);
68
+ },
69
+
70
+ useSubscribeAll(
71
+ onAction: <Type extends keyof PublishMap>(
72
+ type: Type,
73
+ payload: PublishMap[Type]
74
+ ) => void
75
+ ) {
76
+ useEffect(() => {
77
+ emitter.on("*", onAction);
78
+ return () => {
79
+ emitter.off("*", onAction);
80
+ };
81
+ }, [onAction]);
82
+ },
83
+ };
84
+ };
@@ -0,0 +1 @@
1
+ export * from "./create";
@@ -0,0 +1,102 @@
1
+ import { type ComponentProps, Fragment } from "react";
2
+ import type { Instance } from "../db";
3
+ import { WrapperComponent } from "./wrapper-component";
4
+ import { Scripts, ScrollRestoration } from "@remix-run/react";
5
+ import { SessionStoragePolyfill } from "./session-storage-polyfill";
6
+
7
+ export type ChildrenUpdates = Array<
8
+ | string
9
+ | {
10
+ id: undefined | Instance["id"];
11
+ component: Instance["component"];
12
+ children: ChildrenUpdates;
13
+ }
14
+ >;
15
+
16
+ export type OnChangeChildren = (change: {
17
+ instanceId: Instance["id"];
18
+ updates: ChildrenUpdates;
19
+ }) => void;
20
+
21
+ export const createElementsTree = ({
22
+ sandbox,
23
+ instance,
24
+ Component,
25
+ onChangeChildren,
26
+ }: {
27
+ sandbox?: boolean;
28
+ instance: Instance;
29
+ Component: (props: ComponentProps<typeof WrapperComponent>) => JSX.Element;
30
+ onChangeChildren?: OnChangeChildren;
31
+ }) => {
32
+ const children = createInstanceChildrenElements({
33
+ Component,
34
+ children: instance.children,
35
+ onChangeChildren,
36
+ });
37
+ const body = createInstanceElement({
38
+ Component,
39
+ instance,
40
+ children: [
41
+ <Fragment key="children">
42
+ {children}
43
+ {sandbox && <SessionStoragePolyfill />}
44
+ <ScrollRestoration />
45
+ <Scripts />
46
+ </Fragment>,
47
+ ],
48
+ });
49
+ return body;
50
+ };
51
+
52
+ const createInstanceChildrenElements = ({
53
+ children,
54
+ Component,
55
+ onChangeChildren,
56
+ }: {
57
+ children: Instance["children"];
58
+ Component: (props: ComponentProps<typeof WrapperComponent>) => JSX.Element;
59
+ onChangeChildren?: OnChangeChildren;
60
+ }) => {
61
+ const elements = [];
62
+ for (const child of children) {
63
+ if (typeof child === "string") {
64
+ elements.push(child);
65
+ continue;
66
+ }
67
+ const children = createInstanceChildrenElements({
68
+ children: child.children,
69
+ Component,
70
+ onChangeChildren,
71
+ });
72
+ const element = createInstanceElement({
73
+ instance: child,
74
+ Component,
75
+ onChangeChildren,
76
+ children,
77
+ });
78
+ elements.push(element);
79
+ }
80
+ return elements;
81
+ };
82
+
83
+ const createInstanceElement = ({
84
+ Component,
85
+ instance,
86
+ children = [],
87
+ onChangeChildren,
88
+ }: {
89
+ instance: Instance;
90
+ Component: (props: ComponentProps<typeof WrapperComponent>) => JSX.Element;
91
+ onChangeChildren?: OnChangeChildren;
92
+ children?: Array<JSX.Element | string>;
93
+ }) => {
94
+ const props = {
95
+ instance,
96
+ children,
97
+ key: instance.id,
98
+ onChangeChildren,
99
+ };
100
+
101
+ return <Component {...props} />;
102
+ };
@@ -1,4 +1,3 @@
1
1
  export * from "./create-elements-tree";
2
2
  export * from "./root";
3
3
  export * from "./wrapper-component";
4
- //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,45 @@
1
+ import { useAllUserProps } from "../user-props/";
2
+ import type { Tree, InstanceProps } from "../db";
3
+ import { createElementsTree } from "./create-elements-tree";
4
+ import { WrapperComponent } from "./wrapper-component";
5
+ import type { Asset } from "@webstudio-is/asset-uploader";
6
+ import { type ComponentProps } from "react";
7
+ import type { Breakpoint } from "@webstudio-is/css-data";
8
+ import { registerComponents } from "../components";
9
+ import { customComponents as defaultCustomComponents } from "../app/custom-components";
10
+ import { setParams, type Params } from "../app/params";
11
+ import type { DesignToken } from "@webstudio-is/design-tokens";
12
+
13
+ export type Data = {
14
+ tree: Tree | null;
15
+ breakpoints: Array<Breakpoint>;
16
+ designTokens: Array<DesignToken>;
17
+ props: Array<InstanceProps>;
18
+ assets: Array<Asset>;
19
+ params?: Params;
20
+ };
21
+
22
+ type RootProps = {
23
+ data: Data;
24
+ Component?: (props: ComponentProps<typeof WrapperComponent>) => JSX.Element;
25
+ customComponents?: Parameters<typeof registerComponents>[0];
26
+ };
27
+
28
+ export const InstanceRoot = ({
29
+ data,
30
+ Component,
31
+ customComponents = defaultCustomComponents,
32
+ }: RootProps): JSX.Element | null => {
33
+ if (data.tree === null) {
34
+ throw new Error("Tree is null");
35
+ }
36
+ useAllUserProps(data.props);
37
+ setParams(data.params ?? null);
38
+
39
+ registerComponents(customComponents);
40
+
41
+ return createElementsTree({
42
+ instance: data.tree.root,
43
+ Component: Component ?? WrapperComponent,
44
+ });
45
+ };
@@ -0,0 +1,50 @@
1
+ // This is a temporary work around for https://github.com/remix-run/remix/issues/3659
2
+
3
+ // The code is based on this discussion https://bugs.chromium.org/p/chromium/issues/detail?id=357625
4
+ const polyfill = function () {
5
+ try {
6
+ const key = "__session_storage_availability_test__";
7
+ sessionStorage.setItem(key, "test"); // test
8
+ sessionStorage.removeItem(key); // cleanup
9
+ } catch (error) {
10
+ alert(
11
+ 'It looks like you have disabled cookies in your browser. Webstudio designer may not work properly.\n\nTo enable cookies, go to "Setting" > "Privacy and security" > "Cookies and other site data", and make sure neither "Block all cookies" nor "Block third-party cookies" are selected.\n\nRead more at https://support.google.com/chrome/answer/95647'
12
+ );
13
+ const data = new Map();
14
+ Object.defineProperty(window, "sessionStorage", {
15
+ value: {
16
+ setItem: (key: string, val: unknown) => {
17
+ // eslint-disable-next-line no-console
18
+ console.warn(
19
+ `Session storage is unavailable due to Error "${
20
+ (error as Error).message
21
+ }". A polyfill is used to set value of "${key}". The value will be lost when the page is reloaded.`
22
+ );
23
+ data.set(key, String(val));
24
+ },
25
+ getItem: (key: string) => {
26
+ // eslint-disable-next-line no-console
27
+ console.warn(
28
+ `Session storage is unavailable due to Error "${
29
+ (error as Error).message
30
+ }". A polyfill is used to get value of "${key}". The value will be undefined if the page was reloaded after it was set.`
31
+ );
32
+ return data.get(key);
33
+ },
34
+ removeItem: (key: string) => {
35
+ data.delete(key);
36
+ },
37
+ clear: () => {
38
+ data.clear();
39
+ },
40
+ },
41
+ });
42
+ }
43
+ }.toString();
44
+
45
+ export const SessionStoragePolyfill = () => (
46
+ <script
47
+ dangerouslySetInnerHTML={{ __html: `(${polyfill})()` }}
48
+ suppressHydrationWarning
49
+ />
50
+ );
@@ -0,0 +1,48 @@
1
+ import { Fragment } from "react";
2
+ import type { Instance } from "../db";
3
+ import { getComponent } from "../components";
4
+ import { useUserProps } from "../user-props/use-user-props";
5
+ import type { OnChangeChildren } from "./create-elements-tree";
6
+
7
+ const renderText = (text: string): Array<JSX.Element> => {
8
+ const lines = text.split("\n");
9
+ return lines.map((line, index) => (
10
+ <Fragment key={index}>
11
+ {line}
12
+ {index < lines.length - 1 ? <br /> : null}
13
+ </Fragment>
14
+ ));
15
+ };
16
+
17
+ export const renderWrapperComponentChildren = (
18
+ children: Array<JSX.Element | string> | undefined
19
+ ): Array<JSX.Element | string | Array<JSX.Element | string>> | undefined => {
20
+ // Some elements like input can't have children
21
+ // @todo needs to be made impossible to drag element into input
22
+ if (children === undefined || children.length === 0) return;
23
+ return children.map((child) => {
24
+ return typeof child === "string" ? renderText(child) : child;
25
+ });
26
+ };
27
+
28
+ type WrapperComponentProps = {
29
+ instance: Instance;
30
+ children: Array<JSX.Element | string>;
31
+ onChangeChildren?: OnChangeChildren;
32
+ };
33
+
34
+ export const WrapperComponent = ({
35
+ instance,
36
+ onChangeChildren, // prevent it from passing to sdk component
37
+ children,
38
+ ...rest
39
+ }: WrapperComponentProps) => {
40
+ const Component = getComponent(instance.component);
41
+ const userProps = useUserProps(instance.id);
42
+ const props = { ...userProps, ...rest, [idAttribute]: instance.id };
43
+ return (
44
+ <Component {...props}>{renderWrapperComponentChildren(children)}</Component>
45
+ );
46
+ };
47
+
48
+ export const idAttribute = "data-ws-id";
@@ -0,0 +1,22 @@
1
+ import { useRef } from "react";
2
+ import { createValueContainer, useValue } from "react-nano-state";
3
+ import type { InstanceProps, Instance } from "../db";
4
+
5
+ export type AllUserProps = { [id: Instance["id"]]: InstanceProps };
6
+
7
+ export const allUserPropsContainer = createValueContainer<AllUserProps>({});
8
+
9
+ export const useAllUserProps = (initialUserProps?: Array<InstanceProps>) => {
10
+ // @todo ssr workaround for https://github.com/webstudio-is/webstudio-designer/issues/213
11
+ const ref = useRef(false);
12
+ if (ref.current === false && initialUserProps !== undefined) {
13
+ const propsMap: AllUserProps = {};
14
+ for (const props of initialUserProps) {
15
+ propsMap[props.instanceId] = props;
16
+ }
17
+ //We don't need to trigger rerender when setting the initial value
18
+ allUserPropsContainer.value = propsMap;
19
+ ref.current = true;
20
+ }
21
+ return useValue(allUserPropsContainer);
22
+ };
@@ -2,4 +2,3 @@ export * from "./all-user-props";
2
2
  export * from "./use-user-props";
3
3
  export * from "./types";
4
4
  export * from "./schema";
5
- //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,35 @@
1
+ import { z } from "zod";
2
+ import { Asset } from "@webstudio-is/asset-uploader";
3
+
4
+ const baseUserProps = {
5
+ id: z.string(),
6
+ prop: z.string(),
7
+ required: z.optional(z.boolean()),
8
+ };
9
+
10
+ export const UserProp = z.discriminatedUnion("type", [
11
+ z.object({
12
+ ...baseUserProps,
13
+ type: z.literal("number"),
14
+ value: z.number(),
15
+ }),
16
+ z.object({
17
+ ...baseUserProps,
18
+ type: z.literal("string"),
19
+ value: z.string(),
20
+ }),
21
+ z.object({
22
+ ...baseUserProps,
23
+ type: z.literal("boolean"),
24
+ value: z.boolean(),
25
+ }),
26
+ z.object({
27
+ ...baseUserProps,
28
+ type: z.literal("asset"),
29
+ value: Asset,
30
+ }),
31
+ ]);
32
+
33
+ export const UserProps = z.array(UserProp);
34
+
35
+ export type UserProp = z.infer<typeof UserProp>;
@@ -0,0 +1,14 @@
1
+ import type { InstanceProps, Instance } from "../db";
2
+ import { UserProp } from "./schema";
3
+
4
+ export type UserPropsUpdates = {
5
+ treeId: InstanceProps["treeId"];
6
+ propsId: InstanceProps["id"];
7
+ instanceId: Instance["id"];
8
+ updates: Array<UserProp>;
9
+ };
10
+
11
+ export type DeleteProp = {
12
+ instanceId: Instance["id"];
13
+ propId: UserProp["id"];
14
+ };
@@ -0,0 +1,31 @@
1
+ import { useMemo } from "react";
2
+ import { type Instance } from "../db";
3
+ import { type UserProp } from "./schema";
4
+ import { useAllUserProps } from "./all-user-props";
5
+ import type { Asset } from "@webstudio-is/asset-uploader";
6
+
7
+ /**
8
+ * Get asset for prop, like src on the Image component
9
+ */
10
+ export const useUserPropsAsset = (
11
+ instanceId: Instance["id"],
12
+ propName: UserProp["prop"]
13
+ ): Asset | undefined => {
14
+ const [allUserProps] = useAllUserProps();
15
+
16
+ const propsData = allUserProps[instanceId];
17
+ const asset = useMemo(() => {
18
+ if (propsData == null) return undefined;
19
+ const prop = propsData.props.find((prop) => prop.prop === propName);
20
+
21
+ if (prop == null) return undefined;
22
+
23
+ if (prop.type === "asset") {
24
+ return prop.value;
25
+ }
26
+
27
+ return undefined;
28
+ }, [propName, propsData]);
29
+
30
+ return asset;
31
+ };
@@ -0,0 +1,30 @@
1
+ import { useMemo } from "react";
2
+ import { type Instance } from "../db";
3
+ import { type UserProp } from "./schema";
4
+ import { useAllUserProps } from "./all-user-props";
5
+
6
+ type UserProps = { [prop: UserProp["prop"]]: string | number | boolean };
7
+
8
+ /**
9
+ * User props mapped in prop:value format,
10
+ * up to date with props panel.
11
+ */
12
+ export const useUserProps = (instanceId: Instance["id"]) => {
13
+ const [allUserProps] = useAllUserProps();
14
+
15
+ const propsData = allUserProps[instanceId];
16
+ const props = useMemo(() => {
17
+ if (propsData == null) return {};
18
+ const result: UserProps = {};
19
+
20
+ for (const userProp of propsData.props) {
21
+ if (userProp.type !== "asset") {
22
+ result[userProp.prop] = userProp.value;
23
+ }
24
+ }
25
+
26
+ return result;
27
+ }, [propsData]);
28
+
29
+ return props;
30
+ };
@@ -1,10 +0,0 @@
1
- import { PropItem } from "react-docgen-typescript";
2
- export declare type FilterPredicate = (prop: PropItem) => boolean;
3
- export declare const propsToArgTypes: (props: Record<string, PropItem>, filter?: FilterPredicate) => Record<string, any>;
4
- export declare const getArgType: (propItem: any) => {
5
- type: string;
6
- defaultValue: any;
7
- options: any;
8
- required: any;
9
- } | null | undefined;
10
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/arg-types/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,oBAAY,eAAe,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAa1D,eAAO,MAAM,eAAe,UACnB,OAAO,MAAM,EAAE,QAAQ,CAAC,WACtB,eAAe,wBAqBzB,CAAC;AAQF,eAAO,MAAM,UAAU,aAAc,GAAG;;;;;oBAqDvC,CAAC"}
@@ -1,83 +0,0 @@
1
- const validAttributes = (prop) => {
2
- if (prop.parent) {
3
- // Pass *HTML (both ButtonHTMLAttributes and HTMLAttributes), Aria, and SVG attributes through
4
- const matcher = /.?(HTML|SVG|Aria)Attributes/;
5
- // TODO: Add a test for this
6
- return prop.parent.name.match(matcher);
7
- }
8
- // Always allow component's own props
9
- return true;
10
- };
11
- export const propsToArgTypes = (props, filter) => {
12
- const filterFn = filter ?? validAttributes;
13
- const entries = Object.entries(props);
14
- return entries.reduce((result, current) => {
15
- // @todo need halp
16
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
- const [propName, prop] = current;
18
- // Filter out props
19
- if (!filterFn(prop)) {
20
- return result;
21
- }
22
- const argType = getArgType(prop);
23
- if (argType != null) {
24
- result[propName] = argType;
25
- }
26
- return result;
27
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
- }, {});
29
- };
30
- const matchers = {
31
- color: new RegExp("(background|color)", "i"),
32
- date: /Date$/,
33
- };
34
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
- export const getArgType = (propItem) => {
36
- const { type, name } = propItem;
37
- if (!type) {
38
- return undefined;
39
- }
40
- const overrides = {
41
- defaultValue: propItem.defaultValue?.value ?? null,
42
- options: propItem.options,
43
- required: propItem.required,
44
- };
45
- // args that end with background or color e.g. iconColor
46
- if (matchers.color && matchers.color.test(name)) {
47
- const controlType = propItem.type.name;
48
- if (controlType === "string") {
49
- return { ...overrides, type: "color" };
50
- }
51
- }
52
- // args that end with date e.g. purchaseDate
53
- if (matchers.date && matchers.date.test(name)) {
54
- return { ...overrides, type: "date" };
55
- }
56
- switch (type?.name) {
57
- case "array":
58
- return { ...overrides, type: "object" };
59
- case "boolean":
60
- case "Booleanish":
61
- return { ...overrides, type: "boolean" };
62
- case "string":
63
- return { ...overrides, type: "text" };
64
- case "number":
65
- return { ...overrides, type: "number" };
66
- case "enum": {
67
- const { value } = type;
68
- // Remove additional quotes from enum values
69
- // @ts-expect-error Original type has `any` type
70
- const values = value.map((val) => val.value.replace(/^"(.+)"$/, "$1"));
71
- return {
72
- ...overrides,
73
- type: values?.length <= 5 ? "radio" : "select",
74
- options: values,
75
- };
76
- }
77
- case "function":
78
- case "symbol":
79
- return null;
80
- default:
81
- return { ...overrides, type: "text" };
82
- }
83
- };
@@ -1,88 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getArgType = exports.propsToArgTypes = void 0;
4
- const validAttributes = (prop) => {
5
- if (prop.parent) {
6
- // Pass *HTML (both ButtonHTMLAttributes and HTMLAttributes), Aria, and SVG attributes through
7
- const matcher = /.?(HTML|SVG|Aria)Attributes/;
8
- // TODO: Add a test for this
9
- return prop.parent.name.match(matcher);
10
- }
11
- // Always allow component's own props
12
- return true;
13
- };
14
- const propsToArgTypes = (props, filter) => {
15
- const filterFn = filter ?? validAttributes;
16
- const entries = Object.entries(props);
17
- return entries.reduce((result, current) => {
18
- // @todo need halp
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
- const [propName, prop] = current;
21
- // Filter out props
22
- if (!filterFn(prop)) {
23
- return result;
24
- }
25
- const argType = (0, exports.getArgType)(prop);
26
- if (argType != null) {
27
- result[propName] = argType;
28
- }
29
- return result;
30
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
- }, {});
32
- };
33
- exports.propsToArgTypes = propsToArgTypes;
34
- const matchers = {
35
- color: new RegExp("(background|color)", "i"),
36
- date: /Date$/,
37
- };
38
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
- const getArgType = (propItem) => {
40
- const { type, name } = propItem;
41
- if (!type) {
42
- return undefined;
43
- }
44
- const overrides = {
45
- defaultValue: propItem.defaultValue?.value ?? null,
46
- options: propItem.options,
47
- required: propItem.required,
48
- };
49
- // args that end with background or color e.g. iconColor
50
- if (matchers.color && matchers.color.test(name)) {
51
- const controlType = propItem.type.name;
52
- if (controlType === "string") {
53
- return { ...overrides, type: "color" };
54
- }
55
- }
56
- // args that end with date e.g. purchaseDate
57
- if (matchers.date && matchers.date.test(name)) {
58
- return { ...overrides, type: "date" };
59
- }
60
- switch (type?.name) {
61
- case "array":
62
- return { ...overrides, type: "object" };
63
- case "boolean":
64
- case "Booleanish":
65
- return { ...overrides, type: "boolean" };
66
- case "string":
67
- return { ...overrides, type: "text" };
68
- case "number":
69
- return { ...overrides, type: "number" };
70
- case "enum": {
71
- const { value } = type;
72
- // Remove additional quotes from enum values
73
- // @ts-expect-error Original type has `any` type
74
- const values = value.map((val) => val.value.replace(/^"(.+)"$/, "$1"));
75
- return {
76
- ...overrides,
77
- type: values?.length <= 5 ? "radio" : "select",
78
- options: values,
79
- };
80
- }
81
- case "function":
82
- case "symbol":
83
- return null;
84
- default:
85
- return { ...overrides, type: "text" };
86
- }
87
- };
88
- exports.getArgType = getArgType;
@@ -1,10 +0,0 @@
1
- import { PropItem } from "react-docgen-typescript";
2
- export declare type FilterPredicate = (prop: PropItem) => boolean;
3
- export declare const propsToArgTypes: (props: Record<string, PropItem>, filter?: FilterPredicate) => Record<string, any>;
4
- export declare const getArgType: (propItem: any) => {
5
- type: string;
6
- defaultValue: any;
7
- options: any;
8
- required: any;
9
- } | null | undefined;
10
- //# sourceMappingURL=utils.d.ts.map