meno-core 1.0.53 → 1.1.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 (415) hide show
  1. package/.claude/settings.local.json +1 -3
  2. package/bin/cli.ts +66 -261
  3. package/build-astro.ts +150 -128
  4. package/dist/bin/cli.js +42 -185
  5. package/dist/bin/cli.js.map +2 -2
  6. package/dist/chunks/chunk-2AR55GYH.js +42 -0
  7. package/dist/chunks/chunk-2AR55GYH.js.map +7 -0
  8. package/dist/chunks/{chunk-JGWFTO6P.js → chunk-2IIQK7T3.js} +2624 -1389
  9. package/dist/chunks/chunk-2IIQK7T3.js.map +7 -0
  10. package/dist/chunks/chunk-4ZRU52J2.js +169 -0
  11. package/dist/chunks/chunk-4ZRU52J2.js.map +7 -0
  12. package/dist/chunks/{chunk-UB44F4Z2.js → chunk-5X4HCN7J.js} +5 -7
  13. package/dist/chunks/chunk-5X4HCN7J.js.map +7 -0
  14. package/dist/chunks/{chunk-WQFG7PAH.js → chunk-7CCVOL5M.js} +15 -19
  15. package/dist/chunks/chunk-7CCVOL5M.js.map +7 -0
  16. package/dist/chunks/{chunk-YBLHKYFF.js → chunk-AR7LHIFY.js} +8 -2
  17. package/dist/chunks/chunk-AR7LHIFY.js.map +7 -0
  18. package/dist/chunks/{chunk-O3NAGJP4.js → chunk-NUP7H7D3.js} +135 -41
  19. package/dist/chunks/chunk-NUP7H7D3.js.map +7 -0
  20. package/dist/chunks/{chunk-X754AHS5.js → chunk-QWTQZHG3.js} +194 -90
  21. package/dist/chunks/chunk-QWTQZHG3.js.map +7 -0
  22. package/dist/chunks/{chunk-H3GJ4H2U.js → chunk-XTKNX4FW.js} +216 -87
  23. package/dist/chunks/chunk-XTKNX4FW.js.map +7 -0
  24. package/dist/chunks/{fs-JGINUXGL.js → fs-G3ANWEFP.js} +2 -2
  25. package/dist/lib/client/index.js +1003 -475
  26. package/dist/lib/client/index.js.map +3 -3
  27. package/dist/lib/server/index.js +14393 -6371
  28. package/dist/lib/server/index.js.map +4 -4
  29. package/dist/lib/shared/index.js +342 -101
  30. package/dist/lib/shared/index.js.map +4 -4
  31. package/dist/lib/shared/richtext/index.js +1 -1
  32. package/dist/lib/test-utils/index.js +64 -80
  33. package/dist/lib/test-utils/index.js.map +2 -2
  34. package/entries/client-router.tsx +10 -8
  35. package/lib/client/ClientInitializer.ts +8 -8
  36. package/lib/client/ErrorBoundary.test.tsx +246 -186
  37. package/lib/client/ErrorBoundary.tsx +183 -132
  38. package/lib/client/componentRegistry.test.ts +96 -108
  39. package/lib/client/componentRegistry.ts +1 -3
  40. package/lib/client/contexts/ThemeContext.tsx +3 -2
  41. package/lib/client/core/ComponentBuilder.test.ts +663 -560
  42. package/lib/client/core/ComponentBuilder.ts +427 -155
  43. package/lib/client/core/ComponentRenderer.test.tsx +2 -4
  44. package/lib/client/core/ComponentRenderer.tsx +46 -33
  45. package/lib/client/core/builders/embedBuilder.ts +242 -54
  46. package/lib/client/core/builders/linkBuilder.ts +72 -45
  47. package/lib/client/core/builders/linkNodeBuilder.ts +79 -54
  48. package/lib/client/core/builders/listBuilder.ts +155 -89
  49. package/lib/client/core/builders/localeListBuilder.ts +97 -62
  50. package/lib/client/core/builders/types.ts +5 -5
  51. package/lib/client/core/cmsTemplateProcessor.ts +8 -9
  52. package/lib/client/elementRegistry.ts +3 -3
  53. package/lib/client/fontFamiliesService.test.ts +2 -10
  54. package/lib/client/fontFamiliesService.ts +3 -3
  55. package/lib/client/hmr/HMRManager.tsx +47 -30
  56. package/lib/client/hmrCssReload.ts +49 -14
  57. package/lib/client/hmrWebSocket.ts +14 -19
  58. package/lib/client/hooks/useColorVariables.test.ts +21 -21
  59. package/lib/client/hooks/useColorVariables.ts +23 -18
  60. package/lib/client/hooks/usePropertyAutocomplete.ts +4 -6
  61. package/lib/client/hooks/useVariables.ts +6 -4
  62. package/lib/client/hydration/HydrationUtils.test.ts +24 -25
  63. package/lib/client/hydration/HydrationUtils.ts +3 -4
  64. package/lib/client/i18nConfigService.test.ts +2 -7
  65. package/lib/client/i18nConfigService.ts +2 -2
  66. package/lib/client/meno-filter/MenoFilter.test.ts +47 -49
  67. package/lib/client/meno-filter/MenoFilter.ts +14 -15
  68. package/lib/client/meno-filter/bindings.ts +18 -43
  69. package/lib/client/meno-filter/init.ts +4 -4
  70. package/lib/client/meno-filter/renderer.ts +30 -32
  71. package/lib/client/meno-filter/script.generated.ts +1 -3
  72. package/lib/client/meno-filter/ui.ts +4 -6
  73. package/lib/client/meno-filter/updates.ts +18 -23
  74. package/lib/client/meno-filter/utils.ts +1 -1
  75. package/lib/client/navigation.test.ts +174 -178
  76. package/lib/client/navigation.ts +0 -1
  77. package/lib/client/responsiveStyleResolver.knownTokens.test.ts +71 -0
  78. package/lib/client/responsiveStyleResolver.test.ts +234 -232
  79. package/lib/client/responsiveStyleResolver.ts +74 -20
  80. package/lib/client/routing/RouteLoader.test.ts +24 -25
  81. package/lib/client/routing/RouteLoader.ts +27 -35
  82. package/lib/client/routing/Router.tsx +210 -153
  83. package/lib/client/scripts/ScriptExecutor.test.ts +157 -158
  84. package/lib/client/scripts/ScriptExecutor.ts +18 -36
  85. package/lib/client/services/PrefetchService.test.ts +3 -3
  86. package/lib/client/services/PrefetchService.ts +23 -29
  87. package/lib/client/styleProcessor.test.ts +9 -9
  88. package/lib/client/styleProcessor.ts +24 -15
  89. package/lib/client/styles/StyleInjector.test.ts +122 -115
  90. package/lib/client/styles/StyleInjector.ts +10 -7
  91. package/lib/client/styles/UtilityClassCollector.ts +62 -28
  92. package/lib/client/styles/cspNonce.test.ts +2 -5
  93. package/lib/client/templateEngine.test.ts +554 -488
  94. package/lib/client/templateEngine.ts +203 -73
  95. package/lib/client/theme.test.ts +1 -1
  96. package/lib/client/theme.ts +0 -1
  97. package/lib/client/utils/toast.ts +0 -1
  98. package/lib/server/__integration__/api-routes.test.ts +8 -4
  99. package/lib/server/__integration__/cms-integration.test.ts +1 -4
  100. package/lib/server/__integration__/server-lifecycle.test.ts +4 -5
  101. package/lib/server/__integration__/ssr-rendering.test.ts +47 -37
  102. package/lib/server/__integration__/static-assets.test.ts +3 -3
  103. package/lib/server/__integration__/test-helpers.ts +87 -74
  104. package/lib/server/ab/generateFunctions.ts +12 -10
  105. package/lib/server/astro/cmsPageEmitter.ts +26 -42
  106. package/lib/server/astro/componentEmitter.ts +35 -43
  107. package/lib/server/astro/cssCollector.ts +10 -26
  108. package/lib/server/astro/nodeToAstro.test.ts +1754 -34
  109. package/lib/server/astro/nodeToAstro.ts +232 -216
  110. package/lib/server/astro/normalizeOrphanTemplateProps.test.ts +115 -119
  111. package/lib/server/astro/normalizeOrphanTemplateProps.ts +11 -18
  112. package/lib/server/astro/pageEmitter.ts +9 -13
  113. package/lib/server/astro/tailwindMapper.test.ts +10 -37
  114. package/lib/server/astro/tailwindMapper.ts +33 -40
  115. package/lib/server/astro/templateTransformer.ts +17 -20
  116. package/lib/server/createServer.ts +7 -19
  117. package/lib/server/cssGenerator.test.ts +35 -44
  118. package/lib/server/cssGenerator.ts +8 -19
  119. package/lib/server/fileWatcher.test.ts +164 -13
  120. package/lib/server/fileWatcher.ts +209 -124
  121. package/lib/server/index.ts +14 -17
  122. package/lib/server/jsonLoader.test.ts +39 -2
  123. package/lib/server/jsonLoader.ts +39 -34
  124. package/lib/server/middleware/cors.test.ts +21 -21
  125. package/lib/server/middleware/cors.ts +28 -4
  126. package/lib/server/middleware/errorHandler.test.ts +7 -5
  127. package/lib/server/middleware/errorHandler.ts +3 -8
  128. package/lib/server/middleware/index.ts +0 -1
  129. package/lib/server/middleware/logger.test.ts +10 -8
  130. package/lib/server/middleware/logger.ts +17 -29
  131. package/lib/server/migrateTemplates.ts +3 -3
  132. package/lib/server/pageCache.test.ts +76 -77
  133. package/lib/server/pageCache.ts +0 -1
  134. package/lib/server/projectContext.ts +5 -4
  135. package/lib/server/providers/fileSystemCMSProvider.test.ts +142 -99
  136. package/lib/server/providers/fileSystemCMSProvider.ts +62 -38
  137. package/lib/server/routes/api/cms.test.ts +26 -14
  138. package/lib/server/routes/api/cms.ts +9 -14
  139. package/lib/server/routes/api/colors.test.ts +2 -2
  140. package/lib/server/routes/api/components.ts +31 -35
  141. package/lib/server/routes/api/config.ts +3 -4
  142. package/lib/server/routes/api/core-routes.ts +49 -76
  143. package/lib/server/routes/api/enums.test.ts +2 -2
  144. package/lib/server/routes/api/functions.ts +9 -17
  145. package/lib/server/routes/api/index.ts +3 -6
  146. package/lib/server/routes/api/pages.ts +8 -11
  147. package/lib/server/routes/api/shared.test.ts +1 -1
  148. package/lib/server/routes/api/shared.ts +12 -9
  149. package/lib/server/routes/api/variables.test.ts +3 -5
  150. package/lib/server/routes/api/variables.ts +1 -1
  151. package/lib/server/routes/index.ts +25 -28
  152. package/lib/server/routes/pages.ts +35 -31
  153. package/lib/server/routes/static.ts +17 -6
  154. package/lib/server/runtime/bundler.ts +98 -61
  155. package/lib/server/runtime/fs.ts +16 -26
  156. package/lib/server/runtime/httpServer.ts +8 -12
  157. package/lib/server/services/ColorService.test.ts +3 -3
  158. package/lib/server/services/ColorService.ts +37 -29
  159. package/lib/server/services/EnumService.test.ts +4 -8
  160. package/lib/server/services/EnumService.ts +11 -3
  161. package/lib/server/services/VariableService.test.ts +8 -12
  162. package/lib/server/services/VariableService.ts +11 -3
  163. package/lib/server/services/cmsService.test.ts +158 -120
  164. package/lib/server/services/cmsService.ts +36 -146
  165. package/lib/server/services/componentService.test.ts +125 -45
  166. package/lib/server/services/componentService.ts +70 -46
  167. package/lib/server/services/configService.test.ts +22 -45
  168. package/lib/server/services/configService.ts +50 -27
  169. package/lib/server/services/fileWatcherService.ts +42 -8
  170. package/lib/server/services/index.ts +0 -1
  171. package/lib/server/services/pageService.test.ts +8 -10
  172. package/lib/server/services/pageService.ts +32 -18
  173. package/lib/server/ssr/attributeBuilder.ts +18 -8
  174. package/lib/server/ssr/buildErrorOverlay.ts +11 -12
  175. package/lib/server/ssr/clientDataInjector.ts +7 -21
  176. package/lib/server/ssr/cmsSSRProcessor.ts +4 -8
  177. package/lib/server/ssr/cssCollector.ts +1 -1
  178. package/lib/server/ssr/errorOverlay.test.ts +1 -1
  179. package/lib/server/ssr/errorOverlay.ts +3 -9
  180. package/lib/server/ssr/htmlGenerator.nonce.test.ts +9 -14
  181. package/lib/server/ssr/htmlGenerator.test.ts +120 -44
  182. package/lib/server/ssr/htmlGenerator.ts +126 -91
  183. package/lib/server/ssr/imageMetadata.test.ts +3 -1
  184. package/lib/server/ssr/imageMetadata.ts +27 -21
  185. package/lib/server/ssr/jsCollector.test.ts +8 -18
  186. package/lib/server/ssr/jsCollector.ts +3 -8
  187. package/lib/server/ssr/liveReloadIntegration.test.ts +76 -36
  188. package/lib/server/ssr/metaTagGenerator.ts +2 -2
  189. package/lib/server/ssr/ssrRenderer.branches.test.ts +1103 -0
  190. package/lib/server/ssr/ssrRenderer.test.ts +316 -256
  191. package/lib/server/ssr/ssrRenderer.ts +795 -243
  192. package/lib/server/ssrRenderer.test.ts +1048 -954
  193. package/lib/server/utils/jsonLineMapper.test.ts +28 -28
  194. package/lib/server/utils/jsonLineMapper.ts +7 -7
  195. package/lib/server/validateStyleCoverage.ts +18 -21
  196. package/lib/server/websocketManager.ts +28 -19
  197. package/lib/shared/attributeNodeUtils.test.ts +15 -15
  198. package/lib/shared/attributeNodeUtils.ts +5 -12
  199. package/lib/shared/breakpoints.test.ts +5 -5
  200. package/lib/shared/breakpoints.ts +4 -11
  201. package/lib/shared/cmsQuery.test.ts +81 -0
  202. package/lib/shared/cmsQuery.ts +92 -0
  203. package/lib/shared/cmsQueryParser.test.ts +50 -42
  204. package/lib/shared/cmsQueryParser.ts +60 -38
  205. package/lib/shared/colorConversions.ts +9 -9
  206. package/lib/shared/colorVariableUtils.test.ts +27 -5
  207. package/lib/shared/colorVariableUtils.ts +21 -12
  208. package/lib/shared/componentRefs.ts +1 -5
  209. package/lib/shared/constants.test.ts +3 -3
  210. package/lib/shared/constants.ts +8 -8
  211. package/lib/shared/cssGeneration.test.ts +285 -144
  212. package/lib/shared/cssGeneration.ts +217 -531
  213. package/lib/shared/cssNamedColors.ts +152 -30
  214. package/lib/shared/cssProperties.test.ts +69 -70
  215. package/lib/shared/cssProperties.ts +298 -114
  216. package/lib/shared/elementClassName.test.ts +109 -109
  217. package/lib/shared/elementClassName.ts +3 -3
  218. package/lib/shared/elementUtils.ts +12 -16
  219. package/lib/shared/errorLogger.test.ts +12 -12
  220. package/lib/shared/errorLogger.ts +2 -10
  221. package/lib/shared/errors.test.ts +2 -13
  222. package/lib/shared/errors.ts +2 -8
  223. package/lib/shared/expressionEvaluator.test.ts +145 -0
  224. package/lib/shared/expressionEvaluator.ts +52 -24
  225. package/lib/shared/fontLoader.test.ts +32 -18
  226. package/lib/shared/fontLoader.ts +2 -2
  227. package/lib/shared/friendlyError.ts +2 -3
  228. package/lib/shared/gradientUtils.test.ts +3 -7
  229. package/lib/shared/gradientUtils.ts +17 -14
  230. package/lib/shared/hrefRefs.test.ts +2 -2
  231. package/lib/shared/hrefRefs.ts +2 -10
  232. package/lib/shared/i18n.test.ts +4 -4
  233. package/lib/shared/i18n.ts +18 -38
  234. package/lib/shared/index.ts +27 -0
  235. package/lib/shared/inlineSvgStyleRules.ts +14 -13
  236. package/lib/shared/interactiveStyleMappings.test.ts +32 -54
  237. package/lib/shared/interactiveStyleMappings.ts +11 -24
  238. package/lib/shared/interactiveStyles.test.ts +165 -188
  239. package/lib/shared/interfaces/contentProvider.ts +1 -1
  240. package/lib/shared/itemTemplateUtils.test.ts +11 -17
  241. package/lib/shared/itemTemplateUtils.ts +27 -39
  242. package/lib/shared/jsonRepair.ts +16 -10
  243. package/lib/shared/libraryLoader.test.ts +21 -55
  244. package/lib/shared/libraryLoader.ts +7 -22
  245. package/lib/shared/linkUtils.ts +1 -1
  246. package/lib/shared/logger.test.ts +66 -0
  247. package/lib/shared/logger.ts +94 -0
  248. package/lib/shared/markdown.ts +25 -0
  249. package/lib/shared/netlifyLocale404.test.ts +179 -0
  250. package/lib/shared/netlifyLocale404.ts +110 -0
  251. package/lib/shared/nodeUtils.test.ts +28 -16
  252. package/lib/shared/nodeUtils.ts +76 -23
  253. package/lib/shared/pathArrayUtils.test.ts +1 -2
  254. package/lib/shared/pathArrayUtils.ts +1 -1
  255. package/lib/shared/pathSecurity.ts +2 -2
  256. package/lib/shared/pathUtils.test.ts +4 -6
  257. package/lib/shared/pathUtils.ts +42 -49
  258. package/lib/shared/paths/Path.test.ts +2 -2
  259. package/lib/shared/paths/Path.ts +0 -1
  260. package/lib/shared/paths/PathConverter.test.ts +1 -1
  261. package/lib/shared/paths/PathConverter.ts +17 -20
  262. package/lib/shared/paths/PathUtils.ts +13 -13
  263. package/lib/shared/paths/PathValidator.test.ts +2 -15
  264. package/lib/shared/paths/PathValidator.ts +12 -10
  265. package/lib/shared/paths/index.ts +1 -2
  266. package/lib/shared/permissions.test.ts +168 -0
  267. package/lib/shared/permissions.ts +162 -0
  268. package/lib/shared/propResolver.test.ts +240 -244
  269. package/lib/shared/propResolver.ts +15 -26
  270. package/lib/shared/pxToRem.test.ts +7 -6
  271. package/lib/shared/pxToRem.ts +2 -5
  272. package/lib/shared/registry/BaseNodeTypeRegistry.test.ts +12 -6
  273. package/lib/shared/registry/ClientRegistry.ts +0 -2
  274. package/lib/shared/registry/ComponentRegistry.test.ts +46 -32
  275. package/lib/shared/registry/ComponentRegistry.ts +12 -9
  276. package/lib/shared/registry/NodeTypeDefinition.ts +16 -9
  277. package/lib/shared/registry/RegistryManager.ts +1 -2
  278. package/lib/shared/registry/SSRRegistry.ts +0 -2
  279. package/lib/shared/registry/createNodeType.ts +7 -9
  280. package/lib/shared/registry/defineNodeType.ts +2 -6
  281. package/lib/shared/registry/fieldPresets.ts +3 -1
  282. package/lib/shared/registry/index.ts +0 -1
  283. package/lib/shared/registry/nodeTypes/ComponentInstanceNodeType.ts +14 -15
  284. package/lib/shared/registry/nodeTypes/CustomNodeType.ts +103 -0
  285. package/lib/shared/registry/nodeTypes/EmbedNodeType.ts +18 -11
  286. package/lib/shared/registry/nodeTypes/HtmlNodeType.ts +48 -19
  287. package/lib/shared/registry/nodeTypes/IslandNodeType.ts +129 -0
  288. package/lib/shared/registry/nodeTypes/LinkNodeType.ts +21 -19
  289. package/lib/shared/registry/nodeTypes/ListNodeType.ts +117 -77
  290. package/lib/shared/registry/nodeTypes/LocaleListNodeType.ts +27 -21
  291. package/lib/shared/registry/nodeTypes/MarkdownNodeType.ts +78 -0
  292. package/lib/shared/registry/nodeTypes/SlotMarkerType.ts +12 -8
  293. package/lib/shared/registry/nodeTypes/index.ts +26 -3
  294. package/lib/shared/responsiveScaling.test.ts +16 -34
  295. package/lib/shared/responsiveScaling.ts +61 -42
  296. package/lib/shared/responsiveStyleUtils.test.ts +0 -1
  297. package/lib/shared/responsiveStyleUtils.ts +11 -13
  298. package/lib/shared/richtext/htmlToTiptap.test.ts +139 -130
  299. package/lib/shared/richtext/htmlToTiptap.ts +2 -4
  300. package/lib/shared/richtext/tiptapToHtml.test.ts +5 -6
  301. package/lib/shared/richtext/types.ts +1 -8
  302. package/lib/shared/slugTranslator.test.ts +13 -13
  303. package/lib/shared/slugTranslator.ts +12 -16
  304. package/lib/shared/slugify.ts +9 -15
  305. package/lib/shared/styleNodeUtils.test.ts +8 -8
  306. package/lib/shared/styleNodeUtils.ts +18 -20
  307. package/lib/shared/styleUtils.test.ts +87 -61
  308. package/lib/shared/styleUtils.ts +5 -6
  309. package/lib/shared/themeDefaults.test.ts +11 -14
  310. package/lib/shared/themeDefaults.ts +3 -4
  311. package/lib/shared/tree/PathBuilder.test.ts +63 -145
  312. package/lib/shared/tree/PathBuilder.ts +59 -47
  313. package/lib/shared/treePathUtils.test.ts +51 -12
  314. package/lib/shared/treePathUtils.ts +91 -60
  315. package/lib/shared/types/api.ts +105 -8
  316. package/lib/shared/types/cms.test.ts +34 -0
  317. package/lib/shared/types/cms.ts +90 -34
  318. package/lib/shared/types/comment.ts +49 -16
  319. package/lib/shared/types/components.ts +51 -25
  320. package/lib/shared/types/errors.test.ts +1 -6
  321. package/lib/shared/types/errors.ts +3 -7
  322. package/lib/shared/types/experiments.ts +28 -28
  323. package/lib/shared/types/index.ts +25 -2
  324. package/lib/shared/types/permissions.ts +139 -0
  325. package/lib/shared/types/styles.ts +0 -1
  326. package/lib/shared/types/variables.test.ts +4 -13
  327. package/lib/shared/types/variables.ts +51 -30
  328. package/lib/shared/types.ts +1 -2
  329. package/lib/shared/utilityClassConfig.ts +751 -321
  330. package/lib/shared/utilityClassMapper.durability.test.ts +117 -0
  331. package/lib/shared/utilityClassMapper.test.ts +433 -95
  332. package/lib/shared/utilityClassMapper.ts +322 -249
  333. package/lib/shared/utilityClassNames.test.ts +38 -0
  334. package/lib/shared/utilityClassNames.ts +458 -0
  335. package/lib/shared/utils.test.ts +2 -10
  336. package/lib/shared/utils.ts +19 -10
  337. package/lib/shared/validation/cmsValidators.ts +2 -1
  338. package/lib/shared/validation/commentValidators.test.ts +53 -0
  339. package/lib/shared/validation/commentValidators.ts +12 -1
  340. package/lib/shared/validation/index.ts +1 -0
  341. package/lib/shared/validation/permissionsValidators.test.ts +49 -0
  342. package/lib/shared/validation/permissionsValidators.ts +49 -0
  343. package/lib/shared/validation/propValidator.test.ts +19 -21
  344. package/lib/shared/validation/propValidator.ts +13 -18
  345. package/lib/shared/validation/schemas.test.ts +64 -32
  346. package/lib/shared/validation/schemas.ts +616 -345
  347. package/lib/shared/validation/validators.test.ts +3 -8
  348. package/lib/shared/validation/validators.ts +89 -68
  349. package/lib/shared/viewportUnits.integration.test.ts +14 -10
  350. package/lib/shared/viewportUnits.test.ts +24 -23
  351. package/lib/shared/viewportUnits.ts +12 -5
  352. package/lib/test-utils/dom-setup.ts +1 -1
  353. package/lib/test-utils/factories/ConsoleMockFactory.ts +10 -14
  354. package/lib/test-utils/factories/DomMockFactory.ts +17 -23
  355. package/lib/test-utils/factories/EventMockFactory.ts +7 -13
  356. package/lib/test-utils/factories/FetchMockFactory.ts +39 -57
  357. package/lib/test-utils/factories/ServerMockFactory.ts +6 -10
  358. package/lib/test-utils/factories/StoreMockFactory.ts +18 -29
  359. package/lib/test-utils/fixtures.ts +45 -45
  360. package/lib/test-utils/helpers/asyncHelpers.test.ts +15 -18
  361. package/lib/test-utils/helpers/asyncHelpers.ts +11 -20
  362. package/lib/test-utils/helpers.ts +1 -5
  363. package/lib/test-utils/index.ts +0 -4
  364. package/lib/test-utils/mockFactories.ts +13 -19
  365. package/lib/test-utils/mocks.ts +6 -4
  366. package/package.json +3 -5
  367. package/scripts/build-for-publish.mjs +2 -4
  368. package/scripts/build-meno-filter.ts +4 -7
  369. package/tsconfig.json +1 -0
  370. package/vite.config.ts +4 -4
  371. package/build-next.ts +0 -1361
  372. package/build-static.test.ts +0 -424
  373. package/build-static.ts +0 -1074
  374. package/dist/build-static.js +0 -36
  375. package/dist/chunks/chunk-2MHDV5BF.js +0 -251
  376. package/dist/chunks/chunk-2MHDV5BF.js.map +0 -7
  377. package/dist/chunks/chunk-AZQYF6KE.js +0 -559
  378. package/dist/chunks/chunk-AZQYF6KE.js.map +0 -7
  379. package/dist/chunks/chunk-GZHGVVW3.js +0 -322
  380. package/dist/chunks/chunk-GZHGVVW3.js.map +0 -7
  381. package/dist/chunks/chunk-H3GJ4H2U.js.map +0 -7
  382. package/dist/chunks/chunk-I7YIGZXT.js +0 -467
  383. package/dist/chunks/chunk-I7YIGZXT.js.map +0 -7
  384. package/dist/chunks/chunk-IGYR22T6.js +0 -6192
  385. package/dist/chunks/chunk-IGYR22T6.js.map +0 -7
  386. package/dist/chunks/chunk-JGP5A3Y5.js +0 -1136
  387. package/dist/chunks/chunk-JGP5A3Y5.js.map +0 -7
  388. package/dist/chunks/chunk-JGWFTO6P.js.map +0 -7
  389. package/dist/chunks/chunk-O3NAGJP4.js.map +0 -7
  390. package/dist/chunks/chunk-QB2LNO4W.js +0 -77
  391. package/dist/chunks/chunk-QB2LNO4W.js.map +0 -7
  392. package/dist/chunks/chunk-R6XHAFBF.js +0 -3821
  393. package/dist/chunks/chunk-R6XHAFBF.js.map +0 -7
  394. package/dist/chunks/chunk-UB44F4Z2.js.map +0 -7
  395. package/dist/chunks/chunk-WQFG7PAH.js.map +0 -7
  396. package/dist/chunks/chunk-X754AHS5.js.map +0 -7
  397. package/dist/chunks/chunk-YBLHKYFF.js.map +0 -7
  398. package/dist/chunks/configService-R3OGU2UD.js +0 -13
  399. package/dist/chunks/configService-R3OGU2UD.js.map +0 -7
  400. package/dist/chunks/constants-STK2YBIW.js +0 -46
  401. package/dist/chunks/constants-STK2YBIW.js.map +0 -7
  402. package/dist/chunks/fs-JGINUXGL.js.map +0 -7
  403. package/dist/entries/server-router.js +0 -67
  404. package/dist/entries/server-router.js.map +0 -7
  405. package/entries/server-router.tsx +0 -81
  406. package/lib/server/providers/fileSystemPageProvider.ts +0 -160
  407. package/lib/server/webflow/buildWebflow.ts +0 -635
  408. package/lib/server/webflow/index.ts +0 -23
  409. package/lib/server/webflow/nodeToWebflow.test.ts +0 -3170
  410. package/lib/server/webflow/nodeToWebflow.ts +0 -2435
  411. package/lib/server/webflow/styleMapper.test.ts +0 -389
  412. package/lib/server/webflow/styleMapper.ts +0 -695
  413. package/lib/server/webflow/templateWrapper.ts +0 -49
  414. package/lib/server/webflow/types.ts +0 -396
  415. /package/dist/{build-static.js.map → chunks/fs-G3ANWEFP.js.map} +0 -0
@@ -11,7 +11,7 @@ export function isResponsiveStyle(style: StyleValue): style is ResponsiveStyleOb
11
11
  if (!style || typeof style !== 'object' || Array.isArray(style)) {
12
12
  return false;
13
13
  }
14
-
14
+
15
15
  // Check if it has base, tablet, or mobile keys (indicating responsive format)
16
16
  return 'base' in style || 'tablet' in style || 'mobile' in style;
17
17
  }
@@ -23,14 +23,14 @@ export function isStyleObject(style: unknown): style is StyleObject {
23
23
  if (!style || typeof style !== 'object' || Array.isArray(style)) {
24
24
  return false;
25
25
  }
26
-
26
+
27
27
  // StyleObject is a record of string keys to string | number | StyleMapping values
28
28
  // Check that it's not a ResponsiveStyleObject (which has base/tablet/mobile keys)
29
29
  // Use proper type narrowing instead of assertion
30
30
  if (!('base' in style) && !('tablet' in style) && !('mobile' in style)) {
31
31
  // All values should be string, number, or objects with _mapping property
32
32
  const obj = style as Record<string, unknown>;
33
- return Object.values(obj).every(value => {
33
+ return Object.values(obj).every((value) => {
34
34
  if (typeof value === 'string' || typeof value === 'number') {
35
35
  return true;
36
36
  }
@@ -40,7 +40,7 @@ export function isStyleObject(style: unknown): style is StyleObject {
40
40
  return false;
41
41
  });
42
42
  }
43
-
43
+
44
44
  return false; // This is a ResponsiveStyleObject, not a StyleObject
45
45
  }
46
46
 
@@ -51,7 +51,7 @@ export function isStyleValue(style: unknown): style is StyleValue {
51
51
  if (!style || typeof style !== 'object' || Array.isArray(style)) {
52
52
  return false;
53
53
  }
54
-
54
+
55
55
  // Check if it's a ResponsiveStyleObject
56
56
  if (isResponsiveStyle(style as StyleValue)) {
57
57
  return true;
@@ -60,4 +60,3 @@ export function isStyleValue(style: unknown): style is StyleValue {
60
60
  // Check if it's a StyleObject
61
61
  return isStyleObject(style);
62
62
  }
63
-
@@ -5,9 +5,6 @@ import {
5
5
  DEFAULT_TEXTAREA_STYLE,
6
6
  DEFAULT_PROPS_PANEL_COLORS,
7
7
  LIGHT_PROPS_PANEL_COLORS,
8
- type PropsPanelColors,
9
- type PropsPanelSpacing,
10
- type PropsPanelInputStyle,
11
8
  } from './themeDefaults';
12
9
 
13
10
  describe('themeDefaults', () => {
@@ -26,16 +23,16 @@ describe('themeDefaults', () => {
26
23
  });
27
24
 
28
25
  describe('DEFAULT_INPUT_STYLE', () => {
29
- test('should have Consolas monospace font', () => {
30
- expect(DEFAULT_INPUT_STYLE.fontFamily).toBe('Consolas, monospace');
26
+ test('should have Inter UI font stack', () => {
27
+ expect(DEFAULT_INPUT_STYLE.fontFamily).toBe("'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif");
31
28
  });
32
29
 
33
- test('should have 12px font size', () => {
34
- expect(DEFAULT_INPUT_STYLE.fontSize).toBe('12px');
30
+ test('should have 13px font size', () => {
31
+ expect(DEFAULT_INPUT_STYLE.fontSize).toBe('13px');
35
32
  });
36
33
 
37
- test('should have 4px 6px padding', () => {
38
- expect(DEFAULT_INPUT_STYLE.padding).toBe('4px 6px');
34
+ test('should have 6px 8px padding', () => {
35
+ expect(DEFAULT_INPUT_STYLE.padding).toBe('6px 8px');
39
36
  });
40
37
 
41
38
  test('should have 3px border radius', () => {
@@ -56,8 +53,8 @@ describe('themeDefaults', () => {
56
53
  expect(DEFAULT_TEXTAREA_STYLE.fontSize).toBe('13px');
57
54
  });
58
55
 
59
- test('should have 4px 6px padding', () => {
60
- expect(DEFAULT_TEXTAREA_STYLE.padding).toBe('4px 6px');
56
+ test('should have 6px 8px padding', () => {
57
+ expect(DEFAULT_TEXTAREA_STYLE.padding).toBe('6px 8px');
61
58
  });
62
59
 
63
60
  test('should have 3px border radius', () => {
@@ -103,7 +100,7 @@ describe('themeDefaults', () => {
103
100
  });
104
101
 
105
102
  test('should have input colors', () => {
106
- expect(DEFAULT_PROPS_PANEL_COLORS.inputBackground).toBe('#1e1e1e');
103
+ expect(DEFAULT_PROPS_PANEL_COLORS.inputBackground).toBe('#2a2a2a');
107
104
  expect(DEFAULT_PROPS_PANEL_COLORS.inputBorder).toBe('#444444');
108
105
  });
109
106
 
@@ -120,7 +117,7 @@ describe('themeDefaults', () => {
120
117
  });
121
118
 
122
119
  test('should have border colors', () => {
123
- expect(LIGHT_PROPS_PANEL_COLORS.border).toBe('#e0e0e0');
120
+ expect(LIGHT_PROPS_PANEL_COLORS.border).toBe('#e4e8ec');
124
121
  expect(LIGHT_PROPS_PANEL_COLORS.borderSecondary).toBe('#d0d0d0');
125
122
  });
126
123
 
@@ -146,7 +143,7 @@ describe('themeDefaults', () => {
146
143
  });
147
144
 
148
145
  test('should have input colors', () => {
149
- expect(LIGHT_PROPS_PANEL_COLORS.inputBackground).toBe('#ffffff');
146
+ expect(LIGHT_PROPS_PANEL_COLORS.inputBackground).toBe('#f5f7fa');
150
147
  expect(LIGHT_PROPS_PANEL_COLORS.inputBorder).toBe('#d0d0d0');
151
148
  });
152
149
 
@@ -31,9 +31,9 @@ export interface PropsPanelColors {
31
31
  * Spacing constants for props panel components
32
32
  */
33
33
  export interface PropsPanelSpacing {
34
- tight: string; // 2px - for label:colon:input gaps
35
- normal: string; // 4px - for standard gaps
36
- loose: string; // 8px - for larger gaps
34
+ tight: string; // 2px - for label:colon:input gaps
35
+ normal: string; // 4px - for standard gaps
36
+ loose: string; // 8px - for larger gaps
37
37
  }
38
38
 
39
39
  export const DEFAULT_PROPS_PANEL_SPACING: PropsPanelSpacing = {
@@ -129,4 +129,3 @@ export const LIGHT_PROPS_PANEL_COLORS: PropsPanelColors = {
129
129
  hoverBackground: '#f0f0f0',
130
130
  variableBackground: '#ebedf0',
131
131
  };
132
-
@@ -8,13 +8,7 @@
8
8
  */
9
9
 
10
10
  import { describe, it, expect } from 'bun:test';
11
- import {
12
- buildTreePathsWithRendered,
13
- buildComponentTreePaths,
14
- computeCumulativeInstancePath,
15
- type NavigationContext,
16
- } from './PathBuilder';
17
- import type { Path } from '../pathArrayUtils';
11
+ import { buildTreePathsWithRendered, computeCumulativeInstancePath, type NavigationContext } from './PathBuilder';
18
12
 
19
13
  // Helper to wrap component structure in expected PageData format
20
14
  function wrapAsComponentData(structure: any) {
@@ -32,11 +26,7 @@ describe('PathBuilder - post-slot element path calculation', () => {
32
26
  // Component structure: Header (0), Slot (1), Footer (2)
33
27
  const componentStructure = {
34
28
  tag: 'div',
35
- children: [
36
- { tag: 'header', children: 'Header' },
37
- { type: 'slot' },
38
- { tag: 'footer', children: 'Footer' },
39
- ],
29
+ children: [{ tag: 'header', children: 'Header' }, { type: 'slot' }, { tag: 'footer', children: 'Footer' }],
40
30
  };
41
31
 
42
32
  // Editing component with 3 children in the slot
@@ -55,13 +45,11 @@ describe('PathBuilder - post-slot element path calculation', () => {
55
45
  const paths = buildTreePathsWithRendered(
56
46
  wrapAsComponentData(componentStructure),
57
47
  undefined, // no registry needed for this test
58
- navigationHistory
48
+ navigationHistory,
59
49
  );
60
50
 
61
51
  // Find footer path (logical [0, 2])
62
- const footerPathData = paths.find(
63
- (p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2
64
- );
52
+ const footerPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2);
65
53
 
66
54
  expect(footerPathData).toBeDefined();
67
55
  // Footer should be at rendered [0, 4] because:
@@ -73,11 +61,7 @@ describe('PathBuilder - post-slot element path calculation', () => {
73
61
  it('should not offset pre-slot elements', () => {
74
62
  const componentStructure = {
75
63
  tag: 'div',
76
- children: [
77
- { tag: 'header', children: 'Header' },
78
- { type: 'slot' },
79
- { tag: 'footer', children: 'Footer' },
80
- ],
64
+ children: [{ tag: 'header', children: 'Header' }, { type: 'slot' }, { tag: 'footer', children: 'Footer' }],
81
65
  };
82
66
 
83
67
  const navigationHistory: NavigationContext[] = [
@@ -91,16 +75,10 @@ describe('PathBuilder - post-slot element path calculation', () => {
91
75
  },
92
76
  ];
93
77
 
94
- const paths = buildTreePathsWithRendered(
95
- wrapAsComponentData(componentStructure),
96
- undefined,
97
- navigationHistory
98
- );
78
+ const paths = buildTreePathsWithRendered(wrapAsComponentData(componentStructure), undefined, navigationHistory);
99
79
 
100
80
  // Find header path (logical [0, 0])
101
- const headerPathData = paths.find(
102
- (p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 0
103
- );
81
+ const headerPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 0);
104
82
 
105
83
  expect(headerPathData).toBeDefined();
106
84
  // Header should stay at rendered [0, 0] - no offset for pre-slot elements
@@ -110,11 +88,7 @@ describe('PathBuilder - post-slot element path calculation', () => {
110
88
  it('should handle empty slot (no offset needed)', () => {
111
89
  const componentStructure = {
112
90
  tag: 'div',
113
- children: [
114
- { tag: 'header', children: 'Header' },
115
- { type: 'slot' },
116
- { tag: 'footer', children: 'Footer' },
117
- ],
91
+ children: [{ tag: 'header', children: 'Header' }, { type: 'slot' }, { tag: 'footer', children: 'Footer' }],
118
92
  };
119
93
 
120
94
  const navigationHistory: NavigationContext[] = [
@@ -125,16 +99,10 @@ describe('PathBuilder - post-slot element path calculation', () => {
125
99
  },
126
100
  ];
127
101
 
128
- const paths = buildTreePathsWithRendered(
129
- wrapAsComponentData(componentStructure),
130
- undefined,
131
- navigationHistory
132
- );
102
+ const paths = buildTreePathsWithRendered(wrapAsComponentData(componentStructure), undefined, navigationHistory);
133
103
 
134
104
  // Find footer path (logical [0, 2])
135
- const footerPathData = paths.find(
136
- (p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2
137
- );
105
+ const footerPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2);
138
106
 
139
107
  expect(footerPathData).toBeDefined();
140
108
  // With empty slot, footer stays at rendered [0, 2] (no offset)
@@ -155,7 +123,7 @@ describe('PathBuilder - post-slot element path calculation', () => {
155
123
  { type: 'component', component: 'Section' }, // 1
156
124
  { type: 'component', component: 'Section' }, // 2
157
125
  { type: 'component', component: 'Section' }, // 3
158
- { type: 'slot' }, // 4 - CaseStudyLayout's slot
126
+ { type: 'slot' }, // 4 - CaseStudyLayout's slot
159
127
  { type: 'component', component: 'CtaSection' }, // 5 - after slot
160
128
  ],
161
129
  };
@@ -163,23 +131,26 @@ describe('PathBuilder - post-slot element path calculation', () => {
163
131
  // Mock registry with Layout structure
164
132
  // Layout has slot at [0, 1, 0] (div → main → slot)
165
133
  const mockRegistry = new Map([
166
- ['Layout', {
167
- component: {
168
- structure: {
169
- tag: 'div',
170
- children: [
171
- { component: 'Navigation' }, // 0
172
- {
173
- tag: 'main',
174
- children: [
175
- { type: 'slot' }, // slot at index 0 within main
176
- ],
177
- }, // 1
178
- { component: 'Footer' }, // 2
179
- ],
134
+ [
135
+ 'Layout',
136
+ {
137
+ component: {
138
+ structure: {
139
+ tag: 'div',
140
+ children: [
141
+ { component: 'Navigation' }, // 0
142
+ {
143
+ tag: 'main',
144
+ children: [
145
+ { type: 'slot' }, // slot at index 0 within main
146
+ ],
147
+ }, // 1
148
+ { component: 'Footer' }, // 2
149
+ ],
150
+ },
180
151
  },
181
152
  },
182
- }],
153
+ ],
183
154
  ]);
184
155
 
185
156
  // Editing CaseStudyLayout from a page that passes 1 child to slot
@@ -187,22 +158,18 @@ describe('PathBuilder - post-slot element path calculation', () => {
187
158
  {
188
159
  componentInstancePath: [0],
189
160
  componentInstanceRenderedPath: [0],
190
- instanceChildren: [
191
- { component: 'Section', children: 'Instance content' },
192
- ] as any, // 1 child passed to CaseStudyLayout's slot
161
+ instanceChildren: [{ component: 'Section', children: 'Instance content' }] as any, // 1 child passed to CaseStudyLayout's slot
193
162
  },
194
163
  ];
195
164
 
196
165
  const paths = buildTreePathsWithRendered(
197
166
  wrapAsComponentData(componentStructure),
198
167
  mockRegistry,
199
- navigationHistory
168
+ navigationHistory,
200
169
  );
201
170
 
202
171
  // Find CtaSection path (logical [0, 5])
203
- const ctaSectionPathData = paths.find(
204
- (p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 5
205
- );
172
+ const ctaSectionPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 5);
206
173
 
207
174
  expect(ctaSectionPathData).toBeDefined();
208
175
 
@@ -222,22 +189,25 @@ describe('PathBuilder - post-slot element path calculation', () => {
222
189
  component: 'Layout',
223
190
  children: [
224
191
  { type: 'component', component: 'Section' }, // 0
225
- { type: 'slot' }, // 1 - slot
192
+ { type: 'slot' }, // 1 - slot
226
193
  { type: 'component', component: 'CtaSection' }, // 2 - after slot
227
194
  ],
228
195
  };
229
196
 
230
197
  const mockRegistry = new Map([
231
- ['Layout', {
232
- component: {
233
- structure: {
234
- tag: 'div',
235
- children: [
236
- { type: 'slot' }, // Layout's slot at [0, 0]
237
- ],
198
+ [
199
+ 'Layout',
200
+ {
201
+ component: {
202
+ structure: {
203
+ tag: 'div',
204
+ children: [
205
+ { type: 'slot' }, // Layout's slot at [0, 0]
206
+ ],
207
+ },
238
208
  },
239
209
  },
240
- }],
210
+ ],
241
211
  ]);
242
212
 
243
213
  // 3 children passed to slot
@@ -245,24 +215,18 @@ describe('PathBuilder - post-slot element path calculation', () => {
245
215
  {
246
216
  componentInstancePath: [0],
247
217
  componentInstanceRenderedPath: [0],
248
- instanceChildren: [
249
- { tag: 'p' },
250
- { tag: 'p' },
251
- { tag: 'p' },
252
- ] as any,
218
+ instanceChildren: [{ tag: 'p' }, { tag: 'p' }, { tag: 'p' }] as any,
253
219
  },
254
220
  ];
255
221
 
256
222
  const paths = buildTreePathsWithRendered(
257
223
  wrapAsComponentData(componentStructure),
258
224
  mockRegistry,
259
- navigationHistory
225
+ navigationHistory,
260
226
  );
261
227
 
262
228
  // Find CtaSection path (logical [0, 2])
263
- const ctaSectionPathData = paths.find(
264
- (p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2
265
- );
229
+ const ctaSectionPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2);
266
230
 
267
231
  expect(ctaSectionPathData).toBeDefined();
268
232
 
@@ -284,11 +248,7 @@ describe('PathBuilder - post-slot element path calculation', () => {
284
248
  // Card structure: Header (0), Slot (1), Footer (2)
285
249
  const cardStructure = {
286
250
  tag: 'div',
287
- children: [
288
- { tag: 'div', children: 'Card Header' },
289
- { type: 'slot' },
290
- { tag: 'div', children: 'Card Footer' },
291
- ],
251
+ children: [{ tag: 'div', children: 'Card Header' }, { type: 'slot' }, { tag: 'div', children: 'Card Footer' }],
292
252
  };
293
253
 
294
254
  // Navigation history: first entered Section, then Card
@@ -316,16 +276,10 @@ describe('PathBuilder - post-slot element path calculation', () => {
316
276
  },
317
277
  ];
318
278
 
319
- const paths = buildTreePathsWithRendered(
320
- wrapAsComponentData(cardStructure),
321
- undefined,
322
- navigationHistory
323
- );
279
+ const paths = buildTreePathsWithRendered(wrapAsComponentData(cardStructure), undefined, navigationHistory);
324
280
 
325
281
  // Find Card's footer (logical [0, 2])
326
- const footerPathData = paths.find(
327
- (p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2
328
- );
282
+ const footerPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2);
329
283
 
330
284
  expect(footerPathData).toBeDefined();
331
285
 
@@ -342,11 +296,7 @@ describe('PathBuilder - post-slot element path calculation', () => {
342
296
 
343
297
  const componentC = {
344
298
  tag: 'div',
345
- children: [
346
- { tag: 'span', children: 'C Header' },
347
- { type: 'slot' },
348
- { tag: 'span', children: 'C Footer' },
349
- ],
299
+ children: [{ tag: 'span', children: 'C Header' }, { type: 'slot' }, { tag: 'span', children: 'C Footer' }],
350
300
  };
351
301
 
352
302
  // Each componentInstancePath is relative to the current view:
@@ -368,25 +318,14 @@ describe('PathBuilder - post-slot element path calculation', () => {
368
318
  {
369
319
  componentInstancePath: [0, 0], // C is first child in B's slot
370
320
  componentInstanceRenderedPath: [0, 0],
371
- instanceChildren: [
372
- { tag: 'div' },
373
- { tag: 'div' },
374
- { tag: 'div' },
375
- { tag: 'div' },
376
- ] as any, // C has 4 children
321
+ instanceChildren: [{ tag: 'div' }, { tag: 'div' }, { tag: 'div' }, { tag: 'div' }] as any, // C has 4 children
377
322
  },
378
323
  ];
379
324
 
380
- const paths = buildTreePathsWithRendered(
381
- wrapAsComponentData(componentC),
382
- undefined,
383
- navigationHistory
384
- );
325
+ const paths = buildTreePathsWithRendered(wrapAsComponentData(componentC), undefined, navigationHistory);
385
326
 
386
327
  // Find C's footer (logical [0, 2])
387
- const footerPathData = paths.find(
388
- (p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2
389
- );
328
+ const footerPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2);
390
329
 
391
330
  expect(footerPathData).toBeDefined();
392
331
 
@@ -406,15 +345,11 @@ describe('computeCumulativeInstancePath', () => {
406
345
  });
407
346
 
408
347
  it('returns the first entry path verbatim when there is one entry', () => {
348
+ expect(computeCumulativeInstancePath([{ componentInstancePath: [0], componentInstanceRenderedPath: [0] }])).toEqual(
349
+ [0],
350
+ );
409
351
  expect(
410
- computeCumulativeInstancePath([
411
- { componentInstancePath: [0], componentInstanceRenderedPath: [0] },
412
- ]),
413
- ).toEqual([0]);
414
- expect(
415
- computeCumulativeInstancePath([
416
- { componentInstancePath: [0, 2], componentInstanceRenderedPath: [0, 2] },
417
- ]),
352
+ computeCumulativeInstancePath([{ componentInstancePath: [0, 2], componentInstanceRenderedPath: [0, 2] }]),
418
353
  ).toEqual([0, 2]);
419
354
  });
420
355
 
@@ -436,10 +371,7 @@ describe('computeCumulativeInstancePath', () => {
436
371
 
437
372
  it('falls back to componentInstancePath when componentInstanceRenderedPath is missing', () => {
438
373
  expect(
439
- computeCumulativeInstancePath([
440
- { componentInstancePath: [0, 2] },
441
- { componentInstancePath: [0, 1] },
442
- ]),
374
+ computeCumulativeInstancePath([{ componentInstancePath: [0, 2] }, { componentInstancePath: [0, 1] }]),
443
375
  ).toEqual([0, 2, 1]);
444
376
  });
445
377
  });
@@ -467,16 +399,10 @@ describe('slotRenderedPaths on slot entries', () => {
467
399
  },
468
400
  ];
469
401
 
470
- const paths = buildTreePathsWithRendered(
471
- wrapAsComponentData(layoutStructure),
472
- undefined,
473
- navigationHistory,
474
- );
402
+ const paths = buildTreePathsWithRendered(wrapAsComponentData(layoutStructure), undefined, navigationHistory);
475
403
 
476
404
  // Slot's logical path is [0, 1] (second child of structure root).
477
- const slotEntry = paths.find(
478
- (p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 1,
479
- );
405
+ const slotEntry = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 1);
480
406
  expect(slotEntry).toBeDefined();
481
407
  expect(slotEntry!.renderedPath).toEqual([0, 1]);
482
408
  // With 7 instance children, the slot occupies positions 1..7 under the
@@ -503,16 +429,8 @@ describe('slotRenderedPaths on slot entries', () => {
503
429
  instanceChildren: [{ type: 'component' as const, component: 'Only' }] as any,
504
430
  },
505
431
  ];
506
- const noChildrenPaths = buildTreePathsWithRendered(
507
- wrapAsComponentData(layoutStructure),
508
- undefined,
509
- noChildren,
510
- );
511
- const oneChildPaths = buildTreePathsWithRendered(
512
- wrapAsComponentData(layoutStructure),
513
- undefined,
514
- oneChild,
515
- );
432
+ const noChildrenPaths = buildTreePathsWithRendered(wrapAsComponentData(layoutStructure), undefined, noChildren);
433
+ const oneChildPaths = buildTreePathsWithRendered(wrapAsComponentData(layoutStructure), undefined, oneChild);
516
434
 
517
435
  const slotEntryNo = noChildrenPaths.find((p) => p.path.length === 2 && p.path[1] === 1);
518
436
  const slotEntryOne = oneChildPaths.find((p) => p.path.length === 2 && p.path[1] === 1);