meno-core 1.0.53 → 1.0.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. package/.claude/settings.local.json +1 -3
  2. package/bin/cli.ts +48 -57
  3. package/build-astro.ts +131 -113
  4. package/build-next.ts +109 -96
  5. package/build-static.test.ts +39 -10
  6. package/build-static.ts +120 -122
  7. package/dist/bin/cli.js +34 -38
  8. package/dist/bin/cli.js.map +2 -2
  9. package/dist/build-static.js +12 -11
  10. package/dist/chunks/chunk-2AR55GYH.js +42 -0
  11. package/dist/chunks/chunk-2AR55GYH.js.map +7 -0
  12. package/dist/chunks/{chunk-IGYR22T6.js → chunk-2FN4UOVO.js} +512 -239
  13. package/dist/chunks/chunk-2FN4UOVO.js.map +7 -0
  14. package/dist/chunks/chunk-3XER4E5W.js +168 -0
  15. package/dist/chunks/chunk-3XER4E5W.js.map +7 -0
  16. package/dist/chunks/{chunk-X754AHS5.js → chunk-5ETZFREW.js} +9 -12
  17. package/dist/chunks/chunk-5ETZFREW.js.map +7 -0
  18. package/dist/chunks/{chunk-2MHDV5BF.js → chunk-7E4IF5L7.js} +15 -21
  19. package/dist/chunks/chunk-7E4IF5L7.js.map +7 -0
  20. package/dist/chunks/{chunk-JGWFTO6P.js → chunk-7HWQUVTU.js} +1578 -1349
  21. package/dist/chunks/chunk-7HWQUVTU.js.map +7 -0
  22. package/dist/chunks/{chunk-O3NAGJP4.js → chunk-AE3QK5QW.js} +110 -21
  23. package/dist/chunks/chunk-AE3QK5QW.js.map +7 -0
  24. package/dist/chunks/{chunk-GZHGVVW3.js → chunk-F6KTJYGV.js} +7 -7
  25. package/dist/chunks/chunk-F6KTJYGV.js.map +7 -0
  26. package/dist/chunks/{chunk-WQFG7PAH.js → chunk-FZITJSSS.js} +2 -6
  27. package/dist/chunks/chunk-FZITJSSS.js.map +7 -0
  28. package/dist/chunks/{chunk-QB2LNO4W.js → chunk-GSYYA5GX.js} +2 -2
  29. package/dist/chunks/chunk-GSYYA5GX.js.map +7 -0
  30. package/dist/chunks/{chunk-YBLHKYFF.js → chunk-HIZMY3EP.js} +1 -1
  31. package/dist/chunks/chunk-HIZMY3EP.js.map +7 -0
  32. package/dist/chunks/{chunk-AZQYF6KE.js → chunk-I2WEGYA7.js} +41 -176
  33. package/dist/chunks/chunk-I2WEGYA7.js.map +7 -0
  34. package/dist/chunks/{chunk-I7YIGZXT.js → chunk-JNO3CNLJ.js} +6 -9
  35. package/dist/chunks/chunk-JNO3CNLJ.js.map +7 -0
  36. package/dist/chunks/{chunk-UB44F4Z2.js → chunk-NVRBTSQG.js} +2 -4
  37. package/dist/chunks/chunk-NVRBTSQG.js.map +7 -0
  38. package/dist/chunks/{chunk-JGP5A3Y5.js → chunk-Q4OBWKXG.js} +40 -33
  39. package/dist/chunks/chunk-Q4OBWKXG.js.map +7 -0
  40. package/dist/chunks/{chunk-R6XHAFBF.js → chunk-QTE32Y53.js} +250 -242
  41. package/dist/chunks/chunk-QTE32Y53.js.map +7 -0
  42. package/dist/chunks/{chunk-H3GJ4H2U.js → chunk-STDY3OVM.js} +214 -85
  43. package/dist/chunks/chunk-STDY3OVM.js.map +7 -0
  44. package/dist/chunks/configService-PRJZF7Y6.js +14 -0
  45. package/dist/chunks/{constants-STK2YBIW.js → constants-KIQEYMAM.js} +2 -2
  46. package/dist/chunks/{fs-JGINUXGL.js → fs-ZI5JEU7V.js} +2 -2
  47. package/dist/entries/server-router.js +14 -19
  48. package/dist/entries/server-router.js.map +2 -2
  49. package/dist/lib/client/index.js +638 -332
  50. package/dist/lib/client/index.js.map +2 -2
  51. package/dist/lib/server/index.js +177 -235
  52. package/dist/lib/server/index.js.map +2 -2
  53. package/dist/lib/shared/index.js +80 -44
  54. package/dist/lib/shared/index.js.map +2 -2
  55. package/dist/lib/shared/richtext/index.js +1 -1
  56. package/dist/lib/test-utils/index.js +38 -60
  57. package/dist/lib/test-utils/index.js.map +2 -2
  58. package/entries/client-router.tsx +10 -8
  59. package/entries/server-router.tsx +1 -7
  60. package/lib/client/ClientInitializer.ts +8 -8
  61. package/lib/client/ErrorBoundary.test.tsx +146 -143
  62. package/lib/client/ErrorBoundary.tsx +175 -127
  63. package/lib/client/componentRegistry.test.ts +96 -108
  64. package/lib/client/componentRegistry.ts +1 -2
  65. package/lib/client/contexts/ThemeContext.tsx +3 -2
  66. package/lib/client/core/ComponentBuilder.test.ts +513 -560
  67. package/lib/client/core/ComponentBuilder.ts +318 -146
  68. package/lib/client/core/ComponentRenderer.test.tsx +1 -2
  69. package/lib/client/core/ComponentRenderer.tsx +46 -33
  70. package/lib/client/core/builders/embedBuilder.ts +241 -53
  71. package/lib/client/core/builders/linkBuilder.ts +71 -44
  72. package/lib/client/core/builders/linkNodeBuilder.ts +78 -53
  73. package/lib/client/core/builders/listBuilder.ts +115 -86
  74. package/lib/client/core/builders/localeListBuilder.ts +95 -60
  75. package/lib/client/core/builders/types.ts +5 -5
  76. package/lib/client/core/cmsTemplateProcessor.ts +7 -7
  77. package/lib/client/elementRegistry.ts +3 -3
  78. package/lib/client/fontFamiliesService.test.ts +2 -10
  79. package/lib/client/fontFamiliesService.ts +3 -3
  80. package/lib/client/hmr/HMRManager.tsx +8 -0
  81. package/lib/client/hmrCssReload.ts +14 -8
  82. package/lib/client/hmrWebSocket.ts +9 -14
  83. package/lib/client/hooks/useColorVariables.test.ts +21 -21
  84. package/lib/client/hooks/useColorVariables.ts +12 -10
  85. package/lib/client/hooks/usePropertyAutocomplete.ts +3 -5
  86. package/lib/client/hooks/useVariables.ts +4 -4
  87. package/lib/client/hydration/HydrationUtils.test.ts +24 -25
  88. package/lib/client/hydration/HydrationUtils.ts +3 -4
  89. package/lib/client/i18nConfigService.test.ts +2 -7
  90. package/lib/client/i18nConfigService.ts +2 -2
  91. package/lib/client/meno-filter/MenoFilter.test.ts +19 -21
  92. package/lib/client/meno-filter/MenoFilter.ts +5 -9
  93. package/lib/client/meno-filter/bindings.ts +15 -40
  94. package/lib/client/meno-filter/init.ts +1 -1
  95. package/lib/client/meno-filter/renderer.ts +23 -29
  96. package/lib/client/meno-filter/script.generated.ts +1 -3
  97. package/lib/client/meno-filter/ui.ts +3 -5
  98. package/lib/client/meno-filter/updates.ts +15 -21
  99. package/lib/client/navigation.test.ts +159 -159
  100. package/lib/client/navigation.ts +0 -1
  101. package/lib/client/responsiveStyleResolver.test.ts +230 -228
  102. package/lib/client/responsiveStyleResolver.ts +13 -16
  103. package/lib/client/routing/RouteLoader.test.ts +23 -24
  104. package/lib/client/routing/RouteLoader.ts +22 -35
  105. package/lib/client/routing/Router.tsx +31 -3
  106. package/lib/client/scripts/ScriptExecutor.test.ts +157 -158
  107. package/lib/client/scripts/ScriptExecutor.ts +15 -33
  108. package/lib/client/services/PrefetchService.test.ts +2 -2
  109. package/lib/client/services/PrefetchService.ts +10 -24
  110. package/lib/client/styleProcessor.test.ts +9 -9
  111. package/lib/client/styleProcessor.ts +18 -15
  112. package/lib/client/styles/StyleInjector.test.ts +122 -115
  113. package/lib/client/styles/StyleInjector.ts +9 -6
  114. package/lib/client/styles/UtilityClassCollector.ts +19 -26
  115. package/lib/client/styles/cspNonce.test.ts +2 -5
  116. package/lib/client/templateEngine.test.ts +554 -482
  117. package/lib/client/templateEngine.ts +200 -64
  118. package/lib/client/theme.ts +0 -1
  119. package/lib/client/utils/toast.ts +0 -1
  120. package/lib/server/__integration__/api-routes.test.ts +8 -4
  121. package/lib/server/__integration__/cms-integration.test.ts +1 -4
  122. package/lib/server/__integration__/server-lifecycle.test.ts +2 -5
  123. package/lib/server/__integration__/ssr-rendering.test.ts +47 -37
  124. package/lib/server/__integration__/static-assets.test.ts +1 -1
  125. package/lib/server/__integration__/test-helpers.ts +84 -70
  126. package/lib/server/ab/generateFunctions.ts +12 -10
  127. package/lib/server/astro/cmsPageEmitter.ts +23 -38
  128. package/lib/server/astro/componentEmitter.ts +25 -36
  129. package/lib/server/astro/cssCollector.ts +10 -26
  130. package/lib/server/astro/nodeToAstro.test.ts +1750 -30
  131. package/lib/server/astro/nodeToAstro.ts +198 -187
  132. package/lib/server/astro/normalizeOrphanTemplateProps.test.ts +105 -109
  133. package/lib/server/astro/normalizeOrphanTemplateProps.ts +4 -12
  134. package/lib/server/astro/pageEmitter.ts +9 -13
  135. package/lib/server/astro/tailwindMapper.test.ts +10 -37
  136. package/lib/server/astro/tailwindMapper.ts +33 -40
  137. package/lib/server/astro/templateTransformer.ts +14 -17
  138. package/lib/server/createServer.ts +5 -17
  139. package/lib/server/cssGenerator.test.ts +35 -44
  140. package/lib/server/cssGenerator.ts +6 -17
  141. package/lib/server/fileWatcher.test.ts +124 -10
  142. package/lib/server/fileWatcher.ts +124 -118
  143. package/lib/server/index.ts +7 -1
  144. package/lib/server/jsonLoader.test.ts +39 -2
  145. package/lib/server/jsonLoader.ts +33 -31
  146. package/lib/server/middleware/cors.test.ts +20 -20
  147. package/lib/server/middleware/cors.ts +28 -4
  148. package/lib/server/middleware/errorHandler.test.ts +5 -3
  149. package/lib/server/middleware/errorHandler.ts +3 -8
  150. package/lib/server/middleware/index.ts +0 -1
  151. package/lib/server/middleware/logger.test.ts +7 -5
  152. package/lib/server/middleware/logger.ts +10 -22
  153. package/lib/server/pageCache.test.ts +76 -77
  154. package/lib/server/pageCache.ts +0 -1
  155. package/lib/server/projectContext.ts +4 -3
  156. package/lib/server/providers/fileSystemCMSProvider.test.ts +124 -95
  157. package/lib/server/providers/fileSystemCMSProvider.ts +35 -20
  158. package/lib/server/providers/fileSystemPageProvider.test.ts +84 -0
  159. package/lib/server/providers/fileSystemPageProvider.ts +31 -12
  160. package/lib/server/routes/api/cms.test.ts +26 -14
  161. package/lib/server/routes/api/cms.ts +9 -14
  162. package/lib/server/routes/api/components.ts +30 -34
  163. package/lib/server/routes/api/config.ts +0 -1
  164. package/lib/server/routes/api/core-routes.ts +47 -74
  165. package/lib/server/routes/api/functions.ts +8 -16
  166. package/lib/server/routes/api/index.ts +3 -6
  167. package/lib/server/routes/api/pages.ts +8 -11
  168. package/lib/server/routes/api/shared.test.ts +1 -1
  169. package/lib/server/routes/api/shared.ts +12 -9
  170. package/lib/server/routes/api/variables.test.ts +1 -3
  171. package/lib/server/routes/api/variables.ts +1 -1
  172. package/lib/server/routes/index.ts +23 -26
  173. package/lib/server/routes/pages.ts +34 -29
  174. package/lib/server/routes/static.ts +16 -4
  175. package/lib/server/runtime/bundler.ts +47 -32
  176. package/lib/server/runtime/fs.ts +3 -13
  177. package/lib/server/runtime/httpServer.ts +5 -9
  178. package/lib/server/services/ColorService.ts +32 -27
  179. package/lib/server/services/EnumService.test.ts +2 -6
  180. package/lib/server/services/EnumService.ts +7 -2
  181. package/lib/server/services/VariableService.test.ts +1 -5
  182. package/lib/server/services/VariableService.ts +6 -1
  183. package/lib/server/services/cmsService.test.ts +116 -78
  184. package/lib/server/services/cmsService.ts +24 -54
  185. package/lib/server/services/componentService.test.ts +122 -36
  186. package/lib/server/services/componentService.ts +54 -38
  187. package/lib/server/services/configService.test.ts +9 -31
  188. package/lib/server/services/configService.ts +20 -27
  189. package/lib/server/services/fileWatcherService.ts +40 -6
  190. package/lib/server/services/index.ts +0 -1
  191. package/lib/server/services/pageService.test.ts +1 -3
  192. package/lib/server/services/pageService.ts +14 -13
  193. package/lib/server/ssr/attributeBuilder.ts +16 -6
  194. package/lib/server/ssr/buildErrorOverlay.ts +11 -12
  195. package/lib/server/ssr/clientDataInjector.ts +7 -21
  196. package/lib/server/ssr/cmsSSRProcessor.ts +3 -6
  197. package/lib/server/ssr/cssCollector.ts +1 -1
  198. package/lib/server/ssr/errorOverlay.test.ts +1 -1
  199. package/lib/server/ssr/errorOverlay.ts +3 -9
  200. package/lib/server/ssr/htmlGenerator.nonce.test.ts +3 -9
  201. package/lib/server/ssr/htmlGenerator.test.ts +120 -43
  202. package/lib/server/ssr/htmlGenerator.ts +120 -85
  203. package/lib/server/ssr/imageMetadata.test.ts +3 -1
  204. package/lib/server/ssr/imageMetadata.ts +25 -19
  205. package/lib/server/ssr/jsCollector.test.ts +3 -13
  206. package/lib/server/ssr/jsCollector.ts +3 -8
  207. package/lib/server/ssr/liveReloadIntegration.test.ts +69 -28
  208. package/lib/server/ssr/metaTagGenerator.ts +2 -2
  209. package/lib/server/ssr/ssrRenderer.branches.test.ts +1103 -0
  210. package/lib/server/ssr/ssrRenderer.test.ts +196 -246
  211. package/lib/server/ssr/ssrRenderer.ts +609 -225
  212. package/lib/server/ssrRenderer.test.ts +1044 -950
  213. package/lib/server/utils/jsonLineMapper.test.ts +28 -28
  214. package/lib/server/utils/jsonLineMapper.ts +1 -1
  215. package/lib/server/validateStyleCoverage.ts +18 -20
  216. package/lib/server/webflow/buildWebflow.ts +41 -53
  217. package/lib/server/webflow/nodeToWebflow.test.ts +150 -218
  218. package/lib/server/webflow/nodeToWebflow.ts +195 -258
  219. package/lib/server/webflow/styleMapper.test.ts +15 -56
  220. package/lib/server/webflow/styleMapper.ts +33 -41
  221. package/lib/server/webflow/types.ts +1 -8
  222. package/lib/server/websocketManager.ts +16 -19
  223. package/lib/shared/attributeNodeUtils.test.ts +15 -15
  224. package/lib/shared/attributeNodeUtils.ts +5 -12
  225. package/lib/shared/breakpoints.ts +4 -11
  226. package/lib/shared/cmsQueryParser.test.ts +50 -42
  227. package/lib/shared/cmsQueryParser.ts +49 -31
  228. package/lib/shared/colorVariableUtils.test.ts +5 -5
  229. package/lib/shared/colorVariableUtils.ts +3 -8
  230. package/lib/shared/componentRefs.ts +1 -5
  231. package/lib/shared/constants.test.ts +3 -3
  232. package/lib/shared/constants.ts +4 -8
  233. package/lib/shared/cssGeneration.test.ts +262 -144
  234. package/lib/shared/cssGeneration.ts +189 -516
  235. package/lib/shared/cssNamedColors.ts +152 -30
  236. package/lib/shared/cssProperties.test.ts +5 -6
  237. package/lib/shared/cssProperties.ts +296 -112
  238. package/lib/shared/elementClassName.test.ts +109 -109
  239. package/lib/shared/elementClassName.ts +1 -1
  240. package/lib/shared/elementUtils.ts +12 -16
  241. package/lib/shared/errorLogger.ts +2 -10
  242. package/lib/shared/errors.test.ts +2 -13
  243. package/lib/shared/errors.ts +2 -8
  244. package/lib/shared/expressionEvaluator.test.ts +119 -0
  245. package/lib/shared/expressionEvaluator.ts +43 -24
  246. package/lib/shared/fontLoader.test.ts +19 -5
  247. package/lib/shared/friendlyError.ts +2 -3
  248. package/lib/shared/gradientUtils.test.ts +1 -5
  249. package/lib/shared/gradientUtils.ts +2 -6
  250. package/lib/shared/hrefRefs.ts +2 -10
  251. package/lib/shared/i18n.test.ts +1 -1
  252. package/lib/shared/i18n.ts +13 -34
  253. package/lib/shared/index.ts +4 -0
  254. package/lib/shared/inlineSvgStyleRules.ts +2 -4
  255. package/lib/shared/interactiveStyleMappings.test.ts +11 -33
  256. package/lib/shared/interactiveStyleMappings.ts +9 -16
  257. package/lib/shared/interactiveStyles.test.ts +165 -188
  258. package/lib/shared/interfaces/contentProvider.ts +1 -1
  259. package/lib/shared/itemTemplateUtils.test.ts +6 -12
  260. package/lib/shared/itemTemplateUtils.ts +19 -35
  261. package/lib/shared/jsonRepair.ts +8 -2
  262. package/lib/shared/libraryLoader.test.ts +15 -49
  263. package/lib/shared/libraryLoader.ts +7 -22
  264. package/lib/shared/netlifyLocale404.test.ts +179 -0
  265. package/lib/shared/netlifyLocale404.ts +110 -0
  266. package/lib/shared/nodeUtils.test.ts +24 -16
  267. package/lib/shared/nodeUtils.ts +49 -19
  268. package/lib/shared/pathArrayUtils.test.ts +1 -2
  269. package/lib/shared/pathArrayUtils.ts +1 -1
  270. package/lib/shared/pathSecurity.ts +1 -1
  271. package/lib/shared/pathUtils.test.ts +4 -6
  272. package/lib/shared/pathUtils.ts +42 -48
  273. package/lib/shared/paths/Path.test.ts +2 -2
  274. package/lib/shared/paths/Path.ts +0 -1
  275. package/lib/shared/paths/PathConverter.test.ts +1 -1
  276. package/lib/shared/paths/PathConverter.ts +14 -17
  277. package/lib/shared/paths/PathUtils.ts +9 -10
  278. package/lib/shared/paths/PathValidator.test.ts +2 -15
  279. package/lib/shared/paths/PathValidator.ts +11 -9
  280. package/lib/shared/paths/index.ts +1 -2
  281. package/lib/shared/propResolver.test.ts +240 -244
  282. package/lib/shared/propResolver.ts +14 -25
  283. package/lib/shared/pxToRem.test.ts +7 -6
  284. package/lib/shared/pxToRem.ts +2 -5
  285. package/lib/shared/registry/BaseNodeTypeRegistry.test.ts +9 -5
  286. package/lib/shared/registry/ClientRegistry.ts +0 -1
  287. package/lib/shared/registry/ComponentRegistry.test.ts +43 -29
  288. package/lib/shared/registry/ComponentRegistry.ts +9 -11
  289. package/lib/shared/registry/NodeTypeDefinition.ts +15 -8
  290. package/lib/shared/registry/RegistryManager.ts +1 -2
  291. package/lib/shared/registry/SSRRegistry.ts +0 -1
  292. package/lib/shared/registry/createNodeType.ts +7 -9
  293. package/lib/shared/registry/defineNodeType.ts +2 -6
  294. package/lib/shared/registry/index.ts +0 -1
  295. package/lib/shared/registry/nodeTypes/ComponentInstanceNodeType.ts +14 -15
  296. package/lib/shared/registry/nodeTypes/EmbedNodeType.ts +18 -11
  297. package/lib/shared/registry/nodeTypes/HtmlNodeType.ts +47 -18
  298. package/lib/shared/registry/nodeTypes/LinkNodeType.ts +21 -19
  299. package/lib/shared/registry/nodeTypes/ListNodeType.ts +78 -74
  300. package/lib/shared/registry/nodeTypes/LocaleListNodeType.ts +27 -21
  301. package/lib/shared/registry/nodeTypes/SlotMarkerType.ts +6 -7
  302. package/lib/shared/registry/nodeTypes/index.ts +10 -2
  303. package/lib/shared/responsiveScaling.test.ts +15 -31
  304. package/lib/shared/responsiveScaling.ts +55 -37
  305. package/lib/shared/responsiveStyleUtils.ts +11 -13
  306. package/lib/shared/richtext/htmlToTiptap.test.ts +23 -14
  307. package/lib/shared/richtext/htmlToTiptap.ts +1 -3
  308. package/lib/shared/richtext/tiptapToHtml.test.ts +5 -6
  309. package/lib/shared/richtext/types.ts +1 -8
  310. package/lib/shared/slugTranslator.test.ts +13 -13
  311. package/lib/shared/slugTranslator.ts +12 -16
  312. package/lib/shared/slugify.ts +9 -15
  313. package/lib/shared/styleNodeUtils.test.ts +8 -8
  314. package/lib/shared/styleNodeUtils.ts +5 -10
  315. package/lib/shared/styleUtils.test.ts +87 -61
  316. package/lib/shared/styleUtils.ts +5 -6
  317. package/lib/shared/themeDefaults.test.ts +11 -11
  318. package/lib/shared/themeDefaults.ts +3 -4
  319. package/lib/shared/tree/PathBuilder.test.ts +62 -138
  320. package/lib/shared/tree/PathBuilder.ts +49 -39
  321. package/lib/shared/treePathUtils.test.ts +2 -10
  322. package/lib/shared/treePathUtils.ts +54 -59
  323. package/lib/shared/types/api.ts +1 -2
  324. package/lib/shared/types/cms.ts +25 -21
  325. package/lib/shared/types/comment.ts +49 -16
  326. package/lib/shared/types/components.ts +27 -25
  327. package/lib/shared/types/errors.test.ts +1 -6
  328. package/lib/shared/types/errors.ts +3 -7
  329. package/lib/shared/types/experiments.ts +28 -28
  330. package/lib/shared/types/index.ts +2 -2
  331. package/lib/shared/types/styles.ts +0 -1
  332. package/lib/shared/types/variables.test.ts +4 -13
  333. package/lib/shared/types/variables.ts +48 -27
  334. package/lib/shared/types.ts +1 -2
  335. package/lib/shared/utilityClassConfig.ts +648 -321
  336. package/lib/shared/utilityClassMapper.test.ts +203 -92
  337. package/lib/shared/utilityClassMapper.ts +188 -246
  338. package/lib/shared/utilityClassNames.ts +326 -0
  339. package/lib/shared/utils.test.ts +2 -10
  340. package/lib/shared/utils.ts +19 -10
  341. package/lib/shared/validation/cmsValidators.ts +2 -1
  342. package/lib/shared/validation/commentValidators.test.ts +53 -0
  343. package/lib/shared/validation/commentValidators.ts +12 -1
  344. package/lib/shared/validation/propValidator.test.ts +18 -20
  345. package/lib/shared/validation/propValidator.ts +12 -17
  346. package/lib/shared/validation/schemas.test.ts +24 -33
  347. package/lib/shared/validation/schemas.ts +469 -344
  348. package/lib/shared/validation/validators.test.ts +1 -6
  349. package/lib/shared/validation/validators.ts +89 -68
  350. package/lib/shared/viewportUnits.integration.test.ts +14 -10
  351. package/lib/shared/viewportUnits.test.ts +11 -23
  352. package/lib/test-utils/dom-setup.ts +1 -1
  353. package/lib/test-utils/factories/ConsoleMockFactory.ts +3 -7
  354. package/lib/test-utils/factories/DomMockFactory.ts +7 -19
  355. package/lib/test-utils/factories/EventMockFactory.ts +7 -13
  356. package/lib/test-utils/factories/FetchMockFactory.ts +39 -57
  357. package/lib/test-utils/factories/ServerMockFactory.ts +5 -9
  358. package/lib/test-utils/factories/StoreMockFactory.ts +14 -25
  359. package/lib/test-utils/fixtures.ts +45 -45
  360. package/lib/test-utils/helpers/asyncHelpers.test.ts +15 -18
  361. package/lib/test-utils/helpers/asyncHelpers.ts +11 -20
  362. package/lib/test-utils/helpers.ts +1 -5
  363. package/lib/test-utils/index.ts +0 -4
  364. package/lib/test-utils/mockFactories.ts +12 -18
  365. package/lib/test-utils/mocks.ts +4 -2
  366. package/package.json +1 -1
  367. package/scripts/build-meno-filter.ts +1 -4
  368. package/vite.config.ts +4 -4
  369. package/dist/chunks/chunk-2MHDV5BF.js.map +0 -7
  370. package/dist/chunks/chunk-AZQYF6KE.js.map +0 -7
  371. package/dist/chunks/chunk-GZHGVVW3.js.map +0 -7
  372. package/dist/chunks/chunk-H3GJ4H2U.js.map +0 -7
  373. package/dist/chunks/chunk-I7YIGZXT.js.map +0 -7
  374. package/dist/chunks/chunk-IGYR22T6.js.map +0 -7
  375. package/dist/chunks/chunk-JGP5A3Y5.js.map +0 -7
  376. package/dist/chunks/chunk-JGWFTO6P.js.map +0 -7
  377. package/dist/chunks/chunk-O3NAGJP4.js.map +0 -7
  378. package/dist/chunks/chunk-QB2LNO4W.js.map +0 -7
  379. package/dist/chunks/chunk-R6XHAFBF.js.map +0 -7
  380. package/dist/chunks/chunk-UB44F4Z2.js.map +0 -7
  381. package/dist/chunks/chunk-WQFG7PAH.js.map +0 -7
  382. package/dist/chunks/chunk-X754AHS5.js.map +0 -7
  383. package/dist/chunks/chunk-YBLHKYFF.js.map +0 -7
  384. package/dist/chunks/configService-R3OGU2UD.js +0 -13
  385. /package/dist/chunks/{configService-R3OGU2UD.js.map → configService-PRJZF7Y6.js.map} +0 -0
  386. /package/dist/chunks/{constants-STK2YBIW.js.map → constants-KIQEYMAM.js.map} +0 -0
  387. /package/dist/chunks/{fs-JGINUXGL.js.map → fs-ZI5JEU7V.js.map} +0 -0
@@ -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
  /**
@@ -813,8 +989,8 @@ function matchesAbbreviation(property: string, input: string): boolean {
813
989
  while (propertyIndex < property.length) {
814
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',