@webstudio-is/react-sdk 0.9.0 → 0.10.1

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 (585) hide show
  1. package/lib/app/custom-components/image.js +37 -13
  2. package/lib/app/custom-components/index.js +18 -1
  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 +16 -8
  7. package/lib/app/params.js +7 -3
  8. package/lib/app/root.js +37 -6
  9. package/lib/cjs/app/custom-components/image.cjs +62 -24
  10. package/lib/cjs/app/custom-components/index.cjs +35 -24
  11. package/lib/cjs/app/custom-components/link.cjs +26 -0
  12. package/lib/cjs/app/custom-components/rich-text-link.cjs +26 -0
  13. package/lib/cjs/app/custom-components/shared/remix-link.cjs +49 -0
  14. package/lib/cjs/app/handle-request.server.cjs +36 -12
  15. package/lib/cjs/app/index.cjs +18 -17
  16. package/lib/cjs/app/params.cjs +24 -5
  17. package/lib/cjs/app/root.cjs +58 -11
  18. package/lib/cjs/components/__generated__/body.props.json +489 -489
  19. package/lib/cjs/components/__generated__/bold.props.json +489 -489
  20. package/lib/cjs/components/__generated__/box.props.json +506 -506
  21. package/lib/cjs/components/__generated__/button.props.json +545 -545
  22. package/lib/cjs/components/__generated__/form.props.json +529 -529
  23. package/lib/cjs/components/__generated__/heading.props.json +495 -495
  24. package/lib/cjs/components/__generated__/image.props.json +558 -558
  25. package/lib/cjs/components/__generated__/input.props.json +655 -655
  26. package/lib/cjs/components/__generated__/italic.props.json +489 -489
  27. package/lib/cjs/components/__generated__/link.props.json +545 -545
  28. package/lib/cjs/components/__generated__/paragraph.props.json +489 -489
  29. package/lib/cjs/components/__generated__/rich-text-link.props.json +547 -0
  30. package/lib/cjs/components/__generated__/span.props.json +489 -489
  31. package/lib/cjs/components/__generated__/subscript.props.json +489 -489
  32. package/lib/cjs/components/__generated__/superscript.props.json +489 -489
  33. package/lib/cjs/components/__generated__/text-block.props.json +489 -489
  34. package/lib/cjs/components/body.cjs +29 -6
  35. package/lib/cjs/components/body.ws.cjs +83 -59
  36. package/lib/cjs/components/bold.cjs +29 -6
  37. package/lib/cjs/components/bold.ws.cjs +35 -11
  38. package/lib/cjs/components/box.cjs +29 -7
  39. package/lib/cjs/components/box.ws.cjs +40 -16
  40. package/lib/cjs/components/button.cjs +33 -8
  41. package/lib/cjs/components/button.ws.cjs +36 -12
  42. package/lib/cjs/components/component-type.cjs +77 -27
  43. package/lib/cjs/components/form.cjs +29 -6
  44. package/lib/cjs/components/form.ws.cjs +45 -21
  45. package/lib/cjs/components/heading.cjs +29 -7
  46. package/lib/cjs/components/heading.ws.cjs +36 -12
  47. package/lib/cjs/components/image.cjs +39 -14
  48. package/lib/cjs/components/image.ws.cjs +45 -24
  49. package/lib/cjs/components/index.cjs +133 -67
  50. package/lib/cjs/components/input.cjs +29 -6
  51. package/lib/cjs/components/input.ws.cjs +35 -11
  52. package/lib/cjs/components/italic.cjs +29 -6
  53. package/lib/cjs/components/italic.ws.cjs +40 -16
  54. package/lib/cjs/components/link.cjs +32 -7
  55. package/lib/cjs/components/link.ws.cjs +46 -22
  56. package/lib/cjs/components/paragraph.cjs +29 -6
  57. package/lib/cjs/components/paragraph.ws.cjs +36 -12
  58. package/lib/cjs/components/rich-text-link.cjs +33 -0
  59. package/lib/cjs/components/rich-text-link.ws.cjs +38 -0
  60. package/lib/cjs/components/span.cjs +29 -6
  61. package/lib/cjs/components/span.ws.cjs +35 -11
  62. package/lib/cjs/components/subscript.cjs +29 -6
  63. package/lib/cjs/components/subscript.ws.cjs +35 -11
  64. package/lib/cjs/components/superscript.cjs +29 -6
  65. package/lib/cjs/components/superscript.ws.cjs +35 -11
  66. package/lib/cjs/components/text-block.cjs +29 -6
  67. package/lib/cjs/components/text-block.ws.cjs +42 -18
  68. package/lib/cjs/css/breakpoints.cjs +27 -7
  69. package/lib/cjs/css/categories.cjs +218 -203
  70. package/lib/cjs/css/get-browser-style.cjs +59 -41
  71. package/lib/cjs/css/index.cjs +18 -17
  72. package/lib/cjs/db/index.cjs +17 -16
  73. package/lib/cjs/db/instance.cjs +37 -17
  74. package/lib/cjs/db/types.cjs +15 -1
  75. package/lib/cjs/index.cjs +30 -35
  76. package/lib/cjs/pubsub/create.cjs +77 -61
  77. package/lib/cjs/pubsub/index.cjs +16 -15
  78. package/lib/cjs/tree/create-elements-tree.cjs +90 -48
  79. package/lib/cjs/tree/index.cjs +18 -17
  80. package/lib/cjs/tree/root.cjs +42 -42
  81. package/lib/cjs/tree/session-storage-polyfill.cjs +60 -37
  82. package/lib/cjs/tree/wrapper-component.cjs +55 -24
  83. package/lib/cjs/user-props/all-user-props.cjs +35 -17
  84. package/lib/cjs/user-props/index.cjs +19 -18
  85. package/lib/cjs/user-props/schema.cjs +52 -31
  86. package/lib/cjs/user-props/types.cjs +15 -1
  87. package/lib/cjs/user-props/use-user-props-asset.cjs +40 -19
  88. package/lib/cjs/user-props/use-user-props.cjs +39 -20
  89. package/lib/components/__generated__/body.props.json +489 -489
  90. package/lib/components/__generated__/bold.props.json +489 -489
  91. package/lib/components/__generated__/box.props.json +506 -506
  92. package/lib/components/__generated__/button.props.json +545 -545
  93. package/lib/components/__generated__/form.props.json +529 -529
  94. package/lib/components/__generated__/heading.props.json +495 -495
  95. package/lib/components/__generated__/image.props.json +558 -558
  96. package/lib/components/__generated__/input.props.json +655 -655
  97. package/lib/components/__generated__/italic.props.json +489 -489
  98. package/lib/components/__generated__/link.props.json +545 -545
  99. package/lib/components/__generated__/paragraph.props.json +489 -489
  100. package/lib/components/__generated__/rich-text-link.props.json +547 -0
  101. package/lib/components/__generated__/span.props.json +489 -489
  102. package/lib/components/__generated__/subscript.props.json +489 -489
  103. package/lib/components/__generated__/superscript.props.json +489 -489
  104. package/lib/components/__generated__/text-block.props.json +489 -489
  105. package/lib/components/body.js +8 -2
  106. package/lib/components/body.ws.js +57 -57
  107. package/lib/components/bold.js +8 -2
  108. package/lib/components/bold.ws.js +9 -9
  109. package/lib/components/box.js +11 -3
  110. package/lib/components/box.ws.js +14 -14
  111. package/lib/components/button.js +11 -3
  112. package/lib/components/button.ws.js +10 -10
  113. package/lib/components/component-type.js +54 -21
  114. package/lib/components/form.js +8 -2
  115. package/lib/components/form.ws.js +19 -19
  116. package/lib/components/heading.js +11 -3
  117. package/lib/components/heading.ws.js +10 -10
  118. package/lib/components/image.js +17 -9
  119. package/lib/components/image.ws.js +19 -22
  120. package/lib/components/index.js +111 -61
  121. package/lib/components/input.js +8 -2
  122. package/lib/components/input.ws.js +9 -9
  123. package/lib/components/italic.js +8 -2
  124. package/lib/components/italic.ws.js +14 -14
  125. package/lib/components/link.js +11 -3
  126. package/lib/components/link.ws.js +20 -20
  127. package/lib/components/paragraph.js +8 -2
  128. package/lib/components/paragraph.ws.js +10 -10
  129. package/lib/components/rich-text-link.js +13 -0
  130. package/lib/components/rich-text-link.ws.js +12 -0
  131. package/lib/components/span.js +8 -2
  132. package/lib/components/span.ws.js +9 -9
  133. package/lib/components/subscript.js +8 -2
  134. package/lib/components/subscript.ws.js +9 -9
  135. package/lib/components/superscript.js +8 -2
  136. package/lib/components/superscript.ws.js +9 -9
  137. package/lib/components/text-block.js +8 -2
  138. package/lib/components/text-block.ws.js +16 -16
  139. package/lib/css/breakpoints.js +8 -5
  140. package/lib/css/categories.js +198 -200
  141. package/lib/css/get-browser-style.js +38 -36
  142. package/lib/db/instance.js +14 -10
  143. package/lib/db/types.js +0 -1
  144. package/lib/index.js +8 -2
  145. package/lib/pubsub/create.js +52 -55
  146. package/lib/tree/create-elements-tree.js +68 -42
  147. package/lib/tree/root.js +19 -12
  148. package/lib/tree/session-storage-polyfill.js +41 -34
  149. package/lib/tree/wrapper-component.js +34 -18
  150. package/lib/user-props/all-user-props.js +15 -13
  151. package/lib/user-props/schema.js +33 -29
  152. package/lib/user-props/types.js +0 -1
  153. package/lib/user-props/use-user-props-asset.js +20 -15
  154. package/lib/user-props/use-user-props.js +19 -16
  155. package/package.json +11 -19
  156. package/src/app/custom-components/image.tsx +65 -0
  157. package/src/app/custom-components/index.ts +17 -0
  158. package/src/app/custom-components/link.tsx +4 -0
  159. package/src/app/custom-components/rich-text-link.tsx +4 -0
  160. package/src/app/custom-components/shared/remix-link.tsx +40 -0
  161. package/src/app/handle-request.server.tsx +21 -0
  162. package/{lib/app/index.d.ts → src/app/index.ts} +0 -1
  163. package/src/app/params.ts +13 -0
  164. package/src/app/root.tsx +27 -0
  165. package/src/components/__generated__/body.props.json +491 -0
  166. package/src/components/__generated__/bold.props.json +491 -0
  167. package/src/components/__generated__/box.props.json +508 -0
  168. package/src/components/__generated__/button.props.json +547 -0
  169. package/src/components/__generated__/form.props.json +531 -0
  170. package/src/components/__generated__/heading.props.json +497 -0
  171. package/src/components/__generated__/image.props.json +560 -0
  172. package/src/components/__generated__/input.props.json +657 -0
  173. package/src/components/__generated__/italic.props.json +491 -0
  174. package/src/components/__generated__/link.props.json +547 -0
  175. package/src/components/__generated__/paragraph.props.json +491 -0
  176. package/src/components/__generated__/rich-text-link.props.json +547 -0
  177. package/src/components/__generated__/span.props.json +491 -0
  178. package/src/components/__generated__/subscript.props.json +491 -0
  179. package/src/components/__generated__/superscript.props.json +491 -0
  180. package/src/components/__generated__/text-block.props.json +491 -0
  181. package/src/components/body.stories.tsx +11 -0
  182. package/src/components/body.tsx +10 -0
  183. package/src/components/body.ws.tsx +63 -0
  184. package/src/components/bold.stories.tsx +16 -0
  185. package/src/components/bold.tsx +10 -0
  186. package/src/components/bold.ws.tsx +12 -0
  187. package/src/components/box.stories.tsx +17 -0
  188. package/src/components/box.tsx +31 -0
  189. package/src/components/box.ws.ts +20 -0
  190. package/src/components/button.stories.tsx +17 -0
  191. package/src/components/button.tsx +14 -0
  192. package/src/components/button.ws.tsx +13 -0
  193. package/src/components/component-type.ts +89 -0
  194. package/src/components/form.stories.tsx +14 -0
  195. package/src/components/form.tsx +10 -0
  196. package/src/components/form.ws.tsx +25 -0
  197. package/src/components/heading.stories.tsx +16 -0
  198. package/src/components/heading.tsx +20 -0
  199. package/src/components/heading.ws.tsx +13 -0
  200. package/src/components/image.stories.tsx +15 -0
  201. package/src/components/image.tsx +52 -0
  202. package/src/components/image.ws.tsx +28 -0
  203. package/src/components/index.test.ts +28 -0
  204. package/src/components/index.ts +159 -0
  205. package/src/components/input.stories.tsx +14 -0
  206. package/src/components/input.tsx +11 -0
  207. package/src/components/input.ws.tsx +12 -0
  208. package/src/components/italic.stories.tsx +16 -0
  209. package/src/components/italic.tsx +10 -0
  210. package/src/components/italic.ws.tsx +20 -0
  211. package/src/components/link.stories.tsx +16 -0
  212. package/src/components/link.tsx +9 -0
  213. package/src/components/link.ws.tsx +26 -0
  214. package/src/components/paragraph.stories.tsx +16 -0
  215. package/src/components/paragraph.tsx +10 -0
  216. package/src/components/paragraph.ws.tsx +13 -0
  217. package/src/components/rich-text-link.stories.tsx +16 -0
  218. package/src/components/rich-text-link.tsx +9 -0
  219. package/src/components/rich-text-link.ws.tsx +12 -0
  220. package/src/components/span.stories.tsx +16 -0
  221. package/src/components/span.tsx +10 -0
  222. package/src/components/span.ws.tsx +12 -0
  223. package/src/components/subscript.stories.tsx +16 -0
  224. package/src/components/subscript.tsx +10 -0
  225. package/src/components/subscript.ws.tsx +12 -0
  226. package/src/components/superscript.stories.tsx +16 -0
  227. package/src/components/superscript.tsx +10 -0
  228. package/src/components/superscript.ws.tsx +12 -0
  229. package/src/components/text-block.stories.tsx +16 -0
  230. package/src/components/text-block.tsx +10 -0
  231. package/src/components/text-block.ws.tsx +22 -0
  232. package/src/css/breakpoints.ts +10 -0
  233. package/src/css/categories.ts +254 -0
  234. package/src/css/get-browser-style.ts +56 -0
  235. package/{lib/cjs/css/index.d.ts → src/css/index.ts} +0 -1
  236. package/{lib/cjs/db/index.d.ts → src/db/index.ts} +0 -1
  237. package/src/db/instance.ts +34 -0
  238. package/src/db/types.ts +18 -0
  239. package/{lib/cjs/index.d.ts → src/index.ts} +5 -3
  240. package/src/pubsub/create.ts +86 -0
  241. package/src/pubsub/index.ts +1 -0
  242. package/src/tree/create-elements-tree.tsx +102 -0
  243. package/{lib/cjs/tree/index.d.ts → src/tree/index.ts} +0 -1
  244. package/src/tree/root.ts +45 -0
  245. package/src/tree/session-storage-polyfill.tsx +50 -0
  246. package/src/tree/wrapper-component.tsx +50 -0
  247. package/src/user-props/all-user-props.ts +22 -0
  248. package/{lib/cjs/user-props/index.d.ts → src/user-props/index.ts} +0 -1
  249. package/src/user-props/schema.ts +35 -0
  250. package/src/user-props/types.ts +14 -0
  251. package/src/user-props/use-user-props-asset.ts +35 -0
  252. package/src/user-props/use-user-props.ts +32 -0
  253. package/lib/app/custom-components/image.d.ts +0 -9
  254. package/lib/app/custom-components/image.d.ts.map +0 -1
  255. package/lib/app/custom-components/index.d.ts +0 -2
  256. package/lib/app/custom-components/index.d.ts.map +0 -1
  257. package/lib/app/handle-request.server.d.ts +0 -3
  258. package/lib/app/handle-request.server.d.ts.map +0 -1
  259. package/lib/app/index.d.ts.map +0 -1
  260. package/lib/app/params.d.ts +0 -6
  261. package/lib/app/params.d.ts.map +0 -1
  262. package/lib/app/root.d.ts +0 -9
  263. package/lib/app/root.d.ts.map +0 -1
  264. package/lib/cjs/app/custom-components/image.d.ts +0 -9
  265. package/lib/cjs/app/custom-components/image.d.ts.map +0 -1
  266. package/lib/cjs/app/custom-components/index.d.ts +0 -2
  267. package/lib/cjs/app/custom-components/index.d.ts.map +0 -1
  268. package/lib/cjs/app/handle-request.server.d.ts +0 -3
  269. package/lib/cjs/app/handle-request.server.d.ts.map +0 -1
  270. package/lib/cjs/app/index.d.ts +0 -4
  271. package/lib/cjs/app/index.d.ts.map +0 -1
  272. package/lib/cjs/app/params.d.ts +0 -6
  273. package/lib/cjs/app/params.d.ts.map +0 -1
  274. package/lib/cjs/app/root.d.ts +0 -9
  275. package/lib/cjs/app/root.d.ts.map +0 -1
  276. package/lib/cjs/components/body.d.ts +0 -3
  277. package/lib/cjs/components/body.d.ts.map +0 -1
  278. package/lib/cjs/components/body.stories.cjs +0 -11
  279. package/lib/cjs/components/body.stories.d.ts +0 -7
  280. package/lib/cjs/components/body.stories.d.ts.map +0 -1
  281. package/lib/cjs/components/body.ws.d.ts +0 -5
  282. package/lib/cjs/components/body.ws.d.ts.map +0 -1
  283. package/lib/cjs/components/bold.d.ts +0 -3
  284. package/lib/cjs/components/bold.d.ts.map +0 -1
  285. package/lib/cjs/components/bold.stories.cjs +0 -14
  286. package/lib/cjs/components/bold.stories.d.ts +0 -6
  287. package/lib/cjs/components/bold.stories.d.ts.map +0 -1
  288. package/lib/cjs/components/bold.ws.d.ts +0 -5
  289. package/lib/cjs/components/bold.ws.d.ts.map +0 -1
  290. package/lib/cjs/components/box.d.ts +0 -8
  291. package/lib/cjs/components/box.d.ts.map +0 -1
  292. package/lib/cjs/components/box.stories.cjs +0 -12
  293. package/lib/cjs/components/box.stories.d.ts +0 -10
  294. package/lib/cjs/components/box.stories.d.ts.map +0 -1
  295. package/lib/cjs/components/box.ws.d.ts +0 -5
  296. package/lib/cjs/components/box.ws.d.ts.map +0 -1
  297. package/lib/cjs/components/button.d.ts +0 -3
  298. package/lib/cjs/components/button.d.ts.map +0 -1
  299. package/lib/cjs/components/button.stories.cjs +0 -14
  300. package/lib/cjs/components/button.stories.d.ts +0 -6
  301. package/lib/cjs/components/button.stories.d.ts.map +0 -1
  302. package/lib/cjs/components/button.ws.d.ts +0 -5
  303. package/lib/cjs/components/button.ws.d.ts.map +0 -1
  304. package/lib/cjs/components/component-type.d.ts +0 -17
  305. package/lib/cjs/components/component-type.d.ts.map +0 -1
  306. package/lib/cjs/components/form.d.ts +0 -3
  307. package/lib/cjs/components/form.d.ts.map +0 -1
  308. package/lib/cjs/components/form.stories.cjs +0 -12
  309. package/lib/cjs/components/form.stories.d.ts +0 -6
  310. package/lib/cjs/components/form.stories.d.ts.map +0 -1
  311. package/lib/cjs/components/form.ws.d.ts +0 -5
  312. package/lib/cjs/components/form.ws.d.ts.map +0 -1
  313. package/lib/cjs/components/heading.d.ts +0 -8
  314. package/lib/cjs/components/heading.d.ts.map +0 -1
  315. package/lib/cjs/components/heading.stories.cjs +0 -14
  316. package/lib/cjs/components/heading.stories.d.ts +0 -10
  317. package/lib/cjs/components/heading.stories.d.ts.map +0 -1
  318. package/lib/cjs/components/heading.ws.d.ts +0 -5
  319. package/lib/cjs/components/heading.ws.d.ts.map +0 -1
  320. package/lib/cjs/components/image.d.ts +0 -3
  321. package/lib/cjs/components/image.d.ts.map +0 -1
  322. package/lib/cjs/components/image.stories.cjs +0 -12
  323. package/lib/cjs/components/image.stories.d.ts +0 -6
  324. package/lib/cjs/components/image.stories.d.ts.map +0 -1
  325. package/lib/cjs/components/image.ws.d.ts +0 -5
  326. package/lib/cjs/components/image.ws.d.ts.map +0 -1
  327. package/lib/cjs/components/index.d.ts +0 -90
  328. package/lib/cjs/components/index.d.ts.map +0 -1
  329. package/lib/cjs/components/index.test.cjs +0 -7
  330. package/lib/cjs/components/index.test.d.ts +0 -2
  331. package/lib/cjs/components/index.test.d.ts.map +0 -1
  332. package/lib/cjs/components/input.d.ts +0 -3
  333. package/lib/cjs/components/input.d.ts.map +0 -1
  334. package/lib/cjs/components/input.stories.cjs +0 -12
  335. package/lib/cjs/components/input.stories.d.ts +0 -6
  336. package/lib/cjs/components/input.stories.d.ts.map +0 -1
  337. package/lib/cjs/components/input.ws.d.ts +0 -5
  338. package/lib/cjs/components/input.ws.d.ts.map +0 -1
  339. package/lib/cjs/components/italic.d.ts +0 -3
  340. package/lib/cjs/components/italic.d.ts.map +0 -1
  341. package/lib/cjs/components/italic.stories.cjs +0 -14
  342. package/lib/cjs/components/italic.stories.d.ts +0 -6
  343. package/lib/cjs/components/italic.stories.d.ts.map +0 -1
  344. package/lib/cjs/components/italic.ws.d.ts +0 -5
  345. package/lib/cjs/components/italic.ws.d.ts.map +0 -1
  346. package/lib/cjs/components/link.d.ts +0 -8
  347. package/lib/cjs/components/link.d.ts.map +0 -1
  348. package/lib/cjs/components/link.stories.cjs +0 -14
  349. package/lib/cjs/components/link.stories.d.ts +0 -10
  350. package/lib/cjs/components/link.stories.d.ts.map +0 -1
  351. package/lib/cjs/components/link.ws.d.ts +0 -5
  352. package/lib/cjs/components/link.ws.d.ts.map +0 -1
  353. package/lib/cjs/components/meta.cjs +0 -42
  354. package/lib/cjs/components/meta.d.ts +0 -7464
  355. package/lib/cjs/components/meta.d.ts.map +0 -1
  356. package/lib/cjs/components/paragraph.d.ts +0 -3
  357. package/lib/cjs/components/paragraph.d.ts.map +0 -1
  358. package/lib/cjs/components/paragraph.stories.cjs +0 -14
  359. package/lib/cjs/components/paragraph.stories.d.ts +0 -6
  360. package/lib/cjs/components/paragraph.stories.d.ts.map +0 -1
  361. package/lib/cjs/components/paragraph.ws.d.ts +0 -5
  362. package/lib/cjs/components/paragraph.ws.d.ts.map +0 -1
  363. package/lib/cjs/components/span.d.ts +0 -3
  364. package/lib/cjs/components/span.d.ts.map +0 -1
  365. package/lib/cjs/components/span.stories.cjs +0 -14
  366. package/lib/cjs/components/span.stories.d.ts +0 -6
  367. package/lib/cjs/components/span.stories.d.ts.map +0 -1
  368. package/lib/cjs/components/span.ws.d.ts +0 -5
  369. package/lib/cjs/components/span.ws.d.ts.map +0 -1
  370. package/lib/cjs/components/subscript.d.ts +0 -3
  371. package/lib/cjs/components/subscript.d.ts.map +0 -1
  372. package/lib/cjs/components/subscript.stories.cjs +0 -14
  373. package/lib/cjs/components/subscript.stories.d.ts +0 -6
  374. package/lib/cjs/components/subscript.stories.d.ts.map +0 -1
  375. package/lib/cjs/components/subscript.ws.d.ts +0 -5
  376. package/lib/cjs/components/subscript.ws.d.ts.map +0 -1
  377. package/lib/cjs/components/superscript.d.ts +0 -3
  378. package/lib/cjs/components/superscript.d.ts.map +0 -1
  379. package/lib/cjs/components/superscript.stories.cjs +0 -14
  380. package/lib/cjs/components/superscript.stories.d.ts +0 -6
  381. package/lib/cjs/components/superscript.stories.d.ts.map +0 -1
  382. package/lib/cjs/components/superscript.ws.d.ts +0 -5
  383. package/lib/cjs/components/superscript.ws.d.ts.map +0 -1
  384. package/lib/cjs/components/text-block.d.ts +0 -3
  385. package/lib/cjs/components/text-block.d.ts.map +0 -1
  386. package/lib/cjs/components/text-block.stories.cjs +0 -14
  387. package/lib/cjs/components/text-block.stories.d.ts +0 -6
  388. package/lib/cjs/components/text-block.stories.d.ts.map +0 -1
  389. package/lib/cjs/components/text-block.ws.d.ts +0 -5
  390. package/lib/cjs/components/text-block.ws.d.ts.map +0 -1
  391. package/lib/cjs/css/breakpoints.d.ts +0 -4
  392. package/lib/cjs/css/breakpoints.d.ts.map +0 -1
  393. package/lib/cjs/css/categories.d.ts +0 -409
  394. package/lib/cjs/css/categories.d.ts.map +0 -1
  395. package/lib/cjs/css/get-browser-style.d.ts +0 -3
  396. package/lib/cjs/css/get-browser-style.d.ts.map +0 -1
  397. package/lib/cjs/css/index.d.ts.map +0 -1
  398. package/lib/cjs/db/index.d.ts.map +0 -1
  399. package/lib/cjs/db/instance.d.ts +0 -14
  400. package/lib/cjs/db/instance.d.ts.map +0 -1
  401. package/lib/cjs/db/types.d.ts +0 -17
  402. package/lib/cjs/db/types.d.ts.map +0 -1
  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/tree/create-elements-tree.d.ts +0 -19
  409. package/lib/cjs/tree/create-elements-tree.d.ts.map +0 -1
  410. package/lib/cjs/tree/index.d.ts.map +0 -1
  411. package/lib/cjs/tree/root.d.ts +0 -20
  412. package/lib/cjs/tree/root.d.ts.map +0 -1
  413. package/lib/cjs/tree/session-storage-polyfill.d.ts +0 -3
  414. package/lib/cjs/tree/session-storage-polyfill.d.ts.map +0 -1
  415. package/lib/cjs/tree/wrapper-component.d.ts +0 -13
  416. package/lib/cjs/tree/wrapper-component.d.ts.map +0 -1
  417. package/lib/cjs/user-props/all-user-props.d.ts +0 -8
  418. package/lib/cjs/user-props/all-user-props.d.ts.map +0 -1
  419. package/lib/cjs/user-props/index.d.ts.map +0 -1
  420. package/lib/cjs/user-props/schema.d.ts +0 -72
  421. package/lib/cjs/user-props/schema.d.ts.map +0 -1
  422. package/lib/cjs/user-props/types.d.ts +0 -13
  423. package/lib/cjs/user-props/types.d.ts.map +0 -1
  424. package/lib/cjs/user-props/use-user-props-asset.d.ts +0 -8
  425. package/lib/cjs/user-props/use-user-props-asset.d.ts.map +0 -1
  426. package/lib/cjs/user-props/use-user-props.d.ts +0 -12
  427. package/lib/cjs/user-props/use-user-props.d.ts.map +0 -1
  428. package/lib/components/body.d.ts +0 -3
  429. package/lib/components/body.d.ts.map +0 -1
  430. package/lib/components/body.stories.d.ts +0 -7
  431. package/lib/components/body.stories.d.ts.map +0 -1
  432. package/lib/components/body.stories.js +0 -7
  433. package/lib/components/body.ws.d.ts +0 -5
  434. package/lib/components/body.ws.d.ts.map +0 -1
  435. package/lib/components/bold.d.ts +0 -3
  436. package/lib/components/bold.d.ts.map +0 -1
  437. package/lib/components/bold.stories.d.ts +0 -6
  438. package/lib/components/bold.stories.d.ts.map +0 -1
  439. package/lib/components/bold.stories.js +0 -11
  440. package/lib/components/bold.ws.d.ts +0 -5
  441. package/lib/components/bold.ws.d.ts.map +0 -1
  442. package/lib/components/box.d.ts +0 -8
  443. package/lib/components/box.d.ts.map +0 -1
  444. package/lib/components/box.stories.d.ts +0 -10
  445. package/lib/components/box.stories.d.ts.map +0 -1
  446. package/lib/components/box.stories.js +0 -9
  447. package/lib/components/box.ws.d.ts +0 -5
  448. package/lib/components/box.ws.d.ts.map +0 -1
  449. package/lib/components/button.d.ts +0 -3
  450. package/lib/components/button.d.ts.map +0 -1
  451. package/lib/components/button.stories.d.ts +0 -6
  452. package/lib/components/button.stories.d.ts.map +0 -1
  453. package/lib/components/button.stories.js +0 -11
  454. package/lib/components/button.ws.d.ts +0 -5
  455. package/lib/components/button.ws.d.ts.map +0 -1
  456. package/lib/components/component-type.d.ts +0 -17
  457. package/lib/components/component-type.d.ts.map +0 -1
  458. package/lib/components/form.d.ts +0 -3
  459. package/lib/components/form.d.ts.map +0 -1
  460. package/lib/components/form.stories.d.ts +0 -6
  461. package/lib/components/form.stories.d.ts.map +0 -1
  462. package/lib/components/form.stories.js +0 -9
  463. package/lib/components/form.ws.d.ts +0 -5
  464. package/lib/components/form.ws.d.ts.map +0 -1
  465. package/lib/components/heading.d.ts +0 -8
  466. package/lib/components/heading.d.ts.map +0 -1
  467. package/lib/components/heading.stories.d.ts +0 -10
  468. package/lib/components/heading.stories.d.ts.map +0 -1
  469. package/lib/components/heading.stories.js +0 -11
  470. package/lib/components/heading.ws.d.ts +0 -5
  471. package/lib/components/heading.ws.d.ts.map +0 -1
  472. package/lib/components/image.d.ts +0 -3
  473. package/lib/components/image.d.ts.map +0 -1
  474. package/lib/components/image.stories.d.ts +0 -6
  475. package/lib/components/image.stories.d.ts.map +0 -1
  476. package/lib/components/image.stories.js +0 -9
  477. package/lib/components/image.ws.d.ts +0 -5
  478. package/lib/components/image.ws.d.ts.map +0 -1
  479. package/lib/components/index.d.ts +0 -90
  480. package/lib/components/index.d.ts.map +0 -1
  481. package/lib/components/index.test.d.ts +0 -2
  482. package/lib/components/index.test.d.ts.map +0 -1
  483. package/lib/components/index.test.js +0 -5
  484. package/lib/components/input.d.ts +0 -3
  485. package/lib/components/input.d.ts.map +0 -1
  486. package/lib/components/input.stories.d.ts +0 -6
  487. package/lib/components/input.stories.d.ts.map +0 -1
  488. package/lib/components/input.stories.js +0 -9
  489. package/lib/components/input.ws.d.ts +0 -5
  490. package/lib/components/input.ws.d.ts.map +0 -1
  491. package/lib/components/italic.d.ts +0 -3
  492. package/lib/components/italic.d.ts.map +0 -1
  493. package/lib/components/italic.stories.d.ts +0 -6
  494. package/lib/components/italic.stories.d.ts.map +0 -1
  495. package/lib/components/italic.stories.js +0 -11
  496. package/lib/components/italic.ws.d.ts +0 -5
  497. package/lib/components/italic.ws.d.ts.map +0 -1
  498. package/lib/components/link.d.ts +0 -8
  499. package/lib/components/link.d.ts.map +0 -1
  500. package/lib/components/link.stories.d.ts +0 -10
  501. package/lib/components/link.stories.d.ts.map +0 -1
  502. package/lib/components/link.stories.js +0 -11
  503. package/lib/components/link.ws.d.ts +0 -5
  504. package/lib/components/link.ws.d.ts.map +0 -1
  505. package/lib/components/meta.d.ts +0 -7464
  506. package/lib/components/meta.d.ts.map +0 -1
  507. package/lib/components/meta.js +0 -35
  508. package/lib/components/paragraph.d.ts +0 -3
  509. package/lib/components/paragraph.d.ts.map +0 -1
  510. package/lib/components/paragraph.stories.d.ts +0 -6
  511. package/lib/components/paragraph.stories.d.ts.map +0 -1
  512. package/lib/components/paragraph.stories.js +0 -11
  513. package/lib/components/paragraph.ws.d.ts +0 -5
  514. package/lib/components/paragraph.ws.d.ts.map +0 -1
  515. package/lib/components/span.d.ts +0 -3
  516. package/lib/components/span.d.ts.map +0 -1
  517. package/lib/components/span.stories.d.ts +0 -6
  518. package/lib/components/span.stories.d.ts.map +0 -1
  519. package/lib/components/span.stories.js +0 -11
  520. package/lib/components/span.ws.d.ts +0 -5
  521. package/lib/components/span.ws.d.ts.map +0 -1
  522. package/lib/components/subscript.d.ts +0 -3
  523. package/lib/components/subscript.d.ts.map +0 -1
  524. package/lib/components/subscript.stories.d.ts +0 -6
  525. package/lib/components/subscript.stories.d.ts.map +0 -1
  526. package/lib/components/subscript.stories.js +0 -11
  527. package/lib/components/subscript.ws.d.ts +0 -5
  528. package/lib/components/subscript.ws.d.ts.map +0 -1
  529. package/lib/components/superscript.d.ts +0 -3
  530. package/lib/components/superscript.d.ts.map +0 -1
  531. package/lib/components/superscript.stories.d.ts +0 -6
  532. package/lib/components/superscript.stories.d.ts.map +0 -1
  533. package/lib/components/superscript.stories.js +0 -11
  534. package/lib/components/superscript.ws.d.ts +0 -5
  535. package/lib/components/superscript.ws.d.ts.map +0 -1
  536. package/lib/components/text-block.d.ts +0 -3
  537. package/lib/components/text-block.d.ts.map +0 -1
  538. package/lib/components/text-block.stories.d.ts +0 -6
  539. package/lib/components/text-block.stories.d.ts.map +0 -1
  540. package/lib/components/text-block.stories.js +0 -11
  541. package/lib/components/text-block.ws.d.ts +0 -5
  542. package/lib/components/text-block.ws.d.ts.map +0 -1
  543. package/lib/css/breakpoints.d.ts +0 -4
  544. package/lib/css/breakpoints.d.ts.map +0 -1
  545. package/lib/css/categories.d.ts +0 -409
  546. package/lib/css/categories.d.ts.map +0 -1
  547. package/lib/css/get-browser-style.d.ts +0 -3
  548. package/lib/css/get-browser-style.d.ts.map +0 -1
  549. package/lib/css/index.d.ts +0 -4
  550. package/lib/css/index.d.ts.map +0 -1
  551. package/lib/db/index.d.ts +0 -3
  552. package/lib/db/index.d.ts.map +0 -1
  553. package/lib/db/instance.d.ts +0 -14
  554. package/lib/db/instance.d.ts.map +0 -1
  555. package/lib/db/types.d.ts +0 -17
  556. package/lib/db/types.d.ts.map +0 -1
  557. package/lib/index.d.ts +0 -10
  558. package/lib/index.d.ts.map +0 -1
  559. package/lib/pubsub/create.d.ts +0 -29
  560. package/lib/pubsub/create.d.ts.map +0 -1
  561. package/lib/pubsub/index.d.ts +0 -2
  562. package/lib/pubsub/index.d.ts.map +0 -1
  563. package/lib/tree/create-elements-tree.d.ts +0 -19
  564. package/lib/tree/create-elements-tree.d.ts.map +0 -1
  565. package/lib/tree/index.d.ts +0 -4
  566. package/lib/tree/index.d.ts.map +0 -1
  567. package/lib/tree/root.d.ts +0 -20
  568. package/lib/tree/root.d.ts.map +0 -1
  569. package/lib/tree/session-storage-polyfill.d.ts +0 -3
  570. package/lib/tree/session-storage-polyfill.d.ts.map +0 -1
  571. package/lib/tree/wrapper-component.d.ts +0 -13
  572. package/lib/tree/wrapper-component.d.ts.map +0 -1
  573. package/lib/tsconfig.tsbuildinfo +0 -1
  574. package/lib/user-props/all-user-props.d.ts +0 -8
  575. package/lib/user-props/all-user-props.d.ts.map +0 -1
  576. package/lib/user-props/index.d.ts +0 -5
  577. package/lib/user-props/index.d.ts.map +0 -1
  578. package/lib/user-props/schema.d.ts +0 -72
  579. package/lib/user-props/schema.d.ts.map +0 -1
  580. package/lib/user-props/types.d.ts +0 -13
  581. package/lib/user-props/types.d.ts.map +0 -1
  582. package/lib/user-props/use-user-props-asset.d.ts +0 -8
  583. package/lib/user-props/use-user-props-asset.d.ts.map +0 -1
  584. package/lib/user-props/use-user-props.d.ts +0 -12
  585. package/lib/user-props/use-user-props.d.ts.map +0 -1
@@ -0,0 +1,14 @@
1
+ import { forwardRef, type ElementRef, type ComponentProps } from "react";
2
+
3
+ const defaultTag = "button";
4
+
5
+ type ButtonProps = ComponentProps<typeof defaultTag>;
6
+
7
+ export const Button = forwardRef<ElementRef<typeof defaultTag>, ButtonProps>(
8
+ (props, ref) => <button {...props} ref={ref} />
9
+ );
10
+
11
+ Button.defaultProps = {
12
+ type: "submit", // Match the platform default
13
+ };
14
+ Button.displayName = "Button";
@@ -0,0 +1,13 @@
1
+ import { ButtonIcon } from "@webstudio-is/icons";
2
+ import type { WsComponentMeta, MetaProps } from "./component-type";
3
+ import props from "./__generated__/button.props.json";
4
+
5
+ const meta: WsComponentMeta = {
6
+ type: "rich-text",
7
+ label: "Button",
8
+ Icon: ButtonIcon,
9
+ children: ["Button text you can edit"],
10
+ props: props as MetaProps,
11
+ };
12
+
13
+ export default meta;
@@ -0,0 +1,89 @@
1
+ import { z } from "zod";
2
+ import type { FunctionComponent } from "react";
3
+ import type { IconProps } from "@webstudio-is/icons";
4
+ import type { Style } from "@webstudio-is/css-data";
5
+
6
+ export type MetaProps = Partial<z.infer<typeof Props>>;
7
+
8
+ export type WsComponentMeta = {
9
+ /**
10
+ * body - can accept other components with dnd but not listed
11
+ * container - can accept other components with dnd
12
+ * control - usually form controls like inputs, without children
13
+ * embed - images, videos or other embeddable components, without children
14
+ * rich-text - editable text component
15
+ * rich-text-child - formatted text fragment, not listed in components list
16
+ */
17
+ type:
18
+ | "body"
19
+ | "container"
20
+ | "control"
21
+ | "embed"
22
+ | "rich-text"
23
+ | "rich-text-child";
24
+ label: string;
25
+ Icon: FunctionComponent<IconProps>;
26
+ defaultStyle?: Style;
27
+ children?: Array<string>;
28
+ props: MetaProps;
29
+ };
30
+
31
+ const Props = z.record(
32
+ z.union([
33
+ z.object({
34
+ type: z.literal("number"),
35
+ required: z.boolean(),
36
+ defaultValue: z.number().nullable(),
37
+ }),
38
+
39
+ z.object({
40
+ type: z.literal("text"),
41
+ required: z.boolean(),
42
+ defaultValue: z.string().nullable(),
43
+ }),
44
+
45
+ z.object({
46
+ type: z.literal("color"),
47
+ required: z.boolean(),
48
+ defaultValue: z.string().nullable(),
49
+ }),
50
+
51
+ z.object({
52
+ type: z.literal("boolean"),
53
+ required: z.boolean(),
54
+ defaultValue: z.boolean().nullable(),
55
+ }),
56
+
57
+ z.object({
58
+ type: z.enum([
59
+ "radio",
60
+ "inline-radio",
61
+ "check",
62
+ "inline-check",
63
+ "multi-select",
64
+ "select",
65
+ ]),
66
+ required: z.boolean(),
67
+ options: z.array(z.string()),
68
+ defaultValue: z.string().nullable(),
69
+ }),
70
+ ])
71
+ );
72
+
73
+ export const WsComponentMeta = z.lazy(() =>
74
+ z.object({
75
+ type: z.enum([
76
+ "body",
77
+ "container",
78
+ "control",
79
+ "embed",
80
+ "rich-text",
81
+ "rich-text-child",
82
+ ]),
83
+ label: z.string(),
84
+ Icon: z.any(),
85
+ defaultStyle: z.optional(z.any()),
86
+ children: z.optional(z.array(z.string())),
87
+ props: Props,
88
+ })
89
+ );
@@ -0,0 +1,14 @@
1
+ import type { ComponentStory, ComponentMeta } from "@storybook/react";
2
+ import { Form as FormPrimitive } from "./form";
3
+
4
+ export default {
5
+ title: "Components/Form",
6
+ component: FormPrimitive,
7
+ } as ComponentMeta<typeof FormPrimitive>;
8
+
9
+ const Template: ComponentStory<typeof FormPrimitive> = (args) => (
10
+ <FormPrimitive {...args} />
11
+ );
12
+
13
+ export const Form = Template.bind({});
14
+ Form.args = {};
@@ -0,0 +1,10 @@
1
+ import { forwardRef, type ElementRef, type ComponentProps } from "react";
2
+
3
+ const defaultTag = "form";
4
+
5
+ export const Form = forwardRef<
6
+ ElementRef<typeof defaultTag>,
7
+ ComponentProps<typeof defaultTag>
8
+ >((props, ref) => <form {...props} ref={ref} />);
9
+
10
+ Form.displayName = "Form";
@@ -0,0 +1,25 @@
1
+ import { FormIcon } from "@webstudio-is/icons";
2
+ import type { WsComponentMeta, MetaProps } from "./component-type";
3
+ import props from "./__generated__/form.props.json";
4
+
5
+ const defaultStyle = {
6
+ minHeight: {
7
+ type: "unit",
8
+ unit: "px",
9
+ value: 20,
10
+ },
11
+ boxSizing: {
12
+ type: "keyword",
13
+ value: "border-box",
14
+ },
15
+ } as const;
16
+
17
+ const meta: WsComponentMeta = {
18
+ type: "container",
19
+ label: "Form",
20
+ Icon: FormIcon,
21
+ defaultStyle,
22
+ props: props as MetaProps,
23
+ };
24
+
25
+ export default meta;
@@ -0,0 +1,16 @@
1
+ import type { ComponentStory, ComponentMeta } from "@storybook/react";
2
+ import { Heading as HeadingPrimitive } from "./heading";
3
+
4
+ export default {
5
+ title: "Components/Heading",
6
+ component: HeadingPrimitive,
7
+ } as ComponentMeta<typeof HeadingPrimitive>;
8
+
9
+ const Template: ComponentStory<typeof HeadingPrimitive> = (args) => (
10
+ <HeadingPrimitive {...args} />
11
+ );
12
+
13
+ export const Heading = Template.bind({});
14
+ Heading.args = {
15
+ children: "Heading",
16
+ };
@@ -0,0 +1,20 @@
1
+ import {
2
+ forwardRef,
3
+ createElement,
4
+ type ElementRef,
5
+ type ComponentProps,
6
+ } from "react";
7
+
8
+ const defaultTag = "h1";
9
+
10
+ type Props = ComponentProps<typeof defaultTag> & {
11
+ tag?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
12
+ };
13
+
14
+ export const Heading = forwardRef<ElementRef<typeof defaultTag>, Props>(
15
+ ({ tag = defaultTag, ...props }, ref) => {
16
+ return createElement(tag as string, { ...props, ref });
17
+ }
18
+ );
19
+
20
+ Heading.displayName = "Heading";
@@ -0,0 +1,13 @@
1
+ import { HeadingIcon } from "@webstudio-is/icons";
2
+ import type { WsComponentMeta, MetaProps } from "./component-type";
3
+ import props from "./__generated__/heading.props.json";
4
+
5
+ const meta: WsComponentMeta = {
6
+ type: "rich-text",
7
+ label: "Heading",
8
+ Icon: HeadingIcon,
9
+ children: ["Heading you can edit"],
10
+ props: props as MetaProps,
11
+ };
12
+
13
+ export default meta;
@@ -0,0 +1,15 @@
1
+ import type { ComponentMeta, ComponentStory } from "@storybook/react";
2
+ import { Image as ImagePrimitive } from "./image";
3
+
4
+ export default {
5
+ title: "Components/Image",
6
+ component: ImagePrimitive,
7
+ } as ComponentMeta<typeof ImagePrimitive>;
8
+
9
+ const Template: ComponentStory<typeof ImagePrimitive> = (args) => (
10
+ <ImagePrimitive {...args} />
11
+ );
12
+
13
+ export const Image = Template.bind({});
14
+
15
+ Image.args = {};
@@ -0,0 +1,52 @@
1
+ import { forwardRef, type ElementRef, type ComponentProps } from "react";
2
+
3
+ const defaultTag = "img";
4
+
5
+ // quality and optimize can be overwritten and used by asset transform
6
+ // Or we need and additional way to pass them upper level
7
+ type ImageProps = ComponentProps<typeof defaultTag>;
8
+
9
+ export const Image = forwardRef<ElementRef<typeof defaultTag>, ImageProps>(
10
+ (imageProps, ref) => {
11
+ return (
12
+ <img
13
+ {...imageProps}
14
+ src={imageProps.src || imagePlaceholderSvg}
15
+ ref={ref}
16
+ />
17
+ );
18
+ }
19
+ );
20
+
21
+ Image.defaultProps = {
22
+ src: "",
23
+ width: "",
24
+ height: "",
25
+ alt: "",
26
+ };
27
+
28
+ Image.displayName = "Image";
29
+
30
+ const imagePlaceholderSvg = `data:image/svg+xml;base64,${btoa(`<svg
31
+ width="140"
32
+ height="140"
33
+ viewBox="0 0 600 600"
34
+ fill="none"
35
+ xmlns="http://www.w3.org/2000/svg"
36
+ >
37
+ <rect width="600" height="600" fill="#CCCCCC" />
38
+ <path
39
+ fill-rule="evenodd"
40
+ clip-rule="evenodd"
41
+ d="M450 170H150C141.716 170 135 176.716 135 185V415C135 423.284 141.716 430 150 430H450C458.284 430 465 423.284 465 415V185C465 176.716 458.284 170 450 170ZM150 145C127.909 145 110 162.909 110 185V415C110 437.091 127.909 455 150 455H450C472.091 455 490 437.091 490 415V185C490 162.909 472.091 145 450 145H150Z"
42
+ fill="#A2A2A2"
43
+ />
44
+ <path
45
+ d="M237.135 235.012C237.135 255.723 220.345 272.512 199.635 272.512C178.924 272.512 162.135 255.723 162.135 235.012C162.135 214.301 178.924 197.512 199.635 197.512C220.345 197.512 237.135 214.301 237.135 235.012Z"
46
+ fill="#A2A2A2"
47
+ />
48
+ <path
49
+ d="M160 405V367.205L221.609 306.364L256.552 338.628L358.161 234L440 316.043V405H160Z"
50
+ fill="#A2A2A2"
51
+ />
52
+ </svg>`)}`;
@@ -0,0 +1,28 @@
1
+ import { ImageIcon } from "@webstudio-is/icons";
2
+ import type { WsComponentMeta, MetaProps } from "./component-type";
3
+ import props from "./__generated__/image.props.json";
4
+
5
+ const defaultStyle = {
6
+ // Otherwise on new image insert onto canvas it can overfit screen size multiple times
7
+ maxWidth: {
8
+ type: "unit",
9
+ unit: "%",
10
+ value: 100,
11
+ },
12
+ // inline | inline-block is not suitable because without line-height: 0 on the parent you get unsuitable spaces/margins
13
+ // see https://stackoverflow.com/questions/24771194/is-the-margin-of-inline-block-4px-is-static-for-all-browsers
14
+ display: {
15
+ type: "keyword",
16
+ value: "block",
17
+ },
18
+ } as const;
19
+
20
+ const meta: WsComponentMeta = {
21
+ type: "embed",
22
+ label: "Image",
23
+ Icon: ImageIcon,
24
+ defaultStyle,
25
+ props: props as MetaProps,
26
+ };
27
+
28
+ export default meta;
@@ -0,0 +1,28 @@
1
+ import {
2
+ getComponentNames,
3
+ getComponentMeta,
4
+ getComponentMetaProps,
5
+ registerComponentsMeta,
6
+ } from "./index";
7
+ import { WsComponentMeta } from "./component-type";
8
+
9
+ test.each(getComponentNames())("validating meta definition of %s", (name) => {
10
+ WsComponentMeta.parse(getComponentMeta(name));
11
+ });
12
+
13
+ test("defaultValue will be used from Native Component", () => {
14
+ registerComponentsMeta({
15
+ Image: {
16
+ props: {
17
+ src: {
18
+ defaultValue: null,
19
+ required: false,
20
+ type: "text",
21
+ },
22
+ },
23
+ },
24
+ });
25
+
26
+ const props = getComponentMetaProps("Image");
27
+ expect(props?.src?.defaultValue).toEqual("");
28
+ });
@@ -0,0 +1,159 @@
1
+ import BodyMeta from "./body.ws";
2
+ import BoxMeta from "./box.ws";
3
+ import TextBlockMeta from "./text-block.ws";
4
+ import HeadingMeta from "./heading.ws";
5
+ import ParagraphMeta from "./paragraph.ws";
6
+ import LinkMeta from "./link.ws";
7
+ import RichTextLinkMeta from "./rich-text-link.ws";
8
+ import SpanMeta from "./span.ws";
9
+ import BoldMeta from "./bold.ws";
10
+ import ItalicMeta from "./italic.ws";
11
+ import SuperscriptMeta from "./superscript.ws";
12
+ import SubscriptMeta from "./subscript.ws";
13
+ import ButtonMeta from "./button.ws";
14
+ import InputMeta from "./input.ws";
15
+ import FormMeta from "./form.ws";
16
+ import ImageMeta from "./image.ws";
17
+
18
+ import { Body } from "./body";
19
+ import { Box } from "./box";
20
+ import { TextBlock } from "./text-block";
21
+ import { Heading } from "./heading";
22
+ import { Paragraph } from "./paragraph";
23
+ import { Link } from "./link";
24
+ import { RichTextLink } from "./rich-text-link";
25
+ import { Span } from "./span";
26
+ import { Bold } from "./bold";
27
+ import { Italic } from "./italic";
28
+ import { Superscript } from "./superscript";
29
+ import { Subscript } from "./subscript";
30
+ import { Button } from "./button";
31
+ import { Input } from "./input";
32
+ import { Form } from "./form";
33
+ import { Image } from "./image";
34
+
35
+ import type { WsComponentMeta, MetaProps } from "./component-type";
36
+
37
+ const meta = {
38
+ Box: BoxMeta,
39
+ Body: BodyMeta,
40
+ TextBlock: TextBlockMeta,
41
+ Heading: HeadingMeta,
42
+ Paragraph: ParagraphMeta,
43
+ Link: LinkMeta,
44
+ RichTextLink: RichTextLinkMeta,
45
+ Span: SpanMeta,
46
+ Bold: BoldMeta,
47
+ Italic: ItalicMeta,
48
+ Superscript: SuperscriptMeta,
49
+ Subscript: SubscriptMeta,
50
+ Button: ButtonMeta,
51
+ Input: InputMeta,
52
+ Form: FormMeta,
53
+ Image: ImageMeta,
54
+ } as const;
55
+
56
+ const components = {
57
+ Box,
58
+ Body,
59
+ TextBlock,
60
+ Heading,
61
+ Paragraph,
62
+ Link,
63
+ RichTextLink,
64
+ Span,
65
+ Bold,
66
+ Italic,
67
+ Superscript,
68
+ Subscript,
69
+ Button,
70
+ Input,
71
+ Form,
72
+ Image,
73
+ } as const;
74
+
75
+ export type ComponentName = keyof typeof components;
76
+ type RegisteredComponents = Partial<{
77
+ // eslint-disable-next-line @typescript-eslint/ban-types
78
+ [p in ComponentName]: {};
79
+ }>;
80
+
81
+ type RegisteredComponentsMeta = Partial<{
82
+ [p in ComponentName]: Partial<WsComponentMeta>;
83
+ }>;
84
+
85
+ let registeredComponents: RegisteredComponents | null = null;
86
+ let registeredComponentsMeta: RegisteredComponentsMeta | null = null;
87
+
88
+ const componentNames = Object.keys(components) as ComponentName[];
89
+
90
+ export const getComponentNames = (): ComponentName[] => {
91
+ const uniqueNames = new Set([
92
+ ...componentNames,
93
+ ...Object.keys(registeredComponents || {}),
94
+ ]);
95
+
96
+ return [...uniqueNames.values()] as ComponentName[];
97
+ };
98
+
99
+ export const getComponentMeta = (name: ComponentName): WsComponentMeta => {
100
+ if (registeredComponentsMeta != null && name in registeredComponentsMeta) {
101
+ return { ...meta[name], ...registeredComponentsMeta[name] };
102
+ }
103
+
104
+ return meta[name];
105
+ };
106
+
107
+ export const getComponent = (
108
+ name: ComponentName
109
+ ): typeof components[ComponentName] => {
110
+ return registeredComponents != null && name in registeredComponents
111
+ ? (registeredComponents[name] as typeof components[ComponentName])
112
+ : components[name];
113
+ };
114
+
115
+ export const getComponentMetaProps = (name: ComponentName): MetaProps => {
116
+ if (registeredComponentsMeta != null && name in registeredComponentsMeta) {
117
+ const allMetaPropKeys = new Set([
118
+ ...Object.keys(meta[name]?.props ?? {}),
119
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
120
+ ...Object.keys(registeredComponentsMeta[name]!.props!),
121
+ ]);
122
+
123
+ const props: MetaProps = {};
124
+ /**
125
+ * Merge props, taking non null defaultValue and required=true from meta
126
+ **/
127
+ for (const key of allMetaPropKeys.values()) {
128
+ props[key] = {
129
+ ...meta[name]?.props[key],
130
+ ...registeredComponentsMeta[name]?.props?.[key],
131
+ defaultValue:
132
+ registeredComponentsMeta[name]?.props?.[key]?.defaultValue ??
133
+ meta[name]?.props[key]?.defaultValue ??
134
+ null,
135
+ required:
136
+ registeredComponentsMeta[name]?.props?.[key]?.required ||
137
+ meta[name]?.props[key]?.required,
138
+ } as MetaProps[string];
139
+ }
140
+ return props;
141
+ }
142
+
143
+ return meta[name].props;
144
+ };
145
+
146
+ /**
147
+ * @todo: Allow register any component.
148
+ * Now we can register only existings Components, as all our type system would
149
+ * break otherwise, see getComponent etc. So its overwriteComponent now
150
+ **/
151
+ export const registerComponents = (components: RegisteredComponents) => {
152
+ registeredComponents = components;
153
+ };
154
+
155
+ export const registerComponentsMeta = (
156
+ componentsMeta: RegisteredComponentsMeta
157
+ ) => {
158
+ registeredComponentsMeta = componentsMeta;
159
+ };
@@ -0,0 +1,14 @@
1
+ import type { ComponentStory, ComponentMeta } from "@storybook/react";
2
+ import { Input as InputPrimitive } from "./input";
3
+
4
+ export default {
5
+ title: "Components/Input",
6
+ component: InputPrimitive,
7
+ } as ComponentMeta<typeof InputPrimitive>;
8
+
9
+ const Template: ComponentStory<typeof InputPrimitive> = (args) => (
10
+ <InputPrimitive {...args} />
11
+ );
12
+
13
+ export const Input = Template.bind({});
14
+ Input.args = {};
@@ -0,0 +1,11 @@
1
+ import { forwardRef, type ElementRef, type ComponentProps } from "react";
2
+
3
+ const defaultTag = "input";
4
+
5
+ export const Input = forwardRef<
6
+ ElementRef<typeof defaultTag>,
7
+ ComponentProps<typeof defaultTag>
8
+ // Make sure children are not passed down to an input, because this will result in error.
9
+ >(({ children: _children, ...props }, ref) => <input {...props} ref={ref} />);
10
+
11
+ Input.displayName = "Input";
@@ -0,0 +1,12 @@
1
+ import { InputIcon } from "@webstudio-is/icons";
2
+ import type { WsComponentMeta, MetaProps } from "./component-type";
3
+ import props from "./__generated__/input.props.json";
4
+
5
+ const meta: WsComponentMeta = {
6
+ type: "control",
7
+ label: "Input",
8
+ Icon: InputIcon,
9
+ props: props as MetaProps,
10
+ };
11
+
12
+ export default meta;
@@ -0,0 +1,16 @@
1
+ import type { ComponentStory, ComponentMeta } from "@storybook/react";
2
+ import { Italic as ItalicPrimitive } from "./italic";
3
+
4
+ export default {
5
+ title: "Components/Italic",
6
+ component: ItalicPrimitive,
7
+ } as ComponentMeta<typeof ItalicPrimitive>;
8
+
9
+ const Template: ComponentStory<typeof ItalicPrimitive> = (args) => (
10
+ <ItalicPrimitive {...args} />
11
+ );
12
+
13
+ export const Italic = Template.bind({});
14
+ Italic.args = {
15
+ children: "some italic text",
16
+ };
@@ -0,0 +1,10 @@
1
+ import { forwardRef, type ElementRef, type ComponentProps } from "react";
2
+
3
+ const defaultTag = "i";
4
+
5
+ export const Italic = forwardRef<
6
+ ElementRef<typeof defaultTag>,
7
+ ComponentProps<typeof defaultTag>
8
+ >((props, ref) => <i {...props} ref={ref} />);
9
+
10
+ Italic.displayName = "Italic";
@@ -0,0 +1,20 @@
1
+ import { FontItalicIcon } from "@webstudio-is/icons";
2
+ import type { WsComponentMeta, MetaProps } from "./component-type";
3
+ import props from "./__generated__/italic.props.json";
4
+
5
+ const defaultStyle = {
6
+ fontStyle: {
7
+ type: "keyword",
8
+ value: "italic",
9
+ },
10
+ } as const;
11
+
12
+ const meta: WsComponentMeta = {
13
+ type: "rich-text-child",
14
+ label: "Italic Text",
15
+ Icon: FontItalicIcon,
16
+ defaultStyle,
17
+ props: props as MetaProps,
18
+ };
19
+
20
+ export default meta;
@@ -0,0 +1,16 @@
1
+ import type { ComponentStory, ComponentMeta } from "@storybook/react";
2
+ import { Link as LinkPrimitive } from "./link";
3
+
4
+ export default {
5
+ title: "Components/Link",
6
+ component: LinkPrimitive,
7
+ } as ComponentMeta<typeof LinkPrimitive>;
8
+
9
+ const Template: ComponentStory<typeof LinkPrimitive> = (args) => (
10
+ <LinkPrimitive {...args} />
11
+ );
12
+
13
+ export const Link = Template.bind({});
14
+ Link.args = {
15
+ children: "Link",
16
+ };
@@ -0,0 +1,9 @@
1
+ import { forwardRef, type ElementRef, type ComponentProps } from "react";
2
+
3
+ type Props = Omit<ComponentProps<"a">, "href"> & { href?: string };
4
+
5
+ export const Link = forwardRef<ElementRef<"a">, Props>(
6
+ ({ href = "", ...props }, ref) => <a {...props} href={href} ref={ref} />
7
+ );
8
+
9
+ Link.displayName = "Link";
@@ -0,0 +1,26 @@
1
+ import { Link2Icon } from "@webstudio-is/icons";
2
+ import type { WsComponentMeta, MetaProps } from "./component-type";
3
+ import props from "./__generated__/link.props.json";
4
+
5
+ const defaultStyle = {
6
+ minHeight: {
7
+ type: "unit",
8
+ unit: "em",
9
+ value: 1,
10
+ },
11
+ display: {
12
+ type: "keyword",
13
+ value: "inline-block",
14
+ },
15
+ } as const;
16
+
17
+ const meta: WsComponentMeta = {
18
+ type: "rich-text",
19
+ label: "Link",
20
+ Icon: Link2Icon,
21
+ defaultStyle,
22
+ children: ["Link text you can edit"],
23
+ props: props as MetaProps,
24
+ };
25
+
26
+ export default meta;
@@ -0,0 +1,16 @@
1
+ import type { ComponentStory, ComponentMeta } from "@storybook/react";
2
+ import { Paragraph as ParagraphPrimitive } from "./paragraph";
3
+
4
+ export default {
5
+ title: "Components/Paragraph",
6
+ component: ParagraphPrimitive,
7
+ } as ComponentMeta<typeof ParagraphPrimitive>;
8
+
9
+ const Template: ComponentStory<typeof ParagraphPrimitive> = (args) => (
10
+ <ParagraphPrimitive {...args} />
11
+ );
12
+
13
+ export const Paragraph = Template.bind({});
14
+ Paragraph.args = {
15
+ children: "paragraph",
16
+ };