diff --git a/projects/blocks-renderer-angular/src/lib/block/block.html b/projects/blocks-renderer-angular/src/lib/block/block.html
index 4f44278..ddc14a6 100644
--- a/projects/blocks-renderer-angular/src/lib/block/block.html
+++ b/projects/blocks-renderer-angular/src/lib/block/block.html
@@ -4,14 +4,16 @@
} @else if (isVoidType) {
- @switch (content.type) {
+ @let c = content();
+ @switch (c.type) {
@case ('image') {
-
+
}
}
} @else {
- @switch (content.type) {
+ @let c = content();
+ @switch (c.type) {
@case ('paragraph') {
@for (childNode of childrenNodes; track $index) {
@@ -54,7 +56,7 @@
}
@case ('heading') {
- @switch (content.level) {
+ @switch (c.level) {
@case (1) {
{{ plainText }}
}
@@ -76,15 +78,15 @@ {{ plainText }}
}
}
@case ('list') {
- @if (content.format === 'ordered') {
+ @if (c.format === 'ordered') {
- @for (childNode of content.children; track $index) {
+ @for (childNode of c.children; track $index) {
}
} @else {
- @for (childNode of content.children; track $index) {
+ @for (childNode of c.children; track $index) {
}
@@ -109,7 +111,7 @@ {{ plainText }}
}
@case ('link') {
-
+
@for (childNode of childrenNodes; track $index) {
@if (childNode.type === 'text') {
{
fixture = TestBed.createComponent(Block);
component = fixture.componentInstance;
- component.content = {
+ fixture.componentRef.setInput('content', {
type: 'paragraph',
children: [{ type: 'text', text: 'test' }],
- } as ParagraphBlockNode;
+ } as ParagraphBlockNode);
fixture.detectChanges();
await fixture.whenStable();
});
diff --git a/projects/blocks-renderer-angular/src/lib/block/block.ts b/projects/blocks-renderer-angular/src/lib/block/block.ts
index 85e7189..40d5ac4 100644
--- a/projects/blocks-renderer-angular/src/lib/block/block.ts
+++ b/projects/blocks-renderer-angular/src/lib/block/block.ts
@@ -1,9 +1,7 @@
-import { Component, Input, inject, OnInit } from '@angular/core';
+import { Component, input, inject, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import type { Node, DefaultInlineNode } from '../types';
-import {
- BlockComponent, ComponentsContextService
-} from '../components-context.service';
+import { BlockComponent, ComponentsContextService } from '../components-context.service';
import { Text } from '../text/text';
const VOID_TYPES = ['image'];
@@ -26,16 +24,16 @@ const KNOWN_BLOCK_TYPES = [
standalone: true,
})
export class Block implements OnInit {
- @Input() content!: Node;
+ content = input.required();
private componentsContext = inject(ComponentsContextService);
get blockComponent(): BlockComponent | undefined {
- return this.componentsContext.getBlockComponent(this.content.type);
+ return this.componentsContext.getBlockComponent(this.content().type);
}
get isKnownType(): boolean {
- return (KNOWN_BLOCK_TYPES as readonly string[]).includes(this.content.type);
+ return (KNOWN_BLOCK_TYPES as readonly string[]).includes(this.content().type);
}
get shouldRender(): boolean {
@@ -43,28 +41,31 @@ export class Block implements OnInit {
}
get isVoidType(): boolean {
- return VOID_TYPES.includes(this.content.type);
+ return VOID_TYPES.includes(this.content().type);
}
get isEmptyParagraph(): boolean {
+ const c = this.content();
return (
- this.content.type === 'paragraph' &&
- this.content.children.length === 1 &&
- this.content.children[0].type === 'text' &&
- this.content.children[0].text === ''
+ c.type === 'paragraph' &&
+ c.children.length === 1 &&
+ c.children[0].type === 'text' &&
+ c.children[0].text === ''
);
}
get plainText(): string | undefined {
- if (this.content.type === 'code' || this.content.type === 'heading') {
- return this.getPlainText(this.content.children);
+ const c = this.content();
+ if (c.type === 'code' || c.type === 'heading') {
+ return this.getPlainText(c.children);
}
return undefined;
}
get blockProps(): any {
- const { children, type, ...props } = this.content;
- if (this.content.type === 'code' || this.content.type === 'heading') {
+ const c = this.content();
+ const { children, type, ...props } = c;
+ if (c.type === 'code' || c.type === 'heading') {
return {
...props,
plainText: this.plainText,
@@ -74,7 +75,7 @@ export class Block implements OnInit {
}
get childrenNodes(): DefaultInlineNode[] {
- return this.content.children as DefaultInlineNode[];
+ return this.content().children as DefaultInlineNode[];
}
private getPlainText(children: DefaultInlineNode[]): string {
@@ -91,7 +92,7 @@ export class Block implements OnInit {
ngOnInit(): void {
if (!this.shouldRender) {
- this.componentsContext.addMissingBlockType(this.content.type);
+ this.componentsContext.addMissingBlockType(this.content().type);
}
}
}
diff --git a/projects/blocks-renderer-angular/src/lib/blocks-renderer/blocks-renderer.html b/projects/blocks-renderer-angular/src/lib/blocks-renderer/blocks-renderer.html
index 30098b5..f036f5d 100644
--- a/projects/blocks-renderer-angular/src/lib/blocks-renderer/blocks-renderer.html
+++ b/projects/blocks-renderer-angular/src/lib/blocks-renderer/blocks-renderer.html
@@ -1,3 +1,3 @@
-@for (block of content; track $index) {
+@for (block of content(); track $index) {
}
diff --git a/projects/blocks-renderer-angular/src/lib/blocks-renderer/blocks-renderer.ts b/projects/blocks-renderer-angular/src/lib/blocks-renderer/blocks-renderer.ts
index 41d0552..4cf4332 100644
--- a/projects/blocks-renderer-angular/src/lib/blocks-renderer/blocks-renderer.ts
+++ b/projects/blocks-renderer-angular/src/lib/blocks-renderer/blocks-renderer.ts
@@ -1,4 +1,4 @@
-import { Component, Input, OnInit, inject } from '@angular/core';
+import { Component, input, OnInit, inject } from '@angular/core';
import { CommonModule } from '@angular/common';
import type { BlocksContent } from '../types';
import {
@@ -16,19 +16,19 @@ import { Block } from '../block/block';
providers: [ComponentsContextService],
})
export class BlocksRenderer implements OnInit {
- @Input() content!: BlocksContent;
- @Input() blocks?: Partial;
- @Input() modifiers?: Partial;
+ content = input.required();
+ blocks = input>();
+ modifiers = input>();
private componentsContext = inject(ComponentsContextService);
ngOnInit(): void {
const blocks: BlocksComponents = {
- ...(this.blocks as BlocksComponents),
+ ...(this.blocks() as BlocksComponents),
};
const modifiers: ModifiersComponents = {
- ...(this.modifiers as ModifiersComponents),
+ ...(this.modifiers() as ModifiersComponents),
};
this.componentsContext.setContext({
diff --git a/projects/blocks-renderer-angular/src/lib/text/text.spec.ts b/projects/blocks-renderer-angular/src/lib/text/text.spec.ts
index bc02746..588ef40 100644
--- a/projects/blocks-renderer-angular/src/lib/text/text.spec.ts
+++ b/projects/blocks-renderer-angular/src/lib/text/text.spec.ts
@@ -15,7 +15,7 @@ describe('Text', () => {
fixture = TestBed.createComponent(Text);
component = fixture.componentInstance;
- component.text = 'test';
+ fixture.componentRef.setInput('text', 'test');
fixture.detectChanges();
await fixture.whenStable();
});
diff --git a/projects/blocks-renderer-angular/src/lib/text/text.ts b/projects/blocks-renderer-angular/src/lib/text/text.ts
index c6a415f..335325f 100644
--- a/projects/blocks-renderer-angular/src/lib/text/text.ts
+++ b/projects/blocks-renderer-angular/src/lib/text/text.ts
@@ -1,4 +1,4 @@
-import { Component, Input, inject } from '@angular/core';
+import { Component, input, inject } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
import type { Modifier } from '../types';
@@ -11,28 +11,28 @@ import { ComponentsContextService } from '../components-context.service';
standalone: true,
})
export class Text {
- @Input() text!: string;
- @Input() bold?: boolean;
- @Input() italic?: boolean;
- @Input() underline?: boolean;
- @Input() strikethrough?: boolean;
- @Input() code?: boolean;
+ text = input.required();
+ bold = input();
+ italic = input();
+ underline = input();
+ strikethrough = input();
+ code = input();
private componentsContext = inject(ComponentsContextService);
private sanitizer = inject(DomSanitizer);
get modifiers(): Modifier[] {
const mods: Modifier[] = [];
- if (this.bold) mods.push('bold');
- if (this.italic) mods.push('italic');
- if (this.underline) mods.push('underline');
- if (this.strikethrough) mods.push('strikethrough');
- if (this.code) mods.push('code');
+ if (this.bold()) mods.push('bold');
+ if (this.italic()) mods.push('italic');
+ if (this.underline()) mods.push('underline');
+ if (this.strikethrough()) mods.push('strikethrough');
+ if (this.code()) mods.push('code');
return mods;
}
get textParts(): string[] {
- return this.text.split(/\r?\n|\r/g);
+ return this.text().split(/\r?\n|\r/g);
}
getModifierComponent(modifierName: Modifier): any {