@builder.io/sdk-svelte 0.4.4 → 0.5.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 (395) hide show
  1. package/package/--package.json +43 -29
  2. package/package/CHANGELOG.md +13 -0
  3. package/package/blocks/BaseText.svelte +1 -1
  4. package/package/blocks/button/button.svelte +18 -33
  5. package/package/blocks/button/button.svelte.d.ts +3 -1
  6. package/package/blocks/button/component-info.d.ts +1 -1
  7. package/package/blocks/button/component-info.js +9 -13
  8. package/package/blocks/columns/columns.svelte +14 -20
  9. package/package/blocks/columns/columns.svelte.d.ts +11 -7
  10. package/package/blocks/columns/component-info.d.ts +1 -1
  11. package/package/blocks/columns/component-info.js +62 -83
  12. package/package/blocks/custom-code/component-info.d.ts +1 -1
  13. package/package/blocks/custom-code/component-info.js +7 -11
  14. package/package/blocks/embed/component-info.d.ts +1 -1
  15. package/package/blocks/embed/component-info.js +8 -15
  16. package/package/blocks/embed/helpers.js +1 -5
  17. package/package/blocks/form/component-info.d.ts +1 -1
  18. package/package/blocks/form/component-info.js +94 -129
  19. package/package/blocks/form/form.svelte +2 -289
  20. package/package/blocks/form/form.svelte.d.ts +1 -57
  21. package/package/blocks/fragment/component-info.d.ts +1 -1
  22. package/package/blocks/fragment/component-info.js +1 -1
  23. package/package/blocks/helpers.d.ts +13 -0
  24. package/package/blocks/helpers.js +40 -0
  25. package/package/blocks/image/component-info.d.ts +1 -1
  26. package/package/blocks/image/component-info.js +33 -63
  27. package/package/blocks/image/image.helpers.js +2 -11
  28. package/package/blocks/image/image.svelte.d.ts +0 -1
  29. package/package/blocks/img/component-info.d.ts +1 -1
  30. package/package/blocks/img/component-info.js +4 -6
  31. package/package/blocks/img/img.svelte +4 -29
  32. package/package/blocks/img/img.svelte.d.ts +3 -1
  33. package/package/blocks/input/component-info.d.ts +1 -1
  34. package/package/blocks/input/component-info.js +15 -40
  35. package/package/blocks/input/input.svelte +4 -29
  36. package/package/blocks/input/input.svelte.d.ts +3 -1
  37. package/package/blocks/raw-text/component-info.d.ts +1 -1
  38. package/package/blocks/raw-text/component-info.js +3 -5
  39. package/package/blocks/raw-text/raw-text.svelte +3 -5
  40. package/package/blocks/raw-text/raw-text.svelte.d.ts +1 -1
  41. package/package/blocks/section/component-info.d.ts +1 -1
  42. package/package/blocks/section/component-info.js +13 -18
  43. package/package/blocks/section/section.svelte +4 -29
  44. package/package/blocks/section/section.svelte.d.ts +3 -1
  45. package/package/blocks/select/component-info.d.ts +1 -1
  46. package/package/blocks/select/component-info.js +22 -34
  47. package/package/blocks/select/select.svelte +4 -29
  48. package/package/blocks/select/select.svelte.d.ts +3 -1
  49. package/package/blocks/submit-button/component-info.d.ts +1 -1
  50. package/package/blocks/submit-button/component-info.js +5 -7
  51. package/package/blocks/submit-button/submit-button.svelte +4 -29
  52. package/package/blocks/submit-button/submit-button.svelte.d.ts +3 -1
  53. package/package/blocks/symbol/component-info.d.ts +1 -1
  54. package/package/blocks/symbol/component-info.js +12 -17
  55. package/package/blocks/symbol/symbol.helpers.d.ts +14 -0
  56. package/package/blocks/symbol/symbol.helpers.js +31 -0
  57. package/package/blocks/symbol/symbol.svelte +38 -85
  58. package/package/blocks/symbol/symbol.svelte.d.ts +13 -7
  59. package/package/blocks/text/component-info.d.ts +1 -1
  60. package/package/blocks/text/component-info.js +6 -7
  61. package/package/blocks/text/text.svelte +1 -1
  62. package/package/blocks/text/text.svelte.d.ts +1 -1
  63. package/package/blocks/textarea/component-info.d.ts +1 -1
  64. package/package/blocks/textarea/component-info.js +13 -19
  65. package/package/blocks/textarea/textarea.svelte +4 -29
  66. package/package/blocks/textarea/textarea.svelte.d.ts +3 -1
  67. package/package/blocks/video/component-info.d.ts +1 -1
  68. package/package/blocks/video/component-info.js +35 -55
  69. package/package/blocks/video/video.svelte +4 -30
  70. package/package/blocks/video/video.svelte.d.ts +2 -0
  71. package/package/components/block/block.helpers.d.ts +13 -0
  72. package/package/components/{render-block/render-block.helpers.js → block/block.helpers.js} +12 -29
  73. package/package/components/block/block.svelte +135 -0
  74. package/package/components/block/block.svelte.d.ts +26 -0
  75. package/package/components/{render-block → block/components}/block-styles.svelte +21 -23
  76. package/package/components/{render-block → block/components}/block-styles.svelte.d.ts +2 -2
  77. package/package/components/block/components/block-wrapper.svelte +53 -0
  78. package/package/components/block/components/block-wrapper.svelte.d.ts +33 -0
  79. package/package/components/block/components/component-ref/component-ref.helpers.d.ts +36 -0
  80. package/package/components/block/components/component-ref/component-ref.helpers.js +22 -0
  81. package/package/components/block/components/component-ref/component-ref.svelte +37 -0
  82. package/package/components/block/components/component-ref/component-ref.svelte.d.ts +24 -0
  83. package/package/components/block/components/interactive-element.svelte +29 -0
  84. package/package/components/block/components/interactive-element.svelte.d.ts +31 -0
  85. package/package/components/{render-block/render-repeated-block.svelte → block/components/repeated-block.svelte} +4 -3
  86. package/package/components/block/components/repeated-block.svelte.d.ts +25 -0
  87. package/package/components/{render-blocks.svelte → blocks/blocks-wrapper.svelte} +3 -20
  88. package/package/components/blocks/blocks-wrapper.svelte.d.ts +29 -0
  89. package/package/components/blocks/blocks.svelte +26 -0
  90. package/package/components/blocks/blocks.svelte.d.ts +28 -0
  91. package/package/components/{render-content/render-content.svelte → content/components/enable-editor.svelte} +51 -169
  92. package/package/components/content/components/enable-editor.svelte.d.ts +36 -0
  93. package/package/components/{render-content/components/render-styles.helpers.d.ts → content/components/styles.helpers.d.ts} +1 -1
  94. package/package/components/{render-content/components/render-styles.helpers.js → content/components/styles.helpers.js} +3 -4
  95. package/package/components/{render-content/components/render-styles.svelte → content/components/styles.svelte} +4 -4
  96. package/package/components/{render-content/components/render-styles.svelte.d.ts → content/components/styles.svelte.d.ts} +5 -5
  97. package/package/components/content/content.helpers.d.ts +7 -0
  98. package/package/components/content/content.helpers.js +30 -0
  99. package/package/components/content/content.svelte +113 -0
  100. package/package/components/content/content.svelte.d.ts +30 -0
  101. package/package/components/content/content.types.d.ts +24 -0
  102. package/package/components/content/index.d.ts +1 -0
  103. package/package/components/content/index.js +1 -0
  104. package/package/components/content-variants/content-variants.svelte +98 -0
  105. package/package/components/content-variants/content-variants.svelte.d.ts +34 -0
  106. package/package/components/content-variants/content-variants.types.d.ts +20 -0
  107. package/package/components/content-variants/helpers.d.ts +41 -0
  108. package/package/components/{render-content-variants → content-variants}/helpers.js +46 -41
  109. package/package/components/inlined-script.svelte +7 -0
  110. package/package/components/inlined-script.svelte.d.ts +21 -0
  111. package/package/components/inlined-styles.svelte.d.ts +21 -0
  112. package/package/constants/builder-registered-components.js +34 -13
  113. package/package/constants/device-sizes.js +9 -8
  114. package/package/constants/sdk-version.d.ts +1 -1
  115. package/package/constants/sdk-version.js +1 -1
  116. package/package/constants/target.d.ts +1 -1
  117. package/package/context/builder.context.d.ts +1 -1
  118. package/package/context/builder.context.js +1 -1
  119. package/package/context/types.d.ts +1 -1
  120. package/package/functions/apply-patch-with-mutation.d.ts +10 -0
  121. package/package/functions/apply-patch-with-mutation.js +54 -0
  122. package/package/functions/evaluate/acorn.d.ts +0 -0
  123. package/package/functions/evaluate/acorn.js +2433 -0
  124. package/package/functions/{evaluate.d.ts → evaluate/evaluate.d.ts} +5 -2
  125. package/package/functions/{evaluate.js → evaluate/evaluate.js} +34 -13
  126. package/package/functions/evaluate/index.d.ts +1 -0
  127. package/package/functions/evaluate/index.js +1 -0
  128. package/package/functions/evaluate/interpreter.d.ts +2 -0
  129. package/package/functions/evaluate/interpreter.js +3853 -0
  130. package/package/functions/evaluate/non-node-runtime.d.ts +2 -0
  131. package/package/functions/evaluate/non-node-runtime.js +84 -0
  132. package/package/functions/evaluate/types.d.ts +10 -0
  133. package/package/functions/extract-text-styles.js +2 -14
  134. package/package/functions/get-block-actions-handler.js +3 -3
  135. package/package/functions/get-block-actions.d.ts +1 -0
  136. package/package/functions/get-block-actions.js +14 -1
  137. package/package/functions/get-block-component-options.js +1 -1
  138. package/package/functions/get-block-properties.d.ts +5 -1
  139. package/package/functions/get-block-properties.js +15 -9
  140. package/package/functions/get-builder-search-params/index.js +3 -7
  141. package/package/functions/get-content/generate-content-url.js +7 -5
  142. package/package/functions/get-content/index.d.ts +2 -6
  143. package/package/functions/get-content/index.js +26 -6
  144. package/package/functions/get-processed-block.d.ts +1 -1
  145. package/package/functions/get-processed-block.js +11 -7
  146. package/package/functions/get-react-native-block-styles.d.ts +1 -1
  147. package/package/functions/get-react-native-block-styles.js +2 -2
  148. package/package/functions/if-target.d.ts +1 -1
  149. package/package/functions/if-target.js +1 -1
  150. package/package/functions/is-editing.js +1 -3
  151. package/package/functions/is-non-node-server.d.ts +4 -0
  152. package/package/functions/is-non-node-server.js +8 -0
  153. package/package/functions/on-change.js +1 -1
  154. package/package/functions/register-component.d.ts +2 -1
  155. package/package/functions/register-component.js +20 -8
  156. package/package/functions/register.js +2 -2
  157. package/package/functions/sanitize-react-native-block-styles.js +13 -5
  158. package/package/functions/set-editor-settings.js +1 -1
  159. package/package/functions/set.js +2 -9
  160. package/package/functions/track/helpers.js +6 -11
  161. package/package/functions/track/index.js +26 -14
  162. package/package/functions/track/interaction.js +15 -16
  163. package/package/helpers/ab-tests.d.ts +2 -2
  164. package/package/helpers/ab-tests.js +48 -30
  165. package/package/helpers/canTrack.js +1 -1
  166. package/package/helpers/cookie.d.ts +2 -2
  167. package/package/helpers/cookie.js +13 -26
  168. package/package/helpers/css.d.ts +1 -1
  169. package/package/helpers/css.js +1 -1
  170. package/package/helpers/flatten.js +8 -8
  171. package/package/helpers/localStorage.d.ts +2 -2
  172. package/package/helpers/localStorage.js +2 -2
  173. package/package/helpers/logger.js +1 -1
  174. package/package/helpers/preview-lru-cache/get.d.ts +1 -0
  175. package/package/helpers/preview-lru-cache/get.js +7 -0
  176. package/package/helpers/preview-lru-cache/helpers.d.ts +1 -0
  177. package/package/helpers/preview-lru-cache/helpers.js +9 -0
  178. package/package/helpers/preview-lru-cache/init.d.ts +6 -0
  179. package/package/helpers/preview-lru-cache/init.js +15 -0
  180. package/package/helpers/preview-lru-cache/set.d.ts +7 -0
  181. package/package/helpers/preview-lru-cache/set.js +9 -0
  182. package/package/helpers/preview-lru-cache/types.d.ts +12 -0
  183. package/package/helpers/preview-lru-cache/types.js +6 -0
  184. package/package/helpers/sessionId.d.ts +2 -2
  185. package/package/helpers/sessionId.js +11 -4
  186. package/package/helpers/uuid.js +1 -1
  187. package/package/helpers/visitorId.d.ts +1 -1
  188. package/package/helpers/visitorId.js +7 -4
  189. package/package/index-helpers/blocks-exports.d.ts +2 -2
  190. package/package/index-helpers/blocks-exports.js +2 -2
  191. package/package/index.d.ts +2 -2
  192. package/package/index.js +1 -1
  193. package/package/scripts/init-editing.js +65 -57
  194. package/package/types/builder-props.d.ts +10 -0
  195. package/package/types/components.d.ts +8 -2
  196. package/package/types/enforced-partials.d.ts +21 -0
  197. package/package/types/targets.d.ts +1 -3
  198. package/package/types/typescript.d.ts +6 -0
  199. package/package.json +2 -2
  200. package/src/blocks/BaseText.svelte +1 -1
  201. package/src/blocks/button/button.svelte +21 -34
  202. package/src/blocks/button/component-info.ts +20 -27
  203. package/src/blocks/columns/columns.svelte +28 -32
  204. package/src/blocks/columns/component-info.ts +205 -240
  205. package/src/blocks/custom-code/component-info.ts +20 -27
  206. package/src/blocks/embed/component-info.ts +34 -51
  207. package/src/blocks/embed/helpers.ts +2 -8
  208. package/src/blocks/form/component-info.ts +204 -253
  209. package/src/blocks/form/form.svelte +1 -368
  210. package/src/blocks/fragment/component-info.ts +3 -5
  211. package/src/blocks/helpers.ts +43 -0
  212. package/src/blocks/image/component-info.ts +113 -161
  213. package/src/blocks/image/image.helpers.ts +5 -33
  214. package/src/blocks/img/component-info.ts +11 -16
  215. package/src/blocks/img/img.svelte +7 -31
  216. package/src/blocks/input/component-info.ts +35 -66
  217. package/src/blocks/input/input.svelte +7 -31
  218. package/src/blocks/raw-text/component-info.ts +8 -12
  219. package/src/blocks/raw-text/raw-text.svelte +2 -5
  220. package/src/blocks/section/component-info.ts +28 -37
  221. package/src/blocks/section/section.svelte +7 -30
  222. package/src/blocks/select/component-info.ts +38 -55
  223. package/src/blocks/select/select.svelte +7 -31
  224. package/src/blocks/submit-button/component-info.ts +10 -15
  225. package/src/blocks/submit-button/submit-button.svelte +7 -30
  226. package/src/blocks/symbol/component-info.ts +31 -39
  227. package/src/blocks/symbol/symbol.helpers.ts +47 -0
  228. package/src/blocks/symbol/symbol.svelte +51 -95
  229. package/src/blocks/text/component-info.ts +14 -18
  230. package/src/blocks/text/text.svelte +2 -2
  231. package/src/blocks/textarea/component-info.ts +26 -36
  232. package/src/blocks/textarea/textarea.svelte +7 -30
  233. package/src/blocks/video/component-info.ts +77 -103
  234. package/src/blocks/video/video.svelte +4 -31
  235. package/src/components/{render-block/render-block.helpers.ts → block/block.helpers.ts} +22 -49
  236. package/src/components/block/block.svelte +158 -0
  237. package/src/components/{render-block → block/components}/block-styles.svelte +24 -25
  238. package/src/components/block/components/block-wrapper.svelte +70 -0
  239. package/src/components/block/components/component-ref/component-ref.helpers.ts +53 -0
  240. package/src/components/block/components/component-ref/component-ref.svelte +41 -0
  241. package/src/components/block/components/interactive-element.svelte +42 -0
  242. package/src/components/block/components/repeated-block.svelte +30 -0
  243. package/src/components/{render-block → block}/types.ts +1 -2
  244. package/src/components/{render-blocks.svelte → blocks/blocks-wrapper.svelte} +14 -32
  245. package/src/components/blocks/blocks.svelte +39 -0
  246. package/src/components/{render-content/render-content.svelte → content/components/enable-editor.svelte} +75 -202
  247. package/src/components/{render-content/components/render-styles.helpers.ts → content/components/styles.helpers.ts} +9 -11
  248. package/src/components/{render-content/components/render-styles.svelte → content/components/styles.svelte} +5 -5
  249. package/src/components/content/content.helpers.ts +42 -0
  250. package/src/components/content/content.svelte +138 -0
  251. package/src/components/content/content.types.ts +23 -0
  252. package/src/components/content/index.ts +1 -0
  253. package/src/components/{render-content → content}/wrap-component-ref.ts +1 -1
  254. package/src/components/content-variants/content-variants.svelte +120 -0
  255. package/src/components/content-variants/content-variants.types.ts +20 -0
  256. package/src/components/{render-content-variants → content-variants}/helpers.ts +53 -94
  257. package/src/components/inlined-script.svelte +13 -0
  258. package/src/constants/builder-registered-components.ts +34 -14
  259. package/src/constants/device-sizes.ts +16 -22
  260. package/src/constants/sdk-version.ts +1 -1
  261. package/src/constants/target.ts +3 -1
  262. package/src/context/builder.context.ts +1 -1
  263. package/src/context/types.ts +2 -7
  264. package/src/functions/apply-patch-with-mutation.ts +61 -0
  265. package/src/functions/camel-to-kebab-case.ts +1 -2
  266. package/src/functions/evaluate/acorn.ts +2501 -0
  267. package/src/functions/evaluate/evaluate.ts +90 -0
  268. package/src/functions/evaluate/index.ts +1 -0
  269. package/src/functions/evaluate/interpreter.ts +3887 -0
  270. package/src/functions/evaluate/non-node-runtime.ts +94 -0
  271. package/src/functions/evaluate/types.ts +10 -0
  272. package/src/functions/extract-text-styles.ts +3 -18
  273. package/src/functions/fast-clone.ts +1 -2
  274. package/src/functions/get-block-actions-handler.ts +11 -20
  275. package/src/functions/get-block-actions.ts +22 -14
  276. package/src/functions/get-block-component-options.ts +2 -3
  277. package/src/functions/get-block-properties.ts +24 -17
  278. package/src/functions/get-builder-search-params/index.ts +5 -21
  279. package/src/functions/get-content/generate-content-url.ts +10 -25
  280. package/src/functions/get-content/index.ts +34 -37
  281. package/src/functions/get-content/types.ts +4 -2
  282. package/src/functions/get-fetch.ts +3 -10
  283. package/src/functions/get-global-this.ts +1 -2
  284. package/src/functions/get-processed-block.ts +14 -21
  285. package/src/functions/get-react-native-block-styles.ts +6 -12
  286. package/src/functions/if-target.ts +2 -3
  287. package/src/functions/is-browser.ts +1 -1
  288. package/src/functions/is-editing.ts +2 -7
  289. package/src/functions/is-iframe.ts +1 -2
  290. package/src/functions/is-non-node-server.ts +9 -0
  291. package/src/functions/is-previewing.ts +1 -4
  292. package/src/functions/on-change.ts +2 -2
  293. package/src/functions/register-component.ts +24 -26
  294. package/src/functions/register.ts +6 -8
  295. package/src/functions/sanitize-react-native-block-styles.ts +17 -24
  296. package/src/functions/set-editor-settings.ts +5 -6
  297. package/src/functions/set.ts +3 -15
  298. package/src/functions/track/helpers.ts +8 -24
  299. package/src/functions/track/index.ts +37 -42
  300. package/src/functions/track/interaction.ts +21 -38
  301. package/src/functions/transform-block-properties.ts +1 -1
  302. package/src/functions/transform-block.ts +1 -1
  303. package/src/helpers/ab-tests.ts +69 -78
  304. package/src/helpers/canTrack.ts +2 -4
  305. package/src/helpers/cookie.ts +15 -46
  306. package/src/helpers/css.ts +4 -13
  307. package/src/helpers/flatten.ts +11 -16
  308. package/src/helpers/localStorage.ts +4 -8
  309. package/src/helpers/logger.ts +2 -2
  310. package/src/helpers/nullable.ts +1 -3
  311. package/src/helpers/preview-lru-cache/get.ts +8 -0
  312. package/src/helpers/preview-lru-cache/helpers.ts +9 -0
  313. package/src/helpers/preview-lru-cache/init.ts +17 -0
  314. package/src/helpers/preview-lru-cache/set.ts +18 -0
  315. package/src/helpers/preview-lru-cache/types.ts +12 -0
  316. package/src/helpers/sessionId.ts +12 -13
  317. package/src/helpers/time.ts +1 -3
  318. package/src/helpers/url.ts +1 -2
  319. package/src/helpers/uuid.ts +3 -3
  320. package/src/helpers/visitorId.ts +14 -17
  321. package/src/index-helpers/blocks-exports.ts +2 -2
  322. package/src/index-helpers/top-of-file.ts +1 -1
  323. package/src/index.ts +2 -13
  324. package/src/scripts/init-editing.ts +85 -98
  325. package/src/types/api-version.ts +1 -1
  326. package/src/types/builder-block.ts +1 -3
  327. package/src/types/builder-content.ts +7 -4
  328. package/src/types/builder-props.ts +10 -0
  329. package/src/types/can-track.ts +1 -1
  330. package/src/types/components.ts +17 -13
  331. package/src/types/deep-partial.ts +1 -7
  332. package/src/types/element.ts +1 -3
  333. package/src/types/enforced-partials.ts +13 -0
  334. package/src/types/input.ts +6 -9
  335. package/src/types/targets.ts +1 -6
  336. package/src/types/typescript.ts +10 -5
  337. package/package/blocks/util.d.ts +0 -4
  338. package/package/blocks/util.js +0 -13
  339. package/package/components/render-block/render-block.helpers.d.ts +0 -12
  340. package/package/components/render-block/render-block.svelte +0 -152
  341. package/package/components/render-block/render-block.svelte.d.ts +0 -24
  342. package/package/components/render-block/render-component.svelte +0 -21
  343. package/package/components/render-block/render-component.svelte.d.ts +0 -34
  344. package/package/components/render-block/render-repeated-block.svelte.d.ts +0 -23
  345. package/package/components/render-blocks.svelte.d.ts +0 -26
  346. package/package/components/render-content/builder-editing.svelte +0 -4
  347. package/package/components/render-content/builder-editing.svelte.d.ts +0 -14
  348. package/package/components/render-content/index.d.ts +0 -1
  349. package/package/components/render-content/index.js +0 -1
  350. package/package/components/render-content/render-content.helpers.d.ts +0 -7
  351. package/package/components/render-content/render-content.helpers.js +0 -30
  352. package/package/components/render-content/render-content.svelte.d.ts +0 -31
  353. package/package/components/render-content/render-content.types.d.ts +0 -38
  354. package/package/components/render-content-variants/helpers.d.ts +0 -17
  355. package/package/components/render-content-variants/render-content-variants.svelte +0 -70
  356. package/package/components/render-content-variants/render-content-variants.svelte.d.ts +0 -23
  357. package/package/components/render-inlined-styles.svelte.d.ts +0 -21
  358. package/package/functions/evaluate.test.js +0 -17
  359. package/package/functions/get-builder-search-params/fn.test.js +0 -13
  360. package/package/functions/get-content/generate-content-url.test.js +0 -97
  361. package/package/functions/get-processed-block.test.js +0 -33
  362. package/package/functions/on-change.test.d.ts +0 -1
  363. package/package/functions/on-change.test.js +0 -20
  364. package/package/functions/set.test.d.ts +0 -1
  365. package/package/functions/set.test.js +0 -16
  366. package/package/helpers/url.test.d.ts +0 -1
  367. package/package/helpers/url.test.js +0 -21
  368. package/src/blocks/util.ts +0 -18
  369. package/src/components/render-block/render-block.svelte +0 -173
  370. package/src/components/render-block/render-component.svelte +0 -40
  371. package/src/components/render-block/render-repeated-block.svelte +0 -25
  372. package/src/components/render-content/builder-editing.svelte +0 -4
  373. package/src/components/render-content/index.ts +0 -1
  374. package/src/components/render-content/render-content.helpers.ts +0 -48
  375. package/src/components/render-content/render-content.types.ts +0 -42
  376. package/src/components/render-content-variants/render-content-variants.svelte +0 -83
  377. package/src/functions/evaluate.test.ts +0 -21
  378. package/src/functions/evaluate.ts +0 -99
  379. package/src/functions/get-builder-search-params/fn.test.ts +0 -19
  380. package/src/functions/get-content/generate-content-url.test.ts +0 -112
  381. package/src/functions/get-processed-block.test.ts +0 -35
  382. package/src/functions/on-change.test.ts +0 -23
  383. package/src/functions/set.test.ts +0 -19
  384. package/src/helpers/url.test.ts +0 -23
  385. /package/package/components/{render-block → block}/types.d.ts +0 -0
  386. /package/package/components/{render-block → block}/types.js +0 -0
  387. /package/package/{functions/evaluate.test.d.ts → components/content/content.types.js} +0 -0
  388. /package/package/components/{render-content → content}/wrap-component-ref.d.ts +0 -0
  389. /package/package/components/{render-content → content}/wrap-component-ref.js +0 -0
  390. /package/package/components/{render-content/render-content.types.js → content-variants/content-variants.types.js} +0 -0
  391. /package/package/components/{render-inlined-styles.svelte → inlined-styles.svelte} +0 -0
  392. /package/package/functions/{get-builder-search-params/fn.test.d.ts → evaluate/types.js} +0 -0
  393. /package/package/{functions/get-content/generate-content-url.test.d.ts → types/builder-props.js} +0 -0
  394. /package/package/{functions/get-processed-block.test.d.ts → types/enforced-partials.js} +0 -0
  395. /package/src/components/{render-inlined-styles.svelte → inlined-styles.svelte} +0 -0
@@ -1,97 +0,0 @@
1
- import { generateContentUrl } from './generate-content-url';
2
- const testKey = 'YJIGb4i01jvw0SRdL5Bt';
3
- const testModel = 'page';
4
- const testId = 'c1b81bab59704599b997574eb0736def';
5
- const options = {
6
- cachebust: 'true',
7
- noCache: 'true',
8
- 'overrides.037948e52eaf4743afed464f02c70da4': '037948e52eaf4743afed464f02c70da4',
9
- 'overrides.page': '037948e52eaf4743afed464f02c70da4',
10
- 'overrides.page:/': '037948e52eaf4743afed464f02c70da4',
11
- preview: 'page',
12
- };
13
- describe('Generate Content URL', () => {
14
- test('generates the proper value for a simple query', () => {
15
- const output = generateContentUrl({
16
- apiKey: testKey,
17
- model: testModel,
18
- query: { id: testId },
19
- });
20
- expect(output).toMatchSnapshot();
21
- });
22
- test('Handles overrides correctly', () => {
23
- const output = generateContentUrl({
24
- apiKey: testKey,
25
- model: testModel,
26
- query: { id: testId },
27
- options,
28
- });
29
- expect(output).toMatchSnapshot();
30
- });
31
- test('generate content url with apiVersion as default', () => {
32
- const output = generateContentUrl({
33
- apiKey: testKey,
34
- model: testModel,
35
- query: { id: testId },
36
- options,
37
- });
38
- expect(output).toMatchSnapshot();
39
- });
40
- test('generate content url with apiVersion as v2', () => {
41
- const output = generateContentUrl({
42
- apiKey: testKey,
43
- model: testModel,
44
- query: { id: testId },
45
- options,
46
- apiVersion: 'v2',
47
- });
48
- expect(output).toMatchSnapshot();
49
- });
50
- test('generate content url with apiVersion as v3', () => {
51
- const output = generateContentUrl({
52
- apiKey: testKey,
53
- model: testModel,
54
- query: { id: testId },
55
- options,
56
- apiVersion: 'v3',
57
- });
58
- expect(output).toMatchSnapshot();
59
- });
60
- test('throw error when trying to generate content url with apiVersion as v1', () => {
61
- expect(() => {
62
- generateContentUrl({
63
- apiKey: testKey,
64
- model: testModel,
65
- query: { id: testId },
66
- options,
67
- apiVersion: 'v1',
68
- });
69
- }).toThrow(`Invalid apiVersion: expected 'v2' or 'v3', received 'v1'`);
70
- });
71
- test('throw error when trying to generate content url with an invalid apiVersion value', () => {
72
- expect(() => {
73
- generateContentUrl({
74
- apiKey: testKey,
75
- model: testModel,
76
- query: { id: testId },
77
- options,
78
- apiVersion: 'INVALID_API_VERSION',
79
- });
80
- }).toThrow(`Invalid apiVersion: expected 'v2' or 'v3', received 'INVALID_API_VERSION'`);
81
- });
82
- test('generate content url with enrich option true', () => {
83
- const output = generateContentUrl({
84
- apiKey: testKey,
85
- model: testModel,
86
- enrich: true,
87
- });
88
- expect(output).toMatchSnapshot();
89
- });
90
- test('generate content url with enrich option not present', () => {
91
- const output = generateContentUrl({
92
- apiKey: testKey,
93
- model: testModel,
94
- });
95
- expect(output).toMatchSnapshot();
96
- });
97
- });
@@ -1,33 +0,0 @@
1
- import { getProcessedBlock } from './get-processed-block.js';
2
- test('Can process bindings', () => {
3
- const block = {
4
- '@type': '@builder.io/sdk:Element',
5
- properties: {
6
- foo: 'bar',
7
- },
8
- bindings: {
9
- 'properties.foo': '"baz"',
10
- 'responsiveStyles.large.zIndex': '1 + 1',
11
- 'properties.test': 'state.test',
12
- 'properties.block': `
13
- const foo = 'bar';
14
- return foo;
15
- `,
16
- 'properties.isEditing': 'builder.isEditing',
17
- },
18
- };
19
- const processed = getProcessedBlock({
20
- block,
21
- context: {},
22
- rootState: { test: 'hello' },
23
- rootSetState: undefined,
24
- localState: undefined,
25
- shouldEvaluateBindings: true,
26
- });
27
- expect(processed).not.toEqual(block);
28
- expect(processed.properties?.foo).toEqual('baz');
29
- expect(processed.properties?.test).toEqual('hello');
30
- expect(processed.properties?.block).toEqual('bar');
31
- expect(processed.properties?.isEditing).toEqual(false);
32
- expect(processed.responsiveStyles?.large?.zIndex).toEqual(2);
33
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,20 +0,0 @@
1
- import { onChange } from './on-change.js';
2
- test('onChange can observe a shallow change', () => {
3
- let changeHappend = false;
4
- const obj = onChange({ foo: 'hi' }, () => (changeHappend = true));
5
- obj.foo = 'yo';
6
- expect(changeHappend).toBe(true);
7
- });
8
- test('onChange can observe a deep change', () => {
9
- let changeHappend = false;
10
- const obj = onChange({ foo: { bar: 'hi' } }, () => (changeHappend = true));
11
- obj.foo.bar = 'yo';
12
- expect(changeHappend).toBe(true);
13
- });
14
- test('Smoke test: callback is not fired if no properties updated', () => {
15
- let changeHappend = false;
16
- const obj = onChange({ foo: { bar: 'hi' } }, () => (changeHappend = true));
17
- // Access some properties
18
- obj.foo.bar;
19
- expect(changeHappend).toBe(false);
20
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,16 +0,0 @@
1
- import { set } from './set.js';
2
- test('can shallow set a property', () => {
3
- const obj = { foo: 'bar' };
4
- set(obj, 'foo', 'baz');
5
- expect(obj.foo).toBe('baz');
6
- });
7
- test('can deeply set a property', () => {
8
- const obj = { foo: 'bar' };
9
- set(obj, 'foo.bar', 'baz');
10
- expect(obj.foo.bar).toBe('baz');
11
- });
12
- test('can deeply create arrays', () => {
13
- const obj = { foo: 'bar' };
14
- set(obj, 'foo.bar.0', 'hi');
15
- expect(obj.foo.bar).toEqual(['hi']);
16
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,21 +0,0 @@
1
- import { getTopLevelDomain } from './url.js';
2
- describe('getTopLevelDomain', () => {
3
- test('handles root domain', () => {
4
- const output = getTopLevelDomain('example.com');
5
- expect(output).toBe('example.com');
6
- });
7
- test('handles subdomain', () => {
8
- const output = getTopLevelDomain('wwww.example.com');
9
- expect(output).toBe('example.com');
10
- });
11
- test('handles subdomain with long suffix', () => {
12
- const output = getTopLevelDomain('www.example.co.uk');
13
- expect(output).toBe('example.co.uk');
14
- });
15
- test('handles localhost', () => {
16
- const output = getTopLevelDomain('localhost');
17
- expect(output).toBe('localhost');
18
- const output2 = getTopLevelDomain('127.0.0.1');
19
- expect(output2).toBe('127.0.0.1');
20
- });
21
- });
@@ -1,18 +0,0 @@
1
- /**
2
- * Input attributes that are functions must be converted to strings before being serialized to JSON.
3
- */
4
- // eslint-disable-next-line @typescript-eslint/ban-types
5
- export const serializeFn = (fnValue: Function) => {
6
- const fnStr = fnValue.toString().trim();
7
-
8
- // we need to account for a few different fn syntaxes:
9
- // 1. `function name(args) => {code}`
10
- // 2. `name(args) => {code}`
11
- // 3. `(args) => {}`
12
- const appendFunction =
13
- !fnStr.startsWith('function') && !fnStr.startsWith('(');
14
-
15
- return `return (${
16
- appendFunction ? 'function ' : ''
17
- }${fnStr}).apply(this, arguments)`;
18
- };
@@ -1,173 +0,0 @@
1
- <script context="module" lang="ts">
2
- export type RenderBlockProps = {
3
- block: BuilderBlock;
4
- context: Writable<BuilderContextInterface>;
5
- };
6
- </script>
7
-
8
- <script lang="ts">
9
- import { writable } from "svelte/store";
10
-
11
- import type { BuilderContextInterface } from "../../context/types.js";
12
- import { getBlockActions } from "../../functions/get-block-actions.js";
13
- import { getBlockComponentOptions } from "../../functions/get-block-component-options.js";
14
- import { getBlockProperties } from "../../functions/get-block-properties.js";
15
- import { getProcessedBlock } from "../../functions/get-processed-block.js";
16
- import type { BuilderBlock } from "../../types/builder-block.js";
17
- import BlockStyles from "./block-styles.svelte";
18
- import {
19
- getComponent,
20
- getRepeatItemData,
21
- isEmptyHtmlElement,
22
- } from "./render-block.helpers.js";
23
- import type { RenderComponentProps } from "./render-component.svelte";
24
- import RenderRepeatedBlock from "./render-repeated-block.svelte";
25
- import { TARGET } from "../../constants/target.js";
26
- import { extractTextStyles } from "../../functions/extract-text-styles.js";
27
- import RenderComponent from "./render-component.svelte";
28
- import { getReactNativeBlockStyles } from "../../functions/get-react-native-block-styles.js";
29
- import type { Writable } from "svelte/store";
30
-
31
- const setAttrs = (node, attrs = {}) => {
32
- const attrKeys = Object.keys(attrs);
33
- const setup = (attr) => node.addEventListener(attr.substr(3), attrs[attr]);
34
- const teardown = (attr) =>
35
- node.removeEventListener(attr.substr(3), attrs[attr]);
36
- attrKeys.map(setup);
37
- return {
38
- update(attrs = {}) {
39
- const attrKeys = Object.keys(attrs);
40
- attrKeys.map(teardown);
41
- attrKeys.map(setup);
42
- },
43
- destroy() {
44
- attrKeys.map(teardown);
45
- },
46
- };
47
- };
48
-
49
- export let block: RenderBlockProps["block"];
50
- export let context: RenderBlockProps["context"];
51
-
52
- $: repeatItem = () => {
53
- return getRepeatItemData({
54
- block: block,
55
- context: $context,
56
- });
57
- };
58
- $: useBlock = () => {
59
- return repeatItem()
60
- ? block
61
- : getProcessedBlock({
62
- block: block,
63
- localState: $context.localState,
64
- rootState: $context.rootState,
65
- rootSetState: $context.rootSetState,
66
- context: $context.context,
67
- shouldEvaluateBindings: true,
68
- });
69
- };
70
- $: canShowBlock = () => {
71
- if ("hide" in useBlock()) {
72
- return !useBlock().hide;
73
- }
74
- if ("show" in useBlock()) {
75
- return useBlock().show;
76
- }
77
- return true;
78
- };
79
- $: actions = () => {
80
- return getBlockActions({
81
- block: useBlock(),
82
- rootState: $context.rootState,
83
- rootSetState: $context.rootSetState,
84
- localState: $context.localState,
85
- context: $context.context,
86
- });
87
- };
88
- $: attributes = () => {
89
- const blockProperties = getBlockProperties(useBlock());
90
- return {
91
- ...blockProperties,
92
- ...(TARGET === "reactNative"
93
- ? {
94
- style: getReactNativeBlockStyles({
95
- block: useBlock(),
96
- context: $context,
97
- blockStyles: blockProperties.style,
98
- }),
99
- }
100
- : {}),
101
- };
102
- };
103
- $: childrenWithoutParentComponent = () => {
104
- /**
105
- * When there is no `componentRef`, there might still be children that need to be rendered. In this case,
106
- * we render them outside of `componentRef`.
107
- * NOTE: We make sure not to render this if `repeatItemData` is non-null, because that means we are rendering an array of
108
- * blocks, and the children will be repeated within those blocks.
109
- */
110
- const shouldRenderChildrenOutsideRef =
111
- !component?.component && !repeatItem();
112
- return shouldRenderChildrenOutsideRef ? useBlock().children ?? [] : [];
113
- };
114
- $: renderComponentProps = () => {
115
- return {
116
- blockChildren: useBlock().children ?? [],
117
- componentRef: component?.component,
118
- componentOptions: {
119
- ...getBlockComponentOptions(useBlock()),
120
- /**
121
- * These attributes are passed to the wrapper element when there is one. If `noWrap` is set to true, then
122
- * they are provided to the component itself directly.
123
- */
124
- ...(!component?.noWrap
125
- ? {}
126
- : {
127
- attributes: {
128
- ...attributes(),
129
- ...actions(),
130
- },
131
- }),
132
- },
133
- context: childrenContext,
134
- };
135
- };
136
-
137
- let component = getComponent({
138
- block: block,
139
- context: $context,
140
- });
141
- let Tag = block.tagName || "div";
142
- let childrenContext = writable($context);
143
- </script>
144
-
145
- {#if canShowBlock()}
146
- {#if !component?.noWrap}
147
- {#if isEmptyHtmlElement(Tag)}
148
- <svelte:element this={Tag} {...attributes()} use:setAttrs={actions()} />
149
- {/if}
150
-
151
- {#if !isEmptyHtmlElement(Tag) && repeatItem()}
152
- {#each repeatItem() as data, index (index)}
153
- <RenderRepeatedBlock repeatContext={data.context} block={data.block} />
154
- {/each}
155
- {/if}
156
-
157
- {#if !isEmptyHtmlElement(Tag) && !repeatItem()}
158
- <svelte:element this={Tag} {...attributes()} use:setAttrs={actions()}>
159
- <RenderComponent {...renderComponentProps()} />
160
-
161
- {#each childrenWithoutParentComponent() as child ("render-block-" + child.id)}
162
- <svelte:self block={child} context={childrenContext} />
163
- {/each}
164
-
165
- {#each childrenWithoutParentComponent() as child ("block-style-" + child.id)}
166
- <BlockStyles block={child} context={$childrenContext} />
167
- {/each}
168
- </svelte:element>
169
- {/if}
170
- {:else}
171
- <RenderComponent {...renderComponentProps()} />
172
- {/if}
173
- {/if}
@@ -1,40 +0,0 @@
1
- <script context="module" lang="ts">
2
- type ComponentOptions = {
3
- [index: string]: any;
4
- attributes?: {
5
- [index: string]: any;
6
- };
7
- };
8
-
9
- export interface RenderComponentProps {
10
- componentRef: any;
11
- componentOptions: ComponentOptions;
12
- blockChildren: BuilderBlock[];
13
- context: Writable<BuilderContextInterface>;
14
- }
15
- </script>
16
-
17
- <script lang="ts">
18
- import type { BuilderBlock } from "../../types/builder-block.js";
19
- import BlockStyles from "./block-styles.svelte";
20
- import RenderBlock from "./render-block.svelte";
21
- import type { BuilderContextInterface } from "../../context/types.js";
22
- import type { Writable } from "svelte/store";
23
-
24
- export let componentRef: RenderComponentProps["componentRef"];
25
- export let componentOptions: RenderComponentProps["componentOptions"];
26
- export let blockChildren: RenderComponentProps["blockChildren"];
27
- export let context: RenderComponentProps["context"];
28
- </script>
29
-
30
- {#if componentRef}
31
- <svelte:component this={componentRef} {...componentOptions}>
32
- {#each blockChildren as child ("render-block-" + child.id)}
33
- <RenderBlock block={child} {context} />
34
- {/each}
35
-
36
- {#each blockChildren as child ("block-style-" + child.id)}
37
- <BlockStyles block={child} context={$context} />
38
- {/each}
39
- </svelte:component>
40
- {/if}
@@ -1,25 +0,0 @@
1
- <script context="module" lang="ts">
2
- type Props = {
3
- block: BuilderBlock;
4
- repeatContext: BuilderContextInterface;
5
- };
6
- </script>
7
-
8
- <script lang="ts">
9
- import { setContext } from "svelte";
10
- import { writable } from "svelte/store";
11
-
12
- import BuilderContext from "../../context/builder.context.js";
13
- import type { BuilderContextInterface } from "../../context/types.js";
14
- import type { BuilderBlock } from "../../types/builder-block";
15
- import RenderBlock from "./render-block.svelte";
16
-
17
- export let repeatContext: Props["repeatContext"];
18
- export let block: Props["block"];
19
-
20
- let store = writable(repeatContext);
21
-
22
- setContext(BuilderContext.key, store);
23
- </script>
24
-
25
- <RenderBlock {block} context={store} />
@@ -1,4 +0,0 @@
1
- <script lang="ts">
2
- </script>
3
-
4
- <div />
@@ -1 +0,0 @@
1
- export { default } from './render-content.svelte';
@@ -1,48 +0,0 @@
1
- import type { BuilderRenderState } from '../../context/types';
2
- import type { BuilderContent } from '../../types/builder-content';
3
- import type { Nullable } from '../../types/typescript';
4
- import type { RenderContentProps } from './render-content.types';
5
-
6
- export const getContextStateInitialValue = ({
7
- content,
8
- data,
9
- locale,
10
- }: Pick<RenderContentProps, 'content' | 'data' | 'locale'>) => {
11
- const defaultValues: BuilderRenderState = {};
12
-
13
- // set default values for content state inputs
14
- content?.data?.inputs?.forEach((input) => {
15
- if (
16
- input.name &&
17
- input.defaultValue !== undefined &&
18
- content?.data?.state &&
19
- content.data.state[input.name] === undefined
20
- ) {
21
- defaultValues[input.name] = input.defaultValue;
22
- }
23
- });
24
-
25
- const stateToUse: BuilderRenderState = {
26
- ...content?.data?.state,
27
- ...data,
28
- ...(locale ? { locale } : {}),
29
- };
30
-
31
- return { ...defaultValues, ...stateToUse };
32
- };
33
-
34
- export const getContentInitialValue = ({
35
- content,
36
- data,
37
- }: Pick<RenderContentProps, 'content' | 'data'>): Nullable<BuilderContent> => {
38
- return !content
39
- ? undefined
40
- : {
41
- ...content,
42
- data: {
43
- ...content?.data,
44
- ...data,
45
- },
46
- meta: content?.meta,
47
- };
48
- };
@@ -1,42 +0,0 @@
1
- import type {
2
- BuilderRenderContext,
3
- RegisteredComponent,
4
- BuilderRenderState,
5
- } from '../../context/types';
6
- import type { BuilderContent } from '../../types/builder-content';
7
- import type { Nullable } from '../../types/typescript';
8
- import type { ApiVersion } from '../../types/api-version';
9
-
10
- export interface RenderContentProps {
11
- content?: Nullable<BuilderContent>;
12
- model?: string;
13
- data?: { [key: string]: any };
14
- context?: BuilderRenderContext;
15
- apiKey: string;
16
- apiVersion?: ApiVersion;
17
- customComponents?: RegisteredComponent[];
18
- canTrack?: boolean;
19
- locale?: string;
20
- /** @deprecated use `enrich` instead **/
21
- includeRefs?: boolean;
22
- enrich?: boolean;
23
- /**
24
- * TO-DO: improve qwik generator to not remap this name for non-HTML tags, then name it `className`
25
- */
26
- classNameProp?: string;
27
- hideContent?: boolean;
28
- parentContentId?: string;
29
- isSsrAbTest?: boolean;
30
- }
31
-
32
- export interface BuilderComponentStateChange {
33
- state: BuilderRenderState;
34
- ref: {
35
- name?: string;
36
- props?: {
37
- builderBlock?: {
38
- id?: string;
39
- };
40
- };
41
- };
42
- }
@@ -1,83 +0,0 @@
1
- <script context="module" lang="ts">
2
- type VariantsProviderProps = RenderContentProps;
3
- </script>
4
-
5
- <script lang="ts">
6
- import {
7
- checkShouldRunVariants,
8
- getVariants,
9
- getVariantsScriptString,
10
- } from "./helpers";
11
- import RenderContent from "../render-content/render-content.svelte";
12
- import type { RenderContentProps } from "../render-content/render-content.types";
13
- import { getDefaultCanTrack } from "../../helpers/canTrack";
14
- import RenderInlinedStyles from "../render-inlined-styles.svelte";
15
- import { handleABTestingSync } from "../../helpers/ab-tests";
16
-
17
- export let content: VariantsProviderProps["content"];
18
- export let canTrack: VariantsProviderProps["canTrack"];
19
- export let apiKey: VariantsProviderProps["apiKey"];
20
- export let apiVersion: VariantsProviderProps["apiVersion"];
21
- export let customComponents: VariantsProviderProps["customComponents"];
22
- export let model: VariantsProviderProps["model"];
23
-
24
- let variantScriptStr = getVariantsScriptString(
25
- getVariants(content).map((value) => ({
26
- id: value.id!,
27
- testRatio: value.testRatio,
28
- })),
29
- content?.id || ""
30
- );
31
- let shouldRenderVariants = checkShouldRunVariants({
32
- canTrack: getDefaultCanTrack(canTrack),
33
- content: content,
34
- });
35
- let hideVariantsStyleString = getVariants(content)
36
- .map((value) => `.variant-${value.id} { display: none; } `)
37
- .join("");
38
- let contentToRender = checkShouldRunVariants({
39
- canTrack: getDefaultCanTrack(canTrack),
40
- content: content,
41
- })
42
- ? content
43
- : handleABTestingSync({
44
- item: content,
45
- canTrack: getDefaultCanTrack(canTrack),
46
- });
47
- </script>
48
-
49
- {#if shouldRenderVariants}
50
- <RenderInlinedStyles
51
- id={`variants-styles-${content?.id}`}
52
- styles={hideVariantsStyleString}
53
- />
54
-
55
- <svelte:element this={"script"} id={`variants-script-${content?.id}`}
56
- >{@html variantScriptStr}</svelte:element
57
- >
58
-
59
- {#each getVariants(content) as variant (variant.id)}
60
- <RenderContent
61
- content={variant}
62
- {apiKey}
63
- {apiVersion}
64
- {canTrack}
65
- {customComponents}
66
- hideContent={true}
67
- parentContentId={content?.id}
68
- isSsrAbTest={shouldRenderVariants}
69
- />
70
- {/each}
71
- {/if}
72
-
73
- <RenderContent
74
- {model}
75
- content={contentToRender}
76
- {apiKey}
77
- {apiVersion}
78
- {canTrack}
79
- {customComponents}
80
- classNameProp={`variant-${content?.id}`}
81
- parentContentId={content?.id}
82
- isSsrAbTest={shouldRenderVariants}
83
- />
@@ -1,21 +0,0 @@
1
- import { flattenState } from './evaluate';
2
-
3
- describe('flatten state', () => {
4
- it('should behave normally when no PROTO_STATE', () => {
5
- const localState = {};
6
- const rootState = { foo: 'bar' };
7
- const flattened = flattenState(rootState, localState, undefined);
8
- expect(flattened.foo).toEqual('bar');
9
- flattened.foo = 'baz';
10
- expect(rootState.foo).toEqual('baz');
11
- });
12
-
13
- it('should shadow write ', () => {
14
- const rootState = { foo: 'foo' };
15
- const localState = { foo: 'baz' };
16
- const flattened = flattenState(rootState, localState, undefined);
17
- expect(() => (flattened.foo = 'bar')).toThrow(
18
- 'Writing to local state is not allowed as it is read-only.'
19
- );
20
- });
21
- });