Anarchitecture Bricks Docs

Repository documentation hub for packages, guides, and generated references.

@anarchitects/forms-angular

Angular domain UI components for consuming the Anarchitecture Forms platform. This package wires together configuration, data-access, state, feature, and UI layers so Angular applications can request contract-driven form definitions, render them dynamically, and submit responses.

Developer + AI Agent Start Here

Features

Entry points

@anarchitects/forms-angular exposes several secondary entry points, each mapped to a specific layer in the 3-tier architecture:

Entry point Purpose
@anarchitects/forms-angular/config Injection tokens and provider helpers for base API configuration.
@anarchitects/forms-angular/data-access HTTP adapters that call the generated forms REST API.
@anarchitects/forms-angular/state Signal store that orchestrates requests, caching, and submission state.
@anarchitects/forms-angular/feature Feature components that combine state, UI, and orchestration.
@anarchitects/forms-angular/ui Presentational form/list/detail components with layout/template contracts.

Each layer can be consumed independently or as a combined stack, depending on what your app needs.

Installation

npm install @anarchitects/forms-angular @angular/common @angular/core @angular/forms @ngrx/operators @ngrx/signals rxjs

Peer requirements:

The internal @anarchitects/forms-ts and common UI packages are installed transitively.

Usage

Quick start

// app.config.ts
import { provideHttpClient, withFetch } from '@angular/common/http';
import { provideFormsDefaults } from '@anarchitects/forms-angular/config';

export const appConfig = {
  providers: [provideHttpClient(withFetch()), provideFormsDefaults()],
};
// feature shell component
import { Component } from '@angular/core';
import { AnarchitectsFeatureForm } from '@anarchitects/forms-angular/feature';

@Component({
  selector: 'app-contact-form',
  imports: [AnarchitectsFeatureForm],
  template: `
    <anarchitects-forms-feature-form
      [formId]="'contact_default'"
      [formVersion]="1"
      (submitted)="onSubmitted()"
    />
  `,
})
export class ContactFormRoute {
  onSubmitted(): void {
    console.log('Form was sent');
  }
}

Behind the scenes the feature component uses the signal store to request the form definition, renders it with the UI layer, and posts submissions via the data-access service.

Batteries-Included Contact Form

The primary forms-page flow is designed to work with near-zero custom CSS. Use pagePreset for layout/spacing/width defaults and header inputs for standalone page rendering.

// contact-form.route.ts
import { Component } from '@angular/core';
import { AnarchitectsFeatureForm } from '@anarchitects/forms-angular/feature';

@Component({
  selector: 'app-contact-form-route',
  imports: [AnarchitectsFeatureForm],
  template: `
    <anarchitects-forms-feature-form
      [formId]="'contact_default'"
      [formVersion]="1"
      [pagePreset]="{
        layoutVariant: 'stacked',
        maxInlineSize: '42rem',
        spacing: 'comfortable',
        actionAlignment: 'end',
      }"
      [pageTitle]="'Contact us'"
      [pageCaption]="
        'Get in touch and we will get back to you as soon as possible.'
      "
    />
  `,
})
export class ContactFormRoute {}

This route uses the default forms-page experience:

Advanced Header And Caption Composition

When a single title/caption pair is not enough, project additional composition regions directly into the feature or UI form component. These slots are additive and do not require a wrapper component.

Available slot names:

<anarchitects-forms-feature-form
  [formId]="'contact_default'"
  [formVersion]="1"
  [pageTitle]="'Support request'"
>
  <p anxSlot="app-forms-caption-top">
    Top caption A: Product support and onboarding
  </p>
  <p anxSlot="app-forms-caption-top">
    Top caption B: Billing and enterprise help
  </p>

  <p anxSlot="app-forms-caption-bottom">
    Bottom caption A: Typical response in one business day
  </p>
  <p anxSlot="app-forms-caption-bottom">
    Bottom caption B: Priority requests are triaged continuously
  </p>
</anarchitects-forms-feature-form>

Use pageTitle, pageSubtitle, and pageCaption for the easy path. Use slots when you need multiple caption blocks or a fully custom page intro.

Working with individual layers

You can opt into specific slices of the stack:

Publishing

This package is published as public npm modules. Secondary entry points are shipped as tree-shakeable ESM bundles so only the layers you import are included in your application bundle.

Development notes

License

Released under the Apache License 2.0.

Source Links