Releases: angular/components
lyrium-longboard
Bug Fixes
- breakpoints: set max-widths for breakpoints to non-integers to handle subpixel queries (#13828) (b88b79d)
- button: stroked button crops applied badges (#13912) (835dc9e), closes #13909
- button-toggle: remove hover state on touch devices (#13724) (f9d5fb4)
- chips: remove circular dependency between chip-list and chip-input (#13994) (3da858d)
- dialog,bottom-sheet: enter animation blocking child animations (#13888) (e5afa48), closes #13870
- drag-drop: drop list not toggling dragging class inside component with OnPush change detection (#13703) (4e50d4a), closes #13680
- drag-drop: incorrectly laying out items with different height or margins (#13849) (c509591), closes #13483
- drag-drop: multiple parallel drag sequences when dragging nested drag items (#13820) (cdc0c8b)
- list: add ripples to action list items (#13799) (b293655), closes #13795
- list: remove disabled selection list hover feedback on mobile (#13850) (e975223)
- menu: unable to swap menu panel after first open (#13819) (cbb76ec), closes #13812
- ng-update: do not fail if @schematics/angular version is outdated (#13929) (f10f8b9)
- ng-update: do not throw if typescript version is outdated (#13927) (d44fcf8)
- portal: use portal's ComponentFactoryResolver in portal outlet directive (#13886) (d2af80b), closes #12677 #9712
- snack-bar: set appropriate role based on passed in politeness (#13864) (33d3cb3), closes #13493
- snackbar: override min-width of snackbar on mobile (#13880) (41cb8aa)
- stepper: don't handle enter/space when modifier key is pressed (#13827) (0bd3890), closes #13790
- tabs: duplicate animation events on some browsers (#13674) (7106681)
- tabs: mat-align-tabs not working on mat-tab-nav-bar (#13818) (2289e43), closes #13798
- virtual-scroll: not removing view from container if it's outside the template cache (#13916) (7c202ec), closes #13901
- bazel support for downstream apps (#13836) (61dbd26)
limestone-linguine
Bug Fixes
- build: material not working with ES2015 (#13709) (e9103a6), closes #12760 #13695
- button-toggle: webkit tap highlight conflicting with ripples (#13721) (abd0278)
- cdk-platform: pass
{}
to@NgModule
since passing nothing breaks (#13792) (5abb644) - checkbox: disabled property not being coerced (#13755) (cee8c65), closes #13739
- expansion-panel: don't handle enter/space if modifier is pressed (#13790) (3e6cc77), closes #13783
- radio: don't show hover ripples on touch devices (#13701) (b89c139), closes #13675
- slide-toggle: don't show hover ripples on touch devices (#13702) (9d495f1), closes #13675
- stepper: incorrect border color in dark theme for header with label position (#13791) (afa5a28)
- stepper: selector assuming that there will always be a dir attribute (#13751) (576118e), closes #13741
- stroked-button: ripples and focus overlay have incorrect radius (#13745) (7877404), closes #13738
- tooltip: add fallback for touch devices if Hammer isn't loaded (#13580) (9ae6c84), closes #13536
Features
- drag-utils: add utility function for cloning array items from one array to another (#13743) (13395c5), closes #13100
- ng-add: add preview URLs for theme choices (#13723) (f1d1fc5), closes /github.com/angular/angular-cli/blob/907ce5c94c774147c4b52870b3522aed4e087c76/packages/schematics/angular/ng-new/schema.json#L121 #13708
emerald-egret
Bug Fixes
- autocomplete: not propagating same model value when reset while open (#13634) (2006144)
- button-toggle: content shifting in IE11 (#13492) (7f5cbe3)
- datepicker: don't allow clicks on disabled cells in year and multi-year views (#13448) (85741e0)
- drag-drop: not picking up handle that isn't a direct descendant (#13360) (0f05d99)
- drag-drop: preserve previous inline transform (#13529) (2a8da45)
- drag-drop: use passive event listeners for start events (#13526) (5d5fba5)
- expansion-panel: emitting events twice on some browsers (#13600) (85a3ae0)
- form-field: native select options blending in with dropdown background on a dark theme (#13201) (b8a6294)
- grid-list: unable to assign numeric zero as gutter size (#13652) (4ffcf74)
- list: selection list moving focus when an option is destroyed (#13531) (2c4c5ba)
- menu: closing parent overlay when pressing escape (#13442) (c3ae922)
- menu: proper focus styling when opened by tap on a touch device (#13599) (c271167)
- progress-bar: not taking current path after first initialization (#13628) (8e331a7)
- radio: improved alignment for native validation messages (#13570) (dbf5164)
- sidenav: opened and closed events emitting twice on IE and Edge (#13649) (5295e2f)
- slider: update value on mousedown instead of click (#13020) (c995db7)
- stepper: custom icons not centered inside circle (#12947) (45edf64)
- stepper: emitting the animationDone event twice on some browsers (#13608) (a11ca21), closes #13600 #13587
- stepper: intl provider not being picked up in lazy-loaded modules (#12934) (00ce69b)
- table: delimit words when filtering (#13487) (1d87b4c)
- text-field: autosize textarea not resizing on minRows decrease (#13437) (8bae5b4)
Performance Improvements
amethyst-ammonite
Highlights
- Support for Drag and Drop in
@angular/cdk/drag-drop
. - Support for Virtual Scrolling in
@angular/cdk/scrolling
. - Support for native
<select>
element in<mat-form-field>
. - Added
<mat-action-list>
, a list where each item is a<button>
. - Updated component styles throughout the library matching the 2018 Material Design Spec refresh.
- Added more schematics, with schematics now available for table, drag and drop, tree, address form and more.
- Added CLI prompts when using
ng add
to assist in setting up HammerJS support, application theming and animations. - 250+ bug/performance fixes
Upgrading to 7.0
Using the Angular CLI, you can use the ng update
command to automatically migrate to the new APIs in for Material and CDK.
ng update @angular/material
NOTE: If you are using only the CDK you can automatically migrate using ng update @angular/cdk
instead.
Breaking Changes
- ripple: deprecated
[matRippleSpeedFactor]
andbaseSpeedFactor
for the ripples have been removed. Use the new animation config instead. - overlay: The
flexibleDiemsions
property onCdkConnectedOverlay
has been renamed toflexibleDimensions
- sidenav: the constructor signature of the
MatDrawerContent
andMatSidenavContent
has changed. - elevation: Because
mat-elevation
usages have been moved out of component stylesheets, users who have
not invoked a theme mixin will not see any elevation shadows on Material components.
However, users that have created a custom theme which lacks theelevation
property will
still see the default black shadows.
Additionally, users who want to use themed elevations in their custom components can create
their own shorthand mixin:
@import '~@angular/material/theming';
$myTheme: ...
@mixin my-elevation($zValue) {
@include mat-theme-elevation($zValue, $myTheme);
}
and then invoke angular-material-theme
with the $myTheme
variable.
Marked for Deprecation
A number of items throughout the library have been deprecated and are expected to be removed in v8.
CDK
Collections
SelectionModel.onChange
has been deprecated, useSelectionModel.changed
instead.
Scrolling
ScrollDispatchModule
has been deprecated, useScrollingModule
instead.
Table
CdkTable.setFooterRowDef
has been deprecated, useCdkTable.addFooterRowDef
andCdkTable.removeFooterRowDef
instead.CdkTable.setHeaderRowDef
has been deprecated, useCdkTable.addHeaderRowDef
andCdkTable.removeHeaderRowDef
instead.
Material
Dialog
matDialogAnimations.slideDialog
has been deprecated, usematDialogAnimations.dialogContainer
instead.MatDialogRef.afterOpen
has been deprecated, useMatDialogRef.afterOpened
instead.MatDialogRef.afterClose
has been deprecated, useMatDialogRef.afterClosed
instead.MatDialog.afterOpen
has been deprecated, useMatDialog.afterOpened
instead.
Form Field
<mat-placeholder>
has been deprecated, use<mat-label>
instead.MatPlaceholder
has been deprecated, useMatLabel
instead.
Paginator
$mat-paginator-selector-trigger-min-width
has been deprecated, use$mat-paginator-selector-trigger-width
instead.
Select
matSelectAnimations.fadeInContent
has been deprecated and will be removed without replacement.- The setter method for
MatSelect.focused
has been deprecated,MatSelect.focused
will become readonly.
Toolbar
$mat-toolbar-height-mobile-portrait
has been deprecated and will be removed without replacement.$mat-toolbar-height-mobile-landscape
has been deprecated and will be removed without replacement.
NOTE: In addition to the specific deprecations listed above, many component constructor methods contain
optional parameters which are expected to become required in v8.
Bug Fixes
7.0.0-rc.2
Bug Fixes
- drag-drop: enterPredicate being called with wrong drop container (#13578) (60b4a58)
- drag-drop: rename cdkDrop to cdkDropList (#13619) (160b688)
- ng-add: do not add theme file if existing theme is set up (#13468) (d1e59a2)
- schematics: template content exceeds max line length (#13521) (b0a1daf)
- schematics: tree folder icons do not have enough contrast (#13462) (4a0eb2b)
- virtual-scroll: fix several small bugs (#13597) (8cfaeea)
Features
7.0.0-rc.1
Bug Fixes
- a11y: not being able to escape disabled focus trap using arrow keys (#13133) (3c55caa), closes #13132
- autocomplete: closing parent overlay when pressing escpe (#13413) (8dfd2ee)
- bottom-sheet: dismiss bottom sheet on destroy (#13120) (ffa4a06)
- button-toggle: not setting proper border in vertical mode (#13397) (d58db5d)
- button-toggle: remove extra focus indication added by firefox (#13367) (3583913)
- checkbox: ripple not hiding after click/touch (#13295) (afb0352), closes #13291
- chips: content not centered vertically on IE in some cases (#13260) (4f43f5c)
- chips: ripple not clipping correctly in safari (#12244) (eb95e61)
- chips: selectionChange event firing when value has not changed (#13173) (e8a6ea1)
- datepicker: change overlay position strategy so the calendar is kept on-screen (#11607) (f44d6db)
- drag-drop: avoid interfering with element clicks (#13152) (38e7dd2)
- expansion-panel: correct jump in panel sizing during animation (#12509) (a706c8c)
- experimental/dialog: clean up open dialogs on destroy (#13421) (84d8f5b)
- form-field: blue box inside focused native select on IE (#13187) (ab44d50)
- form-field: not updating outline when prefix/suffix is added or removed (#13253) (0060bd7), closes #13251
- grid-list: incorrectly laying out tiles for nested list (#13086) (3e1cff0), closes #13074
- icon: handle references for pages with base tag (#12428) (9e5fd91), closes #9276
- list: selection list not marking options as selected correctly when setting value with duplicates (#13363) (bef9a17)
- menu: incorrectly styling keyboard focus, if trigger is right clicked before opening (#13136) (730e6a3)
- ng-add: allow using noop animations (#13429) (15a1ab7)
- overlay: incorrectly calculating centered position on a scrolled page with pushing (#13185) (f5dd24a), closes #11868
- overlay: wait for panel to detach before removing panelClass (#13199) (238aef0), closes #13189
- paginator: icons and labels not centered vertically on IE (#12495) (fe3f37a), closes #12491
- schematics: @angular/material schematics not working (#13406) (3f8ee74)
- schematics: name is required when generating the drag-drop schematic (#13452) (4a9bbcb)
- schematics: proper error if name is not specified (#13379) (4a0b09a)
- scrolling: viewport ruler resize event running inside the NgZone (#12909) (707a7ee), closes #12883
- select: allow extra content to be projected after label in mat-optgroup (#13396) (cb5b15e), closes #11489
- select: handle home and end keys on closed select (#13278) (d6ba25f)
- tabs: disabled tab link not preventing router navigation (#10358) (bf66d57), closes #10354
- virtual-scroll: don't set both
right
andleft
on the content (#13412) (6ee9149), closes #13231
Features
7.0.0-rc.0
Bug Fixes
- autocomplete: dividers in list throwing off keyboard navigation (#13224) (0886cef), closes #13200
- button: fix stroked button border color (#13219) (bfeb540)
- checkbox: clear tabindex from host element (#13308) (845388c)
- chips: set aria-invalid on chip input (#13249) (311d786), closes #13205
- common: account for async hammer loader when checking whether hammer is defined (#12933) (d15431b)
- drag-drop: emitting incorrect index for horizontal list in rtl (#13274) (f3bb0c7)
- drag-drop: error on IE when customizing root element (#13279) (e1071f0)
- drag-drop: unable to return item to initial container within same drag sequence, if not connected to current drag container (#13247) (0ac41a0), closes #13246
- form-field: always use native input value to determine whether control is empty (#13307) (10e6502), closes #13305
- form-field: incorrect arrow color for native select (#13046) (10b8353)
- form-field: native date/time input taller than text input (#13321) (92a5f0e), closes #13317
- form-field: native select outline not reset on firefox (#12967) (38e492f)
- grid: fix mat-grid-tile position (#12980) (966cf5f)
- grid-list: exception thrown when rowHeight is set before first change detection run (#13112) (e7007a2), closes #13102
- grid-list: throw error if invalid value is assigned for rowHeight (#13254) (210f3f9), closes #13252
- list: set aria-multiselectable on selection list (#13325) (877ef5d)
- overlay: connected overlay directive inputs not updating position strategy (#13066) (1d8e9af)
- paginator: getNumberOfPages off by one (#10724) (016ba5c), closes #10720 #10699
- radio: clear tabindex from host element (#13323) (5c0a061), closes #13311 #13308
- schematics: addressForm: fix bad Validators definition and TSLint (#13285) (267dd65)
- schematics: dashboard schematic fails parsing declaration in spec (#13269) (543cb9f)
- schematics: fix typo in table's datasource (#13283) (0ccdfc8)
- schematics: nav schematic generates TSLint errors (#13268) (8d25fd1)
- schematics: remove unnecessary semicolon in tree component (#13284) (8558878)
- schematics: sidenav toolbar should use default background (#13282) (c454f7b)
- schematics: table schematic not expanding full width (#13234) (884762f)
- schematics: toolbar in nav w/o z-index causes issues with dashboard (#13270) (d74e38c)
- select: give native select a bigger clickable area (#13228) (6da7d23)
- slide-toggle: clear tabindex from host element (#13311) (119fafd), closes #13308
- snack-bar: button not centered inside snack bar on IE11 (#13062) (4e05745)
- snackbar: move elevation style to snackbar theme (#13273) (96e670f)
- stepper: vertical step header labels not centered on IE (#13262) (40fb5cb)
- tooltip: custom gesture config not set up (#12941) (1852563), closes #12940 #12917
- tooltip: hiding and reopening for consecutive show calls (#13326) (b5001f6)
Features
- badge: allow badge to be disabled (#13196) (bfc1286), closes #13191
- button-toggle: align with 2018 material design spec (#12443) (fd3eb6a)
- overlay: add option to automatically dispose on navigation (#12592) (d48b1ba), closes #12544
- overlay: add support for swappable position strategies (#12306) (e0f3ae7)
- schematics: support for cdk
ng add
(#13319) (ac3f8c4) - schematics: support for cdk
ng-update
. (#13303) (1afddfb) - tabs: align with 2018 material design spec (#12605) (0c5598c)
- tree: support units different than px for indentation (#12991) (590d294)
Performance Improvements
update
BREAKING CHANGES
-
ripple: deprecated
[matRippleSpeedFactor]
andbaseSpeedFactor
for the ripples have been removed. Use the new animation config instead. -
Add test case; fix NodeJS version target circular dependency; Support for rule version constraints
7.0.0-beta.2
Highlights
- This release includes a number of changes to bring the components more in line with the 2018
Material Design update. If you are overriding the default styles, you may find that you need to
tweak them to look right after these changes.
Bug Fixes
- card: better scaling for avatar image (#13032) (19ce1a1)
- checkbox, slide-toggle: no margin if content is projected (#12973) (4636a98), closes #4720
- chips: arrow keys resetting focus to first chip (#12987) (959c827)
- dialog: clean up open dialogs on destroy (#12835) (4e15ba9)
- expansion: MatExpansionHeader transition animations (#13088) (4a96539), closes #11990 #11990 #11990 #11990 #11990 #11990 #11990 #11990
- form-field: Make labels show while printing (#12766) (e88271a)
- table: incorrect padding and text alignment in rtl (#12280) (2b89342), closes #12276
Features
- button: align with 2018 material design spec (#13083) (79801e0), closes #12537 #13011
- card: align with 2018 material design spec (#12731) (484dc8b)
- checkbox: align with 2018 material design spec (#12493) (95acccc)
- chips: align with 2018 material design spec (#12838) (3cc9c67)
- dialog: align with 2018 material design spec (#12705) (00b7233)
- elevation: move elevation rules into theme stylesheets (#11344) (9c075f5), closes #11343
BREAKING CHANGES
- dialog: * The
matDialogAnimations.slideDialog
symbol has been renamed tomatDialogAnimations.dialogContainer
.
- elevation: Because
mat-elevation
usages have been moved out of component stylesheets, users who have
not invoked a theme mixin will not see any elevation shadows on Material components.
However, users that have created a custom theme which lacks theelevation
property will
still see the default black shadows.
Additionally, users who want to use themed elevations in their custom components can create
their own shorthand mixin:
@import '~angular/material/theming';
$myTheme: ...
@mixin my-elevation($zValue) {
@include mat-theme-elevation($zValue, $myTheme);
}
and then invoke angular-material-theme
with the $myTheme
variable.
7.0.0-beta.1
Bug Fixes
- button-toggle: underlying input not disabled when group is disabled (#11610) (bd21f21), closes #11608
- chips: default click action on chip being prevented (#12856) (ae3ce4a), closes #9032
- datepicker: allow calendar cell selection via the space key (#13098) (5c4a334)
- drag-drop: DOM element not being returned to initial container on drop (#12948) (fb7bf90), closes #12944
- drag-drop: dragging class not being applied on drop container (#12921) (ec0de52)
- drag-drop: incorrectly calculating index when sorting horizontally (#13082) (664ef4c), closes #13072
- drag-drop: incorrectly calculating pointer position inside element, in some cases (#13111) (22cd3ed), closes #13107
- drag-drop: incorrectly picking up transitions on non-transform properties (#12966) (951add9)
- drag-drop: not dropping immediately for failed drag after a successful one (#13097) (32a0010), closes #13091
- drag-drop: text selection not disabled on safari if user drags out of the viewport (#12864) (8ee5fb6)
- drawer: respect
NoopAnimationsModule
and@.disabled
binding (#12839) (23df492) - expansion: disable all animations when using NoopAnimationsModule (#12855) (3e22641), closes #10590
- form-field: don't set up mutation observer on non-outline appearances (#12976) (cbfbade)
- form-field: remove chevron from native multi-select (#13009) (b62343a)
- grid-list: better handling of negative columns (#12939) (cfb83a0)
- input: do not focus input element twice (#12851) (7d586e4), closes #12849
- ng-update: do not throw if imports without named bindings are used (#12866) (#12984) (fe64211), closes #11571
- overlay: correct misspelled flexibleDiemsions property (#12927) (5d1643a), closes #12925
- overlay: infinite loop when used together with zone-patch-rxjs (#13081) (c2e502c), closes #12686
- platform: wrap MSStream property detection as string to prevent Closure property renaming (#13117) (aef61eb), closes #12223
- portal: remove dependency on deprecated parentInjector (#12986) (f39e091)
- progress-bar: buffer background animation stuttering (#13114) (2f2e116)
- ripple: ripples not being cleared if touch sequence is canceled (#12936) (948e563)
- sidenav: not positioning correctly in rtl (#12741) (9d3d95f)
- snack-bar: dismiss snack bar on destroy (#13042) (50be24b)
- tabs: pagination state not updated when tab content changes (#12911) (a7de64a), closes #12901
- tooltip: not showing up on touch devices (#12940) (722dfb3), closes #12917
- tooltip: text fields not editable if tooltip is applied in safari (#12959) (0389d12), closes #12953
- tree: theming nested notes (#12938) (e24f24a)
- typings: update typings to support more strict typings in RxJS 6.3.2 (#12979) (0a25fca)
Features
- list: add new '' (#12415) (69fa762)
- menu: align with 2018 material design spec (#12331) (c812268)
- ng-add: add x-prompts to install schematics (#13058) (a5bc79c)
- schematics: compatibility with Angular CLI 6.2.0 (#13078) (714c205), closes /github.com/angular/angular-cli/commit/9720077a4b5ae628ddfaf5f1a26bac3b04bdf637#diff-e73df838d6700d187eff76a50c7e1c53R233 #11438
- select: align panel appearance and animation with 2018 material design spec (#12975) (18d0fa8)
- stepper: Create MAT_STEPPER_GLOBAL_OPTIONS InjectionToken (#11457) (9ab2c90)
BREAKING CHANGES
- overlay: The
flexibleDiemsions
property onCdkConnectedOverlay
has been renamed toflexibleDimensions
7.0.0-beta.0
Highlights
- Support for drag and drop in
@angular/cdk/drag-drop
! - Support for virtual scrolling in
@angular/cdk/scrolling
! - You can now use a native
<select>
element in<mat-form-field>
- Updated visuals for 2018 Material Design update (in-progress, not all components are done)
Note that schematics for v7 are still in-progress.
Bug Fixes
- autocomplete: remove aria-owns attribute while closed (#12333) (f0a0ab1), closes #12332
- autocomplete: reopening closed autocomplete when coming back to tab (#12372) (c2b488e), closes #12337
- autofill: avoid firing unnecessary event on initial render of input (#12116) (c2fc3f4)
- badge: apply view encapsulation attributes on badge element (#12870) (db1d51f)
- badge: hide badges with no content (#12239) (701a0dd)
- bidi: default invalid directionality values to ltr (#12396) (e644350)
- breakpoints: emit only one event for adjacent breakpoint changes. (#11007) (2830a64)
- button: allow for non-colored flat button (#12550) (8c08bb1)
- button: allow transition for the button focus overlay for all buttons (#12552) (a080a79)
- button-toggle: clickable area not stretching when custom width is set (#12642) (ecf8b0d), closes #8432
- button-toggle: forward tabindex to underlying button (#12538) (7dff5f8)
- button-toggle: set aria-disabled based on group disabled state (#12828) (5969523)
- card: images in title-group overlapping content (#12205) (89d16b2), closes #10031
- card: incorrectly inverting inset divider in rtl (#12285) (fba4a93)
- cdk-text-field: prevent keyframes from getting stripped by LibSass (#12567) (915590e)
- checkbox: prevent error when disabling while focused (#12327) (c4cacce), closes #12323
- chips: chip list removing focus from first chip when adding through the input (#12840) (c3b2d4f)
- chips: dynamic chip input placeholder changes not being propagated to form field (#12422) (e007c27), closes #11861
- chips: focus indication not visible in high contrast mode (#12431) (bcf4c9f)
- chips: focus not being restored correctly on chip removal when inside component with animations (#12416) (5fb338b), closes #12374
- chips: focus not restored properly if chip has been removed by click (#12788) (3da390e), closes #12416
- chips: form field not appearing as blurred when used without an input (#12858) (f82a94b)
- chips: improved image scaling in avatar (#12843) (f6e787a), closes #12660
- chips: incorrectly handling disabled state (#12659) (65ad6ab), closes #11089
- chips: losing focus if active chip is deleted (#11910) (e13bfe0)
- chips: support focusing first/last item using home/end (#11892) (3723191)
- collections: align SelectionModel to
changed
naming (#8286) (27e88c3) - datepicker: able to open from readonly input using keyboard control (#12880) (548d2b7)
- datepicker: add minDate and maxDate validation in demo-app (#12531) (2b29c93)
- datepicker: input not picking up changes if datepicker is assigned after init (#12546) (3299628)
- datepicker: multiple dialog open if the user holds down enter key (#12238) (8e63656)
- datepicker: screenreaders report editable grid cells (#12275) (a2dcf21)
- datepicker-toggle: forward tabindex to underlying button (#12461) (648eb4a), closes #12456
- expansion: respect parent accordion hideToggle binding (#12725) (9c184ea), closes #6529
- expansion-panel: elevation transition not working (#12860) (ac8ed31)
- expansion-panel: focus lost if focused element is inside closing panel (#12692) (baf6419)
- expansion-panel: implement keyboard controls (#12427) (32e5d72)
- form-field: allow for measuring outline gap when label is not in dom (#12782) (21095f5)
- form-field: legacy ripple underline jumps in edge (#12648) (70d1be8), closes #6351
- form-field: outline gap not calculated when appearance is provided through DI (#12767) (8e49388), closes #12765
- form-field: remove outline gap for empty labels (#12637) (3d4fc82)
- form-field: reset inputs not being reset on safari (#12413) (4884dac), closes #12408
- form-field: unable to distinguish disabled form field in high contrast mode (#12445) (df2b371)
- form-field: update label gap for outline style (#12555) (03527c6)
- grid-list: not picking up indirect descendants ([#12823](https://github.com/ang...