<templateSet group="MORPH Templates">
  <template name="morph-pascal" value="{{pascalCase $FEATURE_NAME$}}" description="Convert to PascalCase (UserAuth)" toReformat="false" toShortenFQNames="true">
    <variable name="FEATURE_NAME" expression="" defaultValue="&quot;FEATURE_NAME&quot;" alwaysStopAt="true" />
    <context>
      <option name="OTHER" value="true" />
    </context>
  </template>

  <template name="morph-camel" value="{{camelCase $FEATURE_NAME$}}" description="Convert to camelCase (userAuth)" toReformat="false" toShortenFQNames="true">
    <variable name="FEATURE_NAME" expression="" defaultValue="&quot;FEATURE_NAME&quot;" alwaysStopAt="true" />
    <context>
      <option name="OTHER" value="true" />
    </context>
  </template>

  <template name="morph-snake" value="{{snakeCase $FEATURE_NAME$}}" description="Convert to snake_case (user_auth)" toReformat="false" toShortenFQNames="true">
    <variable name="FEATURE_NAME" expression="" defaultValue="&quot;FEATURE_NAME&quot;" alwaysStopAt="true" />
    <context>
      <option name="OTHER" value="true" />
    </context>
  </template>

  <template name="morph-title" value="{{titleCase $FEATURE_NAME$}}" description="Convert to Title Case (User Auth)" toReformat="false" toShortenFQNames="true">
    <variable name="FEATURE_NAME" expression="" defaultValue="&quot;FEATURE_NAME&quot;" alwaysStopAt="true" />
    <context>
      <option name="OTHER" value="true" />
    </context>
  </template>

  <template name="morph-kebab" value="{{kebabCase $FEATURE_NAME$}}" description="Convert to kebab-case (user-auth)" toReformat="false" toShortenFQNames="true">
    <variable name="FEATURE_NAME" expression="" defaultValue="&quot;FEATURE_NAME&quot;" alwaysStopAt="true" />
    <context>
      <option name="OTHER" value="true" />
    </context>
  </template>

  <template name="morph-if" value="{{#if $CONDITION$}}&#10;  $END$&#10;{{/if}}" description="Handlebars if block" toReformat="false" toShortenFQNames="true">
    <variable name="CONDITION" expression="" defaultValue="&quot;condition&quot;" alwaysStopAt="true" />
    <context>
      <option name="OTHER" value="true" />
    </context>
  </template>

  <template name="morph-if-else" value="{{#if $CONDITION$}}&#10;  $TRUE_BRANCH$&#10;{{else}}&#10;  $FALSE_BRANCH$&#10;{{/if}}" description="Handlebars if-else block" toReformat="false" toShortenFQNames="true">
    <variable name="CONDITION" expression="" defaultValue="&quot;condition&quot;" alwaysStopAt="true" />
    <variable name="TRUE_BRANCH" expression="" defaultValue="&quot;&quot;" alwaysStopAt="true" />
    <variable name="FALSE_BRANCH" expression="" defaultValue="&quot;&quot;" alwaysStopAt="true" />
    <context>
      <option name="OTHER" value="true" />
    </context>
  </template>

  <template name="morph-each" value="{{#each $ITEMS$}}&#10;  {{this.$PROPERTY$}}&#10;{{/each}}" description="Handlebars each loop" toReformat="false" toShortenFQNames="true">
    <variable name="ITEMS" expression="" defaultValue="&quot;items&quot;" alwaysStopAt="true" />
    <variable name="PROPERTY" expression="" defaultValue="&quot;name&quot;" alwaysStopAt="true" />
    <context>
      <option name="OTHER" value="true" />
    </context>
  </template>

  <template name="morph-service" value="namespace {{NAMESPACE}}.Application.Features.{{pascalCase FEATURE_NAME}}.Services;&#10;&#10;public class {{pascalCase FEATURE_NAME}}Service(&#10;    I{{pascalCase FEATURE_NAME}}Repository repository,&#10;    ILogger&lt;{{pascalCase FEATURE_NAME}}Service&gt; logger) : I{{pascalCase FEATURE_NAME}}Service&#10;{&#10;    public async Task&lt;{{pascalCase FEATURE_NAME}}Dto?&gt; GetByIdAsync(int id, CancellationToken cancellationToken = default)&#10;    {&#10;        $END$&#10;    }&#10;}" description="MORPH .NET Service class template" toReformat="false" toShortenFQNames="true">
    <context>
      <option name="C_SHARP" value="true" />
    </context>
  </template>

  <template name="morph-repository" value="public class {{pascalCase FEATURE_NAME}}Repository(AppDbContext context) : I{{pascalCase FEATURE_NAME}}Repository&#10;{&#10;    private readonly DbSet&lt;{{pascalCase FEATURE_NAME}}&gt; _dbSet = context.Set&lt;{{pascalCase FEATURE_NAME}}&gt;();&#10;&#10;    public async Task&lt;{{pascalCase FEATURE_NAME}}?&gt; GetByIdAsync(int id, CancellationToken cancellationToken = default)&#10;    {&#10;        $END$&#10;    }&#10;}" description="MORPH .NET Repository class template" toReformat="false" toShortenFQNames="true">
    <context>
      <option name="C_SHARP" value="true" />
    </context>
  </template>

  <template name="morph-component" value="@page &quot;/{{kebabCase FEATURE_NAME}}&quot;&#10;@inject I{{pascalCase FEATURE_NAME}}Service {{pascalCase FEATURE_NAME}}Service&#10;@inject ILogger&lt;{{pascalCase FEATURE_NAME}}Page&gt; Logger&#10;&#10;&lt;PageTitle&gt;{{pascalCase FEATURE_NAME}}&lt;/PageTitle&gt;&#10;&#10;&lt;div class=&quot;container-fluid&quot;&gt;&#10;    $END$&#10;&lt;/div&gt;&#10;&#10;@code {&#10;&#10;}" description="MORPH Blazor component template" toReformat="false" toShortenFQNames="true">
    <context>
      <option name="HTML" value="true" />
    </context>
  </template>

  <template name="morph-migration" value="public partial class Add{{pascalCase FEATURE_NAME}} : Migration&#10;{&#10;    protected override void Up(MigrationBuilder migrationBuilder)&#10;    {&#10;        migrationBuilder.CreateTable(&#10;            name: &quot;{{pascalCase FEATURE_NAME}}s&quot;,&#10;            columns: table =&gt; new&#10;            {&#10;                Id = table.Column&lt;int&gt;(type: &quot;int&quot;, nullable: false)&#10;                    .Annotation(&quot;SqlServer:Identity&quot;, &quot;1, 1&quot;),&#10;                $END$&#10;            },&#10;            constraints: table =&gt;&#10;            {&#10;                table.PrimaryKey(&quot;PK_{{pascalCase FEATURE_NAME}}s&quot;, x =&gt; x.Id);&#10;            });&#10;    }&#10;&#10;    protected override void Down(MigrationBuilder migrationBuilder)&#10;    {&#10;        migrationBuilder.DropTable(name: &quot;{{pascalCase FEATURE_NAME}}s&quot;);&#10;    }&#10;}" description="MORPH EF Core migration template" toReformat="false" toShortenFQNames="true">
    <context>
      <option name="C_SHARP" value="true" />
    </context>
  </template>

  <template name="morph-ts-contract" value="export interface {{pascalCase FEATURE_NAME}} {&#10;  id: number;&#10;  $FIELD1$&#10;}&#10;&#10;export interface Create{{pascalCase FEATURE_NAME}}Request {&#10;  $FIELD2$&#10;}&#10;&#10;export interface Update{{pascalCase FEATURE_NAME}}Request {&#10;  $END$&#10;}" description="MORPH TypeScript contract template" toReformat="false" toShortenFQNames="true">
    <variable name="FIELD1" expression="" defaultValue="&quot;&quot;" alwaysStopAt="true" />
    <variable name="FIELD2" expression="" defaultValue="&quot;&quot;" alwaysStopAt="true" />
    <context>
      <option name="TypeScript" value="true" />
    </context>
  </template>
</templateSet>
