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
@@ -1,16 +1,17 @@
1
- import { test, expect, describe, beforeEach, afterEach, mock } from "bun:test";
2
- import { StyleInjector } from "./StyleInjector";
3
- import { ComponentRegistry } from "../componentRegistry";
4
- import { ElementRegistry } from "../elementRegistry";
5
- import type { ComponentDefinition } from "../../shared/types";
1
+ import { test, expect, describe, beforeEach, afterEach, mock } from 'bun:test';
2
+ import { StyleInjector } from './StyleInjector';
3
+ import { ComponentRegistry } from '../componentRegistry';
4
+ import { ElementRegistry } from '../elementRegistry';
5
+ import { InteractiveStylesRegistry } from '../InteractiveStylesRegistry';
6
+ import type { ComponentDefinition } from '../../shared/types';
6
7
  import {
7
8
  createTypedMockHTMLElement,
8
9
  createTypedMockDocument,
9
10
  type TypedMockDocument,
10
11
  type TypedMockHTMLElement,
11
- } from "../../test-utils/factories/DomMockFactory";
12
+ } from '../../test-utils/factories/DomMockFactory';
12
13
 
13
- describe("StyleInjector", () => {
14
+ describe('StyleInjector', () => {
14
15
  let componentRegistry: ComponentRegistry;
15
16
  let elementRegistry: ElementRegistry;
16
17
  let styleInjector: StyleInjector;
@@ -22,18 +23,23 @@ describe("StyleInjector", () => {
22
23
  // Save original document
23
24
  originalDocument = global.document;
24
25
 
26
+ // InteractiveStylesRegistry is a process-global singleton; earlier test
27
+ // files in the same run may have left entries in it, which inject() would
28
+ // pick up and write into our mocked style tag. Clear it for isolation.
29
+ InteractiveStylesRegistry.clear();
30
+
25
31
  componentRegistry = new ComponentRegistry();
26
32
  elementRegistry = new ElementRegistry();
27
33
  styleInjector = new StyleInjector({
28
34
  componentRegistry,
29
35
  elementRegistry,
30
- styleId: "component-css",
36
+ styleId: 'component-css',
31
37
  });
32
38
 
33
39
  // Create typed mock style tag
34
40
  mockStyleTag = createTypedMockHTMLElement({
35
- tagName: "STYLE",
36
- id: "component-css",
41
+ tagName: 'STYLE',
42
+ id: 'component-css',
37
43
  });
38
44
 
39
45
  // Create typed mock document
@@ -41,7 +47,7 @@ describe("StyleInjector", () => {
41
47
 
42
48
  // Configure createElement to return our mock style tag
43
49
  mockDocument.createElement.mockImplementation((tag: string) => {
44
- if (tag === "style") {
50
+ if (tag === 'style') {
45
51
  return mockStyleTag;
46
52
  }
47
53
  return createTypedMockHTMLElement({ tagName: tag });
@@ -54,12 +60,14 @@ describe("StyleInjector", () => {
54
60
  afterEach(() => {
55
61
  // Clean up any style tags
56
62
  styleInjector.clear();
63
+ // Don't leak our own registry state to later test files
64
+ InteractiveStylesRegistry.clear();
57
65
  // Restore original document
58
66
  global.document = originalDocument;
59
67
  });
60
68
 
61
- describe("constructor", () => {
62
- test("should create instance with default styleId", () => {
69
+ describe('constructor', () => {
70
+ test('should create instance with default styleId', () => {
63
71
  const injector = new StyleInjector({
64
72
  componentRegistry,
65
73
  elementRegistry,
@@ -67,146 +75,146 @@ describe("StyleInjector", () => {
67
75
  expect(injector).toBeInstanceOf(StyleInjector);
68
76
  });
69
77
 
70
- test("should create instance with custom styleId", () => {
78
+ test('should create instance with custom styleId', () => {
71
79
  const injector = new StyleInjector({
72
80
  componentRegistry,
73
81
  elementRegistry,
74
- styleId: "custom-style-id",
82
+ styleId: 'custom-style-id',
75
83
  });
76
84
  expect(injector).toBeInstanceOf(StyleInjector);
77
85
  });
78
86
  });
79
87
 
80
- describe("inject", () => {
88
+ describe('inject', () => {
81
89
  // Note: This test passes in isolation but may fail in full suite due to
82
90
  // DOM state pollution from other tests (generateUtilityCSS scans document.body)
83
- test.skip("should inject CSS without templates (test isolation issue in full suite)", () => {
91
+ test.skip('should inject CSS without templates (test isolation issue in full suite)', () => {
84
92
  const componentDef: ComponentDefinition = {
85
- type: "component",
93
+ type: 'component',
86
94
  component: {
87
95
  interface: {},
88
- structure: { type: "node", tag: "div" },
89
- css: ".test { color: red; }",
96
+ structure: { type: 'node', tag: 'div' },
97
+ css: '.test { color: red; }',
90
98
  },
91
99
  };
92
100
 
93
- componentRegistry.register("TestComponent", componentDef);
101
+ componentRegistry.register('TestComponent', componentDef);
94
102
 
95
103
  styleInjector.inject();
96
104
 
97
- expect(mockDocument.createElement).toHaveBeenCalledWith("style");
105
+ expect(mockDocument.createElement).toHaveBeenCalledWith('style');
98
106
  expect(mockDocument.head.appendChild).toHaveBeenCalled();
99
- expect(mockStyleTag.textContent).toContain(".test { color: red; }");
100
- expect(mockStyleTag.textContent).toContain("Component: TestComponent");
107
+ expect(mockStyleTag.textContent).toContain('.test { color: red; }');
108
+ expect(mockStyleTag.textContent).toContain('Component: TestComponent');
101
109
  });
102
110
 
103
111
  // Template-based tests require full ElementRegistry from @meno/studio
104
112
  // These are integration tests that should be run in the studio package
105
- test.skip("should inject CSS with templates per instance (requires @meno/studio ElementRegistry)", () => {
113
+ test.skip('should inject CSS with templates per instance (requires @meno/studio ElementRegistry)', () => {
106
114
  const componentDef: ComponentDefinition = {
107
- type: "component",
115
+ type: 'component',
108
116
  component: {
109
117
  interface: {},
110
- structure: { type: "node", tag: "div" },
111
- css: ".test { color: {{color}}; }",
118
+ structure: { type: 'node', tag: 'div' },
119
+ css: '.test { color: {{color}}; }',
112
120
  },
113
121
  };
114
122
 
115
- componentRegistry.register("TestComponent", componentDef);
123
+ componentRegistry.register('TestComponent', componentDef);
116
124
 
117
125
  // Register component instances with props using typed mocks
118
- const mockElement1 = createTypedMockHTMLElement({ tagName: "DIV" });
119
- const mockElement2 = createTypedMockHTMLElement({ tagName: "DIV" });
120
- elementRegistry.register([0], mockElement1 as unknown as HTMLElement, "TestComponent", true, {
121
- color: "red",
126
+ const mockElement1 = createTypedMockHTMLElement({ tagName: 'DIV' });
127
+ const mockElement2 = createTypedMockHTMLElement({ tagName: 'DIV' });
128
+ elementRegistry.register([0], mockElement1 as unknown as HTMLElement, 'TestComponent', true, {
129
+ color: 'red',
122
130
  });
123
- elementRegistry.register([1], mockElement2 as unknown as HTMLElement, "TestComponent", true, {
124
- color: "blue",
131
+ elementRegistry.register([1], mockElement2 as unknown as HTMLElement, 'TestComponent', true, {
132
+ color: 'blue',
125
133
  });
126
134
 
127
135
  styleInjector.inject();
128
136
 
129
- expect(mockDocument.createElement).toHaveBeenCalledWith("style");
137
+ expect(mockDocument.createElement).toHaveBeenCalledWith('style');
130
138
  expect(mockDocument.head.appendChild).toHaveBeenCalled();
131
- expect(mockStyleTag.textContent).toContain("color: red");
132
- expect(mockStyleTag.textContent).toContain("color: blue");
133
- expect(mockStyleTag.textContent).toContain("(instance)");
139
+ expect(mockStyleTag.textContent).toContain('color: red');
140
+ expect(mockStyleTag.textContent).toContain('color: blue');
141
+ expect(mockStyleTag.textContent).toContain('(instance)');
134
142
  });
135
143
 
136
- test.skip("should handle multiple components with mixed template/non-template CSS (requires @meno/studio ElementRegistry)", () => {
144
+ test.skip('should handle multiple components with mixed template/non-template CSS (requires @meno/studio ElementRegistry)', () => {
137
145
  const componentDef1: ComponentDefinition = {
138
- type: "component",
146
+ type: 'component',
139
147
  component: {
140
148
  interface: {},
141
- structure: { type: "node", tag: "div" },
142
- css: ".test1 { color: red; }",
149
+ structure: { type: 'node', tag: 'div' },
150
+ css: '.test1 { color: red; }',
143
151
  },
144
152
  };
145
153
 
146
154
  const componentDef2: ComponentDefinition = {
147
- type: "component",
155
+ type: 'component',
148
156
  component: {
149
157
  interface: {},
150
- structure: { type: "node", tag: "div" },
151
- css: ".test2 { color: {{color}}; }",
158
+ structure: { type: 'node', tag: 'div' },
159
+ css: '.test2 { color: {{color}}; }',
152
160
  },
153
161
  };
154
162
 
155
- componentRegistry.register("Component1", componentDef1);
156
- componentRegistry.register("Component2", componentDef2);
163
+ componentRegistry.register('Component1', componentDef1);
164
+ componentRegistry.register('Component2', componentDef2);
157
165
 
158
- const mockElement = createTypedMockHTMLElement({ tagName: "DIV" });
159
- elementRegistry.register([0], mockElement as unknown as HTMLElement, "Component2", true, {
160
- color: "blue",
166
+ const mockElement = createTypedMockHTMLElement({ tagName: 'DIV' });
167
+ elementRegistry.register([0], mockElement as unknown as HTMLElement, 'Component2', true, {
168
+ color: 'blue',
161
169
  });
162
170
 
163
171
  styleInjector.inject();
164
172
 
165
- expect(mockStyleTag.textContent).toContain("Component: Component1");
166
- expect(mockStyleTag.textContent).toContain("Component: Component2");
167
- expect(mockStyleTag.textContent).toContain(".test1 { color: red; }");
168
- expect(mockStyleTag.textContent).toContain("color: blue");
173
+ expect(mockStyleTag.textContent).toContain('Component: Component1');
174
+ expect(mockStyleTag.textContent).toContain('Component: Component2');
175
+ expect(mockStyleTag.textContent).toContain('.test1 { color: red; }');
176
+ expect(mockStyleTag.textContent).toContain('color: blue');
169
177
  });
170
178
 
171
- test("should reuse existing style tag (in-place update)", () => {
179
+ test('should reuse existing style tag (in-place update)', () => {
172
180
  const existingStyle = createTypedMockHTMLElement({
173
- tagName: "STYLE",
174
- id: "component-css",
181
+ tagName: 'STYLE',
182
+ id: 'component-css',
175
183
  });
176
184
 
177
185
  mockDocument.getElementById.mockReturnValue(existingStyle);
178
186
 
179
187
  const componentDef: ComponentDefinition = {
180
- type: "component",
188
+ type: 'component',
181
189
  component: {
182
190
  interface: {},
183
- structure: { type: "node", tag: "div" },
184
- css: ".test { color: red; }",
191
+ structure: { type: 'node', tag: 'div' },
192
+ css: '.test { color: red; }',
185
193
  },
186
194
  };
187
195
 
188
- componentRegistry.register("TestComponent", componentDef);
196
+ componentRegistry.register('TestComponent', componentDef);
189
197
 
190
198
  styleInjector.inject();
191
199
 
192
200
  // Should look up existing tag and update textContent in-place (no createElement)
193
- expect(mockDocument.getElementById).toHaveBeenCalledWith("component-css");
194
- expect(existingStyle.textContent).toContain(".test { color: red; }");
201
+ expect(mockDocument.getElementById).toHaveBeenCalledWith('component-css');
202
+ expect(existingStyle.textContent).toContain('.test { color: red; }');
195
203
  expect(mockDocument.createElement).not.toHaveBeenCalled();
196
204
  });
197
205
 
198
206
  // Note: This test passes in isolation but may fail in full suite due to
199
207
  // DOM state pollution from other tests (generateUtilityCSS scans document.body)
200
- test.skip("should not inject CSS if no components have CSS (test isolation issue in full suite)", () => {
208
+ test.skip('should not inject CSS if no components have CSS (test isolation issue in full suite)', () => {
201
209
  const componentDef: ComponentDefinition = {
202
- type: "component",
210
+ type: 'component',
203
211
  component: {
204
212
  interface: {},
205
- structure: { type: "node", tag: "div" },
213
+ structure: { type: 'node', tag: 'div' },
206
214
  },
207
215
  };
208
216
 
209
- componentRegistry.register("TestComponent", componentDef);
217
+ componentRegistry.register('TestComponent', componentDef);
210
218
 
211
219
  styleInjector.inject();
212
220
 
@@ -214,53 +222,53 @@ describe("StyleInjector", () => {
214
222
  expect(mockDocument.head.appendChild).not.toHaveBeenCalled();
215
223
  });
216
224
 
217
- test.skip("should handle template processing errors gracefully (requires @meno/studio ElementRegistry)", () => {
225
+ test.skip('should handle template processing errors gracefully (requires @meno/studio ElementRegistry)', () => {
218
226
  const componentDef: ComponentDefinition = {
219
- type: "component",
227
+ type: 'component',
220
228
  component: {
221
229
  interface: {},
222
- structure: { type: "node", tag: "div" },
223
- css: ".test { color: {{invalid.prop}}; }",
230
+ structure: { type: 'node', tag: 'div' },
231
+ css: '.test { color: {{invalid.prop}}; }',
224
232
  },
225
233
  };
226
234
 
227
- componentRegistry.register("TestComponent", componentDef);
235
+ componentRegistry.register('TestComponent', componentDef);
228
236
 
229
- const mockElement = createTypedMockHTMLElement({ tagName: "DIV" });
230
- elementRegistry.register([0], mockElement as unknown as HTMLElement, "TestComponent", true, {
231
- color: "red",
237
+ const mockElement = createTypedMockHTMLElement({ tagName: 'DIV' });
238
+ elementRegistry.register([0], mockElement as unknown as HTMLElement, 'TestComponent', true, {
239
+ color: 'red',
232
240
  });
233
241
 
234
242
  // Should not throw, should fallback to original CSS
235
243
  expect(() => styleInjector.inject()).not.toThrow();
236
- expect(mockStyleTag.textContent).toContain("Component: TestComponent");
244
+ expect(mockStyleTag.textContent).toContain('Component: TestComponent');
237
245
  });
238
246
 
239
- test("should handle missing component props gracefully", () => {
247
+ test('should handle missing component props gracefully', () => {
240
248
  const componentDef: ComponentDefinition = {
241
- type: "component",
249
+ type: 'component',
242
250
  component: {
243
251
  interface: {},
244
- structure: { type: "node", tag: "div" },
245
- css: ".test { color: {{color}}; }",
252
+ structure: { type: 'node', tag: 'div' },
253
+ css: '.test { color: {{color}}; }',
246
254
  },
247
255
  };
248
256
 
249
- componentRegistry.register("TestComponent", componentDef);
257
+ componentRegistry.register('TestComponent', componentDef);
250
258
 
251
259
  // Register element without props
252
- const mockElement = createTypedMockHTMLElement({ tagName: "DIV" });
253
- elementRegistry.register([0], mockElement as unknown as HTMLElement, "TestComponent", true);
260
+ const mockElement = createTypedMockHTMLElement({ tagName: 'DIV' });
261
+ elementRegistry.register([0], mockElement as unknown as HTMLElement, 'TestComponent', true);
254
262
 
255
263
  // Should not throw
256
264
  expect(() => styleInjector.inject()).not.toThrow();
257
265
  });
258
266
 
259
- test("should handle errors during injection gracefully", () => {
267
+ test('should handle errors during injection gracefully', () => {
260
268
  // Force an error by making getAll throw
261
269
  const originalGetAll = componentRegistry.getAll.bind(componentRegistry);
262
270
  componentRegistry.getAll = mock(() => {
263
- throw new Error("Test error");
271
+ throw new Error('Test error');
264
272
  });
265
273
 
266
274
  // Should not throw - should handle error gracefully
@@ -271,15 +279,15 @@ describe("StyleInjector", () => {
271
279
  });
272
280
  });
273
281
 
274
- describe("clear", () => {
275
- test("should remove all style tags if they exist", () => {
282
+ describe('clear', () => {
283
+ test('should remove all style tags if they exist', () => {
276
284
  const existingComponentStyle = createTypedMockHTMLElement({
277
- tagName: "STYLE",
278
- id: "component-css",
285
+ tagName: 'STYLE',
286
+ id: 'component-css',
279
287
  });
280
288
  const existingInteractiveStyle = createTypedMockHTMLElement({
281
- tagName: "STYLE",
282
- id: "interactive-styles",
289
+ tagName: 'STYLE',
290
+ id: 'interactive-styles',
283
291
  });
284
292
 
285
293
  mockDocument.getElementById
@@ -289,63 +297,63 @@ describe("StyleInjector", () => {
289
297
  styleInjector.clear();
290
298
 
291
299
  // component-css and interactive-styles are removed directly
292
- expect(mockDocument.getElementById).toHaveBeenCalledWith("component-css");
293
- expect(mockDocument.getElementById).toHaveBeenCalledWith("interactive-styles");
300
+ expect(mockDocument.getElementById).toHaveBeenCalledWith('component-css');
301
+ expect(mockDocument.getElementById).toHaveBeenCalledWith('interactive-styles');
294
302
  expect(existingComponentStyle.remove).toHaveBeenCalled();
295
303
  expect(existingInteractiveStyle.remove).toHaveBeenCalled();
296
304
  // utility-css removal is delegated to UtilityClassCollector.destroy()
297
305
  });
298
306
 
299
- test("should not throw if style tags do not exist", () => {
307
+ test('should not throw if style tags do not exist', () => {
300
308
  mockDocument.getElementById.mockReturnValue(null);
301
309
 
302
310
  expect(() => styleInjector.clear()).not.toThrow();
303
311
  });
304
312
  });
305
313
 
306
- describe("exists", () => {
307
- test("should return true if style tag exists", () => {
314
+ describe('exists', () => {
315
+ test('should return true if style tag exists', () => {
308
316
  const existingStyle = createTypedMockHTMLElement({
309
- tagName: "STYLE",
310
- id: "component-css",
317
+ tagName: 'STYLE',
318
+ id: 'component-css',
311
319
  });
312
320
 
313
321
  mockDocument.getElementById.mockReturnValueOnce(existingStyle);
314
322
 
315
323
  expect(styleInjector.exists()).toBe(true);
316
- expect(mockDocument.getElementById).toHaveBeenCalledWith("component-css");
324
+ expect(mockDocument.getElementById).toHaveBeenCalledWith('component-css');
317
325
  });
318
326
 
319
- test("should return false if style tag does not exist", () => {
327
+ test('should return false if style tag does not exist', () => {
320
328
  mockDocument.getElementById.mockReturnValueOnce(null);
321
329
 
322
330
  expect(styleInjector.exists()).toBe(false);
323
- expect(mockDocument.getElementById).toHaveBeenCalledWith("component-css");
331
+ expect(mockDocument.getElementById).toHaveBeenCalledWith('component-css');
324
332
  });
325
333
  });
326
334
 
327
- describe("integration", () => {
328
- test.skip("should handle full injection cycle (requires @meno/studio ElementRegistry)", () => {
335
+ describe('integration', () => {
336
+ test.skip('should handle full injection cycle (requires @meno/studio ElementRegistry)', () => {
329
337
  const componentDef: ComponentDefinition = {
330
- type: "component",
338
+ type: 'component',
331
339
  component: {
332
340
  interface: {},
333
- structure: { type: "node", tag: "div" },
334
- css: ".test { color: {{color}}; }",
341
+ structure: { type: 'node', tag: 'div' },
342
+ css: '.test { color: {{color}}; }',
335
343
  },
336
344
  };
337
345
 
338
- componentRegistry.register("TestComponent", componentDef);
346
+ componentRegistry.register('TestComponent', componentDef);
339
347
 
340
- const mockElement = createTypedMockHTMLElement({ tagName: "DIV" });
341
- elementRegistry.register([0], mockElement as unknown as HTMLElement, "TestComponent", true, {
342
- color: "green",
348
+ const mockElement = createTypedMockHTMLElement({ tagName: 'DIV' });
349
+ elementRegistry.register([0], mockElement as unknown as HTMLElement, 'TestComponent', true, {
350
+ color: 'green',
343
351
  });
344
352
 
345
353
  // Inject - should create style tag
346
354
  mockDocument.getElementById.mockReturnValueOnce(null); // No existing tag
347
355
  styleInjector.inject();
348
- expect(mockDocument.createElement).toHaveBeenCalledWith("style");
356
+ expect(mockDocument.createElement).toHaveBeenCalledWith('style');
349
357
  expect(mockDocument.head.appendChild).toHaveBeenCalled();
350
358
 
351
359
  // Verify exists() works after injection
@@ -354,8 +362,8 @@ describe("StyleInjector", () => {
354
362
 
355
363
  // Clear - should remove style tag
356
364
  const styleTagWithRemove = createTypedMockHTMLElement({
357
- tagName: "STYLE",
358
- id: "component-css",
365
+ tagName: 'STYLE',
366
+ id: 'component-css',
359
367
  });
360
368
  mockDocument.getElementById.mockReturnValueOnce(styleTagWithRemove);
361
369
  styleInjector.clear();
@@ -367,4 +375,3 @@ describe("StyleInjector", () => {
367
375
  });
368
376
  });
369
377
  });
370
-
@@ -13,7 +13,11 @@ import type { ElementRegistry } from '../elementRegistry';
13
13
  import { hasTemplates, processCodeTemplates } from '../templateEngine';
14
14
  import { generateAllInteractiveCSS } from '../../shared/cssGeneration';
15
15
  import { rewriteViewportUnits } from '../../shared/viewportUnits';
16
- import { getCachedBreakpointConfig, getCachedRemConversionConfig, getCachedResponsiveScalesConfig } from '../responsiveStyleResolver';
16
+ import {
17
+ getCachedBreakpointConfig,
18
+ getCachedRemConversionConfig,
19
+ getCachedResponsiveScalesConfig,
20
+ } from '../responsiveStyleResolver';
17
21
  import { DEFAULT_BREAKPOINTS } from '../../shared/breakpoints';
18
22
  import { InteractiveStylesRegistry } from '../InteractiveStylesRegistry';
19
23
  import { UtilityClassCollector } from './UtilityClassCollector';
@@ -36,7 +40,7 @@ function simpleHash(str: string): number {
36
40
  let hash = 0;
37
41
  for (let i = 0; i < str.length; i++) {
38
42
  const char = str.charCodeAt(i);
39
- hash = ((hash << 5) - hash) + char;
43
+ hash = (hash << 5) - hash + char;
40
44
  hash |= 0; // Convert to 32-bit integer
41
45
  }
42
46
  return hash;
@@ -111,7 +115,7 @@ export class StyleInjector {
111
115
  const processedCSS = processCodeTemplates(originalCSS, props);
112
116
  processedCSSBlocks.push(`/* Component: ${name} (instance) */\n${processedCSS}`);
113
117
  }
114
- } catch (error) {
118
+ } catch (_error) {
115
119
  processedCSSBlocks.push(`/* Component: ${name} */\n${originalCSS}`);
116
120
  }
117
121
  }
@@ -133,9 +137,8 @@ export class StyleInjector {
133
137
  // If something removed the tag externally (e.g. a hot-reload pass that
134
138
  // wiped <head>), the hash short-circuit would otherwise leave the page
135
139
  // unstyled until the CSS itself changed.
136
- const existing = typeof document !== 'undefined'
137
- ? document.getElementById(this.styleId) as HTMLStyleElement | null
138
- : null;
140
+ const existing =
141
+ typeof document !== 'undefined' ? (document.getElementById(this.styleId) as HTMLStyleElement | null) : null;
139
142
  if (hash === this.previousComponentCSSHash && existing) return;
140
143
  this.previousComponentCSSHash = hash;
141
144
 
@@ -167,7 +170,7 @@ export class StyleInjector {
167
170
  const remConversionConfig = getCachedRemConversionConfig() || undefined;
168
171
  const responsiveScalesConfig = getCachedResponsiveScalesConfig() || undefined;
169
172
  const interactiveCSS = rewriteViewportUnits(
170
- generateAllInteractiveCSS(interactiveStylesMap, breakpointConfig, remConversionConfig, responsiveScalesConfig)
173
+ generateAllInteractiveCSS(interactiveStylesMap, breakpointConfig, remConversionConfig, responsiveScalesConfig),
171
174
  );
172
175
  if (!interactiveCSS) return;
173
176