chrome:shell.skip

generated:catalog.entry.getting-started.title

@xngui/core/config
@xngui/core/config

generated:catalog.entry.getting-started.description

docs:getting-started.section.installation

getting-started-doc:lead.installation

getting-started-doc:heading.adoption-path

getting-started-doc:paragraph.adoption-path

getting-started-doc:paragraph.peer-angular

  • getting-started-doc:pipeline.install.title

    pnpm add @xngui/core @xngui/styles …
  • getting-started-doc:pipeline.bootstrap.title

    provideX() in app.config.ts
  • getting-started-doc:pipeline.styles.title

    @import '@xngui/styles';
  • getting-started-doc:pipeline.component.title

    <x-button> + flat imports

getting-started-doc:heading.kit

getting-started-doc:paragraph.install-intro

terminal
pnpm add @xngui/core @xngui/styles @xngui/components/button

getting-started-doc:heading.setup-checklist

getting-started-doc:paragraph.setup-checklist

  • getting-started-doc:data.req.providex
    getting-started-doc:data.necessity.required

    getting-started-doc:data.req.providex-note

  • getting-started-doc:data.req.styles-import
    getting-started-doc:data.necessity.required

    getting-started-doc:data.req.styles-import-note

  • getting-started-doc:data.req.zoneless
    getting-started-doc:data.necessity.recommended

    getting-started-doc:data.req.zoneless-note

  • getting-started-doc:data.req.i18n-json
    getting-started-doc:data.necessity.conditional

    getting-started-doc:data.req.i18n-json-note

  • getting-started-doc:data.req.icon-font
    getting-started-doc:data.necessity.conditional

    getting-started-doc:data.req.icon-font-note

  • getting-started-doc:data.req.theme-services
    getting-started-doc:data.necessity.optional

    getting-started-doc:data.req.theme-services-note

  • getting-started-doc:data.req.custom-palette
    getting-started-doc:data.necessity.optional

    getting-started-doc:data.req.custom-palette-note

  • getting-started-doc:data.req.app-translations
    getting-started-doc:data.necessity.optional

    getting-started-doc:data.req.app-translations-note

docs:getting-started.section.app-bootstrap

getting-started-doc:lead.bootstrap

docs:getting-started.heading.providex

getting-started-doc:paragraph.providex

app.config.ts
import { ApplicationConfig, provideZonelessChangeDetection } from '@angular/core';import { provideRouter } from '@angular/router';import { provideX } from '@xngui/core/config';export const appConfig: ApplicationConfig = {  providers: [    provideZonelessChangeDetection(),    provideX({      config: {        size: 'md',        density: 'standard',        validateOn: 'touched',      },    }),  ],};

getting-started-doc:heading.config-defaults

getting-started-doc:paragraph.config-defaults

getting-started-doc:data.stat.size
md
getting-started-doc:data.stat.density
standard
getting-started-doc:data.stat.validate-on
touched
getting-started-doc:data.stat.ripple
true

docs:getting-started.section.styles-theme

getting-started-doc:lead.styles

docs:getting-started.heading.global-stylesheet

getting-started-doc:paragraph.global-styles

styles.css
@import '@xngui/styles';@import '@xngui/icons/lucide';

docs:getting-started.heading.dark-mode-palettes

getting-started-doc:paragraph.dark-mode-intro getting-started-doc:link.styles getting-started-doc:paragraph.dark-mode-mid getting-started-doc:link.themes getting-started-doc:paragraph.dark-mode-outro

theme.ts
import { XPaletteService, XThemeService } from '@xngui/theme';inject(XThemeService).setMode('dark');inject(XPaletteService).setPalette('ocean');
palettes.ts
import { provideXPalettes } from '@xngui/theme';provideXPalettes([  {    id: 'brand',    label: 'Brand',    description: 'Company colors.',    icon: '🎨',    tokens: { 'x-primary-500': 'oklch(0.55 0.14 250)' },  },]);

docs:getting-started.section.first-component

getting-started-doc:lead.first-component

docs:getting-started.heading.button-icon

getting-started-doc:paragraph.first-component

app.ts
import { Component } from '@angular/core';import { XButton } from '@xngui/components/button';import { XIcon } from '@xngui/icons';@Component({  selector: 'app-root',  imports: [XButton, XIcon],  template: `    <x-button variant="primary">      <x-icon name="star" xStart >      Get started    <x-button>  `,})export class App {}

docs:getting-started.section.icons

getting-started-doc:lead.icons

getting-started-doc:heading.icons-setup

getting-started-doc:paragraph.icons-setup getting-started-doc:link.icons-doc getting-started-doc:paragraph.icons-setup-outro

toolbar.html
import 'xngui/icons/lucide';<x-icon pack="lucide" name="star" /><x-icon pack="phosphor" name="heart" iconStyle="regular" />

docs:getting-started.section.i18n

getting-started-doc:lead.i18n

getting-started-doc:heading.i18n-when

getting-started-doc:paragraph.i18n-when

docs:getting-started.section.flat-imports

getting-started-doc:lead.imports

docs:getting-started.heading.import-paths

getting-started-doc:paragraph.import-paths

  • getting-started-doc:rule.do.labelgetting-started-doc:rule.do.body
  • getting-started-doc:rule.dont.label

    getting-started-doc:rule.dont.body

  • XButton@xngui/components/button
  • XInput@xngui/components/input
  • XForm@xngui/components/form
  • XIcon@xngui/icons
  • XDataSource@xngui/cdk/datasource
  • XSize@xngui/core
  • provideX@xngui/core/config
  • XTranslatePipe@xngui/core/i18n
  • XThemeService@xngui/theme
  • XPaletteService@xngui/theme
  • provideXPalettes@xngui/theme
  • configureXComponent@xngui/testing

docs:getting-started.section.ai-agents

getting-started-doc:lead.ai-agents

getting-started-doc:heading.mcp

getting-started-doc:paragraph.mcp getting-started-doc:link.mcp getting-started-doc:paragraph.mcp-outro

mcp.json
{  "mcpServers": {    "xngui": {      "command": "npx",      "args": ["-y", "@xngui/mcp"]    }  }}

getting-started-doc:heading.skills

getting-started-doc:paragraph.skills getting-started-doc:link.skills getting-started-doc:paragraph.skills-outro

terminal
npx -y @xngui/skills

docs:getting-started.section.next-steps

getting-started-doc:lead.next-steps

docs:getting-started.heading.continue-learning