{"version":3,"file":"geometricpanda-ng-storyblok-render.mjs","sources":["../../../../projects/geometricpanda/ng-storyblok/render/render/load-component-chunk.ts","../../../../projects/geometricpanda/ng-storyblok/render/render/storyblok-blok.directive.ts","../../../../projects/geometricpanda/ng-storyblok/render/render/storyblok-content.directive.ts","../../../../projects/geometricpanda/ng-storyblok/render/root/storyblok-root.component.ts","../../../../projects/geometricpanda/ng-storyblok/render/root/storyblok-root.component.html","../../../../projects/geometricpanda/ng-storyblok/render/geometricpanda-ng-storyblok-render.ts"],"sourcesContent":["import { Type } from '@angular/core';\nimport { DefaultExport } from '@angular/router';\nimport { StoryblokBlok } from '@geometricpanda/ng-storyblok';\nimport { BlokLoader, BlokLoaders } from '@geometricpanda/ng-storyblok/tokens';\nimport { ISbComponentType } from 'storyblok-js-client';\n\nconst isWrappedDefaultExport = <T>(value: T | DefaultExport<T>): value is DefaultExport<T> =>\n    value && typeof value === 'object' && 'default' in value;\n\nconst maybeUnwrapDefaultExport = <T>(input: T | DefaultExport<T>): T =>\n    isWrappedDefaultExport(input) ? input['default'] : input;\n\nexport interface RenderOptions {\n    loaders: BlokLoaders;\n    fallbackLoader: BlokLoader;\n    blok: ISbComponentType<string>;\n}\n\nexport const loadComponentChunk = async ({ loaders, blok, fallbackLoader }: RenderOptions) => {\n    if (!blok.component) {\n        console.error(\n            `ngStoryblok - NO_BLOK_COMPONENT\n\nThe blok does not have a component defined.\n`,\n            blok,\n        );\n        throw new Error('ngStoryblok - NO_BLOK_COMPONENT');\n    }\n\n    const loader = loaders[blok.component];\n\n    if (!loader) {\n        const chunk = await fallbackLoader();\n        return maybeUnwrapDefaultExport(chunk) as Type<StoryblokBlok>;\n    }\n\n    const chunk = await loader();\n    return maybeUnwrapDefaultExport(chunk) as Type<StoryblokBlok>;\n};\n","import { ComponentRef, Directive, effect, inject, input, ViewContainerRef } from '@angular/core';\nimport { StoryblokBlok } from '@geometricpanda/ng-storyblok';\nimport {\n    NG_STORYBLOK_BRIDGE,\n    NG_STORYBLOK_FALLBACK_LOADER,\n    NG_STORYBLOK_LOADERS,\n} from '@geometricpanda/ng-storyblok/tokens';\nimport { storyblokEditable } from '@storyblok/js';\nimport { SbBlokData } from '@storyblok/js/dist/types/types';\nimport { ISbComponentType } from 'storyblok-js-client/src/interfaces';\nimport { loadComponentChunk } from '../render';\n\n@Directive({\n    selector: 'ng-container[storyblokBlok]',\n    standalone: true,\n})\nexport class StoryblokBlokDirective {\n    fallbackLoader = inject(NG_STORYBLOK_FALLBACK_LOADER);\n    loader = inject(NG_STORYBLOK_LOADERS);\n    bridge = inject(NG_STORYBLOK_BRIDGE, { optional: true });\n    viewContainerRef = inject(ViewContainerRef);\n    previousInstance?: ComponentRef<StoryblokBlok>;\n\n    blok = input.required<ISbComponentType<string>>({ alias: 'storyblokBlok' });\n\n    render = effect(async () => {\n        const blok = this.blok();\n\n        const Component = await loadComponentChunk({\n            fallbackLoader: this.fallbackLoader,\n            loaders: this.loader,\n            blok,\n        });\n\n        const instance = this.viewContainerRef.createComponent(Component);\n        instance.setInput('blok', blok);\n\n        this.previousInstance?.destroy();\n        this.previousInstance = instance;\n\n        if (this.bridge) {\n            const options = storyblokEditable(<SbBlokData>blok);\n            instance.location.nativeElement.setAttribute('data-blok-c', options['data-blok-c']);\n            instance.location.nativeElement.setAttribute('data-blok-uid', options['data-blok-uid']);\n            instance.location.nativeElement.classList.add('storyblok__outline');\n        }\n    });\n}\n","import { ComponentRef, Directive, effect, inject, input, ViewContainerRef } from '@angular/core';\nimport { StoryblokBlok } from '@geometricpanda/ng-storyblok';\nimport { NG_STORYBLOK_FALLBACK_LOADER, NG_STORYBLOK_LOADERS } from '@geometricpanda/ng-storyblok/tokens';\nimport { ISbStoryData } from 'storyblok-js-client/src/interfaces';\nimport { loadComponentChunk } from '../render';\n\n@Directive({\n    selector: 'ng-container[storyblokContent]',\n    standalone: true,\n})\nexport class StoryblokContentDirective {\n    fallbackLoader = inject(NG_STORYBLOK_FALLBACK_LOADER);\n    loader = inject(NG_STORYBLOK_LOADERS);\n    viewContainerRef = inject(ViewContainerRef);\n    previousInstance?: ComponentRef<StoryblokBlok>;\n\n    blok = input.required<ISbStoryData>({ alias: 'storyblokContent' });\n\n    render = effect(async () => {\n        const blok = this.blok();\n\n        const Component = await loadComponentChunk({\n            fallbackLoader: this.fallbackLoader,\n            loaders: this.loader,\n            blok: blok.content,\n        });\n\n        const instance = this.viewContainerRef.createComponent(Component);\n        instance.setInput('blok', blok);\n\n        this.previousInstance?.destroy();\n        this.previousInstance = instance;\n    });\n}\n","import { afterNextRender, ChangeDetectorRef, Component, computed, inject, input, signal } from '@angular/core';\nimport { NG_STORYBLOK_BRIDGE, NG_STORYBLOK_CONTEXT } from '@geometricpanda/ng-storyblok/tokens';\nimport { ISbStoryData } from 'storyblok-js-client/src/interfaces';\nimport { StoryblokContentDirective } from '../render';\n\n@Component({\n    selector: 'storyblok-root',\n    templateUrl: './storyblok-root.component.html',\n    standalone: true,\n    imports: [StoryblokContentDirective],\n    providers: [\n        {\n            provide: NG_STORYBLOK_CONTEXT,\n            useFactory: () => inject(StoryblokRootComponent).renderData,\n        },\n    ],\n})\nexport class StoryblokRootComponent {\n    cdRef = inject(ChangeDetectorRef);\n    BRIDGE = inject(NG_STORYBLOK_BRIDGE, { optional: true });\n\n    story = input.required<ISbStoryData>();\n    bridge = signal<undefined | ISbStoryData>(undefined);\n\n    renderData = computed<ISbStoryData>(() => {\n        const story = this.story();\n        const bridge = this.bridge();\n        return bridge ?? story;\n    });\n\n    constructor() {\n        afterNextRender(() => {\n            const story = this.story();\n            this.BRIDGE?.(story.id, (next) => {\n                this.bridge.set(next);\n                this.cdRef.detectChanges();\n            });\n        });\n    }\n}\n","<ng-container [storyblokContent]=\"renderData()\" />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}