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
package/lib/shared/styleUtils.ts
CHANGED
|
@@ -11,7 +11,7 @@ export function isResponsiveStyle(style: StyleValue): style is ResponsiveStyleOb
|
|
|
11
11
|
if (!style || typeof style !== 'object' || Array.isArray(style)) {
|
|
12
12
|
return false;
|
|
13
13
|
}
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
// Check if it has base, tablet, or mobile keys (indicating responsive format)
|
|
16
16
|
return 'base' in style || 'tablet' in style || 'mobile' in style;
|
|
17
17
|
}
|
|
@@ -23,14 +23,14 @@ export function isStyleObject(style: unknown): style is StyleObject {
|
|
|
23
23
|
if (!style || typeof style !== 'object' || Array.isArray(style)) {
|
|
24
24
|
return false;
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
// StyleObject is a record of string keys to string | number | StyleMapping values
|
|
28
28
|
// Check that it's not a ResponsiveStyleObject (which has base/tablet/mobile keys)
|
|
29
29
|
// Use proper type narrowing instead of assertion
|
|
30
30
|
if (!('base' in style) && !('tablet' in style) && !('mobile' in style)) {
|
|
31
31
|
// All values should be string, number, or objects with _mapping property
|
|
32
32
|
const obj = style as Record<string, unknown>;
|
|
33
|
-
return Object.values(obj).every(value => {
|
|
33
|
+
return Object.values(obj).every((value) => {
|
|
34
34
|
if (typeof value === 'string' || typeof value === 'number') {
|
|
35
35
|
return true;
|
|
36
36
|
}
|
|
@@ -40,7 +40,7 @@ export function isStyleObject(style: unknown): style is StyleObject {
|
|
|
40
40
|
return false;
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
return false; // This is a ResponsiveStyleObject, not a StyleObject
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -51,7 +51,7 @@ export function isStyleValue(style: unknown): style is StyleValue {
|
|
|
51
51
|
if (!style || typeof style !== 'object' || Array.isArray(style)) {
|
|
52
52
|
return false;
|
|
53
53
|
}
|
|
54
|
-
|
|
54
|
+
|
|
55
55
|
// Check if it's a ResponsiveStyleObject
|
|
56
56
|
if (isResponsiveStyle(style as StyleValue)) {
|
|
57
57
|
return true;
|
|
@@ -60,4 +60,3 @@ export function isStyleValue(style: unknown): style is StyleValue {
|
|
|
60
60
|
// Check if it's a StyleObject
|
|
61
61
|
return isStyleObject(style);
|
|
62
62
|
}
|
|
63
|
-
|
|
@@ -5,9 +5,6 @@ import {
|
|
|
5
5
|
DEFAULT_TEXTAREA_STYLE,
|
|
6
6
|
DEFAULT_PROPS_PANEL_COLORS,
|
|
7
7
|
LIGHT_PROPS_PANEL_COLORS,
|
|
8
|
-
type PropsPanelColors,
|
|
9
|
-
type PropsPanelSpacing,
|
|
10
|
-
type PropsPanelInputStyle,
|
|
11
8
|
} from './themeDefaults';
|
|
12
9
|
|
|
13
10
|
describe('themeDefaults', () => {
|
|
@@ -26,16 +23,16 @@ describe('themeDefaults', () => {
|
|
|
26
23
|
});
|
|
27
24
|
|
|
28
25
|
describe('DEFAULT_INPUT_STYLE', () => {
|
|
29
|
-
test('should have
|
|
30
|
-
expect(DEFAULT_INPUT_STYLE.fontFamily).toBe('
|
|
26
|
+
test('should have Inter UI font stack', () => {
|
|
27
|
+
expect(DEFAULT_INPUT_STYLE.fontFamily).toBe("'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif");
|
|
31
28
|
});
|
|
32
29
|
|
|
33
|
-
test('should have
|
|
34
|
-
expect(DEFAULT_INPUT_STYLE.fontSize).toBe('
|
|
30
|
+
test('should have 13px font size', () => {
|
|
31
|
+
expect(DEFAULT_INPUT_STYLE.fontSize).toBe('13px');
|
|
35
32
|
});
|
|
36
33
|
|
|
37
|
-
test('should have
|
|
38
|
-
expect(DEFAULT_INPUT_STYLE.padding).toBe('
|
|
34
|
+
test('should have 6px 8px padding', () => {
|
|
35
|
+
expect(DEFAULT_INPUT_STYLE.padding).toBe('6px 8px');
|
|
39
36
|
});
|
|
40
37
|
|
|
41
38
|
test('should have 3px border radius', () => {
|
|
@@ -56,8 +53,8 @@ describe('themeDefaults', () => {
|
|
|
56
53
|
expect(DEFAULT_TEXTAREA_STYLE.fontSize).toBe('13px');
|
|
57
54
|
});
|
|
58
55
|
|
|
59
|
-
test('should have
|
|
60
|
-
expect(DEFAULT_TEXTAREA_STYLE.padding).toBe('
|
|
56
|
+
test('should have 6px 8px padding', () => {
|
|
57
|
+
expect(DEFAULT_TEXTAREA_STYLE.padding).toBe('6px 8px');
|
|
61
58
|
});
|
|
62
59
|
|
|
63
60
|
test('should have 3px border radius', () => {
|
|
@@ -103,7 +100,7 @@ describe('themeDefaults', () => {
|
|
|
103
100
|
});
|
|
104
101
|
|
|
105
102
|
test('should have input colors', () => {
|
|
106
|
-
expect(DEFAULT_PROPS_PANEL_COLORS.inputBackground).toBe('#
|
|
103
|
+
expect(DEFAULT_PROPS_PANEL_COLORS.inputBackground).toBe('#2a2a2a');
|
|
107
104
|
expect(DEFAULT_PROPS_PANEL_COLORS.inputBorder).toBe('#444444');
|
|
108
105
|
});
|
|
109
106
|
|
|
@@ -120,7 +117,7 @@ describe('themeDefaults', () => {
|
|
|
120
117
|
});
|
|
121
118
|
|
|
122
119
|
test('should have border colors', () => {
|
|
123
|
-
expect(LIGHT_PROPS_PANEL_COLORS.border).toBe('#
|
|
120
|
+
expect(LIGHT_PROPS_PANEL_COLORS.border).toBe('#e4e8ec');
|
|
124
121
|
expect(LIGHT_PROPS_PANEL_COLORS.borderSecondary).toBe('#d0d0d0');
|
|
125
122
|
});
|
|
126
123
|
|
|
@@ -146,7 +143,7 @@ describe('themeDefaults', () => {
|
|
|
146
143
|
});
|
|
147
144
|
|
|
148
145
|
test('should have input colors', () => {
|
|
149
|
-
expect(LIGHT_PROPS_PANEL_COLORS.inputBackground).toBe('#
|
|
146
|
+
expect(LIGHT_PROPS_PANEL_COLORS.inputBackground).toBe('#f5f7fa');
|
|
150
147
|
expect(LIGHT_PROPS_PANEL_COLORS.inputBorder).toBe('#d0d0d0');
|
|
151
148
|
});
|
|
152
149
|
|
|
@@ -31,9 +31,9 @@ export interface PropsPanelColors {
|
|
|
31
31
|
* Spacing constants for props panel components
|
|
32
32
|
*/
|
|
33
33
|
export interface PropsPanelSpacing {
|
|
34
|
-
tight: string;
|
|
35
|
-
normal: string;
|
|
36
|
-
loose: string;
|
|
34
|
+
tight: string; // 2px - for label:colon:input gaps
|
|
35
|
+
normal: string; // 4px - for standard gaps
|
|
36
|
+
loose: string; // 8px - for larger gaps
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
export const DEFAULT_PROPS_PANEL_SPACING: PropsPanelSpacing = {
|
|
@@ -129,4 +129,3 @@ export const LIGHT_PROPS_PANEL_COLORS: PropsPanelColors = {
|
|
|
129
129
|
hoverBackground: '#f0f0f0',
|
|
130
130
|
variableBackground: '#ebedf0',
|
|
131
131
|
};
|
|
132
|
-
|
|
@@ -8,13 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { describe, it, expect } from 'bun:test';
|
|
11
|
-
import {
|
|
12
|
-
buildTreePathsWithRendered,
|
|
13
|
-
buildComponentTreePaths,
|
|
14
|
-
computeCumulativeInstancePath,
|
|
15
|
-
type NavigationContext,
|
|
16
|
-
} from './PathBuilder';
|
|
17
|
-
import type { Path } from '../pathArrayUtils';
|
|
11
|
+
import { buildTreePathsWithRendered, computeCumulativeInstancePath, type NavigationContext } from './PathBuilder';
|
|
18
12
|
|
|
19
13
|
// Helper to wrap component structure in expected PageData format
|
|
20
14
|
function wrapAsComponentData(structure: any) {
|
|
@@ -32,11 +26,7 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
32
26
|
// Component structure: Header (0), Slot (1), Footer (2)
|
|
33
27
|
const componentStructure = {
|
|
34
28
|
tag: 'div',
|
|
35
|
-
children: [
|
|
36
|
-
{ tag: 'header', children: 'Header' },
|
|
37
|
-
{ type: 'slot' },
|
|
38
|
-
{ tag: 'footer', children: 'Footer' },
|
|
39
|
-
],
|
|
29
|
+
children: [{ tag: 'header', children: 'Header' }, { type: 'slot' }, { tag: 'footer', children: 'Footer' }],
|
|
40
30
|
};
|
|
41
31
|
|
|
42
32
|
// Editing component with 3 children in the slot
|
|
@@ -55,13 +45,11 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
55
45
|
const paths = buildTreePathsWithRendered(
|
|
56
46
|
wrapAsComponentData(componentStructure),
|
|
57
47
|
undefined, // no registry needed for this test
|
|
58
|
-
navigationHistory
|
|
48
|
+
navigationHistory,
|
|
59
49
|
);
|
|
60
50
|
|
|
61
51
|
// Find footer path (logical [0, 2])
|
|
62
|
-
const footerPathData = paths.find(
|
|
63
|
-
(p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2
|
|
64
|
-
);
|
|
52
|
+
const footerPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2);
|
|
65
53
|
|
|
66
54
|
expect(footerPathData).toBeDefined();
|
|
67
55
|
// Footer should be at rendered [0, 4] because:
|
|
@@ -73,11 +61,7 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
73
61
|
it('should not offset pre-slot elements', () => {
|
|
74
62
|
const componentStructure = {
|
|
75
63
|
tag: 'div',
|
|
76
|
-
children: [
|
|
77
|
-
{ tag: 'header', children: 'Header' },
|
|
78
|
-
{ type: 'slot' },
|
|
79
|
-
{ tag: 'footer', children: 'Footer' },
|
|
80
|
-
],
|
|
64
|
+
children: [{ tag: 'header', children: 'Header' }, { type: 'slot' }, { tag: 'footer', children: 'Footer' }],
|
|
81
65
|
};
|
|
82
66
|
|
|
83
67
|
const navigationHistory: NavigationContext[] = [
|
|
@@ -91,16 +75,10 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
91
75
|
},
|
|
92
76
|
];
|
|
93
77
|
|
|
94
|
-
const paths = buildTreePathsWithRendered(
|
|
95
|
-
wrapAsComponentData(componentStructure),
|
|
96
|
-
undefined,
|
|
97
|
-
navigationHistory
|
|
98
|
-
);
|
|
78
|
+
const paths = buildTreePathsWithRendered(wrapAsComponentData(componentStructure), undefined, navigationHistory);
|
|
99
79
|
|
|
100
80
|
// Find header path (logical [0, 0])
|
|
101
|
-
const headerPathData = paths.find(
|
|
102
|
-
(p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 0
|
|
103
|
-
);
|
|
81
|
+
const headerPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 0);
|
|
104
82
|
|
|
105
83
|
expect(headerPathData).toBeDefined();
|
|
106
84
|
// Header should stay at rendered [0, 0] - no offset for pre-slot elements
|
|
@@ -110,11 +88,7 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
110
88
|
it('should handle empty slot (no offset needed)', () => {
|
|
111
89
|
const componentStructure = {
|
|
112
90
|
tag: 'div',
|
|
113
|
-
children: [
|
|
114
|
-
{ tag: 'header', children: 'Header' },
|
|
115
|
-
{ type: 'slot' },
|
|
116
|
-
{ tag: 'footer', children: 'Footer' },
|
|
117
|
-
],
|
|
91
|
+
children: [{ tag: 'header', children: 'Header' }, { type: 'slot' }, { tag: 'footer', children: 'Footer' }],
|
|
118
92
|
};
|
|
119
93
|
|
|
120
94
|
const navigationHistory: NavigationContext[] = [
|
|
@@ -125,16 +99,10 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
125
99
|
},
|
|
126
100
|
];
|
|
127
101
|
|
|
128
|
-
const paths = buildTreePathsWithRendered(
|
|
129
|
-
wrapAsComponentData(componentStructure),
|
|
130
|
-
undefined,
|
|
131
|
-
navigationHistory
|
|
132
|
-
);
|
|
102
|
+
const paths = buildTreePathsWithRendered(wrapAsComponentData(componentStructure), undefined, navigationHistory);
|
|
133
103
|
|
|
134
104
|
// Find footer path (logical [0, 2])
|
|
135
|
-
const footerPathData = paths.find(
|
|
136
|
-
(p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2
|
|
137
|
-
);
|
|
105
|
+
const footerPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2);
|
|
138
106
|
|
|
139
107
|
expect(footerPathData).toBeDefined();
|
|
140
108
|
// With empty slot, footer stays at rendered [0, 2] (no offset)
|
|
@@ -155,7 +123,7 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
155
123
|
{ type: 'component', component: 'Section' }, // 1
|
|
156
124
|
{ type: 'component', component: 'Section' }, // 2
|
|
157
125
|
{ type: 'component', component: 'Section' }, // 3
|
|
158
|
-
{ type: 'slot' },
|
|
126
|
+
{ type: 'slot' }, // 4 - CaseStudyLayout's slot
|
|
159
127
|
{ type: 'component', component: 'CtaSection' }, // 5 - after slot
|
|
160
128
|
],
|
|
161
129
|
};
|
|
@@ -163,23 +131,26 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
163
131
|
// Mock registry with Layout structure
|
|
164
132
|
// Layout has slot at [0, 1, 0] (div → main → slot)
|
|
165
133
|
const mockRegistry = new Map([
|
|
166
|
-
[
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
134
|
+
[
|
|
135
|
+
'Layout',
|
|
136
|
+
{
|
|
137
|
+
component: {
|
|
138
|
+
structure: {
|
|
139
|
+
tag: 'div',
|
|
140
|
+
children: [
|
|
141
|
+
{ component: 'Navigation' }, // 0
|
|
142
|
+
{
|
|
143
|
+
tag: 'main',
|
|
144
|
+
children: [
|
|
145
|
+
{ type: 'slot' }, // slot at index 0 within main
|
|
146
|
+
],
|
|
147
|
+
}, // 1
|
|
148
|
+
{ component: 'Footer' }, // 2
|
|
149
|
+
],
|
|
150
|
+
},
|
|
180
151
|
},
|
|
181
152
|
},
|
|
182
|
-
|
|
153
|
+
],
|
|
183
154
|
]);
|
|
184
155
|
|
|
185
156
|
// Editing CaseStudyLayout from a page that passes 1 child to slot
|
|
@@ -187,22 +158,18 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
187
158
|
{
|
|
188
159
|
componentInstancePath: [0],
|
|
189
160
|
componentInstanceRenderedPath: [0],
|
|
190
|
-
instanceChildren: [
|
|
191
|
-
{ component: 'Section', children: 'Instance content' },
|
|
192
|
-
] as any, // 1 child passed to CaseStudyLayout's slot
|
|
161
|
+
instanceChildren: [{ component: 'Section', children: 'Instance content' }] as any, // 1 child passed to CaseStudyLayout's slot
|
|
193
162
|
},
|
|
194
163
|
];
|
|
195
164
|
|
|
196
165
|
const paths = buildTreePathsWithRendered(
|
|
197
166
|
wrapAsComponentData(componentStructure),
|
|
198
167
|
mockRegistry,
|
|
199
|
-
navigationHistory
|
|
168
|
+
navigationHistory,
|
|
200
169
|
);
|
|
201
170
|
|
|
202
171
|
// Find CtaSection path (logical [0, 5])
|
|
203
|
-
const ctaSectionPathData = paths.find(
|
|
204
|
-
(p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 5
|
|
205
|
-
);
|
|
172
|
+
const ctaSectionPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 5);
|
|
206
173
|
|
|
207
174
|
expect(ctaSectionPathData).toBeDefined();
|
|
208
175
|
|
|
@@ -222,22 +189,25 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
222
189
|
component: 'Layout',
|
|
223
190
|
children: [
|
|
224
191
|
{ type: 'component', component: 'Section' }, // 0
|
|
225
|
-
{ type: 'slot' },
|
|
192
|
+
{ type: 'slot' }, // 1 - slot
|
|
226
193
|
{ type: 'component', component: 'CtaSection' }, // 2 - after slot
|
|
227
194
|
],
|
|
228
195
|
};
|
|
229
196
|
|
|
230
197
|
const mockRegistry = new Map([
|
|
231
|
-
[
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
198
|
+
[
|
|
199
|
+
'Layout',
|
|
200
|
+
{
|
|
201
|
+
component: {
|
|
202
|
+
structure: {
|
|
203
|
+
tag: 'div',
|
|
204
|
+
children: [
|
|
205
|
+
{ type: 'slot' }, // Layout's slot at [0, 0]
|
|
206
|
+
],
|
|
207
|
+
},
|
|
238
208
|
},
|
|
239
209
|
},
|
|
240
|
-
|
|
210
|
+
],
|
|
241
211
|
]);
|
|
242
212
|
|
|
243
213
|
// 3 children passed to slot
|
|
@@ -245,24 +215,18 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
245
215
|
{
|
|
246
216
|
componentInstancePath: [0],
|
|
247
217
|
componentInstanceRenderedPath: [0],
|
|
248
|
-
instanceChildren: [
|
|
249
|
-
{ tag: 'p' },
|
|
250
|
-
{ tag: 'p' },
|
|
251
|
-
{ tag: 'p' },
|
|
252
|
-
] as any,
|
|
218
|
+
instanceChildren: [{ tag: 'p' }, { tag: 'p' }, { tag: 'p' }] as any,
|
|
253
219
|
},
|
|
254
220
|
];
|
|
255
221
|
|
|
256
222
|
const paths = buildTreePathsWithRendered(
|
|
257
223
|
wrapAsComponentData(componentStructure),
|
|
258
224
|
mockRegistry,
|
|
259
|
-
navigationHistory
|
|
225
|
+
navigationHistory,
|
|
260
226
|
);
|
|
261
227
|
|
|
262
228
|
// Find CtaSection path (logical [0, 2])
|
|
263
|
-
const ctaSectionPathData = paths.find(
|
|
264
|
-
(p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2
|
|
265
|
-
);
|
|
229
|
+
const ctaSectionPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2);
|
|
266
230
|
|
|
267
231
|
expect(ctaSectionPathData).toBeDefined();
|
|
268
232
|
|
|
@@ -284,11 +248,7 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
284
248
|
// Card structure: Header (0), Slot (1), Footer (2)
|
|
285
249
|
const cardStructure = {
|
|
286
250
|
tag: 'div',
|
|
287
|
-
children: [
|
|
288
|
-
{ tag: 'div', children: 'Card Header' },
|
|
289
|
-
{ type: 'slot' },
|
|
290
|
-
{ tag: 'div', children: 'Card Footer' },
|
|
291
|
-
],
|
|
251
|
+
children: [{ tag: 'div', children: 'Card Header' }, { type: 'slot' }, { tag: 'div', children: 'Card Footer' }],
|
|
292
252
|
};
|
|
293
253
|
|
|
294
254
|
// Navigation history: first entered Section, then Card
|
|
@@ -316,16 +276,10 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
316
276
|
},
|
|
317
277
|
];
|
|
318
278
|
|
|
319
|
-
const paths = buildTreePathsWithRendered(
|
|
320
|
-
wrapAsComponentData(cardStructure),
|
|
321
|
-
undefined,
|
|
322
|
-
navigationHistory
|
|
323
|
-
);
|
|
279
|
+
const paths = buildTreePathsWithRendered(wrapAsComponentData(cardStructure), undefined, navigationHistory);
|
|
324
280
|
|
|
325
281
|
// Find Card's footer (logical [0, 2])
|
|
326
|
-
const footerPathData = paths.find(
|
|
327
|
-
(p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2
|
|
328
|
-
);
|
|
282
|
+
const footerPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2);
|
|
329
283
|
|
|
330
284
|
expect(footerPathData).toBeDefined();
|
|
331
285
|
|
|
@@ -342,11 +296,7 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
342
296
|
|
|
343
297
|
const componentC = {
|
|
344
298
|
tag: 'div',
|
|
345
|
-
children: [
|
|
346
|
-
{ tag: 'span', children: 'C Header' },
|
|
347
|
-
{ type: 'slot' },
|
|
348
|
-
{ tag: 'span', children: 'C Footer' },
|
|
349
|
-
],
|
|
299
|
+
children: [{ tag: 'span', children: 'C Header' }, { type: 'slot' }, { tag: 'span', children: 'C Footer' }],
|
|
350
300
|
};
|
|
351
301
|
|
|
352
302
|
// Each componentInstancePath is relative to the current view:
|
|
@@ -368,25 +318,14 @@ describe('PathBuilder - post-slot element path calculation', () => {
|
|
|
368
318
|
{
|
|
369
319
|
componentInstancePath: [0, 0], // C is first child in B's slot
|
|
370
320
|
componentInstanceRenderedPath: [0, 0],
|
|
371
|
-
instanceChildren: [
|
|
372
|
-
{ tag: 'div' },
|
|
373
|
-
{ tag: 'div' },
|
|
374
|
-
{ tag: 'div' },
|
|
375
|
-
{ tag: 'div' },
|
|
376
|
-
] as any, // C has 4 children
|
|
321
|
+
instanceChildren: [{ tag: 'div' }, { tag: 'div' }, { tag: 'div' }, { tag: 'div' }] as any, // C has 4 children
|
|
377
322
|
},
|
|
378
323
|
];
|
|
379
324
|
|
|
380
|
-
const paths = buildTreePathsWithRendered(
|
|
381
|
-
wrapAsComponentData(componentC),
|
|
382
|
-
undefined,
|
|
383
|
-
navigationHistory
|
|
384
|
-
);
|
|
325
|
+
const paths = buildTreePathsWithRendered(wrapAsComponentData(componentC), undefined, navigationHistory);
|
|
385
326
|
|
|
386
327
|
// Find C's footer (logical [0, 2])
|
|
387
|
-
const footerPathData = paths.find(
|
|
388
|
-
(p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2
|
|
389
|
-
);
|
|
328
|
+
const footerPathData = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 2);
|
|
390
329
|
|
|
391
330
|
expect(footerPathData).toBeDefined();
|
|
392
331
|
|
|
@@ -406,15 +345,11 @@ describe('computeCumulativeInstancePath', () => {
|
|
|
406
345
|
});
|
|
407
346
|
|
|
408
347
|
it('returns the first entry path verbatim when there is one entry', () => {
|
|
348
|
+
expect(computeCumulativeInstancePath([{ componentInstancePath: [0], componentInstanceRenderedPath: [0] }])).toEqual(
|
|
349
|
+
[0],
|
|
350
|
+
);
|
|
409
351
|
expect(
|
|
410
|
-
computeCumulativeInstancePath([
|
|
411
|
-
{ componentInstancePath: [0], componentInstanceRenderedPath: [0] },
|
|
412
|
-
]),
|
|
413
|
-
).toEqual([0]);
|
|
414
|
-
expect(
|
|
415
|
-
computeCumulativeInstancePath([
|
|
416
|
-
{ componentInstancePath: [0, 2], componentInstanceRenderedPath: [0, 2] },
|
|
417
|
-
]),
|
|
352
|
+
computeCumulativeInstancePath([{ componentInstancePath: [0, 2], componentInstanceRenderedPath: [0, 2] }]),
|
|
418
353
|
).toEqual([0, 2]);
|
|
419
354
|
});
|
|
420
355
|
|
|
@@ -436,10 +371,7 @@ describe('computeCumulativeInstancePath', () => {
|
|
|
436
371
|
|
|
437
372
|
it('falls back to componentInstancePath when componentInstanceRenderedPath is missing', () => {
|
|
438
373
|
expect(
|
|
439
|
-
computeCumulativeInstancePath([
|
|
440
|
-
{ componentInstancePath: [0, 2] },
|
|
441
|
-
{ componentInstancePath: [0, 1] },
|
|
442
|
-
]),
|
|
374
|
+
computeCumulativeInstancePath([{ componentInstancePath: [0, 2] }, { componentInstancePath: [0, 1] }]),
|
|
443
375
|
).toEqual([0, 2, 1]);
|
|
444
376
|
});
|
|
445
377
|
});
|
|
@@ -467,16 +399,10 @@ describe('slotRenderedPaths on slot entries', () => {
|
|
|
467
399
|
},
|
|
468
400
|
];
|
|
469
401
|
|
|
470
|
-
const paths = buildTreePathsWithRendered(
|
|
471
|
-
wrapAsComponentData(layoutStructure),
|
|
472
|
-
undefined,
|
|
473
|
-
navigationHistory,
|
|
474
|
-
);
|
|
402
|
+
const paths = buildTreePathsWithRendered(wrapAsComponentData(layoutStructure), undefined, navigationHistory);
|
|
475
403
|
|
|
476
404
|
// Slot's logical path is [0, 1] (second child of structure root).
|
|
477
|
-
const slotEntry = paths.find(
|
|
478
|
-
(p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 1,
|
|
479
|
-
);
|
|
405
|
+
const slotEntry = paths.find((p) => p.path.length === 2 && p.path[0] === 0 && p.path[1] === 1);
|
|
480
406
|
expect(slotEntry).toBeDefined();
|
|
481
407
|
expect(slotEntry!.renderedPath).toEqual([0, 1]);
|
|
482
408
|
// With 7 instance children, the slot occupies positions 1..7 under the
|
|
@@ -503,16 +429,8 @@ describe('slotRenderedPaths on slot entries', () => {
|
|
|
503
429
|
instanceChildren: [{ type: 'component' as const, component: 'Only' }] as any,
|
|
504
430
|
},
|
|
505
431
|
];
|
|
506
|
-
const noChildrenPaths = buildTreePathsWithRendered(
|
|
507
|
-
|
|
508
|
-
undefined,
|
|
509
|
-
noChildren,
|
|
510
|
-
);
|
|
511
|
-
const oneChildPaths = buildTreePathsWithRendered(
|
|
512
|
-
wrapAsComponentData(layoutStructure),
|
|
513
|
-
undefined,
|
|
514
|
-
oneChild,
|
|
515
|
-
);
|
|
432
|
+
const noChildrenPaths = buildTreePathsWithRendered(wrapAsComponentData(layoutStructure), undefined, noChildren);
|
|
433
|
+
const oneChildPaths = buildTreePathsWithRendered(wrapAsComponentData(layoutStructure), undefined, oneChild);
|
|
516
434
|
|
|
517
435
|
const slotEntryNo = noChildrenPaths.find((p) => p.path.length === 2 && p.path[1] === 1);
|
|
518
436
|
const slotEntryOne = oneChildPaths.find((p) => p.path.length === 2 && p.path[1] === 1);
|