@beeq/angular, the official wrapper around BEEQ web components. It gives you familiar Angular syntax for properties, events, and forms — without needing CUSTOM_ELEMENTS_SCHEMA in your modules or manual element registration.
For new Angular applications, we recommend the standalone setup with direct component imports from @beeq/angular/standalone. Keep the NgModule setup only for existing module-based apps.
Angular-friendly outputs
Listen to BEEQ events with Angular bindings such as
(bqClick) and (bqChange).Forms support
Use
formControlName, [(ngModel)], or signal-driven state with supported BEEQ form controls.Standalone-first setup
Import only the components you need per feature. NgModule support remains available for older apps.
Angular wrappers in
@beeq/angular are detached from change detection, so BEEQ components do not trigger unnecessary Angular repaints. They work well with ChangeDetectionStrategy.OnPush.Get started
You can add BEEQ to an existing Angular project in a few steps.Check your project setup
Make sure your project has:
- Angular 14+ (BEEQ wrapper minimum)
- Node.js 18+
- A working Angular app (Angular CLI or equivalent)
computed(), use Angular 16+. Angular 17+ is recommended for new standalone apps.Install the packages
Install the core package and the Angular wrapper:What each package gives you:
@beeq/coreincludes the web components, styles, icons, and shared types@beeq/angularprovides Angular bindings, outputs, and value accessors
You do not need to call
defineCustomElements() or add CUSTOM_ELEMENTS_SCHEMA to your modules. The Angular wrapper handles component registration for you.Add the global styles
Load the BEEQ stylesheet once for the whole application.Add the stylesheet to your build options:or import it in your global stylesheet:
angular.json
src/styles.css
Configure icons
Many BEEQ components use SVG icons. Your app must serve the SVG files and tell BEEQ where to find them.The fastest option for development is a You can also copy the SVG files to your public folder or assets directory and point BEEQ to that folder.
<script> tag in index.html with the data-beeq attribute. BEEQ reads this path automatically — you do not need setBasePath() in main.ts.src/index.html
When you use
setBasePath(), you do not need the data-beeq script tag unless you want a fallback.Angular usage patterns with BEEQ
Properties and events
BEEQ components work as custom elements in Angular templates:| BEEQ event | Angular binding | When it fires |
|---|---|---|
bqClick | (bqClick) | User activates the control |
bqChange | (bqChange) | Value confirmed (blur or selection) |
bqInput | (bqInput) | Value changes on each keystroke |
bqFocus | (bqFocus) | Control receives focus |
bqBlur | (bqBlur) | Control loses focus |
bqClear | (bqClear) | User clears the value |
bq-slider, read the value from the event: (bqChange)="onSliderChange($event)" and use $event.detail.value.
Value accessors for forms
BEEQ components are custom elements, so Angular needs a small adapter to sync[(ngModel)] and formControlName with bqChange / bqInput. BEEQ ships those adapters as value accessors in @beeq/angular/standalone.
In standalone components, every dependency must be explicitly imported.
- Import
FormsModuleorReactiveFormsModule - Add
ngDefaultControlon each boundbq-input(and similar text controls) - Import the matching value accessor — for example,
BooleanValueAccessorforbq-checkbox
[ngModel] for the initial value and (ngModelChange) to update the signal when the user interacts:
| Component | Value Accessor | Notes |
|---|---|---|
| bq-checkbox, bq-switch | BooleanValueAccessor | Reads/writes checked (boolean) |
| bq-input (text) | — | Use ngDefaultControl to opt into Angular’s built-in DefaultValueAccessor |
| bq-input[type=“number”] | NumericValueAccessor | Reads/writes value as a number |
| bq-textarea | TextValueAccessor | Reads/writes value as a string |
| bq-date-picker | TextValueAccessor | Reads/writes value as a string |
| bq-select | SelectValueAccessor | Reads/writes value (single or multiple) |
| bq-radio | RadioValueAccessor | Reads/writes value within a radio group |
Reactive forms
UseReactiveFormsModule, a FormGroup, and formControlName. Add ngDefaultControl on text-based BEEQ inputs so Angular treats them as ControlValueAccessor. For boolean controls like bq-checkbox, import BooleanValueAccessor instead.
Template-driven forms
When using template-driven forms, importFormsModule and bind values with [(ngModel)].
Signals
Use signals for local UI state andcomputed() for derived labels or styles. For bq-slider, bind the value with [value] and update the signal in (bqChange) — do not use [(ngModel)] on a WritableSignal.
Example application
A reference standalone app is available in the BEEQ repository and demonstrates all of the patterns described on this page:- Icons via
data-beeqinindex.html - Global styles via
@importinstyles.css - Reactive form, template-driven form, and signal-driven slider in one
Appcomponent
Angular Module integration (Legacy)
If your application still usesNgModule, import BeeQModule.forRoot() in your root module.
Value accessor directives are included automatically when you import
BeeQModule. You do not need to import them individually. However, FormsModule and ReactiveFormsModule must still be imported separately for ngModel and reactive forms to work.app.module.ts
Troubleshooting
Styles are missing
Styles are missing
Confirm
@beeq/core/dist/beeq/beeq.css is loaded once globally (angular.json or your main stylesheet).Icons are not rendering
Icons are not rendering
Check one of these setups:
data-beeqinindex.htmlpoints to a URL that serves BEEQ SVG files (correct file names)setBasePath()inmain.tsmatches the public path where your build serves copied SVGs- Icon
namevalues match SVG file names (without.svg)
Angular does not recognize BEEQ components
Angular does not recognize BEEQ components
In standalone apps, add each
Bq* component to the imports array of the declaring component. In NgModule apps, import BeeQModule.forRoot().`ngModel` or `formControlName` does not work
`ngModel` or `formControlName` does not work
Import
FormsModule or ReactiveFormsModule, add ngDefaultControl on BEEQ text inputs, and import BooleanValueAccessor for bq-checkbox and bq-switch in standalone apps.Older Angular versions and build errors
Older Angular versions and build errors
Some Angular 14–15 builds hit compiler issues with web-component value accessors. If you see
NG8001 or accessor-related errors:- Add
"skipLibCheck": truetotsconfig.jsoncompilerOptions. - In
angular.json, set"aot": falseand"buildOptimizer": falsefor affected configurations.
Next steps
Explore components
Start with a component page to see props, events, slots, and framework examples.
Customize the theme
Review theming options if your product needs brand customization.
Open Storybook
Explore component states and interactions in the live component library.