meno-core 1.0.53 → 1.0.54

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 (387) hide show
  1. package/.claude/settings.local.json +1 -3
  2. package/bin/cli.ts +48 -57
  3. package/build-astro.ts +131 -113
  4. package/build-next.ts +109 -96
  5. package/build-static.test.ts +39 -10
  6. package/build-static.ts +120 -122
  7. package/dist/bin/cli.js +34 -38
  8. package/dist/bin/cli.js.map +2 -2
  9. package/dist/build-static.js +12 -11
  10. package/dist/chunks/chunk-2AR55GYH.js +42 -0
  11. package/dist/chunks/chunk-2AR55GYH.js.map +7 -0
  12. package/dist/chunks/{chunk-IGYR22T6.js → chunk-2FN4UOVO.js} +512 -239
  13. package/dist/chunks/chunk-2FN4UOVO.js.map +7 -0
  14. package/dist/chunks/chunk-3XER4E5W.js +168 -0
  15. package/dist/chunks/chunk-3XER4E5W.js.map +7 -0
  16. package/dist/chunks/{chunk-X754AHS5.js → chunk-5ETZFREW.js} +9 -12
  17. package/dist/chunks/chunk-5ETZFREW.js.map +7 -0
  18. package/dist/chunks/{chunk-2MHDV5BF.js → chunk-7E4IF5L7.js} +15 -21
  19. package/dist/chunks/chunk-7E4IF5L7.js.map +7 -0
  20. package/dist/chunks/{chunk-JGWFTO6P.js → chunk-7HWQUVTU.js} +1578 -1349
  21. package/dist/chunks/chunk-7HWQUVTU.js.map +7 -0
  22. package/dist/chunks/{chunk-O3NAGJP4.js → chunk-AE3QK5QW.js} +110 -21
  23. package/dist/chunks/chunk-AE3QK5QW.js.map +7 -0
  24. package/dist/chunks/{chunk-GZHGVVW3.js → chunk-F6KTJYGV.js} +7 -7
  25. package/dist/chunks/chunk-F6KTJYGV.js.map +7 -0
  26. package/dist/chunks/{chunk-WQFG7PAH.js → chunk-FZITJSSS.js} +2 -6
  27. package/dist/chunks/chunk-FZITJSSS.js.map +7 -0
  28. package/dist/chunks/{chunk-QB2LNO4W.js → chunk-GSYYA5GX.js} +2 -2
  29. package/dist/chunks/chunk-GSYYA5GX.js.map +7 -0
  30. package/dist/chunks/{chunk-YBLHKYFF.js → chunk-HIZMY3EP.js} +1 -1
  31. package/dist/chunks/chunk-HIZMY3EP.js.map +7 -0
  32. package/dist/chunks/{chunk-AZQYF6KE.js → chunk-I2WEGYA7.js} +41 -176
  33. package/dist/chunks/chunk-I2WEGYA7.js.map +7 -0
  34. package/dist/chunks/{chunk-I7YIGZXT.js → chunk-JNO3CNLJ.js} +6 -9
  35. package/dist/chunks/chunk-JNO3CNLJ.js.map +7 -0
  36. package/dist/chunks/{chunk-UB44F4Z2.js → chunk-NVRBTSQG.js} +2 -4
  37. package/dist/chunks/chunk-NVRBTSQG.js.map +7 -0
  38. package/dist/chunks/{chunk-JGP5A3Y5.js → chunk-Q4OBWKXG.js} +40 -33
  39. package/dist/chunks/chunk-Q4OBWKXG.js.map +7 -0
  40. package/dist/chunks/{chunk-R6XHAFBF.js → chunk-QTE32Y53.js} +250 -242
  41. package/dist/chunks/chunk-QTE32Y53.js.map +7 -0
  42. package/dist/chunks/{chunk-H3GJ4H2U.js → chunk-STDY3OVM.js} +214 -85
  43. package/dist/chunks/chunk-STDY3OVM.js.map +7 -0
  44. package/dist/chunks/configService-PRJZF7Y6.js +14 -0
  45. package/dist/chunks/{constants-STK2YBIW.js → constants-KIQEYMAM.js} +2 -2
  46. package/dist/chunks/{fs-JGINUXGL.js → fs-ZI5JEU7V.js} +2 -2
  47. package/dist/entries/server-router.js +14 -19
  48. package/dist/entries/server-router.js.map +2 -2
  49. package/dist/lib/client/index.js +638 -332
  50. package/dist/lib/client/index.js.map +2 -2
  51. package/dist/lib/server/index.js +177 -235
  52. package/dist/lib/server/index.js.map +2 -2
  53. package/dist/lib/shared/index.js +80 -44
  54. package/dist/lib/shared/index.js.map +2 -2
  55. package/dist/lib/shared/richtext/index.js +1 -1
  56. package/dist/lib/test-utils/index.js +38 -60
  57. package/dist/lib/test-utils/index.js.map +2 -2
  58. package/entries/client-router.tsx +10 -8
  59. package/entries/server-router.tsx +1 -7
  60. package/lib/client/ClientInitializer.ts +8 -8
  61. package/lib/client/ErrorBoundary.test.tsx +146 -143
  62. package/lib/client/ErrorBoundary.tsx +175 -127
  63. package/lib/client/componentRegistry.test.ts +96 -108
  64. package/lib/client/componentRegistry.ts +1 -2
  65. package/lib/client/contexts/ThemeContext.tsx +3 -2
  66. package/lib/client/core/ComponentBuilder.test.ts +513 -560
  67. package/lib/client/core/ComponentBuilder.ts +318 -146
  68. package/lib/client/core/ComponentRenderer.test.tsx +1 -2
  69. package/lib/client/core/ComponentRenderer.tsx +46 -33
  70. package/lib/client/core/builders/embedBuilder.ts +241 -53
  71. package/lib/client/core/builders/linkBuilder.ts +71 -44
  72. package/lib/client/core/builders/linkNodeBuilder.ts +78 -53
  73. package/lib/client/core/builders/listBuilder.ts +115 -86
  74. package/lib/client/core/builders/localeListBuilder.ts +95 -60
  75. package/lib/client/core/builders/types.ts +5 -5
  76. package/lib/client/core/cmsTemplateProcessor.ts +7 -7
  77. package/lib/client/elementRegistry.ts +3 -3
  78. package/lib/client/fontFamiliesService.test.ts +2 -10
  79. package/lib/client/fontFamiliesService.ts +3 -3
  80. package/lib/client/hmr/HMRManager.tsx +8 -0
  81. package/lib/client/hmrCssReload.ts +14 -8
  82. package/lib/client/hmrWebSocket.ts +9 -14
  83. package/lib/client/hooks/useColorVariables.test.ts +21 -21
  84. package/lib/client/hooks/useColorVariables.ts +12 -10
  85. package/lib/client/hooks/usePropertyAutocomplete.ts +3 -5
  86. package/lib/client/hooks/useVariables.ts +4 -4
  87. package/lib/client/hydration/HydrationUtils.test.ts +24 -25
  88. package/lib/client/hydration/HydrationUtils.ts +3 -4
  89. package/lib/client/i18nConfigService.test.ts +2 -7
  90. package/lib/client/i18nConfigService.ts +2 -2
  91. package/lib/client/meno-filter/MenoFilter.test.ts +19 -21
  92. package/lib/client/meno-filter/MenoFilter.ts +5 -9
  93. package/lib/client/meno-filter/bindings.ts +15 -40
  94. package/lib/client/meno-filter/init.ts +1 -1
  95. package/lib/client/meno-filter/renderer.ts +23 -29
  96. package/lib/client/meno-filter/script.generated.ts +1 -3
  97. package/lib/client/meno-filter/ui.ts +3 -5
  98. package/lib/client/meno-filter/updates.ts +15 -21
  99. package/lib/client/navigation.test.ts +159 -159
  100. package/lib/client/navigation.ts +0 -1
  101. package/lib/client/responsiveStyleResolver.test.ts +230 -228
  102. package/lib/client/responsiveStyleResolver.ts +13 -16
  103. package/lib/client/routing/RouteLoader.test.ts +23 -24
  104. package/lib/client/routing/RouteLoader.ts +22 -35
  105. package/lib/client/routing/Router.tsx +31 -3
  106. package/lib/client/scripts/ScriptExecutor.test.ts +157 -158
  107. package/lib/client/scripts/ScriptExecutor.ts +15 -33
  108. package/lib/client/services/PrefetchService.test.ts +2 -2
  109. package/lib/client/services/PrefetchService.ts +10 -24
  110. package/lib/client/styleProcessor.test.ts +9 -9
  111. package/lib/client/styleProcessor.ts +18 -15
  112. package/lib/client/styles/StyleInjector.test.ts +122 -115
  113. package/lib/client/styles/StyleInjector.ts +9 -6
  114. package/lib/client/styles/UtilityClassCollector.ts +19 -26
  115. package/lib/client/styles/cspNonce.test.ts +2 -5
  116. package/lib/client/templateEngine.test.ts +554 -482
  117. package/lib/client/templateEngine.ts +200 -64
  118. package/lib/client/theme.ts +0 -1
  119. package/lib/client/utils/toast.ts +0 -1
  120. package/lib/server/__integration__/api-routes.test.ts +8 -4
  121. package/lib/server/__integration__/cms-integration.test.ts +1 -4
  122. package/lib/server/__integration__/server-lifecycle.test.ts +2 -5
  123. package/lib/server/__integration__/ssr-rendering.test.ts +47 -37
  124. package/lib/server/__integration__/static-assets.test.ts +1 -1
  125. package/lib/server/__integration__/test-helpers.ts +84 -70
  126. package/lib/server/ab/generateFunctions.ts +12 -10
  127. package/lib/server/astro/cmsPageEmitter.ts +23 -38
  128. package/lib/server/astro/componentEmitter.ts +25 -36
  129. package/lib/server/astro/cssCollector.ts +10 -26
  130. package/lib/server/astro/nodeToAstro.test.ts +1750 -30
  131. package/lib/server/astro/nodeToAstro.ts +198 -187
  132. package/lib/server/astro/normalizeOrphanTemplateProps.test.ts +105 -109
  133. package/lib/server/astro/normalizeOrphanTemplateProps.ts +4 -12
  134. package/lib/server/astro/pageEmitter.ts +9 -13
  135. package/lib/server/astro/tailwindMapper.test.ts +10 -37
  136. package/lib/server/astro/tailwindMapper.ts +33 -40
  137. package/lib/server/astro/templateTransformer.ts +14 -17
  138. package/lib/server/createServer.ts +5 -17
  139. package/lib/server/cssGenerator.test.ts +35 -44
  140. package/lib/server/cssGenerator.ts +6 -17
  141. package/lib/server/fileWatcher.test.ts +124 -10
  142. package/lib/server/fileWatcher.ts +124 -118
  143. package/lib/server/index.ts +7 -1
  144. package/lib/server/jsonLoader.test.ts +39 -2
  145. package/lib/server/jsonLoader.ts +33 -31
  146. package/lib/server/middleware/cors.test.ts +20 -20
  147. package/lib/server/middleware/cors.ts +28 -4
  148. package/lib/server/middleware/errorHandler.test.ts +5 -3
  149. package/lib/server/middleware/errorHandler.ts +3 -8
  150. package/lib/server/middleware/index.ts +0 -1
  151. package/lib/server/middleware/logger.test.ts +7 -5
  152. package/lib/server/middleware/logger.ts +10 -22
  153. package/lib/server/pageCache.test.ts +76 -77
  154. package/lib/server/pageCache.ts +0 -1
  155. package/lib/server/projectContext.ts +4 -3
  156. package/lib/server/providers/fileSystemCMSProvider.test.ts +124 -95
  157. package/lib/server/providers/fileSystemCMSProvider.ts +35 -20
  158. package/lib/server/providers/fileSystemPageProvider.test.ts +84 -0
  159. package/lib/server/providers/fileSystemPageProvider.ts +31 -12
  160. package/lib/server/routes/api/cms.test.ts +26 -14
  161. package/lib/server/routes/api/cms.ts +9 -14
  162. package/lib/server/routes/api/components.ts +30 -34
  163. package/lib/server/routes/api/config.ts +0 -1
  164. package/lib/server/routes/api/core-routes.ts +47 -74
  165. package/lib/server/routes/api/functions.ts +8 -16
  166. package/lib/server/routes/api/index.ts +3 -6
  167. package/lib/server/routes/api/pages.ts +8 -11
  168. package/lib/server/routes/api/shared.test.ts +1 -1
  169. package/lib/server/routes/api/shared.ts +12 -9
  170. package/lib/server/routes/api/variables.test.ts +1 -3
  171. package/lib/server/routes/api/variables.ts +1 -1
  172. package/lib/server/routes/index.ts +23 -26
  173. package/lib/server/routes/pages.ts +34 -29
  174. package/lib/server/routes/static.ts +16 -4
  175. package/lib/server/runtime/bundler.ts +47 -32
  176. package/lib/server/runtime/fs.ts +3 -13
  177. package/lib/server/runtime/httpServer.ts +5 -9
  178. package/lib/server/services/ColorService.ts +32 -27
  179. package/lib/server/services/EnumService.test.ts +2 -6
  180. package/lib/server/services/EnumService.ts +7 -2
  181. package/lib/server/services/VariableService.test.ts +1 -5
  182. package/lib/server/services/VariableService.ts +6 -1
  183. package/lib/server/services/cmsService.test.ts +116 -78
  184. package/lib/server/services/cmsService.ts +24 -54
  185. package/lib/server/services/componentService.test.ts +122 -36
  186. package/lib/server/services/componentService.ts +54 -38
  187. package/lib/server/services/configService.test.ts +9 -31
  188. package/lib/server/services/configService.ts +20 -27
  189. package/lib/server/services/fileWatcherService.ts +40 -6
  190. package/lib/server/services/index.ts +0 -1
  191. package/lib/server/services/pageService.test.ts +1 -3
  192. package/lib/server/services/pageService.ts +14 -13
  193. package/lib/server/ssr/attributeBuilder.ts +16 -6
  194. package/lib/server/ssr/buildErrorOverlay.ts +11 -12
  195. package/lib/server/ssr/clientDataInjector.ts +7 -21
  196. package/lib/server/ssr/cmsSSRProcessor.ts +3 -6
  197. package/lib/server/ssr/cssCollector.ts +1 -1
  198. package/lib/server/ssr/errorOverlay.test.ts +1 -1
  199. package/lib/server/ssr/errorOverlay.ts +3 -9
  200. package/lib/server/ssr/htmlGenerator.nonce.test.ts +3 -9
  201. package/lib/server/ssr/htmlGenerator.test.ts +120 -43
  202. package/lib/server/ssr/htmlGenerator.ts +120 -85
  203. package/lib/server/ssr/imageMetadata.test.ts +3 -1
  204. package/lib/server/ssr/imageMetadata.ts +25 -19
  205. package/lib/server/ssr/jsCollector.test.ts +3 -13
  206. package/lib/server/ssr/jsCollector.ts +3 -8
  207. package/lib/server/ssr/liveReloadIntegration.test.ts +69 -28
  208. package/lib/server/ssr/metaTagGenerator.ts +2 -2
  209. package/lib/server/ssr/ssrRenderer.branches.test.ts +1103 -0
  210. package/lib/server/ssr/ssrRenderer.test.ts +196 -246
  211. package/lib/server/ssr/ssrRenderer.ts +609 -225
  212. package/lib/server/ssrRenderer.test.ts +1044 -950
  213. package/lib/server/utils/jsonLineMapper.test.ts +28 -28
  214. package/lib/server/utils/jsonLineMapper.ts +1 -1
  215. package/lib/server/validateStyleCoverage.ts +18 -20
  216. package/lib/server/webflow/buildWebflow.ts +41 -53
  217. package/lib/server/webflow/nodeToWebflow.test.ts +150 -218
  218. package/lib/server/webflow/nodeToWebflow.ts +195 -258
  219. package/lib/server/webflow/styleMapper.test.ts +15 -56
  220. package/lib/server/webflow/styleMapper.ts +33 -41
  221. package/lib/server/webflow/types.ts +1 -8
  222. package/lib/server/websocketManager.ts +16 -19
  223. package/lib/shared/attributeNodeUtils.test.ts +15 -15
  224. package/lib/shared/attributeNodeUtils.ts +5 -12
  225. package/lib/shared/breakpoints.ts +4 -11
  226. package/lib/shared/cmsQueryParser.test.ts +50 -42
  227. package/lib/shared/cmsQueryParser.ts +49 -31
  228. package/lib/shared/colorVariableUtils.test.ts +5 -5
  229. package/lib/shared/colorVariableUtils.ts +3 -8
  230. package/lib/shared/componentRefs.ts +1 -5
  231. package/lib/shared/constants.test.ts +3 -3
  232. package/lib/shared/constants.ts +4 -8
  233. package/lib/shared/cssGeneration.test.ts +262 -144
  234. package/lib/shared/cssGeneration.ts +189 -516
  235. package/lib/shared/cssNamedColors.ts +152 -30
  236. package/lib/shared/cssProperties.test.ts +5 -6
  237. package/lib/shared/cssProperties.ts +296 -112
  238. package/lib/shared/elementClassName.test.ts +109 -109
  239. package/lib/shared/elementClassName.ts +1 -1
  240. package/lib/shared/elementUtils.ts +12 -16
  241. package/lib/shared/errorLogger.ts +2 -10
  242. package/lib/shared/errors.test.ts +2 -13
  243. package/lib/shared/errors.ts +2 -8
  244. package/lib/shared/expressionEvaluator.test.ts +119 -0
  245. package/lib/shared/expressionEvaluator.ts +43 -24
  246. package/lib/shared/fontLoader.test.ts +19 -5
  247. package/lib/shared/friendlyError.ts +2 -3
  248. package/lib/shared/gradientUtils.test.ts +1 -5
  249. package/lib/shared/gradientUtils.ts +2 -6
  250. package/lib/shared/hrefRefs.ts +2 -10
  251. package/lib/shared/i18n.test.ts +1 -1
  252. package/lib/shared/i18n.ts +13 -34
  253. package/lib/shared/index.ts +4 -0
  254. package/lib/shared/inlineSvgStyleRules.ts +2 -4
  255. package/lib/shared/interactiveStyleMappings.test.ts +11 -33
  256. package/lib/shared/interactiveStyleMappings.ts +9 -16
  257. package/lib/shared/interactiveStyles.test.ts +165 -188
  258. package/lib/shared/interfaces/contentProvider.ts +1 -1
  259. package/lib/shared/itemTemplateUtils.test.ts +6 -12
  260. package/lib/shared/itemTemplateUtils.ts +19 -35
  261. package/lib/shared/jsonRepair.ts +8 -2
  262. package/lib/shared/libraryLoader.test.ts +15 -49
  263. package/lib/shared/libraryLoader.ts +7 -22
  264. package/lib/shared/netlifyLocale404.test.ts +179 -0
  265. package/lib/shared/netlifyLocale404.ts +110 -0
  266. package/lib/shared/nodeUtils.test.ts +24 -16
  267. package/lib/shared/nodeUtils.ts +49 -19
  268. package/lib/shared/pathArrayUtils.test.ts +1 -2
  269. package/lib/shared/pathArrayUtils.ts +1 -1
  270. package/lib/shared/pathSecurity.ts +1 -1
  271. package/lib/shared/pathUtils.test.ts +4 -6
  272. package/lib/shared/pathUtils.ts +42 -48
  273. package/lib/shared/paths/Path.test.ts +2 -2
  274. package/lib/shared/paths/Path.ts +0 -1
  275. package/lib/shared/paths/PathConverter.test.ts +1 -1
  276. package/lib/shared/paths/PathConverter.ts +14 -17
  277. package/lib/shared/paths/PathUtils.ts +9 -10
  278. package/lib/shared/paths/PathValidator.test.ts +2 -15
  279. package/lib/shared/paths/PathValidator.ts +11 -9
  280. package/lib/shared/paths/index.ts +1 -2
  281. package/lib/shared/propResolver.test.ts +240 -244
  282. package/lib/shared/propResolver.ts +14 -25
  283. package/lib/shared/pxToRem.test.ts +7 -6
  284. package/lib/shared/pxToRem.ts +2 -5
  285. package/lib/shared/registry/BaseNodeTypeRegistry.test.ts +9 -5
  286. package/lib/shared/registry/ClientRegistry.ts +0 -1
  287. package/lib/shared/registry/ComponentRegistry.test.ts +43 -29
  288. package/lib/shared/registry/ComponentRegistry.ts +9 -11
  289. package/lib/shared/registry/NodeTypeDefinition.ts +15 -8
  290. package/lib/shared/registry/RegistryManager.ts +1 -2
  291. package/lib/shared/registry/SSRRegistry.ts +0 -1
  292. package/lib/shared/registry/createNodeType.ts +7 -9
  293. package/lib/shared/registry/defineNodeType.ts +2 -6
  294. package/lib/shared/registry/index.ts +0 -1
  295. package/lib/shared/registry/nodeTypes/ComponentInstanceNodeType.ts +14 -15
  296. package/lib/shared/registry/nodeTypes/EmbedNodeType.ts +18 -11
  297. package/lib/shared/registry/nodeTypes/HtmlNodeType.ts +47 -18
  298. package/lib/shared/registry/nodeTypes/LinkNodeType.ts +21 -19
  299. package/lib/shared/registry/nodeTypes/ListNodeType.ts +78 -74
  300. package/lib/shared/registry/nodeTypes/LocaleListNodeType.ts +27 -21
  301. package/lib/shared/registry/nodeTypes/SlotMarkerType.ts +6 -7
  302. package/lib/shared/registry/nodeTypes/index.ts +10 -2
  303. package/lib/shared/responsiveScaling.test.ts +15 -31
  304. package/lib/shared/responsiveScaling.ts +55 -37
  305. package/lib/shared/responsiveStyleUtils.ts +11 -13
  306. package/lib/shared/richtext/htmlToTiptap.test.ts +23 -14
  307. package/lib/shared/richtext/htmlToTiptap.ts +1 -3
  308. package/lib/shared/richtext/tiptapToHtml.test.ts +5 -6
  309. package/lib/shared/richtext/types.ts +1 -8
  310. package/lib/shared/slugTranslator.test.ts +13 -13
  311. package/lib/shared/slugTranslator.ts +12 -16
  312. package/lib/shared/slugify.ts +9 -15
  313. package/lib/shared/styleNodeUtils.test.ts +8 -8
  314. package/lib/shared/styleNodeUtils.ts +5 -10
  315. package/lib/shared/styleUtils.test.ts +87 -61
  316. package/lib/shared/styleUtils.ts +5 -6
  317. package/lib/shared/themeDefaults.test.ts +11 -11
  318. package/lib/shared/themeDefaults.ts +3 -4
  319. package/lib/shared/tree/PathBuilder.test.ts +62 -138
  320. package/lib/shared/tree/PathBuilder.ts +49 -39
  321. package/lib/shared/treePathUtils.test.ts +2 -10
  322. package/lib/shared/treePathUtils.ts +54 -59
  323. package/lib/shared/types/api.ts +1 -2
  324. package/lib/shared/types/cms.ts +25 -21
  325. package/lib/shared/types/comment.ts +49 -16
  326. package/lib/shared/types/components.ts +27 -25
  327. package/lib/shared/types/errors.test.ts +1 -6
  328. package/lib/shared/types/errors.ts +3 -7
  329. package/lib/shared/types/experiments.ts +28 -28
  330. package/lib/shared/types/index.ts +2 -2
  331. package/lib/shared/types/styles.ts +0 -1
  332. package/lib/shared/types/variables.test.ts +4 -13
  333. package/lib/shared/types/variables.ts +48 -27
  334. package/lib/shared/types.ts +1 -2
  335. package/lib/shared/utilityClassConfig.ts +648 -321
  336. package/lib/shared/utilityClassMapper.test.ts +203 -92
  337. package/lib/shared/utilityClassMapper.ts +188 -246
  338. package/lib/shared/utilityClassNames.ts +326 -0
  339. package/lib/shared/utils.test.ts +2 -10
  340. package/lib/shared/utils.ts +19 -10
  341. package/lib/shared/validation/cmsValidators.ts +2 -1
  342. package/lib/shared/validation/commentValidators.test.ts +53 -0
  343. package/lib/shared/validation/commentValidators.ts +12 -1
  344. package/lib/shared/validation/propValidator.test.ts +18 -20
  345. package/lib/shared/validation/propValidator.ts +12 -17
  346. package/lib/shared/validation/schemas.test.ts +24 -33
  347. package/lib/shared/validation/schemas.ts +469 -344
  348. package/lib/shared/validation/validators.test.ts +1 -6
  349. package/lib/shared/validation/validators.ts +89 -68
  350. package/lib/shared/viewportUnits.integration.test.ts +14 -10
  351. package/lib/shared/viewportUnits.test.ts +11 -23
  352. package/lib/test-utils/dom-setup.ts +1 -1
  353. package/lib/test-utils/factories/ConsoleMockFactory.ts +3 -7
  354. package/lib/test-utils/factories/DomMockFactory.ts +7 -19
  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 +5 -9
  358. package/lib/test-utils/factories/StoreMockFactory.ts +14 -25
  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 +12 -18
  365. package/lib/test-utils/mocks.ts +4 -2
  366. package/package.json +1 -1
  367. package/scripts/build-meno-filter.ts +1 -4
  368. package/vite.config.ts +4 -4
  369. package/dist/chunks/chunk-2MHDV5BF.js.map +0 -7
  370. package/dist/chunks/chunk-AZQYF6KE.js.map +0 -7
  371. package/dist/chunks/chunk-GZHGVVW3.js.map +0 -7
  372. package/dist/chunks/chunk-H3GJ4H2U.js.map +0 -7
  373. package/dist/chunks/chunk-I7YIGZXT.js.map +0 -7
  374. package/dist/chunks/chunk-IGYR22T6.js.map +0 -7
  375. package/dist/chunks/chunk-JGP5A3Y5.js.map +0 -7
  376. package/dist/chunks/chunk-JGWFTO6P.js.map +0 -7
  377. package/dist/chunks/chunk-O3NAGJP4.js.map +0 -7
  378. package/dist/chunks/chunk-QB2LNO4W.js.map +0 -7
  379. package/dist/chunks/chunk-R6XHAFBF.js.map +0 -7
  380. package/dist/chunks/chunk-UB44F4Z2.js.map +0 -7
  381. package/dist/chunks/chunk-WQFG7PAH.js.map +0 -7
  382. package/dist/chunks/chunk-X754AHS5.js.map +0 -7
  383. package/dist/chunks/chunk-YBLHKYFF.js.map +0 -7
  384. package/dist/chunks/configService-R3OGU2UD.js +0 -13
  385. /package/dist/chunks/{configService-R3OGU2UD.js.map → configService-PRJZF7Y6.js.map} +0 -0
  386. /package/dist/chunks/{constants-STK2YBIW.js.map → constants-KIQEYMAM.js.map} +0 -0
  387. /package/dist/chunks/{fs-JGINUXGL.js.map → fs-ZI5JEU7V.js.map} +0 -0
@@ -1,10 +1,5 @@
1
1
  import { describe, test, expect } from 'bun:test';
2
- import {
3
- validatePropDefinition,
4
- validateComponentNode,
5
- validateOrThrow,
6
- type ValidationResult,
7
- } from './validators';
2
+ import { validatePropDefinition, validateComponentNode, validateOrThrow, type ValidationResult } from './validators';
8
3
  import { NODE_TYPE } from '../constants';
9
4
 
10
5
  describe('validators', () => {
@@ -5,7 +5,13 @@
5
5
  */
6
6
 
7
7
  import type { ZodError, ZodType } from 'zod';
8
- import type { PropDefinition, ComponentDefinition, StructuredComponentDefinition, PageData, PageDataWithComponent } from '../types/components';
8
+ import type {
9
+ PropDefinition,
10
+ ComponentDefinition,
11
+ StructuredComponentDefinition,
12
+ PageData,
13
+ PageDataWithComponent,
14
+ } from '../types/components';
9
15
  import type { ComponentNode } from '../types/nodes';
10
16
  import type { PageMetaData } from '../types/api';
11
17
  import type { CMSSchema, CMSItem } from '../types/cms';
@@ -34,15 +40,13 @@ export interface ValidationError {
34
40
  /**
35
41
  * Validation result type - always includes error details on failure
36
42
  */
37
- export type ValidationResult<T> =
38
- | { valid: true; data: T }
39
- | { valid: false; errors: ValidationError[] };
43
+ export type ValidationResult<T> = { valid: true; data: T } | { valid: false; errors: ValidationError[] };
40
44
 
41
45
  /**
42
46
  * Convert Zod errors to ValidationError format
43
47
  */
44
48
  function zodToValidationErrors(zodError: ZodError): ValidationError[] {
45
- return zodError.errors.map(err => ({
49
+ return zodError.errors.map((err) => ({
46
50
  path: err.path.join('.') || 'root',
47
51
  message: err.message,
48
52
  code: 'INVALID_TYPE' as const,
@@ -55,11 +59,11 @@ function zodToValidationErrors(zodError: ZodError): ValidationError[] {
55
59
  export function validateOrThrow<T>(
56
60
  data: unknown,
57
61
  validator: (data: unknown) => ValidationResult<T>,
58
- errorMessage?: string
62
+ errorMessage?: string,
59
63
  ): T {
60
64
  const result = validator(data);
61
65
  if (!result.valid) {
62
- const details = result.errors.map(e => `${e.path}: ${e.message}`).join('; ');
66
+ const details = result.errors.map((e) => `${e.path}: ${e.message}`).join('; ');
63
67
  throw new Error(errorMessage ? `${errorMessage}: ${details}` : details);
64
68
  }
65
69
  return result.data;
@@ -79,11 +83,13 @@ export function validatePropDefinition(propDef: unknown): ValidationResult<PropD
79
83
  } catch (error) {
80
84
  return {
81
85
  valid: false,
82
- errors: [{
83
- path: 'root',
84
- message: error instanceof Error ? error.message : 'Unknown validation error',
85
- code: 'UNKNOWN',
86
- }],
86
+ errors: [
87
+ {
88
+ path: 'root',
89
+ message: error instanceof Error ? error.message : 'Unknown validation error',
90
+ code: 'UNKNOWN',
91
+ },
92
+ ],
87
93
  };
88
94
  }
89
95
  }
@@ -102,11 +108,13 @@ export function validateComponentNode(node: unknown): ValidationResult<Component
102
108
  } catch (error) {
103
109
  return {
104
110
  valid: false,
105
- errors: [{
106
- path: 'root',
107
- message: error instanceof Error ? error.message : 'Unknown validation error',
108
- code: 'UNKNOWN',
109
- }],
111
+ errors: [
112
+ {
113
+ path: 'root',
114
+ message: error instanceof Error ? error.message : 'Unknown validation error',
115
+ code: 'UNKNOWN',
116
+ },
117
+ ],
110
118
  };
111
119
  }
112
120
  }
@@ -125,11 +133,13 @@ export function validateStructuredComponentDefinition(def: unknown): ValidationR
125
133
  } catch (error) {
126
134
  return {
127
135
  valid: false,
128
- errors: [{
129
- path: 'root',
130
- message: error instanceof Error ? error.message : 'Unknown validation error',
131
- code: 'UNKNOWN',
132
- }],
136
+ errors: [
137
+ {
138
+ path: 'root',
139
+ message: error instanceof Error ? error.message : 'Unknown validation error',
140
+ code: 'UNKNOWN',
141
+ },
142
+ ],
133
143
  };
134
144
  }
135
145
  }
@@ -148,11 +158,13 @@ export function validateComponentDefinition(def: unknown): ValidationResult<Comp
148
158
  } catch (error) {
149
159
  return {
150
160
  valid: false,
151
- errors: [{
152
- path: 'root',
153
- message: error instanceof Error ? error.message : 'Unknown validation error',
154
- code: 'UNKNOWN',
155
- }],
161
+ errors: [
162
+ {
163
+ path: 'root',
164
+ message: error instanceof Error ? error.message : 'Unknown validation error',
165
+ code: 'UNKNOWN',
166
+ },
167
+ ],
156
168
  };
157
169
  }
158
170
  }
@@ -171,11 +183,13 @@ export function validatePageData(data: unknown): ValidationResult<PageData> {
171
183
  } catch (error) {
172
184
  return {
173
185
  valid: false,
174
- errors: [{
175
- path: 'root',
176
- message: error instanceof Error ? error.message : 'Unknown validation error',
177
- code: 'UNKNOWN',
178
- }],
186
+ errors: [
187
+ {
188
+ path: 'root',
189
+ message: error instanceof Error ? error.message : 'Unknown validation error',
190
+ code: 'UNKNOWN',
191
+ },
192
+ ],
179
193
  };
180
194
  }
181
195
  }
@@ -194,11 +208,13 @@ export function validatePageDataWithComponent(data: unknown): ValidationResult<P
194
208
  } catch (error) {
195
209
  return {
196
210
  valid: false,
197
- errors: [{
198
- path: 'root',
199
- message: error instanceof Error ? error.message : 'Unknown validation error',
200
- code: 'UNKNOWN',
201
- }],
211
+ errors: [
212
+ {
213
+ path: 'root',
214
+ message: error instanceof Error ? error.message : 'Unknown validation error',
215
+ code: 'UNKNOWN',
216
+ },
217
+ ],
202
218
  };
203
219
  }
204
220
  }
@@ -217,11 +233,13 @@ export function validatePageMetaData(data: unknown): ValidationResult<PageMetaDa
217
233
  } catch (error) {
218
234
  return {
219
235
  valid: false,
220
- errors: [{
221
- path: 'root',
222
- message: error instanceof Error ? error.message : 'Unknown validation error',
223
- code: 'UNKNOWN',
224
- }],
236
+ errors: [
237
+ {
238
+ path: 'root',
239
+ message: error instanceof Error ? error.message : 'Unknown validation error',
240
+ code: 'UNKNOWN',
241
+ },
242
+ ],
225
243
  };
226
244
  }
227
245
  }
@@ -230,10 +248,7 @@ export function validatePageMetaData(data: unknown): ValidationResult<PageMetaDa
230
248
  * Validate with detailed error information using a custom schema
231
249
  * @returns ValidationResult with error details on failure
232
250
  */
233
- export function validateWithDetails<T>(
234
- data: unknown,
235
- schema: ZodType<T>
236
- ): ValidationResult<T> {
251
+ export function validateWithDetails<T>(data: unknown, schema: ZodType<T>): ValidationResult<T> {
237
252
  try {
238
253
  const result = schema.safeParse(data);
239
254
  if (result.success) {
@@ -243,11 +258,13 @@ export function validateWithDetails<T>(
243
258
  } catch (error) {
244
259
  return {
245
260
  valid: false,
246
- errors: [{
247
- path: 'root',
248
- message: error instanceof Error ? error.message : 'Unknown validation error',
249
- code: 'UNKNOWN',
250
- }],
261
+ errors: [
262
+ {
263
+ path: 'root',
264
+ message: error instanceof Error ? error.message : 'Unknown validation error',
265
+ code: 'UNKNOWN',
266
+ },
267
+ ],
251
268
  };
252
269
  }
253
270
  }
@@ -270,11 +287,13 @@ export function validateCMSSchema(data: unknown): ValidationResult<CMSSchema> {
270
287
  } catch (error) {
271
288
  return {
272
289
  valid: false,
273
- errors: [{
274
- path: 'root',
275
- message: error instanceof Error ? error.message : 'Unknown validation error',
276
- code: 'UNKNOWN',
277
- }],
290
+ errors: [
291
+ {
292
+ path: 'root',
293
+ message: error instanceof Error ? error.message : 'Unknown validation error',
294
+ code: 'UNKNOWN',
295
+ },
296
+ ],
278
297
  };
279
298
  }
280
299
  }
@@ -293,11 +312,13 @@ export function validateCMSItem(data: unknown): ValidationResult<CMSItem> {
293
312
  } catch (error) {
294
313
  return {
295
314
  valid: false,
296
- errors: [{
297
- path: 'root',
298
- message: error instanceof Error ? error.message : 'Unknown validation error',
299
- code: 'UNKNOWN',
300
- }],
315
+ errors: [
316
+ {
317
+ path: 'root',
318
+ message: error instanceof Error ? error.message : 'Unknown validation error',
319
+ code: 'UNKNOWN',
320
+ },
321
+ ],
301
322
  };
302
323
  }
303
324
  }
@@ -317,13 +338,13 @@ export function validateCMSDraftItem(data: unknown): ValidationResult<CMSItem> {
317
338
  } catch (error) {
318
339
  return {
319
340
  valid: false,
320
- errors: [{
321
- path: 'root',
322
- message: error instanceof Error ? error.message : 'Unknown validation error',
323
- code: 'UNKNOWN',
324
- }],
341
+ errors: [
342
+ {
343
+ path: 'root',
344
+ message: error instanceof Error ? error.message : 'Unknown validation error',
345
+ code: 'UNKNOWN',
346
+ },
347
+ ],
325
348
  };
326
349
  }
327
350
  }
328
-
329
-
@@ -9,11 +9,13 @@ describe('viewport-unit rewrite — user-bug repro path', () => {
9
9
  // { style: { base: { backgroundColor: "var(--bg)", minHeight: "100vh" } } }
10
10
  // Studio collects this into the InteractiveStyles map keyed by the element
11
11
  // class, and generateInteractiveCSS emits the CSS that ships to the iframe.
12
- const interactiveStyles: InteractiveStyles = [{
13
- prefix: '',
14
- postfix: '',
15
- style: { base: { minHeight: '100vh', backgroundColor: 'var(--bg)' } },
16
- }];
12
+ const interactiveStyles: InteractiveStyles = [
13
+ {
14
+ prefix: '',
15
+ postfix: '',
16
+ style: { base: { minHeight: '100vh', backgroundColor: 'var(--bg)' } },
17
+ },
18
+ ];
17
19
  const map = new Map<string, InteractiveStyles>([['c_layout_root', interactiveStyles]]);
18
20
 
19
21
  const css = generateAllInteractiveCSS(map);
@@ -28,11 +30,13 @@ describe('viewport-unit rewrite — user-bug repro path', () => {
28
30
  });
29
31
 
30
32
  it('leaves non-vh values in the same rule untouched', () => {
31
- const interactiveStyles: InteractiveStyles = [{
32
- prefix: '',
33
- postfix: '',
34
- style: { base: { minHeight: '100vh', padding: '24px', color: 'red' } },
35
- }];
33
+ const interactiveStyles: InteractiveStyles = [
34
+ {
35
+ prefix: '',
36
+ postfix: '',
37
+ style: { base: { minHeight: '100vh', padding: '24px', color: 'red' } },
38
+ },
39
+ ];
36
40
  const map = new Map<string, InteractiveStyles>([['c_a', interactiveStyles]]);
37
41
  const rewritten = rewriteViewportUnits(generateAllInteractiveCSS(map));
38
42
 
@@ -3,47 +3,37 @@ import { rewriteViewportUnits } from './viewportUnits';
3
3
 
4
4
  describe('rewriteViewportUnits', () => {
5
5
  it('rewrites basic vh values in declarations', () => {
6
- expect(rewriteViewportUnits('min-height: 100vh;')).toBe(
7
- 'min-height: calc(var(--design-vh, 1vh) * 100);'
8
- );
6
+ expect(rewriteViewportUnits('min-height: 100vh;')).toBe('min-height: calc(var(--design-vh, 1vh) * 100);');
9
7
  });
10
8
 
11
9
  it('rewrites vw values', () => {
12
- expect(rewriteViewportUnits('width: 50vw;')).toBe(
13
- 'width: calc(var(--design-vw, 1vw) * 50);'
14
- );
10
+ expect(rewriteViewportUnits('width: 50vw;')).toBe('width: calc(var(--design-vw, 1vw) * 50);');
15
11
  });
16
12
 
17
13
  it('handles negative values', () => {
18
- expect(rewriteViewportUnits('top: -100vh;')).toBe(
19
- 'top: calc(var(--design-vh, 1vh) * -100);'
20
- );
14
+ expect(rewriteViewportUnits('top: -100vh;')).toBe('top: calc(var(--design-vh, 1vh) * -100);');
21
15
  });
22
16
 
23
17
  it('handles decimal values', () => {
24
- expect(rewriteViewportUnits('height: 33.5vh;')).toBe(
25
- 'height: calc(var(--design-vh, 1vh) * 33.5);'
26
- );
27
- expect(rewriteViewportUnits('height: .5vh;')).toBe(
28
- 'height: calc(var(--design-vh, 1vh) * .5);'
29
- );
18
+ expect(rewriteViewportUnits('height: 33.5vh;')).toBe('height: calc(var(--design-vh, 1vh) * 33.5);');
19
+ expect(rewriteViewportUnits('height: .5vh;')).toBe('height: calc(var(--design-vh, 1vh) * .5);');
30
20
  });
31
21
 
32
22
  it('handles small/large/dynamic viewport units', () => {
33
23
  expect(rewriteViewportUnits('h: 100svh; w: 100lvw; x: 100dvh;')).toBe(
34
- 'h: calc(var(--design-svh, 1svh) * 100); w: calc(var(--design-lvw, 1lvw) * 100); x: calc(var(--design-dvh, 1dvh) * 100);'
24
+ 'h: calc(var(--design-svh, 1svh) * 100); w: calc(var(--design-lvw, 1lvw) * 100); x: calc(var(--design-dvh, 1dvh) * 100);',
35
25
  );
36
26
  });
37
27
 
38
28
  it('preserves vh inside calc()', () => {
39
29
  expect(rewriteViewportUnits('height: calc(100vh - 20px);')).toBe(
40
- 'height: calc(calc(var(--design-vh, 1vh) * 100) - 20px);'
30
+ 'height: calc(calc(var(--design-vh, 1vh) * 100) - 20px);',
41
31
  );
42
32
  });
43
33
 
44
34
  it('rewrites vh inside transform functions', () => {
45
35
  expect(rewriteViewportUnits('transform: translateY(-100vh);')).toBe(
46
- 'transform: translateY(calc(var(--design-vh, 1vh) * -100));'
36
+ 'transform: translateY(calc(var(--design-vh, 1vh) * -100));',
47
37
  );
48
38
  });
49
39
 
@@ -62,13 +52,13 @@ describe('rewriteViewportUnits', () => {
62
52
 
63
53
  it('does NOT rewrite px / em / rem / % values', () => {
64
54
  expect(rewriteViewportUnits('padding: 10px; margin: 1em; height: 50%;')).toBe(
65
- 'padding: 10px; margin: 1em; height: 50%;'
55
+ 'padding: 10px; margin: 1em; height: 50%;',
66
56
  );
67
57
  });
68
58
 
69
59
  it('handles multiple values in one rule', () => {
70
60
  expect(rewriteViewportUnits('inset: 10vh 5vw 20vh 5vw;')).toBe(
71
- 'inset: calc(var(--design-vh, 1vh) * 10) calc(var(--design-vw, 1vw) * 5) calc(var(--design-vh, 1vh) * 20) calc(var(--design-vw, 1vw) * 5);'
61
+ 'inset: calc(var(--design-vh, 1vh) * 10) calc(var(--design-vw, 1vw) * 5) calc(var(--design-vh, 1vh) * 20) calc(var(--design-vw, 1vw) * 5);',
72
62
  );
73
63
  });
74
64
 
@@ -96,8 +86,6 @@ describe('rewriteViewportUnits', () => {
96
86
  });
97
87
 
98
88
  it('handles 0vh (zero with unit) without producing invalid output', () => {
99
- expect(rewriteViewportUnits('top: 0vh;')).toBe(
100
- 'top: calc(var(--design-vh, 1vh) * 0);'
101
- );
89
+ expect(rewriteViewportUnits('top: 0vh;')).toBe('top: calc(var(--design-vh, 1vh) * 0);');
102
90
  });
103
91
  });
@@ -38,6 +38,7 @@ globalAny.DocumentFragment = window.DocumentFragment;
38
38
  globalAny.KeyboardEvent = window.KeyboardEvent;
39
39
  globalAny.MouseEvent = window.MouseEvent;
40
40
  globalAny.CustomEvent = window.CustomEvent;
41
+ globalAny.MessageEvent = window.MessageEvent;
41
42
  globalAny.Event = window.Event;
42
43
  globalAny.getComputedStyle = window.getComputedStyle.bind(window);
43
44
  globalAny.requestAnimationFrame = window.requestAnimationFrame.bind(window);
@@ -46,7 +47,6 @@ globalAny.MutationObserver = window.MutationObserver;
46
47
  globalAny.ResizeObserver = window.ResizeObserver;
47
48
  globalAny.IntersectionObserver = window.IntersectionObserver;
48
49
 
49
-
50
50
  // Export for manual usage if needed
51
51
  export function setupDOM() {
52
52
  // Already set up on import
@@ -77,7 +77,7 @@ export function createTypedConsoleSpy(): TypedConsoleSpy {
77
77
  return arg.test(call[i] as string);
78
78
  }
79
79
  return call[i] === arg;
80
- })
80
+ }),
81
81
  );
82
82
  },
83
83
  clearCalls: () => {
@@ -102,9 +102,7 @@ export function suppressConsole(): () => void {
102
102
  /**
103
103
  * Capture console output for specific methods only
104
104
  */
105
- export function captureConsole(
106
- methods: ConsoleMethods[]
107
- ): TypedConsoleSpy & { only: ConsoleMethods[] } {
105
+ export function captureConsole(methods: ConsoleMethods[]): TypedConsoleSpy & { only: ConsoleMethods[] } {
108
106
  const spy = createTypedConsoleSpy();
109
107
 
110
108
  // Restore methods we don't want to capture
@@ -187,9 +185,7 @@ export function createPassthroughConsoleSpy(): TypedConsoleSpy {
187
185
  },
188
186
  wasCalledWith: (method: ConsoleMethods, ...args: unknown[]) => {
189
187
  const calls = mocks[method] as unknown as { mock: { calls: unknown[][] } };
190
- return (calls.mock?.calls || []).some((call) =>
191
- args.every((arg, i) => call[i] === arg)
192
- );
188
+ return (calls.mock?.calls || []).some((call) => args.every((arg, i) => call[i] === arg));
193
189
  },
194
190
  clearCalls: () => {
195
191
  for (const method of Object.values(mocks)) {
@@ -59,9 +59,7 @@ export function createMockDOMRect(overrides?: Partial<MockDOMRect>): DOMRect {
59
59
 
60
60
  // ========== CSSStyleDeclaration ==========
61
61
 
62
- export function createMockCSSStyleDeclaration(
63
- initial?: Partial<CSSStyleDeclaration>
64
- ): CSSStyleDeclaration {
62
+ export function createMockCSSStyleDeclaration(initial?: Partial<CSSStyleDeclaration>): CSSStyleDeclaration {
65
63
  const styles: Record<string, string> = {};
66
64
 
67
65
  // Copy initial values
@@ -139,12 +137,8 @@ export interface TypedMockHTMLElement {
139
137
  _eventListeners: Map<string, EventListener[]>;
140
138
  }
141
139
 
142
- export function createTypedMockHTMLElement(
143
- options: MockHTMLElementOptions = {}
144
- ): TypedMockHTMLElement {
145
- const attributes = new Map<string, string>(
146
- Object.entries(options.attributes || {})
147
- );
140
+ export function createTypedMockHTMLElement(options: MockHTMLElementOptions = {}): TypedMockHTMLElement {
141
+ const attributes = new Map<string, string>(Object.entries(options.attributes || {}));
148
142
  const eventListeners = new Map<string, EventListener[]>();
149
143
  const childNodes: Node[] = [];
150
144
 
@@ -248,9 +242,7 @@ export interface TypedMockLocation {
248
242
  toString: () => string;
249
243
  }
250
244
 
251
- export function createTypedMockLocation(
252
- overrides?: Partial<Location>
253
- ): TypedMockLocation {
245
+ export function createTypedMockLocation(overrides?: Partial<Location>): TypedMockLocation {
254
246
  const base = {
255
247
  href: 'http://localhost/',
256
248
  pathname: '/',
@@ -333,9 +325,7 @@ export interface TypedMockWindow {
333
325
  _eventListeners: Map<string, EventListener[]>;
334
326
  }
335
327
 
336
- export function createTypedMockWindow(
337
- options: MockWindowOptions = {}
338
- ): TypedMockWindow {
328
+ export function createTypedMockWindow(options: MockWindowOptions = {}): TypedMockWindow {
339
329
  const eventListeners = new Map<string, EventListener[]>();
340
330
  const location = createTypedMockLocation(options.location);
341
331
  const history = createTypedMockHistory();
@@ -400,9 +390,7 @@ export interface TypedMockDocument {
400
390
  _eventListeners: Map<string, EventListener[]>;
401
391
  }
402
392
 
403
- export function createTypedMockDocument(
404
- options: MockDocumentOptions = {}
405
- ): TypedMockDocument {
393
+ export function createTypedMockDocument(options: MockDocumentOptions = {}): TypedMockDocument {
406
394
  const registeredElements = new Map<string, TypedMockHTMLElement>();
407
395
  const createdElements: TypedMockHTMLElement[] = [];
408
396
  const eventListeners = new Map<string, EventListener[]>();
@@ -465,7 +453,7 @@ export interface DomMockInstallation {
465
453
  * Install mock DOM globally and return cleanup function
466
454
  */
467
455
  export function installMockDom(
468
- options: { window?: MockWindowOptions; document?: MockDocumentOptions } = {}
456
+ options: { window?: MockWindowOptions; document?: MockDocumentOptions } = {},
469
457
  ): DomMockInstallation {
470
458
  const originalWindow = (globalThis as any).window;
471
459
  const originalDocument = (globalThis as any).document;
@@ -51,7 +51,7 @@ export interface TypedMockMouseEvent extends MouseEvent {
51
51
 
52
52
  export function createTypedKeyboardEvent(
53
53
  type: 'keydown' | 'keyup' | 'keypress',
54
- options: MockKeyboardEventOptions
54
+ options: MockKeyboardEventOptions,
55
55
  ): TypedMockKeyboardEvent {
56
56
  const event = new KeyboardEvent(type, {
57
57
  key: options.key,
@@ -118,8 +118,7 @@ export const KeyboardShortcuts = {
118
118
  delete: () => createTypedKeyboardEvent('keydown', { key: 'Backspace' }),
119
119
  enter: () => createTypedKeyboardEvent('keydown', { key: 'Enter' }),
120
120
  escape: () => createTypedKeyboardEvent('keydown', { key: 'Escape' }),
121
- tab: (shift = false) =>
122
- createTypedKeyboardEvent('keydown', { key: 'Tab', shiftKey: shift }),
121
+ tab: (shift = false) => createTypedKeyboardEvent('keydown', { key: 'Tab', shiftKey: shift }),
123
122
  arrowUp: () => createTypedKeyboardEvent('keydown', { key: 'ArrowUp' }),
124
123
  arrowDown: () => createTypedKeyboardEvent('keydown', { key: 'ArrowDown' }),
125
124
  arrowLeft: () => createTypedKeyboardEvent('keydown', { key: 'ArrowLeft' }),
@@ -140,7 +139,7 @@ export function createTypedMouseEvent(
140
139
  | 'mouseover'
141
140
  | 'mouseout'
142
141
  | 'contextmenu',
143
- options: MockMouseEventOptions = {}
142
+ options: MockMouseEventOptions = {},
144
143
  ): TypedMockMouseEvent {
145
144
  const event = new MouseEvent(type, {
146
145
  button: options.button ?? 0,
@@ -176,7 +175,7 @@ export function createTypedMouseEvent(
176
175
  export function createTypedCustomEvent<T = unknown>(
177
176
  type: string,
178
177
  detail?: T,
179
- options: { bubbles?: boolean; cancelable?: boolean } = {}
178
+ options: { bubbles?: boolean; cancelable?: boolean } = {},
180
179
  ): CustomEvent<T> {
181
180
  return new CustomEvent(type, {
182
181
  detail,
@@ -199,9 +198,7 @@ export interface MockMessageEventOptions<T = unknown> {
199
198
  source?: MessageEventSource | null;
200
199
  }
201
200
 
202
- export function createTypedMessageEvent<T = unknown>(
203
- options: MockMessageEventOptions<T>
204
- ): MessageEvent<T> {
201
+ export function createTypedMessageEvent<T = unknown>(options: MockMessageEventOptions<T>): MessageEvent<T> {
205
202
  return new MessageEvent('message', {
206
203
  data: options.data,
207
204
  origin: options.origin ?? 'http://localhost',
@@ -213,7 +210,7 @@ export function createTypedMessageEvent<T = unknown>(
213
210
 
214
211
  export function createTypedFocusEvent(
215
212
  type: 'focus' | 'blur' | 'focusin' | 'focusout',
216
- options: { relatedTarget?: EventTarget | null } = {}
213
+ options: { relatedTarget?: EventTarget | null } = {},
217
214
  ): FocusEvent {
218
215
  return new FocusEvent(type, {
219
216
  bubbles: type === 'focusin' || type === 'focusout',
@@ -230,10 +227,7 @@ export interface MockInputEventOptions {
230
227
  isComposing?: boolean;
231
228
  }
232
229
 
233
- export function createTypedInputEvent(
234
- type: 'input' | 'beforeinput',
235
- options: MockInputEventOptions = {}
236
- ): InputEvent {
230
+ export function createTypedInputEvent(type: 'input' | 'beforeinput', options: MockInputEventOptions = {}): InputEvent {
237
231
  return new InputEvent(type, {
238
232
  data: options.data ?? null,
239
233
  inputType: options.inputType ?? 'insertText',