# Angular Release Notes > Release notes for @revrag-ai/embed-angular — what changed in each release, with upgrade steps. URL: /embed/integration/angular/angular-releases Markdown: /embed/integration/angular/angular-releases.md # Angular SDK — Release Notes [#angular-sdk--release-notes] `@revrag-ai/embed-angular` · release history, newest first. Install the latest with `npm install @revrag-ai/embed-angular@latest`; confirm the current version on [npm](https://www.npmjs.com/package/@revrag-ai/embed-angular). *** ## 2.0.0 [#200] *Released: 26 October 2026* The first Angular release since `1.0.7`. It brings the Angular package onto the current SDK engine: **the agent can now see and act on your pages**, and the widget reads your dashboard's widget configuration **the same way the React, React Native and Android SDKs do**. It also cuts the initial bundle, fixes a change-detection cost, and fixes the type files. **Every app must make one code change:** pass your app's version to `initialize()`. Apps that call `embedEvent.reset()` or `embedEvent.getSessionId()` must also remove those calls. Every symbol you imported and every tag you placed in a template in `1.0.7` still exists: the ones that were never meant to be public are deprecated, not removed. Code that reached into the internals of those deprecated classes (for example `ExpandedViewComponent.elapsedTime`) may need changes. ```bash npm install @revrag-ai/embed-angular@2.0.0 ``` **Without `appVersion`, the widget never appears.** Add it to `initialize()` before you deploy `2.0.0` — see [Upgrade steps](#upgrade-steps-107--200). TypeScript will not warn you: the option is still typed as optional. **The widget's defaults changed too.** If your widget configuration leaves out the nudge, the agent's name or the auto-collapse time, your users will see a different widget — most visibly, **the inactivity nudge stops** unless `inactivityBehavior` is `show_popup`, `nudgeDelay` is above 0 and `tooltipMessage` is set. ### Breaking changes [#breaking-changes] | Change | What to do | | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **`appVersion` is required in `initialize()`** | `initialize(apiKey, { appVersion: '1.2.3' })`. Without it, `initialize()` rejects, `error$` emits the message and the widget never appears. The backend picks the widget and agent configuration per app version | | **`embedEvent.reset()` and `embedEvent.getSessionId()` removed** | Delete these calls. They no longer compile, and calling them from plain JavaScript throws. `event`, `customEvent`, `addCallback`, `removeCallback` and `getStoredAppUserId` remain | | **Angular 16 or newer** | The package uses Angular signals, which arrived in Angular 16, and its peer range is now `>=16.0.0`. If you are on Angular 15, stay on `1.0.7` | | **`rxjs` `^7.4.0`** is a declared peer dependency | Every Angular 16+ app already has a matching `rxjs` | ### Behaviour changes to check [#behaviour-changes-to-check] **Fields your widget configuration leaves out now use the Android SDK's defaults:** | Field left out | 1.0.7 | 2.0.0 | To keep 1.0.7 behaviour | | -------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | | Agent name / type | "Riya" / "Loan approval agent" | "Revrag AI" / "Onboarding Agent" | Set `agentTextContent.agentName` / `agentType` | | Nudge | after 1.5 s, with the message "Any questions? Click to connect" | **none** | Set `collapsedView.inactivityBehavior` to `show_popup`, `nudgeDelay` (seconds, above 0) and `tooltipMessage` | | After a call connects | the card stays open | folds back to the button after 15 s (the call keeps running; not while captions are on) | Set `collapsedView.collapsedTime` (seconds) to a long time; it cannot be turned off | | Agent output panel | stays open | closes 15 s after its text finishes | Set `collapsedView.viewCloseDelay` (ms) to a long time; it cannot be turned off | | Tooltip colour | purple | 80% black | Set `colorPalette.tooltipBackgroundColor` | | Corners of the open widget | round pill | 20px | Set `colorPalette.borderRadius` | **Fields your widget configuration sets now take effect:** | Field | 1.0.7 | 2.0.0 | | -------------------------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | `fillType` | any value except `solid` drew a left-to-right gradient | the gradient's direction: `horizontal`, `vertical`, otherwise **diagonal** (including `gradient`). `solid`, `flat` and `color` draw `backgroundColor` | | `textColor` | no effect; name and status always white | agent name, status line and the captions (CC) badge | | `borderRadius` | no effect | the open widget **and the collapsed button**, which becomes a rounded square filled with your gradient; the avatar stays round | | `tooltipBackgroundColor`, `tooltipTextColor` | tooltip only | tooltip and the live caption bubble | | only `grad1` set | no gradient | a gradient from `grad1` into a 35% darker shade | If a colour on your dashboard was wrong but had no visible effect in `1.0.7`, it will show now. **Other changes:** | Change | What to check | | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **The agent can act on your pages during a call** | Add `data-revrag-mask` to fields it must never read, and list screens it must never see in the provider's `excludeScreens`. While a modal dialog is open, the agent sees and acts on that dialog alone | | **The button appears only after `initialize()` succeeds** | In `1.0.7` the button showed straight away. Now nothing shows until `initialize()` has finished, and nothing shows at all if it fails (wrong key, missing `appVersion`, network error) | | **The floating widget moves to ``** | With `widgetPositioning="fixed"` (the default), the widget's element is moved to the end of ``, so a parent element can no longer trap it underneath your content. If you styled it through a parent selector, check it still looks right. `embedded` mode stays where you put it | | **The button can be dragged** | Users can drag it to another edge. `` has no input to turn this off, so in `fixed` mode its button is always draggable. The bare `` has a `draggable` input, but it is only for setups that drive Action Intelligence with `ActionIntelligenceService` and no provider ([when to use it](/embed/integration/angular#when-to-use-embedbuttoncomponent)) | | **Status line instead of the call timer** | During a call the card shows what the agent is doing ("Speaking", "Listening" and similar) instead of an elapsed-time clock | | **`EventKeys.SCREEN_VIEW` has a new value** | It is now `'screen_state'` (was `'screen_view'`). If you compare event types against the raw string, compare against `EventKeys.SCREEN_VIEW` instead | | **Click analytics report real clicks only** | Clicks on controls (buttons, links, checkboxes, selects and similar) and on elements with a click handler are reported as they happen, named after the element's `data-revrag-name` when it has one. A `
` or `` that only has a CSS class is no longer reported. Your Revrag dashboard configuration can switch click tracking off | ### Deprecated [#deprecated] Still exported and still working; they will be removed in a later major version. They were never intended as public API. | Deprecated | Use instead | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | | `EmbedWidgetComponent`, `AnimatedButtonComponent`, `ExpandedViewComponent`, `CallTextPanelComponent`, `TooltipComponent`, `WaveformVisualizerComponent`, `TypewriterComponent` (and their `revrag-…` tags) | `` (`EmbedProviderComponent`), which renders the whole widget. `EmbedModule` still exports them | | `EmbedLiveKitService` | `EmbedCallService` — `startCall()`, `endCall()`, `isCallActive()` | | `InteractionWatcherService`, `PlatformService`, `WidgetConfigService` | Nothing — the widget wires them up itself | | `resolveColorPalette`, `resolveAnimationData`, `resolveWidgetPosition`, `deriveWidgetConfig` | Nothing — the widget configuration is applied from the dashboard automatically | | Type `EventPayload` | `CustomEventPayload` — the type your `embedEvent.addCallback` listeners receive | | Types `WidgetConfig`, `WidgetSide`, `ResolvedWidgetPosition` | Nothing — look and position come from the dashboard | ### New [#new] * **Action Intelligence** — during a call the agent reads the current screen and acts on it (tap, type, select, scroll, read). * Starts once `initialize()` succeeds. Your Revrag dashboard configuration can switch it off. * Fields marked with `data-revrag-mask` (exported as `MASK_ATTR`), or inside an element marked with it, never have their content sent. * `` highlights each element the agent acts on. * New provider inputs: `excludeScreens`, `showOnAllScreens`, `actionRoot` and `getScreenName`. Moving onto a screen in `excludeScreens` hides the widget and ends an active call. See the [advanced provider guide](/embed/integration/angular/embed-angular-provider-advanced). * If you narrow `actionRoot`, dialogs attached to `document.body` (such as Angular CDK dialogs) stay visible to the agent. * `ActionIntelligenceService` sets the same scope from code (type `ActionScopeInputs`). * **`EmbedCallService`** — `startCall()`, `endCall()`, `isCallActive()`. * **`EmbedLogout()`** — call it when your user signs out. It ends any call (including one still connecting), stops the agent, wipes that user's cached screens and forgets their `app_user_id` (with any click events still queued for it). Your API key, widget configuration and session initialization data stay, so the next user needs no new `initialize()`. * **Widget controls** — `expandWidget`, `collapseWidget`, `isWidgetExpanded`, `subscribeWidgetExpanded`. * **Agent events** — `AgentEvent`, `embedOnAgent`, `embedOffAgent` (types `AgentEventPayload`, `AgentEventHandler`). * **`@revrag-ai/embed-angular/diagnostics`** — `verifyIntegration()` checks a setup in ten steps; `integrationSnapshot()` returns the current state. * **Widget** * A draggable button that works with touch and snaps to the nearest edge. * Live captions (CC) during a call. * A ring pulses around the collapsed button during a call, in `colorPalette.pulseColor` or, when that is not set, your widget's main colour. * The fold-back after a call connects follows the dashboard's `collapsedView.collapsedTime`. `` has no input for it (the bare button's `autoCollapseMs` input is only for provider-less setups). * The button size follows `agentAvatar.avatarSize` from your dashboard (56px when not set). * **More widget configuration fields**, all set on the dashboard: * `colorPalette.gradientColors` — a gradient with any number of colours. * `colorPalette.gradientPreset` — a named gradient (`ocean`, `sunset`, `aurora`, `midnight`, …). * `position.leftPadding` and `position.topPadding`, and the `bottom-center` and `top-center` positions. * `collapsedView.viewCloseDelay` — how long the agent's output panel stays after its text finishes. * **Bad colours are ignored.** A colour the browser cannot draw falls back to its default. Negative paddings count as 0. * **`revrag-integrate.md`** ships in the package (`node_modules/@revrag-ai/embed-angular/revrag-integrate.md`) — instructions an AI coding agent can follow end to end. ### Fixed [#fixed] * **Bundle size** * The default avatar animation (about 400 KB) loads on demand instead of shipping in your initial bundle. * **Performance** * The avatar animation runs outside Angular's zone. It used to trigger change detection across the whole app on every animation frame. * **Host app safety** * The SDK loads when browser storage is blocked ("Block all cookies", sandboxed iframes). * Ending a call no longer removes your page's own `