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.
- package/.claude/settings.local.json +1 -3
- package/bin/cli.ts +66 -261
- package/build-astro.ts +150 -128
- package/dist/bin/cli.js +42 -185
- package/dist/bin/cli.js.map +2 -2
- package/dist/chunks/chunk-2AR55GYH.js +42 -0
- package/dist/chunks/chunk-2AR55GYH.js.map +7 -0
- package/dist/chunks/{chunk-JGWFTO6P.js → chunk-2IIQK7T3.js} +2624 -1389
- package/dist/chunks/chunk-2IIQK7T3.js.map +7 -0
- package/dist/chunks/chunk-4ZRU52J2.js +169 -0
- package/dist/chunks/chunk-4ZRU52J2.js.map +7 -0
- package/dist/chunks/{chunk-UB44F4Z2.js → chunk-5X4HCN7J.js} +5 -7
- package/dist/chunks/chunk-5X4HCN7J.js.map +7 -0
- package/dist/chunks/{chunk-WQFG7PAH.js → chunk-7CCVOL5M.js} +15 -19
- package/dist/chunks/chunk-7CCVOL5M.js.map +7 -0
- package/dist/chunks/{chunk-YBLHKYFF.js → chunk-AR7LHIFY.js} +8 -2
- package/dist/chunks/chunk-AR7LHIFY.js.map +7 -0
- package/dist/chunks/{chunk-O3NAGJP4.js → chunk-NUP7H7D3.js} +135 -41
- package/dist/chunks/chunk-NUP7H7D3.js.map +7 -0
- package/dist/chunks/{chunk-X754AHS5.js → chunk-QWTQZHG3.js} +194 -90
- package/dist/chunks/chunk-QWTQZHG3.js.map +7 -0
- package/dist/chunks/{chunk-H3GJ4H2U.js → chunk-XTKNX4FW.js} +216 -87
- package/dist/chunks/chunk-XTKNX4FW.js.map +7 -0
- package/dist/chunks/{fs-JGINUXGL.js → fs-G3ANWEFP.js} +2 -2
- package/dist/lib/client/index.js +1003 -475
- package/dist/lib/client/index.js.map +3 -3
- package/dist/lib/server/index.js +14393 -6371
- package/dist/lib/server/index.js.map +4 -4
- package/dist/lib/shared/index.js +342 -101
- package/dist/lib/shared/index.js.map +4 -4
- package/dist/lib/shared/richtext/index.js +1 -1
- package/dist/lib/test-utils/index.js +64 -80
- package/dist/lib/test-utils/index.js.map +2 -2
- package/entries/client-router.tsx +10 -8
- package/lib/client/ClientInitializer.ts +8 -8
- package/lib/client/ErrorBoundary.test.tsx +246 -186
- package/lib/client/ErrorBoundary.tsx +183 -132
- package/lib/client/componentRegistry.test.ts +96 -108
- package/lib/client/componentRegistry.ts +1 -3
- package/lib/client/contexts/ThemeContext.tsx +3 -2
- package/lib/client/core/ComponentBuilder.test.ts +663 -560
- package/lib/client/core/ComponentBuilder.ts +427 -155
- package/lib/client/core/ComponentRenderer.test.tsx +2 -4
- package/lib/client/core/ComponentRenderer.tsx +46 -33
- package/lib/client/core/builders/embedBuilder.ts +242 -54
- package/lib/client/core/builders/linkBuilder.ts +72 -45
- package/lib/client/core/builders/linkNodeBuilder.ts +79 -54
- package/lib/client/core/builders/listBuilder.ts +155 -89
- package/lib/client/core/builders/localeListBuilder.ts +97 -62
- package/lib/client/core/builders/types.ts +5 -5
- package/lib/client/core/cmsTemplateProcessor.ts +8 -9
- package/lib/client/elementRegistry.ts +3 -3
- package/lib/client/fontFamiliesService.test.ts +2 -10
- package/lib/client/fontFamiliesService.ts +3 -3
- package/lib/client/hmr/HMRManager.tsx +47 -30
- package/lib/client/hmrCssReload.ts +49 -14
- package/lib/client/hmrWebSocket.ts +14 -19
- package/lib/client/hooks/useColorVariables.test.ts +21 -21
- package/lib/client/hooks/useColorVariables.ts +23 -18
- package/lib/client/hooks/usePropertyAutocomplete.ts +4 -6
- package/lib/client/hooks/useVariables.ts +6 -4
- package/lib/client/hydration/HydrationUtils.test.ts +24 -25
- package/lib/client/hydration/HydrationUtils.ts +3 -4
- package/lib/client/i18nConfigService.test.ts +2 -7
- package/lib/client/i18nConfigService.ts +2 -2
- package/lib/client/meno-filter/MenoFilter.test.ts +47 -49
- package/lib/client/meno-filter/MenoFilter.ts +14 -15
- package/lib/client/meno-filter/bindings.ts +18 -43
- package/lib/client/meno-filter/init.ts +4 -4
- package/lib/client/meno-filter/renderer.ts +30 -32
- package/lib/client/meno-filter/script.generated.ts +1 -3
- package/lib/client/meno-filter/ui.ts +4 -6
- package/lib/client/meno-filter/updates.ts +18 -23
- package/lib/client/meno-filter/utils.ts +1 -1
- package/lib/client/navigation.test.ts +174 -178
- package/lib/client/navigation.ts +0 -1
- package/lib/client/responsiveStyleResolver.knownTokens.test.ts +71 -0
- package/lib/client/responsiveStyleResolver.test.ts +234 -232
- package/lib/client/responsiveStyleResolver.ts +74 -20
- package/lib/client/routing/RouteLoader.test.ts +24 -25
- package/lib/client/routing/RouteLoader.ts +27 -35
- package/lib/client/routing/Router.tsx +210 -153
- package/lib/client/scripts/ScriptExecutor.test.ts +157 -158
- package/lib/client/scripts/ScriptExecutor.ts +18 -36
- package/lib/client/services/PrefetchService.test.ts +3 -3
- package/lib/client/services/PrefetchService.ts +23 -29
- package/lib/client/styleProcessor.test.ts +9 -9
- package/lib/client/styleProcessor.ts +24 -15
- package/lib/client/styles/StyleInjector.test.ts +122 -115
- package/lib/client/styles/StyleInjector.ts +10 -7
- package/lib/client/styles/UtilityClassCollector.ts +62 -28
- package/lib/client/styles/cspNonce.test.ts +2 -5
- package/lib/client/templateEngine.test.ts +554 -488
- package/lib/client/templateEngine.ts +203 -73
- package/lib/client/theme.test.ts +1 -1
- package/lib/client/theme.ts +0 -1
- package/lib/client/utils/toast.ts +0 -1
- package/lib/server/__integration__/api-routes.test.ts +8 -4
- package/lib/server/__integration__/cms-integration.test.ts +1 -4
- package/lib/server/__integration__/server-lifecycle.test.ts +4 -5
- package/lib/server/__integration__/ssr-rendering.test.ts +47 -37
- package/lib/server/__integration__/static-assets.test.ts +3 -3
- package/lib/server/__integration__/test-helpers.ts +87 -74
- package/lib/server/ab/generateFunctions.ts +12 -10
- package/lib/server/astro/cmsPageEmitter.ts +26 -42
- package/lib/server/astro/componentEmitter.ts +35 -43
- package/lib/server/astro/cssCollector.ts +10 -26
- package/lib/server/astro/nodeToAstro.test.ts +1754 -34
- package/lib/server/astro/nodeToAstro.ts +232 -216
- package/lib/server/astro/normalizeOrphanTemplateProps.test.ts +115 -119
- package/lib/server/astro/normalizeOrphanTemplateProps.ts +11 -18
- package/lib/server/astro/pageEmitter.ts +9 -13
- package/lib/server/astro/tailwindMapper.test.ts +10 -37
- package/lib/server/astro/tailwindMapper.ts +33 -40
- package/lib/server/astro/templateTransformer.ts +17 -20
- package/lib/server/createServer.ts +7 -19
- package/lib/server/cssGenerator.test.ts +35 -44
- package/lib/server/cssGenerator.ts +8 -19
- package/lib/server/fileWatcher.test.ts +164 -13
- package/lib/server/fileWatcher.ts +209 -124
- package/lib/server/index.ts +14 -17
- package/lib/server/jsonLoader.test.ts +39 -2
- package/lib/server/jsonLoader.ts +39 -34
- package/lib/server/middleware/cors.test.ts +21 -21
- package/lib/server/middleware/cors.ts +28 -4
- package/lib/server/middleware/errorHandler.test.ts +7 -5
- package/lib/server/middleware/errorHandler.ts +3 -8
- package/lib/server/middleware/index.ts +0 -1
- package/lib/server/middleware/logger.test.ts +10 -8
- package/lib/server/middleware/logger.ts +17 -29
- package/lib/server/migrateTemplates.ts +3 -3
- package/lib/server/pageCache.test.ts +76 -77
- package/lib/server/pageCache.ts +0 -1
- package/lib/server/projectContext.ts +5 -4
- package/lib/server/providers/fileSystemCMSProvider.test.ts +142 -99
- package/lib/server/providers/fileSystemCMSProvider.ts +62 -38
- package/lib/server/routes/api/cms.test.ts +26 -14
- package/lib/server/routes/api/cms.ts +9 -14
- package/lib/server/routes/api/colors.test.ts +2 -2
- package/lib/server/routes/api/components.ts +31 -35
- package/lib/server/routes/api/config.ts +3 -4
- package/lib/server/routes/api/core-routes.ts +49 -76
- package/lib/server/routes/api/enums.test.ts +2 -2
- package/lib/server/routes/api/functions.ts +9 -17
- package/lib/server/routes/api/index.ts +3 -6
- package/lib/server/routes/api/pages.ts +8 -11
- package/lib/server/routes/api/shared.test.ts +1 -1
- package/lib/server/routes/api/shared.ts +12 -9
- package/lib/server/routes/api/variables.test.ts +3 -5
- package/lib/server/routes/api/variables.ts +1 -1
- package/lib/server/routes/index.ts +25 -28
- package/lib/server/routes/pages.ts +35 -31
- package/lib/server/routes/static.ts +17 -6
- package/lib/server/runtime/bundler.ts +98 -61
- package/lib/server/runtime/fs.ts +16 -26
- package/lib/server/runtime/httpServer.ts +8 -12
- package/lib/server/services/ColorService.test.ts +3 -3
- package/lib/server/services/ColorService.ts +37 -29
- package/lib/server/services/EnumService.test.ts +4 -8
- package/lib/server/services/EnumService.ts +11 -3
- package/lib/server/services/VariableService.test.ts +8 -12
- package/lib/server/services/VariableService.ts +11 -3
- package/lib/server/services/cmsService.test.ts +158 -120
- package/lib/server/services/cmsService.ts +36 -146
- package/lib/server/services/componentService.test.ts +125 -45
- package/lib/server/services/componentService.ts +70 -46
- package/lib/server/services/configService.test.ts +22 -45
- package/lib/server/services/configService.ts +50 -27
- package/lib/server/services/fileWatcherService.ts +42 -8
- package/lib/server/services/index.ts +0 -1
- package/lib/server/services/pageService.test.ts +8 -10
- package/lib/server/services/pageService.ts +32 -18
- package/lib/server/ssr/attributeBuilder.ts +18 -8
- package/lib/server/ssr/buildErrorOverlay.ts +11 -12
- package/lib/server/ssr/clientDataInjector.ts +7 -21
- package/lib/server/ssr/cmsSSRProcessor.ts +4 -8
- package/lib/server/ssr/cssCollector.ts +1 -1
- package/lib/server/ssr/errorOverlay.test.ts +1 -1
- package/lib/server/ssr/errorOverlay.ts +3 -9
- package/lib/server/ssr/htmlGenerator.nonce.test.ts +9 -14
- package/lib/server/ssr/htmlGenerator.test.ts +120 -44
- package/lib/server/ssr/htmlGenerator.ts +126 -91
- package/lib/server/ssr/imageMetadata.test.ts +3 -1
- package/lib/server/ssr/imageMetadata.ts +27 -21
- package/lib/server/ssr/jsCollector.test.ts +8 -18
- package/lib/server/ssr/jsCollector.ts +3 -8
- package/lib/server/ssr/liveReloadIntegration.test.ts +76 -36
- package/lib/server/ssr/metaTagGenerator.ts +2 -2
- package/lib/server/ssr/ssrRenderer.branches.test.ts +1103 -0
- package/lib/server/ssr/ssrRenderer.test.ts +316 -256
- package/lib/server/ssr/ssrRenderer.ts +795 -243
- package/lib/server/ssrRenderer.test.ts +1048 -954
- package/lib/server/utils/jsonLineMapper.test.ts +28 -28
- package/lib/server/utils/jsonLineMapper.ts +7 -7
- package/lib/server/validateStyleCoverage.ts +18 -21
- package/lib/server/websocketManager.ts +28 -19
- package/lib/shared/attributeNodeUtils.test.ts +15 -15
- package/lib/shared/attributeNodeUtils.ts +5 -12
- package/lib/shared/breakpoints.test.ts +5 -5
- package/lib/shared/breakpoints.ts +4 -11
- package/lib/shared/cmsQuery.test.ts +81 -0
- package/lib/shared/cmsQuery.ts +92 -0
- package/lib/shared/cmsQueryParser.test.ts +50 -42
- package/lib/shared/cmsQueryParser.ts +60 -38
- package/lib/shared/colorConversions.ts +9 -9
- package/lib/shared/colorVariableUtils.test.ts +27 -5
- package/lib/shared/colorVariableUtils.ts +21 -12
- package/lib/shared/componentRefs.ts +1 -5
- package/lib/shared/constants.test.ts +3 -3
- package/lib/shared/constants.ts +8 -8
- package/lib/shared/cssGeneration.test.ts +285 -144
- package/lib/shared/cssGeneration.ts +217 -531
- package/lib/shared/cssNamedColors.ts +152 -30
- package/lib/shared/cssProperties.test.ts +69 -70
- package/lib/shared/cssProperties.ts +298 -114
- package/lib/shared/elementClassName.test.ts +109 -109
- package/lib/shared/elementClassName.ts +3 -3
- package/lib/shared/elementUtils.ts +12 -16
- package/lib/shared/errorLogger.test.ts +12 -12
- package/lib/shared/errorLogger.ts +2 -10
- package/lib/shared/errors.test.ts +2 -13
- package/lib/shared/errors.ts +2 -8
- package/lib/shared/expressionEvaluator.test.ts +145 -0
- package/lib/shared/expressionEvaluator.ts +52 -24
- package/lib/shared/fontLoader.test.ts +32 -18
- package/lib/shared/fontLoader.ts +2 -2
- package/lib/shared/friendlyError.ts +2 -3
- package/lib/shared/gradientUtils.test.ts +3 -7
- package/lib/shared/gradientUtils.ts +17 -14
- package/lib/shared/hrefRefs.test.ts +2 -2
- package/lib/shared/hrefRefs.ts +2 -10
- package/lib/shared/i18n.test.ts +4 -4
- package/lib/shared/i18n.ts +18 -38
- package/lib/shared/index.ts +27 -0
- package/lib/shared/inlineSvgStyleRules.ts +14 -13
- package/lib/shared/interactiveStyleMappings.test.ts +32 -54
- package/lib/shared/interactiveStyleMappings.ts +11 -24
- package/lib/shared/interactiveStyles.test.ts +165 -188
- package/lib/shared/interfaces/contentProvider.ts +1 -1
- package/lib/shared/itemTemplateUtils.test.ts +11 -17
- package/lib/shared/itemTemplateUtils.ts +27 -39
- package/lib/shared/jsonRepair.ts +16 -10
- package/lib/shared/libraryLoader.test.ts +21 -55
- package/lib/shared/libraryLoader.ts +7 -22
- package/lib/shared/linkUtils.ts +1 -1
- package/lib/shared/logger.test.ts +66 -0
- package/lib/shared/logger.ts +94 -0
- package/lib/shared/markdown.ts +25 -0
- package/lib/shared/netlifyLocale404.test.ts +179 -0
- package/lib/shared/netlifyLocale404.ts +110 -0
- package/lib/shared/nodeUtils.test.ts +28 -16
- package/lib/shared/nodeUtils.ts +76 -23
- package/lib/shared/pathArrayUtils.test.ts +1 -2
- package/lib/shared/pathArrayUtils.ts +1 -1
- package/lib/shared/pathSecurity.ts +2 -2
- package/lib/shared/pathUtils.test.ts +4 -6
- package/lib/shared/pathUtils.ts +42 -49
- package/lib/shared/paths/Path.test.ts +2 -2
- package/lib/shared/paths/Path.ts +0 -1
- package/lib/shared/paths/PathConverter.test.ts +1 -1
- package/lib/shared/paths/PathConverter.ts +17 -20
- package/lib/shared/paths/PathUtils.ts +13 -13
- package/lib/shared/paths/PathValidator.test.ts +2 -15
- package/lib/shared/paths/PathValidator.ts +12 -10
- package/lib/shared/paths/index.ts +1 -2
- package/lib/shared/permissions.test.ts +168 -0
- package/lib/shared/permissions.ts +162 -0
- package/lib/shared/propResolver.test.ts +240 -244
- package/lib/shared/propResolver.ts +15 -26
- package/lib/shared/pxToRem.test.ts +7 -6
- package/lib/shared/pxToRem.ts +2 -5
- package/lib/shared/registry/BaseNodeTypeRegistry.test.ts +12 -6
- package/lib/shared/registry/ClientRegistry.ts +0 -2
- package/lib/shared/registry/ComponentRegistry.test.ts +46 -32
- package/lib/shared/registry/ComponentRegistry.ts +12 -9
- package/lib/shared/registry/NodeTypeDefinition.ts +16 -9
- package/lib/shared/registry/RegistryManager.ts +1 -2
- package/lib/shared/registry/SSRRegistry.ts +0 -2
- package/lib/shared/registry/createNodeType.ts +7 -9
- package/lib/shared/registry/defineNodeType.ts +2 -6
- package/lib/shared/registry/fieldPresets.ts +3 -1
- package/lib/shared/registry/index.ts +0 -1
- package/lib/shared/registry/nodeTypes/ComponentInstanceNodeType.ts +14 -15
- package/lib/shared/registry/nodeTypes/CustomNodeType.ts +103 -0
- package/lib/shared/registry/nodeTypes/EmbedNodeType.ts +18 -11
- package/lib/shared/registry/nodeTypes/HtmlNodeType.ts +48 -19
- package/lib/shared/registry/nodeTypes/IslandNodeType.ts +129 -0
- package/lib/shared/registry/nodeTypes/LinkNodeType.ts +21 -19
- package/lib/shared/registry/nodeTypes/ListNodeType.ts +117 -77
- package/lib/shared/registry/nodeTypes/LocaleListNodeType.ts +27 -21
- package/lib/shared/registry/nodeTypes/MarkdownNodeType.ts +78 -0
- package/lib/shared/registry/nodeTypes/SlotMarkerType.ts +12 -8
- package/lib/shared/registry/nodeTypes/index.ts +26 -3
- package/lib/shared/responsiveScaling.test.ts +16 -34
- package/lib/shared/responsiveScaling.ts +61 -42
- package/lib/shared/responsiveStyleUtils.test.ts +0 -1
- package/lib/shared/responsiveStyleUtils.ts +11 -13
- package/lib/shared/richtext/htmlToTiptap.test.ts +139 -130
- package/lib/shared/richtext/htmlToTiptap.ts +2 -4
- package/lib/shared/richtext/tiptapToHtml.test.ts +5 -6
- package/lib/shared/richtext/types.ts +1 -8
- package/lib/shared/slugTranslator.test.ts +13 -13
- package/lib/shared/slugTranslator.ts +12 -16
- package/lib/shared/slugify.ts +9 -15
- package/lib/shared/styleNodeUtils.test.ts +8 -8
- package/lib/shared/styleNodeUtils.ts +18 -20
- package/lib/shared/styleUtils.test.ts +87 -61
- package/lib/shared/styleUtils.ts +5 -6
- package/lib/shared/themeDefaults.test.ts +11 -14
- package/lib/shared/themeDefaults.ts +3 -4
- package/lib/shared/tree/PathBuilder.test.ts +63 -145
- package/lib/shared/tree/PathBuilder.ts +59 -47
- package/lib/shared/treePathUtils.test.ts +51 -12
- package/lib/shared/treePathUtils.ts +91 -60
- package/lib/shared/types/api.ts +105 -8
- package/lib/shared/types/cms.test.ts +34 -0
- package/lib/shared/types/cms.ts +90 -34
- package/lib/shared/types/comment.ts +49 -16
- package/lib/shared/types/components.ts +51 -25
- package/lib/shared/types/errors.test.ts +1 -6
- package/lib/shared/types/errors.ts +3 -7
- package/lib/shared/types/experiments.ts +28 -28
- package/lib/shared/types/index.ts +25 -2
- package/lib/shared/types/permissions.ts +139 -0
- package/lib/shared/types/styles.ts +0 -1
- package/lib/shared/types/variables.test.ts +4 -13
- package/lib/shared/types/variables.ts +51 -30
- package/lib/shared/types.ts +1 -2
- package/lib/shared/utilityClassConfig.ts +751 -321
- package/lib/shared/utilityClassMapper.durability.test.ts +117 -0
- package/lib/shared/utilityClassMapper.test.ts +433 -95
- package/lib/shared/utilityClassMapper.ts +322 -249
- package/lib/shared/utilityClassNames.test.ts +38 -0
- package/lib/shared/utilityClassNames.ts +458 -0
- package/lib/shared/utils.test.ts +2 -10
- package/lib/shared/utils.ts +19 -10
- package/lib/shared/validation/cmsValidators.ts +2 -1
- package/lib/shared/validation/commentValidators.test.ts +53 -0
- package/lib/shared/validation/commentValidators.ts +12 -1
- package/lib/shared/validation/index.ts +1 -0
- package/lib/shared/validation/permissionsValidators.test.ts +49 -0
- package/lib/shared/validation/permissionsValidators.ts +49 -0
- package/lib/shared/validation/propValidator.test.ts +19 -21
- package/lib/shared/validation/propValidator.ts +13 -18
- package/lib/shared/validation/schemas.test.ts +64 -32
- package/lib/shared/validation/schemas.ts +616 -345
- package/lib/shared/validation/validators.test.ts +3 -8
- package/lib/shared/validation/validators.ts +89 -68
- package/lib/shared/viewportUnits.integration.test.ts +14 -10
- package/lib/shared/viewportUnits.test.ts +24 -23
- package/lib/shared/viewportUnits.ts +12 -5
- package/lib/test-utils/dom-setup.ts +1 -1
- package/lib/test-utils/factories/ConsoleMockFactory.ts +10 -14
- package/lib/test-utils/factories/DomMockFactory.ts +17 -23
- package/lib/test-utils/factories/EventMockFactory.ts +7 -13
- package/lib/test-utils/factories/FetchMockFactory.ts +39 -57
- package/lib/test-utils/factories/ServerMockFactory.ts +6 -10
- package/lib/test-utils/factories/StoreMockFactory.ts +18 -29
- package/lib/test-utils/fixtures.ts +45 -45
- package/lib/test-utils/helpers/asyncHelpers.test.ts +15 -18
- package/lib/test-utils/helpers/asyncHelpers.ts +11 -20
- package/lib/test-utils/helpers.ts +1 -5
- package/lib/test-utils/index.ts +0 -4
- package/lib/test-utils/mockFactories.ts +13 -19
- package/lib/test-utils/mocks.ts +6 -4
- package/package.json +3 -5
- package/scripts/build-for-publish.mjs +2 -4
- package/scripts/build-meno-filter.ts +4 -7
- package/tsconfig.json +1 -0
- package/vite.config.ts +4 -4
- package/build-next.ts +0 -1361
- package/build-static.test.ts +0 -424
- package/build-static.ts +0 -1074
- package/dist/build-static.js +0 -36
- package/dist/chunks/chunk-2MHDV5BF.js +0 -251
- package/dist/chunks/chunk-2MHDV5BF.js.map +0 -7
- package/dist/chunks/chunk-AZQYF6KE.js +0 -559
- package/dist/chunks/chunk-AZQYF6KE.js.map +0 -7
- package/dist/chunks/chunk-GZHGVVW3.js +0 -322
- package/dist/chunks/chunk-GZHGVVW3.js.map +0 -7
- package/dist/chunks/chunk-H3GJ4H2U.js.map +0 -7
- package/dist/chunks/chunk-I7YIGZXT.js +0 -467
- package/dist/chunks/chunk-I7YIGZXT.js.map +0 -7
- package/dist/chunks/chunk-IGYR22T6.js +0 -6192
- package/dist/chunks/chunk-IGYR22T6.js.map +0 -7
- package/dist/chunks/chunk-JGP5A3Y5.js +0 -1136
- package/dist/chunks/chunk-JGP5A3Y5.js.map +0 -7
- package/dist/chunks/chunk-JGWFTO6P.js.map +0 -7
- package/dist/chunks/chunk-O3NAGJP4.js.map +0 -7
- package/dist/chunks/chunk-QB2LNO4W.js +0 -77
- package/dist/chunks/chunk-QB2LNO4W.js.map +0 -7
- package/dist/chunks/chunk-R6XHAFBF.js +0 -3821
- package/dist/chunks/chunk-R6XHAFBF.js.map +0 -7
- package/dist/chunks/chunk-UB44F4Z2.js.map +0 -7
- package/dist/chunks/chunk-WQFG7PAH.js.map +0 -7
- package/dist/chunks/chunk-X754AHS5.js.map +0 -7
- package/dist/chunks/chunk-YBLHKYFF.js.map +0 -7
- package/dist/chunks/configService-R3OGU2UD.js +0 -13
- package/dist/chunks/configService-R3OGU2UD.js.map +0 -7
- package/dist/chunks/constants-STK2YBIW.js +0 -46
- package/dist/chunks/constants-STK2YBIW.js.map +0 -7
- package/dist/chunks/fs-JGINUXGL.js.map +0 -7
- package/dist/entries/server-router.js +0 -67
- package/dist/entries/server-router.js.map +0 -7
- package/entries/server-router.tsx +0 -81
- package/lib/server/providers/fileSystemPageProvider.ts +0 -160
- package/lib/server/webflow/buildWebflow.ts +0 -635
- package/lib/server/webflow/index.ts +0 -23
- package/lib/server/webflow/nodeToWebflow.test.ts +0 -3170
- package/lib/server/webflow/nodeToWebflow.ts +0 -2435
- package/lib/server/webflow/styleMapper.test.ts +0 -389
- package/lib/server/webflow/styleMapper.ts +0 -695
- package/lib/server/webflow/templateWrapper.ts +0 -49
- package/lib/server/webflow/types.ts +0 -396
- /package/dist/{build-static.js.map → chunks/fs-G3ANWEFP.js.map} +0 -0
|
@@ -20,7 +20,7 @@ export function renderItemFromTemplate(
|
|
|
20
20
|
item: Record<string, unknown>,
|
|
21
21
|
itemAs: string,
|
|
22
22
|
index: number,
|
|
23
|
-
total: number
|
|
23
|
+
total: number,
|
|
24
24
|
): HTMLElement {
|
|
25
25
|
let html = template;
|
|
26
26
|
|
|
@@ -69,7 +69,7 @@ export function renderNestedItemFromTemplate(
|
|
|
69
69
|
index: number,
|
|
70
70
|
total: number,
|
|
71
71
|
parentItem: Record<string, unknown>,
|
|
72
|
-
parentItemAs: string
|
|
72
|
+
parentItemAs: string,
|
|
73
73
|
): HTMLElement {
|
|
74
74
|
let html = template;
|
|
75
75
|
|
|
@@ -146,11 +146,9 @@ export function renderNestedItemFromTemplate(
|
|
|
146
146
|
export function hydrateNestedCMSLists(
|
|
147
147
|
element: HTMLElement,
|
|
148
148
|
parentItem: Record<string, unknown>,
|
|
149
|
-
parentItemAs: string
|
|
149
|
+
parentItemAs: string,
|
|
150
150
|
): void {
|
|
151
|
-
const placeholders = element.querySelectorAll<HTMLElement>(
|
|
152
|
-
'[data-cms-list-nested="true"]'
|
|
153
|
-
);
|
|
151
|
+
const placeholders = element.querySelectorAll<HTMLElement>('[data-cms-list-nested="true"]');
|
|
154
152
|
|
|
155
153
|
for (const placeholder of placeholders) {
|
|
156
154
|
hydrateNestedCMSList(placeholder, parentItem, parentItemAs);
|
|
@@ -163,7 +161,7 @@ export function hydrateNestedCMSLists(
|
|
|
163
161
|
function hydrateNestedCMSList(
|
|
164
162
|
placeholder: HTMLElement,
|
|
165
163
|
parentItem: Record<string, unknown>,
|
|
166
|
-
parentItemAs: string
|
|
164
|
+
parentItemAs: string,
|
|
167
165
|
): void {
|
|
168
166
|
const configStr = placeholder.getAttribute('data-cms-config');
|
|
169
167
|
if (!configStr) return;
|
|
@@ -176,9 +174,7 @@ function hydrateNestedCMSList(
|
|
|
176
174
|
}
|
|
177
175
|
|
|
178
176
|
const collection = config.collection;
|
|
179
|
-
const templateEl = placeholder.querySelector<HTMLTemplateElement>(
|
|
180
|
-
'template[data-nested-template]'
|
|
181
|
-
);
|
|
177
|
+
const templateEl = placeholder.querySelector<HTMLTemplateElement>('template[data-nested-template]');
|
|
182
178
|
if (!templateEl) return;
|
|
183
179
|
|
|
184
180
|
const childTemplate = templateEl.innerHTML.trim();
|
|
@@ -187,7 +183,9 @@ function hydrateNestedCMSList(
|
|
|
187
183
|
// Get collection data from inline JSON
|
|
188
184
|
const collectionData = getCollectionData(collection);
|
|
189
185
|
if (!collectionData) {
|
|
190
|
-
console.warn(
|
|
186
|
+
console.warn(
|
|
187
|
+
`MenoFilter: No data for nested collection "${collection}". Ensure clientData.enabled is true in schema.`,
|
|
188
|
+
);
|
|
191
189
|
return;
|
|
192
190
|
}
|
|
193
191
|
|
|
@@ -198,7 +196,7 @@ function hydrateNestedCMSList(
|
|
|
198
196
|
// Reference relationship: resolve IDs from parent
|
|
199
197
|
const itemIds = resolveItemsFromParent(config.items, parentItem, parentItemAs);
|
|
200
198
|
items = itemIds
|
|
201
|
-
.map(id => collectionData.find(item => item._id === id || item._filename === id))
|
|
199
|
+
.map((id) => collectionData.find((item) => item._id === id || item._filename === id))
|
|
202
200
|
.filter((item): item is Record<string, unknown> => item !== undefined);
|
|
203
201
|
} else {
|
|
204
202
|
// Filter relationship: apply filter with resolved parent values
|
|
@@ -217,22 +215,25 @@ function hydrateNestedCMSList(
|
|
|
217
215
|
// Render items with parent context preserved
|
|
218
216
|
const renderedItems: HTMLElement[] = [];
|
|
219
217
|
for (let i = 0; i < items.length; i++) {
|
|
218
|
+
const item = items[i];
|
|
219
|
+
if (item === undefined) continue;
|
|
220
220
|
const childElement = renderNestedItemFromTemplate(
|
|
221
221
|
childTemplate,
|
|
222
|
-
|
|
222
|
+
item,
|
|
223
223
|
nestedItemAs,
|
|
224
224
|
i,
|
|
225
225
|
items.length,
|
|
226
226
|
parentItem,
|
|
227
|
-
parentItemAs
|
|
227
|
+
parentItemAs,
|
|
228
228
|
);
|
|
229
229
|
renderedItems.push(childElement);
|
|
230
230
|
}
|
|
231
231
|
|
|
232
232
|
// Replace placeholder content (keep template for potential re-renders)
|
|
233
|
-
const existingChildren = Array.from(placeholder.children)
|
|
234
|
-
|
|
235
|
-
|
|
233
|
+
const existingChildren = Array.from(placeholder.children).filter((el) => el.tagName !== 'TEMPLATE');
|
|
234
|
+
existingChildren.forEach((el) => {
|
|
235
|
+
el.remove();
|
|
236
|
+
});
|
|
236
237
|
|
|
237
238
|
for (const item of renderedItems) {
|
|
238
239
|
placeholder.appendChild(item);
|
|
@@ -260,7 +261,7 @@ function getCollectionData(collection: string): Record<string, unknown>[] | null
|
|
|
260
261
|
function resolveItemsFromParent(
|
|
261
262
|
template: string | string[],
|
|
262
263
|
parentItem: Record<string, unknown>,
|
|
263
|
-
parentItemAs: string
|
|
264
|
+
parentItemAs: string,
|
|
264
265
|
): string[] {
|
|
265
266
|
if (Array.isArray(template)) return template;
|
|
266
267
|
if (typeof template !== 'string' || !template.startsWith('{{')) return [template];
|
|
@@ -268,7 +269,7 @@ function resolveItemsFromParent(
|
|
|
268
269
|
const match = template.match(/^\{\{(\w+)\.([^}]+)\}\}$/);
|
|
269
270
|
if (!match) return [];
|
|
270
271
|
|
|
271
|
-
const [, varName, fieldPath] = match;
|
|
272
|
+
const [, varName, fieldPath = ''] = match;
|
|
272
273
|
if (varName !== parentItemAs && varName !== 'item') return [];
|
|
273
274
|
|
|
274
275
|
const value = getNestedValue(parentItem, fieldPath);
|
|
@@ -284,12 +285,12 @@ function applyNestedFilter(
|
|
|
284
285
|
items: Record<string, unknown>[],
|
|
285
286
|
filter: unknown,
|
|
286
287
|
parentItem: Record<string, unknown>,
|
|
287
|
-
parentItemAs: string
|
|
288
|
+
parentItemAs: string,
|
|
288
289
|
): Record<string, unknown>[] {
|
|
289
290
|
if (!filter) return items;
|
|
290
291
|
|
|
291
292
|
const resolved = resolveNestedFilterTemplates(filter, parentItem, parentItemAs);
|
|
292
|
-
return items.filter(item => matchesNestedFilter(item, resolved));
|
|
293
|
+
return items.filter((item) => matchesNestedFilter(item, resolved));
|
|
293
294
|
}
|
|
294
295
|
|
|
295
296
|
/**
|
|
@@ -298,12 +299,12 @@ function applyNestedFilter(
|
|
|
298
299
|
function resolveNestedFilterTemplates(
|
|
299
300
|
filter: unknown,
|
|
300
301
|
parentItem: Record<string, unknown>,
|
|
301
|
-
parentItemAs: string
|
|
302
|
+
parentItemAs: string,
|
|
302
303
|
): unknown {
|
|
303
304
|
if (Array.isArray(filter)) {
|
|
304
|
-
return filter.map(cond => ({
|
|
305
|
+
return filter.map((cond) => ({
|
|
305
306
|
...cond,
|
|
306
|
-
value: resolveNestedTemplateValue(cond.value, parentItem, parentItemAs)
|
|
307
|
+
value: resolveNestedTemplateValue(cond.value, parentItem, parentItemAs),
|
|
307
308
|
}));
|
|
308
309
|
}
|
|
309
310
|
|
|
@@ -311,7 +312,7 @@ function resolveNestedFilterTemplates(
|
|
|
311
312
|
if ('field' in filter && 'value' in filter) {
|
|
312
313
|
return {
|
|
313
314
|
...filter,
|
|
314
|
-
value: resolveNestedTemplateValue((filter as { value: unknown }).value, parentItem, parentItemAs)
|
|
315
|
+
value: resolveNestedTemplateValue((filter as { value: unknown }).value, parentItem, parentItemAs),
|
|
315
316
|
};
|
|
316
317
|
}
|
|
317
318
|
|
|
@@ -332,14 +333,14 @@ function resolveNestedFilterTemplates(
|
|
|
332
333
|
function resolveNestedTemplateValue(
|
|
333
334
|
value: unknown,
|
|
334
335
|
parentItem: Record<string, unknown>,
|
|
335
|
-
parentItemAs: string
|
|
336
|
+
parentItemAs: string,
|
|
336
337
|
): unknown {
|
|
337
338
|
if (typeof value !== 'string' || !value.startsWith('{{')) return value;
|
|
338
339
|
|
|
339
340
|
const match = value.match(/^\{\{(\w+)\.([^}]+)\}\}$/);
|
|
340
341
|
if (!match) return value;
|
|
341
342
|
|
|
342
|
-
const [, varName, fieldPath] = match;
|
|
343
|
+
const [, varName, fieldPath = ''] = match;
|
|
343
344
|
if (varName !== parentItemAs && varName !== 'item') return value;
|
|
344
345
|
|
|
345
346
|
return getNestedValue(parentItem, fieldPath);
|
|
@@ -352,7 +353,7 @@ function matchesNestedFilter(item: Record<string, unknown>, filter: unknown): bo
|
|
|
352
353
|
if (!filter || typeof filter !== 'object') return true;
|
|
353
354
|
|
|
354
355
|
if (Array.isArray(filter)) {
|
|
355
|
-
return filter.every(cond => matchesNestedCondition(item, cond));
|
|
356
|
+
return filter.every((cond) => matchesNestedCondition(item, cond));
|
|
356
357
|
}
|
|
357
358
|
|
|
358
359
|
if ('field' in filter && 'value' in filter) {
|
|
@@ -383,10 +384,7 @@ function matchesNestedCondition(item: Record<string, unknown>, cond: { field: st
|
|
|
383
384
|
/**
|
|
384
385
|
* Apply sorting to items
|
|
385
386
|
*/
|
|
386
|
-
function applyNestedSorting(
|
|
387
|
-
items: Record<string, unknown>[],
|
|
388
|
-
sort: unknown
|
|
389
|
-
): Record<string, unknown>[] {
|
|
387
|
+
function applyNestedSorting(items: Record<string, unknown>[], sort: unknown): Record<string, unknown>[] {
|
|
390
388
|
if (!sort) return items;
|
|
391
389
|
|
|
392
390
|
const sortConfig = Array.isArray(sort) ? sort[0] : sort;
|
|
@@ -47,9 +47,7 @@ export function needsMenoFilter(html: string): boolean {
|
|
|
47
47
|
/**
|
|
48
48
|
* Check if any schemas have clientData enabled
|
|
49
49
|
*/
|
|
50
|
-
export function schemasNeedMenoFilter(
|
|
51
|
-
schemas: Array<{ clientData?: { enabled: boolean } }>
|
|
52
|
-
): boolean {
|
|
50
|
+
export function schemasNeedMenoFilter(schemas: Array<{ clientData?: { enabled: boolean } }>): boolean {
|
|
53
51
|
return schemas.some((schema) => schema.clientData?.enabled === true);
|
|
54
52
|
}
|
|
55
53
|
|
|
@@ -57,10 +57,7 @@ const DEFAULT_OPTIONS: Required<UIOptions> = {
|
|
|
57
57
|
/**
|
|
58
58
|
* Bind UI rendering to a MenoFilter instance
|
|
59
59
|
*/
|
|
60
|
-
export function bindFilterUI(
|
|
61
|
-
collection: string,
|
|
62
|
-
options: UIOptions = {}
|
|
63
|
-
): (() => void) | null {
|
|
60
|
+
export function bindFilterUI(collection: string, options: UIOptions = {}): (() => void) | null {
|
|
64
61
|
const filter = MenoFilter.get(collection);
|
|
65
62
|
if (!filter) {
|
|
66
63
|
console.warn(`MenoFilter: No instance found for "${collection}"`);
|
|
@@ -171,7 +168,7 @@ function showElement(element: HTMLElement, options: Required<UIOptions>): void {
|
|
|
171
168
|
}, duration);
|
|
172
169
|
break;
|
|
173
170
|
|
|
174
|
-
case 'slide':
|
|
171
|
+
case 'slide': {
|
|
175
172
|
element.style.maxHeight = '0';
|
|
176
173
|
element.style.overflow = 'hidden';
|
|
177
174
|
element.classList.remove(hiddenClass);
|
|
@@ -190,6 +187,7 @@ function showElement(element: HTMLElement, options: Required<UIOptions>): void {
|
|
|
190
187
|
element.style.overflow = '';
|
|
191
188
|
}, duration);
|
|
192
189
|
break;
|
|
190
|
+
}
|
|
193
191
|
|
|
194
192
|
default:
|
|
195
193
|
element.classList.remove(hiddenClass);
|
|
@@ -356,7 +354,7 @@ export function autoBindUI(): void {
|
|
|
356
354
|
|
|
357
355
|
const options: UIOptions = {};
|
|
358
356
|
if (animate) options.animate = animate;
|
|
359
|
-
if (!isNaN(duration)) options.duration = duration;
|
|
357
|
+
if (!Number.isNaN(duration)) options.duration = duration;
|
|
360
358
|
if (scrollToTop) options.scrollToTop = true;
|
|
361
359
|
|
|
362
360
|
bindFilterUI(collection, options);
|
|
@@ -105,6 +105,7 @@ function filterWithJsonData(instance: FilterInstance, listEl: HTMLElement): void
|
|
|
105
105
|
// Render each item
|
|
106
106
|
for (let i = 0; i < itemsToRender.length; i++) {
|
|
107
107
|
const item = itemsToRender[i];
|
|
108
|
+
if (item === undefined) continue;
|
|
108
109
|
const itemId = item._id;
|
|
109
110
|
|
|
110
111
|
// In load-more mode, skip items already rendered
|
|
@@ -149,7 +150,7 @@ function filterDOMOnly(instance: FilterInstance, listEl: HTMLElement): void {
|
|
|
149
150
|
const currentPage = filter.getPageInfo().current;
|
|
150
151
|
|
|
151
152
|
// Build filtered list
|
|
152
|
-
|
|
153
|
+
const filteredItems = items.filter((item) => {
|
|
153
154
|
// Check filters
|
|
154
155
|
for (const [field, value] of Object.entries(filters)) {
|
|
155
156
|
const itemValue = getItemFieldValue(item, field);
|
|
@@ -234,7 +235,7 @@ function getItemFieldValue(item: HTMLElement, field: string): string | null {
|
|
|
234
235
|
*/
|
|
235
236
|
function getSearchableText(item: HTMLElement, fields: string[]): string {
|
|
236
237
|
if (fields.length > 0) {
|
|
237
|
-
return fields.map(f => getItemFieldValue(item, f) || '').join(' ');
|
|
238
|
+
return fields.map((f) => getItemFieldValue(item, f) || '').join(' ');
|
|
238
239
|
}
|
|
239
240
|
return item.textContent || '';
|
|
240
241
|
}
|
|
@@ -345,17 +346,11 @@ export function updateFacets(wrapper: HTMLElement, filter: MenoFilter): void {
|
|
|
345
346
|
/**
|
|
346
347
|
* Update active filters display
|
|
347
348
|
*/
|
|
348
|
-
export function updateActiveFilters(
|
|
349
|
-
wrapper: HTMLElement,
|
|
350
|
-
filter: MenoFilter,
|
|
351
|
-
instance: FilterInstance
|
|
352
|
-
): void {
|
|
349
|
+
export function updateActiveFilters(wrapper: HTMLElement, filter: MenoFilter, instance: FilterInstance): void {
|
|
353
350
|
const container = wrapper.querySelector<HTMLElement>(`[${ATTR.ACTIVE_FILTERS}]`);
|
|
354
351
|
if (!container) return;
|
|
355
352
|
|
|
356
|
-
const template = wrapper.querySelector<HTMLTemplateElement>(
|
|
357
|
-
`template[${ATTR.ACTIVE_FILTER_TEMPLATE}]`
|
|
358
|
-
);
|
|
353
|
+
const template = wrapper.querySelector<HTMLTemplateElement>(`template[${ATTR.ACTIVE_FILTER_TEMPLATE}]`);
|
|
359
354
|
|
|
360
355
|
const filters = filter.getFilters();
|
|
361
356
|
const entries = Object.entries(filters);
|
|
@@ -478,7 +473,7 @@ export function updatePagination(wrapper: HTMLElement, state: FilterState): void
|
|
|
478
473
|
export function generatePageButtons(
|
|
479
474
|
container: HTMLElement,
|
|
480
475
|
page: { current: number; total: number },
|
|
481
|
-
onClick: (page: number) => void
|
|
476
|
+
onClick: (page: number) => void,
|
|
482
477
|
): void {
|
|
483
478
|
container.innerHTML = '';
|
|
484
479
|
|
|
@@ -566,9 +561,7 @@ export function updateActiveStates(wrapper: HTMLElement, filter: MenoFilter): vo
|
|
|
566
561
|
const activeClass = wrapper.getAttribute(ATTR.ACTIVE_CLASS) || 'active';
|
|
567
562
|
|
|
568
563
|
// Update filter buttons
|
|
569
|
-
const filterButtons = wrapper.querySelectorAll<HTMLElement>(
|
|
570
|
-
`[${ATTR.FILTER_FIELD}][${ATTR.FILTER_VALUE}]`
|
|
571
|
-
);
|
|
564
|
+
const filterButtons = wrapper.querySelectorAll<HTMLElement>(`[${ATTR.FILTER_FIELD}][${ATTR.FILTER_VALUE}]`);
|
|
572
565
|
|
|
573
566
|
for (const btn of filterButtons) {
|
|
574
567
|
if (btn.tagName === 'INPUT') continue;
|
|
@@ -582,13 +575,15 @@ export function updateActiveStates(wrapper: HTMLElement, filter: MenoFilter): vo
|
|
|
582
575
|
const currentValue = filters[field];
|
|
583
576
|
|
|
584
577
|
// Only active if filter is explicitly set AND matches this value
|
|
585
|
-
const isActive =
|
|
586
|
-
currentValue
|
|
587
|
-
(
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
578
|
+
const isActive =
|
|
579
|
+
currentValue !== undefined &&
|
|
580
|
+
(currentValue === value ||
|
|
581
|
+
(Array.isArray(currentValue) && currentValue.includes(value)) ||
|
|
582
|
+
(typeof currentValue === 'object' &&
|
|
583
|
+
currentValue !== null &&
|
|
584
|
+
'$in' in currentValue &&
|
|
585
|
+
Array.isArray((currentValue as { $in: unknown[] }).$in) &&
|
|
586
|
+
(currentValue as { $in: unknown[] }).$in.includes(value)));
|
|
592
587
|
|
|
593
588
|
btn.classList.toggle(activeClass, isActive);
|
|
594
589
|
}
|
|
@@ -663,8 +658,8 @@ export function updateRangeInputs(wrapper: HTMLElement, filter: MenoFilter): voi
|
|
|
663
658
|
if (input.type === 'date') {
|
|
664
659
|
// Convert timestamp to YYYY-MM-DD format
|
|
665
660
|
const date = new Date(value as number);
|
|
666
|
-
if (!isNaN(date.getTime())) {
|
|
667
|
-
input.value = date.toISOString().split('T')[0];
|
|
661
|
+
if (!Number.isNaN(date.getTime())) {
|
|
662
|
+
input.value = date.toISOString().split('T')[0] ?? '';
|
|
668
663
|
}
|
|
669
664
|
} else {
|
|
670
665
|
input.value = String(value);
|
|
@@ -25,7 +25,7 @@ export function escapeHtml(str: string): string {
|
|
|
25
25
|
* singularizeWord('cases') // 'case'
|
|
26
26
|
*/
|
|
27
27
|
export function singularizeWord(word: string): string {
|
|
28
|
-
if (word.endsWith('ies')) return word.slice(0, -3)
|
|
28
|
+
if (word.endsWith('ies')) return `${word.slice(0, -3)}y`;
|
|
29
29
|
if (word.endsWith('es')) return word.slice(0, -2);
|
|
30
30
|
if (word.endsWith('s')) return word.slice(0, -1);
|
|
31
31
|
return word;
|