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
@@ -94,7 +94,24 @@ export const CSS_PROPERTIES_DEFINITION: Record<string, CSSPropertyDefinition> =
94
94
  type: 'select',
95
95
  },
96
96
  backgroundBlendMode: {
97
- values: ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'],
97
+ values: [
98
+ 'normal',
99
+ 'multiply',
100
+ 'screen',
101
+ 'overlay',
102
+ 'darken',
103
+ 'lighten',
104
+ 'color-dodge',
105
+ 'color-burn',
106
+ 'hard-light',
107
+ 'soft-light',
108
+ 'difference',
109
+ 'exclusion',
110
+ 'hue',
111
+ 'saturation',
112
+ 'color',
113
+ 'luminosity',
114
+ ],
98
115
  type: 'select',
99
116
  },
100
117
  // Gradient-text recipe (`background: linear-gradient(...); background-clip:
@@ -298,7 +315,24 @@ export const CSS_PROPERTIES_DEFINITION: Record<string, CSSPropertyDefinition> =
298
315
  type: 'select',
299
316
  },
300
317
  mixBlendMode: {
301
- values: ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'],
318
+ values: [
319
+ 'normal',
320
+ 'multiply',
321
+ 'screen',
322
+ 'overlay',
323
+ 'darken',
324
+ 'lighten',
325
+ 'color-dodge',
326
+ 'color-burn',
327
+ 'hard-light',
328
+ 'soft-light',
329
+ 'difference',
330
+ 'exclusion',
331
+ 'hue',
332
+ 'saturation',
333
+ 'color',
334
+ 'luminosity',
335
+ ],
302
336
  type: 'select',
303
337
  },
304
338
  isolation: {
@@ -409,7 +443,18 @@ export const CSS_PROPERTIES_DEFINITION: Record<string, CSSPropertyDefinition> =
409
443
  // Lists
410
444
  listStyle: { type: 'string' },
411
445
  listStyleType: {
412
- values: ['none', 'disc', 'circle', 'square', 'decimal', 'decimal-leading-zero', 'lower-roman', 'upper-roman', 'lower-alpha', 'upper-alpha'],
446
+ values: [
447
+ 'none',
448
+ 'disc',
449
+ 'circle',
450
+ 'square',
451
+ 'decimal',
452
+ 'decimal-leading-zero',
453
+ 'lower-roman',
454
+ 'upper-roman',
455
+ 'lower-alpha',
456
+ 'upper-alpha',
457
+ ],
413
458
  type: 'select',
414
459
  },
415
460
  listStylePosition: {
@@ -605,22 +650,127 @@ function getPropertyPriority(property: string): number {
605
650
  * Order determines display order in the UI
606
651
  */
607
652
  export const CSS_PROPERTY_GROUPS: Record<string, string[]> = {
608
- 'Layout': ['display'],
609
- 'Spacing': ['margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],
610
- 'Size': ['width', 'height', 'minWidth', 'maxWidth', 'minHeight', 'maxHeight', 'aspectRatio'],
611
- 'Position': ['position', 'top', 'right', 'bottom', 'left', 'inset', 'zIndex'],
612
- 'Flexbox': ['flex', 'flexDirection', 'flexWrap', 'flexFlow', 'justifyContent', 'alignItems', 'alignContent', 'gap', 'rowGap', 'columnGap', 'alignSelf', 'flexGrow', 'flexShrink', 'flexBasis', 'order'],
613
- 'Grid': ['grid', 'gridTemplateColumns', 'gridTemplateRows', 'gridTemplateAreas', 'gridGap', 'gridColumn', 'gridRow', 'gridArea', 'gridAutoFlow', 'gridAutoColumns', 'gridAutoRows', 'justifyItems', 'justifySelf', 'placeContent', 'placeItems', 'placeSelf'],
614
- 'Typography': ['fontWeight', 'fontSize', 'fontFamily', 'fontStyle', 'lineHeight', 'color', 'textAlign', 'textDecoration', 'textTransform', 'letterSpacing', 'wordSpacing', 'wordBreak', 'overflowWrap', 'textIndent', 'verticalAlign'],
615
- 'Background': ['background', 'backgroundColor', 'backgroundImage', 'backgroundSize', 'backgroundPosition', 'backgroundRepeat', 'opacity'],
616
- 'Borders': ['borderRadius', 'borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomLeftRadius', 'borderBottomRightRadius', 'border', 'borderWidth', 'borderStyle', 'borderColor', 'borderTop', 'borderRight', 'borderBottom', 'borderLeft'],
617
- 'Outline': ['outline', 'outlineWidth', 'outlineStyle', 'outlineColor', 'outlineOffset'],
618
- 'Effects': ['boxShadow', 'textShadow', 'filter', 'backdropFilter', 'transform', 'transformOrigin', 'transition', 'animation', 'backfaceVisibility', 'mixBlendMode', 'clipPath'],
619
- 'Overflow': ['overflow', 'overflowX', 'overflowY', 'whiteSpace', 'textOverflow', 'visibility', 'content'],
620
- 'Interaction': ['cursor', 'pointerEvents', 'userSelect'],
621
- 'Lists': ['listStyle', 'listStyleType', 'listStylePosition'],
622
- 'Other': ['float', 'clear', 'boxSizing', 'objectFit', 'objectPosition', 'resize', 'scrollBehavior', 'accentColor'],
623
- 'SVG': ['stroke', 'strokeWidth', 'strokeDasharray', 'strokeDashoffset', 'strokeLinecap', 'strokeLinejoin', 'strokeOpacity', 'fill', 'fillOpacity', 'fillRule'],
653
+ Layout: ['display'],
654
+ Spacing: [
655
+ 'margin',
656
+ 'marginTop',
657
+ 'marginRight',
658
+ 'marginBottom',
659
+ 'marginLeft',
660
+ 'padding',
661
+ 'paddingTop',
662
+ 'paddingRight',
663
+ 'paddingBottom',
664
+ 'paddingLeft',
665
+ ],
666
+ Size: ['width', 'height', 'minWidth', 'maxWidth', 'minHeight', 'maxHeight', 'aspectRatio'],
667
+ Position: ['position', 'top', 'right', 'bottom', 'left', 'inset', 'zIndex'],
668
+ Flexbox: [
669
+ 'flex',
670
+ 'flexDirection',
671
+ 'flexWrap',
672
+ 'flexFlow',
673
+ 'justifyContent',
674
+ 'alignItems',
675
+ 'alignContent',
676
+ 'gap',
677
+ 'rowGap',
678
+ 'columnGap',
679
+ 'alignSelf',
680
+ 'flexGrow',
681
+ 'flexShrink',
682
+ 'flexBasis',
683
+ 'order',
684
+ ],
685
+ Grid: [
686
+ 'grid',
687
+ 'gridTemplateColumns',
688
+ 'gridTemplateRows',
689
+ 'gridTemplateAreas',
690
+ 'gridGap',
691
+ 'gridColumn',
692
+ 'gridRow',
693
+ 'gridArea',
694
+ 'gridAutoFlow',
695
+ 'gridAutoColumns',
696
+ 'gridAutoRows',
697
+ 'justifyItems',
698
+ 'justifySelf',
699
+ 'placeContent',
700
+ 'placeItems',
701
+ 'placeSelf',
702
+ ],
703
+ Typography: [
704
+ 'fontWeight',
705
+ 'fontSize',
706
+ 'fontFamily',
707
+ 'fontStyle',
708
+ 'lineHeight',
709
+ 'color',
710
+ 'textAlign',
711
+ 'textDecoration',
712
+ 'textTransform',
713
+ 'letterSpacing',
714
+ 'wordSpacing',
715
+ 'wordBreak',
716
+ 'overflowWrap',
717
+ 'textIndent',
718
+ 'verticalAlign',
719
+ ],
720
+ Background: [
721
+ 'background',
722
+ 'backgroundColor',
723
+ 'backgroundImage',
724
+ 'backgroundSize',
725
+ 'backgroundPosition',
726
+ 'backgroundRepeat',
727
+ 'opacity',
728
+ ],
729
+ Borders: [
730
+ 'borderRadius',
731
+ 'borderTopLeftRadius',
732
+ 'borderTopRightRadius',
733
+ 'borderBottomLeftRadius',
734
+ 'borderBottomRightRadius',
735
+ 'border',
736
+ 'borderWidth',
737
+ 'borderStyle',
738
+ 'borderColor',
739
+ 'borderTop',
740
+ 'borderRight',
741
+ 'borderBottom',
742
+ 'borderLeft',
743
+ ],
744
+ Outline: ['outline', 'outlineWidth', 'outlineStyle', 'outlineColor', 'outlineOffset'],
745
+ Effects: [
746
+ 'boxShadow',
747
+ 'textShadow',
748
+ 'filter',
749
+ 'backdropFilter',
750
+ 'transform',
751
+ 'transformOrigin',
752
+ 'transition',
753
+ 'animation',
754
+ 'backfaceVisibility',
755
+ 'mixBlendMode',
756
+ 'clipPath',
757
+ ],
758
+ Overflow: ['overflow', 'overflowX', 'overflowY', 'whiteSpace', 'textOverflow', 'visibility', 'content'],
759
+ Interaction: ['cursor', 'pointerEvents', 'userSelect'],
760
+ Lists: ['listStyle', 'listStyleType', 'listStylePosition'],
761
+ Other: ['float', 'clear', 'boxSizing', 'objectFit', 'objectPosition', 'resize', 'scrollBehavior', 'accentColor'],
762
+ SVG: [
763
+ 'stroke',
764
+ 'strokeWidth',
765
+ 'strokeDasharray',
766
+ 'strokeDashoffset',
767
+ 'strokeLinecap',
768
+ 'strokeLinejoin',
769
+ 'strokeOpacity',
770
+ 'fill',
771
+ 'fillOpacity',
772
+ 'fillRule',
773
+ ],
624
774
  };
625
775
 
626
776
  /**
@@ -647,23 +797,49 @@ export function getPropertyGroup(propertyName: string): string {
647
797
  * reuse the same group headers as list mode.
648
798
  */
649
799
  export const VISUAL_MODE_PROPERTIES: Record<string, string[]> = {
650
- 'Layout': ['display'],
651
- 'Grid': ['gridTemplateColumns'],
652
- 'Flexbox': ['flexDirection', 'flexWrap', 'justifyContent', 'alignItems', 'gap', 'flexGrow', 'flexShrink', 'flexBasis'],
653
- 'Spacing': ['margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],
654
- 'Size': ['width', 'height', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight'],
655
- 'Position': ['position', 'top', 'right', 'bottom', 'left', 'zIndex'],
656
- 'Typography': ['fontFamily', 'fontWeight', 'fontSize', 'lineHeight', 'color', 'letterSpacing', 'textAlign', 'textTransform', 'textDecoration'],
657
- 'Background': ['backgroundColor', 'backgroundImage', 'backgroundSize', 'backgroundPosition', 'backgroundRepeat', 'opacity'],
658
- 'Borders': ['borderRadius', 'borderWidth', 'borderStyle', 'borderColor'],
659
- 'Effects': ['boxShadow', 'transform', 'transition', 'filter'],
660
- 'Overflow': ['overflow', 'whiteSpace'],
661
- 'Interaction': ['cursor', 'pointerEvents'],
800
+ Layout: ['display'],
801
+ Grid: ['gridTemplateColumns'],
802
+ Flexbox: ['flexDirection', 'flexWrap', 'justifyContent', 'alignItems', 'gap', 'flexGrow', 'flexShrink', 'flexBasis'],
803
+ Spacing: [
804
+ 'margin',
805
+ 'marginTop',
806
+ 'marginRight',
807
+ 'marginBottom',
808
+ 'marginLeft',
809
+ 'padding',
810
+ 'paddingTop',
811
+ 'paddingRight',
812
+ 'paddingBottom',
813
+ 'paddingLeft',
814
+ ],
815
+ Size: ['width', 'height', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight'],
816
+ Position: ['position', 'top', 'right', 'bottom', 'left', 'zIndex'],
817
+ Typography: [
818
+ 'fontFamily',
819
+ 'fontWeight',
820
+ 'fontSize',
821
+ 'lineHeight',
822
+ 'color',
823
+ 'letterSpacing',
824
+ 'textAlign',
825
+ 'textTransform',
826
+ 'textDecoration',
827
+ ],
828
+ Background: [
829
+ 'backgroundColor',
830
+ 'backgroundImage',
831
+ 'backgroundSize',
832
+ 'backgroundPosition',
833
+ 'backgroundRepeat',
834
+ 'opacity',
835
+ ],
836
+ Borders: ['borderRadius', 'borderWidth', 'borderStyle', 'borderColor'],
837
+ Effects: ['boxShadow', 'transform', 'transition', 'filter'],
838
+ Overflow: ['overflow', 'whiteSpace'],
839
+ Interaction: ['cursor', 'pointerEvents'],
662
840
  };
663
841
 
664
- const VISUAL_MODE_PROPERTIES_SET = new Set(
665
- Object.values(VISUAL_MODE_PROPERTIES).flat()
666
- );
842
+ const VISUAL_MODE_PROPERTIES_SET = new Set(Object.values(VISUAL_MODE_PROPERTIES).flat());
667
843
 
668
844
  /**
669
845
  * True if `prop` belongs to the always-visible visual-mode list.
@@ -718,71 +894,71 @@ const isMediaTag = (t: string) => t === 'img' || t === 'video';
718
894
  */
719
895
  export const VISUAL_MODE_RULES: Record<string, VisualModeRule> = {
720
896
  // Flex/Grid CONTAINER props — own display must be flex/grid.
721
- flexDirection: ctx => isFlexDisplay(ctx.display),
722
- flexWrap: ctx => isFlexDisplay(ctx.display),
723
- justifyContent: ctx => isFlexDisplay(ctx.display) || isGridDisplay(ctx.display),
724
- alignItems: ctx => isFlexDisplay(ctx.display) || isGridDisplay(ctx.display),
725
- alignContent: ctx => isFlexDisplay(ctx.display) || isGridDisplay(ctx.display),
726
- gap: ctx => isFlexDisplay(ctx.display) || isGridDisplay(ctx.display),
727
- rowGap: ctx => isFlexDisplay(ctx.display) || isGridDisplay(ctx.display),
728
- columnGap: ctx => isFlexDisplay(ctx.display) || isGridDisplay(ctx.display),
729
- gridTemplateColumns: ctx => isGridDisplay(ctx.display),
730
- gridTemplateRows: ctx => isGridDisplay(ctx.display),
731
- gridTemplateAreas: ctx => isGridDisplay(ctx.display),
732
- gridGap: ctx => isGridDisplay(ctx.display),
733
- gridAutoFlow: ctx => isGridDisplay(ctx.display),
734
- gridAutoColumns: ctx => isGridDisplay(ctx.display),
735
- gridAutoRows: ctx => isGridDisplay(ctx.display),
736
- justifyItems: ctx => isGridDisplay(ctx.display),
737
- placeItems: ctx => isGridDisplay(ctx.display),
738
- placeContent: ctx => isGridDisplay(ctx.display),
897
+ flexDirection: (ctx) => isFlexDisplay(ctx.display),
898
+ flexWrap: (ctx) => isFlexDisplay(ctx.display),
899
+ justifyContent: (ctx) => isFlexDisplay(ctx.display) || isGridDisplay(ctx.display),
900
+ alignItems: (ctx) => isFlexDisplay(ctx.display) || isGridDisplay(ctx.display),
901
+ alignContent: (ctx) => isFlexDisplay(ctx.display) || isGridDisplay(ctx.display),
902
+ gap: (ctx) => isFlexDisplay(ctx.display) || isGridDisplay(ctx.display),
903
+ rowGap: (ctx) => isFlexDisplay(ctx.display) || isGridDisplay(ctx.display),
904
+ columnGap: (ctx) => isFlexDisplay(ctx.display) || isGridDisplay(ctx.display),
905
+ gridTemplateColumns: (ctx) => isGridDisplay(ctx.display),
906
+ gridTemplateRows: (ctx) => isGridDisplay(ctx.display),
907
+ gridTemplateAreas: (ctx) => isGridDisplay(ctx.display),
908
+ gridGap: (ctx) => isGridDisplay(ctx.display),
909
+ gridAutoFlow: (ctx) => isGridDisplay(ctx.display),
910
+ gridAutoColumns: (ctx) => isGridDisplay(ctx.display),
911
+ gridAutoRows: (ctx) => isGridDisplay(ctx.display),
912
+ justifyItems: (ctx) => isGridDisplay(ctx.display),
913
+ placeItems: (ctx) => isGridDisplay(ctx.display),
914
+ placeContent: (ctx) => isGridDisplay(ctx.display),
739
915
 
740
916
  // Flex/Grid ITEM props — PARENT display must be flex/grid.
741
- flex: ctx => isFlexDisplay(ctx.parentDisplay),
742
- flexFlow: ctx => isFlexDisplay(ctx.parentDisplay),
743
- flexGrow: ctx => isFlexDisplay(ctx.parentDisplay),
744
- flexShrink: ctx => isFlexDisplay(ctx.parentDisplay),
745
- flexBasis: ctx => isFlexDisplay(ctx.parentDisplay),
746
- alignSelf: ctx => isFlexDisplay(ctx.parentDisplay) || isGridDisplay(ctx.parentDisplay),
747
- justifySelf: ctx => isGridDisplay(ctx.parentDisplay),
748
- placeSelf: ctx => isGridDisplay(ctx.parentDisplay),
749
- order: ctx => isFlexDisplay(ctx.parentDisplay) || isGridDisplay(ctx.parentDisplay),
750
- gridArea: ctx => isGridDisplay(ctx.parentDisplay),
751
- gridColumn: ctx => isGridDisplay(ctx.parentDisplay),
752
- gridRow: ctx => isGridDisplay(ctx.parentDisplay),
917
+ flex: (ctx) => isFlexDisplay(ctx.parentDisplay),
918
+ flexFlow: (ctx) => isFlexDisplay(ctx.parentDisplay),
919
+ flexGrow: (ctx) => isFlexDisplay(ctx.parentDisplay),
920
+ flexShrink: (ctx) => isFlexDisplay(ctx.parentDisplay),
921
+ flexBasis: (ctx) => isFlexDisplay(ctx.parentDisplay),
922
+ alignSelf: (ctx) => isFlexDisplay(ctx.parentDisplay) || isGridDisplay(ctx.parentDisplay),
923
+ justifySelf: (ctx) => isGridDisplay(ctx.parentDisplay),
924
+ placeSelf: (ctx) => isGridDisplay(ctx.parentDisplay),
925
+ order: (ctx) => isFlexDisplay(ctx.parentDisplay) || isGridDisplay(ctx.parentDisplay),
926
+ gridArea: (ctx) => isGridDisplay(ctx.parentDisplay),
927
+ gridColumn: (ctx) => isGridDisplay(ctx.parentDisplay),
928
+ gridRow: (ctx) => isGridDisplay(ctx.parentDisplay),
753
929
 
754
930
  // Position-dependent inset properties.
755
- top: ctx => ctx.position !== 'static',
756
- right: ctx => ctx.position !== 'static',
757
- bottom: ctx => ctx.position !== 'static',
758
- left: ctx => ctx.position !== 'static',
759
- inset: ctx => ctx.position !== 'static',
760
- zIndex: ctx => ctx.position !== 'static',
931
+ top: (ctx) => ctx.position !== 'static',
932
+ right: (ctx) => ctx.position !== 'static',
933
+ bottom: (ctx) => ctx.position !== 'static',
934
+ left: (ctx) => ctx.position !== 'static',
935
+ inset: (ctx) => ctx.position !== 'static',
936
+ zIndex: (ctx) => ctx.position !== 'static',
761
937
 
762
938
  // Tag-based.
763
- objectFit: ctx => isMediaTag(ctx.tagName),
764
- objectPosition: ctx => isMediaTag(ctx.tagName),
765
- listStyle: ctx => isListTag(ctx.tagName),
766
- listStyleType: ctx => isListTag(ctx.tagName),
767
- listStylePosition: ctx => isListTag(ctx.tagName),
939
+ objectFit: (ctx) => isMediaTag(ctx.tagName),
940
+ objectPosition: (ctx) => isMediaTag(ctx.tagName),
941
+ listStyle: (ctx) => isListTag(ctx.tagName),
942
+ listStyleType: (ctx) => isListTag(ctx.tagName),
943
+ listStylePosition: (ctx) => isListTag(ctx.tagName),
768
944
 
769
945
  // Padding/margin shorthand-vs-longhand auto-toggle.
770
946
  // When ANY longhand is set, hide shorthand; otherwise hide longhands.
771
- padding: ctx => !ctx.hasPaddingLonghand,
772
- paddingTop: ctx => ctx.hasPaddingLonghand,
773
- paddingRight: ctx => ctx.hasPaddingLonghand,
774
- paddingBottom: ctx => ctx.hasPaddingLonghand,
775
- paddingLeft: ctx => ctx.hasPaddingLonghand,
776
- margin: ctx => !ctx.hasMarginLonghand,
777
- marginTop: ctx => ctx.hasMarginLonghand,
778
- marginRight: ctx => ctx.hasMarginLonghand,
779
- marginBottom: ctx => ctx.hasMarginLonghand,
780
- marginLeft: ctx => ctx.hasMarginLonghand,
947
+ padding: (ctx) => !ctx.hasPaddingLonghand,
948
+ paddingTop: (ctx) => ctx.hasPaddingLonghand,
949
+ paddingRight: (ctx) => ctx.hasPaddingLonghand,
950
+ paddingBottom: (ctx) => ctx.hasPaddingLonghand,
951
+ paddingLeft: (ctx) => ctx.hasPaddingLonghand,
952
+ margin: (ctx) => !ctx.hasMarginLonghand,
953
+ marginTop: (ctx) => ctx.hasMarginLonghand,
954
+ marginRight: (ctx) => ctx.hasMarginLonghand,
955
+ marginBottom: (ctx) => ctx.hasMarginLonghand,
956
+ marginLeft: (ctx) => ctx.hasMarginLonghand,
781
957
 
782
958
  // Background-image-only props — meaningless without a background image.
783
- backgroundPosition: ctx => ctx.hasBackgroundImage,
784
- backgroundSize: ctx => ctx.hasBackgroundImage,
785
- backgroundRepeat: ctx => ctx.hasBackgroundImage,
959
+ backgroundPosition: (ctx) => ctx.hasBackgroundImage,
960
+ backgroundSize: (ctx) => ctx.hasBackgroundImage,
961
+ backgroundRepeat: (ctx) => ctx.hasBackgroundImage,
786
962
  };
787
963
 
788
964
  /**
@@ -806,15 +982,15 @@ function matchesAbbreviation(property: string, input: string): boolean {
806
982
  let propertyIndex = 0;
807
983
 
808
984
  for (let inputIndex = 0; inputIndex < input.length; inputIndex++) {
809
- const inputChar = input[inputIndex];
985
+ const inputChar = input[inputIndex] ?? '';
810
986
  let found = false;
811
987
 
812
988
  // Search from current position to end of property for a match at a word boundary
813
989
  while (propertyIndex < property.length) {
814
- const propChar = property[propertyIndex];
990
+ const propChar = property[propertyIndex] ?? '';
815
991
  // Word boundary = first character OR capital letter
816
- const isWordBoundary = propertyIndex === 0 ||
817
- (propChar === propChar.toUpperCase() && propChar !== propChar.toLowerCase());
992
+ const isWordBoundary =
993
+ propertyIndex === 0 || (propChar === propChar.toUpperCase() && propChar !== propChar.toLowerCase());
818
994
 
819
995
  if (isWordBoundary && inputChar.toLowerCase() === propChar.toLowerCase()) {
820
996
  // Match found at word boundary
@@ -864,28 +1040,23 @@ export function filterCSSProperties(input: string): string[] {
864
1040
  }
865
1041
 
866
1042
  // First, try startsWith matching (exact prefix match)
867
- const startsWithMatches = CSS_PROPERTIES.filter(prop =>
868
- prop.toLowerCase().startsWith(normalizedInput.toLowerCase())
1043
+ const startsWithMatches = CSS_PROPERTIES.filter((prop) =>
1044
+ prop.toLowerCase().startsWith(normalizedInput.toLowerCase()),
869
1045
  );
870
1046
 
871
1047
  // Then, try abbreviation/fuzzy matching
872
- const abbreviationMatches = CSS_PROPERTIES.filter(prop =>
873
- matchesAbbreviation(prop, normalizedInput) &&
874
- !startsWithMatches.includes(prop) // Don't duplicate startsWith matches
1048
+ const abbreviationMatches = CSS_PROPERTIES.filter(
1049
+ (prop) => matchesAbbreviation(prop, normalizedInput) && !startsWithMatches.includes(prop), // Don't duplicate startsWith matches
875
1050
  );
876
1051
 
877
1052
  // Sort each group by popularity, then combine: exact matches first, then fuzzy matches
878
- const byPriority = (a: string, b: string) =>
879
- getPropertyPriority(a) - getPropertyPriority(b);
1053
+ const byPriority = (a: string, b: string) => getPropertyPriority(a) - getPropertyPriority(b);
880
1054
 
881
- const combined = [
882
- ...startsWithMatches.sort(byPriority),
883
- ...abbreviationMatches.sort(byPriority),
884
- ];
1055
+ const combined = [...startsWithMatches.sort(byPriority), ...abbreviationMatches.sort(byPriority)];
885
1056
 
886
1057
  const shortcut = PROPERTY_SHORTCUTS[normalizedInput.toLowerCase()];
887
1058
  if (shortcut) {
888
- return [shortcut, ...combined.filter(prop => prop !== shortcut)];
1059
+ return [shortcut, ...combined.filter((prop) => prop !== shortcut)];
889
1060
  }
890
1061
 
891
1062
  return combined;
@@ -920,9 +1091,7 @@ export function filterPropertyValues(propertyName: string, input: string): strin
920
1091
  }
921
1092
 
922
1093
  // Filter values that contain the input (substring match)
923
- return values.filter(value =>
924
- value.toLowerCase().includes(normalizedInput)
925
- );
1094
+ return values.filter((value) => value.toLowerCase().includes(normalizedInput));
926
1095
  }
927
1096
 
928
1097
  /**
@@ -940,13 +1109,28 @@ export function getPropertyType(propertyName: string): 'string' | 'select' | 'bo
940
1109
  * normalizer must NOT append `px` to bare numbers for these.
941
1110
  */
942
1111
  export const UNITLESS_PROPERTIES: ReadonlySet<string> = new Set([
943
- 'fontWeight', 'lineHeight',
944
- 'opacity', 'fillOpacity', 'strokeOpacity', 'stopOpacity',
945
- 'zIndex', 'order',
946
- 'flexGrow', 'flexShrink', 'flex',
947
- 'columnCount', 'columns', 'tabSize', 'orphans', 'widows',
948
- 'gridRow', 'gridColumn', 'gridRowStart', 'gridRowEnd',
949
- 'gridColumnStart', 'gridColumnEnd',
1112
+ 'fontWeight',
1113
+ 'lineHeight',
1114
+ 'opacity',
1115
+ 'fillOpacity',
1116
+ 'strokeOpacity',
1117
+ 'stopOpacity',
1118
+ 'zIndex',
1119
+ 'order',
1120
+ 'flexGrow',
1121
+ 'flexShrink',
1122
+ 'flex',
1123
+ 'columnCount',
1124
+ 'columns',
1125
+ 'tabSize',
1126
+ 'orphans',
1127
+ 'widows',
1128
+ 'gridRow',
1129
+ 'gridColumn',
1130
+ 'gridRowStart',
1131
+ 'gridRowEnd',
1132
+ 'gridColumnStart',
1133
+ 'gridColumnEnd',
950
1134
  'animationIterationCount',
951
1135
  'aspectRatio',
952
1136
  'scale',