generated:catalog.entry.core.title
@xngui/core@xngui/coregenerated:catalog.entry.core.description
docs:core.section.overview
docs:core.lead.overview
docs:core.heading.category-index
docs:core.paragraph.fourteen-categories
docs:core.data.visual
docs:core.data.semantic-variants-and-surface-treatments
types/visual.tsdocs:core.data.size
docs:core.data.control-scale-and-intrinsic-sizing-keywords
types/size.tsdocs:core.data.tokens
docs:core.data.primitive-steps-aligned-with-xngui-styles
types/tokens.tsdocs:core.data.layout
docs:core.data.flex-and-overlay-placement
types/layout.tsdocs:core.data.state
docs:core.data.contracts-and-feedback-status
types/state.tsdocs:core.data.interaction
docs:core.data.triggers-activation-scroll
types/interaction.tsdocs:core.data.capabilities
docs:core.data.signal-implements-contracts-for-components
types/capabilities.tsdocs:core.data.form
docs:core.data.options-validation-and-form-chrome
types/form.tsdocs:core.data.typography
docs:core.data.type-scale-and-text-treatment-unions
types/typography.tsdocs:core.data.events
docs:core.data.component-output-payloads
types/events.tsdocs:core.data.data
docs:core.data.headless-data-pipeline
types/data.tsdocs:core.data.media
docs:core.data.adornments-avatars-and-media-fit
types/media.tsdocs:core.data.runtime
docs:core.data.secondary-entry-points-for-app-bootstrap
config · i18n · errors · files · loggingdocs:core.data.storage
docs:core.data.cross-package-storage-keys
storage/keys.tsdocs:core.heading.import-pattern
imports.tsimport type { XVariant, XSize, XPlacement, XDataQuery, XChangeEvent, XOpenBound,} from '@xngui/core';import { X_STORAGE_KEYS } from '@xngui/core/storage';import { provideX } from '@xngui/core/config';docs:core.section.visual
docs:core.heading.type-definitions
XVarianttypedocs:core.data.component-variant-input
primarysecondaryaccentdangersuccesswarninginfoXColortypedocs:core.data.palette-token-family-key
primarysecondaryaccentneutralsuccesswarningdangerinfoXAppearancetypedocs:core.data.surface-treatment-for-controls
solidoutlineghostsoftXDensitytypedocs:core.data.standard-baseline-roomier-comfortable-or-tighter-compact-chrome-spacing
compactcomfortablestandard
docs:core.heading.variant-spectrum
docs:core.paragraph.xvariant-semantic-roles-for-actions-and-status-bearing-ui
docs:core.heading.appearance-gallery
docs:core.paragraph.xappearance-surface-treatments-paired-with-xvariant
solidoutlineghostsoftdocs:core.heading.color-families
docs:core.paragraph.xcolor-includes-neutral-for-chrome-unlike-xvariant
--x-primary--x-secondary--x-accent--x-neutral--x-success--x-warning--x-danger--x-infodocs:core.section.size
docs:core.heading.xsize-scale
docs:core.paragraph.five-steps-shared-across-buttons-inputs-chips-and-more
xsxssmsmmdmdlglgxlxl
docs:core.heading.xdensity-scale
docs:core.paragraph.xdensity-orthogonal-to-xsize docs:core.link.control-scale-styles.
XDensity · compactXDensity · comfortableXDensity · standarddocs:core.section.layout
docs:core.heading.layout-unions
docs:core.data.xorientation
docs:core.data.xalign
docs:core.data.xjustify
docs:core.data.xposition
docs:core.data.xtextalign
docs:core.data.xtextdirection
docs:core.data.xoverlaylayer
docs:core.heading.placement-atlas
docs:core.paragraph.xplacement-twelve-anchored-positions-for-overlays-tooltips-and-menus
docs:core.heading.flex-samples
docs:core.paragraph.xorientation-xalign-xjustify-in-context
docs:core.data.horizontal-center-centerdocs:core.data.horizontal-end-betweendocs:core.data.vertical-stretch-startdocs:core.data.vertical-center-evenlydocs:core.heading.text-direction
docs:core.data.xtextdirection-ltrdocs:core.paragraph.logical-start-is-on-the-left-inline-flow-follows-reading-ord
docs:core.data.xtextdirection-rtldocs:core.paragraph.logical-start-is-on-the-right-inline-flow-mirrors-for-rtl-lo
docs:core.section.state
docs:core.heading.contracts-unions
XDisabledinterfacedocs:core.data.disabled-boolean-contract
XLoadingModetypespinneroverlayreplaceXStatustypeneutralinfosuccesswarningdangerXVisibilitytypevisiblehidden
docs:core.heading.status-spectrum
docs:core.heading.state-contracts-in-context
XDisabled: falseXDisabledXLoadingdocs:core.section.interaction
docs:core.heading.interaction-types
docs:core.data.xtrigger
docs:core.data.xactivation
docs:core.data.xselectionmode
docs:core.data.xbuttontype
docs:core.data.xscrollstrategy
docs:core.data.xfocusorigin
docs:core.data.xarialive
docs:core.section.form
docs:core.heading.form-types
docs:core.data.xlabelmode
docs:core.data.xformlook
docs:core.data.xinputtype
docs:core.data.xvalidateon
docs:core.data.xvalidationstate
docs:core.section.events
docs:core.heading.typed-payloads
docs:core.paragraph.component-output-handlers-never-raw-event-unless-wrapped
XChangeEvent<T>{ value, previousValue? }event.ts{ "value": "dark", "previousValue": "light" }XClickEvent<T>{ originalEvent }event.ts{ "originalEvent": "PointerEvent" }XSelectionEvent<T>{ added, removed }event.ts{ "added": ["a"], "removed": [] }XPageEvent{ pageIndex, pageSize, length }event.ts{ "pageIndex": 0, "pageSize": 25, "length": 120 }XSortEvent{ sort }event.ts{ "sort": { "active": "name", "direction": "asc" } }XFocusEvent{ origin }event.ts{ "origin": "keyboard" }XBlurEvent{ originalEvent? }event.ts{ "originalEvent": "FocusEvent" }
docs:core.section.data
docs:core.heading.pipeline
- docs:core.data.querydocs:core.data.xdataquery-page-sort-filter-snapshot
- docs:core.data.loaderdocs:core.data.xdataloader-t-sync-or-async-with-abortsignal
- docs:core.data.resultdocs:core.data.xdataresult-t-items-total-count
- docs:core.data.statusdocs:core.data.xdatastatus-idle-loading-success-error
docs:core.heading.shape-samples
docs:core.data.xdataquery
query.ts{ "pageIndex": 0, "pageSize": 25, "sort": { "active": "name", "direction": "asc" }, "filter": null}docs:core.data.xdataresult
result.ts{ "items": ["Row A", "Row B", "Row C"], "total": 120}docs:core.heading.filter-table-types
docs:core.data.xsortdirection
docs:core.data.xdatastatus
docs:core.data.xfilterlogic
docs:core.data.xselectionstate
docs:core.data.xcolumnalign
docs:core.data.xemptystatetype
docs:core.section.capabilities
docs:core.heading.signal-implements-contracts
docs:core.paragraph.components-opt-into-shared-behavior-with
XDisableableinterfacedocs:core.data.disabled-input-group-parents-may-pass-undefined-to-inherit
XLoadinginterfacedocs:core.data.loading-input-with-aria-busy-semantics
XOpenBoundinterfacedocs:core.data.declarative-overlays-dialog-drawer-alert-dialog
XAnchorBoundinterfacedocs:core.data.floating-surfaces-anchored-to-an-origin-menu-popover
XPaginatedinterfacedocs:core.data.page-index-size-with-navigation-helpers
XKeySelectioninterfacedocs:core.data.string-key-selection-for-tables-and-lists
XSortableinterfacedocs:core.data.column-sort-stack-for-data-tables
XToastHostinterfacedocs:core.data.imperative-toast-queue-api
XPlaybackinterfacedocs:core.data.native-audio-video-playback-controls
docs:core.section.tokens
docs:core.heading.css-typescript-bridge
docs:core.paragraph.css-typescript-bridge
XColor--x-{role}docs:core.bridge.xcolor-summary
- docs:core.bridge.example.css-token
color: var(--x-primary); - docs:core.bridge.example.component-input
<x-badge variant="danger" /> - docs:core.bridge.example.tailwind-utility
<div class="bg-primary text-primary-foreground">
- docs:core.bridge.example.css-token
XSize[data-size]docs:core.bridge.xsize-summary
- docs:core.bridge.example.host-attribute
<x-button /> - docs:core.bridge.example.resolved-token
--x-control-height: var(--x-size-height-lg); - docs:core.bridge.example.css-selector
x-input[data-size="md"] { … }
- docs:core.bridge.example.host-attribute
XDensity[data-density]docs:core.bridge.xdensity-summary
- docs:core.bridge.example.host-attribute
<x-button /> - docs:core.bridge.example.resolved-token
--x-control-pad-inline: calc(var(--x-scale-pad-inline) + var(--x-density-offset-pad-inline)); - docs:core.bridge.example.config-default
provideX({ config: { density: 'comfortable' } })
- docs:core.bridge.example.host-attribute
XSemanticToken--x-{token}docs:core.bridge.xsemantictoken-summary
- docs:core.bridge.example.page-canvas
background: var(--x-background); - docs:core.bridge.example.elevated-surface
background: var(--x-card); border-color: var(--x-card-border); - docs:core.bridge.example.type-union
type XSemanticToken = 'background' | 'card' | 'border' | …
- docs:core.bridge.example.page-canvas
XSpacingStep--x-spacing-{n}docs:core.bridge.xspacingstep-summary
- docs:core.bridge.example.gap
gap: var(--x-spacing-4); - docs:core.bridge.example.margin
margin-block: var(--x-spacing-6); - docs:core.bridge.example.component-input
<x-stack gap="3" />
- docs:core.bridge.example.gap
XRadiusStep--x-radius-{step}docs:core.bridge.xradiusstep-summary
- docs:core.bridge.example.card-chrome
border-radius: var(--x-radius-lg); - docs:core.bridge.example.chip-badge
border-radius: var(--x-radius-full); - docs:core.bridge.example.type-union
type XRadiusStep = 'xs' | 'sm' | … | 'full'
- docs:core.bridge.example.card-chrome
XShadowStep--x-shadow-{step}docs:core.bridge.xshadowstep-summary
- docs:core.bridge.example.popover
box-shadow: var(--x-shadow-lg); - docs:core.bridge.example.component-input
<x-card shadow="md" /> - docs:core.bridge.example.type-union
type XShadowStep = 'sm' | 'md' | 'lg' | 'xl' | '2xl'
- docs:core.bridge.example.popover
XDurationStep--x-duration-{step}docs:core.bridge.xdurationstep-summary
- docs:core.bridge.example.transition
transition-duration: var(--x-duration-fast); - docs:core.bridge.example.animation
animation-duration: var(--x-duration-normal); - docs:core.bridge.example.type-union
type XDurationStep = 'fast' | 'normal' | 'slow'
- docs:core.bridge.example.transition
XOverlayLayer--x-z-{layer}docs:core.bridge.xoverlaylayer-summary
- docs:core.bridge.example.dialog
z-index: var(--x-z-modal); - docs:core.bridge.example.config-override
provideX({ config: { zIndex: { modal: 60 } } }) - docs:core.bridge.example.type-union
type XOverlayLayer = 'dropdown' | 'modal' | …
- docs:core.bridge.example.dialog
XTextSize--x-text-{size}docs:core.bridge.xtextsize-summary
- docs:core.bridge.example.font-size
font-size: var(--x-text-sm); - docs:core.bridge.example.paired-leading
line-height: var(--x-text-sm-leading); - docs:core.bridge.example.component
<x-text>…</x-text>
- docs:core.bridge.example.font-size
XFontWeight--x-weight-{weight}docs:core.bridge.xfontweight-summary
- docs:core.bridge.example.css
font-weight: var(--x-weight-semibold); - docs:core.bridge.example.component
<x-text weight="medium">…</x-text> - docs:core.bridge.example.type-union
type XFontWeight = 'normal' | 'medium' | 'bold' | …
- docs:core.bridge.example.css
docs:core.heading.primitive-steps
docs:core.paragraph.align-with-xngui-styles-primitives
docs:core.data.xspacingstep
docs:core.data.xradiusstep
docs:core.data.xshadowstep
docs:core.data.xdurationstep
docs:core.data.xsemantictoken
docs:core.section.typography
docs:core.heading.type-scale-treatment
docs:core.data.xtextsize
docs:core.data.xfontweight
docs:core.data.xtexttransform
docs:core.data.xtextoverflow
docs:core.section.translation
docs:core.lead.translation
docs:core.heading.translation-pipeline
docs:core.i18n.pipeline.bootstrap
docs:core.i18n.pipeline.locale
docs:core.i18n.pipeline.loader
docs:core.i18n.pipeline.merge
docs:core.i18n.pipeline.resolve
docs:core.heading.translation-overview
docs:core.paragraph.translation-overview
docs:core.paragraph.translation-bootstrap
app.config.tsimport { provideX } from '@xngui/core/config';import { provideXTranslations } from '@xngui/core/i18n';export const appConfig = { providers: [ provideX({ i18n: { languages: ['en', 'fa', 'ar'], defaultLocale: 'en', fallbackLocale: 'en', }, }), provideXTranslations({ 'app.title': { en: 'My app' }, }), ],};app.config.tsimport { provideX } from '@xngui/core/config';import { provideXTranslations } from '@xngui/core/i18n';// Lazy JSON — component catalogs (@xngui/i18n) via provideX i18nprovideX({ i18n: { languages: ['en', 'fa'], defaultLocale: 'en', fallbackLocale: 'en', },});// Eager TS — app-only keys (bundled)provideXTranslations({ 'footer.tagline': { en: 'Ship faster.' } });docs:core.paragraph.translation-loader
app.config.tsimport { provideX } from '@xngui/core/config';import { createFetchI18nLoader } from '@xngui/core/i18n';// Choose supported languages, default, and fallbackprovideX({ i18n: { languages: ['en', 'fa', 'ar'], defaultLocale: 'en', fallbackLocale: 'en', },});// Custom loader (CDN bucket, API, in-memory tests)provideX({ i18n: { languages: ['en', 'de', 'fr'], defaultLocale: 'de', fallbackLocale: 'en', loader: createFetchI18nLoader({ baseUrl: '/assets/i18n' }), },});// Fully custom loaderprovideX({ i18n: { languages: ['en', 'fa'], defaultLocale: 'fa', fallbackLocale: 'en', loader: ({ pack, locale }) => fetch(`https://cdn.example.com/i18n/${pack === 'x' ? locale : `${pack}-${locale}`}.json`).then((response) => response.json(), ), },});loader.tsimport { resolveI18nAssetPath, type XI18nLoader } from '@xngui/core/i18n';const loader: XI18nLoader = async ({ pack, locale }) => { const file = resolveI18nAssetPath(pack, locale); const response = await fetch(`/i18n/${file}`); return response.json() as Promise<Record<string, string>>;};provideX({ i18n: { languages: ['en'], defaultLocale: 'en', fallbackLocale: 'en', loader } });docs:core.paragraph.translation-packs
en.json{ "input.clear": "Clear", "pagination.next": "Next page", "alert.dismiss": "Dismiss"}docs:core.paragraph.translation-template
example.tsimport { Component, inject } from '@angular/core';import { XTranslatePipe, XTranslationService } from '@xngui/core/i18n';@Component({ imports: [XTranslatePipe], template: ` <button type="button">{{ 'x:alert.dismiss' | xTranslate }}<button> `,})export class Example { private readonly i18n = inject(XTranslationService); clearLabel() { // English fallback when a key is missing from the loaded pack return this.i18n.getTranslation('x:input.clear', 'Clear'); }}docs:core.paragraph.translation-locale
locale.tsimport { inject } from '@angular/core';import { XI18nLoaderService } from '@xngui/core/i18n';const i18nLoader = inject(XI18nLoaderService);await i18nLoader.changeLocale('fa-IR'); // normalized → fa, loads JSON, then commits localedocs:core.paragraph.translation-vitest
input.spec.tsimport { configureXComponent, provideXComponentI18n } from '@xngui/testing';await configureXComponent(XInput, { providers: [provideXComponentI18n()],});docs:core.heading.translation-api
- @xngui/core/i18n
docs:core.data.lazy-json-loader-locale-persistence-intl
provideX i18ncreateFetchI18nLoaderresolveI18nAssetPathXLocaleServiceXTranslationServiceXIntlServiceXTranslatePipemergeLocaleJsonprovideXTranslations - @xngui/i18n
docs:core.data.component-translation-json-catalogs
locales/en.jsonlocales/fa.json…
docs:core.section.runtime
docs:core.heading.app-bootstrap
docs:core.paragraph.providex-from-xngui-core-config-registers
app.config.tsimport { provideX } from '@xngui/core/config';export const appConfig = { providers: [ provideX({ config: { size: 'sm', validateOn: 'touched' }, i18n: { languages: ['en-US', 'en', 'fa'], defaultLocale: 'en-US', fallbackLocale: 'en', }, }), ],};docs:core.heading.xconfig-defaults
docs:core.paragraph.override-once-via
- size
mdXSize- density
standardXDensity- variant
primaryXVariant- appearance
outlineXAppearance- labelMode
staticXLabelMode- look
outlineXFormLook- validateOn
touchedXValidateOn- ripple
trueboolean- animate
trueboolean- overlay.placement
bottom-startXPlacement- overlay.closeOnEscape
trueboolean- overlay.closeOnOutside
trueboolean- overlay.closeOnBackdrop
trueboolean
docs:core.heading.secondary-entry-points
- @xngui/core/config
docs:core.data.library-wide-defaults-size-density-validateon-z-index-layers
provideXprovideXConfigXConfigServiceXConfig - @xngui/core/direction
docs:core.data.runtime-ltr-rtl-with-persisted-preference
XDirectionService - @xngui/core/errors
docs:core.data.domain-errors-and-a-pluggable-global-handler
provideXErrorHandlerXErrorHandlerServiceXComponentError - @xngui/core/files
docs:core.data.pick-extract-validate-read-and-download-browser-files
XFileServiceXBrowserFileServicevalidateFilesdownloadTextpickFiles - @xngui/core/logging
docs:core.data.structured-logging-with-injectable-backends
provideXLoggerXLoggerServiceXLogger - @xngui/core/storage
docs:core.data.ssr-safe-localstorage-indexeddb-and-shared-keys
XLocalStorageServiceXIndexedDbServiceX_STORAGE_KEYS
docs:core.section.storage
docs:core.paragraph.storage-services
docs:core.heading.storage-services
- docs:core.data.storage-theme
x-theme- docs:core.data.storage-theme-palette
x-theme-palette- docs:core.data.storage-locale
x-locale- docs:core.data.storage-direction
x-direction- docs:core.data.x-storage-keys
x-config
storage.tsimport { inject } from '@angular/core';import { XLocalStorageService, X_STORAGE_KEYS } from '@xngui/core/storage';const storage = inject(XLocalStorageService);storage.set(X_STORAGE_KEYS.theme, 'dark');storage.get(X_STORAGE_KEYS.theme); // → 'dark'storage.remove(X_STORAGE_KEYS.theme);indexed-db.tsimport { inject } from '@angular/core';import { XIndexedDbService } from '@xngui/core/storage';const db = inject(XIndexedDbService);await db.open('my-app', { version: 1, stores: [{ name: 'drafts', keyPath: 'id' }],});await db.set('my-app', 'drafts', 'page-1', { title: 'Notes' });const draft = await db.get<{ title: string }>('my-app', 'drafts', 'page-1');docs:core.section.media
docs:core.heading.adornments-avatars
docs:core.data.xiconposition
startenddocs:core.data.xavatarshape
circlesquarerounded