From 9790ffe91dd68ecbc4d0f0225bddf1aa6893d6c7 Mon Sep 17 00:00:00 2001 From: backtrack5r3 Date: Mon, 23 Feb 2026 15:02:05 +0100 Subject: [PATCH] refactor(angular): use [flagNameFeatureFlag] selector for generated directives Signed-off-by: backtrack5r3 --- internal/cmd/testdata/success_angular.golden | 174 +++++++++--------- internal/generators/angular/angular.tmpl | 36 ++-- .../specs/directives.spec.ts | 32 ++-- .../specs/ngtsc-compile.spec.ts | 12 +- 4 files changed, 127 insertions(+), 127 deletions(-) diff --git a/internal/cmd/testdata/success_angular.golden b/internal/cmd/testdata/success_angular.golden index b0deeed..bfccf38 100644 --- a/internal/cmd/testdata/success_angular.golden +++ b/internal/cmd/testdata/success_angular.golden @@ -272,12 +272,12 @@ export class GeneratedFeatureFlagService { * @example * Explicit `ng-template` (no `*`), bind inputs directly * ```html - * + * *
Content shown when flag is matched.
*
* @@ -288,7 +288,7 @@ export class GeneratedFeatureFlagService { * @example * Microsyntax `*` form, start with `let` * ```html - *
+ *
* Content shown when flag is matched. *
* ``` @@ -296,7 +296,7 @@ export class GeneratedFeatureFlagService { * @example * Simple `*` usage (no else/initializing/reconciling) * ```html - *
+ *
* Content shown when flag is matched. *
* ``` @@ -307,12 +307,12 @@ export class GeneratedFeatureFlagService { * `let v` or `let details = evaluationDetails` (or `let _` if you do not need the value) * before any `else`/`initializing`/`reconciling`/`default` segments. * This is an Angular microsyntax parsing constraint, not a directive limitation. - * `*discountPercentage="else elseTemplate"` will not parse because `else` is a + * `*discountPercentageFeatureFlag="else elseTemplate"` will not parse because `else` is a * secondary segment. If you do not need the value, use `let _`, or use the * explicit `ng-template` form above. */ @Directive({ - selector: '[discountPercentage]', + selector: '[discountPercentageFeatureFlag]', standalone: true, }) export class DiscountPercentageFeatureFlagDirective extends FeatureFlagDirective implements OnChanges { @@ -323,7 +323,7 @@ export class DiscountPercentageFeatureFlagDirective extends FeatureFlagDirective /** * The expected value of this number feature flag, for which the `then` template should be rendered. */ - @Input({ required: false }) discountPercentageValue?: number; + @Input({ required: false }) discountPercentageFeatureFlagValue?: number; constructor() { super(); @@ -336,14 +336,14 @@ export class DiscountPercentageFeatureFlagDirective extends FeatureFlagDirective override ngOnChanges() { super.ngOnChanges(); - this._featureFlagValue = this.discountPercentageValue; + this._featureFlagValue = this.discountPercentageFeatureFlagValue; } /** * The domain of the number feature flag. */ @Input({ required: false }) - set discountPercentageDomain(domain: string | undefined) { + set discountPercentageFeatureFlagDomain(domain: string | undefined) { super.featureFlagDomain = domain; } @@ -354,7 +354,7 @@ export class DiscountPercentageFeatureFlagDirective extends FeatureFlagDirective * Defaults to true. */ @Input({ required: false }) - set discountPercentageUpdateOnConfigurationChanged(enabled: boolean | undefined) { + set discountPercentageFeatureFlagUpdateOnConfigurationChanged(enabled: boolean | undefined) { this._updateOnConfigurationChanged = enabled ?? true; } @@ -365,7 +365,7 @@ export class DiscountPercentageFeatureFlagDirective extends FeatureFlagDirective * Defaults to true. */ @Input({ required: false }) - set discountPercentageUpdateOnContextChanged(enabled: boolean | undefined) { + set discountPercentageFeatureFlagUpdateOnContextChanged(enabled: boolean | undefined) { this._updateOnContextChanged = enabled ?? true; } @@ -373,7 +373,7 @@ export class DiscountPercentageFeatureFlagDirective extends FeatureFlagDirective * Template to be displayed when the feature flag does not match value. */ @Input() - set discountPercentageElse(tpl: TemplateRef>) { + set discountPercentageFeatureFlagElse(tpl: TemplateRef>) { this._elseTemplateRef = tpl; } @@ -381,7 +381,7 @@ export class DiscountPercentageFeatureFlagDirective extends FeatureFlagDirective * Template to be displayed when the provider is not ready. */ @Input() - set discountPercentageInitializing(tpl: TemplateRef>) { + set discountPercentageFeatureFlagInitializing(tpl: TemplateRef>) { this._initializingTemplateRef = tpl; } @@ -389,7 +389,7 @@ export class DiscountPercentageFeatureFlagDirective extends FeatureFlagDirective * Template to be displayed when the provider is reconciling. */ @Input() - set discountPercentageReconciling(tpl: TemplateRef>) { + set discountPercentageFeatureFlagReconciling(tpl: TemplateRef>) { this._reconcilingTemplateRef = tpl; } } @@ -413,11 +413,11 @@ export class DiscountPercentageFeatureFlagDirective extends FeatureFlagDirective * @example * Explicit `ng-template` (no `*`), bind inputs directly * ```html - * + * *
Content shown when flag is enabled.
*
* @@ -428,7 +428,7 @@ export class DiscountPercentageFeatureFlagDirective extends FeatureFlagDirective * @example * Microsyntax `*` form, start with `let` * ```html - *
+ *
* Content shown when flag is enabled. *
* ``` @@ -436,7 +436,7 @@ export class DiscountPercentageFeatureFlagDirective extends FeatureFlagDirective * @example * Simple `*` usage (no else/initializing/reconciling) * ```html - *
+ *
* Content shown when flag is enabled. *
* ``` @@ -447,12 +447,12 @@ export class DiscountPercentageFeatureFlagDirective extends FeatureFlagDirective * `let v` or `let details = evaluationDetails` (or `let _` if you do not need the value) * before any `else`/`initializing`/`reconciling`/`default` segments. * This is an Angular microsyntax parsing constraint, not a directive limitation. - * `*enableFeatureA="else elseTemplate"` will not parse because `else` is a + * `*enableFeatureAFeatureFlag="else elseTemplate"` will not parse because `else` is a * secondary segment. If you do not need the value, use `let _`, or use the * explicit `ng-template` form above. */ @Directive({ - selector: '[enableFeatureA]', + selector: '[enableFeatureAFeatureFlag]', standalone: true, }) export class EnableFeatureAFeatureFlagDirective extends FeatureFlagDirective implements OnChanges { @@ -474,7 +474,7 @@ export class EnableFeatureAFeatureFlagDirective extends FeatureFlagDirective>) { + set enableFeatureAFeatureFlagElse(tpl: TemplateRef>) { this._elseTemplateRef = tpl; } @@ -512,7 +512,7 @@ export class EnableFeatureAFeatureFlagDirective extends FeatureFlagDirective>) { + set enableFeatureAFeatureFlagInitializing(tpl: TemplateRef>) { this._initializingTemplateRef = tpl; } @@ -520,7 +520,7 @@ export class EnableFeatureAFeatureFlagDirective extends FeatureFlagDirective>) { + set enableFeatureAFeatureFlagReconciling(tpl: TemplateRef>) { this._reconcilingTemplateRef = tpl; } } @@ -544,12 +544,12 @@ export class EnableFeatureAFeatureFlagDirective extends FeatureFlagDirective + * *
Content shown when flag is matched.
*
* @@ -560,7 +560,7 @@ export class EnableFeatureAFeatureFlagDirective extends FeatureFlagDirective + *
* Content shown when flag is matched. *
* ``` @@ -568,7 +568,7 @@ export class EnableFeatureAFeatureFlagDirective extends FeatureFlagDirective + *
* Content shown when flag is matched. *
* ``` @@ -579,12 +579,12 @@ export class EnableFeatureAFeatureFlagDirective extends FeatureFlagDirective implements OnChanges { @@ -595,7 +595,7 @@ export class GreetingMessageFeatureFlagDirective extends FeatureFlagDirective>) { + set greetingMessageFeatureFlagElse(tpl: TemplateRef>) { this._elseTemplateRef = tpl; } @@ -653,7 +653,7 @@ export class GreetingMessageFeatureFlagDirective extends FeatureFlagDirective>) { + set greetingMessageFeatureFlagInitializing(tpl: TemplateRef>) { this._initializingTemplateRef = tpl; } @@ -661,7 +661,7 @@ export class GreetingMessageFeatureFlagDirective extends FeatureFlagDirective>) { + set greetingMessageFeatureFlagReconciling(tpl: TemplateRef>) { this._reconcilingTemplateRef = tpl; } } @@ -685,12 +685,12 @@ export class GreetingMessageFeatureFlagDirective extends FeatureFlagDirective + * *
Content shown when flag is matched.
*
* @@ -701,7 +701,7 @@ export class GreetingMessageFeatureFlagDirective extends FeatureFlagDirective + *
* Content shown when flag is matched. *
* ``` @@ -709,7 +709,7 @@ export class GreetingMessageFeatureFlagDirective extends FeatureFlagDirective + *
* Content shown when flag is matched. *
* ``` @@ -720,12 +720,12 @@ export class GreetingMessageFeatureFlagDirective extends FeatureFlagDirective implements OnChanges { @@ -736,7 +736,7 @@ export class ThemeCustomizationFeatureFlagDirective extends FeatureFlagDirective /** * The expected value of this object feature flag, for which the `then` template should be rendered. */ - @Input({ required: false }) themeCustomizationValue?: JsonValue; + @Input({ required: false }) themeCustomizationFeatureFlagValue?: JsonValue; constructor() { super(); @@ -749,14 +749,14 @@ export class ThemeCustomizationFeatureFlagDirective extends FeatureFlagDirective override ngOnChanges() { super.ngOnChanges(); - this._featureFlagValue = this.themeCustomizationValue; + this._featureFlagValue = this.themeCustomizationFeatureFlagValue; } /** * The domain of the object feature flag. */ @Input({ required: false }) - set themeCustomizationDomain(domain: string | undefined) { + set themeCustomizationFeatureFlagDomain(domain: string | undefined) { super.featureFlagDomain = domain; } @@ -767,7 +767,7 @@ export class ThemeCustomizationFeatureFlagDirective extends FeatureFlagDirective * Defaults to true. */ @Input({ required: false }) - set themeCustomizationUpdateOnConfigurationChanged(enabled: boolean | undefined) { + set themeCustomizationFeatureFlagUpdateOnConfigurationChanged(enabled: boolean | undefined) { this._updateOnConfigurationChanged = enabled ?? true; } @@ -778,7 +778,7 @@ export class ThemeCustomizationFeatureFlagDirective extends FeatureFlagDirective * Defaults to true. */ @Input({ required: false }) - set themeCustomizationUpdateOnContextChanged(enabled: boolean | undefined) { + set themeCustomizationFeatureFlagUpdateOnContextChanged(enabled: boolean | undefined) { this._updateOnContextChanged = enabled ?? true; } @@ -786,7 +786,7 @@ export class ThemeCustomizationFeatureFlagDirective extends FeatureFlagDirective * Template to be displayed when the feature flag does not match value. */ @Input() - set themeCustomizationElse(tpl: TemplateRef>) { + set themeCustomizationFeatureFlagElse(tpl: TemplateRef>) { this._elseTemplateRef = tpl; } @@ -794,7 +794,7 @@ export class ThemeCustomizationFeatureFlagDirective extends FeatureFlagDirective * Template to be displayed when the provider is not ready. */ @Input() - set themeCustomizationInitializing(tpl: TemplateRef>) { + set themeCustomizationFeatureFlagInitializing(tpl: TemplateRef>) { this._initializingTemplateRef = tpl; } @@ -802,7 +802,7 @@ export class ThemeCustomizationFeatureFlagDirective extends FeatureFlagDirective * Template to be displayed when the provider is reconciling. */ @Input() - set themeCustomizationReconciling(tpl: TemplateRef>) { + set themeCustomizationFeatureFlagReconciling(tpl: TemplateRef>) { this._reconcilingTemplateRef = tpl; } } @@ -826,12 +826,12 @@ export class ThemeCustomizationFeatureFlagDirective extends FeatureFlagDirective * @example * Explicit `ng-template` (no `*`), bind inputs directly * ```html - * + * *
Content shown when flag is matched.
*
* @@ -842,7 +842,7 @@ export class ThemeCustomizationFeatureFlagDirective extends FeatureFlagDirective * @example * Microsyntax `*` form, start with `let` * ```html - *
+ *
* Content shown when flag is matched. *
* ``` @@ -850,7 +850,7 @@ export class ThemeCustomizationFeatureFlagDirective extends FeatureFlagDirective * @example * Simple `*` usage (no else/initializing/reconciling) * ```html - *
+ *
* Content shown when flag is matched. *
* ``` @@ -861,12 +861,12 @@ export class ThemeCustomizationFeatureFlagDirective extends FeatureFlagDirective * `let v` or `let details = evaluationDetails` (or `let _` if you do not need the value) * before any `else`/`initializing`/`reconciling`/`default` segments. * This is an Angular microsyntax parsing constraint, not a directive limitation. - * `*usernameMaxLength="else elseTemplate"` will not parse because `else` is a + * `*usernameMaxLengthFeatureFlag="else elseTemplate"` will not parse because `else` is a * secondary segment. If you do not need the value, use `let _`, or use the * explicit `ng-template` form above. */ @Directive({ - selector: '[usernameMaxLength]', + selector: '[usernameMaxLengthFeatureFlag]', standalone: true, }) export class UsernameMaxLengthFeatureFlagDirective extends FeatureFlagDirective implements OnChanges { @@ -877,7 +877,7 @@ export class UsernameMaxLengthFeatureFlagDirective extends FeatureFlagDirective< /** * The expected value of this number feature flag, for which the `then` template should be rendered. */ - @Input({ required: false }) usernameMaxLengthValue?: number; + @Input({ required: false }) usernameMaxLengthFeatureFlagValue?: number; constructor() { super(); @@ -890,14 +890,14 @@ export class UsernameMaxLengthFeatureFlagDirective extends FeatureFlagDirective< override ngOnChanges() { super.ngOnChanges(); - this._featureFlagValue = this.usernameMaxLengthValue; + this._featureFlagValue = this.usernameMaxLengthFeatureFlagValue; } /** * The domain of the number feature flag. */ @Input({ required: false }) - set usernameMaxLengthDomain(domain: string | undefined) { + set usernameMaxLengthFeatureFlagDomain(domain: string | undefined) { super.featureFlagDomain = domain; } @@ -908,7 +908,7 @@ export class UsernameMaxLengthFeatureFlagDirective extends FeatureFlagDirective< * Defaults to true. */ @Input({ required: false }) - set usernameMaxLengthUpdateOnConfigurationChanged(enabled: boolean | undefined) { + set usernameMaxLengthFeatureFlagUpdateOnConfigurationChanged(enabled: boolean | undefined) { this._updateOnConfigurationChanged = enabled ?? true; } @@ -919,7 +919,7 @@ export class UsernameMaxLengthFeatureFlagDirective extends FeatureFlagDirective< * Defaults to true. */ @Input({ required: false }) - set usernameMaxLengthUpdateOnContextChanged(enabled: boolean | undefined) { + set usernameMaxLengthFeatureFlagUpdateOnContextChanged(enabled: boolean | undefined) { this._updateOnContextChanged = enabled ?? true; } @@ -927,7 +927,7 @@ export class UsernameMaxLengthFeatureFlagDirective extends FeatureFlagDirective< * Template to be displayed when the feature flag does not match value. */ @Input() - set usernameMaxLengthElse(tpl: TemplateRef>) { + set usernameMaxLengthFeatureFlagElse(tpl: TemplateRef>) { this._elseTemplateRef = tpl; } @@ -935,7 +935,7 @@ export class UsernameMaxLengthFeatureFlagDirective extends FeatureFlagDirective< * Template to be displayed when the provider is not ready. */ @Input() - set usernameMaxLengthInitializing(tpl: TemplateRef>) { + set usernameMaxLengthFeatureFlagInitializing(tpl: TemplateRef>) { this._initializingTemplateRef = tpl; } @@ -943,7 +943,7 @@ export class UsernameMaxLengthFeatureFlagDirective extends FeatureFlagDirective< * Template to be displayed when the provider is reconciling. */ @Input() - set usernameMaxLengthReconciling(tpl: TemplateRef>) { + set usernameMaxLengthFeatureFlagReconciling(tpl: TemplateRef>) { this._reconcilingTemplateRef = tpl; } } diff --git a/internal/generators/angular/angular.tmpl b/internal/generators/angular/angular.tmpl index f0766ff..e3a563a 100644 --- a/internal/generators/angular/angular.tmpl +++ b/internal/generators/angular/angular.tmpl @@ -134,12 +134,12 @@ export class GeneratedFeatureFlagService { * @example * Explicit `ng-template` (no `*`), bind inputs directly * ```html - * + * *
Content shown when flag is {{ if eq $type "boolean" }}enabled{{ else }}matched{{ end }}.
*
* @@ -150,7 +150,7 @@ export class GeneratedFeatureFlagService { * @example * Microsyntax `*` form, start with `let` * ```html - *
+ *
* Content shown when flag is {{ if eq $type "boolean" }}enabled{{ else }}matched{{ end }}. *
* ``` @@ -158,7 +158,7 @@ export class GeneratedFeatureFlagService { * @example * Simple `*` usage (no else/initializing/reconciling) * ```html - *
+ *
* Content shown when flag is {{ if eq $type "boolean" }}enabled{{ else }}matched{{ end }}. *
* ``` @@ -169,12 +169,12 @@ export class GeneratedFeatureFlagService { * `let v` or `let details = evaluationDetails` (or `let _` if you do not need the value) * before any `else`/`initializing`/`reconciling`/`default` segments. * This is an Angular microsyntax parsing constraint, not a directive limitation. - * `*{{ .Key | ToCamel }}="else elseTemplate"` will not parse because `else` is a + * `*{{ .Key | ToCamel }}FeatureFlag="else elseTemplate"` will not parse because `else` is a * secondary segment. If you do not need the value, use `let _`, or use the * explicit `ng-template` form above. */ @Directive({ - selector: '[{{ .Key | ToCamel }}]', + selector: '[{{ .Key | ToCamel }}FeatureFlag]', standalone: true, }) export class {{ .Key | ToPascal }}FeatureFlagDirective extends FeatureFlagDirective<{{ if eq $type "object" }}JsonValue{{ else }}{{ $type }}{{ end }}> implements OnChanges { @@ -187,7 +187,7 @@ export class {{ .Key | ToPascal }}FeatureFlagDirective extends FeatureFlagDirect /** * The expected value of this {{ $type }} feature flag, for which the `then` template should be rendered. */ - @Input({ required: false }) {{ .Key | ToCamel }}Value?: {{ if eq $type "object" }}JsonValue{{ else }}{{ $type }}{{ end }}; + @Input({ required: false }) {{ .Key | ToCamel }}FeatureFlagValue?: {{ if eq $type "object" }}JsonValue{{ else }}{{ $type }}{{ end }}; {{- end }} constructor() { @@ -205,7 +205,7 @@ export class {{ .Key | ToPascal }}FeatureFlagDirective extends FeatureFlagDirect override ngOnChanges() { super.ngOnChanges(); - this._featureFlagValue = this.{{ .Key | ToCamel }}Value; + this._featureFlagValue = this.{{ .Key | ToCamel }}FeatureFlagValue; } {{- end }} @@ -213,7 +213,7 @@ export class {{ .Key | ToPascal }}FeatureFlagDirective extends FeatureFlagDirect * The domain of the {{ $type }} feature flag. */ @Input({ required: false }) - set {{ .Key | ToCamel }}Domain(domain: string | undefined) { + set {{ .Key | ToCamel }}FeatureFlagDomain(domain: string | undefined) { super.featureFlagDomain = domain; } @@ -224,7 +224,7 @@ export class {{ .Key | ToPascal }}FeatureFlagDirective extends FeatureFlagDirect * Defaults to true. */ @Input({ required: false }) - set {{ .Key | ToCamel }}UpdateOnConfigurationChanged(enabled: boolean | undefined) { + set {{ .Key | ToCamel }}FeatureFlagUpdateOnConfigurationChanged(enabled: boolean | undefined) { this._updateOnConfigurationChanged = enabled ?? true; } @@ -235,7 +235,7 @@ export class {{ .Key | ToPascal }}FeatureFlagDirective extends FeatureFlagDirect * Defaults to true. */ @Input({ required: false }) - set {{ .Key | ToCamel }}UpdateOnContextChanged(enabled: boolean | undefined) { + set {{ .Key | ToCamel }}FeatureFlagUpdateOnContextChanged(enabled: boolean | undefined) { this._updateOnContextChanged = enabled ?? true; } @@ -243,7 +243,7 @@ export class {{ .Key | ToPascal }}FeatureFlagDirective extends FeatureFlagDirect * Template to be displayed when the feature flag {{ if eq $type "boolean" }}is false{{ else }}does not match value{{ end }}. */ @Input() - set {{ .Key | ToCamel }}Else(tpl: TemplateRef>) { + set {{ .Key | ToCamel }}FeatureFlagElse(tpl: TemplateRef>) { this._elseTemplateRef = tpl; } @@ -251,7 +251,7 @@ export class {{ .Key | ToPascal }}FeatureFlagDirective extends FeatureFlagDirect * Template to be displayed when the provider is not ready. */ @Input() - set {{ .Key | ToCamel }}Initializing(tpl: TemplateRef>) { + set {{ .Key | ToCamel }}FeatureFlagInitializing(tpl: TemplateRef>) { this._initializingTemplateRef = tpl; } @@ -259,7 +259,7 @@ export class {{ .Key | ToPascal }}FeatureFlagDirective extends FeatureFlagDirect * Template to be displayed when the provider is reconciling. */ @Input() - set {{ .Key | ToCamel }}Reconciling(tpl: TemplateRef>) { + set {{ .Key | ToCamel }}FeatureFlagReconciling(tpl: TemplateRef>) { this._reconcilingTemplateRef = tpl; } } diff --git a/test/angular-integration/specs/directives.spec.ts b/test/angular-integration/specs/directives.spec.ts index cd6ef5c..5f646ab 100644 --- a/test/angular-integration/specs/directives.spec.ts +++ b/test/angular-integration/specs/directives.spec.ts @@ -21,7 +21,7 @@ import type { JsonValue } from "@openfeature/angular-sdk"; imports: [EnableFeatureAFeatureFlagDirective], template: `
- +
Feature A is enabled
@@ -38,7 +38,7 @@ class TestBooleanComponent { imports: [EnableFeatureAFeatureFlagDirective], template: `
-
+
Feature A is enabled
@@ -54,7 +54,7 @@ class TestBooleanSimpleComponent { imports: [GreetingMessageFeatureFlagDirective], template: `
- +
Greeting: {{ value }}
@@ -71,7 +71,7 @@ class TestStringComponent { imports: [DiscountPercentageFeatureFlagDirective], template: `
- +
Discount: {{ value }}
@@ -88,7 +88,7 @@ class TestNumberComponent { imports: [UsernameMaxLengthFeatureFlagDirective], template: `
- +
Max Length: {{ value }}
@@ -105,7 +105,7 @@ class TestUsernameComponent { imports: [ThemeCustomizationFeatureFlagDirective, JsonPipe], template: `
- +
Theme: {{ value | json }}
@@ -122,27 +122,27 @@ class TestObjectComponent { imports: [GeneratedFeatureFlagDirectives], template: `
- +
Boolean flag: {{ v }}
- +
String flag: {{ v }}
- +
Number flag: {{ v }}
- +
Username flag: {{ v }}
- +
Object flag
@@ -160,7 +160,7 @@ class TestAllDirectivesComponent { template: `
Feature A is enabled
@@ -182,7 +182,7 @@ class TestBooleanElseComponent { template: `
+
Feature A enabled
\`, @@ -120,8 +120,8 @@ import { EnableFeatureAFeatureFlagDirective } from "@generated/openfeature.gener Else + enableFeatureAFeatureFlag + [enableFeatureAFeatureFlagElse]="elseTemplate">
Feature A enabled
\`, @@ -141,7 +141,7 @@ import { EnableFeatureAFeatureFlagDirective } from "@generated/openfeature.gener selector: "test-host", imports: [EnableFeatureAFeatureFlagDirective], template: \` -
Feature A enabled
+
Feature A enabled
\`, }) export class SimpleMicrosyntaxHostComponent {} @@ -164,7 +164,7 @@ import { GreetingMessageFeatureFlagDirective } from "@generated/openfeature.gene Reconciling
+ *greetingMessageFeatureFlag="let value; let details = evaluationDetails; default: expectedValue; else: elseTemplate; initializing: initTemplate; reconciling: reconcilingTemplate"> Flag value: {{ value }}
\`, @@ -196,7 +196,7 @@ export class CustomWidgetComponent { imports: [CustomWidgetComponent, GreetingMessageFeatureFlagDirective], template: \` \`, })