generated:catalog.entry.getting-started.title
@xngui/core/config@xngui/core/configgenerated: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.tsgetting-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
terminalpnpm add @xngui/core @xngui/styles @xngui/components/buttongetting-started-doc:heading.setup-checklist
getting-started-doc:paragraph.setup-checklist
- getting-started-doc:data.req.providexgetting-started-doc:data.necessity.required
getting-started-doc:data.req.providex-note
- getting-started-doc:data.req.styles-importgetting-started-doc:data.necessity.required
getting-started-doc:data.req.styles-import-note
- getting-started-doc:data.req.zonelessgetting-started-doc:data.necessity.recommended
getting-started-doc:data.req.zoneless-note
- getting-started-doc:data.req.i18n-jsongetting-started-doc:data.necessity.conditional
getting-started-doc:data.req.i18n-json-note
- getting-started-doc:data.req.icon-fontgetting-started-doc:data.necessity.conditional
getting-started-doc:data.req.icon-font-note
- getting-started-doc:data.req.theme-servicesgetting-started-doc:data.necessity.optional
getting-started-doc:data.req.theme-services-note
- getting-started-doc:data.req.custom-palettegetting-started-doc:data.necessity.optional
getting-started-doc:data.req.custom-palette-note
- getting-started-doc:data.req.app-translationsgetting-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.tsimport { 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.tsimport { XPaletteService, XThemeService } from '@xngui/theme';inject(XThemeService).setMode('dark');inject(XPaletteService).setPalette('ocean');palettes.tsimport { 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.tsimport { 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.htmlimport '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
getting-started-doc:paragraph.i18n-assets-intro
getting-started-doc:path.project-json.title
getting-started-doc:path.project-json.tagline
project.json"assets": [ { "glob": "**/*", "input": "apps/my-app/public" }, { "glob": "*.json", "input": "node_modules/@xngui/i18n/locales", "output": "i18n"}]getting-started-doc:path.angular-json.title
getting-started-doc:path.angular-json.tagline
angular.json"assets": [ "src/favicon.ico", "src/assets", { "glob": "*.json", "input": "node_modules/@xngui/i18n/locales", "output": "/i18n" }]getting-started-doc:paragraph.i18n-serve-path
getting-started-doc:paragraph.i18n-bootstrap
app.config.tsimport { provideX } from '@xngui/core/config';import { createFetchI18nLoader } from '@xngui/core/i18n';provideX({ i18n: { languages: ['en', 'fa', 'ar'], defaultLocale: 'en', fallbackLocale: 'en', packs: ['x'], loader: createFetchI18nLoader({ baseUrl: '/i18n' }), },});app-packs.tsprovideX({ i18n: { languages: ['en', 'fa'], defaultLocale: 'en', fallbackLocale: 'en', packs: ['x', 'app'], defaultPack: 'app', loader: createFetchI18nLoader({ baseUrl: '/i18n' }), },});app-translations.tsimport { provideXTranslations } from '@xngui/core/i18n';provideXTranslations({ 'app.title': { en: 'My app', fa: 'برنامه من' },});getting-started-doc:paragraph.i18n-app-packs getting-started-doc:paragraph.i18n-eager
getting-started-doc:paragraph.i18n-templates
page.html<button type="button">{{ 'x:alert.dismiss' | xTranslate }}</button><h1>{{ 'app.title' | xTranslate }}</h1>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.label
getting-started-doc:rule.do.body - getting-started-doc:rule.dont.label
getting-started-doc:rule.dont.body
XButton@xngui/components/buttonXInput@xngui/components/inputXForm@xngui/components/formXIcon@xngui/iconsXDataSource@xngui/cdk/datasourceXSize@xngui/coreprovideX@xngui/core/configXTranslatePipe@xngui/core/i18nXThemeService@xngui/themeXPaletteService@xngui/themeprovideXPalettes@xngui/themeconfigureXComponent@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
terminalnpx -y @xngui/skillsdocs:getting-started.section.next-steps
getting-started-doc:lead.next-steps
docs:getting-started.heading.continue-learning
docs:getting-started.data.forms-guide
docs:getting-started.data.signal-forms-x-form-and-x-form-field-composition
docs:getting-started.data.styles
docs:getting-started.data.css-primitives-semantic-roles-and-states
docs:getting-started.data.themes
docs:getting-started.data.runtime-appearance-palettes-and-presets
docs:getting-started.data.core-types
docs:getting-started.data.shared-unions-events-and-app-bootstrap
docs:getting-started.data.icons
docs:getting-started.data.xicon-font-awesome-setup-and-sizing
docs:getting-started.data.testing
docs:getting-started.data.harnesses-specs-and-configurexcomponent
docs:getting-started.data.mcp
docs:getting-started.data.structured-catalog-for-cursor-claude-and-vscode
docs:getting-started.data.skills
docs:getting-started.data.install-generate-review-design-and-a11y
docs:getting-started.data.theme-builder
docs:getting-started.data.tune-tokens-and-export-a-css-preset
docs:getting-started.data.components
docs:getting-started.data.interactive-demos-for-every-ui-primitive