@xiriframework/xiri-ng
v0.2.31
Published
Angular UI component library for the Xiri Framework
Downloads
1,584
Maintainers
Readme
@xiriframework/xiri-ng
Angular UI component library for the Xiri Framework — a JSON-driven approach where your backend defines the UI and xiri-ng renders it. Pairs with xiri-go (Go backend) or any backend that emits the expected JSON shape.
Installation
npm install @xiriframework/xiri-ngSetup
Register the Xiri services in your application config. api is the base URL prepended to HTTP requests made by XiriDataService:
import { ApplicationConfig } from '@angular/core';
import { provideHttpClient } from '@angular/common/http';
import { provideRouter } from '@angular/router';
import { provideXiriServices } from '@xiriframework/xiri-ng';
export const appConfig: ApplicationConfig = {
providers: [
provideHttpClient(),
provideRouter(routes),
provideXiriServices({ api: '/api/' }),
],
};The main entry point: xiri-dyncomponent
xiri-ng is designed around a central component that dynamically renders an array of JSON component definitions:
<xiri-dyncomponent [data]="components"></xiri-dyncomponent>import { XiriDynComponentComponent, XiriDynData } from '@xiriframework/xiri-ng';
components: XiriDynData[] = [
{ type: 'page-header', data: { title: 'Dashboard' } },
{ type: 'stat-grid', data: { stats: [...], columns: 4 } },
{ type: 'table', data: { url: '/api/devices', ... } },
];Individual components can also be used directly (all are standalone):
import { XiriTableComponent } from '@xiriframework/xiri-ng';
@Component({
selector: 'app-devices',
imports: [XiriTableComponent],
template: `<xiri-table [settings]="tableSettings" />`,
})
export class DevicesComponent { /* ... */ }Components
40+ standalone Material-Design components. Import individually for tree-shaking.
Forms & data
| Component | Use case |
| ---------------------------- | -------------------------------------------------- |
| XiriFormComponent | Dynamic form with backend-driven fields + submit |
| XiriFormFieldsComponent | Just the fields — full control over submit flow |
| XiriQueryComponent | Filter form + live results via xiri-dyncomponent |
| XiriTableComponent | Full data table — sort, paginate, filter, inline-edit, export |
| XiriRawTableComponent | Minimal table for static data |
| XiriDialogComponent | Modal dialogs (question / form / table / waiting) |
| XiriStepperComponent | Multi-step wizard |
Layout & navigation
| Component | Use case |
| ---------------------------- | -------------------------------------------------- |
| XiriPageHeaderComponent | Page title + subtitle + actions |
| XiriToolbarComponent | Toolbar with title, search, buttons |
| XiriSectionComponent | Collapsible content sections |
| XiriDividerComponent | Section divider with optional text/icon |
| XiriTabsComponent | Material tabs with lazy-loading |
| XiriExpansionComponent | Accordion panels with lazy-loading |
| XiriSidenavComponent | Side navigation with nested items |
| XiriBreadcrumbComponent | Breadcrumb trail |
Cards, lists, info
| Component | Use case |
| --------------------------------- | --------------------------------------------- |
| XiriCardComponent | Card container with header + content |
| XiriCardlinkComponent | Clickable card as a navigation link |
| XiriLinksComponent | List of navigation links/buttons |
| XiriListComponent | Sectioned list with favorites |
| XiriInfopointComponent | Info card (icon + text + optional link) |
| XiriImagetextComponent | Image + text card |
| XiriDescriptionListComponent | Key/value pairs in 1-3 columns |
Stats, progress, feedback
| Component | Use case |
| ----------------------------- | ------------------------------------------------- |
| XiriStatComponent | Single KPI tile with value + label + trend |
| XiriStatGridComponent | Grid of KPI tiles |
| XiriMultiprogressComponent | Multi-row progress bars |
| XiriTimelineComponent | Vertical or horizontal timeline |
| XiriEmptyStateComponent | Empty-state placeholder with optional action |
| XiriSkeletonComponent | Loading skeleton (text/circle/rect/table-row) |
| XiriAlertComponent | Alert / confirmation dialog content |
| XiriDoneComponent | Success checkmark |
| XiriErrorComponent | Error message display |
| XiriHeaderComponent | In-page section header |
Buttons & search
| Component | Use case |
| ----------------------------- | ------------------------------------------------- |
| XiriButtonComponent | Single button with action handling |
| XiriButtonlineComponent | Horizontal button line |
| XiriButtonstyleComponent | Internal — button visual renderer |
| XiriSearchComponent | Debounced search input |
Services
All services are providedIn: 'root' and are activated by provideXiriServices():
| Service | Purpose |
| ------------------------------- | ----------------------------------------------------------------- |
| XiriDataService | HTTP client with automatic snackbar response handling |
| XiriSnackbarService | Toast notifications (success, error, info, warning) |
| XiriResponseHandlerService | Parses backend responses (refresh, goto, table-update) centrally |
| XiriFormService | Form data fetch/submit + state persistence |
| XiriDownloadService | File download handling (blob → browser) |
| XiriDateService | Unix timestamp ↔ locale-formatted strings (via date-fns) |
| XiriNumberService | Locale-aware number formatting |
| XiriLocalStorageService | Typed localStorage wrapper with timestamp-based expiry |
| XiriSessionStorageService | Typed sessionStorage wrapper |
| ThemeService | Theme management (light / dark / auto) via signals |
Pipes
SafehtmlPipe(| safeHtml) — bypass DomSanitizer for trusted HTML. Never feed user input into this pipe.
Claude Code support
The main repository ships a Claude Code skill (xiri-ng-expert) that teaches Claude the full API, patterns, and conventions. See the main README for installation.
Peer dependencies
- Angular 21+
- Angular Material 21+
- Angular CDK 21+
- RxJS 7.8+
date-fns4+@date-fns/tz1+ngx-mat-select-search8+material-symbols≥ 0.40
License
Apache-2.0
