@developer_tribe/react-builder 1.1.0 → 1.2.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 (682) hide show
  1. package/README.md +6 -0
  2. package/dist/AttributesEditor.d.ts +3 -1
  3. package/dist/DeviceMockFrame.d.ts +2 -1
  4. package/dist/RenderPage.d.ts +5 -3
  5. package/dist/assets/samples/getSamples.d.ts +1 -0
  6. package/dist/attributes-editor/Field.d.ts +18 -0
  7. package/dist/attributes-editor/FieldInfoTooltip.d.ts +7 -0
  8. package/dist/attributes-editor/LayoutPreviewPicker.d.ts +12 -0
  9. package/dist/attributes-editor/SizeField.d.ts +9 -0
  10. package/dist/attributes-editor/SpecialCategorySection.d.ts +20 -0
  11. package/dist/attributes-editor/types.d.ts +14 -0
  12. package/dist/build-components/BIcon/BIcon.d.ts +5 -0
  13. package/dist/build-components/BIcon/BIconProps.generated.d.ts +58 -0
  14. package/dist/build-components/BackgroundImage/BackgroundImage.d.ts +5 -0
  15. package/dist/build-components/BackgroundImage/BackgroundImageProps.generated.d.ts +50 -0
  16. package/dist/build-components/Button/Button.d.ts +1 -1
  17. package/dist/build-components/Button/ButtonProps.generated.d.ts +39 -1
  18. package/dist/build-components/Carousel/CarouselProps.generated.d.ts +44 -1
  19. package/dist/build-components/CarouselButtons/CarouselButtonsProps.generated.d.ts +38 -0
  20. package/dist/build-components/CarouselDots/CarouselDotsProps.generated.d.ts +38 -0
  21. package/dist/build-components/CarouselItem/CarouselItemProps.generated.d.ts +40 -1
  22. package/dist/build-components/CarouselProvider/CarouselProviderProps.generated.d.ts +40 -1
  23. package/dist/build-components/Image/ImageProps.generated.d.ts +38 -3
  24. package/dist/build-components/Main/Main.d.ts +5 -0
  25. package/dist/build-components/Main/MainProps.generated.d.ts +48 -0
  26. package/dist/build-components/Onboard/OnboardProps.generated.d.ts +40 -1
  27. package/dist/build-components/OnboardButton/OnboardButtonProps.generated.d.ts +38 -1
  28. package/dist/build-components/OnboardButtons/OnboardButtonsProps.generated.d.ts +38 -0
  29. package/dist/build-components/OnboardDot/OnboardDot.d.ts +1 -1
  30. package/dist/build-components/OnboardDot/OnboardDotProps.generated.d.ts +36 -3
  31. package/dist/build-components/OnboardFooter/OnboardFooterProps.generated.d.ts +21 -7
  32. package/dist/build-components/OnboardImage/OnboardImageProps.generated.d.ts +38 -3
  33. package/dist/build-components/OnboardItem/OnboardItemProps.generated.d.ts +37 -3
  34. package/dist/build-components/OnboardProvider/OnboardProviderProps.generated.d.ts +40 -6
  35. package/dist/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.d.ts +21 -7
  36. package/dist/build-components/OnboardTitle/OnboardTitleProps.generated.d.ts +21 -7
  37. package/dist/build-components/PaywallBackground/PaywallBackground.d.ts +5 -0
  38. package/dist/build-components/PaywallBackground/PaywallBackgroundProps.generated.d.ts +47 -0
  39. package/dist/build-components/PaywallCloseButton/PaywallCloseButton.d.ts +5 -0
  40. package/dist/build-components/PaywallCloseButton/PaywallCloseButtonProps.generated.d.ts +58 -0
  41. package/dist/build-components/PaywallOptions/PaywallOptionButton.d.ts +9 -0
  42. package/dist/build-components/PaywallOptions/PaywallOptions.d.ts +5 -0
  43. package/dist/build-components/PaywallOptions/PaywallOptionsProps.generated.d.ts +47 -0
  44. package/dist/build-components/PaywallOptions/usePaywallOptionParamsFactory.d.ts +10 -0
  45. package/dist/build-components/PaywallProvider/PaywallContext.d.ts +12 -0
  46. package/dist/build-components/PaywallProvider/PaywallProvider.d.ts +5 -0
  47. package/dist/build-components/PaywallProvider/PaywallProviderProps.generated.d.ts +47 -0
  48. package/dist/build-components/PaywallSubscribeButton/PaywallSubscribeButton.d.ts +5 -0
  49. package/dist/build-components/PaywallSubscribeButton/PaywallSubscribeButtonProps.generated.d.ts +51 -0
  50. package/dist/build-components/RadioButton/RadioButton.d.ts +11 -0
  51. package/dist/build-components/RadioButton/RadioButtonProps.generated.d.ts +50 -0
  52. package/dist/build-components/RenderNode.generated.d.ts +1 -1
  53. package/dist/build-components/Text/TextProps.generated.d.ts +21 -7
  54. package/dist/build-components/View/ViewProps.generated.d.ts +16 -4
  55. package/dist/build-components/index.d.ts +10 -1
  56. package/dist/build-components/patterns.generated.d.ts +10325 -203
  57. package/dist/components/AttributesEditorPanel.d.ts +4 -4
  58. package/dist/components/BottomBar.d.ts +12 -0
  59. package/dist/components/Breadcrumb.d.ts +3 -1
  60. package/dist/components/Builder.d.ts +3 -2
  61. package/dist/components/BuilderButton.d.ts +9 -0
  62. package/dist/components/BuilderProvider.d.ts +17 -0
  63. package/dist/components/Checkbox.d.ts +17 -0
  64. package/dist/components/DeviceButton.d.ts +8 -0
  65. package/dist/components/DeviceNavigationBar.d.ts +10 -0
  66. package/dist/components/DeviceStatusBar.d.ts +9 -0
  67. package/dist/components/EditorHeader.d.ts +3 -8
  68. package/dist/components/Icon.generated.d.ts +11 -0
  69. package/dist/components/JsonTextEditor.d.ts +9 -0
  70. package/dist/components/LoadingComponent.d.ts +1 -0
  71. package/dist/components/LocalizationParamsProvider.d.ts +11 -0
  72. package/dist/components/ParamsProvider.d.ts +19 -0
  73. package/dist/components/RenderErrorBoundary.d.ts +28 -0
  74. package/dist/hooks/useLocalizationParams.d.ts +1 -0
  75. package/dist/hooks/useLocalize.d.ts +2 -0
  76. package/dist/hooks/useParams.d.ts +1 -0
  77. package/dist/hooks/useProjectFonts.d.ts +13 -0
  78. package/dist/hooks/useSafeAreaViewStyle.d.ts +1 -0
  79. package/dist/hooks/useSyncHtmlThemeClass.d.ts +7 -0
  80. package/dist/index.cjs.js +5 -5
  81. package/dist/index.cjs.js.map +1 -1
  82. package/dist/index.d.ts +17 -2
  83. package/dist/index.esm.js +5 -5
  84. package/dist/index.esm.js.map +1 -1
  85. package/dist/index.native.cjs.js +29 -0
  86. package/dist/index.native.cjs.js.map +1 -0
  87. package/dist/index.native.d.ts +32 -0
  88. package/dist/index.native.esm.js +29 -0
  89. package/dist/index.native.esm.js.map +1 -0
  90. package/dist/migrations/migratePipe.d.ts +14 -0
  91. package/dist/migrations/migrations/1.1.0_normalize_style_attributes.d.ts +2 -0
  92. package/dist/migrations/semver.d.ts +8 -0
  93. package/dist/migrations/types.d.ts +8 -0
  94. package/dist/mockOS/components/MockLaunchScreenComponent.d.ts +6 -0
  95. package/dist/mockOS/components/MockOSRouter.d.ts +8 -0
  96. package/dist/mockOS/components/PermissionModal.d.ts +9 -0
  97. package/dist/mockOS/components/SubscriptionModal.d.ts +7 -0
  98. package/dist/mockOS/context/MockOSContext.d.ts +22 -0
  99. package/dist/mockOS/context/MockOSContextBase.d.ts +22 -0
  100. package/dist/mockOS/hooks/useMockIap.d.ts +3 -0
  101. package/dist/mockOS/hooks/useMockNavigation.d.ts +3 -0
  102. package/dist/mockOS/hooks/useMockPermission.d.ts +3 -0
  103. package/dist/mockOS/index.d.ts +14 -0
  104. package/dist/mockOS/managers/mockOSIapManager.d.ts +6 -0
  105. package/dist/mockOS/managers/mockPermissionManager.d.ts +10 -0
  106. package/dist/mockOS/managers/navigationManager.d.ts +17 -0
  107. package/dist/mockOS/managers/subscriptionManager.d.ts +10 -0
  108. package/dist/modals/AddComponentModal.d.ts +8 -0
  109. package/dist/modals/BenefitEditModal.d.ts +13 -0
  110. package/dist/modals/BenefitPresetsModal.d.ts +9 -0
  111. package/dist/modals/ColorModal.d.ts +11 -0
  112. package/dist/modals/DeviceSelectorModal.d.ts +9 -0
  113. package/dist/modals/IconPickerModal.d.ts +9 -0
  114. package/dist/modals/LocalicationModal.d.ts +8 -0
  115. package/dist/modals/MockableFeatureModal.d.ts +6 -0
  116. package/dist/modals/Modal.d.ts +12 -0
  117. package/dist/modals/ProductEditModal.d.ts +9 -0
  118. package/dist/modals/ProductPresetsModal.d.ts +9 -0
  119. package/dist/modals/ScreenColorsModal.d.ts +8 -0
  120. package/dist/modals/index.d.ts +12 -0
  121. package/dist/pages/ProjectDebug.d.ts +14 -0
  122. package/dist/pages/ProjectMigrationPage.d.ts +23 -0
  123. package/dist/pages/ProjectPage.d.ts +18 -4
  124. package/dist/pages/ProjectValidationPage.d.ts +15 -0
  125. package/dist/pages/tabs/BuilderPanel.d.ts +8 -0
  126. package/dist/pages/tabs/SideTool.d.ts +8 -0
  127. package/dist/paywall/hooks/index.d.ts +5 -0
  128. package/dist/paywall/hooks/useCalculateLocalizedPrice.d.ts +4 -0
  129. package/dist/paywall/hooks/useCarouselOptionsSeperator.d.ts +6 -0
  130. package/dist/paywall/hooks/useCloseStatusPaywall.d.ts +4 -0
  131. package/dist/paywall/hooks/useDiscountRate.d.ts +4 -0
  132. package/dist/paywall/hooks/usePaywallCounter.d.ts +4 -0
  133. package/dist/paywall/types/benefits.d.ts +14 -0
  134. package/dist/paywall/types/paywall-types.d.ts +43 -0
  135. package/dist/store.d.ts +57 -3
  136. package/dist/styles.css +1 -1
  137. package/dist/types/Device.d.ts +5 -0
  138. package/dist/types/Fonts.d.ts +16 -0
  139. package/dist/types/Icons.d.ts +2 -0
  140. package/dist/types/Project.d.ts +26 -0
  141. package/dist/utils/__special_exceptions.d.ts +7 -0
  142. package/dist/utils/analyseNode.d.ts +2 -4
  143. package/dist/utils/analyseNodeByPatterns.d.ts +16 -0
  144. package/dist/utils/analyseNodeStructural.d.ts +11 -0
  145. package/dist/utils/extractImageStyle.d.ts +2 -1
  146. package/dist/utils/extractTextStyle.d.ts +8 -1
  147. package/dist/utils/extractViewStyle.d.ts +7 -1
  148. package/dist/utils/findNodeByKeyNested.d.ts +2 -0
  149. package/dist/utils/fontWeight.d.ts +3 -0
  150. package/dist/utils/fontsDebug.d.ts +12 -0
  151. package/dist/utils/getImage.d.ts +23 -0
  152. package/dist/utils/loadFontFamily.d.ts +30 -0
  153. package/dist/utils/logger.d.ts +11 -0
  154. package/dist/utils/nodeGuards.d.ts +5 -0
  155. package/dist/utils/nodeTree.d.ts +5 -0
  156. package/dist/utils/novaToJson.d.ts +5 -0
  157. package/dist/utils/parseColor.d.ts +7 -0
  158. package/dist/utils/pasteNode.d.ts +15 -0
  159. package/dist/utils/patterns.d.ts +39 -2
  160. package/dist/utils/replaceLocalizationParams.d.ts +1 -0
  161. package/dist/utils/selection.d.ts +7 -0
  162. package/dist/utils/useLogRender.d.ts +1 -0
  163. package/dist/utils/useMergedStyle.d.ts +2 -0
  164. package/package.json +42 -7
  165. package/scripts/migrate-patterns-to-v2.mjs +131 -0
  166. package/scripts/migrate-samples-to-current.ts +79 -0
  167. package/scripts/prebuild/assets/icon.template +71 -0
  168. package/scripts/prebuild/build-components.js +5 -0
  169. package/scripts/prebuild/icon-generator.js +206 -0
  170. package/scripts/prebuild/prebuild.js +10 -1
  171. package/scripts/prebuild/utils/createComponentTsx.js +6 -3
  172. package/scripts/prebuild/utils/createGeneratedProps.js +25 -8
  173. package/scripts/prebuild/utils/createRenderNodeGenerated.js +43 -8
  174. package/scripts/prebuild/utils/validateAllComponentsOrThrow.js +92 -29
  175. package/scripts/prebuild/utils/validatePatternJson.js +26 -15
  176. package/src/.DS_Store +0 -0
  177. package/src/AttributesEditor.tsx +903 -303
  178. package/src/DeviceMockFrame.tsx +50 -66
  179. package/src/RenderPage.tsx +120 -16
  180. package/src/assets/.DS_Store +0 -0
  181. package/src/assets/benefits.json +24 -0
  182. package/src/assets/devices.json +91 -0
  183. package/src/assets/iconset/activity-heart.svg +3 -0
  184. package/src/assets/iconset/activity.svg +3 -0
  185. package/src/assets/iconset/alert-circle.svg +3 -0
  186. package/src/assets/iconset/alert-triangle.svg +3 -0
  187. package/src/assets/iconset/anchor.svg +3 -0
  188. package/src/assets/iconset/archive.svg +3 -0
  189. package/src/assets/iconset/arrow-down.svg +3 -0
  190. package/src/assets/iconset/arrow-left.svg +3 -0
  191. package/src/assets/iconset/arrow-narrow-down-left.svg +3 -0
  192. package/src/assets/iconset/arrow-narrow-up-right.svg +3 -0
  193. package/src/assets/iconset/arrow-right-smooth.svg +4 -0
  194. package/src/assets/iconset/arrow-right.svg +7 -0
  195. package/src/assets/iconset/asterisk-01.svg +3 -0
  196. package/src/assets/iconset/asterisk-02.svg +3 -0
  197. package/src/assets/iconset/at-sign.svg +3 -0
  198. package/src/assets/iconset/award.svg +4 -0
  199. package/src/assets/iconset/battery-charging.svg +6 -0
  200. package/src/assets/iconset/bell-01.svg +5 -0
  201. package/src/assets/iconset/bell-02.svg +3 -0
  202. package/src/assets/iconset/bell-ringing-02.svg +3 -0
  203. package/src/assets/iconset/bookmark-add.svg +3 -0
  204. package/src/assets/iconset/bookmark-check.svg +3 -0
  205. package/src/assets/iconset/bookmark-minus.svg +3 -0
  206. package/src/assets/iconset/bookmark-x.svg +3 -0
  207. package/src/assets/iconset/bookmark.svg +3 -0
  208. package/src/assets/iconset/bubble.svg +5 -0
  209. package/src/assets/iconset/building-01.svg +3 -0
  210. package/src/assets/iconset/building-02.svg +3 -0
  211. package/src/assets/iconset/building-03.svg +3 -0
  212. package/src/assets/iconset/building-04.svg +3 -0
  213. package/src/assets/iconset/building-05.svg +3 -0
  214. package/src/assets/iconset/building-06.svg +3 -0
  215. package/src/assets/iconset/building-07.svg +3 -0
  216. package/src/assets/iconset/building-08.svg +3 -0
  217. package/src/assets/iconset/building-09.svg +3 -0
  218. package/src/assets/iconset/camera-01.svg +8 -0
  219. package/src/assets/iconset/camera-steel.svg +4 -0
  220. package/src/assets/iconset/camera.svg +4 -0
  221. package/src/assets/iconset/check-circle-bold.svg +3 -0
  222. package/src/assets/iconset/check-circle-broken.svg +3 -0
  223. package/src/assets/iconset/check-circle.svg +3 -0
  224. package/src/assets/iconset/check-done-01.svg +3 -0
  225. package/src/assets/iconset/check-done-02.svg +3 -0
  226. package/src/assets/iconset/check-heart.svg +3 -0
  227. package/src/assets/iconset/check-square-broken.svg +3 -0
  228. package/src/assets/iconset/check-square.svg +3 -0
  229. package/src/assets/iconset/check-verified-01.svg +3 -0
  230. package/src/assets/iconset/check-verified-02.svg +3 -0
  231. package/src/assets/iconset/check-verified-03.svg +3 -0
  232. package/src/assets/iconset/check.svg +3 -0
  233. package/src/assets/iconset/checkbox.svg +4 -0
  234. package/src/assets/iconset/checkv.svg +3 -0
  235. package/src/assets/iconset/chevron-down.svg +3 -0
  236. package/src/assets/iconset/chevron-down2.svg +3 -0
  237. package/src/assets/iconset/chevron-left-2.svg +3 -0
  238. package/src/assets/iconset/chevron-left.svg +3 -0
  239. package/src/assets/iconset/chevron-right-empty.svg +3 -0
  240. package/src/assets/iconset/chevron-right-smooth.svg +3 -0
  241. package/src/assets/iconset/chevron-right.svg +3 -0
  242. package/src/assets/iconset/chevron-up.svg +3 -0
  243. package/src/assets/iconset/circle.svg +32 -0
  244. package/src/assets/iconset/clock-fast-forward.svg +10 -0
  245. package/src/assets/iconset/clock.svg +3 -0
  246. package/src/assets/iconset/close-circle.svg +3 -0
  247. package/src/assets/iconset/close.svg +3 -0
  248. package/src/assets/iconset/cloud-01.svg +5 -0
  249. package/src/assets/iconset/cloud-blank-01.svg +3 -0
  250. package/src/assets/iconset/cloud-blank-02.svg +3 -0
  251. package/src/assets/iconset/coin.svg +5 -0
  252. package/src/assets/iconset/coins-02.svg +3 -0
  253. package/src/assets/iconset/colors.svg +3 -0
  254. package/src/assets/iconset/copy-01.svg +3 -0
  255. package/src/assets/iconset/copy-02.svg +3 -0
  256. package/src/assets/iconset/copy-03.svg +3 -0
  257. package/src/assets/iconset/copy-04.svg +3 -0
  258. package/src/assets/iconset/copy-05.svg +3 -0
  259. package/src/assets/iconset/copy-06.svg +3 -0
  260. package/src/assets/iconset/copy-07.svg +3 -0
  261. package/src/assets/iconset/corner-down-right.svg +3 -0
  262. package/src/assets/iconset/crypto-bold.svg +4 -0
  263. package/src/assets/iconset/delete-icon.svg +5 -0
  264. package/src/assets/iconset/diamond.svg +3 -0
  265. package/src/assets/iconset/dice-3.svg +3 -0
  266. package/src/assets/iconset/divide-01.svg +3 -0
  267. package/src/assets/iconset/divide-02.svg +3 -0
  268. package/src/assets/iconset/divide-03.svg +3 -0
  269. package/src/assets/iconset/document-check-bold.svg +4 -0
  270. package/src/assets/iconset/dots-circle.svg +10 -0
  271. package/src/assets/iconset/dots-grid.svg +11 -0
  272. package/src/assets/iconset/dots-horizontal.svg +5 -0
  273. package/src/assets/iconset/dots-vertical.svg +5 -0
  274. package/src/assets/iconset/download-01.svg +3 -0
  275. package/src/assets/iconset/download-02.svg +3 -0
  276. package/src/assets/iconset/download-03.svg +3 -0
  277. package/src/assets/iconset/edit-03.svg +3 -0
  278. package/src/assets/iconset/edit-04.svg +3 -0
  279. package/src/assets/iconset/edit-05.svg +3 -0
  280. package/src/assets/iconset/element-3.svg +6 -0
  281. package/src/assets/iconset/ellipse-127.svg +3 -0
  282. package/src/assets/iconset/exclaimation-circle.svg +8 -0
  283. package/src/assets/iconset/eye-off-line.svg +5 -0
  284. package/src/assets/iconset/face-smile.svg +5 -0
  285. package/src/assets/iconset/file-04.svg +3 -0
  286. package/src/assets/iconset/file-05.svg +3 -0
  287. package/src/assets/iconset/file-check-02.svg +3 -0
  288. package/src/assets/iconset/file-plus-01.svg +5 -0
  289. package/src/assets/iconset/file-shield-02.svg +5 -0
  290. package/src/assets/iconset/filter-funnel-01.svg +3 -0
  291. package/src/assets/iconset/flag-03.svg +3 -0
  292. package/src/assets/iconset/flash.svg +3 -0
  293. package/src/assets/iconset/folder-plus.svg +3 -0
  294. package/src/assets/iconset/folder.svg +3 -0
  295. package/src/assets/iconset/gallery.svg +3 -0
  296. package/src/assets/iconset/globe-01.svg +3 -0
  297. package/src/assets/iconset/globe-04.svg +5 -0
  298. package/src/assets/iconset/globe-bold.svg +4 -0
  299. package/src/assets/iconset/guard.svg +3 -0
  300. package/src/assets/iconset/headphones-01.svg +3 -0
  301. package/src/assets/iconset/headphones-02.svg +5 -0
  302. package/src/assets/iconset/headset-bold.svg +4 -0
  303. package/src/assets/iconset/heart-bold.svg +3 -0
  304. package/src/assets/iconset/heart.svg +3 -0
  305. package/src/assets/iconset/help-circle.svg +5 -0
  306. package/src/assets/iconset/home-2.svg +4 -0
  307. package/src/assets/iconset/home-line.svg +3 -0
  308. package/src/assets/iconset/hourglass-02.svg +5 -0
  309. package/src/assets/iconset/image-01.svg +5 -0
  310. package/src/assets/iconset/image-03.svg +3 -0
  311. package/src/assets/iconset/image.svg +4 -0
  312. package/src/assets/iconset/inbox-01.svg +3 -0
  313. package/src/assets/iconset/inbox-arrow-down.svg +3 -0
  314. package/src/assets/iconset/info-circle.svg +3 -0
  315. package/src/assets/iconset/keyboard-line.svg +9 -0
  316. package/src/assets/iconset/lamp-charge.svg +5 -0
  317. package/src/assets/iconset/layer.svg +3 -0
  318. package/src/assets/iconset/light.svg +6 -0
  319. package/src/assets/iconset/like-dislike.svg +6 -0
  320. package/src/assets/iconset/lock-03.svg +3 -0
  321. package/src/assets/iconset/logout.svg +3 -0
  322. package/src/assets/iconset/magicpen.svg +7 -0
  323. package/src/assets/iconset/mail-01.svg +5 -0
  324. package/src/assets/iconset/mail.svg +3 -0
  325. package/src/assets/iconset/marker.svg +3 -0
  326. package/src/assets/iconset/medal-star.svg +5 -0
  327. package/src/assets/iconset/menu-04.svg +3 -0
  328. package/src/assets/iconset/menu.svg +5 -0
  329. package/src/assets/iconset/message-circle-01.svg +5 -0
  330. package/src/assets/iconset/message-plus-circle.svg +3 -0
  331. package/src/assets/iconset/message-question-circle.svg +5 -0
  332. package/src/assets/iconset/message-text-circle-01.svg +5 -0
  333. package/src/assets/iconset/message-text-square-02.svg +3 -0
  334. package/src/assets/iconset/message-x-square.svg +3 -0
  335. package/src/assets/iconset/microphone-02.svg +3 -0
  336. package/src/assets/iconset/microphone-slash.svg +8 -0
  337. package/src/assets/iconset/mirror.svg +4 -0
  338. package/src/assets/iconset/moon-01.svg +3 -0
  339. package/src/assets/iconset/moon-bold.svg +3 -0
  340. package/src/assets/iconset/mouse-circle.svg +4 -0
  341. package/src/assets/iconset/move.svg +5 -0
  342. package/src/assets/iconset/notification-fill.svg +3 -0
  343. package/src/assets/iconset/notification-text.svg +3 -0
  344. package/src/assets/iconset/notification.svg +5 -0
  345. package/src/assets/iconset/pdf-01.svg +6 -0
  346. package/src/assets/iconset/pencil-01.svg +5 -0
  347. package/src/assets/iconset/phone-01.svg +3 -0
  348. package/src/assets/iconset/phone-arrow-down-left.svg +4 -0
  349. package/src/assets/iconset/phone-arrow-up-right.svg +8 -0
  350. package/src/assets/iconset/phone-hang-up.svg +5 -0
  351. package/src/assets/iconset/phone-hangup2.svg +8 -0
  352. package/src/assets/iconset/phone-incoming-01.svg +3 -0
  353. package/src/assets/iconset/phone-outgoing-01.svg +3 -0
  354. package/src/assets/iconset/phone-plus.svg +3 -0
  355. package/src/assets/iconset/phone-x.svg +3 -0
  356. package/src/assets/iconset/phone.svg +3 -0
  357. package/src/assets/iconset/plus-circle.svg +3 -0
  358. package/src/assets/iconset/plus.svg +4 -0
  359. package/src/assets/iconset/printer.svg +3 -0
  360. package/src/assets/iconset/question-mark-circle.svg +5 -0
  361. package/src/assets/iconset/refresh-ccw-01.svg +3 -0
  362. package/src/assets/iconset/refresh-cw-01.svg +3 -0
  363. package/src/assets/iconset/refresh-cw-04.svg +3 -0
  364. package/src/assets/iconset/refresh-right-square-bold.svg +3 -0
  365. package/src/assets/iconset/remove-circle.svg +12 -0
  366. package/src/assets/iconset/repeat-04.svg +3 -0
  367. package/src/assets/iconset/repeat-bold.svg +3 -0
  368. package/src/assets/iconset/ruler-pen.svg +4 -0
  369. package/src/assets/iconset/search-lg.svg +3 -0
  370. package/src/assets/iconset/search-md.svg +5 -0
  371. package/src/assets/iconset/search-refraction.svg +5 -0
  372. package/src/assets/iconset/search.svg +3 -0
  373. package/src/assets/iconset/send-01.svg +3 -0
  374. package/src/assets/iconset/send-02.svg +5 -0
  375. package/src/assets/iconset/send-diagonal.svg +3 -0
  376. package/src/assets/iconset/setting-2.svg +4 -0
  377. package/src/assets/iconset/settings-02.svg +4 -0
  378. package/src/assets/iconset/settings-04.svg +5 -0
  379. package/src/assets/iconset/settings-2.svg +4 -0
  380. package/src/assets/iconset/settings-cog.svg +3 -0
  381. package/src/assets/iconset/settings.svg +4 -0
  382. package/src/assets/iconset/share-01.svg +4 -0
  383. package/src/assets/iconset/share-03.svg +3 -0
  384. package/src/assets/iconset/share-04.svg +3 -0
  385. package/src/assets/iconset/share-05.svg +5 -0
  386. package/src/assets/iconset/share-06.svg +3 -0
  387. package/src/assets/iconset/share-bold.svg +3 -0
  388. package/src/assets/iconset/shield-01.svg +3 -0
  389. package/src/assets/iconset/shield-bold.svg +3 -0
  390. package/src/assets/iconset/solar-check.svg +3 -0
  391. package/src/assets/iconset/speaker-wave.svg +9 -0
  392. package/src/assets/iconset/speaker.svg +5 -0
  393. package/src/assets/iconset/speedometer-03.svg +3 -0
  394. package/src/assets/iconset/star-rounded.svg +3 -0
  395. package/src/assets/iconset/star.svg +3 -0
  396. package/src/assets/iconset/sun.svg +5 -0
  397. package/src/assets/iconset/target-03.svg +3 -0
  398. package/src/assets/iconset/text-input.svg +3 -0
  399. package/src/assets/iconset/translate.svg +7 -0
  400. package/src/assets/iconset/trash-02.svg +3 -0
  401. package/src/assets/iconset/trash-03.svg +5 -0
  402. package/src/assets/iconset/trash-04.svg +3 -0
  403. package/src/assets/iconset/trash.svg +7 -0
  404. package/src/assets/iconset/trush-square-bold.svg +3 -0
  405. package/src/assets/iconset/unlimited.svg +3 -0
  406. package/src/assets/iconset/user-circle.svg +3 -0
  407. package/src/assets/iconset/user-jogging.svg +3 -0
  408. package/src/assets/iconset/user-plus-01.svg +5 -0
  409. package/src/assets/iconset/user-square.svg +5 -0
  410. package/src/assets/iconset/user-x-01.svg +5 -0
  411. package/src/assets/iconset/user-x-02.svg +3 -0
  412. package/src/assets/iconset/user2.svg +3 -0
  413. package/src/assets/iconset/users-02.svg +5 -0
  414. package/src/assets/iconset/users-speaker.svg +7 -0
  415. package/src/assets/iconset/verify.svg +3 -0
  416. package/src/assets/iconset/voice-cricle.svg +8 -0
  417. package/src/assets/iconset/x-circle.svg +3 -0
  418. package/src/assets/iconset/x-close.svg +3 -0
  419. package/src/assets/iconset/x-sm.svg +3 -0
  420. package/src/assets/iconset/zap.svg +3 -0
  421. package/src/assets/images/android.svg +42 -42
  422. package/src/assets/images/apple.svg +15 -15
  423. package/src/assets/images/background.jpg +0 -0
  424. package/src/assets/loading_animation.json +1 -0
  425. package/src/assets/products.json +98 -0
  426. package/src/assets/samples/carousel-sample.json +142 -29
  427. package/src/assets/samples/getSamples.ts +48 -66
  428. package/src/assets/samples/paywall-1.json +268 -0
  429. package/src/assets/samples/simple-1.json +29 -16
  430. package/src/assets/samples/simple-2.json +158 -82
  431. package/src/assets/samples/unmigrated-builder1.json +42 -0
  432. package/src/assets/samples/unvalidated-builder1.json +49 -0
  433. package/src/assets/samples/unvalidated-crash1.json +19 -0
  434. package/src/assets/samples/unvalidated-crashcomponent1.json +16 -0
  435. package/src/assets/samples/vpn-onboard-1.json +357 -713
  436. package/src/assets/samples/vpn-onboard-2.json +360 -704
  437. package/src/assets/samples/vpn-onboard-3.json +325 -701
  438. package/src/assets/samples/vpn-onboard-4.json +325 -702
  439. package/src/assets/samples/vpn-onboard-5.json +484 -909
  440. package/src/assets/samples/vpn-onboard-6.json +333 -608
  441. package/src/attributes-editor/Field.tsx +575 -0
  442. package/src/attributes-editor/FieldInfoTooltip.tsx +49 -0
  443. package/src/attributes-editor/LayoutPreviewPicker.tsx +202 -0
  444. package/src/attributes-editor/SizeField.tsx +184 -0
  445. package/src/attributes-editor/SpecialCategorySection.tsx +292 -0
  446. package/src/attributes-editor/types.ts +30 -0
  447. package/src/build-components/BIcon/BIcon.tsx +56 -0
  448. package/src/build-components/BIcon/BIconProps.generated.ts +74 -0
  449. package/src/build-components/BIcon/pattern.json +50 -0
  450. package/src/build-components/BackgroundImage/BackgroundImage.tsx +79 -0
  451. package/src/build-components/BackgroundImage/BackgroundImageProps.generated.ts +66 -0
  452. package/src/build-components/BackgroundImage/pattern.json +54 -0
  453. package/src/build-components/Button/Button.tsx +73 -2
  454. package/src/build-components/Button/ButtonProps.generated.ts +50 -1
  455. package/src/build-components/Button/pattern.json +41 -5
  456. package/src/build-components/Carousel/Carousel.tsx +39 -2
  457. package/src/build-components/Carousel/CarouselProps.generated.ts +56 -1
  458. package/src/build-components/Carousel/pattern.json +26 -5
  459. package/src/build-components/CarouselButtons/CarouselButtons.tsx +23 -2
  460. package/src/build-components/CarouselButtons/CarouselButtonsProps.generated.ts +49 -0
  461. package/src/build-components/CarouselButtons/pattern.json +32 -4
  462. package/src/build-components/CarouselDots/CarouselDots.tsx +51 -8
  463. package/src/build-components/CarouselDots/CarouselDotsProps.generated.ts +49 -0
  464. package/src/build-components/CarouselDots/pattern.json +19 -3
  465. package/src/build-components/CarouselItem/CarouselItem.tsx +24 -3
  466. package/src/build-components/CarouselItem/CarouselItemProps.generated.ts +52 -1
  467. package/src/build-components/CarouselItem/pattern.json +11 -3
  468. package/src/build-components/CarouselProvider/CarouselProvider.tsx +66 -5
  469. package/src/build-components/CarouselProvider/CarouselProviderProps.generated.ts +52 -1
  470. package/src/build-components/CarouselProvider/pattern.json +8 -1
  471. package/src/build-components/Image/Image.tsx +33 -6
  472. package/src/build-components/Image/ImageProps.generated.ts +49 -3
  473. package/src/build-components/Image/pattern.json +48 -7
  474. package/src/build-components/Main/Main.tsx +61 -0
  475. package/src/build-components/Main/MainProps.generated.ts +64 -0
  476. package/src/build-components/Main/pattern.json +38 -0
  477. package/src/build-components/Onboard/Onboard.tsx +8 -1
  478. package/src/build-components/Onboard/OnboardProps.generated.ts +52 -1
  479. package/src/build-components/Onboard/pattern.json +18 -2
  480. package/src/build-components/OnboardButton/OnboardButton.tsx +53 -6
  481. package/src/build-components/OnboardButton/OnboardButtonProps.generated.ts +49 -1
  482. package/src/build-components/OnboardButton/pattern.json +74 -7
  483. package/src/build-components/OnboardButtons/OnboardButtons.tsx +35 -11
  484. package/src/build-components/OnboardButtons/OnboardButtonsProps.generated.ts +49 -0
  485. package/src/build-components/OnboardButtons/pattern.json +73 -6
  486. package/src/build-components/OnboardDot/OnboardDot.tsx +135 -4
  487. package/src/build-components/OnboardDot/OnboardDotProps.generated.ts +36 -3
  488. package/src/build-components/OnboardDot/pattern.json +45 -7
  489. package/src/build-components/OnboardFooter/OnboardFooter.tsx +42 -11
  490. package/src/build-components/OnboardFooter/OnboardFooterProps.generated.ts +21 -18
  491. package/src/build-components/OnboardFooter/pattern.json +64 -5
  492. package/src/build-components/OnboardImage/OnboardImage.tsx +51 -5
  493. package/src/build-components/OnboardImage/OnboardImageProps.generated.ts +49 -3
  494. package/src/build-components/OnboardImage/pattern.json +26 -2
  495. package/src/build-components/OnboardItem/OnboardItem.tsx +20 -12
  496. package/src/build-components/OnboardItem/OnboardItemProps.generated.ts +48 -3
  497. package/src/build-components/OnboardItem/pattern.json +54 -9
  498. package/src/build-components/OnboardProvider/OnboardProvider.tsx +50 -21
  499. package/src/build-components/OnboardProvider/OnboardProviderProps.generated.ts +52 -6
  500. package/src/build-components/OnboardProvider/pattern.json +56 -12
  501. package/src/build-components/OnboardSubtitle/OnboardSubtitle.tsx +2 -0
  502. package/src/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.ts +21 -18
  503. package/src/build-components/OnboardSubtitle/pattern.json +15 -5
  504. package/src/build-components/OnboardTitle/OnboardTitle.tsx +2 -0
  505. package/src/build-components/OnboardTitle/OnboardTitleProps.generated.ts +21 -18
  506. package/src/build-components/OnboardTitle/pattern.json +16 -6
  507. package/src/build-components/PaywallBackground/PaywallBackground.tsx +47 -0
  508. package/src/build-components/PaywallBackground/PaywallBackgroundProps.generated.ts +63 -0
  509. package/src/build-components/PaywallBackground/pattern.json +17 -0
  510. package/src/build-components/PaywallCloseButton/PaywallCloseButton.tsx +67 -0
  511. package/src/build-components/PaywallCloseButton/PaywallCloseButtonProps.generated.ts +74 -0
  512. package/src/build-components/PaywallCloseButton/pattern.json +26 -0
  513. package/src/build-components/PaywallOptions/PaywallOptionButton.tsx +63 -0
  514. package/src/build-components/PaywallOptions/PaywallOptions.tsx +93 -0
  515. package/src/build-components/PaywallOptions/PaywallOptionsProps.generated.ts +63 -0
  516. package/src/build-components/PaywallOptions/pattern.json +25 -0
  517. package/src/build-components/PaywallOptions/usePaywallOptionParamsFactory.ts +42 -0
  518. package/src/build-components/PaywallProvider/PaywallContext.ts +25 -0
  519. package/src/build-components/PaywallProvider/PaywallProvider.tsx +175 -0
  520. package/src/build-components/PaywallProvider/PaywallProviderProps.generated.ts +63 -0
  521. package/src/build-components/PaywallProvider/pattern.json +27 -0
  522. package/src/build-components/PaywallSubscribeButton/PaywallSubscribeButton.tsx +67 -0
  523. package/src/build-components/PaywallSubscribeButton/PaywallSubscribeButtonProps.generated.ts +78 -0
  524. package/src/build-components/PaywallSubscribeButton/pattern.json +30 -0
  525. package/src/build-components/RadioButton/RadioButton.tsx +123 -0
  526. package/src/build-components/RadioButton/RadioButtonProps.generated.ts +66 -0
  527. package/src/build-components/RadioButton/pattern.json +43 -0
  528. package/src/build-components/RenderNode.generated.tsx +134 -35
  529. package/src/build-components/Text/Text.tsx +135 -8
  530. package/src/build-components/Text/TextProps.generated.ts +21 -18
  531. package/src/build-components/Text/pattern.json +66 -19
  532. package/src/build-components/View/View.tsx +33 -6
  533. package/src/build-components/View/ViewProps.generated.ts +16 -4
  534. package/src/build-components/View/pattern.json +352 -25
  535. package/src/build-components/index.ts +54 -9
  536. package/src/build-components/other.tsx +15 -0
  537. package/src/build-components/patterns.generated.ts +10505 -280
  538. package/src/build-components/useNode.ts +22 -3
  539. package/src/components/AttributesEditorPanel.tsx +21 -64
  540. package/src/components/BottomBar.tsx +242 -0
  541. package/src/components/Breadcrumb.tsx +39 -5
  542. package/src/components/Builder.tsx +389 -128
  543. package/src/components/BuilderButton.tsx +161 -0
  544. package/src/components/BuilderProvider.tsx +65 -0
  545. package/src/components/Checkbox.tsx +81 -0
  546. package/src/components/DeviceButton.tsx +46 -0
  547. package/src/components/DeviceNavigationBar.tsx +200 -0
  548. package/src/components/DeviceStatusBar.tsx +85 -0
  549. package/src/components/EditorHeader.tsx +328 -103
  550. package/src/components/Icon.generated.tsx +540 -0
  551. package/src/components/JsonTextEditor.tsx +185 -0
  552. package/src/components/LoadingComponent.tsx +10 -0
  553. package/src/components/LocalizationParamsProvider.tsx +22 -0
  554. package/src/components/ParamsProvider.tsx +45 -0
  555. package/src/components/RenderErrorBoundary.tsx +200 -0
  556. package/src/hooks/useLocalizationParams.ts +5 -0
  557. package/src/hooks/useLocalize.ts +23 -0
  558. package/src/hooks/useParams.ts +12 -0
  559. package/src/hooks/useProjectFonts.ts +130 -0
  560. package/src/hooks/useSafeAreaViewStyle.ts +67 -0
  561. package/src/hooks/useSyncHtmlThemeClass.ts +19 -0
  562. package/src/index.native.ts +82 -0
  563. package/src/index.ts +41 -2
  564. package/src/migrations/migratePipe.ts +59 -0
  565. package/src/migrations/migrations/1.1.0_normalize_style_attributes.ts +80 -0
  566. package/src/migrations/semver.ts +24 -0
  567. package/src/migrations/types.ts +9 -0
  568. package/src/mockOS/components/MockLaunchScreenComponent.tsx +43 -0
  569. package/src/mockOS/components/MockOSRouter.tsx +124 -0
  570. package/src/mockOS/components/PermissionModal.tsx +271 -0
  571. package/src/mockOS/components/SubscriptionModal.tsx +400 -0
  572. package/src/mockOS/context/MockOSContext.tsx +201 -0
  573. package/src/mockOS/context/MockOSContextBase.ts +36 -0
  574. package/src/mockOS/hooks/useMockIap.ts +11 -0
  575. package/src/mockOS/hooks/useMockNavigation.ts +11 -0
  576. package/src/mockOS/hooks/useMockPermission.ts +11 -0
  577. package/src/mockOS/index.ts +34 -0
  578. package/src/mockOS/managers/mockOSIapManager.ts +10 -0
  579. package/src/mockOS/managers/mockPermissionManager.ts +50 -0
  580. package/src/mockOS/managers/navigationManager.ts +86 -0
  581. package/src/mockOS/managers/subscriptionManager.ts +36 -0
  582. package/src/modals/AddComponentModal.tsx +314 -0
  583. package/src/modals/BenefitEditModal.tsx +160 -0
  584. package/src/modals/BenefitPresetsModal.tsx +166 -0
  585. package/src/modals/ColorModal.tsx +503 -0
  586. package/src/modals/DeviceSelectorModal.tsx +57 -0
  587. package/src/modals/IconPickerModal.tsx +109 -0
  588. package/src/modals/LocalicationModal.tsx +53 -0
  589. package/src/modals/MockableFeatureModal.tsx +292 -0
  590. package/src/modals/Modal.tsx +64 -0
  591. package/src/modals/ProductEditModal.tsx +215 -0
  592. package/src/modals/ProductPresetsModal.tsx +151 -0
  593. package/src/modals/ScreenColorsModal.tsx +121 -0
  594. package/src/modals/index.ts +12 -0
  595. package/src/pages/ProjectDebug.tsx +331 -0
  596. package/src/pages/ProjectMigrationPage.tsx +92 -0
  597. package/src/pages/ProjectPage.tsx +488 -70
  598. package/src/pages/ProjectValidationPage.tsx +54 -0
  599. package/src/pages/tabs/BuilderPanel.tsx +37 -0
  600. package/src/pages/tabs/SideTool.tsx +253 -0
  601. package/src/paywall/hooks/index.ts +5 -0
  602. package/src/paywall/hooks/useCalculateLocalizedPrice.ts +6 -0
  603. package/src/paywall/hooks/useCarouselOptionsSeperator.ts +8 -0
  604. package/src/paywall/hooks/useCloseStatusPaywall.ts +6 -0
  605. package/src/paywall/hooks/useDiscountRate.ts +6 -0
  606. package/src/paywall/hooks/usePaywallCounter.ts +6 -0
  607. package/src/paywall/types/benefits.ts +44 -0
  608. package/src/paywall/types/paywall-types.ts +51 -0
  609. package/src/size-matters/index.ts +27 -5
  610. package/src/store.ts +222 -16
  611. package/src/styles/base/_global.scss +469 -0
  612. package/src/styles/components/_attributes-editor.scss +310 -0
  613. package/src/styles/components/_bottom-bar.scss +104 -0
  614. package/src/styles/components/_editor-shell.scss +331 -0
  615. package/src/styles/components/_mockos-router.scss +143 -0
  616. package/src/styles/components/_ui-components.scss +188 -0
  617. package/src/styles/foundation/_colors.scss +95 -0
  618. package/src/styles/foundation/_mixins.scss +25 -0
  619. package/src/styles/{_reset.scss → foundation/_reset.scss} +5 -2
  620. package/src/styles/foundation/_sizes.scss +41 -0
  621. package/src/styles/foundation/_typography.scss +4 -0
  622. package/src/styles/foundation/_variables.scss +3 -0
  623. package/src/styles/index.scss +29 -136
  624. package/src/styles/layout/_builder.scss +185 -0
  625. package/src/styles/layout/_pages.scss +3 -0
  626. package/src/styles/layout/_project-validation.scss +214 -0
  627. package/src/styles/modals/_add-component.scss +124 -0
  628. package/src/styles/modals/_benefit-edit-modal.scss +17 -0
  629. package/src/styles/modals/_benefit-presets-modal.scss +79 -0
  630. package/src/styles/modals/_color-modal.scss +190 -0
  631. package/src/styles/modals/_device-selector.scss +18 -0
  632. package/src/styles/modals/_localication-modal.scss +68 -0
  633. package/src/styles/modals/_mockable-feature-modal.scss +15 -0
  634. package/src/styles/modals/_modal-shell.scss +48 -0
  635. package/src/styles/modals/_product-edit-modal.scss +23 -0
  636. package/src/styles/modals/_product-presets-modal.scss +81 -0
  637. package/src/styles/utilities/_carousel.scss +126 -0
  638. package/src/types/Device.ts +5 -0
  639. package/src/types/Fonts.ts +20 -0
  640. package/src/types/Icons.ts +244 -0
  641. package/src/types/Project.ts +32 -0
  642. package/src/types/images.d.ts +8 -0
  643. package/src/types/jest-globals.d.ts +13 -0
  644. package/src/utils/__special_exceptions.ts +88 -0
  645. package/src/utils/analyseNode.ts +79 -62
  646. package/src/utils/analyseNodeByPatterns.ts +481 -0
  647. package/src/utils/analyseNodeStructural.ts +52 -0
  648. package/src/utils/extractImageStyle.ts +3 -6
  649. package/src/utils/extractTextStyle.ts +130 -81
  650. package/src/utils/extractViewStyle.ts +118 -17
  651. package/src/utils/findNodeByKeyNested.ts +32 -0
  652. package/src/utils/fontWeight.ts +29 -0
  653. package/src/utils/fontsDebug.ts +16 -0
  654. package/src/utils/getImage.ts +76 -0
  655. package/src/utils/isCarousel.ts +21 -5
  656. package/src/utils/loadFontFamily.ts +318 -0
  657. package/src/utils/logger.ts +76 -0
  658. package/src/utils/nodeGuards.ts +26 -0
  659. package/src/utils/nodeTree.ts +99 -0
  660. package/src/utils/novaToJson.ts +23 -10
  661. package/src/utils/parseColor.ts +43 -0
  662. package/src/utils/pasteNode.ts +172 -0
  663. package/src/utils/patterns.ts +100 -5
  664. package/src/utils/replaceLocalizationParams.ts +15 -0
  665. package/src/utils/selection.ts +24 -0
  666. package/src/utils/useLogRender.ts +13 -0
  667. package/src/utils/useMergedStyle.ts +16 -0
  668. package/dist/build-components/OnboardDot/OnboardExpandingDotProps.generated.d.ts +0 -10
  669. package/dist/pages/tabs/BuilderTab.d.ts +0 -9
  670. package/dist/pages/tabs/DebugTab.d.ts +0 -7
  671. package/dist/pages/tabs/PreviewTab.d.ts +0 -3
  672. package/src/build-components/OnboardDot/OnboardExpandingDotProps.generated.ts +0 -20
  673. package/src/pages/tabs/BuilderTab.tsx +0 -31
  674. package/src/pages/tabs/DebugTab.tsx +0 -21
  675. package/src/pages/tabs/PreviewTab.tsx +0 -192
  676. package/src/styles/_mixins.scss +0 -21
  677. package/src/styles/_variables.scss +0 -27
  678. package/src/styles/builder.scss +0 -60
  679. package/src/styles/components.scss +0 -88
  680. package/src/styles/editor.scss +0 -174
  681. package/src/styles/global.scss +0 -200
  682. package/src/styles/pages.scss +0 -2
@@ -4,7 +4,23 @@ import { ensureDir } from './ensureDir.js';
4
4
  import { formatWithPrettier } from './formatWithPrettier.js';
5
5
 
6
6
  // Helpers
7
- const isPrimitive = t => t === 'string' || t === 'number' || t === 'boolean';
7
+ const isPrimitive = t =>
8
+ t === 'string' ||
9
+ t === 'number' ||
10
+ t === 'boolean' ||
11
+ t === 'color' ||
12
+ t === 'size' ||
13
+ t === 'fontFamily' ||
14
+ t === 'fontWeight' ||
15
+ t === 'iconType';
16
+ const toTsPrimitive = t =>
17
+ t === 'color' ||
18
+ t === 'size' ||
19
+ t === 'iconType' ||
20
+ t === 'fontFamily' ||
21
+ t === 'fontWeight'
22
+ ? 'string'
23
+ : t;
8
24
  const getArrayItem = t =>
9
25
  typeof t === 'string' && t.endsWith('[]') ? t.slice(0, -2) : null;
10
26
  // Convert a property name like "animation" or "on-press" to PascalCase
@@ -24,9 +40,11 @@ function tsTypeFromAttributeType(
24
40
  propertyName,
25
41
  registerEnumAlias
26
42
  ) {
43
+ if (attrType === 'never') return 'never';
27
44
  if (attrType === 'string') return 'string';
28
45
  if (attrType === 'number') return 'number';
29
46
  if (attrType === 'boolean') return 'boolean';
47
+ if (attrType === 'color') return 'string';
30
48
  if (Array.isArray(attrType)) {
31
49
  const rawMembers = attrType;
32
50
  if (rawMembers.length === 0) return 'string';
@@ -48,11 +66,11 @@ function tsTypeFromAttributeType(
48
66
  if (typeof attrType === 'string') {
49
67
  const item = getArrayItem(attrType);
50
68
  if (item) {
51
- if (isPrimitive(item)) return `${item}[]`;
69
+ if (isPrimitive(item)) return `${toTsPrimitive(item)}[]`;
52
70
  // Custom type array
53
71
  return `${item}Generated[]`;
54
72
  }
55
- if (isPrimitive(attrType)) return attrType;
73
+ if (isPrimitive(attrType)) return toTsPrimitive(attrType);
56
74
  // Custom object type
57
75
  return `${attrType}Generated`;
58
76
  }
@@ -68,7 +86,7 @@ export async function createGeneratedProps(
68
86
  const fileName = `${componentName}Props.generated.ts`;
69
87
  const filePath = path.join(componentDir, fileName);
70
88
 
71
- const { pattern, allowUnknownAttributes } = patternJson;
89
+ const { pattern } = patternJson;
72
90
  const attributes = pattern.attributes || {};
73
91
  const allTypes = patternJson.types || {};
74
92
 
@@ -116,9 +134,8 @@ export async function createGeneratedProps(
116
134
  return ` ${key}?: ${tsType};`;
117
135
  });
118
136
 
119
- const indexSignature = allowUnknownAttributes
120
- ? ' [key: string]: string | number | boolean | undefined;\n'
121
- : '';
137
+ // In schema v2 we always allow a nested `style` object (for CSSProperties-like overrides/defaults).
138
+ const styleLine = ` style?: Record<string, unknown>;`;
122
139
 
123
140
  const childTsType =
124
141
  typeof pattern.children === 'string' ? pattern.children : 'string';
@@ -145,8 +162,8 @@ export async function createGeneratedProps(
145
162
  `export interface ${componentName}PropsGenerated {\n` +
146
163
  ` child: ${normalizedChildTsType};\n` +
147
164
  ` attributes: {\n` +
165
+ `${styleLine}\n` +
148
166
  (attributeLines.length ? attributeLines.join('\n') + '\n' : '') +
149
- indexSignature +
150
167
  ` };\n` +
151
168
  `}\n` +
152
169
  `\n` +
@@ -6,6 +6,10 @@ export async function createRenderNodeGenerated(validated, paths) {
6
6
  const { COMPONENTS_ROOT } = paths;
7
7
  const targetPath = path.join(COMPONENTS_ROOT, 'RenderNode.generated.tsx');
8
8
 
9
+ const textPatternType =
10
+ validated.find(v => v.componentName === 'Text')?.patternJson?.pattern
11
+ ?.type ?? 'Text';
12
+
9
13
  // Build imports for all components discovered
10
14
  const componentImports = validated
11
15
  .map(
@@ -14,12 +18,30 @@ export async function createRenderNodeGenerated(validated, paths) {
14
18
  )
15
19
  .join('\n');
16
20
 
21
+ // Import each component's generated prop type so we can build a strongly-typed node union
22
+ const componentPropTypeImports = validated
23
+ .map(
24
+ ({ componentName }) =>
25
+ `import type { ${componentName}ComponentProps } from './${componentName}/${componentName}Props.generated';`
26
+ )
27
+ .join('\n');
28
+
29
+ const builderNodeUnion = validated
30
+ .map(({ componentName, patternJson }) => {
31
+ const type = patternJson?.pattern?.type;
32
+ return typeof type === 'string'
33
+ ? ` | (${componentName}ComponentProps['node'] & { type: ${JSON.stringify(type)} })`
34
+ : null;
35
+ })
36
+ .filter(Boolean)
37
+ .join('\n');
38
+
17
39
  // Build switch cases from each component's pattern.type
18
40
  const cases = validated
19
41
  .map(({ componentName, patternJson }) => {
20
42
  const type = patternJson?.pattern?.type;
21
43
  return typeof type === 'string'
22
- ? ` case ${JSON.stringify(type)}:\n return <${componentName} node={simpleNode} />;`
44
+ ? ` case ${JSON.stringify(type)}:\n return <${componentName} node={normalizedNode} />;`
23
45
  : null;
24
46
  })
25
47
  .filter(Boolean)
@@ -28,23 +50,28 @@ export async function createRenderNodeGenerated(validated, paths) {
28
50
  const fileContent =
29
51
  `/* AUTO-GENERATED FILE - DO NOT EDIT */\n` +
30
52
  `import React from 'react';\n\n` +
53
+ `import { normalizeComponentType } from '../utils/patterns';\n\n` +
54
+ `import type { Node } from '../types/Node';\n` +
31
55
  `import {\n` +
32
- ` Node,\n` +
33
- ` NodeData,\n` +
34
56
  ` isNodeArray,\n` +
35
57
  ` isNodeNullOrUndefined,\n` +
36
58
  ` isNodeString,\n` +
37
- `} from '../index';\n\n` +
59
+ `} from '../utils/analyseNode';\n\n` +
38
60
  `import { other } from './other';\n\n` +
39
61
  `// Builder components\n` +
62
+ componentPropTypeImports +
63
+ `\n` +
40
64
  componentImports +
41
65
  `\n\n` +
66
+ `type BuilderNode =\n` +
67
+ (builderNodeUnion ? `${builderNodeUnion}\n` : ` never\n`) +
68
+ `;\n\n` +
42
69
  `function RenderNode({ node }: { node: Node }) {\n` +
43
70
  ` if (isNodeNullOrUndefined(node)) {\n` +
44
71
  ` return null;\n` +
45
72
  ` }\n` +
46
73
  ` if (isNodeString(node)) {\n` +
47
- ` return <Text node={{ children: node as string, type: 'text' }} />;\n` +
74
+ ` return <Text node={{ children: node as string, type: ${JSON.stringify(textPatternType)} }} />;\n` +
48
75
  ` }\n` +
49
76
  ` if (isNodeArray(node)) {\n` +
50
77
  ` return (\n` +
@@ -55,11 +82,19 @@ export async function createRenderNodeGenerated(validated, paths) {
55
82
  ` </>\n` +
56
83
  ` );\n` +
57
84
  ` }\n\n` +
58
- ` const simpleNode = node as NodeData;\n` +
59
- ` switch (simpleNode?.type) {\n` +
85
+ ` const nodeType =\n` +
86
+ ` typeof (node as { type?: unknown })?.type === 'string'\n` +
87
+ ` ? (node as { type: string }).type\n` +
88
+ ` : 'unknown';\n` +
89
+ `\n` +
90
+ ` const normalizedType = normalizeComponentType(nodeType) ?? nodeType;\n` +
91
+ `\n` +
92
+ ` // Force a stable discriminant so TS can narrow the BuilderNode union.\n` +
93
+ ` const normalizedNode = { ...(node as any), type: normalizedType } as BuilderNode;\n` +
94
+ ` switch (normalizedNode.type) {\n` +
60
95
  cases +
61
96
  `\n default:\n` +
62
- ` return other(simpleNode?.type, node);\n` +
97
+ ` return other(nodeType, node);\n` +
63
98
  ` }\n` +
64
99
  `}\n\n` +
65
100
  `export default React.memo(RenderNode);\n`;
@@ -89,11 +89,6 @@ async function validatePatternJson(componentDir, componentName) {
89
89
  `[${componentName}] pattern.json -> 'schemaVersion' must be a number`
90
90
  );
91
91
  }
92
- if (typeof data.allowUnknownAttributes !== 'boolean') {
93
- return fail(
94
- `[${componentName}] pattern.json -> 'allowUnknownAttributes' must be a boolean`
95
- );
96
- }
97
92
  if (typeof data.pattern !== 'object' || data.pattern == null) {
98
93
  return fail(
99
94
  `[${componentName}] pattern.json -> 'pattern' must be an object`
@@ -105,12 +100,24 @@ async function validatePatternJson(componentDir, componentName) {
105
100
  `[${componentName}] pattern.json -> 'pattern.type' must be a string`
106
101
  );
107
102
  }
108
- if (
109
- typeof pattern.children !== 'string' &&
110
- !Array.isArray(pattern.children)
111
- ) {
103
+ if (pattern.type !== componentName) {
104
+ return fail(
105
+ `[${componentName}] pattern.json -> 'pattern.type' must match the component folder name '${componentName}' (PascalCase).`
106
+ );
107
+ }
108
+ // children spec can only be: node | string | never
109
+ // - "node" means: Node | Node[]
110
+ // - "string" means: text node
111
+ // - "never" means: no children allowed
112
+ if (typeof pattern.children !== 'string') {
113
+ return fail(
114
+ `[${componentName}] pattern.json -> 'pattern.children' must be a string`
115
+ );
116
+ }
117
+ const allowedChildrenKinds = new Set(['node', 'string', 'never']);
118
+ if (!allowedChildrenKinds.has(pattern.children)) {
112
119
  return fail(
113
- `[${componentName}] pattern.json -> 'pattern.children' must be a string or an array`
120
+ `[${componentName}] pattern.json -> 'pattern.children' must be one of: node | string | never`
114
121
  );
115
122
  }
116
123
  if (typeof pattern.attributes !== 'object' || pattern.attributes == null) {
@@ -120,7 +127,16 @@ async function validatePatternJson(componentDir, componentName) {
120
127
  }
121
128
 
122
129
  // Helpers for validating custom types
123
- const isPrimitive = t => t === 'string' || t === 'number' || t === 'boolean';
130
+ const isPrimitive = t =>
131
+ t === 'string' ||
132
+ t === 'number' ||
133
+ t === 'boolean' ||
134
+ t === 'color' ||
135
+ t === 'size' ||
136
+ t === 'fontFamily' ||
137
+ t === 'fontWeight' ||
138
+ t === 'iconType';
139
+ const isNeverType = t => t === 'never';
124
140
  const hasCustomTypes = typeof data.types === 'object' && data.types != null;
125
141
  const isCustomType = t =>
126
142
  hasCustomTypes &&
@@ -140,14 +156,25 @@ async function validatePatternJson(componentDir, componentName) {
140
156
  return isCustomType(t);
141
157
  };
142
158
 
159
+ const isPlainObject = value =>
160
+ typeof value === 'object' && value != null && !Array.isArray(value);
161
+
162
+ const buildDefaultsBlock = source => ({
163
+ ...(isPlainObject(source?.pattern?.defaults)
164
+ ? source.pattern.defaults
165
+ : {}),
166
+ ...(isPlainObject(source?.defaults) ? source.defaults : {}),
167
+ });
168
+
143
169
  // Validate attributes accept primitive, enum array, or custom type refs (including X[])
144
170
  for (const [attrName, attrType] of Object.entries(pattern.attributes)) {
145
171
  const ok =
146
- (typeof attrType === 'string' && isValidTypeRef(attrType)) ||
172
+ (typeof attrType === 'string' &&
173
+ (isNeverType(attrType) || isValidTypeRef(attrType))) ||
147
174
  isEnumArray(attrType);
148
175
  if (!ok) {
149
176
  return fail(
150
- `[${componentName}] pattern.json -> 'pattern.attributes.${attrName}' must be 'string' | 'number' | 'boolean' | string[] | CustomType | CustomType[]`
177
+ `[${componentName}] pattern.json -> 'pattern.attributes.${attrName}' must be 'string' | 'number' | 'boolean' | 'color' | 'never' | string[] | CustomType | CustomType[]`
151
178
  );
152
179
  }
153
180
  }
@@ -167,7 +194,7 @@ async function validatePatternJson(componentDir, componentName) {
167
194
  isEnumArray(fieldType);
168
195
  if (!fieldOk) {
169
196
  return fail(
170
- `[${componentName}] pattern.json -> 'types.${typeName}.${fieldName}' must be 'string' | 'number' | 'boolean' | string[] | CustomType | CustomType[]`
197
+ `[${componentName}] pattern.json -> 'types.${typeName}.${fieldName}' must be 'string' | 'number' | 'boolean' | 'color' | string[] | CustomType | CustomType[]`
171
198
  );
172
199
  }
173
200
  }
@@ -176,12 +203,18 @@ async function validatePatternJson(componentDir, componentName) {
176
203
 
177
204
  // Resolve chained extends: walk up the chain, detect cycles, merge from base to child
178
205
  const componentsRoot = path.dirname(componentDir);
179
- const visited = new Set();
206
+ // Track visited folders and visited pattern.type values separately.
207
+ // Because we enforce `pattern.type === component folder name` (PascalCase),
208
+ // mixing them in a single Set can incorrectly flag a "cycle" immediately
209
+ // when a component extends `View`.
210
+ const visitedFolders = new Set();
211
+ const visitedTypes = new Set();
180
212
  const ancestorStack = [];
181
213
 
182
214
  // Track both componentName and current type for cycle detection
183
- visited.add(componentName);
184
- if (typeof data?.pattern?.type === 'string') visited.add(data.pattern.type);
215
+ visitedFolders.add(componentName);
216
+ if (typeof data?.pattern?.type === 'string')
217
+ visitedTypes.add(data.pattern.type);
185
218
 
186
219
  let cursor = data;
187
220
  // Collect raw ancestors without mutating child yet
@@ -190,12 +223,12 @@ async function validatePatternJson(componentDir, componentName) {
190
223
  cursor.pattern.extends.trim().length > 0
191
224
  ) {
192
225
  const parentName = cursor.pattern.extends.trim();
193
- if (visited.has(parentName)) {
226
+ if (visitedFolders.has(parentName)) {
194
227
  return fail(
195
228
  `Circular dependency detected in extends chain at '${parentName}'. We don't allow circular dependency.`
196
229
  );
197
230
  }
198
- visited.add(parentName);
231
+ visitedFolders.add(parentName);
199
232
 
200
233
  const parentDir = path.join(componentsRoot, parentName);
201
234
  const parentDirExists = await fs
@@ -240,14 +273,13 @@ async function validatePatternJson(componentDir, componentName) {
240
273
  );
241
274
  }
242
275
 
243
- // Detect cycle by type name too
244
276
  const parentType = parentData.pattern.type;
245
- if (visited.has(parentType)) {
277
+ if (visitedTypes.has(parentType)) {
246
278
  return fail(
247
279
  `Circular dependency detected in extends chain via type '${parentType}'. We don't allow circular dependency.`
248
280
  );
249
281
  }
250
- visited.add(parentType);
282
+ visitedTypes.add(parentType);
251
283
 
252
284
  ancestorStack.push(parentData);
253
285
  cursor = parentData;
@@ -270,14 +302,37 @@ async function validatePatternJson(componentDir, componentName) {
270
302
  : parentData?.pattern?.children;
271
303
 
272
304
  const mergedTypes = { ...(parentData.types || {}), ...(data.types || {}) };
305
+ const parentDefaults = buildDefaultsBlock(parentData);
306
+ const childDefaults = buildDefaultsBlock(data);
273
307
  const mergedDefaults = {
274
- ...(parentData.defaults || {}),
275
- ...(data.defaults || {}),
308
+ ...parentDefaults,
309
+ ...childDefaults,
310
+ // Deep-merge `defaults.style` so parent style defaults aren't blown away.
311
+ style: {
312
+ ...(isPlainObject(parentDefaults?.style) ? parentDefaults.style : {}),
313
+ ...(isPlainObject(childDefaults?.style) ? childDefaults.style : {}),
314
+ },
315
+ };
316
+ if (Object.keys(mergedDefaults.style || {}).length === 0) {
317
+ delete mergedDefaults.style;
318
+ }
319
+
320
+ const parentMetaStyles =
321
+ (parentData?.meta?.styles || parentData?.meta?.attributes || {}) ?? {};
322
+ const childMetaStyles =
323
+ (data?.meta?.styles || data?.meta?.attributes || {}) ?? {};
324
+ const mergedMetaStyles = {
325
+ ...(isPlainObject(parentMetaStyles) ? parentMetaStyles : {}),
326
+ ...(isPlainObject(childMetaStyles) ? childMetaStyles : {}),
276
327
  };
277
- const mergedAllowUnknown =
278
- typeof data.allowUnknownAttributes === 'boolean'
279
- ? data.allowUnknownAttributes
280
- : parentData.allowUnknownAttributes;
328
+ const mergedMeta =
329
+ parentData.meta || data.meta
330
+ ? {
331
+ ...(parentData.meta || {}),
332
+ ...(data.meta || {}),
333
+ styles: mergedMetaStyles,
334
+ }
335
+ : undefined;
281
336
 
282
337
  const mergedPattern = {
283
338
  ...parentData.pattern,
@@ -291,13 +346,21 @@ async function validatePatternJson(componentDir, componentName) {
291
346
  data = {
292
347
  ...parentData,
293
348
  ...data,
294
- allowUnknownAttributes: mergedAllowUnknown,
295
349
  types: mergedTypes,
296
350
  defaults: mergedDefaults,
351
+ meta: mergedMeta,
297
352
  pattern: mergedPattern,
298
353
  };
299
354
  }
300
355
 
356
+ const resolvedDefaults = buildDefaultsBlock(data);
357
+ if (Object.keys(resolvedDefaults).length > 0) {
358
+ data = {
359
+ ...data,
360
+ defaults: resolvedDefaults,
361
+ };
362
+ }
363
+
301
364
  return data;
302
365
  }
303
366
 
@@ -30,11 +30,6 @@ export async function validatePatternJson(componentDir, componentName) {
30
30
  `[${componentName}] pattern.json -> 'schemaVersion' must be a number`
31
31
  );
32
32
  }
33
- if (typeof data.allowUnknownAttributes !== 'boolean') {
34
- return fail(
35
- `[${componentName}] pattern.json -> 'allowUnknownAttributes' must be a boolean`
36
- );
37
- }
38
33
  if (typeof data.pattern !== 'object' || data.pattern == null) {
39
34
  return fail(
40
35
  `[${componentName}] pattern.json -> 'pattern' must be an object`
@@ -46,12 +41,19 @@ export async function validatePatternJson(componentDir, componentName) {
46
41
  `[${componentName}] pattern.json -> 'pattern.type' must be a string`
47
42
  );
48
43
  }
49
- if (
50
- typeof pattern.children !== 'string' &&
51
- !Array.isArray(pattern.children)
52
- ) {
44
+ // children spec can only be: node | string | never
45
+ // - "node" means: Node | Node[]
46
+ // - "string" means: text node
47
+ // - "never" means: no children allowed
48
+ if (typeof pattern.children !== 'string') {
53
49
  return fail(
54
- `[${componentName}] pattern.json -> 'pattern.children' must be a string or an array`
50
+ `[${componentName}] pattern.json -> 'pattern.children' must be a string`
51
+ );
52
+ }
53
+ const allowedChildrenKinds = new Set(['node', 'string', 'never']);
54
+ if (!allowedChildrenKinds.has(pattern.children)) {
55
+ return fail(
56
+ `[${componentName}] pattern.json -> 'pattern.children' must be one of: node | string | never`
55
57
  );
56
58
  }
57
59
  if (typeof pattern.attributes !== 'object' || pattern.attributes == null) {
@@ -60,15 +62,24 @@ export async function validatePatternJson(componentDir, componentName) {
60
62
  );
61
63
  }
62
64
 
65
+ const isPrimitiveType = value =>
66
+ value === 'string' ||
67
+ value === 'number' ||
68
+ value === 'boolean' ||
69
+ value === 'color' ||
70
+ value === 'size' ||
71
+ value === 'iconType';
72
+
63
73
  for (const [attrName, attrType] of Object.entries(pattern.attributes)) {
64
74
  const isValidType =
65
- typeof attrType === 'string' &&
66
- (attrType === 'string' || attrType === 'number' || attrType === 'boolean')
67
- ? true
68
- : Array.isArray(attrType) && attrType.every(v => typeof v === 'string');
75
+ (typeof attrType === 'string' && isPrimitiveType(attrType)) ||
76
+ (typeof attrType === 'string' &&
77
+ attrType.endsWith('[]') &&
78
+ isPrimitiveType(attrType.slice(0, -2))) ||
79
+ (Array.isArray(attrType) && attrType.every(v => typeof v === 'string'));
69
80
  if (!isValidType) {
70
81
  return fail(
71
- `[${componentName}] pattern.json -> 'pattern.attributes.${attrName}' must be 'string' | 'number' | 'boolean' | string[]`
82
+ `[${componentName}] pattern.json -> 'pattern.attributes.${attrName}' must be 'string' | 'number' | 'boolean' | 'color' | 'size' | 'iconType' | string[]`
72
83
  );
73
84
  }
74
85
  }
package/src/.DS_Store ADDED
Binary file