Troubleshooting
Resolve common installation, styling, overlay, forms and rendering problems from the symptom—without disabling the safety check that exposed it.
START HERE
Identify which layer is failing
Compile error
Check the granular import, Angular peer range and public type name.
Rendered but unstyled
Check global stylesheet imports, order and unstyled configuration.
Styled but misplaced
Check containing blocks, overflow, appendTo and viewport collisions.
Works in CSR only
Check browser globals, initial values and server/client locale or direction.
Angular does not recognize the component
Import the public symbol from its component entry point and add it to the standalone host's imports. Do not guess a root-barrel name or import an implementation file.
An icon appears as a square or empty box
The class exists in markup but its mask rule is absent from the loaded CSS. The curated stylesheet covers common application icons; less common icons require their category or the complete catalog.
Also confirm both classes are present: nt nt-icon-name. Neural Icons are local package assets and do not require a network request.
Components stay white, dark mode fails or primary does not change
Load the Neutral theme globally before application overrides. Tailwind users also load the bridge and bind the dark variant to data-neural-mode. Confirm that global unstyled was not enabled unintentionally.
A popup is clipped, too narrow or behind another surface
A parent with overflow: hidden, a transformed containing block or a competing top layer can constrain an inline panel. Use the component's documented appendTo="body" support when the panel must escape that layout. Do not solve ordinary clipping with arbitrary global z-index escalation.
- Keep trigger and panel in the same document.
- Verify an ancestor is not scaled during opening.
- Close overlays before destroying or replacing their trigger.
- Test start/end positions in both LTR and RTL.
The form value or state does not update
Reactive Forms
Bind one FormControl and read its value; do not bind a second model to the same control.
Signal Forms
Use the documented FormField contract and keep value nullability aligned with the component.
Template-driven
Provide a name inside a form and use two-way ngModel binding.
All approaches
Distinguish disabled, readonly, invalid and pending; they are not interchangeable states.
Hydration reports a mismatch
Compare the server and first browser render before inspecting later interaction. Locale, direction, selected values, generated collection order and conditional branches must initially agree. Defer localStorage, viewport measurement, current time and random values until a browser render callback.
Click, keyboard or focus behaves differently
- Check whether the control is disabled, readonly, loading or covered by another layer.
- Use the documented key contract for the component orientation and direction.
- Do not remove native focus outlines without an equivalent visible indicator.
- When a modal closes, keep its trigger mounted so focus can be restored.
npm reports an Angular peer conflict
Install a NeuralNg release whose manifest includes your Angular major. The current Core contract is Angular 22.x. Avoid --force and --legacy-peer-deps; they hide the compatibility error without making the runtime safe.
Prepare a useful reproduction
Reduce the problem to one route and the smallest template that still fails. Remove business data and credentials, but keep the rendering mode, direction and styling mode that trigger the issue.