From 997bf5f4d55b02f2273db6f912bca31a8d182f53 Mon Sep 17 00:00:00 2001 From: MarkStega Date: Tue, 12 Mar 2024 14:50:24 -0400 Subject: [PATCH] Rtl improvement & .Net 8.0.3 (#1275) * Improve switch label placement * Remove line added by VS excluding MBSwitch.scss * 2024-03-12: DB updates (no 8.0.3 yet) * Repair to release notes. * Repair deleted files and source of the deletion * 8.0.3 * Fix some MD3 issues * Stale file --------- Co-authored-by: Simon Ziegler --- .gitignore | 8 +- .../InternalTextFieldBase2.cs | 2 +- .../Components/TextField/MBTextField.cs | 2 +- .../Material.Blazor.MD3.csproj | 6 +- .../Model/MBCascadingDefaults.cs | 537 +- Material.Blazor.MD3/package-lock.json | 88 +- Material.Blazor.MD3/package.json | 2 +- .../Material.Blazor.Website.MD3.csproj | 4 +- Material.Blazor.Website.MD3/package-lock.json | 86 +- .../Material.Blazor.Website.Server.MD3.csproj | 8 +- .../Material.Blazor.Website.Server.csproj | 8 +- ...rial.Blazor.Website.WebAssembly.MD3.csproj | 4 +- ...Material.Blazor.Website.WebAssembly.csproj | 4 +- .../Material.Blazor.Website.csproj | 10 +- Material.Blazor.Website/package-lock.json | 86 +- .../wwwroot/icons/favicon-16x16.png | Bin 0 -> 720 bytes .../wwwroot/icons/favicon-32x32.png | Bin 0 -> 1972 bytes .../wwwroot/icons/icon-512.png | Bin 0 -> 17998 bytes .../wwwroot/images/book-shelves.jpg | Bin 0 -> 183758 bytes .../wwwroot/images/mac.jpg | Bin 0 -> 129976 bytes .../Components/Switch/MBSwitch.razor | 2 +- .../Components/Switch/MBSwitch.scss | 8 + Material.Blazor/Material.Blazor.csproj | 8 +- Material.Blazor/Model/MBCascadingDefaults.cs | 13 - Material.Blazor/Styles/material.blazor.scss | 1 + Material.Blazor/package-lock.json | 86 +- Material.Blazor/wwwroot/material.blazor.js | 22661 ++++++++++++++++ .../wwwroot/material.blazor.min.js | 266 + README.md | 4 +- ReleaseNotes.md | 27 +- 30 files changed, 23253 insertions(+), 678 deletions(-) create mode 100644 Material.Blazor.Website/wwwroot/icons/favicon-16x16.png create mode 100644 Material.Blazor.Website/wwwroot/icons/favicon-32x32.png create mode 100644 Material.Blazor.Website/wwwroot/icons/icon-512.png create mode 100644 Material.Blazor.Website/wwwroot/images/book-shelves.jpg create mode 100644 Material.Blazor.Website/wwwroot/images/mac.jpg create mode 100644 Material.Blazor/Components/Switch/MBSwitch.scss create mode 100644 Material.Blazor/wwwroot/material.blazor.js create mode 100644 Material.Blazor/wwwroot/material.blazor.min.js diff --git a/.gitignore b/.gitignore index 5e505c8cf..5828ee48e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,15 +2,17 @@ #Generated CSS and JS files **/Material.Blazor/wwwroot/*.css -**/Material.Blazor/wwwroot/*.js +# TEMPORARY REMOVAL WHILE PUBLISH DELETES STATIC ASSETS +# **/Material.Blazor.Website/wwwroot/js/*.* **/Material.Blazor.MD3/wwwroot/*.css **/Material.Blazor.MD3/wwwroot/*.js # TEMPORARY ADDITION UNTIL A SUITABLE TSC COMMAND IS FOUND TO PRODUCE THIS JS !**/Material.Blazor.MD3/wwwroot/Material.Blazor.MD3.lib.module.js **/Material.Blazor.Website/wwwroot/css/*.* -**/Material.Blazor.Website/wwwroot/js/*.* +# TEMPORARY REMOVAL while build/publish deletes static assets +#**/Material.Blazor.Website/wwwroot/js/*.* **/Material.Blazor.Website.MD3/wwwroot/css/*.* -# TEMPORARY REMOVAL WHILE PUBLISH DELETES STATIC ASSETS +# TEMPORARY REMOVAL while build/publish deletes static assets # **/Material.Blazor.Website.MD3/wwwroot/js/*.* # Generated by DocFx build diff --git a/Material.Blazor.MD3/Components/NumericField - Deprecated/InternalTextFieldBase2.cs b/Material.Blazor.MD3/Components/NumericField - Deprecated/InternalTextFieldBase2.cs index e77b88f56..dc2dce692 100644 --- a/Material.Blazor.MD3/Components/NumericField - Deprecated/InternalTextFieldBase2.cs +++ b/Material.Blazor.MD3/Components/NumericField - Deprecated/InternalTextFieldBase2.cs @@ -135,7 +135,7 @@ public abstract class InternalTextFieldBase2 : InputComponent #region local members - private MBDensity AppliedDensity => CascadingDefaults.AppliedTextFieldDensity(Density); +// private MBDensity AppliedDensity => CascadingDefaults.AppliedTextFieldDensity(Density); private string DateFieldErrorMessage { get; set; } diff --git a/Material.Blazor.MD3/Components/TextField/MBTextField.cs b/Material.Blazor.MD3/Components/TextField/MBTextField.cs index b2b880bb4..de04ad6b5 100644 --- a/Material.Blazor.MD3/Components/TextField/MBTextField.cs +++ b/Material.Blazor.MD3/Components/TextField/MBTextField.cs @@ -155,7 +155,7 @@ public sealed class MBTextField : InputComponent #region local members - private MBDensity AppliedDensity => CascadingDefaults.AppliedTextFieldDensity(Density); + // private MBDensity AppliedDensity => CascadingDefaults.AppliedTextFieldDensity(Density); private string DateFieldErrorMessage { get; set; } diff --git a/Material.Blazor.MD3/Material.Blazor.MD3.csproj b/Material.Blazor.MD3/Material.Blazor.MD3.csproj index 42abd8805..2183fd855 100644 --- a/Material.Blazor.MD3/Material.Blazor.MD3.csproj +++ b/Material.Blazor.MD3/Material.Blazor.MD3.csproj @@ -54,10 +54,10 @@ - - + + - + diff --git a/Material.Blazor.MD3/Model/MBCascadingDefaults.cs b/Material.Blazor.MD3/Model/MBCascadingDefaults.cs index 0178096d4..7390f5f7f 100644 --- a/Material.Blazor.MD3/Model/MBCascadingDefaults.cs +++ b/Material.Blazor.MD3/Model/MBCascadingDefaults.cs @@ -159,7 +159,7 @@ public class MBCascadingDefaults private decimal _iconFill = 1; public decimal IconFill { get => _iconFill; set => SetParameter(ref _iconFill, value); } internal decimal AppliedIconFill(decimal? iconFill = null) => iconFill ?? IconFill; - + private MBIconGradient _iconGradient = MBIconGradient.NormalEmphasis; public MBIconGradient IconGradient { get => _iconGradient; set => SetParameter(ref _iconGradient, value); } internal MBIconGradient AppliedIconGradient(MBIconGradient? iconGradient = null) => iconGradient ?? IconGradient; @@ -312,6 +312,22 @@ public class MBCascadingDefaults #endregion + #region MD2 ThemeDensity + /************************************************************************************************************* + * + * + * COMPONENT DENSITY + * + * + ************************************************************************************************************/ + + private MBDensity _themeDensity = MBDensity.Default; + /// + /// The default density for an all components. Any individual component density that is set overrides theme density. + /// + public MBDensity ThemeDensity { get => _themeDensity; set => SetParameter(ref _themeDensity, value); } + #endregion + #region SetParameter private void SetParameter(ref T privateParameter, T value) @@ -325,523 +341,4 @@ private void SetParameter(ref T privateParameter, T value) } #endregion - - #region ShallowCopy - - /// - /// Returns a shallow copy of the cascading defaults. - /// - /// - public MBCascadingDefaults ShallowCopy() - { - return (MBCascadingDefaults)MemberwiseClone(); - } - - #endregion - - - #region MBCascadingDefaults - MD2 - - //public class MBCascadingDefaults - //{ - // /************************************************************************************************************* - // * - // * - // * ATTRIBUTE SPLATTING AND VALIDATION - // * - // * - // ************************************************************************************************************/ - - // private bool _constrainSplattableAttributes = false; - // /// - // /// Determines whether should throw an exception for invalid - // /// unmatched HTML attributes passed to a component. - // /// and - // /// - // public bool ConstrainSplattableAttributes { get => _constrainSplattableAttributes; set => SetParameter(ref _constrainSplattableAttributes, value); } - - - - // private IEnumerable _allowedSplattableAttributes = Enumerable.Empty(); - // /// - // /// Further attributes that can be set as allowable when - // /// performs unmatched attribute validation. Works with . - // /// - // public IEnumerable AllowedSplattableAttributes { get => _allowedSplattableAttributes; set => SetParameter(ref _allowedSplattableAttributes, value); } - - - - // private MBItemValidation _itemValidation = MBItemValidation.Exception; - // /// - // /// Defines how radio button groups and selects validate mismtatch between item lists and initial value. - // /// - // public MBItemValidation ItemValidation { get => _itemValidation; set => SetParameter(ref _itemValidation, value); } - - // /// - // /// The applied item validation for selects and radio button groups. - // /// - // /// - // /// - // internal MBItemValidation AppliedItemValidation(MBItemValidation? criteria = null) => criteria ?? ItemValidation; - - - - // /************************************************************************************************************* - // * - // * - // * MDC CORE COMPONENTS - // * - // * - // ************************************************************************************************************/ - - // private bool _disabled = false; - // /// - // /// The default disabled state. - // /// - // public bool Disabled { get => _disabled; set => SetParameter(ref _disabled, value); } - - // /// - // /// The disabled state to apply. - // /// - // /// The required disabled state - // /// The to apply. - // internal bool AppliedDisabled(bool? disabled = null) => disabled ?? Disabled; - - - - // private MBButtonStyle _buttonStyle = MBButtonStyle.Text; - // /// - // /// The default style for an , initialized to if not explicitly set. - // /// - // public MBButtonStyle ButtonStyle { get => _buttonStyle; set => SetParameter(ref _buttonStyle, value); } - - // private MBButtonStyle? _cardButtonStyle = null; - // /// - // /// The default style for a card action button/ in an , returns the value of if not explicitly set. - // /// - // public MBButtonStyle CardActionButtonStyle { get => _cardButtonStyle ?? ButtonStyle; set => SetParameter(ref _cardButtonStyle, value); } - - // private MBButtonStyle? _dialogButtonStyle = null; - // /// - // /// The default style for a dialog action button/ in an , returns the value of if not explicitly set. - // /// - // public MBButtonStyle DialogActionButtonStyle { get => _dialogButtonStyle ?? ButtonStyle; set => SetParameter(ref _dialogButtonStyle, value); } - - // /// - // /// The style to apply within an . and must - // /// pass a reference to themselves (this) to reference the relevant default. - // /// - // /// The style parameter passed to the - // /// The 's card reference (null if button is not in a card) - // /// The 's card reference (null if button is not in a dialog) - // /// The to apply. - // internal MBButtonStyle AppliedStyle(MBButtonStyle? style, MBCard card, MBDialog dialog) - // { - // if (style != null) - // { - // return (MBButtonStyle)style; - // } - - // if (card != null) - // { - // return CardActionButtonStyle; - // } - - // if (dialog != null) - // { - // return DialogActionButtonStyle; - // } - - // return ButtonStyle; - // } - - - - // private MBCardStyle _cardStyle = MBCardStyle.Default; - // /// - // /// The default style for an , initialized to if not explicitly set. - // /// - // public MBCardStyle CardStyle { get => _cardStyle; set => SetParameter(ref _cardStyle, value); } - - // /// - // /// The style to apply to an . - // /// - // /// The style parameter passed to the - // /// The to apply. - // internal MBCardStyle AppliedStyle(MBCardStyle? style = null) => style ?? CardStyle; - - - - // private string _dateFormat = "D"; - // /// - // /// The default date format for an , initialized to "D" (culture specific C# long date pattern) if not explicitly set. - // /// - // public string DateFormat { get => _dateFormat; set => SetParameter(ref _dateFormat, value); } - - // /// - // /// The date format to apply to an . - // /// - // /// The style parameter passed to the - // /// The to apply. - // internal string AppliedDateFormat(string format = null) => string.IsNullOrWhiteSpace(format) ? DateFormat : format; - - - - // private MBListStyle _listStyle = MBListStyle.None; - // /// - // /// The default style for an , initialized to if not explicitly set. - // /// - // public MBListStyle ListStyle { get => _listStyle; set => SetParameter(ref _listStyle, value); } - - // /// - // /// The style to apply to an . - // /// - // /// The style parameter passed to the - // /// The to apply. - // internal MBListStyle AppliedStyle(MBListStyle? style = null) => style ?? ListStyle; - - - - // private MBListType _listType = MBListType.Regular; - // /// - // /// The default type for an , initialized to if not explicitly set. - // /// - // public MBListType ListType { get => _listType; set => SetParameter(ref _listType, value); } - - // /// - // /// The style to apply to an . - // /// - // /// The style parameter passed to the - // /// The to apply. - // internal MBListType AppliedType(MBListType? type = null) => type ?? ListType; - - - - // /************************************************************************************************************* - // * - // * - // * PLUS COMPONENTS - // * - // * - // ************************************************************************************************************/ - - // private MBDateSelectionCriteria _dateSelectionCriteria = MBDateSelectionCriteria.AllowAll; - // /// - // /// The default date selection criteria for a , initialized to if not explicitly set. - // /// - // public MBDateSelectionCriteria DateSelectionCriteria { get => _dateSelectionCriteria; set => SetParameter(ref _dateSelectionCriteria, value); } - - // /// - // /// The date selection criteria to apply to a . - // /// - // /// The criteria style parameter passed to the - // /// The to apply. - // internal MBDateSelectionCriteria AppliedDateSelectionCriteria(MBDateSelectionCriteria? criteria = null) => criteria ?? DateSelectionCriteria; - - - - // private DateTime datePickerDefaultMinDate = MBDatePicker.MinAllowableDate; - // /// - // /// The default minimum date . - // /// - // public DateTime DatePickerDefaultMinDate { get => datePickerDefaultMinDate; set => SetParameter(ref datePickerDefaultMinDate, value); } - - // /// - // /// The minimum date to apply to a . - // /// - // /// The criteria style parameter passed to the - // /// The to apply. - // internal DateTime AppliedDatePickerDefaultMinDate(DateTime minDate) => minDate == default || minDate <= MBDatePicker.MinAllowableDate ? DatePickerDefaultMinDate : minDate; - - - - // private DateTime datePickerDefaultMaxDate = MBDatePicker.MaxAllowableDate; - // /// - // /// The default maximum date . - // /// - // public DateTime DatePickerDefaultMaxDate { get => datePickerDefaultMaxDate; set => SetParameter(ref datePickerDefaultMaxDate, value); } - - // /// - // /// The maximum date to apply to a . - // /// - // /// The criteria style parameter passed to the - // /// The to apply. - // internal DateTime AppliedDatePickerDefaultMaxDate(DateTime maxDate) => maxDate == default || maxDate >= MBDatePicker.MaxAllowableDate ? DatePickerDefaultMaxDate : maxDate; - - - - // private int _debounceInterval = 300; - // /// - // /// The default debounce interval in milliseconds for a , initialized to 300 milliseconds if not explicitly set. - // /// - // public int DebounceInterval { get => _debounceInterval; set => SetParameter(ref _debounceInterval, value); } - - // /// - // /// The text debounce interval in milliseconds to apply to an . - // /// - // /// The text input style parameter passed to the - // /// The interval in milliseconds to apply. - // internal int AppliedDebounceInterval(int? debounceInterval = null) => debounceInterval ?? 300; - - - - // /************************************************************************************************************* - // * - // * - // * COMPONENT DENSITY - // * - // * - // ************************************************************************************************************/ - - private MBDensity _themeDensity = MBDensity.Default; - /// - /// The default density for an all components. Any individual component density that is set overrides theme density. - /// - public MBDensity ThemeDensity { get => _themeDensity; set => SetParameter(ref _themeDensity, value); } - - - // private MBDensity? _buttonDensity = null; - // /// - // /// The default density for an , defaults to if not explicitly set. - // /// - // public MBDensity ButtonDensity { get => _buttonDensity ?? ThemeDensity; set => SetParameter(ref _buttonDensity, value); } - - // /// - // /// The density to apply to an . - // /// - // /// The density parameter passed to the - // /// - // internal MBDensity AppliedButtonDensity(MBDensity? density) => density ?? ButtonDensity; - - - - // private MBDensity? _checkboxDensity = null; - // /// - // /// The default density for an , defaults to if not explicitly set. - // /// - // public MBDensity CheckboxDensity { get => _checkboxDensity ?? ThemeDensity; set => SetParameter(ref _checkboxDensity, value); } - - // /// - // /// The density to apply to an . - // /// - // /// The density parameter passed to the - // /// - // internal MBDensity AppliedCheckboxDensity(MBDensity? density) => density ?? CheckboxDensity; - - - - // private MBDensity? _dataTableDensity = null; - // /// - // /// The default density for an , defaults to if not explicitly set. - // /// - // public MBDensity DataTableDensity { get => _dataTableDensity ?? ThemeDensity; set => SetParameter(ref _dataTableDensity, value); } - - // /// - // /// The density to apply to an . - // /// - // /// The density parameter passed to the - // /// - // internal MBDensity AppliedDataTableDensity(MBDensity? density) => density ?? DataTableDensity; - - - - // private MBDensity? _iconButtonDensity = null; - // /// - // /// The default density for an or , defaults to if not explicitly set. - // /// - // public MBDensity IconButtonDensity { get => _iconButtonDensity ?? ThemeDensity; set => SetParameter(ref _iconButtonDensity, value); } - - // /// - // /// The density to apply to an . - // /// - // /// The density parameter passed to the - // /// - // internal MBDensity AppliedIconButtonDensity(MBDensity? density) => density ?? IconButtonDensity; - - - - // private MBDensity? _listSingleLineDensity = null; - // /// - // /// The default single line density for an , defaults to if not explicitly set. - // /// - // public MBDensity ListSingleLineDensity { get => _listSingleLineDensity ?? ThemeDensity; set => SetParameter(ref _listSingleLineDensity, value); } - - // /// - // /// The single density to apply to an . - // /// - // /// The density parameter passed to the - // /// - // internal MBDensity AppliedListSingleLineDensity(MBDensity? density) => density ?? IconButtonDensity; - - - - // private MBDensity? _radioButtonDensity = null; - // /// - // /// The default density for an or , defaults to if not explicitly set. - // /// - // public MBDensity RadioButtonDensity { get => _radioButtonDensity ?? ThemeDensity; set => SetParameter(ref _radioButtonDensity, value); } - - // /// - // /// The density to apply to an or . - // /// - // /// The density parameter passed to the - // /// - // internal MBDensity AppliedRadioButtonDensity(MBDensity? density) => density ?? RadioButtonDensity; - - - - // private MBDensity? _selectDensity = null; - // /// - // /// The default density for an , defaults to if not explicitly set. - // /// - // public MBDensity SelectDensity { get => _selectDensity ?? ThemeDensity; set => SetParameter(ref _selectDensity, value); } - - // /// - // /// The density to apply to an . - // /// - // /// The density parameter passed to the - // /// - // internal MBDensity AppliedSelectDensity(MBDensity? density) => density ?? SelectDensity; - - - - // private MBDensity? _switchDensity = null; - // /// - // /// The default density for an , defaults to if not explicitly set. - // /// - // public MBDensity SwitchDensity { get => _switchDensity ?? ThemeDensity; set => SetParameter(ref _switchDensity, value); } - - // /// - // /// The density to apply to an . - // /// - // /// The density parameter passed to the - // /// - // internal MBDensity AppliedSwitchDensity(MBDensity? density) => density ?? SwitchDensity; - - - - // private MBDensity? _tabBarDensity = null; - // /// - // /// The default density for an , defaults to if not explicitly set. - // /// - // public MBDensity TabBarDensity { get => _tabBarDensity ?? ThemeDensity; set => SetParameter(ref _tabBarDensity, value); } - - // /// - // /// The density to apply to an . - // /// - // /// The density parameter passed to the - // /// - // internal MBDensity AppliedTabBarDensity(MBDensity? density) => density ?? TabBarDensity; - - - - // private MBDensity? _textFieldDensity = null; - // /// - // /// The default density for an , , , , - // /// or , defaults to if not explicitly set. - // /// - // public MBDensity TextFieldDensity { get => _textFieldDensity ?? ThemeDensity; set => SetParameter(ref _textFieldDensity, value); } - - // /// - // /// The density to apply to an an , , , , - // /// or , initialized to . - // /// - // /// The density parameter passed to the - // /// - // internal MBDensity AppliedTextFieldDensity(MBDensity? density) => density ?? TextFieldDensity; - - - // /// - // /// A helper class for density, returning the density CSS class to be applied plus an indicator of whether to apply the class. - // /// - // internal class DensityInfo - // { - // public bool ApplyCssClass { get; set; } - // public string CssClassName { get; set; } - // } - - - // /// - // /// Returns a object for the given density parameter. - // /// - // /// - // /// - // internal DensityInfo GetDensityCssClass(MBDensity density) - // { - // return new DensityInfo() - // { - // ApplyCssClass = density != MBDensity.Default, - // CssClassName = density switch - // { - // MBDensity.Default => "dense-default", - // MBDensity.Minus1 => "dense--1", - // MBDensity.Minus2 => "dense--2", - // MBDensity.Comfortable => "dense-comfortable", - // MBDensity.Minus3 => "dense--3", - // MBDensity.Compact => "dense-compact", - // MBDensity.Minus4 => "dense--4", - // MBDensity.Minus5 => "dense--5", - // _ => throw new NotImplementedException(), - // } - // }; - // } - - - - // /************************************************************************************************************* - // * - // * - // * COMPONENT ACCESSIBILITY - // * - // * - // ************************************************************************************************************/ - - // private bool _TouchTarget = true; - // /// - // /// Determines whether to apply touch targets for accessibility. Defaults to true. - // /// - // public bool TouchTarget { get => _TouchTarget; set => SetParameter(ref _TouchTarget, value); } - // internal bool AppliedTouchTarget(bool? touchTarget) => touchTarget ?? TouchTarget; - - - - // /************************************************************************************************************* - // * - // * - // * VERSION - // * - // * - // ************************************************************************************************************/ - - // /// - // /// Gets incremented for every property update. Use Version to force Blazor to re-render components or <div> blocks - // /// with the @key attribute. - // /// - // public int Version { get; private set; } = 0; - - - - // /// - // /// Returns a shallow copy of the cascading defaults. - // /// - // /// - // public MBCascadingDefaults ShallowCopy() - // { - // return (MBCascadingDefaults)MemberwiseClone(); - // } - - - - // private void SetParameter(ref T privateParameter, T value) - // { - // if (!value.Equals(privateParameter)) - // { - // privateParameter = value; - - // Version++; - // } - // } - //} } - -#endregion diff --git a/Material.Blazor.MD3/package-lock.json b/Material.Blazor.MD3/package-lock.json index 6573630c4..b82a6d305 100644 --- a/Material.Blazor.MD3/package-lock.json +++ b/Material.Blazor.MD3/package-lock.json @@ -16,7 +16,7 @@ "@babel/plugin-transform-runtime": "^7.24.0", "@babel/preset-env": "^7.24.0", "@babel/preset-typescript": "^7.23.3", - "@material/web": "^1.3.1-nightly.34c0a67.0", + "@material/web": "^1.3.1-nightly.2ae226c.0", "babel-loader": "^9.1.3", "fork-ts-checker-webpack-plugin": "^9.0.2", "material-components-web": "14.0.0", @@ -219,9 +219,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.0.tgz", + "integrity": "sha512-efwOM90nCG6YeT8o3PCyBVSxRfmILxCNL+TNI8CGQl7a62M0Wd9VkV+XHwIlkOz1r4b+lxu6gBjdWiOMdUCrCQ==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -1854,13 +1854,13 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -2728,9 +2728,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz", - "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==", + "version": "20.11.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz", + "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -3059,13 +3059,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.9.tgz", + "integrity": "sha512-BXIWIaO3MewbXWdJdIGDWZurv5OGJlFNo7oy20DpB3kWDVJLcY2NRypRsRUbRe5KMqSNLuOGnWTFQQtY5MAsRw==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.0", "semver": "^6.3.1" }, "peerDependencies": { @@ -3085,6 +3085,22 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", @@ -3097,6 +3113,22 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3182,9 +3214,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001596", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz", - "integrity": "sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==", + "version": "1.0.30001597", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", + "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", "dev": true, "funding": [ { @@ -3390,15 +3422,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.695", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.695.tgz", - "integrity": "sha512-eMijZmeqPtm774pCZIOrfUHMs/7ls++W1sLhxwqgu8KQ8E2WmMtzwyqOMt0XXUJ3HTIPfuwlfwF+I5cwnfItBA==", + "version": "1.4.701", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.701.tgz", + "integrity": "sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA==", "dev": true }, "node_modules/enhanced-resolve": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz", - "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -3895,9 +3927,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" diff --git a/Material.Blazor.MD3/package.json b/Material.Blazor.MD3/package.json index a90092424..e578e7d50 100644 --- a/Material.Blazor.MD3/package.json +++ b/Material.Blazor.MD3/package.json @@ -26,7 +26,7 @@ "@babel/plugin-transform-runtime": "^7.24.0", "@babel/preset-env": "^7.24.0", "@babel/preset-typescript": "^7.23.3", - "@material/web": "^1.3.1-nightly.34c0a67.0", + "@material/web": "^1.3.1-nightly.2ae226c.0", "babel-loader": "^9.1.3", "fork-ts-checker-webpack-plugin": "^9.0.2", "material-components-web": "14.0.0", diff --git a/Material.Blazor.Website.MD3/Material.Blazor.Website.MD3.csproj b/Material.Blazor.Website.MD3/Material.Blazor.Website.MD3.csproj index bdc1277ae..8ff51d980 100644 --- a/Material.Blazor.Website.MD3/Material.Blazor.Website.MD3.csproj +++ b/Material.Blazor.Website.MD3/Material.Blazor.Website.MD3.csproj @@ -40,8 +40,8 @@ - - + + diff --git a/Material.Blazor.Website.MD3/package-lock.json b/Material.Blazor.Website.MD3/package-lock.json index 04eb0ddc3..bc07d4d0d 100644 --- a/Material.Blazor.Website.MD3/package-lock.json +++ b/Material.Blazor.Website.MD3/package-lock.json @@ -218,9 +218,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.0.tgz", + "integrity": "sha512-efwOM90nCG6YeT8o3PCyBVSxRfmILxCNL+TNI8CGQl7a62M0Wd9VkV+XHwIlkOz1r4b+lxu6gBjdWiOMdUCrCQ==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -1853,13 +1853,13 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -2702,9 +2702,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz", - "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==", + "version": "20.11.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz", + "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -3027,13 +3027,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.9.tgz", + "integrity": "sha512-BXIWIaO3MewbXWdJdIGDWZurv5OGJlFNo7oy20DpB3kWDVJLcY2NRypRsRUbRe5KMqSNLuOGnWTFQQtY5MAsRw==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.0", "semver": "^6.3.1" }, "peerDependencies": { @@ -3053,6 +3053,22 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", @@ -3065,6 +3081,22 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3150,9 +3182,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001596", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz", - "integrity": "sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==", + "version": "1.0.30001597", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", + "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", "dev": true, "funding": [ { @@ -3358,15 +3390,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.695", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.695.tgz", - "integrity": "sha512-eMijZmeqPtm774pCZIOrfUHMs/7ls++W1sLhxwqgu8KQ8E2WmMtzwyqOMt0XXUJ3HTIPfuwlfwF+I5cwnfItBA==", + "version": "1.4.701", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.701.tgz", + "integrity": "sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA==", "dev": true }, "node_modules/enhanced-resolve": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz", - "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -3863,9 +3895,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" diff --git a/Material.Blazor.Website.Server.MD3/Material.Blazor.Website.Server.MD3.csproj b/Material.Blazor.Website.Server.MD3/Material.Blazor.Website.Server.MD3.csproj index 525d38530..90bd7b1e5 100644 --- a/Material.Blazor.Website.Server.MD3/Material.Blazor.Website.Server.MD3.csproj +++ b/Material.Blazor.Website.Server.MD3/Material.Blazor.Website.Server.MD3.csproj @@ -5,12 +5,12 @@ - - - + + + - + diff --git a/Material.Blazor.Website.Server/Material.Blazor.Website.Server.csproj b/Material.Blazor.Website.Server/Material.Blazor.Website.Server.csproj index 99477afbb..35851489f 100644 --- a/Material.Blazor.Website.Server/Material.Blazor.Website.Server.csproj +++ b/Material.Blazor.Website.Server/Material.Blazor.Website.Server.csproj @@ -13,12 +13,12 @@ - - - + + + - + diff --git a/Material.Blazor.Website.WebAssembly.MD3/Material.Blazor.Website.WebAssembly.MD3.csproj b/Material.Blazor.Website.WebAssembly.MD3/Material.Blazor.Website.WebAssembly.MD3.csproj index 9950825a2..6449b1f3c 100644 --- a/Material.Blazor.Website.WebAssembly.MD3/Material.Blazor.Website.WebAssembly.MD3.csproj +++ b/Material.Blazor.Website.WebAssembly.MD3/Material.Blazor.Website.WebAssembly.MD3.csproj @@ -5,8 +5,8 @@ - - + + diff --git a/Material.Blazor.Website.WebAssembly/Material.Blazor.Website.WebAssembly.csproj b/Material.Blazor.Website.WebAssembly/Material.Blazor.Website.WebAssembly.csproj index e64f20a4f..7f1f1503d 100644 --- a/Material.Blazor.Website.WebAssembly/Material.Blazor.Website.WebAssembly.csproj +++ b/Material.Blazor.Website.WebAssembly/Material.Blazor.Website.WebAssembly.csproj @@ -5,8 +5,8 @@ - - + + diff --git a/Material.Blazor.Website/Material.Blazor.Website.csproj b/Material.Blazor.Website/Material.Blazor.Website.csproj index 4ad1a00c6..91c851d45 100644 --- a/Material.Blazor.Website/Material.Blazor.Website.csproj +++ b/Material.Blazor.Website/Material.Blazor.Website.csproj @@ -31,8 +31,8 @@ - - + + @@ -44,13 +44,17 @@ + + --> + + diff --git a/Material.Blazor.Website/package-lock.json b/Material.Blazor.Website/package-lock.json index 04eb0ddc3..bc07d4d0d 100644 --- a/Material.Blazor.Website/package-lock.json +++ b/Material.Blazor.Website/package-lock.json @@ -218,9 +218,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.0.tgz", + "integrity": "sha512-efwOM90nCG6YeT8o3PCyBVSxRfmILxCNL+TNI8CGQl7a62M0Wd9VkV+XHwIlkOz1r4b+lxu6gBjdWiOMdUCrCQ==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -1853,13 +1853,13 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -2702,9 +2702,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz", - "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==", + "version": "20.11.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz", + "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -3027,13 +3027,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.9.tgz", + "integrity": "sha512-BXIWIaO3MewbXWdJdIGDWZurv5OGJlFNo7oy20DpB3kWDVJLcY2NRypRsRUbRe5KMqSNLuOGnWTFQQtY5MAsRw==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.0", "semver": "^6.3.1" }, "peerDependencies": { @@ -3053,6 +3053,22 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", @@ -3065,6 +3081,22 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3150,9 +3182,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001596", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz", - "integrity": "sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==", + "version": "1.0.30001597", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", + "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", "dev": true, "funding": [ { @@ -3358,15 +3390,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.695", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.695.tgz", - "integrity": "sha512-eMijZmeqPtm774pCZIOrfUHMs/7ls++W1sLhxwqgu8KQ8E2WmMtzwyqOMt0XXUJ3HTIPfuwlfwF+I5cwnfItBA==", + "version": "1.4.701", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.701.tgz", + "integrity": "sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA==", "dev": true }, "node_modules/enhanced-resolve": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz", - "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -3863,9 +3895,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" diff --git a/Material.Blazor.Website/wwwroot/icons/favicon-16x16.png b/Material.Blazor.Website/wwwroot/icons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..b5bbe0dbca233cab5d93fac723e722de615c57ce GIT binary patch literal 720 zcmV;>0x$iEP);ZBygs4$^)dB?_ z6jTru1W8#)f<~`N4I*sNB%`v_>$&%wz1NCs8QBAj)@*O~|Ly&+wSN%*S@19VmX;Qb zMx&I{)RlJD_lz|4EEo_eiB$mO%AQAiI(C(HZgAuN-C!uV<~KlNSyxfgSF0E>IQu$9 z>C9ZAwJ3Me1FJoc3Y4c}Oq_0-vhfF?wxoN7PWruqc?lZ$fLXXgaFJGAA_M~<%z%J# zBFde!Z3X4ASwMYhY`K@vLxzE^PNsD${xP|gS%gdrhlxS?GyY{_&iS=p0ZZ1;0;&qz zM+_4#A>aoup?VNuikT-^h(!kC{eW$@x$)#EGk>%7z0w>z3=M0$i`}?))d@KprzfXh znwC6?hPdsyB0DV;U(HOYVMI7j%z5Nf)0`L$eBJ+i-!iBP$C`+A7zMsy!8HLJ8{N1b z63m9?LykN5UNBpf@enU*5JC#|W{vgH{!?%zlqwA0P? zzDsRPyg1;P2NRRYfz-Ys@n+w%{X0aeyOH9~ZAz)5R#2WwO#6donyf??*(5MwOXCfL za+Q$MpGh22iX(=Eds$f-+s_SD#ZxdivZ>!0AOHN;vgH=7s80D*jS^BfncAnylve6wkt)qsy2Q|Hfn@Aux% z?{$B_0oY^yz+8Cn%=w{wf2AiV&2akVn#4-ZKUH})3?-vLmzp@qKrkC6}EF1P~V z0IJkt9+Tp+V-5IEiEm?@v4!%JO_6?CUNZ%dpJZO^m=KOCBi9C~SDD&#y0)#bESnhTeqC|=p!B!!>Xgy@oHaZtEsb6yakH1B>8{z2-MHSM|W9)RK$Ys&bj zs{<#&$ik=nBOPuP`1|EspGXkR!2l+xwW>W~VY+H#Ylh&RxHSE6@X*zX0VJW>teQSz z?J3AKEUVk-wDU*q1wfF*P~`dr5k_OG=mE%1Fz@GG!gkh&sjvA)!+)-#1=`uN(T0teT6C!7v|R#6``_7$$nO{lHp zT(ERH0F{O=J=k5aZ>np0mLT3V#&e?oyv4zDQ<9^`8{X_1Q|zoS^Ro3!ewF^4rf$J4 zF7-~xsHvYd^b~H&Ppr2(Z0;PzN7BTp=7HkW!sYelwlR0v-2fCrc01+aASYbWvBkP+h{_4>#WMwtoh&*mPVJ#MNr8YK!Hx;ZSy* z=@`$8X*dBm|Ji;~Ntx`;lW&ifK>_J88RIFMtg>_)%!;;rUA_9oFnSe}WsP63|Bs#u zvrlyQ!M{nO6ggQ4C%~{akXc!C(s2InS@8hmEHRb4onjfSBHJ4KioR2jY*}Of5BIy< z=fB^7j%w}O@8{m~7XM(CHQL3Y?N7(f*}knhjaPh1Kgmm|dy8`k+b3fQ62GboPHG;x_E$#(&caZrHIivpUu^BI;#2hR%__p=1xQF{j^g6TbG+-#wUbc8DXT_Pqo+b zkzrSTUOm)@)_`Ul2>^&gDW&k z{lzyxb*ic@b4bzdOgs2hr%f!OS*r8EiR`v}g5T}TT~hZ3=j3-Oc9Oy`F=|y==t{re z7>#${19$5xUi!K2+I8o10w=tPWDxD6B{!Km3_TCL1m1xK$#q#S8{9A5?&mmxkC7za zi2>|9#ZaTr4IKnU_{y>zgd`LRFzgv9NYNOM@eE5J2#=Wcy0LZUN6hE?z;u**Ui?MK z$hC{o( literal 0 HcmV?d00001 diff --git a/Material.Blazor.Website/wwwroot/icons/icon-512.png b/Material.Blazor.Website/wwwroot/icons/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..579bd8815fa0afcf3dddf81c398e1b219dc5916c GIT binary patch literal 17998 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�BsESzlX?D@>IEOq(iKz{{&y+a@xA+_-;x< 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 CJgYtc literal 0 HcmV?d00001 diff --git a/Material.Blazor.Website/wwwroot/images/book-shelves.jpg b/Material.Blazor.Website/wwwroot/images/book-shelves.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9830144612096c55f74969bcc2dd1edd1979c576 GIT binary patch literal 183758 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±3aD!IR*XES& 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 z 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 Qp2Tep{iN_vnlk7A+4~HO - \ No newline at end of file + \ No newline at end of file diff --git a/Material.Blazor/Components/Switch/MBSwitch.scss b/Material.Blazor/Components/Switch/MBSwitch.scss new file mode 100644 index 000000000..5c14ee143 --- /dev/null +++ b/Material.Blazor/Components/Switch/MBSwitch.scss @@ -0,0 +1,8 @@ +.mb-switch-label { + margin-left: 1rem; +} + +[dir="rtl"] .mb-switch-label { + margin-left: 0; + margin-right: 1rem; +} \ No newline at end of file diff --git a/Material.Blazor/Material.Blazor.csproj b/Material.Blazor/Material.Blazor.csproj index f48f30f35..60c46cec7 100644 --- a/Material.Blazor/Material.Blazor.csproj +++ b/Material.Blazor/Material.Blazor.csproj @@ -1,4 +1,4 @@ - + - - + + - + diff --git a/Material.Blazor/Model/MBCascadingDefaults.cs b/Material.Blazor/Model/MBCascadingDefaults.cs index 2edd99df3..b6fd7bd71 100644 --- a/Material.Blazor/Model/MBCascadingDefaults.cs +++ b/Material.Blazor/Model/MBCascadingDefaults.cs @@ -803,19 +803,6 @@ internal DensityInfo GetDensityCssClass(MBDensity density) #endregion - #region ShallowCopy - - /// - /// Returns a shallow copy of the cascading defaults. - /// - /// - public MBCascadingDefaults ShallowCopy() - { - return (MBCascadingDefaults)MemberwiseClone(); - } - - #endregion - #region SetParameter private void SetParameter(ref T privateParameter, T value) diff --git a/Material.Blazor/Styles/material.blazor.scss b/Material.Blazor/Styles/material.blazor.scss index 131ba9de9..063069298 100644 --- a/Material.Blazor/Styles/material.blazor.scss +++ b/Material.Blazor/Styles/material.blazor.scss @@ -29,6 +29,7 @@ @use '../Components/Shield/MBShield.scss'; @use '../Components/SlidingContent/MBSlidingContent.scss'; @use '../Components/Snackbar/MBSnackbar.scss'; +@use '../Components/Switch/MBSwitch.scss'; @use '../Components/TabBar/MBTabBar.scss'; @use '../Components/TextField/MBTextField.scss'; @use '../Components/Toast/MBToast.scss'; diff --git a/Material.Blazor/package-lock.json b/Material.Blazor/package-lock.json index b82c70ee9..888dab55b 100644 --- a/Material.Blazor/package-lock.json +++ b/Material.Blazor/package-lock.json @@ -218,9 +218,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.0.tgz", + "integrity": "sha512-efwOM90nCG6YeT8o3PCyBVSxRfmILxCNL+TNI8CGQl7a62M0Wd9VkV+XHwIlkOz1r4b+lxu6gBjdWiOMdUCrCQ==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -1853,13 +1853,13 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -2702,9 +2702,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz", - "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==", + "version": "20.11.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz", + "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -3027,13 +3027,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.9.tgz", + "integrity": "sha512-BXIWIaO3MewbXWdJdIGDWZurv5OGJlFNo7oy20DpB3kWDVJLcY2NRypRsRUbRe5KMqSNLuOGnWTFQQtY5MAsRw==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.0", "semver": "^6.3.1" }, "peerDependencies": { @@ -3053,6 +3053,22 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", @@ -3065,6 +3081,22 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3150,9 +3182,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001596", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz", - "integrity": "sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==", + "version": "1.0.30001597", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", + "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", "dev": true, "funding": [ { @@ -3358,15 +3390,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.695", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.695.tgz", - "integrity": "sha512-eMijZmeqPtm774pCZIOrfUHMs/7ls++W1sLhxwqgu8KQ8E2WmMtzwyqOMt0XXUJ3HTIPfuwlfwF+I5cwnfItBA==", + "version": "1.4.701", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.701.tgz", + "integrity": "sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA==", "dev": true }, "node_modules/enhanced-resolve": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz", - "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -3863,9 +3895,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" diff --git a/Material.Blazor/wwwroot/material.blazor.js b/Material.Blazor/wwwroot/material.blazor.js new file mode 100644 index 000000000..c60e1e0f8 --- /dev/null +++ b/Material.Blazor/wwwroot/material.blazor.js @@ -0,0 +1,22661 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 633: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var _typeof = (__webpack_require__(738)["default"]); +function _regeneratorRuntime() { + "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ + module.exports = _regeneratorRuntime = function _regeneratorRuntime() { + return e; + }, module.exports.__esModule = true, module.exports["default"] = module.exports; + var t, + e = {}, + r = Object.prototype, + n = r.hasOwnProperty, + o = Object.defineProperty || function (t, e, r) { + t[e] = r.value; + }, + i = "function" == typeof Symbol ? Symbol : {}, + a = i.iterator || "@@iterator", + c = i.asyncIterator || "@@asyncIterator", + u = i.toStringTag || "@@toStringTag"; + function define(t, e, r) { + return Object.defineProperty(t, e, { + value: r, + enumerable: !0, + configurable: !0, + writable: !0 + }), t[e]; + } + try { + define({}, ""); + } catch (t) { + define = function define(t, e, r) { + return t[e] = r; + }; + } + function wrap(t, e, r, n) { + var i = e && e.prototype instanceof Generator ? e : Generator, + a = Object.create(i.prototype), + c = new Context(n || []); + return o(a, "_invoke", { + value: makeInvokeMethod(t, r, c) + }), a; + } + function tryCatch(t, e, r) { + try { + return { + type: "normal", + arg: t.call(e, r) + }; + } catch (t) { + return { + type: "throw", + arg: t + }; + } + } + e.wrap = wrap; + var h = "suspendedStart", + l = "suspendedYield", + f = "executing", + s = "completed", + y = {}; + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + var p = {}; + define(p, a, function () { + return this; + }); + var d = Object.getPrototypeOf, + v = d && d(d(values([]))); + v && v !== r && n.call(v, a) && (p = v); + var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); + function defineIteratorMethods(t) { + ["next", "throw", "return"].forEach(function (e) { + define(t, e, function (t) { + return this._invoke(e, t); + }); + }); + } + function AsyncIterator(t, e) { + function invoke(r, o, i, a) { + var c = tryCatch(t[r], t, o); + if ("throw" !== c.type) { + var u = c.arg, + h = u.value; + return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { + invoke("next", t, i, a); + }, function (t) { + invoke("throw", t, i, a); + }) : e.resolve(h).then(function (t) { + u.value = t, i(u); + }, function (t) { + return invoke("throw", t, i, a); + }); + } + a(c.arg); + } + var r; + o(this, "_invoke", { + value: function value(t, n) { + function callInvokeWithMethodAndArg() { + return new e(function (e, r) { + invoke(t, n, e, r); + }); + } + return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); + } + }); + } + function makeInvokeMethod(e, r, n) { + var o = h; + return function (i, a) { + if (o === f) throw new Error("Generator is already running"); + if (o === s) { + if ("throw" === i) throw a; + return { + value: t, + done: !0 + }; + } + for (n.method = i, n.arg = a;;) { + var c = n.delegate; + if (c) { + var u = maybeInvokeDelegate(c, n); + if (u) { + if (u === y) continue; + return u; + } + } + if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { + if (o === h) throw o = s, n.arg; + n.dispatchException(n.arg); + } else "return" === n.method && n.abrupt("return", n.arg); + o = f; + var p = tryCatch(e, r, n); + if ("normal" === p.type) { + if (o = n.done ? s : l, p.arg === y) continue; + return { + value: p.arg, + done: n.done + }; + } + "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); + } + }; + } + function maybeInvokeDelegate(e, r) { + var n = r.method, + o = e.iterator[n]; + if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; + var i = tryCatch(o, e.iterator, r.arg); + if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; + var a = i.arg; + return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); + } + function pushTryEntry(t) { + var e = { + tryLoc: t[0] + }; + 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); + } + function resetTryEntry(t) { + var e = t.completion || {}; + e.type = "normal", delete e.arg, t.completion = e; + } + function Context(t) { + this.tryEntries = [{ + tryLoc: "root" + }], t.forEach(pushTryEntry, this), this.reset(!0); + } + function values(e) { + if (e || "" === e) { + var r = e[a]; + if (r) return r.call(e); + if ("function" == typeof e.next) return e; + if (!isNaN(e.length)) { + var o = -1, + i = function next() { + for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; + return next.value = t, next.done = !0, next; + }; + return i.next = i; + } + } + throw new TypeError(_typeof(e) + " is not iterable"); + } + return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { + value: GeneratorFunctionPrototype, + configurable: !0 + }), o(GeneratorFunctionPrototype, "constructor", { + value: GeneratorFunction, + configurable: !0 + }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { + var e = "function" == typeof t && t.constructor; + return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); + }, e.mark = function (t) { + return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; + }, e.awrap = function (t) { + return { + __await: t + }; + }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { + return this; + }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { + void 0 === i && (i = Promise); + var a = new AsyncIterator(wrap(t, r, n, o), i); + return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { + return t.done ? t.value : a.next(); + }); + }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { + return this; + }), define(g, "toString", function () { + return "[object Generator]"; + }), e.keys = function (t) { + var e = Object(t), + r = []; + for (var n in e) r.push(n); + return r.reverse(), function next() { + for (; r.length;) { + var t = r.pop(); + if (t in e) return next.value = t, next.done = !1, next; + } + return next.done = !0, next; + }; + }, e.values = values, Context.prototype = { + constructor: Context, + reset: function reset(e) { + if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); + }, + stop: function stop() { + this.done = !0; + var t = this.tryEntries[0].completion; + if ("throw" === t.type) throw t.arg; + return this.rval; + }, + dispatchException: function dispatchException(e) { + if (this.done) throw e; + var r = this; + function handle(n, o) { + return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; + } + for (var o = this.tryEntries.length - 1; o >= 0; --o) { + var i = this.tryEntries[o], + a = i.completion; + if ("root" === i.tryLoc) return handle("end"); + if (i.tryLoc <= this.prev) { + var c = n.call(i, "catchLoc"), + u = n.call(i, "finallyLoc"); + if (c && u) { + if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); + if (this.prev < i.finallyLoc) return handle(i.finallyLoc); + } else if (c) { + if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); + } else { + if (!u) throw new Error("try statement without catch or finally"); + if (this.prev < i.finallyLoc) return handle(i.finallyLoc); + } + } + } + }, + abrupt: function abrupt(t, e) { + for (var r = this.tryEntries.length - 1; r >= 0; --r) { + var o = this.tryEntries[r]; + if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { + var i = o; + break; + } + } + i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); + var a = i ? i.completion : {}; + return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); + }, + complete: function complete(t, e) { + if ("throw" === t.type) throw t.arg; + return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; + }, + finish: function finish(t) { + for (var e = this.tryEntries.length - 1; e >= 0; --e) { + var r = this.tryEntries[e]; + if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; + } + }, + "catch": function _catch(t) { + for (var e = this.tryEntries.length - 1; e >= 0; --e) { + var r = this.tryEntries[e]; + if (r.tryLoc === t) { + var n = r.completion; + if ("throw" === n.type) { + var o = n.arg; + resetTryEntry(r); + } + return o; + } + } + throw new Error("illegal catch attempt"); + }, + delegateYield: function delegateYield(e, r, n) { + return this.delegate = { + iterator: values(e), + resultName: r, + nextLoc: n + }, "next" === this.method && (this.arg = t), y; + } + }, e; +} +module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), + +/***/ 738: +/***/ ((module) => { + +function _typeof(o) { + "@babel/helpers - typeof"; + + return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { + return typeof o; + } : function (o) { + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; + }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(o); +} +module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports; + +/***/ }), + +/***/ 756: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +// TODO(Babel 8): Remove this file. + +var runtime = __webpack_require__(633)(); +module.exports = runtime; + +// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736= +try { + regeneratorRuntime = runtime; +} catch (accidentalStrictMode) { + if (typeof globalThis === "object") { + globalThis.regeneratorRuntime = runtime; + } else { + Function("r", "regeneratorRuntime = r")(runtime); + } +} + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; + +// NAMESPACE OBJECT: ./Components/AutocompletePagedField/MBAutocompletePagedField.ts +var MBAutocompletePagedField_namespaceObject = {}; +__webpack_require__.r(MBAutocompletePagedField_namespaceObject); +__webpack_require__.d(MBAutocompletePagedField_namespaceObject, { + close: () => (MBAutocompletePagedField_close), + init: () => (init), + open: () => (MBAutocompletePagedField_open), + setDisabled: () => (setDisabled), + setValue: () => (setValue) +}); + +// NAMESPACE OBJECT: ./Components/AutocompleteTextField/MBAutocompleteTextField.ts +var MBAutocompleteTextField_namespaceObject = {}; +__webpack_require__.r(MBAutocompleteTextField_namespaceObject); +__webpack_require__.d(MBAutocompleteTextField_namespaceObject, { + close: () => (MBAutocompleteTextField_close), + init: () => (MBAutocompleteTextField_init), + open: () => (MBAutocompleteTextField_open), + setDisabled: () => (MBAutocompleteTextField_setDisabled), + setValue: () => (MBAutocompleteTextField_setValue) +}); + +// NAMESPACE OBJECT: ./Components/BladeSet/MBBladeSet.ts +var MBBladeSet_namespaceObject = {}; +__webpack_require__.r(MBBladeSet_namespaceObject); +__webpack_require__.d(MBBladeSet_namespaceObject, { + closeBlade: () => (closeBlade), + openBlade: () => (openBlade) +}); + +// NAMESPACE OBJECT: ./Components/Button/MBButton.ts +var MBButton_namespaceObject = {}; +__webpack_require__.r(MBButton_namespaceObject); +__webpack_require__.d(MBButton_namespaceObject, { + init: () => (MBButton_init) +}); + +// NAMESPACE OBJECT: ./Components/Card/MBCard.ts +var MBCard_namespaceObject = {}; +__webpack_require__.r(MBCard_namespaceObject); +__webpack_require__.d(MBCard_namespaceObject, { + init: () => (MBCard_init) +}); + +// NAMESPACE OBJECT: ./Components/Checkbox/MBCheckbox.ts +var MBCheckbox_namespaceObject = {}; +__webpack_require__.r(MBCheckbox_namespaceObject); +__webpack_require__.d(MBCheckbox_namespaceObject, { + init: () => (MBCheckbox_init), + setChecked: () => (setChecked), + setDisabled: () => (MBCheckbox_setDisabled), + setIndeterminate: () => (setIndeterminate) +}); + +// NAMESPACE OBJECT: ./Components/CircularProgress/MBCircularProgress.ts +var MBCircularProgress_namespaceObject = {}; +__webpack_require__.r(MBCircularProgress_namespaceObject); +__webpack_require__.d(MBCircularProgress_namespaceObject, { + init: () => (MBCircularProgress_init), + setProgress: () => (setProgress) +}); + +// NAMESPACE OBJECT: ./Components/DataTable/MBDataTable.ts +var MBDataTable_namespaceObject = {}; +__webpack_require__.r(MBDataTable_namespaceObject); +__webpack_require__.d(MBDataTable_namespaceObject, { + init: () => (MBDataTable_init), + setProgress: () => (MBDataTable_setProgress) +}); + +// NAMESPACE OBJECT: ./Components/DatePicker/MBDatePicker.ts +var MBDatePicker_namespaceObject = {}; +__webpack_require__.r(MBDatePicker_namespaceObject); +__webpack_require__.d(MBDatePicker_namespaceObject, { + init: () => (MBDatePicker_init), + listItemClick: () => (listItemClick), + scrollToYear: () => (scrollToYear), + setDisabled: () => (MBDatePicker_setDisabled) +}); + +// NAMESPACE OBJECT: ./Components/Dialog/MBDialog.ts +var MBDialog_namespaceObject = {}; +__webpack_require__.r(MBDialog_namespaceObject); +__webpack_require__.d(MBDialog_namespaceObject, { + hide: () => (hide), + show: () => (show) +}); + +// NAMESPACE OBJECT: ./Components/Drawer/MBDrawer.ts +var MBDrawer_namespaceObject = {}; +__webpack_require__.r(MBDrawer_namespaceObject); +__webpack_require__.d(MBDrawer_namespaceObject, { + init: () => (MBDrawer_init), + toggle: () => (toggle) +}); + +// NAMESPACE OBJECT: ./Components/DragAndDropList/MBDragAndDropList.ts +var MBDragAndDropList_namespaceObject = {}; +__webpack_require__.r(MBDragAndDropList_namespaceObject); +__webpack_require__.d(MBDragAndDropList_namespaceObject, { + initDropTarget: () => (initDropTarget) +}); + +// NAMESPACE OBJECT: ./Components/FileUpload/MBFileUpload.ts +var MBFileUpload_namespaceObject = {}; +__webpack_require__.r(MBFileUpload_namespaceObject); +__webpack_require__.d(MBFileUpload_namespaceObject, { + click: () => (click) +}); + +// NAMESPACE OBJECT: ./Components/FloatingActionButton/MBFloatingActionButton.ts +var MBFloatingActionButton_namespaceObject = {}; +__webpack_require__.r(MBFloatingActionButton_namespaceObject); +__webpack_require__.d(MBFloatingActionButton_namespaceObject, { + init: () => (MBFloatingActionButton_init), + setExited: () => (setExited) +}); + +// NAMESPACE OBJECT: ./Components/IconButton/MBIconButton.ts +var MBIconButton_namespaceObject = {}; +__webpack_require__.r(MBIconButton_namespaceObject); +__webpack_require__.d(MBIconButton_namespaceObject, { + init: () => (MBIconButton_init) +}); + +// NAMESPACE OBJECT: ./Components/IconButtonToggle/MBIconButtonToggle.ts +var MBIconButtonToggle_namespaceObject = {}; +__webpack_require__.r(MBIconButtonToggle_namespaceObject); +__webpack_require__.d(MBIconButtonToggle_namespaceObject, { + click: () => (MBIconButtonToggle_click), + init: () => (MBIconButtonToggle_init), + setOn: () => (setOn) +}); + +// NAMESPACE OBJECT: ./Components/LinearProgress/MBLinearProgress.ts +var MBLinearProgress_namespaceObject = {}; +__webpack_require__.r(MBLinearProgress_namespaceObject); +__webpack_require__.d(MBLinearProgress_namespaceObject, { + init: () => (MBLinearProgress_init), + restartAnimation: () => (restartAnimation), + setProgress: () => (MBLinearProgress_setProgress) +}); + +// NAMESPACE OBJECT: ./Components/List/MBList.ts +var MBList_namespaceObject = {}; +__webpack_require__.r(MBList_namespaceObject); +__webpack_require__.d(MBList_namespaceObject, { + init: () => (MBList_init) +}); + +// NAMESPACE OBJECT: ./Components/Menu/MBMenu.ts +var MBMenu_namespaceObject = {}; +__webpack_require__.r(MBMenu_namespaceObject); +__webpack_require__.d(MBMenu_namespaceObject, { + hide: () => (MBMenu_hide), + init: () => (MBMenu_init), + show: () => (MBMenu_show) +}); + +// NAMESPACE OBJECT: ./Components/MenuSurface/MBMenuSurface.ts +var MBMenuSurface_namespaceObject = {}; +__webpack_require__.r(MBMenuSurface_namespaceObject); +__webpack_require__.d(MBMenuSurface_namespaceObject, { + hide: () => (MBMenuSurface_hide), + init: () => (MBMenuSurface_init), + show: () => (MBMenuSurface_show) +}); + +// NAMESPACE OBJECT: ./Components/RadioButton/MBRadioButton.ts +var MBRadioButton_namespaceObject = {}; +__webpack_require__.r(MBRadioButton_namespaceObject); +__webpack_require__.d(MBRadioButton_namespaceObject, { + init: () => (MBRadioButton_init), + setChecked: () => (MBRadioButton_setChecked), + setDisabled: () => (MBRadioButton_setDisabled) +}); + +// NAMESPACE OBJECT: ./Components/SegmentedButtonMulti/MBSegmentedButtonMulti.ts +var MBSegmentedButtonMulti_namespaceObject = {}; +__webpack_require__.r(MBSegmentedButtonMulti_namespaceObject); +__webpack_require__.d(MBSegmentedButtonMulti_namespaceObject, { + init: () => (MBSegmentedButtonMulti_init), + setDisabled: () => (MBSegmentedButtonMulti_setDisabled), + setSelected: () => (setSelected) +}); + +// NAMESPACE OBJECT: ./Components/Select/MBSelect.ts +var MBSelect_namespaceObject = {}; +__webpack_require__.r(MBSelect_namespaceObject); +__webpack_require__.d(MBSelect_namespaceObject, { + init: () => (MBSelect_init), + setDisabled: () => (MBSelect_setDisabled), + setIndex: () => (setIndex) +}); + +// NAMESPACE OBJECT: ./Components/Slider/MBSlider.ts +var MBSlider_namespaceObject = {}; +__webpack_require__.r(MBSlider_namespaceObject); +__webpack_require__.d(MBSlider_namespaceObject, { + init: () => (MBSlider_init), + setDisabled: () => (MBSlider_setDisabled), + setValue: () => (MBSlider_setValue) +}); + +// NAMESPACE OBJECT: ./Components/Snackbar/MBSnackbar.ts +var MBSnackbar_namespaceObject = {}; +__webpack_require__.r(MBSnackbar_namespaceObject); +__webpack_require__.d(MBSnackbar_namespaceObject, { + init: () => (MBSnackbar_init) +}); + +// NAMESPACE OBJECT: ./Components/Switch/MBSwitch.ts +var MBSwitch_namespaceObject = {}; +__webpack_require__.r(MBSwitch_namespaceObject); +__webpack_require__.d(MBSwitch_namespaceObject, { + init: () => (MBSwitch_init), + setDisabled: () => (MBSwitch_setDisabled), + setSelected: () => (MBSwitch_setSelected) +}); + +// NAMESPACE OBJECT: ./Components/TabBar/MBTabBar.ts +var MBTabBar_namespaceObject = {}; +__webpack_require__.r(MBTabBar_namespaceObject); +__webpack_require__.d(MBTabBar_namespaceObject, { + activateTab: () => (activateTab), + init: () => (MBTabBar_init) +}); + +// NAMESPACE OBJECT: ./Components/TextField/MBTextField.ts +var MBTextField_namespaceObject = {}; +__webpack_require__.r(MBTextField_namespaceObject); +__webpack_require__.d(MBTextField_namespaceObject, { + init: () => (MBTextField_init), + setDisabled: () => (MBTextField_setDisabled), + setHelperText: () => (setHelperText), + setType: () => (setType), + setValue: () => (MBTextField_setValue) +}); + +// NAMESPACE OBJECT: ./Components/Tooltip/MBTooltip.ts +var MBTooltip_namespaceObject = {}; +__webpack_require__.r(MBTooltip_namespaceObject); +__webpack_require__.d(MBTooltip_namespaceObject, { + init: () => (MBTooltip_init), + numbers: () => (tooltip_constants_numbers) +}); + +// NAMESPACE OBJECT: ./Components/TopAppBar/MBTopAppBar.ts +var MBTopAppBar_namespaceObject = {}; +__webpack_require__.r(MBTopAppBar_namespaceObject); +__webpack_require__.d(MBTopAppBar_namespaceObject, { + init: () => (MBTopAppBar_init) +}); + +// NAMESPACE OBJECT: ./scripts/rtl.ts +var scripts_rtl_namespaceObject = {}; +__webpack_require__.r(scripts_rtl_namespaceObject); +__webpack_require__.d(scripts_rtl_namespaceObject, { + isDocumentRTL: () => (rtl_isDocumentRTL), + isElementRTL: () => (rtl_isElementRTL) +}); + +;// CONCATENATED MODULE: ./node_modules/tslib/tslib.es6.mjs +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise, SuppressedError, Symbol */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function tslib_es6_extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + } + return __assign.apply(this, arguments); +} + +function __rest(s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +} + +function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +} + +function __param(paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +} + +function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { + function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } + var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; + var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; + var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); + var _, done = false; + for (var i = decorators.length - 1; i >= 0; i--) { + var context = {}; + for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; + for (var p in contextIn.access) context.access[p] = contextIn.access[p]; + context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; + var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); + if (kind === "accessor") { + if (result === void 0) continue; + if (result === null || typeof result !== "object") throw new TypeError("Object expected"); + if (_ = accept(result.get)) descriptor.get = _; + if (_ = accept(result.set)) descriptor.set = _; + if (_ = accept(result.init)) initializers.unshift(_); + } + else if (_ = accept(result)) { + if (kind === "field") initializers.unshift(_); + else descriptor[key] = _; + } + } + if (target) Object.defineProperty(target, contextIn.name, descriptor); + done = true; +}; + +function __runInitializers(thisArg, initializers, value) { + var useValue = arguments.length > 2; + for (var i = 0; i < initializers.length; i++) { + value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); + } + return useValue ? value : void 0; +}; + +function __propKey(x) { + return typeof x === "symbol" ? x : "".concat(x); +}; + +function __setFunctionName(f, name, prefix) { + if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; + return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); +}; + +function __metadata(metadataKey, metadataValue) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +var __createBinding = Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); + +function __exportStar(m, o) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); +} + +function tslib_es6_values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +} + +function tslib_es6_read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +} + +/** @deprecated */ +function __spread() { + for (var ar = [], i = 0; i < arguments.length; i++) + ar = ar.concat(tslib_es6_read(arguments[i])); + return ar; +} + +/** @deprecated */ +function __spreadArrays() { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +} + +function tslib_es6_spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +} + +function __await(v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); +} + +function __asyncGenerator(thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } +} + +function __asyncDelegator(o) { + var i, p; + return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } +} + +function __asyncValues(o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof tslib_es6_values === "function" ? tslib_es6_values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +} + +function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; +}; + +var __setModuleDefault = Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}; + +function __importStar(mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +} + +function __importDefault(mod) { + return (mod && mod.__esModule) ? mod : { default: mod }; +} + +function __classPrivateFieldGet(receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +} + +function __classPrivateFieldSet(receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +} + +function __classPrivateFieldIn(state, receiver) { + if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object"); + return typeof state === "function" ? receiver === state : state.has(receiver); +} + +function __addDisposableResource(env, value, async) { + if (value !== null && value !== void 0) { + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); + var dispose; + if (async) { + if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); + dispose = value[Symbol.asyncDispose]; + } + if (dispose === void 0) { + if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); + dispose = value[Symbol.dispose]; + } + if (typeof dispose !== "function") throw new TypeError("Object not disposable."); + env.stack.push({ value: value, dispose: dispose, async: async }); + } + else if (async) { + env.stack.push({ async: true }); + } + return value; +} + +var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; +}; + +function __disposeResources(env) { + function fail(e) { + env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; + env.hasError = true; + } + function next() { + while (env.stack.length) { + var rec = env.stack.pop(); + try { + var result = rec.dispose && rec.dispose.call(rec.value); + if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); + } + catch (e) { + fail(e); + } + } + if (env.hasError) throw env.error; + } + return next(); +} + +/* harmony default export */ const tslib_es6 = ({ + __extends: tslib_es6_extends, + __assign, + __rest, + __decorate, + __param, + __metadata, + __awaiter, + __generator, + __createBinding, + __exportStar, + __values: tslib_es6_values, + __read: tslib_es6_read, + __spread, + __spreadArrays, + __spreadArray: tslib_es6_spreadArray, + __await, + __asyncGenerator, + __asyncDelegator, + __asyncValues, + __makeTemplateObject, + __importStar, + __importDefault, + __classPrivateFieldGet, + __classPrivateFieldSet, + __classPrivateFieldIn, + __addDisposableResource, + __disposeResources, +}); + +;// CONCATENATED MODULE: ./node_modules/@material/base/foundation.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var MDCFoundation = /** @class */ (function () { + function MDCFoundation(adapter) { + if (adapter === void 0) { adapter = {}; } + this.adapter = adapter; + } + Object.defineProperty(MDCFoundation, "cssClasses", { + get: function () { + // Classes extending MDCFoundation should implement this method to return an object which exports every + // CSS class the foundation class needs as a property. e.g. {ACTIVE: 'mdc-component--active'} + return {}; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCFoundation, "strings", { + get: function () { + // Classes extending MDCFoundation should implement this method to return an object which exports all + // semantic strings as constants. e.g. {ARIA_ROLE: 'tablist'} + return {}; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCFoundation, "numbers", { + get: function () { + // Classes extending MDCFoundation should implement this method to return an object which exports all + // of its semantic numbers as constants. e.g. {ANIMATION_DELAY_MS: 350} + return {}; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCFoundation, "defaultAdapter", { + get: function () { + // Classes extending MDCFoundation may choose to implement this getter in order to provide a convenient + // way of viewing the necessary methods of an adapter. In the future, this could also be used for adapter + // validation. + return {}; + }, + enumerable: false, + configurable: true + }); + MDCFoundation.prototype.init = function () { + // Subclasses should override this method to perform initialization routines (registering events, etc.) + }; + MDCFoundation.prototype.destroy = function () { + // Subclasses should override this method to perform de-initialization routines (de-registering events, etc.) + }; + return MDCFoundation; +}()); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const foundation = ((/* unused pure expression or super */ null && (MDCFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/base/component.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +var MDCComponent = /** @class */ (function () { + function MDCComponent(root, foundation) { + var args = []; + for (var _i = 2; _i < arguments.length; _i++) { + args[_i - 2] = arguments[_i]; + } + this.root = root; + this.initialize.apply(this, tslib_es6_spreadArray([], tslib_es6_read(args))); + // Note that we initialize foundation here and not within the constructor's + // default param so that this.root is defined and can be used within the + // foundation class. + this.foundation = + foundation === undefined ? this.getDefaultFoundation() : foundation; + this.foundation.init(); + this.initialSyncWithDOM(); + } + MDCComponent.attachTo = function (root) { + // Subclasses which extend MDCBase should provide an attachTo() method that takes a root element and + // returns an instantiated component with its root set to that element. Also note that in the cases of + // subclasses, an explicit foundation class will not have to be passed in; it will simply be initialized + // from getDefaultFoundation(). + return new MDCComponent(root, new MDCFoundation({})); + }; + /* istanbul ignore next: method param only exists for typing purposes; it does not need to be unit tested */ + MDCComponent.prototype.initialize = function () { + var _args = []; + for (var _i = 0; _i < arguments.length; _i++) { + _args[_i] = arguments[_i]; + } + // Subclasses can override this to do any additional setup work that would be considered part of a + // "constructor". Essentially, it is a hook into the parent constructor before the foundation is + // initialized. Any additional arguments besides root and foundation will be passed in here. + }; + MDCComponent.prototype.getDefaultFoundation = function () { + // Subclasses must override this method to return a properly configured foundation class for the + // component. + throw new Error('Subclasses must override getDefaultFoundation to return a properly configured ' + + 'foundation class'); + }; + MDCComponent.prototype.initialSyncWithDOM = function () { + // Subclasses should override this method if they need to perform work to synchronize with a host DOM + // object. An example of this would be a form control wrapper that needs to synchronize its internal state + // to some property or attribute of the host DOM. Please note: this is *not* the place to perform DOM + // reads/writes that would cause layout / paint, as this is called synchronously from within the constructor. + }; + MDCComponent.prototype.destroy = function () { + // Subclasses may implement this method to release any resources / deregister any listeners they have + // attached. An example of this might be deregistering a resize event from the window object. + this.foundation.destroy(); + }; + MDCComponent.prototype.listen = function (evtType, handler, options) { + this.root.addEventListener(evtType, handler, options); + }; + MDCComponent.prototype.unlisten = function (evtType, handler, options) { + this.root.removeEventListener(evtType, handler, options); + }; + /** + * Fires a cross-browser-compatible custom event from the component root of the given type, with the given data. + */ + MDCComponent.prototype.emit = function (evtType, evtData, shouldBubble) { + if (shouldBubble === void 0) { shouldBubble = false; } + var evt; + if (typeof CustomEvent === 'function') { + evt = new CustomEvent(evtType, { + bubbles: shouldBubble, + detail: evtData, + }); + } + else { + evt = document.createEvent('CustomEvent'); + evt.initCustomEvent(evtType, shouldBubble, false, evtData); + } + this.root.dispatchEvent(evt); + }; + return MDCComponent; +}()); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const component = ((/* unused pure expression or super */ null && (MDCComponent))); +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/dom/events.js +/** + * @license + * Copyright 2019 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +/** + * Determine whether the current browser supports passive event listeners, and + * if so, use them. + */ +function applyPassive(globalObj) { + if (globalObj === void 0) { globalObj = window; } + return supportsPassiveOption(globalObj) ? + { passive: true } : + false; +} +function supportsPassiveOption(globalObj) { + if (globalObj === void 0) { globalObj = window; } + // See + // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener + var passiveSupported = false; + try { + var options = { + // This function will be called when the browser + // attempts to access the passive property. + get passive() { + passiveSupported = true; + return false; + } + }; + var handler = function () { }; + globalObj.document.addEventListener('test', handler, options); + globalObj.document.removeEventListener('test', handler, options); + } + catch (err) { + passiveSupported = false; + } + return passiveSupported; +} +//# sourceMappingURL=events.js.map +;// CONCATENATED MODULE: ./node_modules/@material/dom/ponyfill.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +/** + * @fileoverview A "ponyfill" is a polyfill that doesn't modify the global prototype chain. + * This makes ponyfills safer than traditional polyfills, especially for libraries like MDC. + */ +function closest(element, selector) { + if (element.closest) { + return element.closest(selector); + } + var el = element; + while (el) { + if (matches(el, selector)) { + return el; + } + el = el.parentElement; + } + return null; +} +function matches(element, selector) { + var nativeMatches = element.matches + || element.webkitMatchesSelector + || element.msMatchesSelector; + return nativeMatches.call(element, selector); +} +/** + * Used to compute the estimated scroll width of elements. When an element is + * hidden due to display: none; being applied to a parent element, the width is + * returned as 0. However, the element will have a true width once no longer + * inside a display: none context. This method computes an estimated width when + * the element is hidden or returns the true width when the element is visble. + * @param {Element} element the element whose width to estimate + */ +function estimateScrollWidth(element) { + // Check the offsetParent. If the element inherits display: none from any + // parent, the offsetParent property will be null (see + // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent). + // This check ensures we only clone the node when necessary. + var htmlEl = element; + if (htmlEl.offsetParent !== null) { + return htmlEl.scrollWidth; + } + var clone = htmlEl.cloneNode(true); + clone.style.setProperty('position', 'absolute'); + clone.style.setProperty('transform', 'translate(-9999px, -9999px)'); + document.documentElement.appendChild(clone); + var scrollWidth = clone.scrollWidth; + document.documentElement.removeChild(clone); + return scrollWidth; +} +//# sourceMappingURL=ponyfill.js.map +;// CONCATENATED MODULE: ./node_modules/@material/floating-label/constants.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var cssClasses = { + LABEL_FLOAT_ABOVE: 'mdc-floating-label--float-above', + LABEL_REQUIRED: 'mdc-floating-label--required', + LABEL_SHAKE: 'mdc-floating-label--shake', + ROOT: 'mdc-floating-label', +}; +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/floating-label/foundation.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCFloatingLabelFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCFloatingLabelFoundation, _super); + function MDCFloatingLabelFoundation(adapter) { + var _this = _super.call(this, __assign(__assign({}, MDCFloatingLabelFoundation.defaultAdapter), adapter)) || this; + _this.shakeAnimationEndHandler = function () { + _this.handleShakeAnimationEnd(); + }; + return _this; + } + Object.defineProperty(MDCFloatingLabelFoundation, "cssClasses", { + get: function () { + return cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCFloatingLabelFoundation, "defaultAdapter", { + /** + * See {@link MDCFloatingLabelAdapter} for typing information on parameters and return types. + */ + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + getWidth: function () { return 0; }, + registerInteractionHandler: function () { return undefined; }, + deregisterInteractionHandler: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCFloatingLabelFoundation.prototype.init = function () { + this.adapter.registerInteractionHandler('animationend', this.shakeAnimationEndHandler); + }; + MDCFloatingLabelFoundation.prototype.destroy = function () { + this.adapter.deregisterInteractionHandler('animationend', this.shakeAnimationEndHandler); + }; + /** + * Returns the width of the label element. + */ + MDCFloatingLabelFoundation.prototype.getWidth = function () { + return this.adapter.getWidth(); + }; + /** + * Styles the label to produce a shake animation to indicate an error. + * @param shouldShake If true, adds the shake CSS class; otherwise, removes shake class. + */ + MDCFloatingLabelFoundation.prototype.shake = function (shouldShake) { + var LABEL_SHAKE = MDCFloatingLabelFoundation.cssClasses.LABEL_SHAKE; + if (shouldShake) { + this.adapter.addClass(LABEL_SHAKE); + } + else { + this.adapter.removeClass(LABEL_SHAKE); + } + }; + /** + * Styles the label to float or dock. + * @param shouldFloat If true, adds the float CSS class; otherwise, removes float and shake classes to dock the label. + */ + MDCFloatingLabelFoundation.prototype.float = function (shouldFloat) { + var _a = MDCFloatingLabelFoundation.cssClasses, LABEL_FLOAT_ABOVE = _a.LABEL_FLOAT_ABOVE, LABEL_SHAKE = _a.LABEL_SHAKE; + if (shouldFloat) { + this.adapter.addClass(LABEL_FLOAT_ABOVE); + } + else { + this.adapter.removeClass(LABEL_FLOAT_ABOVE); + this.adapter.removeClass(LABEL_SHAKE); + } + }; + /** + * Styles the label as required. + * @param isRequired If true, adds an asterisk to the label, indicating that it is required. + */ + MDCFloatingLabelFoundation.prototype.setRequired = function (isRequired) { + var LABEL_REQUIRED = MDCFloatingLabelFoundation.cssClasses.LABEL_REQUIRED; + if (isRequired) { + this.adapter.addClass(LABEL_REQUIRED); + } + else { + this.adapter.removeClass(LABEL_REQUIRED); + } + }; + MDCFloatingLabelFoundation.prototype.handleShakeAnimationEnd = function () { + var LABEL_SHAKE = MDCFloatingLabelFoundation.cssClasses.LABEL_SHAKE; + this.adapter.removeClass(LABEL_SHAKE); + }; + return MDCFloatingLabelFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const floating_label_foundation = ((/* unused pure expression or super */ null && (MDCFloatingLabelFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/floating-label/component.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + +var MDCFloatingLabel = /** @class */ (function (_super) { + tslib_es6_extends(MDCFloatingLabel, _super); + function MDCFloatingLabel() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCFloatingLabel.attachTo = function (root) { + return new MDCFloatingLabel(root); + }; + /** + * Styles the label to produce the label shake for errors. + * @param shouldShake If true, shakes the label by adding a CSS class; otherwise, stops shaking by removing the class. + */ + MDCFloatingLabel.prototype.shake = function (shouldShake) { + this.foundation.shake(shouldShake); + }; + /** + * Styles the label to float/dock. + * @param shouldFloat If true, floats the label by adding a CSS class; otherwise, docks it by removing the class. + */ + MDCFloatingLabel.prototype.float = function (shouldFloat) { + this.foundation.float(shouldFloat); + }; + /** + * Styles the label as required. + * @param isRequired If true, adds an asterisk to the label, indicating that it is required. + */ + MDCFloatingLabel.prototype.setRequired = function (isRequired) { + this.foundation.setRequired(isRequired); + }; + MDCFloatingLabel.prototype.getWidth = function () { + return this.foundation.getWidth(); + }; + MDCFloatingLabel.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = { + addClass: function (className) { return _this.root.classList.add(className); }, + removeClass: function (className) { return _this.root.classList.remove(className); }, + getWidth: function () { return estimateScrollWidth(_this.root); }, + registerInteractionHandler: function (evtType, handler) { + return _this.listen(evtType, handler); + }, + deregisterInteractionHandler: function (evtType, handler) { + return _this.unlisten(evtType, handler); + }, + }; + // tslint:enable:object-literal-sort-keys + return new MDCFloatingLabelFoundation(adapter); + }; + return MDCFloatingLabel; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/line-ripple/constants.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var constants_cssClasses = { + LINE_RIPPLE_ACTIVE: 'mdc-line-ripple--active', + LINE_RIPPLE_DEACTIVATING: 'mdc-line-ripple--deactivating', +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/line-ripple/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCLineRippleFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCLineRippleFoundation, _super); + function MDCLineRippleFoundation(adapter) { + var _this = _super.call(this, __assign(__assign({}, MDCLineRippleFoundation.defaultAdapter), adapter)) || this; + _this.transitionEndHandler = function (evt) { + _this.handleTransitionEnd(evt); + }; + return _this; + } + Object.defineProperty(MDCLineRippleFoundation, "cssClasses", { + get: function () { + return constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCLineRippleFoundation, "defaultAdapter", { + /** + * See {@link MDCLineRippleAdapter} for typing information on parameters and return types. + */ + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + hasClass: function () { return false; }, + setStyle: function () { return undefined; }, + registerEventHandler: function () { return undefined; }, + deregisterEventHandler: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCLineRippleFoundation.prototype.init = function () { + this.adapter.registerEventHandler('transitionend', this.transitionEndHandler); + }; + MDCLineRippleFoundation.prototype.destroy = function () { + this.adapter.deregisterEventHandler('transitionend', this.transitionEndHandler); + }; + MDCLineRippleFoundation.prototype.activate = function () { + this.adapter.removeClass(constants_cssClasses.LINE_RIPPLE_DEACTIVATING); + this.adapter.addClass(constants_cssClasses.LINE_RIPPLE_ACTIVE); + }; + MDCLineRippleFoundation.prototype.setRippleCenter = function (xCoordinate) { + this.adapter.setStyle('transform-origin', xCoordinate + "px center"); + }; + MDCLineRippleFoundation.prototype.deactivate = function () { + this.adapter.addClass(constants_cssClasses.LINE_RIPPLE_DEACTIVATING); + }; + MDCLineRippleFoundation.prototype.handleTransitionEnd = function (evt) { + // Wait for the line ripple to be either transparent or opaque + // before emitting the animation end event + var isDeactivating = this.adapter.hasClass(constants_cssClasses.LINE_RIPPLE_DEACTIVATING); + if (evt.propertyName === 'opacity') { + if (isDeactivating) { + this.adapter.removeClass(constants_cssClasses.LINE_RIPPLE_ACTIVE); + this.adapter.removeClass(constants_cssClasses.LINE_RIPPLE_DEACTIVATING); + } + } + }; + return MDCLineRippleFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const line_ripple_foundation = ((/* unused pure expression or super */ null && (MDCLineRippleFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/line-ripple/component.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCLineRipple = /** @class */ (function (_super) { + tslib_es6_extends(MDCLineRipple, _super); + function MDCLineRipple() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCLineRipple.attachTo = function (root) { + return new MDCLineRipple(root); + }; + /** + * Activates the line ripple + */ + MDCLineRipple.prototype.activate = function () { + this.foundation.activate(); + }; + /** + * Deactivates the line ripple + */ + MDCLineRipple.prototype.deactivate = function () { + this.foundation.deactivate(); + }; + /** + * Sets the transform origin given a user's click location. + * The `rippleCenter` is the x-coordinate of the middle of the ripple. + */ + MDCLineRipple.prototype.setRippleCenter = function (xCoordinate) { + this.foundation.setRippleCenter(xCoordinate); + }; + MDCLineRipple.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = { + addClass: function (className) { return _this.root.classList.add(className); }, + removeClass: function (className) { return _this.root.classList.remove(className); }, + hasClass: function (className) { return _this.root.classList.contains(className); }, + setStyle: function (propertyName, value) { return _this.root.style.setProperty(propertyName, value); }, + registerEventHandler: function (evtType, handler) { return _this.listen(evtType, handler); }, + deregisterEventHandler: function (evtType, handler) { return _this.unlisten(evtType, handler); }, + }; + // tslint:enable:object-literal-sort-keys + return new MDCLineRippleFoundation(adapter); + }; + return MDCLineRipple; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/notched-outline/constants.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var strings = { + NOTCH_ELEMENT_SELECTOR: '.mdc-notched-outline__notch', +}; +var numbers = { + // This should stay in sync with $mdc-notched-outline-padding * 2. + NOTCH_ELEMENT_PADDING: 8, +}; +var notched_outline_constants_cssClasses = { + NO_LABEL: 'mdc-notched-outline--no-label', + OUTLINE_NOTCHED: 'mdc-notched-outline--notched', + OUTLINE_UPGRADED: 'mdc-notched-outline--upgraded', +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/notched-outline/foundation.js +/** + * @license + * Copyright 2017 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCNotchedOutlineFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCNotchedOutlineFoundation, _super); + function MDCNotchedOutlineFoundation(adapter) { + return _super.call(this, __assign(__assign({}, MDCNotchedOutlineFoundation.defaultAdapter), adapter)) || this; + } + Object.defineProperty(MDCNotchedOutlineFoundation, "strings", { + get: function () { + return strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCNotchedOutlineFoundation, "cssClasses", { + get: function () { + return notched_outline_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCNotchedOutlineFoundation, "numbers", { + get: function () { + return numbers; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCNotchedOutlineFoundation, "defaultAdapter", { + /** + * See {@link MDCNotchedOutlineAdapter} for typing information on parameters and return types. + */ + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + setNotchWidthProperty: function () { return undefined; }, + removeNotchWidthProperty: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + /** + * Adds the outline notched selector and updates the notch width calculated based off of notchWidth. + */ + MDCNotchedOutlineFoundation.prototype.notch = function (notchWidth) { + var OUTLINE_NOTCHED = MDCNotchedOutlineFoundation.cssClasses.OUTLINE_NOTCHED; + if (notchWidth > 0) { + notchWidth += numbers.NOTCH_ELEMENT_PADDING; // Add padding from left/right. + } + this.adapter.setNotchWidthProperty(notchWidth); + this.adapter.addClass(OUTLINE_NOTCHED); + }; + /** + * Removes notched outline selector to close the notch in the outline. + */ + MDCNotchedOutlineFoundation.prototype.closeNotch = function () { + var OUTLINE_NOTCHED = MDCNotchedOutlineFoundation.cssClasses.OUTLINE_NOTCHED; + this.adapter.removeClass(OUTLINE_NOTCHED); + this.adapter.removeNotchWidthProperty(); + }; + return MDCNotchedOutlineFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const notched_outline_foundation = ((/* unused pure expression or super */ null && (MDCNotchedOutlineFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/notched-outline/component.js +/** + * @license + * Copyright 2017 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + +var MDCNotchedOutline = /** @class */ (function (_super) { + tslib_es6_extends(MDCNotchedOutline, _super); + function MDCNotchedOutline() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCNotchedOutline.attachTo = function (root) { + return new MDCNotchedOutline(root); + }; + MDCNotchedOutline.prototype.initialSyncWithDOM = function () { + this.notchElement = + this.root.querySelector(strings.NOTCH_ELEMENT_SELECTOR); + var label = this.root.querySelector('.' + MDCFloatingLabelFoundation.cssClasses.ROOT); + if (label) { + label.style.transitionDuration = '0s'; + this.root.classList.add(notched_outline_constants_cssClasses.OUTLINE_UPGRADED); + requestAnimationFrame(function () { + label.style.transitionDuration = ''; + }); + } + else { + this.root.classList.add(notched_outline_constants_cssClasses.NO_LABEL); + } + }; + /** + * Updates classes and styles to open the notch to the specified width. + * @param notchWidth The notch width in the outline. + */ + MDCNotchedOutline.prototype.notch = function (notchWidth) { + this.foundation.notch(notchWidth); + }; + /** + * Updates classes and styles to close the notch. + */ + MDCNotchedOutline.prototype.closeNotch = function () { + this.foundation.closeNotch(); + }; + MDCNotchedOutline.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = { + addClass: function (className) { return _this.root.classList.add(className); }, + removeClass: function (className) { return _this.root.classList.remove(className); }, + setNotchWidthProperty: function (width) { + _this.notchElement.style.setProperty('width', width + 'px'); + }, + removeNotchWidthProperty: function () { + _this.notchElement.style.removeProperty('width'); + }, + }; + // tslint:enable:object-literal-sort-keys + return new MDCNotchedOutlineFoundation(adapter); + }; + return MDCNotchedOutline; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/ripple/constants.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var ripple_constants_cssClasses = { + // Ripple is a special case where the "root" component is really a "mixin" of sorts, + // given that it's an 'upgrade' to an existing component. That being said it is the root + // CSS class that all other CSS classes derive from. + BG_FOCUSED: 'mdc-ripple-upgraded--background-focused', + FG_ACTIVATION: 'mdc-ripple-upgraded--foreground-activation', + FG_DEACTIVATION: 'mdc-ripple-upgraded--foreground-deactivation', + ROOT: 'mdc-ripple-upgraded', + UNBOUNDED: 'mdc-ripple-upgraded--unbounded', +}; +var constants_strings = { + VAR_FG_SCALE: '--mdc-ripple-fg-scale', + VAR_FG_SIZE: '--mdc-ripple-fg-size', + VAR_FG_TRANSLATE_END: '--mdc-ripple-fg-translate-end', + VAR_FG_TRANSLATE_START: '--mdc-ripple-fg-translate-start', + VAR_LEFT: '--mdc-ripple-left', + VAR_TOP: '--mdc-ripple-top', +}; +var constants_numbers = { + DEACTIVATION_TIMEOUT_MS: 225, + FG_DEACTIVATION_MS: 150, + INITIAL_ORIGIN_SCALE: 0.6, + PADDING: 10, + TAP_DELAY_MS: 300, // Delay between touch and simulated mouse events on touch devices +}; +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/ripple/util.js +/** + * Stores result from supportsCssVariables to avoid redundant processing to + * detect CSS custom variable support. + */ +var supportsCssVariables_; +function supportsCssVariables(windowObj, forceRefresh) { + if (forceRefresh === void 0) { forceRefresh = false; } + var CSS = windowObj.CSS; + var supportsCssVars = supportsCssVariables_; + if (typeof supportsCssVariables_ === 'boolean' && !forceRefresh) { + return supportsCssVariables_; + } + var supportsFunctionPresent = CSS && typeof CSS.supports === 'function'; + if (!supportsFunctionPresent) { + return false; + } + var explicitlySupportsCssVars = CSS.supports('--css-vars', 'yes'); + // See: https://bugs.webkit.org/show_bug.cgi?id=154669 + // See: README section on Safari + var weAreFeatureDetectingSafari10plus = (CSS.supports('(--css-vars: yes)') && + CSS.supports('color', '#00000000')); + supportsCssVars = + explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus; + if (!forceRefresh) { + supportsCssVariables_ = supportsCssVars; + } + return supportsCssVars; +} +function getNormalizedEventCoords(evt, pageOffset, clientRect) { + if (!evt) { + return { x: 0, y: 0 }; + } + var x = pageOffset.x, y = pageOffset.y; + var documentX = x + clientRect.left; + var documentY = y + clientRect.top; + var normalizedX; + var normalizedY; + // Determine touch point relative to the ripple container. + if (evt.type === 'touchstart') { + var touchEvent = evt; + normalizedX = touchEvent.changedTouches[0].pageX - documentX; + normalizedY = touchEvent.changedTouches[0].pageY - documentY; + } + else { + var mouseEvent = evt; + normalizedX = mouseEvent.pageX - documentX; + normalizedY = mouseEvent.pageY - documentY; + } + return { x: normalizedX, y: normalizedY }; +} +//# sourceMappingURL=util.js.map +;// CONCATENATED MODULE: ./node_modules/@material/ripple/foundation.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + +// Activation events registered on the root element of each instance for activation +var ACTIVATION_EVENT_TYPES = [ + 'touchstart', 'pointerdown', 'mousedown', 'keydown', +]; +// Deactivation events registered on documentElement when a pointer-related down event occurs +var POINTER_DEACTIVATION_EVENT_TYPES = [ + 'touchend', 'pointerup', 'mouseup', 'contextmenu', +]; +// simultaneous nested activations +var activatedTargets = []; +var MDCRippleFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCRippleFoundation, _super); + function MDCRippleFoundation(adapter) { + var _this = _super.call(this, __assign(__assign({}, MDCRippleFoundation.defaultAdapter), adapter)) || this; + _this.activationAnimationHasEnded = false; + _this.activationTimer = 0; + _this.fgDeactivationRemovalTimer = 0; + _this.fgScale = '0'; + _this.frame = { width: 0, height: 0 }; + _this.initialSize = 0; + _this.layoutFrame = 0; + _this.maxRadius = 0; + _this.unboundedCoords = { left: 0, top: 0 }; + _this.activationState = _this.defaultActivationState(); + _this.activationTimerCallback = function () { + _this.activationAnimationHasEnded = true; + _this.runDeactivationUXLogicIfReady(); + }; + _this.activateHandler = function (e) { + _this.activateImpl(e); + }; + _this.deactivateHandler = function () { + _this.deactivateImpl(); + }; + _this.focusHandler = function () { + _this.handleFocus(); + }; + _this.blurHandler = function () { + _this.handleBlur(); + }; + _this.resizeHandler = function () { + _this.layout(); + }; + return _this; + } + Object.defineProperty(MDCRippleFoundation, "cssClasses", { + get: function () { + return ripple_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRippleFoundation, "strings", { + get: function () { + return constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRippleFoundation, "numbers", { + get: function () { + return constants_numbers; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRippleFoundation, "defaultAdapter", { + get: function () { + return { + addClass: function () { return undefined; }, + browserSupportsCssVars: function () { return true; }, + computeBoundingRect: function () { + return ({ top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }); + }, + containsEventTarget: function () { return true; }, + deregisterDocumentInteractionHandler: function () { return undefined; }, + deregisterInteractionHandler: function () { return undefined; }, + deregisterResizeHandler: function () { return undefined; }, + getWindowPageOffset: function () { return ({ x: 0, y: 0 }); }, + isSurfaceActive: function () { return true; }, + isSurfaceDisabled: function () { return true; }, + isUnbounded: function () { return true; }, + registerDocumentInteractionHandler: function () { return undefined; }, + registerInteractionHandler: function () { return undefined; }, + registerResizeHandler: function () { return undefined; }, + removeClass: function () { return undefined; }, + updateCssVariable: function () { return undefined; }, + }; + }, + enumerable: false, + configurable: true + }); + MDCRippleFoundation.prototype.init = function () { + var _this = this; + var supportsPressRipple = this.supportsPressRipple(); + this.registerRootHandlers(supportsPressRipple); + if (supportsPressRipple) { + var _a = MDCRippleFoundation.cssClasses, ROOT_1 = _a.ROOT, UNBOUNDED_1 = _a.UNBOUNDED; + requestAnimationFrame(function () { + _this.adapter.addClass(ROOT_1); + if (_this.adapter.isUnbounded()) { + _this.adapter.addClass(UNBOUNDED_1); + // Unbounded ripples need layout logic applied immediately to set coordinates for both shade and ripple + _this.layoutInternal(); + } + }); + } + }; + MDCRippleFoundation.prototype.destroy = function () { + var _this = this; + if (this.supportsPressRipple()) { + if (this.activationTimer) { + clearTimeout(this.activationTimer); + this.activationTimer = 0; + this.adapter.removeClass(MDCRippleFoundation.cssClasses.FG_ACTIVATION); + } + if (this.fgDeactivationRemovalTimer) { + clearTimeout(this.fgDeactivationRemovalTimer); + this.fgDeactivationRemovalTimer = 0; + this.adapter.removeClass(MDCRippleFoundation.cssClasses.FG_DEACTIVATION); + } + var _a = MDCRippleFoundation.cssClasses, ROOT_2 = _a.ROOT, UNBOUNDED_2 = _a.UNBOUNDED; + requestAnimationFrame(function () { + _this.adapter.removeClass(ROOT_2); + _this.adapter.removeClass(UNBOUNDED_2); + _this.removeCssVars(); + }); + } + this.deregisterRootHandlers(); + this.deregisterDeactivationHandlers(); + }; + /** + * @param evt Optional event containing position information. + */ + MDCRippleFoundation.prototype.activate = function (evt) { + this.activateImpl(evt); + }; + MDCRippleFoundation.prototype.deactivate = function () { + this.deactivateImpl(); + }; + MDCRippleFoundation.prototype.layout = function () { + var _this = this; + if (this.layoutFrame) { + cancelAnimationFrame(this.layoutFrame); + } + this.layoutFrame = requestAnimationFrame(function () { + _this.layoutInternal(); + _this.layoutFrame = 0; + }); + }; + MDCRippleFoundation.prototype.setUnbounded = function (unbounded) { + var UNBOUNDED = MDCRippleFoundation.cssClasses.UNBOUNDED; + if (unbounded) { + this.adapter.addClass(UNBOUNDED); + } + else { + this.adapter.removeClass(UNBOUNDED); + } + }; + MDCRippleFoundation.prototype.handleFocus = function () { + var _this = this; + requestAnimationFrame(function () { return _this.adapter.addClass(MDCRippleFoundation.cssClasses.BG_FOCUSED); }); + }; + MDCRippleFoundation.prototype.handleBlur = function () { + var _this = this; + requestAnimationFrame(function () { return _this.adapter.removeClass(MDCRippleFoundation.cssClasses.BG_FOCUSED); }); + }; + /** + * We compute this property so that we are not querying information about the client + * until the point in time where the foundation requests it. This prevents scenarios where + * client-side feature-detection may happen too early, such as when components are rendered on the server + * and then initialized at mount time on the client. + */ + MDCRippleFoundation.prototype.supportsPressRipple = function () { + return this.adapter.browserSupportsCssVars(); + }; + MDCRippleFoundation.prototype.defaultActivationState = function () { + return { + activationEvent: undefined, + hasDeactivationUXRun: false, + isActivated: false, + isProgrammatic: false, + wasActivatedByPointer: false, + wasElementMadeActive: false, + }; + }; + /** + * supportsPressRipple Passed from init to save a redundant function call + */ + MDCRippleFoundation.prototype.registerRootHandlers = function (supportsPressRipple) { + var e_1, _a; + if (supportsPressRipple) { + try { + for (var ACTIVATION_EVENT_TYPES_1 = tslib_es6_values(ACTIVATION_EVENT_TYPES), ACTIVATION_EVENT_TYPES_1_1 = ACTIVATION_EVENT_TYPES_1.next(); !ACTIVATION_EVENT_TYPES_1_1.done; ACTIVATION_EVENT_TYPES_1_1 = ACTIVATION_EVENT_TYPES_1.next()) { + var evtType = ACTIVATION_EVENT_TYPES_1_1.value; + this.adapter.registerInteractionHandler(evtType, this.activateHandler); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (ACTIVATION_EVENT_TYPES_1_1 && !ACTIVATION_EVENT_TYPES_1_1.done && (_a = ACTIVATION_EVENT_TYPES_1.return)) _a.call(ACTIVATION_EVENT_TYPES_1); + } + finally { if (e_1) throw e_1.error; } + } + if (this.adapter.isUnbounded()) { + this.adapter.registerResizeHandler(this.resizeHandler); + } + } + this.adapter.registerInteractionHandler('focus', this.focusHandler); + this.adapter.registerInteractionHandler('blur', this.blurHandler); + }; + MDCRippleFoundation.prototype.registerDeactivationHandlers = function (evt) { + var e_2, _a; + if (evt.type === 'keydown') { + this.adapter.registerInteractionHandler('keyup', this.deactivateHandler); + } + else { + try { + for (var POINTER_DEACTIVATION_EVENT_TYPES_1 = tslib_es6_values(POINTER_DEACTIVATION_EVENT_TYPES), POINTER_DEACTIVATION_EVENT_TYPES_1_1 = POINTER_DEACTIVATION_EVENT_TYPES_1.next(); !POINTER_DEACTIVATION_EVENT_TYPES_1_1.done; POINTER_DEACTIVATION_EVENT_TYPES_1_1 = POINTER_DEACTIVATION_EVENT_TYPES_1.next()) { + var evtType = POINTER_DEACTIVATION_EVENT_TYPES_1_1.value; + this.adapter.registerDocumentInteractionHandler(evtType, this.deactivateHandler); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (POINTER_DEACTIVATION_EVENT_TYPES_1_1 && !POINTER_DEACTIVATION_EVENT_TYPES_1_1.done && (_a = POINTER_DEACTIVATION_EVENT_TYPES_1.return)) _a.call(POINTER_DEACTIVATION_EVENT_TYPES_1); + } + finally { if (e_2) throw e_2.error; } + } + } + }; + MDCRippleFoundation.prototype.deregisterRootHandlers = function () { + var e_3, _a; + try { + for (var ACTIVATION_EVENT_TYPES_2 = tslib_es6_values(ACTIVATION_EVENT_TYPES), ACTIVATION_EVENT_TYPES_2_1 = ACTIVATION_EVENT_TYPES_2.next(); !ACTIVATION_EVENT_TYPES_2_1.done; ACTIVATION_EVENT_TYPES_2_1 = ACTIVATION_EVENT_TYPES_2.next()) { + var evtType = ACTIVATION_EVENT_TYPES_2_1.value; + this.adapter.deregisterInteractionHandler(evtType, this.activateHandler); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (ACTIVATION_EVENT_TYPES_2_1 && !ACTIVATION_EVENT_TYPES_2_1.done && (_a = ACTIVATION_EVENT_TYPES_2.return)) _a.call(ACTIVATION_EVENT_TYPES_2); + } + finally { if (e_3) throw e_3.error; } + } + this.adapter.deregisterInteractionHandler('focus', this.focusHandler); + this.adapter.deregisterInteractionHandler('blur', this.blurHandler); + if (this.adapter.isUnbounded()) { + this.adapter.deregisterResizeHandler(this.resizeHandler); + } + }; + MDCRippleFoundation.prototype.deregisterDeactivationHandlers = function () { + var e_4, _a; + this.adapter.deregisterInteractionHandler('keyup', this.deactivateHandler); + try { + for (var POINTER_DEACTIVATION_EVENT_TYPES_2 = tslib_es6_values(POINTER_DEACTIVATION_EVENT_TYPES), POINTER_DEACTIVATION_EVENT_TYPES_2_1 = POINTER_DEACTIVATION_EVENT_TYPES_2.next(); !POINTER_DEACTIVATION_EVENT_TYPES_2_1.done; POINTER_DEACTIVATION_EVENT_TYPES_2_1 = POINTER_DEACTIVATION_EVENT_TYPES_2.next()) { + var evtType = POINTER_DEACTIVATION_EVENT_TYPES_2_1.value; + this.adapter.deregisterDocumentInteractionHandler(evtType, this.deactivateHandler); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (POINTER_DEACTIVATION_EVENT_TYPES_2_1 && !POINTER_DEACTIVATION_EVENT_TYPES_2_1.done && (_a = POINTER_DEACTIVATION_EVENT_TYPES_2.return)) _a.call(POINTER_DEACTIVATION_EVENT_TYPES_2); + } + finally { if (e_4) throw e_4.error; } + } + }; + MDCRippleFoundation.prototype.removeCssVars = function () { + var _this = this; + var rippleStrings = MDCRippleFoundation.strings; + var keys = Object.keys(rippleStrings); + keys.forEach(function (key) { + if (key.indexOf('VAR_') === 0) { + _this.adapter.updateCssVariable(rippleStrings[key], null); + } + }); + }; + MDCRippleFoundation.prototype.activateImpl = function (evt) { + var _this = this; + if (this.adapter.isSurfaceDisabled()) { + return; + } + var activationState = this.activationState; + if (activationState.isActivated) { + return; + } + // Avoid reacting to follow-on events fired by touch device after an already-processed user interaction + var previousActivationEvent = this.previousActivationEvent; + var isSameInteraction = previousActivationEvent && evt !== undefined && previousActivationEvent.type !== evt.type; + if (isSameInteraction) { + return; + } + activationState.isActivated = true; + activationState.isProgrammatic = evt === undefined; + activationState.activationEvent = evt; + activationState.wasActivatedByPointer = activationState.isProgrammatic ? false : evt !== undefined && (evt.type === 'mousedown' || evt.type === 'touchstart' || evt.type === 'pointerdown'); + var hasActivatedChild = evt !== undefined && + activatedTargets.length > 0 && + activatedTargets.some(function (target) { return _this.adapter.containsEventTarget(target); }); + if (hasActivatedChild) { + // Immediately reset activation state, while preserving logic that prevents touch follow-on events + this.resetActivationState(); + return; + } + if (evt !== undefined) { + activatedTargets.push(evt.target); + this.registerDeactivationHandlers(evt); + } + activationState.wasElementMadeActive = this.checkElementMadeActive(evt); + if (activationState.wasElementMadeActive) { + this.animateActivation(); + } + requestAnimationFrame(function () { + // Reset array on next frame after the current event has had a chance to bubble to prevent ancestor ripples + activatedTargets = []; + if (!activationState.wasElementMadeActive + && evt !== undefined + && (evt.key === ' ' || evt.keyCode === 32)) { + // If space was pressed, try again within an rAF call to detect :active, because different UAs report + // active states inconsistently when they're called within event handling code: + // - https://bugs.chromium.org/p/chromium/issues/detail?id=635971 + // - https://bugzilla.mozilla.org/show_bug.cgi?id=1293741 + // We try first outside rAF to support Edge, which does not exhibit this problem, but will crash if a CSS + // variable is set within a rAF callback for a submit button interaction (#2241). + activationState.wasElementMadeActive = _this.checkElementMadeActive(evt); + if (activationState.wasElementMadeActive) { + _this.animateActivation(); + } + } + if (!activationState.wasElementMadeActive) { + // Reset activation state immediately if element was not made active. + _this.activationState = _this.defaultActivationState(); + } + }); + }; + MDCRippleFoundation.prototype.checkElementMadeActive = function (evt) { + return (evt !== undefined && evt.type === 'keydown') ? + this.adapter.isSurfaceActive() : + true; + }; + MDCRippleFoundation.prototype.animateActivation = function () { + var _this = this; + var _a = MDCRippleFoundation.strings, VAR_FG_TRANSLATE_START = _a.VAR_FG_TRANSLATE_START, VAR_FG_TRANSLATE_END = _a.VAR_FG_TRANSLATE_END; + var _b = MDCRippleFoundation.cssClasses, FG_DEACTIVATION = _b.FG_DEACTIVATION, FG_ACTIVATION = _b.FG_ACTIVATION; + var DEACTIVATION_TIMEOUT_MS = MDCRippleFoundation.numbers.DEACTIVATION_TIMEOUT_MS; + this.layoutInternal(); + var translateStart = ''; + var translateEnd = ''; + if (!this.adapter.isUnbounded()) { + var _c = this.getFgTranslationCoordinates(), startPoint = _c.startPoint, endPoint = _c.endPoint; + translateStart = startPoint.x + "px, " + startPoint.y + "px"; + translateEnd = endPoint.x + "px, " + endPoint.y + "px"; + } + this.adapter.updateCssVariable(VAR_FG_TRANSLATE_START, translateStart); + this.adapter.updateCssVariable(VAR_FG_TRANSLATE_END, translateEnd); + // Cancel any ongoing activation/deactivation animations + clearTimeout(this.activationTimer); + clearTimeout(this.fgDeactivationRemovalTimer); + this.rmBoundedActivationClasses(); + this.adapter.removeClass(FG_DEACTIVATION); + // Force layout in order to re-trigger the animation. + this.adapter.computeBoundingRect(); + this.adapter.addClass(FG_ACTIVATION); + this.activationTimer = setTimeout(function () { + _this.activationTimerCallback(); + }, DEACTIVATION_TIMEOUT_MS); + }; + MDCRippleFoundation.prototype.getFgTranslationCoordinates = function () { + var _a = this.activationState, activationEvent = _a.activationEvent, wasActivatedByPointer = _a.wasActivatedByPointer; + var startPoint; + if (wasActivatedByPointer) { + startPoint = getNormalizedEventCoords(activationEvent, this.adapter.getWindowPageOffset(), this.adapter.computeBoundingRect()); + } + else { + startPoint = { + x: this.frame.width / 2, + y: this.frame.height / 2, + }; + } + // Center the element around the start point. + startPoint = { + x: startPoint.x - (this.initialSize / 2), + y: startPoint.y - (this.initialSize / 2), + }; + var endPoint = { + x: (this.frame.width / 2) - (this.initialSize / 2), + y: (this.frame.height / 2) - (this.initialSize / 2), + }; + return { startPoint: startPoint, endPoint: endPoint }; + }; + MDCRippleFoundation.prototype.runDeactivationUXLogicIfReady = function () { + var _this = this; + // This method is called both when a pointing device is released, and when the activation animation ends. + // The deactivation animation should only run after both of those occur. + var FG_DEACTIVATION = MDCRippleFoundation.cssClasses.FG_DEACTIVATION; + var _a = this.activationState, hasDeactivationUXRun = _a.hasDeactivationUXRun, isActivated = _a.isActivated; + var activationHasEnded = hasDeactivationUXRun || !isActivated; + if (activationHasEnded && this.activationAnimationHasEnded) { + this.rmBoundedActivationClasses(); + this.adapter.addClass(FG_DEACTIVATION); + this.fgDeactivationRemovalTimer = setTimeout(function () { + _this.adapter.removeClass(FG_DEACTIVATION); + }, constants_numbers.FG_DEACTIVATION_MS); + } + }; + MDCRippleFoundation.prototype.rmBoundedActivationClasses = function () { + var FG_ACTIVATION = MDCRippleFoundation.cssClasses.FG_ACTIVATION; + this.adapter.removeClass(FG_ACTIVATION); + this.activationAnimationHasEnded = false; + this.adapter.computeBoundingRect(); + }; + MDCRippleFoundation.prototype.resetActivationState = function () { + var _this = this; + this.previousActivationEvent = this.activationState.activationEvent; + this.activationState = this.defaultActivationState(); + // Touch devices may fire additional events for the same interaction within a short time. + // Store the previous event until it's safe to assume that subsequent events are for new interactions. + setTimeout(function () { return _this.previousActivationEvent = undefined; }, MDCRippleFoundation.numbers.TAP_DELAY_MS); + }; + MDCRippleFoundation.prototype.deactivateImpl = function () { + var _this = this; + var activationState = this.activationState; + // This can happen in scenarios such as when you have a keyup event that blurs the element. + if (!activationState.isActivated) { + return; + } + var state = __assign({}, activationState); + if (activationState.isProgrammatic) { + requestAnimationFrame(function () { + _this.animateDeactivation(state); + }); + this.resetActivationState(); + } + else { + this.deregisterDeactivationHandlers(); + requestAnimationFrame(function () { + _this.activationState.hasDeactivationUXRun = true; + _this.animateDeactivation(state); + _this.resetActivationState(); + }); + } + }; + MDCRippleFoundation.prototype.animateDeactivation = function (_a) { + var wasActivatedByPointer = _a.wasActivatedByPointer, wasElementMadeActive = _a.wasElementMadeActive; + if (wasActivatedByPointer || wasElementMadeActive) { + this.runDeactivationUXLogicIfReady(); + } + }; + MDCRippleFoundation.prototype.layoutInternal = function () { + var _this = this; + this.frame = this.adapter.computeBoundingRect(); + var maxDim = Math.max(this.frame.height, this.frame.width); + // Surface diameter is treated differently for unbounded vs. bounded ripples. + // Unbounded ripple diameter is calculated smaller since the surface is expected to already be padded appropriately + // to extend the hitbox, and the ripple is expected to meet the edges of the padded hitbox (which is typically + // square). Bounded ripples, on the other hand, are fully expected to expand beyond the surface's longest diameter + // (calculated based on the diagonal plus a constant padding), and are clipped at the surface's border via + // `overflow: hidden`. + var getBoundedRadius = function () { + var hypotenuse = Math.sqrt(Math.pow(_this.frame.width, 2) + Math.pow(_this.frame.height, 2)); + return hypotenuse + MDCRippleFoundation.numbers.PADDING; + }; + this.maxRadius = this.adapter.isUnbounded() ? maxDim : getBoundedRadius(); + // Ripple is sized as a fraction of the largest dimension of the surface, then scales up using a CSS scale transform + var initialSize = Math.floor(maxDim * MDCRippleFoundation.numbers.INITIAL_ORIGIN_SCALE); + // Unbounded ripple size should always be even number to equally center align. + if (this.adapter.isUnbounded() && initialSize % 2 !== 0) { + this.initialSize = initialSize - 1; + } + else { + this.initialSize = initialSize; + } + this.fgScale = "" + this.maxRadius / this.initialSize; + this.updateLayoutCssVars(); + }; + MDCRippleFoundation.prototype.updateLayoutCssVars = function () { + var _a = MDCRippleFoundation.strings, VAR_FG_SIZE = _a.VAR_FG_SIZE, VAR_LEFT = _a.VAR_LEFT, VAR_TOP = _a.VAR_TOP, VAR_FG_SCALE = _a.VAR_FG_SCALE; + this.adapter.updateCssVariable(VAR_FG_SIZE, this.initialSize + "px"); + this.adapter.updateCssVariable(VAR_FG_SCALE, this.fgScale); + if (this.adapter.isUnbounded()) { + this.unboundedCoords = { + left: Math.round((this.frame.width / 2) - (this.initialSize / 2)), + top: Math.round((this.frame.height / 2) - (this.initialSize / 2)), + }; + this.adapter.updateCssVariable(VAR_LEFT, this.unboundedCoords.left + "px"); + this.adapter.updateCssVariable(VAR_TOP, this.unboundedCoords.top + "px"); + } + }; + return MDCRippleFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const ripple_foundation = ((/* unused pure expression or super */ null && (MDCRippleFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/ripple/component.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + +var MDCRipple = /** @class */ (function (_super) { + tslib_es6_extends(MDCRipple, _super); + function MDCRipple() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.disabled = false; + return _this; + } + MDCRipple.attachTo = function (root, opts) { + if (opts === void 0) { opts = { + isUnbounded: undefined + }; } + var ripple = new MDCRipple(root); + // Only override unbounded behavior if option is explicitly specified + if (opts.isUnbounded !== undefined) { + ripple.unbounded = opts.isUnbounded; + } + return ripple; + }; + MDCRipple.createAdapter = function (instance) { + return { + addClass: function (className) { return instance.root.classList.add(className); }, + browserSupportsCssVars: function () { return supportsCssVariables(window); }, + computeBoundingRect: function () { return instance.root.getBoundingClientRect(); }, + containsEventTarget: function (target) { return instance.root.contains(target); }, + deregisterDocumentInteractionHandler: function (evtType, handler) { + return document.documentElement.removeEventListener(evtType, handler, applyPassive()); + }, + deregisterInteractionHandler: function (evtType, handler) { + return instance.root + .removeEventListener(evtType, handler, applyPassive()); + }, + deregisterResizeHandler: function (handler) { + return window.removeEventListener('resize', handler); + }, + getWindowPageOffset: function () { + return ({ x: window.pageXOffset, y: window.pageYOffset }); + }, + isSurfaceActive: function () { return matches(instance.root, ':active'); }, + isSurfaceDisabled: function () { return Boolean(instance.disabled); }, + isUnbounded: function () { return Boolean(instance.unbounded); }, + registerDocumentInteractionHandler: function (evtType, handler) { + return document.documentElement.addEventListener(evtType, handler, applyPassive()); + }, + registerInteractionHandler: function (evtType, handler) { + return instance.root + .addEventListener(evtType, handler, applyPassive()); + }, + registerResizeHandler: function (handler) { + return window.addEventListener('resize', handler); + }, + removeClass: function (className) { return instance.root.classList.remove(className); }, + updateCssVariable: function (varName, value) { + return instance.root.style.setProperty(varName, value); + }, + }; + }; + Object.defineProperty(MDCRipple.prototype, "unbounded", { + get: function () { + return Boolean(this.isUnbounded); + }, + set: function (unbounded) { + this.isUnbounded = Boolean(unbounded); + this.setUnbounded(); + }, + enumerable: false, + configurable: true + }); + MDCRipple.prototype.activate = function () { + this.foundation.activate(); + }; + MDCRipple.prototype.deactivate = function () { + this.foundation.deactivate(); + }; + MDCRipple.prototype.layout = function () { + this.foundation.layout(); + }; + MDCRipple.prototype.getDefaultFoundation = function () { + return new MDCRippleFoundation(MDCRipple.createAdapter(this)); + }; + MDCRipple.prototype.initialSyncWithDOM = function () { + var root = this.root; + this.isUnbounded = 'mdcRippleIsUnbounded' in root.dataset; + }; + /** + * Closure Compiler throws an access control error when directly accessing a + * protected or private property inside a getter/setter, like unbounded above. + * By accessing the protected property inside a method, we solve that problem. + * That's why this function exists. + */ + MDCRipple.prototype.setUnbounded = function () { + this.foundation.setUnbounded(Boolean(this.isUnbounded)); + }; + return MDCRipple; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/textfield/character-counter/constants.js +/** + * @license + * Copyright 2019 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var character_counter_constants_cssClasses = { + ROOT: 'mdc-text-field-character-counter', +}; +var character_counter_constants_strings = { + ROOT_SELECTOR: "." + character_counter_constants_cssClasses.ROOT, +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/textfield/character-counter/foundation.js +/** + * @license + * Copyright 2019 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCTextFieldCharacterCounterFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCTextFieldCharacterCounterFoundation, _super); + function MDCTextFieldCharacterCounterFoundation(adapter) { + return _super.call(this, __assign(__assign({}, MDCTextFieldCharacterCounterFoundation.defaultAdapter), adapter)) || this; + } + Object.defineProperty(MDCTextFieldCharacterCounterFoundation, "cssClasses", { + get: function () { + return character_counter_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextFieldCharacterCounterFoundation, "strings", { + get: function () { + return character_counter_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextFieldCharacterCounterFoundation, "defaultAdapter", { + /** + * See {@link MDCTextFieldCharacterCounterAdapter} for typing information on parameters and return types. + */ + get: function () { + return { + setContent: function () { return undefined; }, + }; + }, + enumerable: false, + configurable: true + }); + MDCTextFieldCharacterCounterFoundation.prototype.setCounterValue = function (currentLength, maxLength) { + currentLength = Math.min(currentLength, maxLength); + this.adapter.setContent(currentLength + " / " + maxLength); + }; + return MDCTextFieldCharacterCounterFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const character_counter_foundation = ((/* unused pure expression or super */ null && (MDCTextFieldCharacterCounterFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/textfield/character-counter/component.js +/** + * @license + * Copyright 2019 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCTextFieldCharacterCounter = /** @class */ (function (_super) { + tslib_es6_extends(MDCTextFieldCharacterCounter, _super); + function MDCTextFieldCharacterCounter() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTextFieldCharacterCounter.attachTo = function (root) { + return new MDCTextFieldCharacterCounter(root); + }; + Object.defineProperty(MDCTextFieldCharacterCounter.prototype, "foundationForTextField", { + // Provided for access by MDCTextField component + get: function () { + return this.foundation; + }, + enumerable: false, + configurable: true + }); + MDCTextFieldCharacterCounter.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + var adapter = { + setContent: function (content) { + _this.root.textContent = content; + }, + }; + return new MDCTextFieldCharacterCounterFoundation(adapter); + }; + return MDCTextFieldCharacterCounter; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/textfield/constants.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var textfield_constants_strings = { + ARIA_CONTROLS: 'aria-controls', + ARIA_DESCRIBEDBY: 'aria-describedby', + INPUT_SELECTOR: '.mdc-text-field__input', + LABEL_SELECTOR: '.mdc-floating-label', + LEADING_ICON_SELECTOR: '.mdc-text-field__icon--leading', + LINE_RIPPLE_SELECTOR: '.mdc-line-ripple', + OUTLINE_SELECTOR: '.mdc-notched-outline', + PREFIX_SELECTOR: '.mdc-text-field__affix--prefix', + SUFFIX_SELECTOR: '.mdc-text-field__affix--suffix', + TRAILING_ICON_SELECTOR: '.mdc-text-field__icon--trailing' +}; +var textfield_constants_cssClasses = { + DISABLED: 'mdc-text-field--disabled', + FOCUSED: 'mdc-text-field--focused', + HELPER_LINE: 'mdc-text-field-helper-line', + INVALID: 'mdc-text-field--invalid', + LABEL_FLOATING: 'mdc-text-field--label-floating', + NO_LABEL: 'mdc-text-field--no-label', + OUTLINED: 'mdc-text-field--outlined', + ROOT: 'mdc-text-field', + TEXTAREA: 'mdc-text-field--textarea', + WITH_LEADING_ICON: 'mdc-text-field--with-leading-icon', + WITH_TRAILING_ICON: 'mdc-text-field--with-trailing-icon', + WITH_INTERNAL_COUNTER: 'mdc-text-field--with-internal-counter', +}; +var textfield_constants_numbers = { + LABEL_SCALE: 0.75, +}; +/** + * Whitelist based off of + * https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation + * under the "Validation-related attributes" section. + */ +var VALIDATION_ATTR_WHITELIST = [ + 'pattern', + 'min', + 'max', + 'required', + 'step', + 'minlength', + 'maxlength', +]; +/** + * Label should always float for these types as they show some UI even if value + * is empty. + */ +var ALWAYS_FLOAT_TYPES = [ + 'color', + 'date', + 'datetime-local', + 'month', + 'range', + 'time', + 'week', +]; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/textfield/foundation.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var POINTERDOWN_EVENTS = ['mousedown', 'touchstart']; +var INTERACTION_EVENTS = ['click', 'keydown']; +var MDCTextFieldFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCTextFieldFoundation, _super); + /** + * @param adapter + * @param foundationMap Map from subcomponent names to their subfoundations. + */ + function MDCTextFieldFoundation(adapter, foundationMap) { + if (foundationMap === void 0) { foundationMap = {}; } + var _this = _super.call(this, __assign(__assign({}, MDCTextFieldFoundation.defaultAdapter), adapter)) || this; + _this.isFocused = false; + _this.receivedUserInput = false; + _this.valid = true; + _this.useNativeValidation = true; + _this.validateOnValueChange = true; + _this.helperText = foundationMap.helperText; + _this.characterCounter = foundationMap.characterCounter; + _this.leadingIcon = foundationMap.leadingIcon; + _this.trailingIcon = foundationMap.trailingIcon; + _this.inputFocusHandler = function () { + _this.activateFocus(); + }; + _this.inputBlurHandler = function () { + _this.deactivateFocus(); + }; + _this.inputInputHandler = function () { + _this.handleInput(); + }; + _this.setPointerXOffset = function (evt) { + _this.setTransformOrigin(evt); + }; + _this.textFieldInteractionHandler = function () { + _this.handleTextFieldInteraction(); + }; + _this.validationAttributeChangeHandler = function (attributesList) { + _this.handleValidationAttributeChange(attributesList); + }; + return _this; + } + Object.defineProperty(MDCTextFieldFoundation, "cssClasses", { + get: function () { + return textfield_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextFieldFoundation, "strings", { + get: function () { + return textfield_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextFieldFoundation, "numbers", { + get: function () { + return textfield_constants_numbers; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextFieldFoundation.prototype, "shouldAlwaysFloat", { + get: function () { + var type = this.getNativeInput().type; + return ALWAYS_FLOAT_TYPES.indexOf(type) >= 0; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextFieldFoundation.prototype, "shouldFloat", { + get: function () { + return this.shouldAlwaysFloat || this.isFocused || !!this.getValue() || + this.isBadInput(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextFieldFoundation.prototype, "shouldShake", { + get: function () { + return !this.isFocused && !this.isValid() && !!this.getValue(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextFieldFoundation, "defaultAdapter", { + /** + * See {@link MDCTextFieldAdapter} for typing information on parameters and + * return types. + */ + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + hasClass: function () { return true; }, + setInputAttr: function () { return undefined; }, + removeInputAttr: function () { return undefined; }, + registerTextFieldInteractionHandler: function () { return undefined; }, + deregisterTextFieldInteractionHandler: function () { return undefined; }, + registerInputInteractionHandler: function () { return undefined; }, + deregisterInputInteractionHandler: function () { return undefined; }, + registerValidationAttributeChangeHandler: function () { + return new MutationObserver(function () { return undefined; }); + }, + deregisterValidationAttributeChangeHandler: function () { return undefined; }, + getNativeInput: function () { return null; }, + isFocused: function () { return false; }, + activateLineRipple: function () { return undefined; }, + deactivateLineRipple: function () { return undefined; }, + setLineRippleTransformOrigin: function () { return undefined; }, + shakeLabel: function () { return undefined; }, + floatLabel: function () { return undefined; }, + setLabelRequired: function () { return undefined; }, + hasLabel: function () { return false; }, + getLabelWidth: function () { return 0; }, + hasOutline: function () { return false; }, + notchOutline: function () { return undefined; }, + closeOutline: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCTextFieldFoundation.prototype.init = function () { + var e_1, _a, e_2, _b; + if (this.adapter.hasLabel() && this.getNativeInput().required) { + this.adapter.setLabelRequired(true); + } + if (this.adapter.isFocused()) { + this.inputFocusHandler(); + } + else if (this.adapter.hasLabel() && this.shouldFloat) { + this.notchOutline(true); + this.adapter.floatLabel(true); + this.styleFloating(true); + } + this.adapter.registerInputInteractionHandler('focus', this.inputFocusHandler); + this.adapter.registerInputInteractionHandler('blur', this.inputBlurHandler); + this.adapter.registerInputInteractionHandler('input', this.inputInputHandler); + try { + for (var POINTERDOWN_EVENTS_1 = tslib_es6_values(POINTERDOWN_EVENTS), POINTERDOWN_EVENTS_1_1 = POINTERDOWN_EVENTS_1.next(); !POINTERDOWN_EVENTS_1_1.done; POINTERDOWN_EVENTS_1_1 = POINTERDOWN_EVENTS_1.next()) { + var evtType = POINTERDOWN_EVENTS_1_1.value; + this.adapter.registerInputInteractionHandler(evtType, this.setPointerXOffset); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (POINTERDOWN_EVENTS_1_1 && !POINTERDOWN_EVENTS_1_1.done && (_a = POINTERDOWN_EVENTS_1.return)) _a.call(POINTERDOWN_EVENTS_1); + } + finally { if (e_1) throw e_1.error; } + } + try { + for (var INTERACTION_EVENTS_1 = tslib_es6_values(INTERACTION_EVENTS), INTERACTION_EVENTS_1_1 = INTERACTION_EVENTS_1.next(); !INTERACTION_EVENTS_1_1.done; INTERACTION_EVENTS_1_1 = INTERACTION_EVENTS_1.next()) { + var evtType = INTERACTION_EVENTS_1_1.value; + this.adapter.registerTextFieldInteractionHandler(evtType, this.textFieldInteractionHandler); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (INTERACTION_EVENTS_1_1 && !INTERACTION_EVENTS_1_1.done && (_b = INTERACTION_EVENTS_1.return)) _b.call(INTERACTION_EVENTS_1); + } + finally { if (e_2) throw e_2.error; } + } + this.validationObserver = + this.adapter.registerValidationAttributeChangeHandler(this.validationAttributeChangeHandler); + this.setcharacterCounter(this.getValue().length); + }; + MDCTextFieldFoundation.prototype.destroy = function () { + var e_3, _a, e_4, _b; + this.adapter.deregisterInputInteractionHandler('focus', this.inputFocusHandler); + this.adapter.deregisterInputInteractionHandler('blur', this.inputBlurHandler); + this.adapter.deregisterInputInteractionHandler('input', this.inputInputHandler); + try { + for (var POINTERDOWN_EVENTS_2 = tslib_es6_values(POINTERDOWN_EVENTS), POINTERDOWN_EVENTS_2_1 = POINTERDOWN_EVENTS_2.next(); !POINTERDOWN_EVENTS_2_1.done; POINTERDOWN_EVENTS_2_1 = POINTERDOWN_EVENTS_2.next()) { + var evtType = POINTERDOWN_EVENTS_2_1.value; + this.adapter.deregisterInputInteractionHandler(evtType, this.setPointerXOffset); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (POINTERDOWN_EVENTS_2_1 && !POINTERDOWN_EVENTS_2_1.done && (_a = POINTERDOWN_EVENTS_2.return)) _a.call(POINTERDOWN_EVENTS_2); + } + finally { if (e_3) throw e_3.error; } + } + try { + for (var INTERACTION_EVENTS_2 = tslib_es6_values(INTERACTION_EVENTS), INTERACTION_EVENTS_2_1 = INTERACTION_EVENTS_2.next(); !INTERACTION_EVENTS_2_1.done; INTERACTION_EVENTS_2_1 = INTERACTION_EVENTS_2.next()) { + var evtType = INTERACTION_EVENTS_2_1.value; + this.adapter.deregisterTextFieldInteractionHandler(evtType, this.textFieldInteractionHandler); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (INTERACTION_EVENTS_2_1 && !INTERACTION_EVENTS_2_1.done && (_b = INTERACTION_EVENTS_2.return)) _b.call(INTERACTION_EVENTS_2); + } + finally { if (e_4) throw e_4.error; } + } + this.adapter.deregisterValidationAttributeChangeHandler(this.validationObserver); + }; + /** + * Handles user interactions with the Text Field. + */ + MDCTextFieldFoundation.prototype.handleTextFieldInteraction = function () { + var nativeInput = this.adapter.getNativeInput(); + if (nativeInput && nativeInput.disabled) { + return; + } + this.receivedUserInput = true; + }; + /** + * Handles validation attribute changes + */ + MDCTextFieldFoundation.prototype.handleValidationAttributeChange = function (attributesList) { + var _this = this; + attributesList.some(function (attributeName) { + if (VALIDATION_ATTR_WHITELIST.indexOf(attributeName) > -1) { + _this.styleValidity(true); + _this.adapter.setLabelRequired(_this.getNativeInput().required); + return true; + } + return false; + }); + if (attributesList.indexOf('maxlength') > -1) { + this.setcharacterCounter(this.getValue().length); + } + }; + /** + * Opens/closes the notched outline. + */ + MDCTextFieldFoundation.prototype.notchOutline = function (openNotch) { + if (!this.adapter.hasOutline() || !this.adapter.hasLabel()) { + return; + } + if (openNotch) { + var labelWidth = this.adapter.getLabelWidth() * textfield_constants_numbers.LABEL_SCALE; + this.adapter.notchOutline(labelWidth); + } + else { + this.adapter.closeOutline(); + } + }; + /** + * Activates the text field focus state. + */ + MDCTextFieldFoundation.prototype.activateFocus = function () { + this.isFocused = true; + this.styleFocused(this.isFocused); + this.adapter.activateLineRipple(); + if (this.adapter.hasLabel()) { + this.notchOutline(this.shouldFloat); + this.adapter.floatLabel(this.shouldFloat); + this.styleFloating(this.shouldFloat); + this.adapter.shakeLabel(this.shouldShake); + } + if (this.helperText && + (this.helperText.isPersistent() || !this.helperText.isValidation() || + !this.valid)) { + this.helperText.showToScreenReader(); + } + }; + /** + * Sets the line ripple's transform origin, so that the line ripple activate + * animation will animate out from the user's click location. + */ + MDCTextFieldFoundation.prototype.setTransformOrigin = function (evt) { + if (this.isDisabled() || this.adapter.hasOutline()) { + return; + } + var touches = evt.touches; + var targetEvent = touches ? touches[0] : evt; + var targetClientRect = targetEvent.target.getBoundingClientRect(); + var normalizedX = targetEvent.clientX - targetClientRect.left; + this.adapter.setLineRippleTransformOrigin(normalizedX); + }; + /** + * Handles input change of text input and text area. + */ + MDCTextFieldFoundation.prototype.handleInput = function () { + this.autoCompleteFocus(); + this.setcharacterCounter(this.getValue().length); + }; + /** + * Activates the Text Field's focus state in cases when the input value + * changes without user input (e.g. programmatically). + */ + MDCTextFieldFoundation.prototype.autoCompleteFocus = function () { + if (!this.receivedUserInput) { + this.activateFocus(); + } + }; + /** + * Deactivates the Text Field's focus state. + */ + MDCTextFieldFoundation.prototype.deactivateFocus = function () { + this.isFocused = false; + this.adapter.deactivateLineRipple(); + var isValid = this.isValid(); + this.styleValidity(isValid); + this.styleFocused(this.isFocused); + if (this.adapter.hasLabel()) { + this.notchOutline(this.shouldFloat); + this.adapter.floatLabel(this.shouldFloat); + this.styleFloating(this.shouldFloat); + this.adapter.shakeLabel(this.shouldShake); + } + if (!this.shouldFloat) { + this.receivedUserInput = false; + } + }; + MDCTextFieldFoundation.prototype.getValue = function () { + return this.getNativeInput().value; + }; + /** + * @param value The value to set on the input Element. + */ + MDCTextFieldFoundation.prototype.setValue = function (value) { + // Prevent Safari from moving the caret to the end of the input when the + // value has not changed. + if (this.getValue() !== value) { + this.getNativeInput().value = value; + } + this.setcharacterCounter(value.length); + if (this.validateOnValueChange) { + var isValid = this.isValid(); + this.styleValidity(isValid); + } + if (this.adapter.hasLabel()) { + this.notchOutline(this.shouldFloat); + this.adapter.floatLabel(this.shouldFloat); + this.styleFloating(this.shouldFloat); + if (this.validateOnValueChange) { + this.adapter.shakeLabel(this.shouldShake); + } + } + }; + /** + * @return The custom validity state, if set; otherwise, the result of a + * native validity check. + */ + MDCTextFieldFoundation.prototype.isValid = function () { + return this.useNativeValidation ? this.isNativeInputValid() : this.valid; + }; + /** + * @param isValid Sets the custom validity state of the Text Field. + */ + MDCTextFieldFoundation.prototype.setValid = function (isValid) { + this.valid = isValid; + this.styleValidity(isValid); + var shouldShake = !isValid && !this.isFocused && !!this.getValue(); + if (this.adapter.hasLabel()) { + this.adapter.shakeLabel(shouldShake); + } + }; + /** + * @param shouldValidate Whether or not validity should be updated on + * value change. + */ + MDCTextFieldFoundation.prototype.setValidateOnValueChange = function (shouldValidate) { + this.validateOnValueChange = shouldValidate; + }; + /** + * @return Whether or not validity should be updated on value change. `true` + * by default. + */ + MDCTextFieldFoundation.prototype.getValidateOnValueChange = function () { + return this.validateOnValueChange; + }; + /** + * Enables or disables the use of native validation. Use this for custom + * validation. + * @param useNativeValidation Set this to false to ignore native input + * validation. + */ + MDCTextFieldFoundation.prototype.setUseNativeValidation = function (useNativeValidation) { + this.useNativeValidation = useNativeValidation; + }; + MDCTextFieldFoundation.prototype.isDisabled = function () { + return this.getNativeInput().disabled; + }; + /** + * @param disabled Sets the text-field disabled or enabled. + */ + MDCTextFieldFoundation.prototype.setDisabled = function (disabled) { + this.getNativeInput().disabled = disabled; + this.styleDisabled(disabled); + }; + /** + * @param content Sets the content of the helper text. + */ + MDCTextFieldFoundation.prototype.setHelperTextContent = function (content) { + if (this.helperText) { + this.helperText.setContent(content); + } + }; + /** + * Sets the aria label of the leading icon. + */ + MDCTextFieldFoundation.prototype.setLeadingIconAriaLabel = function (label) { + if (this.leadingIcon) { + this.leadingIcon.setAriaLabel(label); + } + }; + /** + * Sets the text content of the leading icon. + */ + MDCTextFieldFoundation.prototype.setLeadingIconContent = function (content) { + if (this.leadingIcon) { + this.leadingIcon.setContent(content); + } + }; + /** + * Sets the aria label of the trailing icon. + */ + MDCTextFieldFoundation.prototype.setTrailingIconAriaLabel = function (label) { + if (this.trailingIcon) { + this.trailingIcon.setAriaLabel(label); + } + }; + /** + * Sets the text content of the trailing icon. + */ + MDCTextFieldFoundation.prototype.setTrailingIconContent = function (content) { + if (this.trailingIcon) { + this.trailingIcon.setContent(content); + } + }; + /** + * Sets character counter values that shows characters used and the total + * character limit. + */ + MDCTextFieldFoundation.prototype.setcharacterCounter = function (currentLength) { + if (!this.characterCounter) { + return; + } + var maxLength = this.getNativeInput().maxLength; + if (maxLength === -1) { + throw new Error('MDCTextFieldFoundation: Expected maxlength html property on text input or textarea.'); + } + this.characterCounter.setCounterValue(currentLength, maxLength); + }; + /** + * @return True if the Text Field input fails in converting the user-supplied + * value. + */ + MDCTextFieldFoundation.prototype.isBadInput = function () { + // The badInput property is not supported in IE 11 💩. + return this.getNativeInput().validity.badInput || false; + }; + /** + * @return The result of native validity checking (ValidityState.valid). + */ + MDCTextFieldFoundation.prototype.isNativeInputValid = function () { + return this.getNativeInput().validity.valid; + }; + /** + * Styles the component based on the validity state. + */ + MDCTextFieldFoundation.prototype.styleValidity = function (isValid) { + var INVALID = MDCTextFieldFoundation.cssClasses.INVALID; + if (isValid) { + this.adapter.removeClass(INVALID); + } + else { + this.adapter.addClass(INVALID); + } + if (this.helperText) { + this.helperText.setValidity(isValid); + // We dynamically set or unset aria-describedby for validation helper text + // only, based on whether the field is valid + var helperTextValidation = this.helperText.isValidation(); + if (!helperTextValidation) { + return; + } + var helperTextVisible = this.helperText.isVisible(); + var helperTextId = this.helperText.getId(); + if (helperTextVisible && helperTextId) { + this.adapter.setInputAttr(textfield_constants_strings.ARIA_DESCRIBEDBY, helperTextId); + } + else { + this.adapter.removeInputAttr(textfield_constants_strings.ARIA_DESCRIBEDBY); + } + } + }; + /** + * Styles the component based on the focused state. + */ + MDCTextFieldFoundation.prototype.styleFocused = function (isFocused) { + var FOCUSED = MDCTextFieldFoundation.cssClasses.FOCUSED; + if (isFocused) { + this.adapter.addClass(FOCUSED); + } + else { + this.adapter.removeClass(FOCUSED); + } + }; + /** + * Styles the component based on the disabled state. + */ + MDCTextFieldFoundation.prototype.styleDisabled = function (isDisabled) { + var _a = MDCTextFieldFoundation.cssClasses, DISABLED = _a.DISABLED, INVALID = _a.INVALID; + if (isDisabled) { + this.adapter.addClass(DISABLED); + this.adapter.removeClass(INVALID); + } + else { + this.adapter.removeClass(DISABLED); + } + if (this.leadingIcon) { + this.leadingIcon.setDisabled(isDisabled); + } + if (this.trailingIcon) { + this.trailingIcon.setDisabled(isDisabled); + } + }; + /** + * Styles the component based on the label floating state. + */ + MDCTextFieldFoundation.prototype.styleFloating = function (isFloating) { + var LABEL_FLOATING = MDCTextFieldFoundation.cssClasses.LABEL_FLOATING; + if (isFloating) { + this.adapter.addClass(LABEL_FLOATING); + } + else { + this.adapter.removeClass(LABEL_FLOATING); + } + }; + /** + * @return The native text input element from the host environment, or an + * object with the same shape for unit tests. + */ + MDCTextFieldFoundation.prototype.getNativeInput = function () { + // this.adapter may be undefined in foundation unit tests. This happens when + // testdouble is creating a mock object and invokes the + // shouldShake/shouldFloat getters (which in turn call getValue(), which + // calls this method) before init() has been called from the MDCTextField + // constructor. To work around that issue, we return a dummy object. + var nativeInput = this.adapter ? this.adapter.getNativeInput() : null; + return nativeInput || { + disabled: false, + maxLength: -1, + required: false, + type: 'input', + validity: { + badInput: false, + valid: true, + }, + value: '', + }; + }; + return MDCTextFieldFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const textfield_foundation = ((/* unused pure expression or super */ null && (MDCTextFieldFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/textfield/helper-text/constants.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var helper_text_constants_cssClasses = { + HELPER_TEXT_PERSISTENT: 'mdc-text-field-helper-text--persistent', + HELPER_TEXT_VALIDATION_MSG: 'mdc-text-field-helper-text--validation-msg', + ROOT: 'mdc-text-field-helper-text', +}; +var helper_text_constants_strings = { + ARIA_HIDDEN: 'aria-hidden', + ROLE: 'role', + ROOT_SELECTOR: "." + helper_text_constants_cssClasses.ROOT, +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/textfield/helper-text/foundation.js +/** + * @license + * Copyright 2017 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCTextFieldHelperTextFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCTextFieldHelperTextFoundation, _super); + function MDCTextFieldHelperTextFoundation(adapter) { + return _super.call(this, __assign(__assign({}, MDCTextFieldHelperTextFoundation.defaultAdapter), adapter)) || this; + } + Object.defineProperty(MDCTextFieldHelperTextFoundation, "cssClasses", { + get: function () { + return helper_text_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextFieldHelperTextFoundation, "strings", { + get: function () { + return helper_text_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextFieldHelperTextFoundation, "defaultAdapter", { + /** + * See {@link MDCTextFieldHelperTextAdapter} for typing information on parameters and return types. + */ + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + hasClass: function () { return false; }, + getAttr: function () { return null; }, + setAttr: function () { return undefined; }, + removeAttr: function () { return undefined; }, + setContent: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCTextFieldHelperTextFoundation.prototype.getId = function () { + return this.adapter.getAttr('id'); + }; + MDCTextFieldHelperTextFoundation.prototype.isVisible = function () { + return this.adapter.getAttr(helper_text_constants_strings.ARIA_HIDDEN) !== 'true'; + }; + /** + * Sets the content of the helper text field. + */ + MDCTextFieldHelperTextFoundation.prototype.setContent = function (content) { + this.adapter.setContent(content); + }; + MDCTextFieldHelperTextFoundation.prototype.isPersistent = function () { + return this.adapter.hasClass(helper_text_constants_cssClasses.HELPER_TEXT_PERSISTENT); + }; + /** + * @param isPersistent Sets the persistency of the helper text. + */ + MDCTextFieldHelperTextFoundation.prototype.setPersistent = function (isPersistent) { + if (isPersistent) { + this.adapter.addClass(helper_text_constants_cssClasses.HELPER_TEXT_PERSISTENT); + } + else { + this.adapter.removeClass(helper_text_constants_cssClasses.HELPER_TEXT_PERSISTENT); + } + }; + /** + * @return whether the helper text acts as an error validation message. + */ + MDCTextFieldHelperTextFoundation.prototype.isValidation = function () { + return this.adapter.hasClass(helper_text_constants_cssClasses.HELPER_TEXT_VALIDATION_MSG); + }; + /** + * @param isValidation True to make the helper text act as an error validation message. + */ + MDCTextFieldHelperTextFoundation.prototype.setValidation = function (isValidation) { + if (isValidation) { + this.adapter.addClass(helper_text_constants_cssClasses.HELPER_TEXT_VALIDATION_MSG); + } + else { + this.adapter.removeClass(helper_text_constants_cssClasses.HELPER_TEXT_VALIDATION_MSG); + } + }; + /** + * Makes the helper text visible to the screen reader. + */ + MDCTextFieldHelperTextFoundation.prototype.showToScreenReader = function () { + this.adapter.removeAttr(helper_text_constants_strings.ARIA_HIDDEN); + }; + /** + * Sets the validity of the helper text based on the input validity. + */ + MDCTextFieldHelperTextFoundation.prototype.setValidity = function (inputIsValid) { + var helperTextIsPersistent = this.adapter.hasClass(helper_text_constants_cssClasses.HELPER_TEXT_PERSISTENT); + var helperTextIsValidationMsg = this.adapter.hasClass(helper_text_constants_cssClasses.HELPER_TEXT_VALIDATION_MSG); + var validationMsgNeedsDisplay = helperTextIsValidationMsg && !inputIsValid; + if (validationMsgNeedsDisplay) { + this.showToScreenReader(); + // If role is already alert, refresh it to trigger another announcement + // from screenreader. + if (this.adapter.getAttr(helper_text_constants_strings.ROLE) === 'alert') { + this.refreshAlertRole(); + } + else { + this.adapter.setAttr(helper_text_constants_strings.ROLE, 'alert'); + } + } + else { + this.adapter.removeAttr(helper_text_constants_strings.ROLE); + } + if (!helperTextIsPersistent && !validationMsgNeedsDisplay) { + this.hide(); + } + }; + /** + * Hides the help text from screen readers. + */ + MDCTextFieldHelperTextFoundation.prototype.hide = function () { + this.adapter.setAttr(helper_text_constants_strings.ARIA_HIDDEN, 'true'); + }; + MDCTextFieldHelperTextFoundation.prototype.refreshAlertRole = function () { + var _this = this; + this.adapter.removeAttr(helper_text_constants_strings.ROLE); + requestAnimationFrame(function () { + _this.adapter.setAttr(helper_text_constants_strings.ROLE, 'alert'); + }); + }; + return MDCTextFieldHelperTextFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const helper_text_foundation = ((/* unused pure expression or super */ null && (MDCTextFieldHelperTextFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/textfield/helper-text/component.js +/** + * @license + * Copyright 2017 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCTextFieldHelperText = /** @class */ (function (_super) { + tslib_es6_extends(MDCTextFieldHelperText, _super); + function MDCTextFieldHelperText() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTextFieldHelperText.attachTo = function (root) { + return new MDCTextFieldHelperText(root); + }; + Object.defineProperty(MDCTextFieldHelperText.prototype, "foundationForTextField", { + // Provided for access by MDCTextField component + get: function () { + return this.foundation; + }, + enumerable: false, + configurable: true + }); + MDCTextFieldHelperText.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = { + addClass: function (className) { return _this.root.classList.add(className); }, + removeClass: function (className) { return _this.root.classList.remove(className); }, + hasClass: function (className) { return _this.root.classList.contains(className); }, + getAttr: function (attr) { return _this.root.getAttribute(attr); }, + setAttr: function (attr, value) { return _this.root.setAttribute(attr, value); }, + removeAttr: function (attr) { return _this.root.removeAttribute(attr); }, + setContent: function (content) { + _this.root.textContent = content; + }, + }; + // tslint:enable:object-literal-sort-keys + return new MDCTextFieldHelperTextFoundation(adapter); + }; + return MDCTextFieldHelperText; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/textfield/icon/constants.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var icon_constants_strings = { + ICON_EVENT: 'MDCTextField:icon', + ICON_ROLE: 'button', +}; +var icon_constants_cssClasses = { + ROOT: 'mdc-text-field__icon', +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/textfield/icon/foundation.js +/** + * @license + * Copyright 2017 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var foundation_INTERACTION_EVENTS = ['click', 'keydown']; +var MDCTextFieldIconFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCTextFieldIconFoundation, _super); + function MDCTextFieldIconFoundation(adapter) { + var _this = _super.call(this, __assign(__assign({}, MDCTextFieldIconFoundation.defaultAdapter), adapter)) || this; + _this.savedTabIndex = null; + _this.interactionHandler = function (evt) { + _this.handleInteraction(evt); + }; + return _this; + } + Object.defineProperty(MDCTextFieldIconFoundation, "strings", { + get: function () { + return icon_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextFieldIconFoundation, "cssClasses", { + get: function () { + return icon_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextFieldIconFoundation, "defaultAdapter", { + /** + * See {@link MDCTextFieldIconAdapter} for typing information on parameters and return types. + */ + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + getAttr: function () { return null; }, + setAttr: function () { return undefined; }, + removeAttr: function () { return undefined; }, + setContent: function () { return undefined; }, + registerInteractionHandler: function () { return undefined; }, + deregisterInteractionHandler: function () { return undefined; }, + notifyIconAction: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCTextFieldIconFoundation.prototype.init = function () { + var e_1, _a; + this.savedTabIndex = this.adapter.getAttr('tabindex'); + try { + for (var INTERACTION_EVENTS_1 = tslib_es6_values(foundation_INTERACTION_EVENTS), INTERACTION_EVENTS_1_1 = INTERACTION_EVENTS_1.next(); !INTERACTION_EVENTS_1_1.done; INTERACTION_EVENTS_1_1 = INTERACTION_EVENTS_1.next()) { + var evtType = INTERACTION_EVENTS_1_1.value; + this.adapter.registerInteractionHandler(evtType, this.interactionHandler); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (INTERACTION_EVENTS_1_1 && !INTERACTION_EVENTS_1_1.done && (_a = INTERACTION_EVENTS_1.return)) _a.call(INTERACTION_EVENTS_1); + } + finally { if (e_1) throw e_1.error; } + } + }; + MDCTextFieldIconFoundation.prototype.destroy = function () { + var e_2, _a; + try { + for (var INTERACTION_EVENTS_2 = tslib_es6_values(foundation_INTERACTION_EVENTS), INTERACTION_EVENTS_2_1 = INTERACTION_EVENTS_2.next(); !INTERACTION_EVENTS_2_1.done; INTERACTION_EVENTS_2_1 = INTERACTION_EVENTS_2.next()) { + var evtType = INTERACTION_EVENTS_2_1.value; + this.adapter.deregisterInteractionHandler(evtType, this.interactionHandler); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (INTERACTION_EVENTS_2_1 && !INTERACTION_EVENTS_2_1.done && (_a = INTERACTION_EVENTS_2.return)) _a.call(INTERACTION_EVENTS_2); + } + finally { if (e_2) throw e_2.error; } + } + }; + MDCTextFieldIconFoundation.prototype.setDisabled = function (disabled) { + if (!this.savedTabIndex) { + return; + } + if (disabled) { + this.adapter.setAttr('tabindex', '-1'); + this.adapter.removeAttr('role'); + } + else { + this.adapter.setAttr('tabindex', this.savedTabIndex); + this.adapter.setAttr('role', icon_constants_strings.ICON_ROLE); + } + }; + MDCTextFieldIconFoundation.prototype.setAriaLabel = function (label) { + this.adapter.setAttr('aria-label', label); + }; + MDCTextFieldIconFoundation.prototype.setContent = function (content) { + this.adapter.setContent(content); + }; + MDCTextFieldIconFoundation.prototype.handleInteraction = function (evt) { + var isEnterKey = evt.key === 'Enter' || evt.keyCode === 13; + if (evt.type === 'click' || isEnterKey) { + evt.preventDefault(); // stop click from causing host label to focus + // input + this.adapter.notifyIconAction(); + } + }; + return MDCTextFieldIconFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const icon_foundation = ((/* unused pure expression or super */ null && (MDCTextFieldIconFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/textfield/icon/component.js +/** + * @license + * Copyright 2017 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCTextFieldIcon = /** @class */ (function (_super) { + tslib_es6_extends(MDCTextFieldIcon, _super); + function MDCTextFieldIcon() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTextFieldIcon.attachTo = function (root) { + return new MDCTextFieldIcon(root); + }; + Object.defineProperty(MDCTextFieldIcon.prototype, "foundationForTextField", { + // Provided for access by MDCTextField component + get: function () { + return this.foundation; + }, + enumerable: false, + configurable: true + }); + MDCTextFieldIcon.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = { + getAttr: function (attr) { return _this.root.getAttribute(attr); }, + setAttr: function (attr, value) { return _this.root.setAttribute(attr, value); }, + removeAttr: function (attr) { return _this.root.removeAttribute(attr); }, + setContent: function (content) { + _this.root.textContent = content; + }, + registerInteractionHandler: function (evtType, handler) { return _this.listen(evtType, handler); }, + deregisterInteractionHandler: function (evtType, handler) { return _this.unlisten(evtType, handler); }, + notifyIconAction: function () { return _this.emit(MDCTextFieldIconFoundation.strings.ICON_EVENT, {} /* evtData */, true /* shouldBubble */); }, + }; + // tslint:enable:object-literal-sort-keys + return new MDCTextFieldIconFoundation(adapter); + }; + return MDCTextFieldIcon; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/textfield/component.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + + + + + + + + + + + +var MDCTextField = /** @class */ (function (_super) { + tslib_es6_extends(MDCTextField, _super); + function MDCTextField() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTextField.attachTo = function (root) { + return new MDCTextField(root); + }; + MDCTextField.prototype.initialize = function (rippleFactory, lineRippleFactory, helperTextFactory, characterCounterFactory, iconFactory, labelFactory, outlineFactory) { + if (rippleFactory === void 0) { rippleFactory = function (el, foundation) { return new MDCRipple(el, foundation); }; } + if (lineRippleFactory === void 0) { lineRippleFactory = function (el) { return new MDCLineRipple(el); }; } + if (helperTextFactory === void 0) { helperTextFactory = function (el) { + return new MDCTextFieldHelperText(el); + }; } + if (characterCounterFactory === void 0) { characterCounterFactory = function (el) { + return new MDCTextFieldCharacterCounter(el); + }; } + if (iconFactory === void 0) { iconFactory = function (el) { return new MDCTextFieldIcon(el); }; } + if (labelFactory === void 0) { labelFactory = function (el) { return new MDCFloatingLabel(el); }; } + if (outlineFactory === void 0) { outlineFactory = function (el) { return new MDCNotchedOutline(el); }; } + this.input = + this.root.querySelector(textfield_constants_strings.INPUT_SELECTOR); + var labelElement = this.root.querySelector(textfield_constants_strings.LABEL_SELECTOR); + this.label = labelElement ? labelFactory(labelElement) : null; + var lineRippleElement = this.root.querySelector(textfield_constants_strings.LINE_RIPPLE_SELECTOR); + this.lineRipple = + lineRippleElement ? lineRippleFactory(lineRippleElement) : null; + var outlineElement = this.root.querySelector(textfield_constants_strings.OUTLINE_SELECTOR); + this.outline = outlineElement ? outlineFactory(outlineElement) : null; + // Helper text + var helperTextStrings = MDCTextFieldHelperTextFoundation.strings; + var nextElementSibling = this.root.nextElementSibling; + var hasHelperLine = (nextElementSibling && nextElementSibling.classList.contains(textfield_constants_cssClasses.HELPER_LINE)); + var helperTextEl = hasHelperLine && nextElementSibling && nextElementSibling.querySelector(helperTextStrings.ROOT_SELECTOR); + this.helperText = helperTextEl ? helperTextFactory(helperTextEl) : null; + // Character counter + var characterCounterStrings = MDCTextFieldCharacterCounterFoundation.strings; + var characterCounterEl = this.root.querySelector(characterCounterStrings.ROOT_SELECTOR); + // If character counter is not found in root element search in sibling element. + if (!characterCounterEl && hasHelperLine && nextElementSibling) { + characterCounterEl = nextElementSibling.querySelector(characterCounterStrings.ROOT_SELECTOR); + } + this.characterCounter = + characterCounterEl ? characterCounterFactory(characterCounterEl) : null; + // Leading icon + var leadingIconEl = this.root.querySelector(textfield_constants_strings.LEADING_ICON_SELECTOR); + this.leadingIcon = leadingIconEl ? iconFactory(leadingIconEl) : null; + // Trailing icon + var trailingIconEl = this.root.querySelector(textfield_constants_strings.TRAILING_ICON_SELECTOR); + this.trailingIcon = trailingIconEl ? iconFactory(trailingIconEl) : null; + // Prefix and Suffix + this.prefix = this.root.querySelector(textfield_constants_strings.PREFIX_SELECTOR); + this.suffix = this.root.querySelector(textfield_constants_strings.SUFFIX_SELECTOR); + this.ripple = this.createRipple(rippleFactory); + }; + MDCTextField.prototype.destroy = function () { + if (this.ripple) { + this.ripple.destroy(); + } + if (this.lineRipple) { + this.lineRipple.destroy(); + } + if (this.helperText) { + this.helperText.destroy(); + } + if (this.characterCounter) { + this.characterCounter.destroy(); + } + if (this.leadingIcon) { + this.leadingIcon.destroy(); + } + if (this.trailingIcon) { + this.trailingIcon.destroy(); + } + if (this.label) { + this.label.destroy(); + } + if (this.outline) { + this.outline.destroy(); + } + _super.prototype.destroy.call(this); + }; + /** + * Initializes the Text Field's internal state based on the environment's + * state. + */ + MDCTextField.prototype.initialSyncWithDOM = function () { + this.disabled = this.input.disabled; + }; + Object.defineProperty(MDCTextField.prototype, "value", { + get: function () { + return this.foundation.getValue(); + }, + /** + * @param value The value to set on the input. + */ + set: function (value) { + this.foundation.setValue(value); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "disabled", { + get: function () { + return this.foundation.isDisabled(); + }, + /** + * @param disabled Sets the Text Field disabled or enabled. + */ + set: function (disabled) { + this.foundation.setDisabled(disabled); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "valid", { + get: function () { + return this.foundation.isValid(); + }, + /** + * @param valid Sets the Text Field valid or invalid. + */ + set: function (valid) { + this.foundation.setValid(valid); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "required", { + get: function () { + return this.input.required; + }, + /** + * @param required Sets the Text Field to required. + */ + set: function (required) { + this.input.required = required; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "pattern", { + get: function () { + return this.input.pattern; + }, + /** + * @param pattern Sets the input element's validation pattern. + */ + set: function (pattern) { + this.input.pattern = pattern; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "minLength", { + get: function () { + return this.input.minLength; + }, + /** + * @param minLength Sets the input element's minLength. + */ + set: function (minLength) { + this.input.minLength = minLength; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "maxLength", { + get: function () { + return this.input.maxLength; + }, + /** + * @param maxLength Sets the input element's maxLength. + */ + set: function (maxLength) { + // Chrome throws exception if maxLength is set to a value less than zero + if (maxLength < 0) { + this.input.removeAttribute('maxLength'); + } + else { + this.input.maxLength = maxLength; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "min", { + get: function () { + return this.input.min; + }, + /** + * @param min Sets the input element's min. + */ + set: function (min) { + this.input.min = min; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "max", { + get: function () { + return this.input.max; + }, + /** + * @param max Sets the input element's max. + */ + set: function (max) { + this.input.max = max; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "step", { + get: function () { + return this.input.step; + }, + /** + * @param step Sets the input element's step. + */ + set: function (step) { + this.input.step = step; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "helperTextContent", { + /** + * Sets the helper text element content. + */ + set: function (content) { + this.foundation.setHelperTextContent(content); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "leadingIconAriaLabel", { + /** + * Sets the aria label of the leading icon. + */ + set: function (label) { + this.foundation.setLeadingIconAriaLabel(label); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "leadingIconContent", { + /** + * Sets the text content of the leading icon. + */ + set: function (content) { + this.foundation.setLeadingIconContent(content); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "trailingIconAriaLabel", { + /** + * Sets the aria label of the trailing icon. + */ + set: function (label) { + this.foundation.setTrailingIconAriaLabel(label); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "trailingIconContent", { + /** + * Sets the text content of the trailing icon. + */ + set: function (content) { + this.foundation.setTrailingIconContent(content); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "useNativeValidation", { + /** + * Enables or disables the use of native validation. Use this for custom validation. + * @param useNativeValidation Set this to false to ignore native input validation. + */ + set: function (useNativeValidation) { + this.foundation.setUseNativeValidation(useNativeValidation); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "prefixText", { + /** + * Gets the text content of the prefix, or null if it does not exist. + */ + get: function () { + return this.prefix ? this.prefix.textContent : null; + }, + /** + * Sets the text content of the prefix, if it exists. + */ + set: function (prefixText) { + if (this.prefix) { + this.prefix.textContent = prefixText; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTextField.prototype, "suffixText", { + /** + * Gets the text content of the suffix, or null if it does not exist. + */ + get: function () { + return this.suffix ? this.suffix.textContent : null; + }, + /** + * Sets the text content of the suffix, if it exists. + */ + set: function (suffixText) { + if (this.suffix) { + this.suffix.textContent = suffixText; + } + }, + enumerable: false, + configurable: true + }); + /** + * Focuses the input element. + */ + MDCTextField.prototype.focus = function () { + this.input.focus(); + }; + /** + * Recomputes the outline SVG path for the outline element. + */ + MDCTextField.prototype.layout = function () { + var openNotch = this.foundation.shouldFloat; + this.foundation.notchOutline(openNotch); + }; + MDCTextField.prototype.getDefaultFoundation = function () { + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = __assign(__assign(__assign(__assign(__assign({}, this.getRootAdapterMethods()), this.getInputAdapterMethods()), this.getLabelAdapterMethods()), this.getLineRippleAdapterMethods()), this.getOutlineAdapterMethods()); + // tslint:enable:object-literal-sort-keys + return new MDCTextFieldFoundation(adapter, this.getFoundationMap()); + }; + MDCTextField.prototype.getRootAdapterMethods = function () { + var _this = this; + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClass: function (className) { return _this.root.classList.add(className); }, + removeClass: function (className) { return _this.root.classList.remove(className); }, + hasClass: function (className) { return _this.root.classList.contains(className); }, + registerTextFieldInteractionHandler: function (evtType, handler) { + _this.listen(evtType, handler); + }, + deregisterTextFieldInteractionHandler: function (evtType, handler) { + _this.unlisten(evtType, handler); + }, + registerValidationAttributeChangeHandler: function (handler) { + var getAttributesList = function (mutationsList) { + return mutationsList + .map(function (mutation) { return mutation.attributeName; }) + .filter(function (attributeName) { return attributeName; }); + }; + var observer = new MutationObserver(function (mutationsList) { return handler(getAttributesList(mutationsList)); }); + var config = { attributes: true }; + observer.observe(_this.input, config); + return observer; + }, + deregisterValidationAttributeChangeHandler: function (observer) { + observer.disconnect(); + }, + }; + // tslint:enable:object-literal-sort-keys + }; + MDCTextField.prototype.getInputAdapterMethods = function () { + var _this = this; + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + getNativeInput: function () { return _this.input; }, + setInputAttr: function (attr, value) { + _this.input.setAttribute(attr, value); + }, + removeInputAttr: function (attr) { + _this.input.removeAttribute(attr); + }, + isFocused: function () { return document.activeElement === _this.input; }, + registerInputInteractionHandler: function (evtType, handler) { + _this.input.addEventListener(evtType, handler, applyPassive()); + }, + deregisterInputInteractionHandler: function (evtType, handler) { + _this.input.removeEventListener(evtType, handler, applyPassive()); + }, + }; + // tslint:enable:object-literal-sort-keys + }; + MDCTextField.prototype.getLabelAdapterMethods = function () { + var _this = this; + return { + floatLabel: function (shouldFloat) { + _this.label && _this.label.float(shouldFloat); + }, + getLabelWidth: function () { return _this.label ? _this.label.getWidth() : 0; }, + hasLabel: function () { return Boolean(_this.label); }, + shakeLabel: function (shouldShake) { + _this.label && _this.label.shake(shouldShake); + }, + setLabelRequired: function (isRequired) { + _this.label && _this.label.setRequired(isRequired); + }, + }; + }; + MDCTextField.prototype.getLineRippleAdapterMethods = function () { + var _this = this; + return { + activateLineRipple: function () { + if (_this.lineRipple) { + _this.lineRipple.activate(); + } + }, + deactivateLineRipple: function () { + if (_this.lineRipple) { + _this.lineRipple.deactivate(); + } + }, + setLineRippleTransformOrigin: function (normalizedX) { + if (_this.lineRipple) { + _this.lineRipple.setRippleCenter(normalizedX); + } + }, + }; + }; + MDCTextField.prototype.getOutlineAdapterMethods = function () { + var _this = this; + return { + closeOutline: function () { + _this.outline && _this.outline.closeNotch(); + }, + hasOutline: function () { return Boolean(_this.outline); }, + notchOutline: function (labelWidth) { + _this.outline && _this.outline.notch(labelWidth); + }, + }; + }; + /** + * @return A map of all subcomponents to subfoundations. + */ + MDCTextField.prototype.getFoundationMap = function () { + return { + characterCounter: this.characterCounter ? + this.characterCounter.foundationForTextField : + undefined, + helperText: this.helperText ? this.helperText.foundationForTextField : + undefined, + leadingIcon: this.leadingIcon ? this.leadingIcon.foundationForTextField : + undefined, + trailingIcon: this.trailingIcon ? + this.trailingIcon.foundationForTextField : + undefined, + }; + }; + MDCTextField.prototype.createRipple = function (rippleFactory) { + var _this = this; + var isTextArea = this.root.classList.contains(textfield_constants_cssClasses.TEXTAREA); + var isOutlined = this.root.classList.contains(textfield_constants_cssClasses.OUTLINED); + if (isTextArea || isOutlined) { + return null; + } + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = __assign(__assign({}, MDCRipple.createAdapter(this)), { isSurfaceActive: function () { return matches(_this.input, ':active'); }, registerInteractionHandler: function (evtType, handler) { + _this.input.addEventListener(evtType, handler, applyPassive()); + }, deregisterInteractionHandler: function (evtType, handler) { + _this.input.removeEventListener(evtType, handler, applyPassive()); + } }); + // tslint:enable:object-literal-sort-keys + return rippleFactory(this.root, new MDCRippleFoundation(adapter)); + }; + return MDCTextField; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/list/constants.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var _a, _b; +var list_constants_cssClasses = { + LIST_ITEM_ACTIVATED_CLASS: 'mdc-list-item--activated', + LIST_ITEM_CLASS: 'mdc-list-item', + LIST_ITEM_DISABLED_CLASS: 'mdc-list-item--disabled', + LIST_ITEM_SELECTED_CLASS: 'mdc-list-item--selected', + LIST_ITEM_TEXT_CLASS: 'mdc-list-item__text', + LIST_ITEM_PRIMARY_TEXT_CLASS: 'mdc-list-item__primary-text', + ROOT: 'mdc-list', +}; +var evolutionClassNameMap = (_a = {}, + _a["" + list_constants_cssClasses.LIST_ITEM_ACTIVATED_CLASS] = 'mdc-list-item--activated', + _a["" + list_constants_cssClasses.LIST_ITEM_CLASS] = 'mdc-list-item', + _a["" + list_constants_cssClasses.LIST_ITEM_DISABLED_CLASS] = 'mdc-list-item--disabled', + _a["" + list_constants_cssClasses.LIST_ITEM_SELECTED_CLASS] = 'mdc-list-item--selected', + _a["" + list_constants_cssClasses.LIST_ITEM_PRIMARY_TEXT_CLASS] = 'mdc-list-item__primary-text', + _a["" + list_constants_cssClasses.ROOT] = 'mdc-list', + _a); +var deprecatedClassNameMap = (_b = {}, + _b["" + list_constants_cssClasses.LIST_ITEM_ACTIVATED_CLASS] = 'mdc-deprecated-list-item--activated', + _b["" + list_constants_cssClasses.LIST_ITEM_CLASS] = 'mdc-deprecated-list-item', + _b["" + list_constants_cssClasses.LIST_ITEM_DISABLED_CLASS] = 'mdc-deprecated-list-item--disabled', + _b["" + list_constants_cssClasses.LIST_ITEM_SELECTED_CLASS] = 'mdc-deprecated-list-item--selected', + _b["" + list_constants_cssClasses.LIST_ITEM_TEXT_CLASS] = 'mdc-deprecated-list-item__text', + _b["" + list_constants_cssClasses.LIST_ITEM_PRIMARY_TEXT_CLASS] = 'mdc-deprecated-list-item__primary-text', + _b["" + list_constants_cssClasses.ROOT] = 'mdc-deprecated-list', + _b); +var list_constants_strings = { + ACTION_EVENT: 'MDCList:action', + SELECTION_CHANGE_EVENT: 'MDCList:selectionChange', + ARIA_CHECKED: 'aria-checked', + ARIA_CHECKED_CHECKBOX_SELECTOR: '[role="checkbox"][aria-checked="true"]', + ARIA_CHECKED_RADIO_SELECTOR: '[role="radio"][aria-checked="true"]', + ARIA_CURRENT: 'aria-current', + ARIA_DISABLED: 'aria-disabled', + ARIA_ORIENTATION: 'aria-orientation', + ARIA_ORIENTATION_HORIZONTAL: 'horizontal', + ARIA_ROLE_CHECKBOX_SELECTOR: '[role="checkbox"]', + ARIA_SELECTED: 'aria-selected', + ARIA_INTERACTIVE_ROLES_SELECTOR: '[role="listbox"], [role="menu"]', + ARIA_MULTI_SELECTABLE_SELECTOR: '[aria-multiselectable="true"]', + CHECKBOX_RADIO_SELECTOR: 'input[type="checkbox"], input[type="radio"]', + CHECKBOX_SELECTOR: 'input[type="checkbox"]', + CHILD_ELEMENTS_TO_TOGGLE_TABINDEX: "\n ." + list_constants_cssClasses.LIST_ITEM_CLASS + " button:not(:disabled),\n ." + list_constants_cssClasses.LIST_ITEM_CLASS + " a,\n ." + deprecatedClassNameMap[list_constants_cssClasses.LIST_ITEM_CLASS] + " button:not(:disabled),\n ." + deprecatedClassNameMap[list_constants_cssClasses.LIST_ITEM_CLASS] + " a\n ", + DEPRECATED_SELECTOR: '.mdc-deprecated-list', + FOCUSABLE_CHILD_ELEMENTS: "\n ." + list_constants_cssClasses.LIST_ITEM_CLASS + " button:not(:disabled),\n ." + list_constants_cssClasses.LIST_ITEM_CLASS + " a,\n ." + list_constants_cssClasses.LIST_ITEM_CLASS + " input[type=\"radio\"]:not(:disabled),\n ." + list_constants_cssClasses.LIST_ITEM_CLASS + " input[type=\"checkbox\"]:not(:disabled),\n ." + deprecatedClassNameMap[list_constants_cssClasses.LIST_ITEM_CLASS] + " button:not(:disabled),\n ." + deprecatedClassNameMap[list_constants_cssClasses.LIST_ITEM_CLASS] + " a,\n ." + deprecatedClassNameMap[list_constants_cssClasses.LIST_ITEM_CLASS] + " input[type=\"radio\"]:not(:disabled),\n ." + deprecatedClassNameMap[list_constants_cssClasses.LIST_ITEM_CLASS] + " input[type=\"checkbox\"]:not(:disabled)\n ", + RADIO_SELECTOR: 'input[type="radio"]', + SELECTED_ITEM_SELECTOR: '[aria-selected="true"], [aria-current="true"]', +}; +var list_constants_numbers = { + UNSET_INDEX: -1, + TYPEAHEAD_BUFFER_CLEAR_TIMEOUT_MS: 300 +}; +var evolutionAttribute = 'evolution'; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/dom/keyboard.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +/** + * KEY provides normalized string values for keys. + */ +var KEY = { + UNKNOWN: 'Unknown', + BACKSPACE: 'Backspace', + ENTER: 'Enter', + SPACEBAR: 'Spacebar', + PAGE_UP: 'PageUp', + PAGE_DOWN: 'PageDown', + END: 'End', + HOME: 'Home', + ARROW_LEFT: 'ArrowLeft', + ARROW_UP: 'ArrowUp', + ARROW_RIGHT: 'ArrowRight', + ARROW_DOWN: 'ArrowDown', + DELETE: 'Delete', + ESCAPE: 'Escape', + TAB: 'Tab', +}; +var normalizedKeys = new Set(); +// IE11 has no support for new Map with iterable so we need to initialize this +// by hand. +normalizedKeys.add(KEY.BACKSPACE); +normalizedKeys.add(KEY.ENTER); +normalizedKeys.add(KEY.SPACEBAR); +normalizedKeys.add(KEY.PAGE_UP); +normalizedKeys.add(KEY.PAGE_DOWN); +normalizedKeys.add(KEY.END); +normalizedKeys.add(KEY.HOME); +normalizedKeys.add(KEY.ARROW_LEFT); +normalizedKeys.add(KEY.ARROW_UP); +normalizedKeys.add(KEY.ARROW_RIGHT); +normalizedKeys.add(KEY.ARROW_DOWN); +normalizedKeys.add(KEY.DELETE); +normalizedKeys.add(KEY.ESCAPE); +normalizedKeys.add(KEY.TAB); +var KEY_CODE = { + BACKSPACE: 8, + ENTER: 13, + SPACEBAR: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + ARROW_LEFT: 37, + ARROW_UP: 38, + ARROW_RIGHT: 39, + ARROW_DOWN: 40, + DELETE: 46, + ESCAPE: 27, + TAB: 9, +}; +var mappedKeyCodes = new Map(); +// IE11 has no support for new Map with iterable so we need to initialize this +// by hand. +mappedKeyCodes.set(KEY_CODE.BACKSPACE, KEY.BACKSPACE); +mappedKeyCodes.set(KEY_CODE.ENTER, KEY.ENTER); +mappedKeyCodes.set(KEY_CODE.SPACEBAR, KEY.SPACEBAR); +mappedKeyCodes.set(KEY_CODE.PAGE_UP, KEY.PAGE_UP); +mappedKeyCodes.set(KEY_CODE.PAGE_DOWN, KEY.PAGE_DOWN); +mappedKeyCodes.set(KEY_CODE.END, KEY.END); +mappedKeyCodes.set(KEY_CODE.HOME, KEY.HOME); +mappedKeyCodes.set(KEY_CODE.ARROW_LEFT, KEY.ARROW_LEFT); +mappedKeyCodes.set(KEY_CODE.ARROW_UP, KEY.ARROW_UP); +mappedKeyCodes.set(KEY_CODE.ARROW_RIGHT, KEY.ARROW_RIGHT); +mappedKeyCodes.set(KEY_CODE.ARROW_DOWN, KEY.ARROW_DOWN); +mappedKeyCodes.set(KEY_CODE.DELETE, KEY.DELETE); +mappedKeyCodes.set(KEY_CODE.ESCAPE, KEY.ESCAPE); +mappedKeyCodes.set(KEY_CODE.TAB, KEY.TAB); +var navigationKeys = new Set(); +// IE11 has no support for new Set with iterable so we need to initialize this +// by hand. +navigationKeys.add(KEY.PAGE_UP); +navigationKeys.add(KEY.PAGE_DOWN); +navigationKeys.add(KEY.END); +navigationKeys.add(KEY.HOME); +navigationKeys.add(KEY.ARROW_LEFT); +navigationKeys.add(KEY.ARROW_UP); +navigationKeys.add(KEY.ARROW_RIGHT); +navigationKeys.add(KEY.ARROW_DOWN); +/** + * normalizeKey returns the normalized string for a navigational action. + */ +function normalizeKey(evt) { + var key = evt.key; + // If the event already has a normalized key, return it + if (normalizedKeys.has(key)) { + return key; + } + // tslint:disable-next-line:deprecation + var mappedKey = mappedKeyCodes.get(evt.keyCode); + if (mappedKey) { + return mappedKey; + } + return KEY.UNKNOWN; +} +/** + * isNavigationEvent returns whether the event is a navigation event + */ +function isNavigationEvent(evt) { + return navigationKeys.has(normalizeKey(evt)); +} +//# sourceMappingURL=keyboard.js.map +;// CONCATENATED MODULE: ./node_modules/@material/list/events.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var ELEMENTS_KEY_ALLOWED_IN = ['input', 'button', 'textarea', 'select']; +/** + * Ensures that preventDefault is only called if the containing element + * doesn't consume the event, and it will cause an unintended scroll. + * + * @param evt keyboard event to be prevented. + */ +var preventDefaultEvent = function (evt) { + var target = evt.target; + if (!target) { + return; + } + var tagName = ("" + target.tagName).toLowerCase(); + if (ELEMENTS_KEY_ALLOWED_IN.indexOf(tagName) === -1) { + evt.preventDefault(); + } +}; +//# sourceMappingURL=events.js.map +;// CONCATENATED MODULE: ./node_modules/@material/list/typeahead.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +/** + * Initializes a state object for typeahead. Use the same reference for calls to + * typeahead functions. + * + * @return The current state of the typeahead process. Each state reference + * represents a typeahead instance as the reference is typically mutated + * in-place. + */ +function initState() { + var state = { + bufferClearTimeout: 0, + currentFirstChar: '', + sortedIndexCursor: 0, + typeaheadBuffer: '', + }; + return state; +} +/** + * Initializes typeahead state by indexing the current list items by primary + * text into the sortedIndexByFirstChar data structure. + * + * @param listItemCount numer of items in the list + * @param getPrimaryTextByItemIndex function that returns the primary text at a + * given index + * + * @return Map that maps the first character of the primary text to the full + * list text and it's index + */ +function initSortedIndex(listItemCount, getPrimaryTextByItemIndex) { + var sortedIndexByFirstChar = new Map(); + // Aggregate item text to index mapping + for (var i = 0; i < listItemCount; i++) { + var primaryText = getPrimaryTextByItemIndex(i).trim(); + if (!primaryText) { + continue; + } + var firstChar = primaryText[0].toLowerCase(); + if (!sortedIndexByFirstChar.has(firstChar)) { + sortedIndexByFirstChar.set(firstChar, []); + } + sortedIndexByFirstChar.get(firstChar).push({ text: primaryText.toLowerCase(), index: i }); + } + // Sort the mapping + // TODO(b/157162694): Investigate replacing forEach with Map.values() + sortedIndexByFirstChar.forEach(function (values) { + values.sort(function (first, second) { + return first.index - second.index; + }); + }); + return sortedIndexByFirstChar; +} +/** + * Given the next desired character from the user, it attempts to find the next + * list option matching the buffer. Wraps around if at the end of options. + * + * @param opts Options and accessors + * - nextChar - the next character to match against items + * - sortedIndexByFirstChar - output of `initSortedIndex(...)` + * - focusedItemIndex - the index of the currently focused item + * - focusItemAtIndex - function that focuses a list item at given index + * - skipFocus - whether or not to focus the matched item + * - isItemAtIndexDisabled - function that determines whether an item at a + * given index is disabled + * @param state The typeahead state instance. See `initState`. + * + * @return The index of the matched item, or -1 if no match. + */ +function matchItem(opts, state) { + var nextChar = opts.nextChar, focusItemAtIndex = opts.focusItemAtIndex, sortedIndexByFirstChar = opts.sortedIndexByFirstChar, focusedItemIndex = opts.focusedItemIndex, skipFocus = opts.skipFocus, isItemAtIndexDisabled = opts.isItemAtIndexDisabled; + clearTimeout(state.bufferClearTimeout); + state.bufferClearTimeout = setTimeout(function () { + clearBuffer(state); + }, list_constants_numbers.TYPEAHEAD_BUFFER_CLEAR_TIMEOUT_MS); + state.typeaheadBuffer = state.typeaheadBuffer + nextChar; + var index; + if (state.typeaheadBuffer.length === 1) { + index = matchFirstChar(sortedIndexByFirstChar, focusedItemIndex, isItemAtIndexDisabled, state); + } + else { + index = matchAllChars(sortedIndexByFirstChar, isItemAtIndexDisabled, state); + } + if (index !== -1 && !skipFocus) { + focusItemAtIndex(index); + } + return index; +} +/** + * Matches the user's single input character in the buffer to the + * next option that begins with such character. Wraps around if at + * end of options. Returns -1 if no match is found. + */ +function matchFirstChar(sortedIndexByFirstChar, focusedItemIndex, isItemAtIndexDisabled, state) { + var firstChar = state.typeaheadBuffer[0]; + var itemsMatchingFirstChar = sortedIndexByFirstChar.get(firstChar); + if (!itemsMatchingFirstChar) { + return -1; + } + // Has the same firstChar been recently matched? + // Also, did starting index remain the same between key presses? + // If both hold true, simply increment index. + if (firstChar === state.currentFirstChar && + itemsMatchingFirstChar[state.sortedIndexCursor].index === + focusedItemIndex) { + state.sortedIndexCursor = + (state.sortedIndexCursor + 1) % itemsMatchingFirstChar.length; + var newIndex = itemsMatchingFirstChar[state.sortedIndexCursor].index; + if (!isItemAtIndexDisabled(newIndex)) { + return newIndex; + } + } + // If we're here, it means one of the following happened: + // - either firstChar or startingIndex has changed, invalidating the + // cursor. + // - The next item of typeahead is disabled, so we have to look further. + state.currentFirstChar = firstChar; + var newCursorPosition = -1; + var cursorPosition; + // Find the first non-disabled item as a fallback. + for (cursorPosition = 0; cursorPosition < itemsMatchingFirstChar.length; cursorPosition++) { + if (!isItemAtIndexDisabled(itemsMatchingFirstChar[cursorPosition].index)) { + newCursorPosition = cursorPosition; + break; + } + } + // Advance cursor to first item matching the firstChar that is positioned + // after starting item. Cursor is unchanged from fallback if there's no + // such item. + for (; cursorPosition < itemsMatchingFirstChar.length; cursorPosition++) { + if (itemsMatchingFirstChar[cursorPosition].index > focusedItemIndex && + !isItemAtIndexDisabled(itemsMatchingFirstChar[cursorPosition].index)) { + newCursorPosition = cursorPosition; + break; + } + } + if (newCursorPosition !== -1) { + state.sortedIndexCursor = newCursorPosition; + return itemsMatchingFirstChar[state.sortedIndexCursor].index; + } + return -1; +} +/** + * Attempts to find the next item that matches all of the typeahead buffer. + * Wraps around if at end of options. Returns -1 if no match is found. + */ +function matchAllChars(sortedIndexByFirstChar, isItemAtIndexDisabled, state) { + var firstChar = state.typeaheadBuffer[0]; + var itemsMatchingFirstChar = sortedIndexByFirstChar.get(firstChar); + if (!itemsMatchingFirstChar) { + return -1; + } + // Do nothing if text already matches + var startingItem = itemsMatchingFirstChar[state.sortedIndexCursor]; + if (startingItem.text.lastIndexOf(state.typeaheadBuffer, 0) === 0 && + !isItemAtIndexDisabled(startingItem.index)) { + return startingItem.index; + } + // Find next item that matches completely; if no match, we'll eventually + // loop around to same position + var cursorPosition = (state.sortedIndexCursor + 1) % itemsMatchingFirstChar.length; + var nextCursorPosition = -1; + while (cursorPosition !== state.sortedIndexCursor) { + var currentItem = itemsMatchingFirstChar[cursorPosition]; + var matches = currentItem.text.lastIndexOf(state.typeaheadBuffer, 0) === 0; + var isEnabled = !isItemAtIndexDisabled(currentItem.index); + if (matches && isEnabled) { + nextCursorPosition = cursorPosition; + break; + } + cursorPosition = (cursorPosition + 1) % itemsMatchingFirstChar.length; + } + if (nextCursorPosition !== -1) { + state.sortedIndexCursor = nextCursorPosition; + return itemsMatchingFirstChar[state.sortedIndexCursor].index; + } + return -1; +} +/** + * Whether or not the given typeahead instaance state is currently typing. + * + * @param state The typeahead state instance. See `initState`. + */ +function isTypingInProgress(state) { + return state.typeaheadBuffer.length > 0; +} +/** + * Clears the typeahaed buffer so that it resets item matching to the first + * character. + * + * @param state The typeahead state instance. See `initState`. + */ +function clearBuffer(state) { + state.typeaheadBuffer = ''; +} +/** + * Given a keydown event, it calculates whether or not to automatically focus a + * list item depending on what was typed mimicing the typeahead functionality of + * a standard + // + // + // + var target = evt.composedPath ? evt.composedPath()[0] : evt.target; + var isDefault = this.suppressDefaultPressSelector ? + !this.adapter.eventTargetMatches(target, this.suppressDefaultPressSelector) : + true; + if (isEnter && isDefault) { + this.adapter.clickDefaultButton(); + } + }; + /** Handles keydown on the document. */ + MDCDialogFoundation.prototype.handleDocumentKeydown = function (evt) { + var isEscape = evt.key === 'Escape' || evt.keyCode === 27; + if (isEscape && this.escapeKeyAction !== '') { + this.close(this.escapeKeyAction); + } + }; + /** + * Handles scroll event on the dialog's content element -- showing a scroll + * divider on the header or footer based on the scroll position. This handler + * should only be registered on full-screen dialogs with scrollable content. + */ + MDCDialogFoundation.prototype.handleScrollEvent = function () { + var _this = this; + // Since scroll events can fire at a high rate, we throttle these events by + // using requestAnimationFrame. + this.animFrame.request(AnimationKeys.POLL_SCROLL_POS, function () { + _this.toggleScrollDividerHeader(); + _this.toggleScrollDividerFooter(); + }); + }; + MDCDialogFoundation.prototype.layoutInternal = function () { + if (this.autoStackButtons) { + this.detectStackedButtons(); + } + this.toggleScrollableClasses(); + }; + MDCDialogFoundation.prototype.handleAnimationTimerEnd = function () { + this.animationTimer = 0; + this.adapter.removeClass(dialog_constants_cssClasses.OPENING); + this.adapter.removeClass(dialog_constants_cssClasses.CLOSING); + }; + /** + * Runs the given logic on the next animation frame, using setTimeout to + * factor in Firefox reflow behavior. + */ + MDCDialogFoundation.prototype.runNextAnimationFrame = function (callback) { + var _this = this; + cancelAnimationFrame(this.animationFrame); + this.animationFrame = requestAnimationFrame(function () { + _this.animationFrame = 0; + clearTimeout(_this.animationTimer); + _this.animationTimer = setTimeout(callback, 0); + }); + }; + MDCDialogFoundation.prototype.detectStackedButtons = function () { + // Remove the class first to let us measure the buttons' natural positions. + this.adapter.removeClass(dialog_constants_cssClasses.STACKED); + var areButtonsStacked = this.adapter.areButtonsStacked(); + if (areButtonsStacked) { + this.adapter.addClass(dialog_constants_cssClasses.STACKED); + } + if (areButtonsStacked !== this.areButtonsStacked) { + this.adapter.reverseButtons(); + this.areButtonsStacked = areButtonsStacked; + } + }; + MDCDialogFoundation.prototype.toggleScrollableClasses = function () { + // Remove the class first to let us measure the natural height of the + // content. + this.adapter.removeClass(dialog_constants_cssClasses.SCROLLABLE); + if (this.adapter.isContentScrollable()) { + this.adapter.addClass(dialog_constants_cssClasses.SCROLLABLE); + if (this.isFullscreen) { + // If dialog is full-screen and scrollable, check if a scroll divider + // should be shown. + this.toggleScrollDividerHeader(); + this.toggleScrollDividerFooter(); + } + } + }; + MDCDialogFoundation.prototype.toggleScrollDividerHeader = function () { + if (!this.adapter.isScrollableContentAtTop()) { + this.adapter.addClass(dialog_constants_cssClasses.SCROLL_DIVIDER_HEADER); + } + else if (this.adapter.hasClass(dialog_constants_cssClasses.SCROLL_DIVIDER_HEADER)) { + this.adapter.removeClass(dialog_constants_cssClasses.SCROLL_DIVIDER_HEADER); + } + }; + MDCDialogFoundation.prototype.toggleScrollDividerFooter = function () { + if (!this.adapter.isScrollableContentAtBottom()) { + this.adapter.addClass(dialog_constants_cssClasses.SCROLL_DIVIDER_FOOTER); + } + else if (this.adapter.hasClass(dialog_constants_cssClasses.SCROLL_DIVIDER_FOOTER)) { + this.adapter.removeClass(dialog_constants_cssClasses.SCROLL_DIVIDER_FOOTER); + } + }; + return MDCDialogFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const dialog_foundation = ((/* unused pure expression or super */ null && (MDCDialogFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/dialog/util.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +function createFocusTrapInstance(surfaceEl, focusTrapFactory, initialFocusEl) { + return focusTrapFactory(surfaceEl, { initialFocusEl: initialFocusEl }); +} +function isScrollable(el) { + return el ? el.scrollHeight > el.offsetHeight : false; +} +/** + * For scrollable content, returns true if the content has not been scrolled + * (that is, the scroll content is as the "top"). This is used in full-screen + * dialogs, where the scroll divider is expected only to appear once the + * content has been scrolled "underneath" the header bar. + */ +function isScrollAtTop(el) { + return el ? el.scrollTop === 0 : false; +} +/** + * For scrollable content, returns true if the content has been scrolled all the + * way to the bottom. This is used in full-screen dialogs, where the footer + * scroll divider is expected only to appear when the content is "cut-off" by + * the footer bar. + */ +function isScrollAtBottom(el) { + return el ? Math.ceil(el.scrollHeight - el.scrollTop) === el.clientHeight : + false; +} +function areTopsMisaligned(els) { + var tops = new Set(); + [].forEach.call(els, function (el) { return tops.add(el.offsetTop); }); + return tops.size > 1; +} +//# sourceMappingURL=util.js.map +;// CONCATENATED MODULE: ./node_modules/@material/dialog/component.js +/** + * @license + * Copyright 2017 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + + +var component_strings = MDCDialogFoundation.strings; +var MDCDialog = /** @class */ (function (_super) { + tslib_es6_extends(MDCDialog, _super); + function MDCDialog() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(MDCDialog.prototype, "isOpen", { + get: function () { + return this.foundation.isOpen(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCDialog.prototype, "escapeKeyAction", { + get: function () { + return this.foundation.getEscapeKeyAction(); + }, + set: function (action) { + this.foundation.setEscapeKeyAction(action); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCDialog.prototype, "scrimClickAction", { + get: function () { + return this.foundation.getScrimClickAction(); + }, + set: function (action) { + this.foundation.setScrimClickAction(action); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCDialog.prototype, "autoStackButtons", { + get: function () { + return this.foundation.getAutoStackButtons(); + }, + set: function (autoStack) { + this.foundation.setAutoStackButtons(autoStack); + }, + enumerable: false, + configurable: true + }); + MDCDialog.attachTo = function (root) { + return new MDCDialog(root); + }; + MDCDialog.prototype.initialize = function (focusTrapFactory) { + var e_1, _a; + if (focusTrapFactory === void 0) { focusTrapFactory = function (el, focusOptions) { + return new FocusTrap(el, focusOptions); + }; } + var container = this.root.querySelector(component_strings.CONTAINER_SELECTOR); + if (!container) { + throw new Error("Dialog component requires a " + component_strings.CONTAINER_SELECTOR + " container element"); + } + this.container = container; + this.content = + this.root.querySelector(component_strings.CONTENT_SELECTOR); + this.buttons = [].slice.call(this.root.querySelectorAll(component_strings.BUTTON_SELECTOR)); + this.defaultButton = this.root.querySelector("[" + component_strings.BUTTON_DEFAULT_ATTRIBUTE + "]"); + this.focusTrapFactory = focusTrapFactory; + this.buttonRipples = []; + try { + for (var _b = tslib_es6_values(this.buttons), _c = _b.next(); !_c.done; _c = _b.next()) { + var buttonEl = _c.value; + this.buttonRipples.push(new MDCRipple(buttonEl)); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + }; + MDCDialog.prototype.initialSyncWithDOM = function () { + var _this = this; + this.focusTrap = createFocusTrapInstance(this.container, this.focusTrapFactory, this.getInitialFocusEl() || undefined); + this.handleClick = this.foundation.handleClick.bind(this.foundation); + this.handleKeydown = this.foundation.handleKeydown.bind(this.foundation); + this.handleDocumentKeydown = + this.foundation.handleDocumentKeydown.bind(this.foundation); + // this.handleLayout = this.layout.bind(this); + this.handleOpening = function () { + document.addEventListener('keydown', _this.handleDocumentKeydown); + }; + this.handleClosing = function () { + document.removeEventListener('keydown', _this.handleDocumentKeydown); + }; + this.listen('click', this.handleClick); + this.listen('keydown', this.handleKeydown); + this.listen(component_strings.OPENING_EVENT, this.handleOpening); + this.listen(component_strings.CLOSING_EVENT, this.handleClosing); + }; + MDCDialog.prototype.destroy = function () { + this.unlisten('click', this.handleClick); + this.unlisten('keydown', this.handleKeydown); + this.unlisten(component_strings.OPENING_EVENT, this.handleOpening); + this.unlisten(component_strings.CLOSING_EVENT, this.handleClosing); + this.handleClosing(); + this.buttonRipples.forEach(function (ripple) { + ripple.destroy(); + }); + _super.prototype.destroy.call(this); + }; + MDCDialog.prototype.layout = function () { + this.foundation.layout(); + }; + MDCDialog.prototype.open = function () { + this.foundation.open(); + }; + MDCDialog.prototype.close = function (action) { + if (action === void 0) { action = ''; } + this.foundation.close(action); + }; + MDCDialog.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + var adapter = { + addBodyClass: function (className) { return document.body.classList.add(className); }, + addClass: function (className) { return _this.root.classList.add(className); }, + areButtonsStacked: function () { return areTopsMisaligned(_this.buttons); }, + clickDefaultButton: function () { + if (_this.defaultButton && !_this.defaultButton.disabled) { + _this.defaultButton.click(); + } + }, + eventTargetMatches: function (target, selector) { + return target ? matches(target, selector) : false; + }, + getActionFromEvent: function (evt) { + if (!evt.target) { + return ''; + } + var element = closest(evt.target, "[" + component_strings.ACTION_ATTRIBUTE + "]"); + return element && element.getAttribute(component_strings.ACTION_ATTRIBUTE); + }, + getInitialFocusEl: function () { return _this.getInitialFocusEl(); }, + hasClass: function (className) { return _this.root.classList.contains(className); }, + isContentScrollable: function () { return isScrollable(_this.content); }, + notifyClosed: function (action) { return _this.emit(component_strings.CLOSED_EVENT, action ? { action: action } : {}); }, + notifyClosing: function (action) { return _this.emit(component_strings.CLOSING_EVENT, action ? { action: action } : {}); }, + notifyOpened: function () { return _this.emit(component_strings.OPENED_EVENT, {}); }, + notifyOpening: function () { return _this.emit(component_strings.OPENING_EVENT, {}); }, + releaseFocus: function () { + _this.focusTrap.releaseFocus(); + }, + removeBodyClass: function (className) { return document.body.classList.remove(className); }, + removeClass: function (className) { return _this.root.classList.remove(className); }, + reverseButtons: function () { + _this.buttons.reverse(); + _this.buttons.forEach(function (button) { + button.parentElement.appendChild(button); + }); + }, + trapFocus: function () { + _this.focusTrap.trapFocus(); + }, + registerContentEventHandler: function (evt, handler) { + if (_this.content instanceof HTMLElement) { + _this.content.addEventListener(evt, handler); + } + }, + deregisterContentEventHandler: function (evt, handler) { + if (_this.content instanceof HTMLElement) { + _this.content.removeEventListener(evt, handler); + } + }, + isScrollableContentAtTop: function () { + return isScrollAtTop(_this.content); + }, + isScrollableContentAtBottom: function () { + return isScrollAtBottom(_this.content); + }, + registerWindowEventHandler: function (evt, handler) { + window.addEventListener(evt, handler); + }, + deregisterWindowEventHandler: function (evt, handler) { + window.removeEventListener(evt, handler); + }, + }; + return new MDCDialogFoundation(adapter); + }; + MDCDialog.prototype.getInitialFocusEl = function () { + return this.root.querySelector("[" + component_strings.INITIAL_FOCUS_ATTRIBUTE + "]"); + }; + return MDCDialog; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./Components/Dialog/MBDialog.ts + +function show(elem, dotNetObject, escapeKeyAction, scrimClickAction) { + if (!elem) { + return; + } + elem._dialog = elem._dialog || MDCDialog.attachTo(elem); + elem._dotNetObject = dotNetObject; + var dialog = elem._dialog; + var openedCallback = function openedCallback() { + dialog.unlisten('MDCDialog:opened', openedCallback); + dotNetObject.invokeMethodAsync('NotifyOpened'); + }; + dialog.listen('MDCDialog:opened', openedCallback); + dialog.escapeKeyAction = escapeKeyAction; + dialog.scrimClickAction = scrimClickAction; + var closingCallback = function closingCallback(event) { + dialog.unlisten('MDCDialog:closing', closingCallback); + dotNetObject.invokeMethodAsync('NotifyClosed', event.detail.action); + }; + dialog.listen('MDCDialog:closing', closingCallback); + dialog.open(); +} +function hide(elem, dialogAction) { + if (!elem) { + return; + } + if (elem && elem._dialog) { + elem._dialog.close(dialogAction || 'dismissed'); + elem._dialog.destroy(); + } +} +;// CONCATENATED MODULE: ./node_modules/@material/drawer/constants.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var drawer_constants_cssClasses = { + ANIMATE: 'mdc-drawer--animate', + CLOSING: 'mdc-drawer--closing', + DISMISSIBLE: 'mdc-drawer--dismissible', + MODAL: 'mdc-drawer--modal', + OPEN: 'mdc-drawer--open', + OPENING: 'mdc-drawer--opening', + ROOT: 'mdc-drawer', +}; +var drawer_constants_strings = { + APP_CONTENT_SELECTOR: '.mdc-drawer-app-content', + CLOSE_EVENT: 'MDCDrawer:closed', + OPEN_EVENT: 'MDCDrawer:opened', + SCRIM_SELECTOR: '.mdc-drawer-scrim', + LIST_SELECTOR: '.mdc-list,.mdc-deprecated-list', + LIST_ITEM_ACTIVATED_SELECTOR: '.mdc-list-item--activated,.mdc-deprecated-list-item--activated', +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/drawer/dismissible/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCDismissibleDrawerFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCDismissibleDrawerFoundation, _super); + function MDCDismissibleDrawerFoundation(adapter) { + var _this = _super.call(this, __assign(__assign({}, MDCDismissibleDrawerFoundation.defaultAdapter), adapter)) || this; + _this.animationFrame = 0; + _this.animationTimer = 0; + return _this; + } + Object.defineProperty(MDCDismissibleDrawerFoundation, "strings", { + get: function () { + return drawer_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCDismissibleDrawerFoundation, "cssClasses", { + get: function () { + return drawer_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCDismissibleDrawerFoundation, "defaultAdapter", { + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + hasClass: function () { return false; }, + elementHasClass: function () { return false; }, + notifyClose: function () { return undefined; }, + notifyOpen: function () { return undefined; }, + saveFocus: function () { return undefined; }, + restoreFocus: function () { return undefined; }, + focusActiveNavigationItem: function () { return undefined; }, + trapFocus: function () { return undefined; }, + releaseFocus: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCDismissibleDrawerFoundation.prototype.destroy = function () { + if (this.animationFrame) { + cancelAnimationFrame(this.animationFrame); + } + if (this.animationTimer) { + clearTimeout(this.animationTimer); + } + }; + /** + * Opens the drawer from the closed state. + */ + MDCDismissibleDrawerFoundation.prototype.open = function () { + var _this = this; + if (this.isOpen() || this.isOpening() || this.isClosing()) { + return; + } + this.adapter.addClass(drawer_constants_cssClasses.OPEN); + this.adapter.addClass(drawer_constants_cssClasses.ANIMATE); + // Wait a frame once display is no longer "none", to establish basis for animation + this.runNextAnimationFrame(function () { + _this.adapter.addClass(drawer_constants_cssClasses.OPENING); + }); + this.adapter.saveFocus(); + }; + /** + * Closes the drawer from the open state. + */ + MDCDismissibleDrawerFoundation.prototype.close = function () { + if (!this.isOpen() || this.isOpening() || this.isClosing()) { + return; + } + this.adapter.addClass(drawer_constants_cssClasses.CLOSING); + }; + /** + * Returns true if the drawer is in the open position. + * @return true if drawer is in open state. + */ + MDCDismissibleDrawerFoundation.prototype.isOpen = function () { + return this.adapter.hasClass(drawer_constants_cssClasses.OPEN); + }; + /** + * Returns true if the drawer is animating open. + * @return true if drawer is animating open. + */ + MDCDismissibleDrawerFoundation.prototype.isOpening = function () { + return this.adapter.hasClass(drawer_constants_cssClasses.OPENING) || + this.adapter.hasClass(drawer_constants_cssClasses.ANIMATE); + }; + /** + * Returns true if the drawer is animating closed. + * @return true if drawer is animating closed. + */ + MDCDismissibleDrawerFoundation.prototype.isClosing = function () { + return this.adapter.hasClass(drawer_constants_cssClasses.CLOSING); + }; + /** + * Keydown handler to close drawer when key is escape. + */ + MDCDismissibleDrawerFoundation.prototype.handleKeydown = function (evt) { + var keyCode = evt.keyCode, key = evt.key; + var isEscape = key === 'Escape' || keyCode === 27; + if (isEscape) { + this.close(); + } + }; + /** + * Handles the `transitionend` event when the drawer finishes opening/closing. + */ + MDCDismissibleDrawerFoundation.prototype.handleTransitionEnd = function (evt) { + var OPENING = drawer_constants_cssClasses.OPENING, CLOSING = drawer_constants_cssClasses.CLOSING, OPEN = drawer_constants_cssClasses.OPEN, ANIMATE = drawer_constants_cssClasses.ANIMATE, ROOT = drawer_constants_cssClasses.ROOT; + // In Edge, transitionend on ripple pseudo-elements yields a target without classList, so check for Element first. + var isRootElement = this.isElement(evt.target) && + this.adapter.elementHasClass(evt.target, ROOT); + if (!isRootElement) { + return; + } + if (this.isClosing()) { + this.adapter.removeClass(OPEN); + this.closed(); + this.adapter.restoreFocus(); + this.adapter.notifyClose(); + } + else { + this.adapter.focusActiveNavigationItem(); + this.opened(); + this.adapter.notifyOpen(); + } + this.adapter.removeClass(ANIMATE); + this.adapter.removeClass(OPENING); + this.adapter.removeClass(CLOSING); + }; + /** + * Extension point for when drawer finishes open animation. + */ + MDCDismissibleDrawerFoundation.prototype.opened = function () { }; // tslint:disable-line:no-empty + /** + * Extension point for when drawer finishes close animation. + */ + MDCDismissibleDrawerFoundation.prototype.closed = function () { }; // tslint:disable-line:no-empty + /** + * Runs the given logic on the next animation frame, using setTimeout to factor in Firefox reflow behavior. + */ + MDCDismissibleDrawerFoundation.prototype.runNextAnimationFrame = function (callback) { + var _this = this; + cancelAnimationFrame(this.animationFrame); + this.animationFrame = requestAnimationFrame(function () { + _this.animationFrame = 0; + clearTimeout(_this.animationTimer); + _this.animationTimer = setTimeout(callback, 0); + }); + }; + MDCDismissibleDrawerFoundation.prototype.isElement = function (element) { + // In Edge, transitionend on ripple pseudo-elements yields a target without classList. + return Boolean(element.classList); + }; + return MDCDismissibleDrawerFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const dismissible_foundation = ((/* unused pure expression or super */ null && (MDCDismissibleDrawerFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/drawer/modal/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +/* istanbul ignore next: subclass is not a branch statement */ +var MDCModalDrawerFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCModalDrawerFoundation, _super); + function MDCModalDrawerFoundation() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Handles click event on scrim. + */ + MDCModalDrawerFoundation.prototype.handleScrimClick = function () { + this.close(); + }; + /** + * Called when drawer finishes open animation. + */ + MDCModalDrawerFoundation.prototype.opened = function () { + this.adapter.trapFocus(); + }; + /** + * Called when drawer finishes close animation. + */ + MDCModalDrawerFoundation.prototype.closed = function () { + this.adapter.releaseFocus(); + }; + return MDCModalDrawerFoundation; +}(MDCDismissibleDrawerFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const modal_foundation = ((/* unused pure expression or super */ null && (MDCModalDrawerFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/drawer/util.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +function util_createFocusTrapInstance(surfaceEl, focusTrapFactory) { + return focusTrapFactory(surfaceEl, { + // Component handles focusing on active nav item. + skipInitialFocus: true, + }); +} +//# sourceMappingURL=util.js.map +;// CONCATENATED MODULE: ./node_modules/@material/drawer/component.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + + +var component_cssClasses = MDCDismissibleDrawerFoundation.cssClasses, drawer_component_strings = MDCDismissibleDrawerFoundation.strings; +/** + * @events `MDCDrawer:closed {}` Emits when the navigation drawer has closed. + * @events `MDCDrawer:opened {}` Emits when the navigation drawer has opened. + */ +var MDCDrawer = /** @class */ (function (_super) { + tslib_es6_extends(MDCDrawer, _super); + function MDCDrawer() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCDrawer.attachTo = function (root) { + return new MDCDrawer(root); + }; + Object.defineProperty(MDCDrawer.prototype, "open", { + /** + * @return boolean Proxies to the foundation's `open`/`close` methods. + * Also returns true if drawer is in the open position. + */ + get: function () { + return this.foundation.isOpen(); + }, + /** + * Toggles the drawer open and closed. + */ + set: function (isOpen) { + if (isOpen) { + this.foundation.open(); + } + else { + this.foundation.close(); + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCDrawer.prototype, "list", { + // initialSyncWithDOM() + get: function () { + return this.innerList; + }, + enumerable: false, + configurable: true + }); + MDCDrawer.prototype.initialize = function (focusTrapFactory, listFactory) { + if (focusTrapFactory === void 0) { focusTrapFactory = function (el) { return new FocusTrap(el); }; } + if (listFactory === void 0) { listFactory = function (el) { return new MDCList(el); }; } + var listEl = this.root.querySelector(drawer_component_strings.LIST_SELECTOR); + if (listEl) { + this.innerList = listFactory(listEl); + this.innerList.wrapFocus = true; + } + this.focusTrapFactory = focusTrapFactory; + }; + MDCDrawer.prototype.initialSyncWithDOM = function () { + var _this = this; + var MODAL = component_cssClasses.MODAL; + var SCRIM_SELECTOR = drawer_component_strings.SCRIM_SELECTOR; + this.scrim = this.root.parentNode + .querySelector(SCRIM_SELECTOR); + if (this.scrim && this.root.classList.contains(MODAL)) { + this.handleScrimClick = function () { + return _this.foundation.handleScrimClick(); + }; + this.scrim.addEventListener('click', this.handleScrimClick); + this.focusTrap = util_createFocusTrapInstance(this.root, this.focusTrapFactory); + } + this.handleKeydown = function (evt) { + _this.foundation.handleKeydown(evt); + }; + this.handleTransitionEnd = function (evt) { + _this.foundation.handleTransitionEnd(evt); + }; + this.listen('keydown', this.handleKeydown); + this.listen('transitionend', this.handleTransitionEnd); + }; + MDCDrawer.prototype.destroy = function () { + this.unlisten('keydown', this.handleKeydown); + this.unlisten('transitionend', this.handleTransitionEnd); + if (this.innerList) { + this.innerList.destroy(); + } + var MODAL = component_cssClasses.MODAL; + if (this.scrim && this.handleScrimClick && + this.root.classList.contains(MODAL)) { + this.scrim.removeEventListener('click', this.handleScrimClick); + // Ensure drawer is closed to hide scrim and release focus + this.open = false; + } + }; + MDCDrawer.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take + // a Partial. To ensure we don't accidentally omit any + // methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = { + addClass: function (className) { + _this.root.classList.add(className); + }, + removeClass: function (className) { + _this.root.classList.remove(className); + }, + hasClass: function (className) { return _this.root.classList.contains(className); }, + elementHasClass: function (element, className) { + return element.classList.contains(className); + }, + saveFocus: function () { + _this.previousFocus = document.activeElement; + }, + restoreFocus: function () { + var previousFocus = _this.previousFocus; + if (previousFocus && previousFocus.focus && + _this.root.contains(document.activeElement)) { + previousFocus.focus(); + } + }, + focusActiveNavigationItem: function () { + var activeNavItemEl = _this.root.querySelector(drawer_component_strings.LIST_ITEM_ACTIVATED_SELECTOR); + if (activeNavItemEl) { + activeNavItemEl.focus(); + } + }, + notifyClose: function () { + _this.emit(drawer_component_strings.CLOSE_EVENT, {}, true /* shouldBubble */); + }, + notifyOpen: function () { + _this.emit(drawer_component_strings.OPEN_EVENT, {}, true /* shouldBubble */); + }, + trapFocus: function () { + _this.focusTrap.trapFocus(); + }, + releaseFocus: function () { + _this.focusTrap.releaseFocus(); + }, + }; + // tslint:enable:object-literal-sort-keys + var DISMISSIBLE = component_cssClasses.DISMISSIBLE, MODAL = component_cssClasses.MODAL; + if (this.root.classList.contains(DISMISSIBLE)) { + return new MDCDismissibleDrawerFoundation(adapter); + } + else if (this.root.classList.contains(MODAL)) { + return new MDCModalDrawerFoundation(adapter); + } + else { + throw new Error("MDCDrawer: Failed to instantiate component. Supported variants are " + DISMISSIBLE + " and " + MODAL + "."); + } + }; + return MDCDrawer; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./Components/Drawer/MBDrawer.ts + +function MBDrawer_init(elem, isOpen) { + if (!elem) { + return; + } + elem._drawer = MDCDrawer.attachTo(elem); + toggle(elem, isOpen); +} +function toggle(elem, isOpen) { + if (!elem) { + return; + } + elem._drawer.open = isOpen; +} +;// CONCATENATED MODULE: ./Components/DragAndDropList/MBDragAndDropList.ts +function initDropTarget(elem) { + if (!elem) { + return; + } + elem.addEventListener('dragover', function (event) { + event.preventDefault(); + }); +} +;// CONCATENATED MODULE: ./Components/FileUpload/MBFileUpload.ts +function click(elem) { + if (!elem) { + return; + } + var input = elem.querySelector("input"); + input.click(); +} +;// CONCATENATED MODULE: ./Components/FloatingActionButton/MBFloatingActionButton.ts + +function MBFloatingActionButton_init(elem, exited) { + elem._fab = MDCRipple.attachTo(elem); + elem._exited = false; + setExited(elem, exited); +} +function setExited(elem, exited) { + if (elem) { + if (exited != elem._exited) { + elem.classList.add("mdc-fab--exited"); + } else { + elem.classList.remove("mdc-fab--exited"); + } + } +} +;// CONCATENATED MODULE: ./Components/IconButton/MBIconButton.ts + +function MBIconButton_init(elem) { + if (!elem) { + return; + } + elem._ripple = MDCRipple.attachTo(elem); + elem._ripple.unbounded = true; +} +;// CONCATENATED MODULE: ./node_modules/@material/icon-button/constants.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var icon_button_constants_cssClasses = { + ICON_BUTTON_ON: 'mdc-icon-button--on', + ROOT: 'mdc-icon-button', +}; +var icon_button_constants_strings = { + ARIA_LABEL: 'aria-label', + ARIA_PRESSED: 'aria-pressed', + DATA_ARIA_LABEL_OFF: 'data-aria-label-off', + DATA_ARIA_LABEL_ON: 'data-aria-label-on', + CHANGE_EVENT: 'MDCIconButtonToggle:change', +}; +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/icon-button/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCIconButtonToggleFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCIconButtonToggleFoundation, _super); + function MDCIconButtonToggleFoundation(adapter) { + var _this = _super.call(this, __assign(__assign({}, MDCIconButtonToggleFoundation.defaultAdapter), adapter)) || this; + /** + * Whether the icon button has an aria label that changes depending on + * toggled state. + */ + _this.hasToggledAriaLabel = false; + return _this; + } + Object.defineProperty(MDCIconButtonToggleFoundation, "cssClasses", { + get: function () { + return icon_button_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCIconButtonToggleFoundation, "strings", { + get: function () { + return icon_button_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCIconButtonToggleFoundation, "defaultAdapter", { + get: function () { + return { + addClass: function () { return undefined; }, + hasClass: function () { return false; }, + notifyChange: function () { return undefined; }, + removeClass: function () { return undefined; }, + getAttr: function () { return null; }, + setAttr: function () { return undefined; }, + }; + }, + enumerable: false, + configurable: true + }); + MDCIconButtonToggleFoundation.prototype.init = function () { + var ariaLabelOn = this.adapter.getAttr(icon_button_constants_strings.DATA_ARIA_LABEL_ON); + var ariaLabelOff = this.adapter.getAttr(icon_button_constants_strings.DATA_ARIA_LABEL_OFF); + if (ariaLabelOn && ariaLabelOff) { + if (this.adapter.getAttr(icon_button_constants_strings.ARIA_PRESSED) !== null) { + throw new Error('MDCIconButtonToggleFoundation: Button should not set ' + + '`aria-pressed` if it has a toggled aria label.'); + } + this.hasToggledAriaLabel = true; + } + else { + this.adapter.setAttr(icon_button_constants_strings.ARIA_PRESSED, String(this.isOn())); + } + }; + MDCIconButtonToggleFoundation.prototype.handleClick = function () { + this.toggle(); + this.adapter.notifyChange({ isOn: this.isOn() }); + }; + MDCIconButtonToggleFoundation.prototype.isOn = function () { + return this.adapter.hasClass(icon_button_constants_cssClasses.ICON_BUTTON_ON); + }; + MDCIconButtonToggleFoundation.prototype.toggle = function (isOn) { + if (isOn === void 0) { isOn = !this.isOn(); } + // Toggle UI based on state. + if (isOn) { + this.adapter.addClass(icon_button_constants_cssClasses.ICON_BUTTON_ON); + } + else { + this.adapter.removeClass(icon_button_constants_cssClasses.ICON_BUTTON_ON); + } + // Toggle aria attributes based on state. + if (this.hasToggledAriaLabel) { + var ariaLabel = isOn ? + this.adapter.getAttr(icon_button_constants_strings.DATA_ARIA_LABEL_ON) : + this.adapter.getAttr(icon_button_constants_strings.DATA_ARIA_LABEL_OFF); + this.adapter.setAttr(icon_button_constants_strings.ARIA_LABEL, ariaLabel || ''); + } + else { + this.adapter.setAttr(icon_button_constants_strings.ARIA_PRESSED, "" + isOn); + } + }; + return MDCIconButtonToggleFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const icon_button_foundation = ((/* unused pure expression or super */ null && (MDCIconButtonToggleFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/icon-button/component.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + +var icon_button_component_strings = MDCIconButtonToggleFoundation.strings; +var MDCIconButtonToggle = /** @class */ (function (_super) { + tslib_es6_extends(MDCIconButtonToggle, _super); + function MDCIconButtonToggle() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.rippleComponent = _this.createRipple(); + return _this; + } + MDCIconButtonToggle.attachTo = function (root) { + return new MDCIconButtonToggle(root); + }; + MDCIconButtonToggle.prototype.initialSyncWithDOM = function () { + var _this = this; + this.handleClick = function () { + _this.foundation.handleClick(); + }; + this.listen('click', this.handleClick); + }; + MDCIconButtonToggle.prototype.destroy = function () { + this.unlisten('click', this.handleClick); + this.ripple.destroy(); + _super.prototype.destroy.call(this); + }; + MDCIconButtonToggle.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + var adapter = { + addClass: function (className) { return _this.root.classList.add(className); }, + hasClass: function (className) { return _this.root.classList.contains(className); }, + notifyChange: function (evtData) { + _this.emit(icon_button_component_strings.CHANGE_EVENT, evtData); + }, + removeClass: function (className) { return _this.root.classList.remove(className); }, + getAttr: function (attrName) { return _this.root.getAttribute(attrName); }, + setAttr: function (attrName, attrValue) { + return _this.root.setAttribute(attrName, attrValue); + }, + }; + return new MDCIconButtonToggleFoundation(adapter); + }; + Object.defineProperty(MDCIconButtonToggle.prototype, "ripple", { + get: function () { + return this.rippleComponent; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCIconButtonToggle.prototype, "on", { + get: function () { + return this.foundation.isOn(); + }, + set: function (isOn) { + this.foundation.toggle(isOn); + }, + enumerable: false, + configurable: true + }); + MDCIconButtonToggle.prototype.createRipple = function () { + var ripple = new MDCRipple(this.root); + ripple.unbounded = true; + return ripple; + }; + return MDCIconButtonToggle; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./Components/IconButtonToggle/MBIconButtonToggle.ts + +function MBIconButtonToggle_init(elem) { + if (!elem) { + return; + } + elem._iconButtonToggle = MDCIconButtonToggle.attachTo(elem); +} +function setOn(elem, isOn) { + if (!elem) { + return; + } + elem._iconButtonToggle.on = isOn; +} +function MBIconButtonToggle_click(elem) { + if (!elem) { + return; + } + elem._iconButtonToggle.root.click(); +} +;// CONCATENATED MODULE: ./Components/LinearProgress/MBLinearProgress.ts + +function MBLinearProgress_init(elem, progress, buffer) { + if (!elem) { + return; + } + elem._linearProgress = MDCLinearProgress.attachTo(elem); + MBLinearProgress_setProgress(elem, progress, buffer); +} +function MBLinearProgress_setProgress(elem, progress, buffer) { + if (!elem) { + return; + } + elem._linearProgress.progress = progress; + elem._linearProgress.buffer = buffer; +} +function restartAnimation(elem) { + if (!elem) { + return; + } + elem._linearProgress.foundation.restartAnimation(); +} +;// CONCATENATED MODULE: ./Components/List/MBList.ts + + +function MBList_init(elem, keyboardInteractions, ripple) { + if (!elem) { + return; + } + if (keyboardInteractions == true) { + elem._list = MDCList.attachTo(elem); + if (ripple == true) { + elem._list.listElements.map(function (elem) { + return MDCRipple.attachTo(elem); + }); + } + } +} +;// CONCATENATED MODULE: ./Components/Menu/MBMenu.ts + +function MBMenu_init(elem, dotNetObject) { + if (!elem) { + return; + } + elem._menu = MDCMenu.attachTo(elem); + var closedCallback = function closedCallback() { + dotNetObject.invokeMethodAsync('NotifyClosed'); + }; + elem._menu.listen('MDCMenuSurface:closed', closedCallback); +} +function MBMenu_show(elem) { + if (!elem) { + return; + } + if (elem._menu) { + elem._menu.open = true; + } +} +function MBMenu_hide(elem) { + if (!elem) { + return; + } + if (elem._menu) { + elem._menu.open = false; + } +} +;// CONCATENATED MODULE: ./Components/MenuSurface/MBMenuSurface.ts + +function MBMenuSurface_init(elem, dotNetObject) { + if (!elem) { + return; + } + elem._menu = MDCMenuSurface.attachTo(elem); + var closedCallback = function closedCallback() { + dotNetObject.invokeMethodAsync('NotifyClosed'); + }; + elem._menu.listen('MDCMenuSurface:closed', closedCallback); +} +function MBMenuSurface_show(elem) { + if (!elem) { + return; + } + if (elem._menu) { + elem._menu.open(); + } +} +function MBMenuSurface_hide(elem) { + if (!elem) { + return; + } + if (elem._menu) { + elem._menu.close(); + } +} +;// CONCATENATED MODULE: ./node_modules/@material/radio/constants.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var radio_constants_strings = { + NATIVE_CONTROL_SELECTOR: '.mdc-radio__native-control', +}; +var radio_constants_cssClasses = { + DISABLED: 'mdc-radio--disabled', + ROOT: 'mdc-radio', +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/radio/foundation.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCRadioFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCRadioFoundation, _super); + function MDCRadioFoundation(adapter) { + return _super.call(this, __assign(__assign({}, MDCRadioFoundation.defaultAdapter), adapter)) || this; + } + Object.defineProperty(MDCRadioFoundation, "cssClasses", { + get: function () { + return radio_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRadioFoundation, "strings", { + get: function () { + return radio_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRadioFoundation, "defaultAdapter", { + get: function () { + return { + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + setNativeControlDisabled: function () { return undefined; }, + }; + }, + enumerable: false, + configurable: true + }); + MDCRadioFoundation.prototype.setDisabled = function (disabled) { + var DISABLED = MDCRadioFoundation.cssClasses.DISABLED; + this.adapter.setNativeControlDisabled(disabled); + if (disabled) { + this.adapter.addClass(DISABLED); + } + else { + this.adapter.removeClass(DISABLED); + } + }; + return MDCRadioFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const radio_foundation = ((/* unused pure expression or super */ null && (MDCRadioFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/radio/component.js +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + +var MDCRadio = /** @class */ (function (_super) { + tslib_es6_extends(MDCRadio, _super); + function MDCRadio() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.rippleSurface = _this.createRipple(); + return _this; + } + MDCRadio.attachTo = function (root) { + return new MDCRadio(root); + }; + Object.defineProperty(MDCRadio.prototype, "checked", { + get: function () { + return this.nativeControl.checked; + }, + set: function (checked) { + this.nativeControl.checked = checked; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRadio.prototype, "disabled", { + get: function () { + return this.nativeControl.disabled; + }, + set: function (disabled) { + this.foundation.setDisabled(disabled); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRadio.prototype, "value", { + get: function () { + return this.nativeControl.value; + }, + set: function (value) { + this.nativeControl.value = value; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRadio.prototype, "ripple", { + get: function () { + return this.rippleSurface; + }, + enumerable: false, + configurable: true + }); + MDCRadio.prototype.destroy = function () { + this.rippleSurface.destroy(); + _super.prototype.destroy.call(this); + }; + MDCRadio.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + var adapter = { + addClass: function (className) { return _this.root.classList.add(className); }, + removeClass: function (className) { return _this.root.classList.remove(className); }, + setNativeControlDisabled: function (disabled) { return _this.nativeControl.disabled = + disabled; }, + }; + return new MDCRadioFoundation(adapter); + }; + MDCRadio.prototype.createRipple = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = __assign(__assign({}, MDCRipple.createAdapter(this)), { registerInteractionHandler: function (evtType, handler) { + _this.nativeControl.addEventListener(evtType, handler, applyPassive()); + }, deregisterInteractionHandler: function (evtType, handler) { + _this.nativeControl.removeEventListener(evtType, handler, applyPassive()); + }, + // Radio buttons technically go "active" whenever there is *any* keyboard + // interaction. This is not the UI we desire. + isSurfaceActive: function () { return false; }, isUnbounded: function () { return true; } }); + // tslint:enable:object-literal-sort-keys + return new MDCRipple(this.root, new MDCRippleFoundation(adapter)); + }; + Object.defineProperty(MDCRadio.prototype, "nativeControl", { + get: function () { + var NATIVE_CONTROL_SELECTOR = MDCRadioFoundation.strings.NATIVE_CONTROL_SELECTOR; + var el = this.root.querySelector(NATIVE_CONTROL_SELECTOR); + if (!el) { + throw new Error("Radio component requires a " + NATIVE_CONTROL_SELECTOR + " element"); + } + return el; + }, + enumerable: false, + configurable: true + }); + return MDCRadio; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./Components/RadioButton/MBRadioButton.ts + + +function MBRadioButton_init(elem, formFieldElem, isChecked) { + if (!elem) { + return; + } + elem._radio = MDCRadio.attachTo(elem); + elem._radio.checked = isChecked; + elem._formField = MDCFormField.attachTo(formFieldElem); + elem._formField.input = elem._radio; +} +function MBRadioButton_setDisabled(elem, value) { + if (!elem) { + return; + } + elem._radio.disabled = value; +} +function MBRadioButton_setChecked(elem, isChecked) { + if (!elem) { + return; + } + elem._radio.checked = isChecked; +} +;// CONCATENATED MODULE: ./node_modules/@material/segmented-button/segmented-button/constants.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +/** + * Selectors used by segmented-button + */ +var constants_selectors = { + SEGMENT: '.mdc-segmented-button__segment' +}; +/** + * Events received or emitted by segmented-button + */ +var constants_events = { + SELECTED: 'selected', + CHANGE: 'change' +}; +/** + * Style classes for segmented-button + */ +var segmented_button_constants_cssClasses = { + SINGLE_SELECT: 'mdc-segmented-button--single-select' +}; +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/segmented-button/segmented-button/foundation.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCSegmentedButtonFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCSegmentedButtonFoundation, _super); + function MDCSegmentedButtonFoundation(adapter) { + return _super.call(this, __assign(__assign({}, MDCSegmentedButtonFoundation.defaultAdapter), adapter)) || this; + } + Object.defineProperty(MDCSegmentedButtonFoundation, "defaultAdapter", { + get: function () { + return { + hasClass: function () { return false; }, getSegments: function () { return []; }, + selectSegment: function () { return undefined; }, + unselectSegment: function () { return undefined; }, + notifySelectedChange: function () { return undefined; } + }; + }, + enumerable: false, + configurable: true + }); + /** + * Sets identified child segment to be selected + * + * @param indexOrSegmentId Number index or string segmentId that identifies + * child segment + */ + MDCSegmentedButtonFoundation.prototype.selectSegment = function (indexOrSegmentId) { + this.adapter.selectSegment(indexOrSegmentId); + }; + /** + * Sets identified child segment to be not selected + * + * @param indexOrSegmentId Number index or string segmentId that identifies + * child segment + */ + MDCSegmentedButtonFoundation.prototype.unselectSegment = function (indexOrSegmentId) { + this.adapter.unselectSegment(indexOrSegmentId); + }; + /** + * @return Returns currently selected child segments as readonly list of + * SegmentDetails + */ + MDCSegmentedButtonFoundation.prototype.getSelectedSegments = function () { + return this.adapter.getSegments().filter(function (segmentDetail) { return segmentDetail.selected; }); + }; + /** + * @param indexOrSegmentId Number index or string segmentId that identifies + * child segment + * @return Returns true if identified child segment is currently selected, + * otherwise returns false + */ + MDCSegmentedButtonFoundation.prototype.isSegmentSelected = function (indexOrSegmentId) { + return this.adapter.getSegments().some(function (segmentDetail) { return (segmentDetail.index === indexOrSegmentId || + segmentDetail.segmentId === indexOrSegmentId) && + segmentDetail.selected; }); + }; + /** + * @return Returns true if segmented button is single select, otherwise + * returns false + */ + MDCSegmentedButtonFoundation.prototype.isSingleSelect = function () { + return this.adapter.hasClass(segmented_button_constants_cssClasses.SINGLE_SELECT); + }; + /** + * Called when child segment's selected status may have changed. If segmented + * button is single select, unselects all child segments other than identified + * child segment. Finally, emits event to client. + * + * @param detail Child segment affected represented as SegmentDetail + * @event change With detail - SegmentDetail + */ + MDCSegmentedButtonFoundation.prototype.handleSelected = function (detail) { + if (this.isSingleSelect()) { + this.unselectPrevSelected(detail.index); + } + this.adapter.notifySelectedChange(detail); + }; + /** + * Sets all child segments to be not selected except for child segment + * identified by index + * + * @param index Index of child segment to not unselect + */ + MDCSegmentedButtonFoundation.prototype.unselectPrevSelected = function (index) { + var e_1, _a; + try { + for (var _b = tslib_es6_values(this.getSelectedSegments()), _c = _b.next(); !_c.done; _c = _b.next()) { + var selectedSegment = _c.value; + if (selectedSegment.index !== index) { + this.unselectSegment(selectedSegment.index); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + }; + return MDCSegmentedButtonFoundation; +}(MDCFoundation)); + +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/segmented-button/segment/constants.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +/** + * Boolean strings for segment + */ +var booleans = { + TRUE: 'true', + FALSE: 'false' +}; +/** + * Attributes referenced by segment + */ +var constants_attributes = { + ARIA_CHECKED: 'aria-checked', + ARIA_PRESSED: 'aria-pressed', + DATA_SEGMENT_ID: 'data-segment-id' +}; +/** + * Events received or emitted by segment + */ +var segment_constants_events = { + CLICK: 'click', + SELECTED: 'selected' +}; +/** + * Style classes for segment + */ +var segment_constants_cssClasses = { + SELECTED: 'mdc-segmented-button__segment--selected' +}; +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/segmented-button/segment/foundation.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var emptyClientRect = { + bottom: 0, + height: 0, + left: 0, + right: 0, + top: 0, + width: 0, +}; +var MDCSegmentedButtonSegmentFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCSegmentedButtonSegmentFoundation, _super); + function MDCSegmentedButtonSegmentFoundation(adapter) { + return _super.call(this, __assign(__assign({}, MDCSegmentedButtonSegmentFoundation.defaultAdapter), adapter)) || this; + } + Object.defineProperty(MDCSegmentedButtonSegmentFoundation, "defaultAdapter", { + get: function () { + return { + isSingleSelect: function () { return false; }, getAttr: function () { return ''; }, setAttr: function () { return undefined; }, + addClass: function () { return undefined; }, removeClass: function () { return undefined; }, + hasClass: function () { return false; }, + notifySelectedChange: function () { return undefined; }, + getRootBoundingClientRect: function () { return emptyClientRect; }, + }; + }, + enumerable: false, + configurable: true + }); + /** + * @return Returns true if segment is currently selected, otherwise returns + * false + */ + MDCSegmentedButtonSegmentFoundation.prototype.isSelected = function () { + return this.adapter.hasClass(segment_constants_cssClasses.SELECTED); + }; + /** + * Sets segment to be selected + */ + MDCSegmentedButtonSegmentFoundation.prototype.setSelected = function () { + this.adapter.addClass(segment_constants_cssClasses.SELECTED); + this.setAriaAttr(booleans.TRUE); + }; + /** + * Sets segment to be not selected + */ + MDCSegmentedButtonSegmentFoundation.prototype.setUnselected = function () { + this.adapter.removeClass(segment_constants_cssClasses.SELECTED); + this.setAriaAttr(booleans.FALSE); + }; + /** + * @return Returns segment's segmentId if it was set by client + */ + MDCSegmentedButtonSegmentFoundation.prototype.getSegmentId = function () { + var _a; + return (_a = this.adapter.getAttr(constants_attributes.DATA_SEGMENT_ID)) !== null && _a !== void 0 ? _a : undefined; + }; + /** + * Called when segment is clicked. If the wrapping segmented button is single + * select, doesn't allow segment to be set to not selected. Otherwise, toggles + * segment's selected status. Finally, emits event to wrapping segmented + * button. + * + * @event selected With detail - SegmentDetail + */ + MDCSegmentedButtonSegmentFoundation.prototype.handleClick = function () { + if (this.adapter.isSingleSelect()) { + this.setSelected(); + } + else { + this.toggleSelection(); + } + this.adapter.notifySelectedChange(this.isSelected()); + }; + /** + * @return Returns bounding rectangle for ripple effect + */ + MDCSegmentedButtonSegmentFoundation.prototype.getDimensions = function () { + return this.adapter.getRootBoundingClientRect(); + }; + /** + * Sets segment from not selected to selected, or selected to not selected + */ + MDCSegmentedButtonSegmentFoundation.prototype.toggleSelection = function () { + if (this.isSelected()) { + this.setUnselected(); + } + else { + this.setSelected(); + } + }; + /** + * Sets appropriate aria attribute, based on wrapping segmented button's + * single selected value, to new value + * + * @param value Value that represents selected status + */ + MDCSegmentedButtonSegmentFoundation.prototype.setAriaAttr = function (value) { + if (this.adapter.isSingleSelect()) { + this.adapter.setAttr(constants_attributes.ARIA_CHECKED, value); + } + else { + this.adapter.setAttr(constants_attributes.ARIA_PRESSED, value); + } + }; + return MDCSegmentedButtonSegmentFoundation; +}(MDCFoundation)); + +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/segmented-button/segment/component.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + +/** + * Implementation of MDCSegmentedButtonSegmentFoundation + */ +var MDCSegmentedButtonSegment = /** @class */ (function (_super) { + tslib_es6_extends(MDCSegmentedButtonSegment, _super); + function MDCSegmentedButtonSegment() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(MDCSegmentedButtonSegment.prototype, "ripple", { + get: function () { + return this.rippleComponent; + }, + enumerable: false, + configurable: true + }); + MDCSegmentedButtonSegment.attachTo = function (root) { + return new MDCSegmentedButtonSegment(root); + }; + MDCSegmentedButtonSegment.prototype.initialize = function (rippleFactory) { + var _this = this; + if (rippleFactory === void 0) { rippleFactory = function (el, foundation) { + return new MDCRipple(el, foundation); + }; } + var rippleAdapter = __assign(__assign({}, MDCRipple.createAdapter(this)), { computeBoundingRect: function () { return _this.foundation.getDimensions(); } }); + this.rippleComponent = + rippleFactory(this.root, new MDCRippleFoundation(rippleAdapter)); + }; + MDCSegmentedButtonSegment.prototype.initialSyncWithDOM = function () { + var _this = this; + this.handleClick = function () { + _this.foundation.handleClick(); + }; + this.listen(segment_constants_events.CLICK, this.handleClick); + }; + MDCSegmentedButtonSegment.prototype.destroy = function () { + this.ripple.destroy(); + this.unlisten(segment_constants_events.CLICK, this.handleClick); + _super.prototype.destroy.call(this); + }; + MDCSegmentedButtonSegment.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take + // a Partial. To ensure we don't accidentally omit any + // methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = { + isSingleSelect: function () { + return _this.isSingleSelect; + }, + getAttr: function (attrName) { + return _this.root.getAttribute(attrName); + }, + setAttr: function (attrName, value) { + _this.root.setAttribute(attrName, value); + }, + addClass: function (className) { + _this.root.classList.add(className); + }, + removeClass: function (className) { + _this.root.classList.remove(className); + }, + hasClass: function (className) { + return _this.root.classList.contains(className); + }, + notifySelectedChange: function (selected) { + _this.emit(segment_constants_events.SELECTED, { + index: _this.index, + selected: selected, + segmentId: _this.getSegmentId() + }, true /* shouldBubble */); + }, + getRootBoundingClientRect: function () { + return _this.root.getBoundingClientRect(); + } + }; + return new MDCSegmentedButtonSegmentFoundation(adapter); + }; + /** + * Sets segment's index value + * + * @param index Segment's index within wrapping segmented button + */ + MDCSegmentedButtonSegment.prototype.setIndex = function (index) { + this.index = index; + }; + /** + * Sets segment's isSingleSelect value + * + * @param isSingleSelect True if wrapping segmented button is single select + */ + MDCSegmentedButtonSegment.prototype.setIsSingleSelect = function (isSingleSelect) { + this.isSingleSelect = isSingleSelect; + }; + /** + * @return Returns true if segment is currently selected, otherwise returns + * false + */ + MDCSegmentedButtonSegment.prototype.isSelected = function () { + return this.foundation.isSelected(); + }; + /** + * Sets segment to be selected + */ + MDCSegmentedButtonSegment.prototype.setSelected = function () { + this.foundation.setSelected(); + }; + /** + * Sets segment to be not selected + */ + MDCSegmentedButtonSegment.prototype.setUnselected = function () { + this.foundation.setUnselected(); + }; + /** + * @return Returns segment's segmentId if it was set by client + */ + MDCSegmentedButtonSegment.prototype.getSegmentId = function () { + return this.foundation.getSegmentId(); + }; + return MDCSegmentedButtonSegment; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/segmented-button/segmented-button/component.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + +var MDCSegmentedButton = /** @class */ (function (_super) { + tslib_es6_extends(MDCSegmentedButton, _super); + function MDCSegmentedButton() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCSegmentedButton.attachTo = function (root) { + return new MDCSegmentedButton(root); + }; + Object.defineProperty(MDCSegmentedButton.prototype, "segments", { + get: function () { + return this.segmentsList.slice(); + }, + enumerable: false, + configurable: true + }); + // initialSyncWithDOM + MDCSegmentedButton.prototype.initialize = function (segmentFactory) { + if (segmentFactory === void 0) { segmentFactory = function (el) { + return new MDCSegmentedButtonSegment(el); + }; } + this.segmentFactory = segmentFactory; + this.segmentsList = this.instantiateSegments(this.segmentFactory); + }; + /** + * @param segmentFactory Factory to create new child segments + * @return Returns list of child segments found in DOM + */ + MDCSegmentedButton.prototype.instantiateSegments = function (segmentFactory) { + var segmentElements = [].slice.call(this.root.querySelectorAll(constants_selectors.SEGMENT)); + return segmentElements.map(function (el) { return segmentFactory(el); }); + }; + MDCSegmentedButton.prototype.initialSyncWithDOM = function () { + var _this = this; + this.handleSelected = function (event) { + _this.foundation.handleSelected(event.detail); + }; + this.listen(constants_events.SELECTED, this.handleSelected); + var isSingleSelect = this.foundation.isSingleSelect(); + for (var i = 0; i < this.segmentsList.length; i++) { + var segment = this.segmentsList[i]; + segment.setIndex(i); + segment.setIsSingleSelect(isSingleSelect); + } + var selectedSegments = this.segmentsList.filter(function (segment) { return segment.isSelected(); }); + if (isSingleSelect && selectedSegments.length === 0 && + this.segmentsList.length > 0) { + throw new Error('No segment selected in singleSelect mdc-segmented-button'); + } + else if (isSingleSelect && selectedSegments.length > 1) { + throw new Error('Multiple segments selected in singleSelect mdc-segmented-button'); + } + }; + MDCSegmentedButton.prototype.destroy = function () { + var e_1, _a; + try { + for (var _b = tslib_es6_values(this.segmentsList), _c = _b.next(); !_c.done; _c = _b.next()) { + var segment = _c.value; + segment.destroy(); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + this.unlisten(constants_events.SELECTED, this.handleSelected); + _super.prototype.destroy.call(this); + }; + MDCSegmentedButton.prototype.getDefaultFoundation = function () { + var _this = this; + var adapter = { + hasClass: function (className) { + return _this.root.classList.contains(className); + }, + getSegments: function () { + return _this.mappedSegments(); + }, + selectSegment: function (indexOrSegmentId) { + var segmentDetail = _this.mappedSegments().find(function (detail) { return detail.index === indexOrSegmentId || + detail.segmentId === indexOrSegmentId; }); + if (segmentDetail) { + _this.segmentsList[segmentDetail.index].setSelected(); + } + }, + unselectSegment: function (indexOrSegmentId) { + var segmentDetail = _this.mappedSegments().find(function (detail) { return detail.index === indexOrSegmentId || + detail.segmentId === indexOrSegmentId; }); + if (segmentDetail) { + _this.segmentsList[segmentDetail.index].setUnselected(); + } + }, + notifySelectedChange: function (detail) { + _this.emit(constants_events.CHANGE, detail, true /* shouldBubble */); + } + }; + return new MDCSegmentedButtonFoundation(adapter); + }; + /** + * @return Returns readonly list of selected child segments as SegmentDetails + */ + MDCSegmentedButton.prototype.getSelectedSegments = function () { + return this.foundation.getSelectedSegments(); + }; + /** + * Sets identified segment to be selected + * + * @param indexOrSegmentId Number index or string segmentId that identifies + * child segment + */ + MDCSegmentedButton.prototype.selectSegment = function (indexOrSegmentId) { + this.foundation.selectSegment(indexOrSegmentId); + }; + /** + * Sets identified segment to be not selected + * + * @param indexOrSegmentId Number index or string segmentId that identifies + * child segment + */ + MDCSegmentedButton.prototype.unselectSegment = function (indexOrSegmentId) { + this.foundation.unselectSegment(indexOrSegmentId); + }; + /** + * @param indexOrSegmentId Number index or string segmentId that identifies + * child segment + * @return Returns true if identified child segment is currently selected, + * otherwise returns false + */ + MDCSegmentedButton.prototype.isSegmentSelected = function (indexOrSegmentId) { + return this.foundation.isSegmentSelected(indexOrSegmentId); + }; + /** + * @return Returns child segments mapped to readonly SegmentDetail list + */ + MDCSegmentedButton.prototype.mappedSegments = function () { + return this.segmentsList.map(function (segment, index) { + return { + index: index, + selected: segment.isSelected(), + segmentId: segment.getSegmentId() + }; + }); + }; + return MDCSegmentedButton; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/segmented-button/segmented-button/index.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +//# sourceMappingURL=index.js.map +;// CONCATENATED MODULE: ./node_modules/@material/segmented-button/segment/index.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +//# sourceMappingURL=index.js.map +;// CONCATENATED MODULE: ./node_modules/@material/segmented-button/index.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +//# sourceMappingURL=index.js.map +;// CONCATENATED MODULE: ./Components/SegmentedButtonMulti/MBSegmentedButtonMulti.ts + +function MBSegmentedButtonMulti_init(elem, isSingleSelect, dotNetObject) { + if (!elem) { + return; + } + elem._segmentedButton = MDCSegmentedButton.attachTo(elem); + elem._isSingleSelect = isSingleSelect; + elem._segmentedButton.foundation.adapter.notifySelectedChange = function (detail) { + if (elem._isSingleSelect) { + dotNetObject.invokeMethodAsync('NotifySingleSelected', detail.index); + } else { + dotNetObject.invokeMethodAsync('NotifyMultiSelected', elem._segmentedButton.segments.map(function (x) { + return x.isSelected(); + })); + } + }; +} +function MBSegmentedButtonMulti_setDisabled(elem, value) { + if (!elem) { + return; + } + elem._segmentedButton.disabled = value; +} +function setSelected(elem, selectedFlags) { + if (!elem) { + return; + } + for (var i = 0; i < selectedFlags.length; i++) { + if (selectedFlags[i] == true) { + elem._segmentedButton.segments[i].setSelected(); + } else { + elem._segmentedButton.segments[i].setUnselected(); + } + } +} +;// CONCATENATED MODULE: ./Components/Select/MBSelect.ts + +function MBSelect_init(elem, dotNetObject) { + if (!elem) { + return; + } + elem._select = MDCSelect.attachTo(elem); + elem._select.listen('MDCSelect:change', function () { + dotNetObject.invokeMethodAsync('NotifySelected', elem._select.selectedIndex); + }); +} +function MBSelect_setDisabled(elem, value) { + if (!elem) { + return; + } + elem._select.disabled = value; +} +function setIndex(elem, index) { + if (!elem) { + return; + } + elem._select.selectedIndex = index; +} +;// CONCATENATED MODULE: ./node_modules/@material/slider/constants.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +/** Slider element classes. */ +var slider_constants_cssClasses = { + DISABLED: 'mdc-slider--disabled', + DISCRETE: 'mdc-slider--discrete', + INPUT: 'mdc-slider__input', + RANGE: 'mdc-slider--range', + THUMB: 'mdc-slider__thumb', + // Applied when thumb is in the focused state. + THUMB_FOCUSED: 'mdc-slider__thumb--focused', + THUMB_KNOB: 'mdc-slider__thumb-knob', + // Class added to the top thumb (for overlapping thumbs in range slider). + THUMB_TOP: 'mdc-slider__thumb--top', + THUMB_WITH_INDICATOR: 'mdc-slider__thumb--with-indicator', + TICK_MARKS: 'mdc-slider--tick-marks', + TICK_MARKS_CONTAINER: 'mdc-slider__tick-marks', + TICK_MARK_ACTIVE: 'mdc-slider__tick-mark--active', + TICK_MARK_INACTIVE: 'mdc-slider__tick-mark--inactive', + TRACK: 'mdc-slider__track', + // The active track fill element that will be scaled as the value changes. + TRACK_ACTIVE: 'mdc-slider__track--active_fill', + VALUE_INDICATOR_CONTAINER: 'mdc-slider__value-indicator-container', + VALUE_INDICATOR_TEXT: 'mdc-slider__value-indicator-text', +}; +/** Slider numbers. */ +var slider_constants_numbers = { + // Default step size. + STEP_SIZE: 1, + // Default minimum difference between the start and end values. + MIN_RANGE: 0, + // Minimum absolute difference between clientX of move event / down event + // for which to update thumb, in the case of overlapping thumbs. + // This is needed to reduce chances of choosing the thumb based on + // pointer jitter. + THUMB_UPDATE_MIN_PX: 5, +}; +/** Slider attributes. */ +var slider_constants_attributes = { + ARIA_VALUETEXT: 'aria-valuetext', + INPUT_DISABLED: 'disabled', + INPUT_MIN: 'min', + INPUT_MAX: 'max', + INPUT_VALUE: 'value', + INPUT_STEP: 'step', + DATA_MIN_RANGE: 'data-min-range', +}; +/** Slider events. */ +var slider_constants_events = { + CHANGE: 'MDCSlider:change', + INPUT: 'MDCSlider:input', +}; +/** Slider strings. */ +var slider_constants_strings = { + VAR_VALUE_INDICATOR_CARET_LEFT: '--slider-value-indicator-caret-left', + VAR_VALUE_INDICATOR_CARET_RIGHT: '--slider-value-indicator-caret-right', + VAR_VALUE_INDICATOR_CARET_TRANSFORM: '--slider-value-indicator-caret-transform', + VAR_VALUE_INDICATOR_CONTAINER_LEFT: '--slider-value-indicator-container-left', + VAR_VALUE_INDICATOR_CONTAINER_RIGHT: '--slider-value-indicator-container-right', + VAR_VALUE_INDICATOR_CONTAINER_TRANSFORM: '--slider-value-indicator-container-transform', +}; +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/slider/types.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +/** Tick mark enum, for discrete sliders. */ +var TickMark; +(function (TickMark) { + TickMark[TickMark["ACTIVE"] = 0] = "ACTIVE"; + TickMark[TickMark["INACTIVE"] = 1] = "INACTIVE"; +})(TickMark || (TickMark = {})); +/** + * Thumb types: range slider has two thumbs (START, END) whereas single point + * slider only has one thumb (END). + */ +var Thumb; +(function (Thumb) { + // Thumb at start of slider (e.g. in LTR mode, left thumb on range slider). + Thumb[Thumb["START"] = 1] = "START"; + // Thumb at end of slider (e.g. in LTR mode, right thumb on range slider, + // or only thumb on single point slider). + Thumb[Thumb["END"] = 2] = "END"; +})(Thumb || (Thumb = {})); +//# sourceMappingURL=types.js.map +;// CONCATENATED MODULE: ./node_modules/@material/slider/foundation.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + +var foundation_AnimationKeys; +(function (AnimationKeys) { + AnimationKeys["SLIDER_UPDATE"] = "slider_update"; +})(foundation_AnimationKeys || (foundation_AnimationKeys = {})); +// Accessing `window` without a `typeof` check will throw on Node environments. +var HAS_WINDOW = typeof window !== 'undefined'; +/** + * Foundation class for slider. Responsibilities include: + * - Updating slider values (internal state and DOM updates) based on client + * 'x' position. + * - Updating DOM after slider property updates (e.g. min, max). + */ +var MDCSliderFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCSliderFoundation, _super); + function MDCSliderFoundation(adapter) { + var _this = _super.call(this, __assign(__assign({}, MDCSliderFoundation.defaultAdapter), adapter)) || this; + // Whether the initial styles (to position the thumb, before component + // initialization) have been removed. + _this.initialStylesRemoved = false; + _this.isDisabled = false; + _this.isDiscrete = false; + _this.step = slider_constants_numbers.STEP_SIZE; + _this.minRange = slider_constants_numbers.MIN_RANGE; + _this.hasTickMarks = false; + // The following properties are only set for range sliders. + _this.isRange = false; + // Tracks the thumb being moved across a slider pointer interaction (down, + // move event). + _this.thumb = null; + // `clientX` from the most recent down event. Used in subsequent move + // events to determine which thumb to move (in the case of + // overlapping thumbs). + _this.downEventClientX = null; + // Width of the start thumb knob. + _this.startThumbKnobWidth = 0; + // Width of the end thumb knob. + _this.endThumbKnobWidth = 0; + _this.animFrame = new AnimationFrame(); + return _this; + } + Object.defineProperty(MDCSliderFoundation, "defaultAdapter", { + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same + // order as the adapter interface. + return { + hasClass: function () { return false; }, + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + addThumbClass: function () { return undefined; }, + removeThumbClass: function () { return undefined; }, + getAttribute: function () { return null; }, + getInputValue: function () { return ''; }, + setInputValue: function () { return undefined; }, + getInputAttribute: function () { return null; }, + setInputAttribute: function () { return null; }, + removeInputAttribute: function () { return null; }, + focusInput: function () { return undefined; }, + isInputFocused: function () { return false; }, + shouldHideFocusStylesForPointerEvents: function () { return false; }, + getThumbKnobWidth: function () { return 0; }, + getValueIndicatorContainerWidth: function () { return 0; }, + getThumbBoundingClientRect: function () { + return ({ top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }); + }, + getBoundingClientRect: function () { + return ({ top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }); + }, + isRTL: function () { return false; }, + setThumbStyleProperty: function () { return undefined; }, + removeThumbStyleProperty: function () { return undefined; }, + setTrackActiveStyleProperty: function () { return undefined; }, + removeTrackActiveStyleProperty: function () { return undefined; }, + setValueIndicatorText: function () { return undefined; }, + getValueToAriaValueTextFn: function () { return null; }, + updateTickMarks: function () { return undefined; }, + setPointerCapture: function () { return undefined; }, + emitChangeEvent: function () { return undefined; }, + emitInputEvent: function () { return undefined; }, + emitDragStartEvent: function () { return undefined; }, + emitDragEndEvent: function () { return undefined; }, + registerEventHandler: function () { return undefined; }, + deregisterEventHandler: function () { return undefined; }, + registerThumbEventHandler: function () { return undefined; }, + deregisterThumbEventHandler: function () { return undefined; }, + registerInputEventHandler: function () { return undefined; }, + deregisterInputEventHandler: function () { return undefined; }, + registerBodyEventHandler: function () { return undefined; }, + deregisterBodyEventHandler: function () { return undefined; }, + registerWindowEventHandler: function () { return undefined; }, + deregisterWindowEventHandler: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCSliderFoundation.prototype.init = function () { + var _this = this; + this.isDisabled = this.adapter.hasClass(slider_constants_cssClasses.DISABLED); + this.isDiscrete = this.adapter.hasClass(slider_constants_cssClasses.DISCRETE); + this.hasTickMarks = this.adapter.hasClass(slider_constants_cssClasses.TICK_MARKS); + this.isRange = this.adapter.hasClass(slider_constants_cssClasses.RANGE); + var min = this.convertAttributeValueToNumber(this.adapter.getInputAttribute(slider_constants_attributes.INPUT_MIN, this.isRange ? Thumb.START : Thumb.END), slider_constants_attributes.INPUT_MIN); + var max = this.convertAttributeValueToNumber(this.adapter.getInputAttribute(slider_constants_attributes.INPUT_MAX, Thumb.END), slider_constants_attributes.INPUT_MAX); + var value = this.convertAttributeValueToNumber(this.adapter.getInputAttribute(slider_constants_attributes.INPUT_VALUE, Thumb.END), slider_constants_attributes.INPUT_VALUE); + var valueStart = this.isRange ? + this.convertAttributeValueToNumber(this.adapter.getInputAttribute(slider_constants_attributes.INPUT_VALUE, Thumb.START), slider_constants_attributes.INPUT_VALUE) : + min; + var stepAttr = this.adapter.getInputAttribute(slider_constants_attributes.INPUT_STEP, Thumb.END); + var step = stepAttr ? + this.convertAttributeValueToNumber(stepAttr, slider_constants_attributes.INPUT_STEP) : + this.step; + var minRangeAttr = this.adapter.getAttribute(slider_constants_attributes.DATA_MIN_RANGE); + var minRange = minRangeAttr ? + this.convertAttributeValueToNumber(minRangeAttr, slider_constants_attributes.DATA_MIN_RANGE) : + this.minRange; + this.validateProperties({ min: min, max: max, value: value, valueStart: valueStart, step: step, minRange: minRange }); + this.min = min; + this.max = max; + this.value = value; + this.valueStart = valueStart; + this.step = step; + this.minRange = minRange; + this.numDecimalPlaces = getNumDecimalPlaces(this.step); + this.valueBeforeDownEvent = value; + this.valueStartBeforeDownEvent = valueStart; + this.mousedownOrTouchstartListener = + this.handleMousedownOrTouchstart.bind(this); + this.moveListener = this.handleMove.bind(this); + this.pointerdownListener = this.handlePointerdown.bind(this); + this.pointerupListener = this.handlePointerup.bind(this); + this.thumbMouseenterListener = this.handleThumbMouseenter.bind(this); + this.thumbMouseleaveListener = this.handleThumbMouseleave.bind(this); + this.inputStartChangeListener = function () { + _this.handleInputChange(Thumb.START); + }; + this.inputEndChangeListener = function () { + _this.handleInputChange(Thumb.END); + }; + this.inputStartFocusListener = function () { + _this.handleInputFocus(Thumb.START); + }; + this.inputEndFocusListener = function () { + _this.handleInputFocus(Thumb.END); + }; + this.inputStartBlurListener = function () { + _this.handleInputBlur(Thumb.START); + }; + this.inputEndBlurListener = function () { + _this.handleInputBlur(Thumb.END); + }; + this.resizeListener = this.handleResize.bind(this); + this.registerEventHandlers(); + }; + MDCSliderFoundation.prototype.destroy = function () { + this.deregisterEventHandlers(); + }; + MDCSliderFoundation.prototype.setMin = function (value) { + this.min = value; + if (!this.isRange) { + this.valueStart = value; + } + this.updateUI(); + }; + MDCSliderFoundation.prototype.setMax = function (value) { + this.max = value; + this.updateUI(); + }; + MDCSliderFoundation.prototype.getMin = function () { + return this.min; + }; + MDCSliderFoundation.prototype.getMax = function () { + return this.max; + }; + /** + * - For single point sliders, returns the thumb value. + * - For range (two-thumb) sliders, returns the end thumb's value. + */ + MDCSliderFoundation.prototype.getValue = function () { + return this.value; + }; + /** + * - For single point sliders, sets the thumb value. + * - For range (two-thumb) sliders, sets the end thumb's value. + */ + MDCSliderFoundation.prototype.setValue = function (value) { + if (this.isRange && value < this.valueStart + this.minRange) { + throw new Error("end thumb value (" + value + ") must be >= start thumb " + + ("value (" + this.valueStart + ") + min range (" + this.minRange + ")")); + } + this.updateValue(value, Thumb.END); + }; + /** + * Only applicable for range sliders. + * @return The start thumb's value. + */ + MDCSliderFoundation.prototype.getValueStart = function () { + if (!this.isRange) { + throw new Error('`valueStart` is only applicable for range sliders.'); + } + return this.valueStart; + }; + /** + * Only applicable for range sliders. Sets the start thumb's value. + */ + MDCSliderFoundation.prototype.setValueStart = function (valueStart) { + if (!this.isRange) { + throw new Error('`valueStart` is only applicable for range sliders.'); + } + if (this.isRange && valueStart > this.value - this.minRange) { + throw new Error("start thumb value (" + valueStart + ") must be <= end thumb " + + ("value (" + this.value + ") - min range (" + this.minRange + ")")); + } + this.updateValue(valueStart, Thumb.START); + }; + MDCSliderFoundation.prototype.setStep = function (value) { + this.step = value; + this.numDecimalPlaces = getNumDecimalPlaces(value); + this.updateUI(); + }; + /** + * Only applicable for range sliders. Sets the minimum difference between the + * start and end values. + */ + MDCSliderFoundation.prototype.setMinRange = function (value) { + if (!this.isRange) { + throw new Error('`minRange` is only applicable for range sliders.'); + } + if (value < 0) { + throw new Error('`minRange` must be non-negative. ' + + ("Current value: " + value)); + } + if (this.value - this.valueStart < value) { + throw new Error("start thumb value (" + this.valueStart + ") and end thumb value " + + ("(" + this.value + ") must differ by at least " + value + ".")); + } + this.minRange = value; + }; + MDCSliderFoundation.prototype.setIsDiscrete = function (value) { + this.isDiscrete = value; + this.updateValueIndicatorUI(); + this.updateTickMarksUI(); + }; + MDCSliderFoundation.prototype.getStep = function () { + return this.step; + }; + MDCSliderFoundation.prototype.getMinRange = function () { + if (!this.isRange) { + throw new Error('`minRange` is only applicable for range sliders.'); + } + return this.minRange; + }; + MDCSliderFoundation.prototype.setHasTickMarks = function (value) { + this.hasTickMarks = value; + this.updateTickMarksUI(); + }; + MDCSliderFoundation.prototype.getDisabled = function () { + return this.isDisabled; + }; + /** + * Sets disabled state, including updating styles and thumb tabindex. + */ + MDCSliderFoundation.prototype.setDisabled = function (disabled) { + this.isDisabled = disabled; + if (disabled) { + this.adapter.addClass(slider_constants_cssClasses.DISABLED); + if (this.isRange) { + this.adapter.setInputAttribute(slider_constants_attributes.INPUT_DISABLED, '', Thumb.START); + } + this.adapter.setInputAttribute(slider_constants_attributes.INPUT_DISABLED, '', Thumb.END); + } + else { + this.adapter.removeClass(slider_constants_cssClasses.DISABLED); + if (this.isRange) { + this.adapter.removeInputAttribute(slider_constants_attributes.INPUT_DISABLED, Thumb.START); + } + this.adapter.removeInputAttribute(slider_constants_attributes.INPUT_DISABLED, Thumb.END); + } + }; + /** @return Whether the slider is a range slider. */ + MDCSliderFoundation.prototype.getIsRange = function () { + return this.isRange; + }; + /** + * - Syncs slider boundingClientRect with the current DOM. + * - Updates UI based on internal state. + */ + MDCSliderFoundation.prototype.layout = function (_a) { + var _b = _a === void 0 ? {} : _a, skipUpdateUI = _b.skipUpdateUI; + this.rect = this.adapter.getBoundingClientRect(); + if (this.isRange) { + this.startThumbKnobWidth = this.adapter.getThumbKnobWidth(Thumb.START); + this.endThumbKnobWidth = this.adapter.getThumbKnobWidth(Thumb.END); + } + if (!skipUpdateUI) { + this.updateUI(); + } + }; + /** Handles resize events on the window. */ + MDCSliderFoundation.prototype.handleResize = function () { + this.layout(); + }; + /** + * Handles pointer down events on the slider root element. + */ + MDCSliderFoundation.prototype.handleDown = function (event) { + if (this.isDisabled) + return; + this.valueStartBeforeDownEvent = this.valueStart; + this.valueBeforeDownEvent = this.value; + var clientX = event.clientX != null ? + event.clientX : + event.targetTouches[0].clientX; + this.downEventClientX = clientX; + var value = this.mapClientXOnSliderScale(clientX); + this.thumb = this.getThumbFromDownEvent(clientX, value); + if (this.thumb === null) + return; + this.handleDragStart(event, value, this.thumb); + this.updateValue(value, this.thumb, { emitInputEvent: true }); + }; + /** + * Handles pointer move events on the slider root element. + */ + MDCSliderFoundation.prototype.handleMove = function (event) { + if (this.isDisabled) + return; + // Prevent scrolling. + event.preventDefault(); + var clientX = event.clientX != null ? + event.clientX : + event.targetTouches[0].clientX; + var dragAlreadyStarted = this.thumb != null; + this.thumb = this.getThumbFromMoveEvent(clientX); + if (this.thumb === null) + return; + var value = this.mapClientXOnSliderScale(clientX); + if (!dragAlreadyStarted) { + this.handleDragStart(event, value, this.thumb); + this.adapter.emitDragStartEvent(value, this.thumb); + } + this.updateValue(value, this.thumb, { emitInputEvent: true }); + }; + /** + * Handles pointer up events on the slider root element. + */ + MDCSliderFoundation.prototype.handleUp = function () { + var _a, _b; + if (this.isDisabled || this.thumb === null) + return; + // Remove the focused state and hide the value indicator(s) (if present) + // if focus state is meant to be hidden. + if ((_b = (_a = this.adapter).shouldHideFocusStylesForPointerEvents) === null || _b === void 0 ? void 0 : _b.call(_a)) { + this.handleInputBlur(this.thumb); + } + var oldValue = this.thumb === Thumb.START ? + this.valueStartBeforeDownEvent : + this.valueBeforeDownEvent; + var newValue = this.thumb === Thumb.START ? this.valueStart : this.value; + if (oldValue !== newValue) { + this.adapter.emitChangeEvent(newValue, this.thumb); + } + this.adapter.emitDragEndEvent(newValue, this.thumb); + this.thumb = null; + }; + /** + * For range, discrete slider, shows the value indicator on both thumbs. + */ + MDCSliderFoundation.prototype.handleThumbMouseenter = function () { + if (!this.isDiscrete || !this.isRange) + return; + this.adapter.addThumbClass(slider_constants_cssClasses.THUMB_WITH_INDICATOR, Thumb.START); + this.adapter.addThumbClass(slider_constants_cssClasses.THUMB_WITH_INDICATOR, Thumb.END); + }; + /** + * For range, discrete slider, hides the value indicator on both thumbs. + */ + MDCSliderFoundation.prototype.handleThumbMouseleave = function () { + var _a, _b; + if (!this.isDiscrete || !this.isRange) + return; + if ((!((_b = (_a = this.adapter).shouldHideFocusStylesForPointerEvents) === null || _b === void 0 ? void 0 : _b.call(_a)) && + (this.adapter.isInputFocused(Thumb.START) || + this.adapter.isInputFocused(Thumb.END))) || + this.thumb) { + // Leave value indicator shown if either input is focused or the thumb is + // being dragged. + return; + } + this.adapter.removeThumbClass(slider_constants_cssClasses.THUMB_WITH_INDICATOR, Thumb.START); + this.adapter.removeThumbClass(slider_constants_cssClasses.THUMB_WITH_INDICATOR, Thumb.END); + }; + MDCSliderFoundation.prototype.handleMousedownOrTouchstart = function (event) { + var _this = this; + var moveEventType = event.type === 'mousedown' ? 'mousemove' : 'touchmove'; + // After a down event on the slider root, listen for move events on + // body (so the slider value is updated for events outside of the + // slider root). + this.adapter.registerBodyEventHandler(moveEventType, this.moveListener); + var upHandler = function () { + _this.handleUp(); + // Once the drag is finished (up event on body), remove the move + // handler. + _this.adapter.deregisterBodyEventHandler(moveEventType, _this.moveListener); + // Also stop listening for subsequent up events. + _this.adapter.deregisterEventHandler('mouseup', upHandler); + _this.adapter.deregisterEventHandler('touchend', upHandler); + }; + this.adapter.registerBodyEventHandler('mouseup', upHandler); + this.adapter.registerBodyEventHandler('touchend', upHandler); + this.handleDown(event); + }; + MDCSliderFoundation.prototype.handlePointerdown = function (event) { + var isPrimaryButton = event.button === 0; + if (!isPrimaryButton) + return; + if (event.pointerId != null) { + this.adapter.setPointerCapture(event.pointerId); + } + this.adapter.registerEventHandler('pointermove', this.moveListener); + this.handleDown(event); + }; + /** + * Handles input `change` event by setting internal slider value to match + * input's new value. + */ + MDCSliderFoundation.prototype.handleInputChange = function (thumb) { + var value = Number(this.adapter.getInputValue(thumb)); + if (thumb === Thumb.START) { + this.setValueStart(value); + } + else { + this.setValue(value); + } + this.adapter.emitChangeEvent(thumb === Thumb.START ? this.valueStart : this.value, thumb); + this.adapter.emitInputEvent(thumb === Thumb.START ? this.valueStart : this.value, thumb); + }; + /** Shows activated state and value indicator on thumb(s). */ + MDCSliderFoundation.prototype.handleInputFocus = function (thumb) { + this.adapter.addThumbClass(slider_constants_cssClasses.THUMB_FOCUSED, thumb); + if (!this.isDiscrete) + return; + this.adapter.addThumbClass(slider_constants_cssClasses.THUMB_WITH_INDICATOR, thumb); + if (this.isRange) { + var otherThumb = thumb === Thumb.START ? Thumb.END : Thumb.START; + this.adapter.addThumbClass(slider_constants_cssClasses.THUMB_WITH_INDICATOR, otherThumb); + } + }; + /** Removes activated state and value indicator from thumb(s). */ + MDCSliderFoundation.prototype.handleInputBlur = function (thumb) { + this.adapter.removeThumbClass(slider_constants_cssClasses.THUMB_FOCUSED, thumb); + if (!this.isDiscrete) + return; + this.adapter.removeThumbClass(slider_constants_cssClasses.THUMB_WITH_INDICATOR, thumb); + if (this.isRange) { + var otherThumb = thumb === Thumb.START ? Thumb.END : Thumb.START; + this.adapter.removeThumbClass(slider_constants_cssClasses.THUMB_WITH_INDICATOR, otherThumb); + } + }; + /** + * Emits custom dragStart event, along with focusing the underlying input. + */ + MDCSliderFoundation.prototype.handleDragStart = function (event, value, thumb) { + var _a, _b; + this.adapter.emitDragStartEvent(value, thumb); + this.adapter.focusInput(thumb); + // Restore focused state and show the value indicator(s) (if present) + // in case they were previously hidden on dragEnd. + // This is needed if the input is already focused, in which case + // #focusInput above wouldn't actually trigger #handleInputFocus, + // which is why we need to invoke it manually here. + if ((_b = (_a = this.adapter).shouldHideFocusStylesForPointerEvents) === null || _b === void 0 ? void 0 : _b.call(_a)) { + this.handleInputFocus(thumb); + } + // Prevent the input (that we just focused) from losing focus. + event.preventDefault(); + }; + /** + * @return The thumb to be moved based on initial down event. + */ + MDCSliderFoundation.prototype.getThumbFromDownEvent = function (clientX, value) { + // For single point slider, thumb to be moved is always the END (only) + // thumb. + if (!this.isRange) + return Thumb.END; + // Check if event press point is in the bounds of any thumb. + var thumbStartRect = this.adapter.getThumbBoundingClientRect(Thumb.START); + var thumbEndRect = this.adapter.getThumbBoundingClientRect(Thumb.END); + var inThumbStartBounds = clientX >= thumbStartRect.left && clientX <= thumbStartRect.right; + var inThumbEndBounds = clientX >= thumbEndRect.left && clientX <= thumbEndRect.right; + if (inThumbStartBounds && inThumbEndBounds) { + // Thumbs overlapping. Thumb to be moved cannot be determined yet. + return null; + } + // If press is in bounds for either thumb on down event, that's the thumb + // to be moved. + if (inThumbStartBounds) { + return Thumb.START; + } + if (inThumbEndBounds) { + return Thumb.END; + } + // For presses outside the range, return whichever thumb is closer. + if (value < this.valueStart) { + return Thumb.START; + } + if (value > this.value) { + return Thumb.END; + } + // For presses inside the range, return whichever thumb is closer. + return (value - this.valueStart <= this.value - value) ? Thumb.START : + Thumb.END; + }; + /** + * @return The thumb to be moved based on move event (based on drag + * direction from original down event). Only applicable if thumbs + * were overlapping in the down event. + */ + MDCSliderFoundation.prototype.getThumbFromMoveEvent = function (clientX) { + // Thumb has already been chosen. + if (this.thumb !== null) + return this.thumb; + if (this.downEventClientX === null) { + throw new Error('`downEventClientX` is null after move event.'); + } + var moveDistanceUnderThreshold = Math.abs(this.downEventClientX - clientX) < slider_constants_numbers.THUMB_UPDATE_MIN_PX; + if (moveDistanceUnderThreshold) + return this.thumb; + var draggedThumbToLeft = clientX < this.downEventClientX; + if (draggedThumbToLeft) { + return this.adapter.isRTL() ? Thumb.END : Thumb.START; + } + else { + return this.adapter.isRTL() ? Thumb.START : Thumb.END; + } + }; + /** + * Updates UI based on internal state. + * @param thumb Thumb whose value is being updated. If undefined, UI is + * updated for both thumbs based on current internal state. + */ + MDCSliderFoundation.prototype.updateUI = function (thumb) { + if (thumb) { + this.updateThumbAndInputAttributes(thumb); + } + else { + this.updateThumbAndInputAttributes(Thumb.START); + this.updateThumbAndInputAttributes(Thumb.END); + } + this.updateThumbAndTrackUI(thumb); + this.updateValueIndicatorUI(thumb); + this.updateTickMarksUI(); + }; + /** + * Updates thumb and input attributes based on current value. + * @param thumb Thumb whose aria attributes to update. + */ + MDCSliderFoundation.prototype.updateThumbAndInputAttributes = function (thumb) { + if (!thumb) + return; + var value = this.isRange && thumb === Thumb.START ? this.valueStart : this.value; + var valueStr = String(value); + this.adapter.setInputAttribute(slider_constants_attributes.INPUT_VALUE, valueStr, thumb); + if (this.isRange && thumb === Thumb.START) { + this.adapter.setInputAttribute(slider_constants_attributes.INPUT_MIN, String(value + this.minRange), Thumb.END); + } + else if (this.isRange && thumb === Thumb.END) { + this.adapter.setInputAttribute(slider_constants_attributes.INPUT_MAX, String(value - this.minRange), Thumb.START); + } + // Sync attribute with property. + if (this.adapter.getInputValue(thumb) !== valueStr) { + this.adapter.setInputValue(valueStr, thumb); + } + var valueToAriaValueTextFn = this.adapter.getValueToAriaValueTextFn(); + if (valueToAriaValueTextFn) { + this.adapter.setInputAttribute(slider_constants_attributes.ARIA_VALUETEXT, valueToAriaValueTextFn(value, thumb), thumb); + } + }; + /** + * Updates value indicator UI based on current value. + * @param thumb Thumb whose value indicator to update. If undefined, all + * thumbs' value indicators are updated. + */ + MDCSliderFoundation.prototype.updateValueIndicatorUI = function (thumb) { + if (!this.isDiscrete) + return; + var value = this.isRange && thumb === Thumb.START ? this.valueStart : this.value; + this.adapter.setValueIndicatorText(value, thumb === Thumb.START ? Thumb.START : Thumb.END); + if (!thumb && this.isRange) { + this.adapter.setValueIndicatorText(this.valueStart, Thumb.START); + } + }; + /** + * Updates tick marks UI within slider, based on current min, max, and step. + */ + MDCSliderFoundation.prototype.updateTickMarksUI = function () { + if (!this.isDiscrete || !this.hasTickMarks) + return; + var numTickMarksInactiveStart = (this.valueStart - this.min) / this.step; + var numTickMarksActive = (this.value - this.valueStart) / this.step + 1; + var numTickMarksInactiveEnd = (this.max - this.value) / this.step; + var tickMarksInactiveStart = Array.from({ length: numTickMarksInactiveStart }) + .fill(TickMark.INACTIVE); + var tickMarksActive = Array.from({ length: numTickMarksActive }) + .fill(TickMark.ACTIVE); + var tickMarksInactiveEnd = Array.from({ length: numTickMarksInactiveEnd }) + .fill(TickMark.INACTIVE); + this.adapter.updateTickMarks(tickMarksInactiveStart.concat(tickMarksActive) + .concat(tickMarksInactiveEnd)); + }; + /** Maps clientX to a value on the slider scale. */ + MDCSliderFoundation.prototype.mapClientXOnSliderScale = function (clientX) { + var xPos = clientX - this.rect.left; + var pctComplete = xPos / this.rect.width; + if (this.adapter.isRTL()) { + pctComplete = 1 - pctComplete; + } + // Fit the percentage complete between the range [min,max] + // by remapping from [0, 1] to [min, min+(max-min)]. + var value = this.min + pctComplete * (this.max - this.min); + if (value === this.max || value === this.min) { + return value; + } + return Number(this.quantize(value).toFixed(this.numDecimalPlaces)); + }; + /** Calculates the quantized value based on step value. */ + MDCSliderFoundation.prototype.quantize = function (value) { + var numSteps = Math.round((value - this.min) / this.step); + return this.min + numSteps * this.step; + }; + /** + * Updates slider value (internal state and UI) based on the given value. + */ + MDCSliderFoundation.prototype.updateValue = function (value, thumb, _a) { + var _b = _a === void 0 ? {} : _a, emitInputEvent = _b.emitInputEvent; + value = this.clampValue(value, thumb); + if (this.isRange && thumb === Thumb.START) { + // Exit early if current value is the same as the new value. + if (this.valueStart === value) + return; + this.valueStart = value; + } + else { + // Exit early if current value is the same as the new value. + if (this.value === value) + return; + this.value = value; + } + this.updateUI(thumb); + if (emitInputEvent) { + this.adapter.emitInputEvent(thumb === Thumb.START ? this.valueStart : this.value, thumb); + } + }; + /** + * Clamps the given value for the given thumb based on slider properties: + * - Restricts value within [min, max]. + * - If range slider, clamp start value <= end value - min range, and + * end value >= start value + min range. + */ + MDCSliderFoundation.prototype.clampValue = function (value, thumb) { + // Clamp value to [min, max] range. + value = Math.min(Math.max(value, this.min), this.max); + var thumbStartMovedPastThumbEnd = this.isRange && thumb === Thumb.START && + value > this.value - this.minRange; + if (thumbStartMovedPastThumbEnd) { + return this.value - this.minRange; + } + var thumbEndMovedPastThumbStart = this.isRange && thumb === Thumb.END && + value < this.valueStart + this.minRange; + if (thumbEndMovedPastThumbStart) { + return this.valueStart + this.minRange; + } + return value; + }; + /** + * Updates the active track and thumb style properties to reflect current + * value. + */ + MDCSliderFoundation.prototype.updateThumbAndTrackUI = function (thumb) { + var _this = this; + var _a = this, max = _a.max, min = _a.min; + var pctComplete = (this.value - this.valueStart) / (max - min); + var rangePx = pctComplete * this.rect.width; + var isRtl = this.adapter.isRTL(); + var transformProp = HAS_WINDOW ? getCorrectPropertyName(window, 'transform') : 'transform'; + if (this.isRange) { + var thumbLeftPos_1 = this.adapter.isRTL() ? + (max - this.value) / (max - min) * this.rect.width : + (this.valueStart - min) / (max - min) * this.rect.width; + var thumbRightPos_1 = thumbLeftPos_1 + rangePx; + this.animFrame.request(foundation_AnimationKeys.SLIDER_UPDATE, function () { + // Set active track styles, accounting for animation direction by + // setting `transform-origin`. + var trackAnimatesFromRight = (!isRtl && thumb === Thumb.START) || + (isRtl && thumb !== Thumb.START); + if (trackAnimatesFromRight) { + _this.adapter.setTrackActiveStyleProperty('transform-origin', 'right'); + _this.adapter.setTrackActiveStyleProperty('left', 'auto'); + _this.adapter.setTrackActiveStyleProperty('right', _this.rect.width - thumbRightPos_1 + "px"); + } + else { + _this.adapter.setTrackActiveStyleProperty('transform-origin', 'left'); + _this.adapter.setTrackActiveStyleProperty('right', 'auto'); + _this.adapter.setTrackActiveStyleProperty('left', thumbLeftPos_1 + "px"); + } + _this.adapter.setTrackActiveStyleProperty(transformProp, "scaleX(" + pctComplete + ")"); + // Set thumb styles. + var thumbStartPos = isRtl ? thumbRightPos_1 : thumbLeftPos_1; + var thumbEndPos = _this.adapter.isRTL() ? thumbLeftPos_1 : thumbRightPos_1; + if (thumb === Thumb.START || !thumb || !_this.initialStylesRemoved) { + _this.adapter.setThumbStyleProperty(transformProp, "translateX(" + thumbStartPos + "px)", Thumb.START); + _this.alignValueIndicator(Thumb.START, thumbStartPos); + } + if (thumb === Thumb.END || !thumb || !_this.initialStylesRemoved) { + _this.adapter.setThumbStyleProperty(transformProp, "translateX(" + thumbEndPos + "px)", Thumb.END); + _this.alignValueIndicator(Thumb.END, thumbEndPos); + } + _this.removeInitialStyles(isRtl); + _this.updateOverlappingThumbsUI(thumbStartPos, thumbEndPos, thumb); + }); + } + else { + this.animFrame.request(foundation_AnimationKeys.SLIDER_UPDATE, function () { + var thumbStartPos = isRtl ? _this.rect.width - rangePx : rangePx; + _this.adapter.setThumbStyleProperty(transformProp, "translateX(" + thumbStartPos + "px)", Thumb.END); + _this.alignValueIndicator(Thumb.END, thumbStartPos); + _this.adapter.setTrackActiveStyleProperty(transformProp, "scaleX(" + pctComplete + ")"); + _this.removeInitialStyles(isRtl); + }); + } + }; + /** + * Shifts the value indicator to either side if it would otherwise stick + * beyond the slider's length while keeping the caret above the knob. + */ + MDCSliderFoundation.prototype.alignValueIndicator = function (thumb, thumbPos) { + if (!this.isDiscrete) + return; + var thumbHalfWidth = this.adapter.getThumbBoundingClientRect(thumb).width / 2; + var containerWidth = this.adapter.getValueIndicatorContainerWidth(thumb); + var sliderWidth = this.adapter.getBoundingClientRect().width; + if (containerWidth / 2 > thumbPos + thumbHalfWidth) { + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CARET_LEFT, thumbHalfWidth + "px", thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CARET_RIGHT, 'auto', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CARET_TRANSFORM, 'translateX(-50%)', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CONTAINER_LEFT, '0', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CONTAINER_RIGHT, 'auto', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CONTAINER_TRANSFORM, 'none', thumb); + } + else if (containerWidth / 2 > sliderWidth - thumbPos + thumbHalfWidth) { + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CARET_LEFT, 'auto', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CARET_RIGHT, thumbHalfWidth + "px", thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CARET_TRANSFORM, 'translateX(50%)', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CONTAINER_LEFT, 'auto', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CONTAINER_RIGHT, '0', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CONTAINER_TRANSFORM, 'none', thumb); + } + else { + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CARET_LEFT, '50%', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CARET_RIGHT, 'auto', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CARET_TRANSFORM, 'translateX(-50%)', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CONTAINER_LEFT, '50%', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CONTAINER_RIGHT, 'auto', thumb); + this.adapter.setThumbStyleProperty(slider_constants_strings.VAR_VALUE_INDICATOR_CONTAINER_TRANSFORM, 'translateX(-50%)', thumb); + } + }; + /** + * Removes initial inline styles if not already removed. `left:<...>%` + * inline styles can be added to position the thumb correctly before JS + * initialization. However, they need to be removed before the JS starts + * positioning the thumb. This is because the JS uses + * `transform:translateX(<...>)px` (for performance reasons) to position + * the thumb (which is not possible for initial styles since we need the + * bounding rect measurements). + */ + MDCSliderFoundation.prototype.removeInitialStyles = function (isRtl) { + if (this.initialStylesRemoved) + return; + // Remove thumb position properties that were added for initial render. + var position = isRtl ? 'right' : 'left'; + this.adapter.removeThumbStyleProperty(position, Thumb.END); + if (this.isRange) { + this.adapter.removeThumbStyleProperty(position, Thumb.START); + } + this.initialStylesRemoved = true; + this.resetTrackAndThumbAnimation(); + }; + /** + * Resets track/thumb animation to prevent animation when adding + * `transform` styles to thumb initially. + */ + MDCSliderFoundation.prototype.resetTrackAndThumbAnimation = function () { + var _this = this; + if (!this.isDiscrete) + return; + // Set transition properties to default (no animation), so that the + // newly added `transform` styles do not animate thumb/track from + // their default positions. + var transitionProp = HAS_WINDOW ? + getCorrectPropertyName(window, 'transition') : + 'transition'; + var transitionDefault = 'none 0s ease 0s'; + this.adapter.setThumbStyleProperty(transitionProp, transitionDefault, Thumb.END); + if (this.isRange) { + this.adapter.setThumbStyleProperty(transitionProp, transitionDefault, Thumb.START); + } + this.adapter.setTrackActiveStyleProperty(transitionProp, transitionDefault); + // In the next frame, remove the transition inline styles we just + // added, such that any animations added in the CSS can now take effect. + requestAnimationFrame(function () { + _this.adapter.removeThumbStyleProperty(transitionProp, Thumb.END); + _this.adapter.removeTrackActiveStyleProperty(transitionProp); + if (_this.isRange) { + _this.adapter.removeThumbStyleProperty(transitionProp, Thumb.START); + } + }); + }; + /** + * Adds THUMB_TOP class to active thumb if thumb knobs overlap; otherwise + * removes THUMB_TOP class from both thumbs. + * @param thumb Thumb that is active (being moved). + */ + MDCSliderFoundation.prototype.updateOverlappingThumbsUI = function (thumbStartPos, thumbEndPos, thumb) { + var thumbsOverlap = false; + if (this.adapter.isRTL()) { + var startThumbLeftEdge = thumbStartPos - this.startThumbKnobWidth / 2; + var endThumbRightEdge = thumbEndPos + this.endThumbKnobWidth / 2; + thumbsOverlap = endThumbRightEdge >= startThumbLeftEdge; + } + else { + var startThumbRightEdge = thumbStartPos + this.startThumbKnobWidth / 2; + var endThumbLeftEdge = thumbEndPos - this.endThumbKnobWidth / 2; + thumbsOverlap = startThumbRightEdge >= endThumbLeftEdge; + } + if (thumbsOverlap) { + this.adapter.addThumbClass(slider_constants_cssClasses.THUMB_TOP, + // If no thumb was dragged (in the case of initial layout), end + // thumb is on top by default. + thumb || Thumb.END); + this.adapter.removeThumbClass(slider_constants_cssClasses.THUMB_TOP, thumb === Thumb.START ? Thumb.END : Thumb.START); + } + else { + this.adapter.removeThumbClass(slider_constants_cssClasses.THUMB_TOP, Thumb.START); + this.adapter.removeThumbClass(slider_constants_cssClasses.THUMB_TOP, Thumb.END); + } + }; + /** + * Converts attribute value to a number, e.g. '100' => 100. Throws errors + * for invalid values. + * @param attributeValue Attribute value, e.g. 100. + * @param attributeName Attribute name, e.g. `aria-valuemax`. + */ + MDCSliderFoundation.prototype.convertAttributeValueToNumber = function (attributeValue, attributeName) { + if (attributeValue === null) { + throw new Error('MDCSliderFoundation: `' + attributeName + '` must be non-null.'); + } + var value = Number(attributeValue); + if (isNaN(value)) { + throw new Error('MDCSliderFoundation: `' + attributeName + '` value is `' + + attributeValue + '`, but must be a number.'); + } + return value; + }; + /** Checks that the given properties are valid slider values. */ + MDCSliderFoundation.prototype.validateProperties = function (_a) { + var min = _a.min, max = _a.max, value = _a.value, valueStart = _a.valueStart, step = _a.step, minRange = _a.minRange; + if (min >= max) { + throw new Error("MDCSliderFoundation: min must be strictly less than max. " + + ("Current: [min: " + min + ", max: " + max + "]")); + } + if (step <= 0) { + throw new Error("MDCSliderFoundation: step must be a positive number. " + + ("Current step: " + step)); + } + if (this.isRange) { + if (value < min || value > max || valueStart < min || valueStart > max) { + throw new Error("MDCSliderFoundation: values must be in [min, max] range. " + + ("Current values: [start value: " + valueStart + ", end value: ") + + (value + ", min: " + min + ", max: " + max + "]")); + } + if (valueStart > value) { + throw new Error("MDCSliderFoundation: start value must be <= end value. " + + ("Current values: [start value: " + valueStart + ", end value: " + value + "]")); + } + if (minRange < 0) { + throw new Error("MDCSliderFoundation: minimum range must be non-negative. " + + ("Current min range: " + minRange)); + } + if (value - valueStart < minRange) { + throw new Error("MDCSliderFoundation: start value and end value must differ by at least " + + (minRange + ". Current values: [start value: " + valueStart + ", ") + + ("end value: " + value + "]")); + } + var numStepsValueStartFromMin = (valueStart - min) / step; + var numStepsValueFromMin = (value - min) / step; + if (!Number.isInteger(parseFloat(numStepsValueStartFromMin.toFixed(6))) || + !Number.isInteger(parseFloat(numStepsValueFromMin.toFixed(6)))) { + throw new Error("MDCSliderFoundation: Slider values must be valid based on the " + + ("step value (" + step + "). Current values: [start value: ") + + (valueStart + ", end value: " + value + ", min: " + min + "]")); + } + } + else { // Single point slider. + if (value < min || value > max) { + throw new Error("MDCSliderFoundation: value must be in [min, max] range. " + + ("Current values: [value: " + value + ", min: " + min + ", max: " + max + "]")); + } + var numStepsValueFromMin = (value - min) / step; + if (!Number.isInteger(parseFloat(numStepsValueFromMin.toFixed(6)))) { + throw new Error("MDCSliderFoundation: Slider value must be valid based on the " + + ("step value (" + step + "). Current value: " + value)); + } + } + }; + MDCSliderFoundation.prototype.registerEventHandlers = function () { + this.adapter.registerWindowEventHandler('resize', this.resizeListener); + if (MDCSliderFoundation.SUPPORTS_POINTER_EVENTS) { + // If supported, use pointer events API with #setPointerCapture. + this.adapter.registerEventHandler('pointerdown', this.pointerdownListener); + this.adapter.registerEventHandler('pointerup', this.pointerupListener); + } + else { + // Otherwise, fall back to mousedown/touchstart events. + this.adapter.registerEventHandler('mousedown', this.mousedownOrTouchstartListener); + this.adapter.registerEventHandler('touchstart', this.mousedownOrTouchstartListener); + } + if (this.isRange) { + this.adapter.registerThumbEventHandler(Thumb.START, 'mouseenter', this.thumbMouseenterListener); + this.adapter.registerThumbEventHandler(Thumb.START, 'mouseleave', this.thumbMouseleaveListener); + this.adapter.registerInputEventHandler(Thumb.START, 'change', this.inputStartChangeListener); + this.adapter.registerInputEventHandler(Thumb.START, 'focus', this.inputStartFocusListener); + this.adapter.registerInputEventHandler(Thumb.START, 'blur', this.inputStartBlurListener); + } + this.adapter.registerThumbEventHandler(Thumb.END, 'mouseenter', this.thumbMouseenterListener); + this.adapter.registerThumbEventHandler(Thumb.END, 'mouseleave', this.thumbMouseleaveListener); + this.adapter.registerInputEventHandler(Thumb.END, 'change', this.inputEndChangeListener); + this.adapter.registerInputEventHandler(Thumb.END, 'focus', this.inputEndFocusListener); + this.adapter.registerInputEventHandler(Thumb.END, 'blur', this.inputEndBlurListener); + }; + MDCSliderFoundation.prototype.deregisterEventHandlers = function () { + this.adapter.deregisterWindowEventHandler('resize', this.resizeListener); + if (MDCSliderFoundation.SUPPORTS_POINTER_EVENTS) { + this.adapter.deregisterEventHandler('pointerdown', this.pointerdownListener); + this.adapter.deregisterEventHandler('pointerup', this.pointerupListener); + } + else { + this.adapter.deregisterEventHandler('mousedown', this.mousedownOrTouchstartListener); + this.adapter.deregisterEventHandler('touchstart', this.mousedownOrTouchstartListener); + } + if (this.isRange) { + this.adapter.deregisterThumbEventHandler(Thumb.START, 'mouseenter', this.thumbMouseenterListener); + this.adapter.deregisterThumbEventHandler(Thumb.START, 'mouseleave', this.thumbMouseleaveListener); + this.adapter.deregisterInputEventHandler(Thumb.START, 'change', this.inputStartChangeListener); + this.adapter.deregisterInputEventHandler(Thumb.START, 'focus', this.inputStartFocusListener); + this.adapter.deregisterInputEventHandler(Thumb.START, 'blur', this.inputStartBlurListener); + } + this.adapter.deregisterThumbEventHandler(Thumb.END, 'mouseenter', this.thumbMouseenterListener); + this.adapter.deregisterThumbEventHandler(Thumb.END, 'mouseleave', this.thumbMouseleaveListener); + this.adapter.deregisterInputEventHandler(Thumb.END, 'change', this.inputEndChangeListener); + this.adapter.deregisterInputEventHandler(Thumb.END, 'focus', this.inputEndFocusListener); + this.adapter.deregisterInputEventHandler(Thumb.END, 'blur', this.inputEndBlurListener); + }; + MDCSliderFoundation.prototype.handlePointerup = function () { + this.handleUp(); + this.adapter.deregisterEventHandler('pointermove', this.moveListener); + }; + MDCSliderFoundation.SUPPORTS_POINTER_EVENTS = HAS_WINDOW && Boolean(window.PointerEvent) && + // #setPointerCapture is buggy on iOS, so we can't use pointer events + // until the following bug is fixed: + // https://bugs.webkit.org/show_bug.cgi?id=220196 + !isIOS(); + return MDCSliderFoundation; +}(MDCFoundation)); + +function isIOS() { + // Source: + // https://stackoverflow.com/questions/9038625/detect-if-device-is-ios + return [ + 'iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', + 'iPod' + ].includes(navigator.platform) + // iPad on iOS 13 detection + || (navigator.userAgent.includes('Mac') && 'ontouchend' in document); +} +/** + * Given a number, returns the number of digits that appear after the + * decimal point. + * See + * https://stackoverflow.com/questions/9539513/is-there-a-reliable-way-in-javascript-to-obtain-the-number-of-decimal-places-of + */ +function getNumDecimalPlaces(n) { + // Pull out the fraction and the exponent. + var match = /(?:\.(\d+))?(?:[eE]([+\-]?\d+))?$/.exec(String(n)); + // NaN or Infinity or integer. + // We arbitrarily decide that Infinity is integral. + if (!match) + return 0; + var fraction = match[1] || ''; // E.g. 1.234e-2 => 234 + var exponent = match[2] || 0; // E.g. 1.234e-2 => -2 + // Count the number of digits in the fraction and subtract the + // exponent to simulate moving the decimal point left by exponent places. + // 1.234e+2 has 1 fraction digit and '234'.length - 2 == 1 + // 1.234e-2 has 5 fraction digit and '234'.length - -2 == 5 + return Math.max(0, // lower limit + (fraction === '0' ? 0 : fraction.length) - Number(exponent)); +} +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/slider/component.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + + + + +/** Vanilla JS implementation of slider component. */ +var MDCSlider = /** @class */ (function (_super) { + tslib_es6_extends(MDCSlider, _super); + function MDCSlider() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.skipInitialUIUpdate = false; + // Function that maps a slider value to the value of the `aria-valuetext` + // attribute on the thumb element. + _this.valueToAriaValueTextFn = null; + return _this; + } + MDCSlider.attachTo = function (root, options) { + if (options === void 0) { options = {}; } + return new MDCSlider(root, undefined, options); + }; + MDCSlider.prototype.getDefaultFoundation = function () { + var _this = this; + // tslint:disable:object-literal-sort-keys Methods should be in the same + // order as the adapter interface. + var adapter = { + hasClass: function (className) { return _this.root.classList.contains(className); }, + addClass: function (className) { + _this.root.classList.add(className); + }, + removeClass: function (className) { + _this.root.classList.remove(className); + }, + addThumbClass: function (className, thumb) { + _this.getThumbEl(thumb).classList.add(className); + }, + removeThumbClass: function (className, thumb) { + _this.getThumbEl(thumb).classList.remove(className); + }, + getAttribute: function (attribute) { return _this.root.getAttribute(attribute); }, + getInputValue: function (thumb) { return _this.getInput(thumb).value; }, + setInputValue: function (value, thumb) { + _this.getInput(thumb).value = value; + }, + getInputAttribute: function (attribute, thumb) { + return _this.getInput(thumb).getAttribute(attribute); + }, + setInputAttribute: function (attribute, value, thumb) { + _this.getInput(thumb).setAttribute(attribute, value); + }, + removeInputAttribute: function (attribute, thumb) { + _this.getInput(thumb).removeAttribute(attribute); + }, + focusInput: function (thumb) { + _this.getInput(thumb).focus(); + }, + isInputFocused: function (thumb) { + return _this.getInput(thumb) === document.activeElement; + }, + shouldHideFocusStylesForPointerEvents: function () { return false; }, + getThumbKnobWidth: function (thumb) { + return _this.getThumbEl(thumb) + .querySelector("." + slider_constants_cssClasses.THUMB_KNOB) + .getBoundingClientRect() + .width; + }, + getThumbBoundingClientRect: function (thumb) { + return _this.getThumbEl(thumb).getBoundingClientRect(); + }, + getBoundingClientRect: function () { return _this.root.getBoundingClientRect(); }, + getValueIndicatorContainerWidth: function (thumb) { + return _this.getThumbEl(thumb) + .querySelector("." + slider_constants_cssClasses.VALUE_INDICATOR_CONTAINER) + .getBoundingClientRect() + .width; + }, + isRTL: function () { return getComputedStyle(_this.root).direction === 'rtl'; }, + setThumbStyleProperty: function (propertyName, value, thumb) { + _this.getThumbEl(thumb).style.setProperty(propertyName, value); + }, + removeThumbStyleProperty: function (propertyName, thumb) { + _this.getThumbEl(thumb).style.removeProperty(propertyName); + }, + setTrackActiveStyleProperty: function (propertyName, value) { + _this.trackActive.style.setProperty(propertyName, value); + }, + removeTrackActiveStyleProperty: function (propertyName) { + _this.trackActive.style.removeProperty(propertyName); + }, + setValueIndicatorText: function (value, thumb) { + var valueIndicatorEl = _this.getThumbEl(thumb).querySelector("." + slider_constants_cssClasses.VALUE_INDICATOR_TEXT); + valueIndicatorEl.textContent = String(value); + }, + getValueToAriaValueTextFn: function () { return _this.valueToAriaValueTextFn; }, + updateTickMarks: function (tickMarks) { + var tickMarksContainer = _this.root.querySelector("." + slider_constants_cssClasses.TICK_MARKS_CONTAINER); + if (!tickMarksContainer) { + tickMarksContainer = document.createElement('div'); + tickMarksContainer.classList.add(slider_constants_cssClasses.TICK_MARKS_CONTAINER); + var track = _this.root.querySelector("." + slider_constants_cssClasses.TRACK); + track.appendChild(tickMarksContainer); + } + if (tickMarks.length !== tickMarksContainer.children.length) { + while (tickMarksContainer.firstChild) { + tickMarksContainer.removeChild(tickMarksContainer.firstChild); + } + _this.addTickMarks(tickMarksContainer, tickMarks); + } + else { + _this.updateTickMarks(tickMarksContainer, tickMarks); + } + }, + setPointerCapture: function (pointerId) { + _this.root.setPointerCapture(pointerId); + }, + emitChangeEvent: function (value, thumb) { + _this.emit(slider_constants_events.CHANGE, { value: value, thumb: thumb }); + }, + emitInputEvent: function (value, thumb) { + _this.emit(slider_constants_events.INPUT, { value: value, thumb: thumb }); + }, + emitDragStartEvent: function (_, thumb) { + // Emitting event is not yet implemented. See issue: + // https://github.com/material-components/material-components-web/issues/6448 + _this.getRipple(thumb).activate(); + }, + emitDragEndEvent: function (_, thumb) { + // Emitting event is not yet implemented. See issue: + // https://github.com/material-components/material-components-web/issues/6448 + _this.getRipple(thumb).deactivate(); + }, + registerEventHandler: function (evtType, handler) { + _this.listen(evtType, handler); + }, + deregisterEventHandler: function (evtType, handler) { + _this.unlisten(evtType, handler); + }, + registerThumbEventHandler: function (thumb, evtType, handler) { + _this.getThumbEl(thumb).addEventListener(evtType, handler); + }, + deregisterThumbEventHandler: function (thumb, evtType, handler) { + _this.getThumbEl(thumb).removeEventListener(evtType, handler); + }, + registerInputEventHandler: function (thumb, evtType, handler) { + _this.getInput(thumb).addEventListener(evtType, handler); + }, + deregisterInputEventHandler: function (thumb, evtType, handler) { + _this.getInput(thumb).removeEventListener(evtType, handler); + }, + registerBodyEventHandler: function (evtType, handler) { + document.body.addEventListener(evtType, handler); + }, + deregisterBodyEventHandler: function (evtType, handler) { + document.body.removeEventListener(evtType, handler); + }, + registerWindowEventHandler: function (evtType, handler) { + window.addEventListener(evtType, handler); + }, + deregisterWindowEventHandler: function (evtType, handler) { + window.removeEventListener(evtType, handler); + }, + // tslint:enable:object-literal-sort-keys + }; + return new MDCSliderFoundation(adapter); + }; + /** + * Initializes component, with the following options: + * - `skipInitialUIUpdate`: Whether to skip updating the UI when initially + * syncing with the DOM. This should be enabled when the slider position + * is set before component initialization. + */ + MDCSlider.prototype.initialize = function (_a) { + var _b = _a === void 0 ? {} : _a, skipInitialUIUpdate = _b.skipInitialUIUpdate; + this.inputs = + [].slice.call(this.root.querySelectorAll("." + slider_constants_cssClasses.INPUT)); + this.thumbs = + [].slice.call(this.root.querySelectorAll("." + slider_constants_cssClasses.THUMB)); + this.trackActive = + this.root.querySelector("." + slider_constants_cssClasses.TRACK_ACTIVE); + this.ripples = this.createRipples(); + if (skipInitialUIUpdate) { + this.skipInitialUIUpdate = true; + } + }; + MDCSlider.prototype.initialSyncWithDOM = function () { + this.foundation.layout({ skipUpdateUI: this.skipInitialUIUpdate }); + }; + /** Redraws UI based on DOM (e.g. element dimensions, RTL). */ + MDCSlider.prototype.layout = function () { + this.foundation.layout(); + }; + MDCSlider.prototype.getValueStart = function () { + return this.foundation.getValueStart(); + }; + MDCSlider.prototype.setValueStart = function (valueStart) { + this.foundation.setValueStart(valueStart); + }; + MDCSlider.prototype.getValue = function () { + return this.foundation.getValue(); + }; + MDCSlider.prototype.setValue = function (value) { + this.foundation.setValue(value); + }; + /** @return Slider disabled state. */ + MDCSlider.prototype.getDisabled = function () { + return this.foundation.getDisabled(); + }; + /** Sets slider disabled state. */ + MDCSlider.prototype.setDisabled = function (disabled) { + this.foundation.setDisabled(disabled); + }; + /** + * Sets a function that maps the slider value to the value of the + * `aria-valuetext` attribute on the thumb element. + */ + MDCSlider.prototype.setValueToAriaValueTextFn = function (mapFn) { + this.valueToAriaValueTextFn = mapFn; + }; + MDCSlider.prototype.getThumbEl = function (thumb) { + return thumb === Thumb.END ? this.thumbs[this.thumbs.length - 1] : + this.thumbs[0]; + }; + MDCSlider.prototype.getInput = function (thumb) { + return thumb === Thumb.END ? this.inputs[this.inputs.length - 1] : + this.inputs[0]; + }; + MDCSlider.prototype.getRipple = function (thumb) { + return thumb === Thumb.END ? this.ripples[this.ripples.length - 1] : + this.ripples[0]; + }; + /** Adds tick mark elements to the given container. */ + MDCSlider.prototype.addTickMarks = function (tickMarkContainer, tickMarks) { + var fragment = document.createDocumentFragment(); + for (var i = 0; i < tickMarks.length; i++) { + var div = document.createElement('div'); + var tickMarkClass = tickMarks[i] === TickMark.ACTIVE ? + slider_constants_cssClasses.TICK_MARK_ACTIVE : + slider_constants_cssClasses.TICK_MARK_INACTIVE; + div.classList.add(tickMarkClass); + fragment.appendChild(div); + } + tickMarkContainer.appendChild(fragment); + }; + /** Updates tick mark elements' classes in the given container. */ + MDCSlider.prototype.updateTickMarks = function (tickMarkContainer, tickMarks) { + var tickMarkEls = Array.from(tickMarkContainer.children); + for (var i = 0; i < tickMarkEls.length; i++) { + if (tickMarks[i] === TickMark.ACTIVE) { + tickMarkEls[i].classList.add(slider_constants_cssClasses.TICK_MARK_ACTIVE); + tickMarkEls[i].classList.remove(slider_constants_cssClasses.TICK_MARK_INACTIVE); + } + else { + tickMarkEls[i].classList.add(slider_constants_cssClasses.TICK_MARK_INACTIVE); + tickMarkEls[i].classList.remove(slider_constants_cssClasses.TICK_MARK_ACTIVE); + } + } + }; + /** Initializes thumb ripples. */ + MDCSlider.prototype.createRipples = function () { + var ripples = []; + var rippleSurfaces = [].slice.call(this.root.querySelectorAll("." + slider_constants_cssClasses.THUMB)); + var _loop_1 = function (i) { + var rippleSurface = rippleSurfaces[i]; + // Use the corresponding input as the focus source for the ripple (i.e. + // when the input is focused, the ripple is in the focused state). + var input = this_1.inputs[i]; + var adapter = __assign(__assign({}, MDCRipple.createAdapter(this_1)), { addClass: function (className) { + rippleSurface.classList.add(className); + }, computeBoundingRect: function () { return rippleSurface.getBoundingClientRect(); }, deregisterInteractionHandler: function (evtType, handler) { + input.removeEventListener(evtType, handler); + }, isSurfaceActive: function () { return matches(input, ':active'); }, isUnbounded: function () { return true; }, registerInteractionHandler: function (evtType, handler) { + input.addEventListener(evtType, handler, applyPassive()); + }, removeClass: function (className) { + rippleSurface.classList.remove(className); + }, updateCssVariable: function (varName, value) { + rippleSurface.style.setProperty(varName, value); + } }); + var ripple = new MDCRipple(rippleSurface, new MDCRippleFoundation(adapter)); + ripple.unbounded = true; + ripples.push(ripple); + }; + var this_1 = this; + for (var i = 0; i < rippleSurfaces.length; i++) { + _loop_1(i); + } + return ripples; + }; + return MDCSlider; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js +function _typeof(o) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { + return typeof o; + } : function (o) { + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; + }, _typeof(o); +} +;// CONCATENATED MODULE: ./Scripts/lodashparts.ts + +/** + * @license + * + * This file is based on https://github.com/lodash/lodash and thus licensed as follows. + * The code & license is based on https://github.com/lodash/lodash/tree/2da024c3b4f9947a48517639de7560457cd4ec6c + * + * The MIT License + * + * Copyright JS Foundation and other contributors + * + * Based on Underscore.js, copyright Jeremy Ashkenas, + * DocumentCloud and Investigative Reporters & Editors + * + * This software consists of voluntary contributions made by many + * individuals. For exact contribution history, see the revision history + * available at https://github.com/lodash/lodash + * + * The following license applies to all parts of this software except as + * documented below: + * + * ==== + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ==== + * + * Copyright and related rights for sample code are waived via CC0. Sample + * code is defined as all source code displayed within the prose of the + * documentation. + * + * CC0: http://creativecommons.org/publicdomain/zero/1.0/ + * + * ==== + * + * Files located in the node_modules and vendor directories are externally + * maintained libraries used by this software which have their own + * licenses; we recommend you read them, as their terms may differ from the + * terms above. + * + */ + +//BEGIN https://github.com/lodash/lodash/blob/master/isObject.js +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * isObject({}) + * // => true + * + * isObject([1, 2, 3]) + * // => true + * + * isObject(Function) + * // => true + * + * isObject(null) + * // => false + */ +function isObject(value) { + var type = _typeof(value); + return value != null && (type === 'object' || type === 'function'); +} +//END https://github.com/lodash/lodash/blob/master/isObject.js + +//BEGIN https://github.com/lodash/lodash/blob/master/.internal/freeGlobal.js +var freeGlobal = (typeof __webpack_require__.g === "undefined" ? "undefined" : _typeof(__webpack_require__.g)) === 'object' && __webpack_require__.g !== null && __webpack_require__.g.Object === Object && __webpack_require__.g; +//END https://github.com/lodash/lodash/blob/master/.internal/freeGlobal.js + +//BEGIN https://github.com/lodash/lodash/blob/master/.internal/root.js +/** Detect free variable `globalThis` */ +var freeGlobalThis = (typeof globalThis === "undefined" ? "undefined" : _typeof(globalThis)) === 'object' && globalThis !== null && globalThis.Object == Object && globalThis; + +/** Detect free variable `self`. */ +var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof(self)) === 'object' && self !== null && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobalThis || freeGlobal || freeSelf || Function('return this')(); +//END https://github.com/lodash/lodash/blob/master/.internal/root.js + +//BEGIN https://github.com/lodash/lodash/blob/master/debounce.js +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked, or until the next browser frame is drawn. The debounced function + * comes with a `cancel` method to cancel delayed `func` invocations and a + * `flush` method to immediately invoke them. Provide `options` to indicate + * whether `func` should be invoked on the leading and/or trailing edge of the + * `wait` timeout. The `func` is invoked with the last arguments provided to the + * debounced function. Subsequent calls to the debounced function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until the next tick, similar to `setTimeout` with a timeout of `0`. + * + * If `wait` is omitted in an environment with `requestAnimationFrame`, `func` + * invocation will be deferred until the next frame is drawn (typically about + * 16ms). + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `debounce` and `throttle`. + * + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] + * The number of milliseconds to delay; if omitted, `requestAnimationFrame` is + * used (if available). + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', debounce(calculateLayout, 150)) + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })) + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * const debounced = debounce(batchLog, 250, { 'maxWait': 1000 }) + * const source = new EventSource('/stream') + * jQuery(source).on('message', debounced) + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel) + * + * // Check for pending invocations. + * const status = debounced.pending() ? "Pending..." : "Ready" + */ +function debounce(func, wait, options) { + var lastArgs, lastThis, maxWait, result, timerId, lastCallTime; + var lastInvokeTime = 0; + var leading = false; + var maxing = false; + var trailing = true; + + // Bypass `requestAnimationFrame` by explicitly setting `wait=0`. + var useRAF = !wait && wait !== 0 && typeof root.requestAnimationFrame === 'function'; + if (typeof func !== 'function') { + throw new TypeError('Expected a function'); + } + wait = +wait || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + function invokeFunc(time) { + var args = lastArgs; + var thisArg = lastThis; + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + function startTimer(pendingFunc, wait) { + if (useRAF) { + root.cancelAnimationFrame(timerId); + return root.requestAnimationFrame(pendingFunc); + } + return setTimeout(pendingFunc, wait); + } + function cancelTimer(id) { + if (useRAF) { + return root.cancelAnimationFrame(id); + } + clearTimeout(id); + } + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = startTimer(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime; + var timeSinceLastInvoke = time - lastInvokeTime; + var timeWaiting = wait - timeSinceLastCall; + return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; + } + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime; + var timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; + } + function timerExpired() { + var time = Date.now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = startTimer(timerExpired, remainingWait(time)); + } + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + function cancel() { + if (timerId !== undefined) { + cancelTimer(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + function flush() { + return timerId === undefined ? result : trailingEdge(Date.now()); + } + function pending() { + return timerId !== undefined; + } + function debounced() { + var time = Date.now(); + var isInvoking = shouldInvoke(time); + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + lastArgs = args; + lastThis = this; + lastCallTime = time; + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + timerId = startTimer(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = startTimer(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + debounced.pending = pending; + return debounced; +} +// END https://github.com/lodash/lodash/blob/master/debounce.js + +//BEGIN https://github.com/lodash/lodash/blob/master/throttle.js +/** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds (or once per browser frame). The throttled function + * comes with a `cancel` method to cancel delayed `func` invocations and a + * `flush` method to immediately invoke them. Provide `options` to indicate + * whether `func` should be invoked on the leading and/or trailing edge of the + * `wait` timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until the next tick, similar to `setTimeout` with a timeout of `0`. + * + * If `wait` is omitted in an environment with `requestAnimationFrame`, `func` + * invocation will be deferred until the next frame is drawn (typically about + * 16ms). + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `throttle` and `debounce`. + * + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] + * The number of milliseconds to throttle invocations to; if omitted, + * `requestAnimationFrame` is used (if available). + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', throttle(updatePosition, 100)) + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * const throttled = throttle(renewToken, 300000, { 'trailing': false }) + * jQuery(element).on('click', throttled) + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel) + */ +function throttle(func, wait, options) { + var leading = true; + var trailing = true; + if (typeof func !== 'function') { + throw new TypeError('Expected a function'); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + leading: leading, + trailing: trailing, + 'maxWait': wait + }); +} +//END https://github.com/lodash/lodash/blob/master/throttle.js + + +;// CONCATENATED MODULE: ./Scripts/rtl.ts +function isDocumentRTL() { + var dir = document.documentElement.getAttribute("dir"); + return !dir || dir.toLowerCase() === "rtl"; +} +function isElementRTL(elem) { + if (!elem) { + return false; + } + var dirElem = elem; + var dir = ""; + for (; dirElem && dirElem !== document && (!dir || dir === ""); dirElem = dirElem.parentNode) { + dir = dirElem.getAttribute("dir"); + if (dir && dir.length > 0) { + dir = dir.toLowerCase(); + if (dir === "ltr" || dir === "auto") { + break; + } + } + } + return dir !== null && dir.toLowerCase() === "rtl"; +} +;// CONCATENATED MODULE: ./Components/Slider/MBSlider.ts + + + +function MBSlider_init(mainElem, thumbElem, thumbOffset, dotNetObject, eventType, delay, disabled) { + if (!mainElem || !thumbElem) { + return; + } + thumbElem.style = (isElementRTL(mainElem) ? "right: " : "left: ") + thumbOffset; + mainElem._slider = MDCSlider.attachTo(mainElem); + mainElem._eventType = eventType; + if (eventType == 0) { + var thumbUpCallback = function thumbUpCallback() { + dotNetObject.invokeMethodAsync('NotifyChanged', mainElem._slider.getValue()); + }; + mainElem._slider.listen('MDCSlider:change', thumbUpCallback); + } else if (eventType == 1) { + var debounceNotify = debounce(function () { + dotNetObject.invokeMethodAsync('NotifyChanged', mainElem._slider.getValue()); + }, delay, {}); + mainElem._slider.listen('MDCSlider:input', debounceNotify); + } else { + var throttleNotify = throttle(function () { + dotNetObject.invokeMethodAsync('NotifyChanged', mainElem._slider.getValue()); + }, delay, {}); + mainElem._slider.listen('MDCSlider:input', throttleNotify); + } + mainElem._slider.setDisabled(disabled); +} +function MBSlider_setValue(elem, value) { + if (!elem) { + return; + } + elem._slider.setValue(value); +} +function MBSlider_setDisabled(elem, disabled) { + if (!elem) { + return; + } + elem._slider.setDisabled(disabled); +} +;// CONCATENATED MODULE: ./node_modules/@material/snackbar/constants.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var snackbar_constants_cssClasses = { + CLOSING: 'mdc-snackbar--closing', + OPEN: 'mdc-snackbar--open', + OPENING: 'mdc-snackbar--opening', +}; +var snackbar_constants_strings = { + ACTION_SELECTOR: '.mdc-snackbar__action', + ARIA_LIVE_LABEL_TEXT_ATTR: 'data-mdc-snackbar-label-text', + CLOSED_EVENT: 'MDCSnackbar:closed', + CLOSING_EVENT: 'MDCSnackbar:closing', + DISMISS_SELECTOR: '.mdc-snackbar__dismiss', + LABEL_SELECTOR: '.mdc-snackbar__label', + OPENED_EVENT: 'MDCSnackbar:opened', + OPENING_EVENT: 'MDCSnackbar:opening', + REASON_ACTION: 'action', + REASON_DISMISS: 'dismiss', + SURFACE_SELECTOR: '.mdc-snackbar__surface', +}; +var snackbar_constants_numbers = { + DEFAULT_AUTO_DISMISS_TIMEOUT_MS: 5000, + INDETERMINATE: -1, + MAX_AUTO_DISMISS_TIMEOUT_MS: 10000, + MIN_AUTO_DISMISS_TIMEOUT_MS: 4000, + // These variables need to be kept in sync with the values in _variables.scss. + SNACKBAR_ANIMATION_CLOSE_TIME_MS: 75, + SNACKBAR_ANIMATION_OPEN_TIME_MS: 150, + /** + * Number of milliseconds to wait between temporarily clearing the label text + * in the DOM and subsequently restoring it. This is necessary to force IE 11 + * to pick up the `aria-live` content change and announce it to the user. + */ + ARIA_LIVE_DELAY_MS: 1000, +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/snackbar/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var OPENING = snackbar_constants_cssClasses.OPENING, OPEN = snackbar_constants_cssClasses.OPEN, CLOSING = snackbar_constants_cssClasses.CLOSING; +var REASON_ACTION = snackbar_constants_strings.REASON_ACTION, REASON_DISMISS = snackbar_constants_strings.REASON_DISMISS; +var MDCSnackbarFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCSnackbarFoundation, _super); + function MDCSnackbarFoundation(adapter) { + var _this = _super.call(this, __assign(__assign({}, MDCSnackbarFoundation.defaultAdapter), adapter)) || this; + _this.opened = false; + _this.animationFrame = 0; + _this.animationTimer = 0; + _this.autoDismissTimer = 0; + _this.autoDismissTimeoutMs = snackbar_constants_numbers.DEFAULT_AUTO_DISMISS_TIMEOUT_MS; + _this.closeOnEscape = true; + return _this; + } + Object.defineProperty(MDCSnackbarFoundation, "cssClasses", { + get: function () { + return snackbar_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCSnackbarFoundation, "strings", { + get: function () { + return snackbar_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCSnackbarFoundation, "numbers", { + get: function () { + return snackbar_constants_numbers; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCSnackbarFoundation, "defaultAdapter", { + get: function () { + return { + addClass: function () { return undefined; }, + announce: function () { return undefined; }, + notifyClosed: function () { return undefined; }, + notifyClosing: function () { return undefined; }, + notifyOpened: function () { return undefined; }, + notifyOpening: function () { return undefined; }, + removeClass: function () { return undefined; }, + }; + }, + enumerable: false, + configurable: true + }); + MDCSnackbarFoundation.prototype.destroy = function () { + this.clearAutoDismissTimer(); + cancelAnimationFrame(this.animationFrame); + this.animationFrame = 0; + clearTimeout(this.animationTimer); + this.animationTimer = 0; + this.adapter.removeClass(OPENING); + this.adapter.removeClass(OPEN); + this.adapter.removeClass(CLOSING); + }; + MDCSnackbarFoundation.prototype.open = function () { + var _this = this; + this.clearAutoDismissTimer(); + this.opened = true; + this.adapter.notifyOpening(); + this.adapter.removeClass(CLOSING); + this.adapter.addClass(OPENING); + this.adapter.announce(); + // Wait a frame once display is no longer "none", to establish basis for animation + this.runNextAnimationFrame(function () { + _this.adapter.addClass(OPEN); + _this.animationTimer = setTimeout(function () { + var timeoutMs = _this.getTimeoutMs(); + _this.handleAnimationTimerEnd(); + _this.adapter.notifyOpened(); + if (timeoutMs !== snackbar_constants_numbers.INDETERMINATE) { + _this.autoDismissTimer = setTimeout(function () { + _this.close(REASON_DISMISS); + }, timeoutMs); + } + }, snackbar_constants_numbers.SNACKBAR_ANIMATION_OPEN_TIME_MS); + }); + }; + /** + * @param reason Why the snackbar was closed. Value will be passed to CLOSING_EVENT and CLOSED_EVENT via the + * `event.detail.reason` property. Standard values are REASON_ACTION and REASON_DISMISS, but custom + * client-specific values may also be used if desired. + */ + MDCSnackbarFoundation.prototype.close = function (reason) { + var _this = this; + if (reason === void 0) { reason = ''; } + if (!this.opened) { + // Avoid redundant close calls (and events), e.g. repeated interactions as the snackbar is animating closed + return; + } + cancelAnimationFrame(this.animationFrame); + this.animationFrame = 0; + this.clearAutoDismissTimer(); + this.opened = false; + this.adapter.notifyClosing(reason); + this.adapter.addClass(snackbar_constants_cssClasses.CLOSING); + this.adapter.removeClass(snackbar_constants_cssClasses.OPEN); + this.adapter.removeClass(snackbar_constants_cssClasses.OPENING); + clearTimeout(this.animationTimer); + this.animationTimer = setTimeout(function () { + _this.handleAnimationTimerEnd(); + _this.adapter.notifyClosed(reason); + }, snackbar_constants_numbers.SNACKBAR_ANIMATION_CLOSE_TIME_MS); + }; + MDCSnackbarFoundation.prototype.isOpen = function () { + return this.opened; + }; + MDCSnackbarFoundation.prototype.getTimeoutMs = function () { + return this.autoDismissTimeoutMs; + }; + MDCSnackbarFoundation.prototype.setTimeoutMs = function (timeoutMs) { + // Use shorter variable names to make the code more readable + var minValue = snackbar_constants_numbers.MIN_AUTO_DISMISS_TIMEOUT_MS; + var maxValue = snackbar_constants_numbers.MAX_AUTO_DISMISS_TIMEOUT_MS; + var indeterminateValue = snackbar_constants_numbers.INDETERMINATE; + if (timeoutMs === snackbar_constants_numbers.INDETERMINATE || (timeoutMs <= maxValue && timeoutMs >= minValue)) { + this.autoDismissTimeoutMs = timeoutMs; + } + else { + throw new Error("\n timeoutMs must be an integer in the range " + minValue + "\u2013" + maxValue + "\n (or " + indeterminateValue + " to disable), but got '" + timeoutMs + "'"); + } + }; + MDCSnackbarFoundation.prototype.getCloseOnEscape = function () { + return this.closeOnEscape; + }; + MDCSnackbarFoundation.prototype.setCloseOnEscape = function (closeOnEscape) { + this.closeOnEscape = closeOnEscape; + }; + MDCSnackbarFoundation.prototype.handleKeyDown = function (evt) { + var isEscapeKey = evt.key === 'Escape' || evt.keyCode === 27; + if (isEscapeKey && this.getCloseOnEscape()) { + this.close(REASON_DISMISS); + } + }; + MDCSnackbarFoundation.prototype.handleActionButtonClick = function (_evt) { + this.close(REASON_ACTION); + }; + MDCSnackbarFoundation.prototype.handleActionIconClick = function (_evt) { + this.close(REASON_DISMISS); + }; + MDCSnackbarFoundation.prototype.clearAutoDismissTimer = function () { + clearTimeout(this.autoDismissTimer); + this.autoDismissTimer = 0; + }; + MDCSnackbarFoundation.prototype.handleAnimationTimerEnd = function () { + this.animationTimer = 0; + this.adapter.removeClass(snackbar_constants_cssClasses.OPENING); + this.adapter.removeClass(snackbar_constants_cssClasses.CLOSING); + }; + /** + * Runs the given logic on the next animation frame, using setTimeout to factor in Firefox reflow behavior. + */ + MDCSnackbarFoundation.prototype.runNextAnimationFrame = function (callback) { + var _this = this; + cancelAnimationFrame(this.animationFrame); + this.animationFrame = requestAnimationFrame(function () { + _this.animationFrame = 0; + clearTimeout(_this.animationTimer); + _this.animationTimer = setTimeout(callback, 0); + }); + }; + return MDCSnackbarFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const snackbar_foundation = ((/* unused pure expression or super */ null && (MDCSnackbarFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/snackbar/util.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +var ARIA_LIVE_DELAY_MS = snackbar_constants_numbers.ARIA_LIVE_DELAY_MS; +var ARIA_LIVE_LABEL_TEXT_ATTR = snackbar_constants_strings.ARIA_LIVE_LABEL_TEXT_ATTR; +function announce(ariaEl, labelEl) { + if (labelEl === void 0) { labelEl = ariaEl; } + var priority = ariaEl.getAttribute('aria-live'); + // Trim text to ignore ` ` (see below). + // textContent is only null if the node is a document, DOCTYPE, or notation. + var labelText = labelEl.textContent.trim(); + if (!labelText || !priority) { + return; + } + // Temporarily disable `aria-live` to prevent JAWS+Firefox from announcing the message twice. + ariaEl.setAttribute('aria-live', 'off'); + // Temporarily clear `textContent` to force a DOM mutation event that will be detected by screen readers. + // `aria-live` elements are only announced when the element's `textContent` *changes*, so snackbars + // sent to the browser in the initial HTML response won't be read unless we clear the element's `textContent` first. + // Similarly, displaying the same snackbar message twice in a row doesn't trigger a DOM mutation event, + // so screen readers won't announce the second message unless we first clear `textContent`. + // + // We have to clear the label text two different ways to make it work in all browsers and screen readers: + // + // 1. `textContent = ''` is required for IE11 + JAWS + // 2. `innerHTML = ' '` is required for Chrome + JAWS and NVDA + // + // All other browser/screen reader combinations support both methods. + // + // The wrapper `` visually hides the space character so that it doesn't cause jank when added/removed. + // N.B.: Setting `position: absolute`, `opacity: 0`, or `height: 0` prevents Chrome from detecting the DOM change. + // + // This technique has been tested in: + // + // * JAWS 2019: + // - Chrome 70 + // - Firefox 60 (ESR) + // - IE 11 + // * NVDA 2018: + // - Chrome 70 + // - Firefox 60 (ESR) + // - IE 11 + // * ChromeVox 53 + labelEl.textContent = ''; + // For the second case, assigning a string directly to innerHTML results in a + // Trusted Types violation. Work around that by using document.createElement. + var span = document.createElement('span'); + span.setAttribute('style', 'display: inline-block; width: 0; height: 1px;'); + span.textContent = '\u00a0'; // Equivalent to   + labelEl.appendChild(span); + // Prevent visual jank by temporarily displaying the label text in the ::before pseudo-element. + // CSS generated content is normally announced by screen readers + // (except in IE 11; see https://tink.uk/accessibility-support-for-css-generated-content/); + // however, `aria-live` is turned off, so this DOM update will be ignored by screen readers. + labelEl.setAttribute(ARIA_LIVE_LABEL_TEXT_ATTR, labelText); + setTimeout(function () { + // Allow screen readers to announce changes to the DOM again. + ariaEl.setAttribute('aria-live', priority); + // Remove the message from the ::before pseudo-element. + labelEl.removeAttribute(ARIA_LIVE_LABEL_TEXT_ATTR); + // Restore the original label text, which will be announced by screen readers. + labelEl.textContent = labelText; + }, ARIA_LIVE_DELAY_MS); +} + +//# sourceMappingURL=util.js.map +;// CONCATENATED MODULE: ./node_modules/@material/snackbar/component.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + +var SURFACE_SELECTOR = snackbar_constants_strings.SURFACE_SELECTOR, LABEL_SELECTOR = snackbar_constants_strings.LABEL_SELECTOR, ACTION_SELECTOR = snackbar_constants_strings.ACTION_SELECTOR, DISMISS_SELECTOR = snackbar_constants_strings.DISMISS_SELECTOR, OPENING_EVENT = snackbar_constants_strings.OPENING_EVENT, OPENED_EVENT = snackbar_constants_strings.OPENED_EVENT, CLOSING_EVENT = snackbar_constants_strings.CLOSING_EVENT, CLOSED_EVENT = snackbar_constants_strings.CLOSED_EVENT; +var MDCSnackbar = /** @class */ (function (_super) { + tslib_es6_extends(MDCSnackbar, _super); + function MDCSnackbar() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCSnackbar.attachTo = function (root) { + return new MDCSnackbar(root); + }; + MDCSnackbar.prototype.initialize = function (announcerFactory) { + if (announcerFactory === void 0) { announcerFactory = function () { return announce; }; } + this.announce = announcerFactory(); + }; + MDCSnackbar.prototype.initialSyncWithDOM = function () { + var _this = this; + this.surfaceEl = this.root.querySelector(SURFACE_SELECTOR); + this.labelEl = this.root.querySelector(LABEL_SELECTOR); + this.actionEl = this.root.querySelector(ACTION_SELECTOR); + this.handleKeyDown = function (evt) { + _this.foundation.handleKeyDown(evt); + }; + this.handleSurfaceClick = function (evt) { + var target = evt.target; + if (_this.isActionButton(target)) { + _this.foundation.handleActionButtonClick(evt); + } + else if (_this.isActionIcon(target)) { + _this.foundation.handleActionIconClick(evt); + } + }; + this.registerKeyDownHandler(this.handleKeyDown); + this.registerSurfaceClickHandler(this.handleSurfaceClick); + }; + MDCSnackbar.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.deregisterKeyDownHandler(this.handleKeyDown); + this.deregisterSurfaceClickHandler(this.handleSurfaceClick); + }; + MDCSnackbar.prototype.open = function () { + this.foundation.open(); + }; + /** + * @param reason Why the snackbar was closed. Value will be passed to CLOSING_EVENT and CLOSED_EVENT via the + * `event.detail.reason` property. Standard values are REASON_ACTION and REASON_DISMISS, but custom + * client-specific values may also be used if desired. + */ + MDCSnackbar.prototype.close = function (reason) { + if (reason === void 0) { reason = ''; } + this.foundation.close(reason); + }; + MDCSnackbar.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + var adapter = { + addClass: function (className) { + _this.root.classList.add(className); + }, + announce: function () { + _this.announce(_this.labelEl); + }, + notifyClosed: function (reason) { return _this.emit(CLOSED_EVENT, reason ? { reason: reason } : {}); }, + notifyClosing: function (reason) { return _this.emit(CLOSING_EVENT, reason ? { reason: reason } : {}); }, + notifyOpened: function () { return _this.emit(OPENED_EVENT, {}); }, + notifyOpening: function () { return _this.emit(OPENING_EVENT, {}); }, + removeClass: function (className) { return _this.root.classList.remove(className); }, + }; + return new MDCSnackbarFoundation(adapter); + }; + Object.defineProperty(MDCSnackbar.prototype, "timeoutMs", { + get: function () { + return this.foundation.getTimeoutMs(); + }, + set: function (timeoutMs) { + this.foundation.setTimeoutMs(timeoutMs); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCSnackbar.prototype, "closeOnEscape", { + get: function () { + return this.foundation.getCloseOnEscape(); + }, + set: function (closeOnEscape) { + this.foundation.setCloseOnEscape(closeOnEscape); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCSnackbar.prototype, "isOpen", { + get: function () { + return this.foundation.isOpen(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCSnackbar.prototype, "labelText", { + get: function () { + // This property only returns null if the node is a document, DOCTYPE, + // or notation. On Element nodes, it always returns a string. + return this.labelEl.textContent; + }, + set: function (labelText) { + this.labelEl.textContent = labelText; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCSnackbar.prototype, "actionButtonText", { + get: function () { + return this.actionEl.textContent; + }, + set: function (actionButtonText) { + this.actionEl.textContent = actionButtonText; + }, + enumerable: false, + configurable: true + }); + MDCSnackbar.prototype.registerKeyDownHandler = function (handler) { + this.listen('keydown', handler); + }; + MDCSnackbar.prototype.deregisterKeyDownHandler = function (handler) { + this.unlisten('keydown', handler); + }; + MDCSnackbar.prototype.registerSurfaceClickHandler = function (handler) { + this.surfaceEl.addEventListener('click', handler); + }; + MDCSnackbar.prototype.deregisterSurfaceClickHandler = function (handler) { + this.surfaceEl.removeEventListener('click', handler); + }; + MDCSnackbar.prototype.isActionButton = function (target) { + return Boolean(closest(target, ACTION_SELECTOR)); + }; + MDCSnackbar.prototype.isActionIcon = function (target) { + return Boolean(closest(target, DISMISS_SELECTOR)); + }; + return MDCSnackbar; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./Components/Snackbar/MBSnackbar.ts + +function MBSnackbar_init(elem, dotnetReference, timeoutMs) { + if (!elem) { + return; + } + elem._snackbar = new MDCSnackbar(elem); + elem._snackbar.listen('MDCSnackbar:closed', function (r) { + dotnetReference.invokeMethodAsync('Closed', r); + }); + elem._snackbar.timeoutMs = timeoutMs; + elem._snackbar.open(); +} +;// CONCATENATED MODULE: ./node_modules/@material/switch/constants.js +/** + * @license + * Copyright 2021 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +/** + * CSS classes used for switch. + */ +var CssClasses; +(function (CssClasses) { + CssClasses["PROCESSING"] = "mdc-switch--processing"; + CssClasses["SELECTED"] = "mdc-switch--selected"; + CssClasses["UNSELECTED"] = "mdc-switch--unselected"; +})(CssClasses || (CssClasses = {})); +/** + * Query selectors used for switch. + */ +var Selectors; +(function (Selectors) { + Selectors["RIPPLE"] = ".mdc-switch__ripple"; +})(Selectors || (Selectors = {})); +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/base/observer.js +/** + * @license + * Copyright 2021 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +/** + * Mixin to add `MDCObserver` functionality to an optional base class. + * + * @deprecated Prefer MDCObserverFoundation for stricter closure compliance. + * @template C Optional base class constructor type. + * @param baseClass - Optional base class. + * @return A class that extends the optional base class with `MDCObserver` + * functionality. + */ +function mdcObserver(baseClass) { + if (baseClass === void 0) { baseClass = /** @class */ (function () { + function class_1() { + } + return class_1; + }()); } + // Mixin classes cannot use private members and Symbol() cannot be used in 3P + // for IE11. + var unobserveMap = new WeakMap(); + return /** @class */ (function (_super) { + __extends(MDCObserver, _super); + function MDCObserver() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCObserver.prototype.observe = function (target, observers) { + var e_1, _a; + var _this = this; + var cleanup = []; + try { + for (var _b = __values(Object.keys(observers)), _c = _b.next(); !_c.done; _c = _b.next()) { + var property = _c.value; + var observer = observers[property].bind(this); + cleanup.push(observeProperty(target, property, observer)); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + var unobserve = function () { + var e_2, _a; + try { + for (var cleanup_1 = __values(cleanup), cleanup_1_1 = cleanup_1.next(); !cleanup_1_1.done; cleanup_1_1 = cleanup_1.next()) { + var cleanupFn = cleanup_1_1.value; + cleanupFn(); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (cleanup_1_1 && !cleanup_1_1.done && (_a = cleanup_1.return)) _a.call(cleanup_1); + } + finally { if (e_2) throw e_2.error; } + } + var unobserves = unobserveMap.get(_this) || []; + var index = unobserves.indexOf(unobserve); + if (index > -1) { + unobserves.splice(index, 1); + } + }; + var unobserves = unobserveMap.get(this); + if (!unobserves) { + unobserves = []; + unobserveMap.set(this, unobserves); + } + unobserves.push(unobserve); + return unobserve; + }; + MDCObserver.prototype.setObserversEnabled = function (target, enabled) { + setObserversEnabled(target, enabled); + }; + MDCObserver.prototype.unobserve = function () { + var e_3, _a; + // Iterate over a copy since unobserve() will remove themselves from the + // array + var unobserves = unobserveMap.get(this) || []; + try { + for (var _b = __values(__spreadArray([], __read(unobserves))), _c = _b.next(); !_c.done; _c = _b.next()) { + var unobserve = _c.value; + unobserve(); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_3) throw e_3.error; } + } + }; + return MDCObserver; + }(baseClass)); +} +/** + * Observe a target's property for changes. When a property changes, the + * provided `Observer` function will be invoked with the properties current and + * previous values. + * + * The returned cleanup function will stop listening to changes for the + * provided `Observer`. + * + * @template T The observed target type. + * @template K The observed property. + * @param target - The target to observe. + * @param property - The property of the target to observe. + * @param observer - An observer function to invoke each time the property + * changes. + * @return A cleanup function that will stop observing changes for the provided + * `Observer`. + */ +function observeProperty(target, property, observer) { + var targetObservers = installObserver(target, property); + var observers = targetObservers.getObservers(property); + observers.push(observer); + return function () { + observers.splice(observers.indexOf(observer), 1); + }; +} +/** + * A Map of all `TargetObservers` that have been installed. + */ +var allTargetObservers = new WeakMap(); +/** + * Installs a `TargetObservers` for the provided target (if not already + * installed), and replaces the given property with a getter and setter that + * will respond to changes and call `TargetObservers`. + * + * Subsequent calls to `installObserver()` with the same target and property + * will not override the property's previously installed getter/setter. + * + * @template T The observed target type. + * @template K The observed property to create a getter/setter for. + * @param target - The target to observe. + * @param property - The property to create a getter/setter for, if needed. + * @return The installed `TargetObservers` for the provided target. + */ +function installObserver(target, property) { + var observersMap = new Map(); + if (!allTargetObservers.has(target)) { + allTargetObservers.set(target, { + isEnabled: true, + getObservers: function (key) { + var observers = observersMap.get(key) || []; + if (!observersMap.has(key)) { + observersMap.set(key, observers); + } + return observers; + }, + installedProperties: new Set() + }); + } + var targetObservers = allTargetObservers.get(target); + if (targetObservers.installedProperties.has(property)) { + // The getter/setter has already been replaced for this property + return targetObservers; + } + // Retrieve (or create if it's a plain property) the original descriptor from + // the target... + var descriptor = getDescriptor(target, property) || { + configurable: true, + enumerable: true, + value: target[property], + writable: true + }; + // ...and create a copy that will be used for the observer. + var observedDescriptor = __assign({}, descriptor); + var descGet = descriptor.get, descSet = descriptor.set; + if ('value' in descriptor) { + // The descriptor is a simple value (not a getter/setter). + // For our observer descriptor that we copied, delete the value/writable + // properties, since they are incompatible with the get/set properties + // for descriptors. + delete observedDescriptor.value; + delete observedDescriptor.writable; + // Set up a simple getter... + var value_1 = descriptor.value; + descGet = function () { return value_1; }; + // ...and setter (if the original property was writable). + if (descriptor.writable) { + descSet = function (newValue) { + value_1 = newValue; + }; + } + } + if (descGet) { + observedDescriptor.get = function () { + // `this as T` needed for closure conformance + return descGet.call(this); + }; + } + if (descSet) { + observedDescriptor.set = function (newValue) { + var e_4, _a; + // `thus as T` needed for closure conformance + var previous = descGet ? descGet.call(this) : newValue; + descSet.call(this, newValue); + if (targetObservers.isEnabled && (!descGet || newValue !== previous)) { + try { + for (var _b = tslib_es6_values(targetObservers.getObservers(property)), _c = _b.next(); !_c.done; _c = _b.next()) { + var observer = _c.value; + observer(newValue, previous); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_4) throw e_4.error; } + } + } + }; + } + targetObservers.installedProperties.add(property); + Object.defineProperty(target, property, observedDescriptor); + return targetObservers; +} +/** + * Retrieves the descriptor for a property from the provided target. This + * function will walk up the target's prototype chain to search for the + * descriptor. + * + * @template T The target type. + * @template K The property type. + * @param target - The target to retrieve a descriptor from. + * @param property - The name of the property to retrieve a descriptor for. + * @return the descriptor, or undefined if it does not exist. Keep in mind that + * plain properties may not have a descriptor defined. + */ +function getDescriptor(target, property) { + var descriptorTarget = target; + var descriptor; + while (descriptorTarget) { + descriptor = Object.getOwnPropertyDescriptor(descriptorTarget, property); + if (descriptor) { + break; + } + // Walk up the instance's prototype chain in case the property is declared + // on a superclass. + descriptorTarget = Object.getPrototypeOf(descriptorTarget); + } + return descriptor; +} +/** + * Enables or disables all observers for a provided target. Changes to observed + * properties will not call any observers when disabled. + * + * @template T The observed target type. + * @param target - The target to enable or disable observers for. + * @param enabled - True to enable or false to disable observers. + */ +function setObserversEnabled(target, enabled) { + var targetObservers = allTargetObservers.get(target); + if (targetObservers) { + targetObservers.isEnabled = enabled; + } +} +//# sourceMappingURL=observer.js.map +;// CONCATENATED MODULE: ./node_modules/@material/base/observer-foundation.js +/** + * @license + * Copyright 2021 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCObserverFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCObserverFoundation, _super); + function MDCObserverFoundation(adapter) { + var _this = _super.call(this, adapter) || this; + /** A set of cleanup functions to unobserve changes. */ + _this.unobserves = new Set(); + return _this; + } + MDCObserverFoundation.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.unobserve(); + }; + /** + * Observe a target's properties for changes using the provided map of + * property names and observer functions. + * + * @template T The target type. + * @param target - The target to observe. + * @param observers - An object whose keys are target properties and values + * are observer functions that are called when the associated property + * changes. + * @return A cleanup function that can be called to unobserve the + * target. + */ + MDCObserverFoundation.prototype.observe = function (target, observers) { + var e_1, _a; + var _this = this; + var cleanup = []; + try { + for (var _b = tslib_es6_values(Object.keys(observers)), _c = _b.next(); !_c.done; _c = _b.next()) { + var property = _c.value; + var observer = observers[property].bind(this); + cleanup.push(this.observeProperty(target, property, observer)); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + var unobserve = function () { + var e_2, _a; + try { + for (var cleanup_1 = tslib_es6_values(cleanup), cleanup_1_1 = cleanup_1.next(); !cleanup_1_1.done; cleanup_1_1 = cleanup_1.next()) { + var cleanupFn = cleanup_1_1.value; + cleanupFn(); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (cleanup_1_1 && !cleanup_1_1.done && (_a = cleanup_1.return)) _a.call(cleanup_1); + } + finally { if (e_2) throw e_2.error; } + } + _this.unobserves.delete(unobserve); + }; + this.unobserves.add(unobserve); + return unobserve; + }; + /** + * Observe a target's property for changes. When a property changes, the + * provided `Observer` function will be invoked with the properties current + * and previous values. + * + * The returned cleanup function will stop listening to changes for the + * provided `Observer`. + * + * @template T The observed target type. + * @template K The observed property. + * @param target - The target to observe. + * @param property - The property of the target to observe. + * @param observer - An observer function to invoke each time the property + * changes. + * @return A cleanup function that will stop observing changes for the + * provided `Observer`. + */ + MDCObserverFoundation.prototype.observeProperty = function (target, property, observer) { + return observeProperty(target, property, observer); + }; + /** + * Enables or disables all observers for the provided target. Disabling + * observers will prevent them from being called until they are re-enabled. + * + * @param target - The target to enable or disable observers for. + * @param enabled - Whether or not observers should be called. + */ + MDCObserverFoundation.prototype.setObserversEnabled = function (target, enabled) { + setObserversEnabled(target, enabled); + }; + /** + * Clean up all observers and stop listening for property changes. + */ + MDCObserverFoundation.prototype.unobserve = function () { + var e_3, _a; + try { + // Iterate over a copy since unobserve() will remove themselves from the set + for (var _b = tslib_es6_values(tslib_es6_spreadArray([], tslib_es6_read(this.unobserves))), _c = _b.next(); !_c.done; _c = _b.next()) { + var unobserve = _c.value; + unobserve(); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_3) throw e_3.error; } + } + }; + return MDCObserverFoundation; +}(MDCFoundation)); + +//# sourceMappingURL=observer-foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/switch/foundation.js +/** + * @license + * Copyright 2021 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +/** + * `MDCSwitchFoundation` provides a state-only foundation for a switch + * component. + * + * State observers and event handler entrypoints update a component's adapter's + * state with the logic needed for switch to function. + */ +var MDCSwitchFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCSwitchFoundation, _super); + function MDCSwitchFoundation(adapter) { + var _this = _super.call(this, adapter) || this; + _this.handleClick = _this.handleClick.bind(_this); + return _this; + } + /** + * Initializes the foundation and starts observing state changes. + */ + MDCSwitchFoundation.prototype.init = function () { + this.observe(this.adapter.state, { + disabled: this.stopProcessingIfDisabled, + processing: this.stopProcessingIfDisabled, + }); + }; + /** + * Event handler for switch click events. Clicking on a switch will toggle its + * selected state. + */ + MDCSwitchFoundation.prototype.handleClick = function () { + if (this.adapter.state.disabled) { + return; + } + this.adapter.state.selected = !this.adapter.state.selected; + }; + MDCSwitchFoundation.prototype.stopProcessingIfDisabled = function () { + if (this.adapter.state.disabled) { + this.adapter.state.processing = false; + } + }; + return MDCSwitchFoundation; +}(MDCObserverFoundation)); + +/** + * `MDCSwitchRenderFoundation` provides a state and rendering foundation for a + * switch component. + * + * State observers and event handler entrypoints update a component's + * adapter's state with the logic needed for switch to function. + * + * In response to state changes, the rendering foundation uses the component's + * render adapter to keep the component's DOM updated with the state. + */ +var MDCSwitchRenderFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCSwitchRenderFoundation, _super); + function MDCSwitchRenderFoundation() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Initializes the foundation and starts observing state changes. + */ + MDCSwitchRenderFoundation.prototype.init = function () { + _super.prototype.init.call(this); + this.observe(this.adapter.state, { + disabled: this.onDisabledChange, + processing: this.onProcessingChange, + selected: this.onSelectedChange, + }); + }; + /** + * Initializes the foundation from a server side rendered (SSR) component. + * This will sync the adapter's state with the current state of the DOM. + * + * This method should be called after `init()`. + */ + MDCSwitchRenderFoundation.prototype.initFromDOM = function () { + // Turn off observers while setting state + this.setObserversEnabled(this.adapter.state, false); + this.adapter.state.selected = this.adapter.hasClass(CssClasses.SELECTED); + // Ensure aria-checked is set if attribute is not present + this.onSelectedChange(); + this.adapter.state.disabled = this.adapter.isDisabled(); + this.adapter.state.processing = + this.adapter.hasClass(CssClasses.PROCESSING); + // Re-observe state + this.setObserversEnabled(this.adapter.state, true); + this.stopProcessingIfDisabled(); + }; + MDCSwitchRenderFoundation.prototype.onDisabledChange = function () { + this.adapter.setDisabled(this.adapter.state.disabled); + }; + MDCSwitchRenderFoundation.prototype.onProcessingChange = function () { + this.toggleClass(this.adapter.state.processing, CssClasses.PROCESSING); + }; + MDCSwitchRenderFoundation.prototype.onSelectedChange = function () { + this.adapter.setAriaChecked(String(this.adapter.state.selected)); + this.toggleClass(this.adapter.state.selected, CssClasses.SELECTED); + this.toggleClass(!this.adapter.state.selected, CssClasses.UNSELECTED); + }; + MDCSwitchRenderFoundation.prototype.toggleClass = function (addClass, className) { + if (addClass) { + this.adapter.addClass(className); + } + else { + this.adapter.removeClass(className); + } + }; + return MDCSwitchRenderFoundation; +}(MDCSwitchFoundation)); + +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/switch/component.js +/** + * @license + * Copyright 2021 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + +/** + * `MDCSwitch` provides a component implementation of a Material Design switch. + */ +var MDCSwitch = /** @class */ (function (_super) { + tslib_es6_extends(MDCSwitch, _super); + function MDCSwitch(root, foundation) { + var _this = _super.call(this, root, foundation) || this; + _this.root = root; + return _this; + } + /** + * Creates a new `MDCSwitch` and attaches it to the given root element. + * @param root The root to attach to. + * @return the new component instance. + */ + MDCSwitch.attachTo = function (root) { + return new MDCSwitch(root); + }; + MDCSwitch.prototype.initialize = function () { + this.ripple = new MDCRipple(this.root, this.createRippleFoundation()); + }; + MDCSwitch.prototype.initialSyncWithDOM = function () { + var rippleElement = this.root.querySelector(Selectors.RIPPLE); + if (!rippleElement) { + throw new Error("Switch " + Selectors.RIPPLE + " element is required."); + } + this.rippleElement = rippleElement; + this.root.addEventListener('click', this.foundation.handleClick); + this.foundation.initFromDOM(); + }; + MDCSwitch.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.ripple.destroy(); + this.root.removeEventListener('click', this.foundation.handleClick); + }; + MDCSwitch.prototype.getDefaultFoundation = function () { + return new MDCSwitchRenderFoundation(this.createAdapter()); + }; + MDCSwitch.prototype.createAdapter = function () { + var _this = this; + return { + addClass: function (className) { + _this.root.classList.add(className); + }, + hasClass: function (className) { return _this.root.classList.contains(className); }, + isDisabled: function () { return _this.root.disabled; }, + removeClass: function (className) { + _this.root.classList.remove(className); + }, + setAriaChecked: function (ariaChecked) { + return _this.root.setAttribute('aria-checked', ariaChecked); + }, + setDisabled: function (disabled) { + _this.root.disabled = disabled; + }, + state: this, + }; + }; + MDCSwitch.prototype.createRippleFoundation = function () { + return new MDCRippleFoundation(this.createRippleAdapter()); + }; + MDCSwitch.prototype.createRippleAdapter = function () { + var _this = this; + return __assign(__assign({}, MDCRipple.createAdapter(this)), { computeBoundingRect: function () { return _this.rippleElement.getBoundingClientRect(); }, isUnbounded: function () { return true; } }); + }; + return MDCSwitch; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./Components/Switch/MBSwitch.ts + +function MBSwitch_init(elem, selected) { + if (!elem) { + return; + } + elem._switch = MDCSwitch.attachTo(elem); + elem._switch.selected = selected; +} +function MBSwitch_setSelected(elem, selected) { + if (!elem) { + return; + } + elem._switch.selected = selected; +} +function MBSwitch_setDisabled(elem, disabled) { + if (!elem) { + return; + } + elem._switch.disabled = disabled; +} +;// CONCATENATED MODULE: ./node_modules/@material/tab-scroller/constants.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var tab_scroller_constants_cssClasses = { + ANIMATING: 'mdc-tab-scroller--animating', + SCROLL_AREA_SCROLL: 'mdc-tab-scroller__scroll-area--scroll', + SCROLL_TEST: 'mdc-tab-scroller__test', +}; +var tab_scroller_constants_strings = { + AREA_SELECTOR: '.mdc-tab-scroller__scroll-area', + CONTENT_SELECTOR: '.mdc-tab-scroller__scroll-content', +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-scroller/rtl-scroller.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var MDCTabScrollerRTL = /** @class */ (function () { + function MDCTabScrollerRTL(adapter) { + this.adapter = adapter; + } + return MDCTabScrollerRTL; +}()); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const rtl_scroller = ((/* unused pure expression or super */ null && (MDCTabScrollerRTL))); +//# sourceMappingURL=rtl-scroller.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-scroller/rtl-default-scroller.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +var MDCTabScrollerRTLDefault = /** @class */ (function (_super) { + tslib_es6_extends(MDCTabScrollerRTLDefault, _super); + function MDCTabScrollerRTLDefault() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTabScrollerRTLDefault.prototype.getScrollPositionRTL = function () { + var currentScrollLeft = this.adapter.getScrollAreaScrollLeft(); + var right = this.calculateScrollEdges().right; + // Scroll values on most browsers are ints instead of floats so we round + return Math.round(right - currentScrollLeft); + }; + MDCTabScrollerRTLDefault.prototype.scrollToRTL = function (scrollX) { + var edges = this.calculateScrollEdges(); + var currentScrollLeft = this.adapter.getScrollAreaScrollLeft(); + var clampedScrollLeft = this.clampScrollValue(edges.right - scrollX); + return { + finalScrollPosition: clampedScrollLeft, + scrollDelta: clampedScrollLeft - currentScrollLeft, + }; + }; + MDCTabScrollerRTLDefault.prototype.incrementScrollRTL = function (scrollX) { + var currentScrollLeft = this.adapter.getScrollAreaScrollLeft(); + var clampedScrollLeft = this.clampScrollValue(currentScrollLeft - scrollX); + return { + finalScrollPosition: clampedScrollLeft, + scrollDelta: clampedScrollLeft - currentScrollLeft, + }; + }; + MDCTabScrollerRTLDefault.prototype.getAnimatingScrollPosition = function (scrollX) { + return scrollX; + }; + MDCTabScrollerRTLDefault.prototype.calculateScrollEdges = function () { + var contentWidth = this.adapter.getScrollContentOffsetWidth(); + var rootWidth = this.adapter.getScrollAreaOffsetWidth(); + return { + left: 0, + right: contentWidth - rootWidth, + }; + }; + MDCTabScrollerRTLDefault.prototype.clampScrollValue = function (scrollX) { + var edges = this.calculateScrollEdges(); + return Math.min(Math.max(edges.left, scrollX), edges.right); + }; + return MDCTabScrollerRTLDefault; +}(MDCTabScrollerRTL)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const rtl_default_scroller = ((/* unused pure expression or super */ null && (MDCTabScrollerRTLDefault))); +//# sourceMappingURL=rtl-default-scroller.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-scroller/rtl-negative-scroller.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +var MDCTabScrollerRTLNegative = /** @class */ (function (_super) { + tslib_es6_extends(MDCTabScrollerRTLNegative, _super); + function MDCTabScrollerRTLNegative() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTabScrollerRTLNegative.prototype.getScrollPositionRTL = function (translateX) { + var currentScrollLeft = this.adapter.getScrollAreaScrollLeft(); + return Math.round(translateX - currentScrollLeft); + }; + MDCTabScrollerRTLNegative.prototype.scrollToRTL = function (scrollX) { + var currentScrollLeft = this.adapter.getScrollAreaScrollLeft(); + var clampedScrollLeft = this.clampScrollValue(-scrollX); + return { + finalScrollPosition: clampedScrollLeft, + scrollDelta: clampedScrollLeft - currentScrollLeft, + }; + }; + MDCTabScrollerRTLNegative.prototype.incrementScrollRTL = function (scrollX) { + var currentScrollLeft = this.adapter.getScrollAreaScrollLeft(); + var clampedScrollLeft = this.clampScrollValue(currentScrollLeft - scrollX); + return { + finalScrollPosition: clampedScrollLeft, + scrollDelta: clampedScrollLeft - currentScrollLeft, + }; + }; + MDCTabScrollerRTLNegative.prototype.getAnimatingScrollPosition = function (scrollX, translateX) { + return scrollX - translateX; + }; + MDCTabScrollerRTLNegative.prototype.calculateScrollEdges = function () { + var contentWidth = this.adapter.getScrollContentOffsetWidth(); + var rootWidth = this.adapter.getScrollAreaOffsetWidth(); + return { + left: rootWidth - contentWidth, + right: 0, + }; + }; + MDCTabScrollerRTLNegative.prototype.clampScrollValue = function (scrollX) { + var edges = this.calculateScrollEdges(); + return Math.max(Math.min(edges.right, scrollX), edges.left); + }; + return MDCTabScrollerRTLNegative; +}(MDCTabScrollerRTL)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const rtl_negative_scroller = ((/* unused pure expression or super */ null && (MDCTabScrollerRTLNegative))); +//# sourceMappingURL=rtl-negative-scroller.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-scroller/rtl-reverse-scroller.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +var MDCTabScrollerRTLReverse = /** @class */ (function (_super) { + tslib_es6_extends(MDCTabScrollerRTLReverse, _super); + function MDCTabScrollerRTLReverse() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTabScrollerRTLReverse.prototype.getScrollPositionRTL = function (translateX) { + var currentScrollLeft = this.adapter.getScrollAreaScrollLeft(); + // Scroll values on most browsers are ints instead of floats so we round + return Math.round(currentScrollLeft - translateX); + }; + MDCTabScrollerRTLReverse.prototype.scrollToRTL = function (scrollX) { + var currentScrollLeft = this.adapter.getScrollAreaScrollLeft(); + var clampedScrollLeft = this.clampScrollValue(scrollX); + return { + finalScrollPosition: clampedScrollLeft, + scrollDelta: currentScrollLeft - clampedScrollLeft, + }; + }; + MDCTabScrollerRTLReverse.prototype.incrementScrollRTL = function (scrollX) { + var currentScrollLeft = this.adapter.getScrollAreaScrollLeft(); + var clampedScrollLeft = this.clampScrollValue(currentScrollLeft + scrollX); + return { + finalScrollPosition: clampedScrollLeft, + scrollDelta: currentScrollLeft - clampedScrollLeft, + }; + }; + MDCTabScrollerRTLReverse.prototype.getAnimatingScrollPosition = function (scrollX, translateX) { + return scrollX + translateX; + }; + MDCTabScrollerRTLReverse.prototype.calculateScrollEdges = function () { + var contentWidth = this.adapter.getScrollContentOffsetWidth(); + var rootWidth = this.adapter.getScrollAreaOffsetWidth(); + return { + left: contentWidth - rootWidth, + right: 0, + }; + }; + MDCTabScrollerRTLReverse.prototype.clampScrollValue = function (scrollX) { + var edges = this.calculateScrollEdges(); + return Math.min(Math.max(edges.right, scrollX), edges.left); + }; + return MDCTabScrollerRTLReverse; +}(MDCTabScrollerRTL)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const rtl_reverse_scroller = ((/* unused pure expression or super */ null && (MDCTabScrollerRTLReverse))); +//# sourceMappingURL=rtl-reverse-scroller.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-scroller/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + +var MDCTabScrollerFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCTabScrollerFoundation, _super); + function MDCTabScrollerFoundation(adapter) { + var _this = _super.call(this, __assign(__assign({}, MDCTabScrollerFoundation.defaultAdapter), adapter)) || this; + /** + * Controls whether we should handle the transitionend and interaction events during the animation. + */ + _this.isAnimating = false; + return _this; + } + Object.defineProperty(MDCTabScrollerFoundation, "cssClasses", { + get: function () { + return tab_scroller_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTabScrollerFoundation, "strings", { + get: function () { + return tab_scroller_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTabScrollerFoundation, "defaultAdapter", { + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + eventTargetMatchesSelector: function () { return false; }, + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + addScrollAreaClass: function () { return undefined; }, + setScrollAreaStyleProperty: function () { return undefined; }, + setScrollContentStyleProperty: function () { return undefined; }, + getScrollContentStyleValue: function () { return ''; }, + setScrollAreaScrollLeft: function () { return undefined; }, + getScrollAreaScrollLeft: function () { return 0; }, + getScrollContentOffsetWidth: function () { return 0; }, + getScrollAreaOffsetWidth: function () { return 0; }, + computeScrollAreaClientRect: function () { + return ({ top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }); + }, + computeScrollContentClientRect: function () { + return ({ top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }); + }, + computeHorizontalScrollbarHeight: function () { return 0; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCTabScrollerFoundation.prototype.init = function () { + // Compute horizontal scrollbar height on scroller with overflow initially hidden, then update overflow to scroll + // and immediately adjust bottom margin to avoid the scrollbar initially appearing before JS runs. + var horizontalScrollbarHeight = this.adapter.computeHorizontalScrollbarHeight(); + this.adapter.setScrollAreaStyleProperty('margin-bottom', -horizontalScrollbarHeight + 'px'); + this.adapter.addScrollAreaClass(MDCTabScrollerFoundation.cssClasses.SCROLL_AREA_SCROLL); + }; + /** + * Computes the current visual scroll position + */ + MDCTabScrollerFoundation.prototype.getScrollPosition = function () { + if (this.isRTL()) { + return this.computeCurrentScrollPositionRTL(); + } + var currentTranslateX = this.calculateCurrentTranslateX(); + var scrollLeft = this.adapter.getScrollAreaScrollLeft(); + return scrollLeft - currentTranslateX; + }; + /** + * Handles interaction events that occur during transition + */ + MDCTabScrollerFoundation.prototype.handleInteraction = function () { + // Early exit if we aren't animating + if (!this.isAnimating) { + return; + } + // Prevent other event listeners from handling this event + this.stopScrollAnimation(); + }; + /** + * Handles the transitionend event + */ + MDCTabScrollerFoundation.prototype.handleTransitionEnd = function (evt) { + // Early exit if we aren't animating or the event was triggered by a different element. + var evtTarget = evt.target; + if (!this.isAnimating || + !this.adapter.eventTargetMatchesSelector(evtTarget, MDCTabScrollerFoundation.strings.CONTENT_SELECTOR)) { + return; + } + this.isAnimating = false; + this.adapter.removeClass(MDCTabScrollerFoundation.cssClasses.ANIMATING); + }; + /** + * Increment the scroll value by the scrollXIncrement using animation. + * @param scrollXIncrement The value by which to increment the scroll position + */ + MDCTabScrollerFoundation.prototype.incrementScroll = function (scrollXIncrement) { + // Early exit for non-operational increment values + if (scrollXIncrement === 0) { + return; + } + this.animate(this.getIncrementScrollOperation(scrollXIncrement)); + }; + /** + * Increment the scroll value by the scrollXIncrement without animation. + * @param scrollXIncrement The value by which to increment the scroll position + */ + MDCTabScrollerFoundation.prototype.incrementScrollImmediate = function (scrollXIncrement) { + // Early exit for non-operational increment values + if (scrollXIncrement === 0) { + return; + } + var operation = this.getIncrementScrollOperation(scrollXIncrement); + if (operation.scrollDelta === 0) { + return; + } + this.stopScrollAnimation(); + this.adapter.setScrollAreaScrollLeft(operation.finalScrollPosition); + }; + /** + * Scrolls to the given scrollX value + */ + MDCTabScrollerFoundation.prototype.scrollTo = function (scrollX) { + if (this.isRTL()) { + this.scrollToImplRTL(scrollX); + return; + } + this.scrollToImpl(scrollX); + }; + /** + * @return Browser-specific {@link MDCTabScrollerRTL} instance. + */ + MDCTabScrollerFoundation.prototype.getRTLScroller = function () { + if (!this.rtlScrollerInstance) { + this.rtlScrollerInstance = this.rtlScrollerFactory(); + } + return this.rtlScrollerInstance; + }; + /** + * @return translateX value from a CSS matrix transform function string. + */ + MDCTabScrollerFoundation.prototype.calculateCurrentTranslateX = function () { + var transformValue = this.adapter.getScrollContentStyleValue('transform'); + // Early exit if no transform is present + if (transformValue === 'none') { + return 0; + } + // The transform value comes back as a matrix transformation in the form + // of `matrix(a, b, c, d, tx, ty)`. We only care about tx (translateX) so + // we're going to grab all the parenthesized values, strip out tx, and + // parse it. + var match = /\((.+?)\)/.exec(transformValue); + if (!match) { + return 0; + } + var matrixParams = match[1]; + // tslint:disable-next-line:ban-ts-ignore "Unused vars" should be a linter warning, not a compiler error. + // @ts-ignore These unused variables should retain their semantic names for clarity. + var _a = tslib_es6_read(matrixParams.split(','), 6), a = _a[0], b = _a[1], c = _a[2], d = _a[3], tx = _a[4], ty = _a[5]; + return parseFloat(tx); // tslint:disable-line:ban + }; + /** + * Calculates a safe scroll value that is > 0 and < the max scroll value + * @param scrollX The distance to scroll + */ + MDCTabScrollerFoundation.prototype.clampScrollValue = function (scrollX) { + var edges = this.calculateScrollEdges(); + return Math.min(Math.max(edges.left, scrollX), edges.right); + }; + MDCTabScrollerFoundation.prototype.computeCurrentScrollPositionRTL = function () { + var translateX = this.calculateCurrentTranslateX(); + return this.getRTLScroller().getScrollPositionRTL(translateX); + }; + MDCTabScrollerFoundation.prototype.calculateScrollEdges = function () { + var contentWidth = this.adapter.getScrollContentOffsetWidth(); + var rootWidth = this.adapter.getScrollAreaOffsetWidth(); + return { + left: 0, + right: contentWidth - rootWidth, + }; + }; + /** + * Internal scroll method + * @param scrollX The new scroll position + */ + MDCTabScrollerFoundation.prototype.scrollToImpl = function (scrollX) { + var currentScrollX = this.getScrollPosition(); + var safeScrollX = this.clampScrollValue(scrollX); + var scrollDelta = safeScrollX - currentScrollX; + this.animate({ + finalScrollPosition: safeScrollX, + scrollDelta: scrollDelta, + }); + }; + /** + * Internal RTL scroll method + * @param scrollX The new scroll position + */ + MDCTabScrollerFoundation.prototype.scrollToImplRTL = function (scrollX) { + var animation = this.getRTLScroller().scrollToRTL(scrollX); + this.animate(animation); + }; + /** + * Internal method to compute the increment scroll operation values. + * @param scrollX The desired scroll position increment + * @return MDCTabScrollerAnimation with the sanitized values for performing the scroll operation. + */ + MDCTabScrollerFoundation.prototype.getIncrementScrollOperation = function (scrollX) { + if (this.isRTL()) { + return this.getRTLScroller().incrementScrollRTL(scrollX); + } + var currentScrollX = this.getScrollPosition(); + var targetScrollX = scrollX + currentScrollX; + var safeScrollX = this.clampScrollValue(targetScrollX); + var scrollDelta = safeScrollX - currentScrollX; + return { + finalScrollPosition: safeScrollX, + scrollDelta: scrollDelta, + }; + }; + /** + * Animates the tab scrolling + * @param animation The animation to apply + */ + MDCTabScrollerFoundation.prototype.animate = function (animation) { + var _this = this; + // Early exit if translateX is 0, which means there's no animation to perform + if (animation.scrollDelta === 0) { + return; + } + this.stopScrollAnimation(); + // This animation uses the FLIP approach. + // Read more here: https://aerotwist.com/blog/flip-your-animations/ + this.adapter.setScrollAreaScrollLeft(animation.finalScrollPosition); + this.adapter.setScrollContentStyleProperty('transform', "translateX(" + animation.scrollDelta + "px)"); + // Force repaint + this.adapter.computeScrollAreaClientRect(); + requestAnimationFrame(function () { + _this.adapter.addClass(MDCTabScrollerFoundation.cssClasses.ANIMATING); + _this.adapter.setScrollContentStyleProperty('transform', 'none'); + }); + this.isAnimating = true; + }; + /** + * Stops scroll animation + */ + MDCTabScrollerFoundation.prototype.stopScrollAnimation = function () { + this.isAnimating = false; + var currentScrollPosition = this.getAnimatingScrollPosition(); + this.adapter.removeClass(MDCTabScrollerFoundation.cssClasses.ANIMATING); + this.adapter.setScrollContentStyleProperty('transform', 'translateX(0px)'); + this.adapter.setScrollAreaScrollLeft(currentScrollPosition); + }; + /** + * Gets the current scroll position during animation + */ + MDCTabScrollerFoundation.prototype.getAnimatingScrollPosition = function () { + var currentTranslateX = this.calculateCurrentTranslateX(); + var scrollLeft = this.adapter.getScrollAreaScrollLeft(); + if (this.isRTL()) { + return this.getRTLScroller().getAnimatingScrollPosition(scrollLeft, currentTranslateX); + } + return scrollLeft - currentTranslateX; + }; + /** + * Determines the RTL Scroller to use + */ + MDCTabScrollerFoundation.prototype.rtlScrollerFactory = function () { + // Browsers have three different implementations of scrollLeft in RTL mode, + // dependent on the browser. The behavior is based off the max LTR + // scrollLeft value and 0. + // + // * Default scrolling in RTL * + // - Left-most value: 0 + // - Right-most value: Max LTR scrollLeft value + // + // * Negative scrolling in RTL * + // - Left-most value: Negated max LTR scrollLeft value + // - Right-most value: 0 + // + // * Reverse scrolling in RTL * + // - Left-most value: Max LTR scrollLeft value + // - Right-most value: 0 + // + // We use those principles below to determine which RTL scrollLeft + // behavior is implemented in the current browser. + var initialScrollLeft = this.adapter.getScrollAreaScrollLeft(); + this.adapter.setScrollAreaScrollLeft(initialScrollLeft - 1); + var newScrollLeft = this.adapter.getScrollAreaScrollLeft(); + // If the newScrollLeft value is negative,then we know that the browser has + // implemented negative RTL scrolling, since all other implementations have + // only positive values. + if (newScrollLeft < 0) { + // Undo the scrollLeft test check + this.adapter.setScrollAreaScrollLeft(initialScrollLeft); + return new MDCTabScrollerRTLNegative(this.adapter); + } + var rootClientRect = this.adapter.computeScrollAreaClientRect(); + var contentClientRect = this.adapter.computeScrollContentClientRect(); + var rightEdgeDelta = Math.round(contentClientRect.right - rootClientRect.right); + // Undo the scrollLeft test check + this.adapter.setScrollAreaScrollLeft(initialScrollLeft); + // By calculating the clientRect of the root element and the clientRect of + // the content element, we can determine how much the scroll value changed + // when we performed the scrollLeft subtraction above. + if (rightEdgeDelta === newScrollLeft) { + return new MDCTabScrollerRTLReverse(this.adapter); + } + return new MDCTabScrollerRTLDefault(this.adapter); + }; + MDCTabScrollerFoundation.prototype.isRTL = function () { + return this.adapter.getScrollContentStyleValue('direction') === 'rtl'; + }; + return MDCTabScrollerFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const tab_scroller_foundation = ((/* unused pure expression or super */ null && (MDCTabScrollerFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-scroller/util.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +/** + * Stores result from computeHorizontalScrollbarHeight to avoid redundant processing. + */ +var horizontalScrollbarHeight_; +/** + * Computes the height of browser-rendered horizontal scrollbars using a self-created test element. + * May return 0 (e.g. on OS X browsers under default configuration). + */ +function computeHorizontalScrollbarHeight(documentObj, shouldCacheResult) { + if (shouldCacheResult === void 0) { shouldCacheResult = true; } + if (shouldCacheResult && typeof horizontalScrollbarHeight_ !== 'undefined') { + return horizontalScrollbarHeight_; + } + var el = documentObj.createElement('div'); + el.classList.add(tab_scroller_constants_cssClasses.SCROLL_TEST); + documentObj.body.appendChild(el); + var horizontalScrollbarHeight = el.offsetHeight - el.clientHeight; + documentObj.body.removeChild(el); + if (shouldCacheResult) { + horizontalScrollbarHeight_ = horizontalScrollbarHeight; + } + return horizontalScrollbarHeight; +} +//# sourceMappingURL=util.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-scroller/component.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + +var MDCTabScroller = /** @class */ (function (_super) { + tslib_es6_extends(MDCTabScroller, _super); + function MDCTabScroller() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTabScroller.attachTo = function (root) { + return new MDCTabScroller(root); + }; + // initialSyncWithDOM() + MDCTabScroller.prototype.initialize = function () { + this.area = this.root.querySelector(MDCTabScrollerFoundation.strings.AREA_SELECTOR); + this.content = this.root.querySelector(MDCTabScrollerFoundation.strings.CONTENT_SELECTOR); + }; + MDCTabScroller.prototype.initialSyncWithDOM = function () { + var _this = this; + this.handleInteraction = function () { + _this.foundation.handleInteraction(); + }; + this.handleTransitionEnd = function (evt) { + _this.foundation.handleTransitionEnd(evt); + }; + this.area.addEventListener('wheel', this.handleInteraction, applyPassive()); + this.area.addEventListener('touchstart', this.handleInteraction, applyPassive()); + this.area.addEventListener('pointerdown', this.handleInteraction, applyPassive()); + this.area.addEventListener('mousedown', this.handleInteraction, applyPassive()); + this.area.addEventListener('keydown', this.handleInteraction, applyPassive()); + this.content.addEventListener('transitionend', this.handleTransitionEnd); + }; + MDCTabScroller.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.area.removeEventListener('wheel', this.handleInteraction, applyPassive()); + this.area.removeEventListener('touchstart', this.handleInteraction, applyPassive()); + this.area.removeEventListener('pointerdown', this.handleInteraction, applyPassive()); + this.area.removeEventListener('mousedown', this.handleInteraction, applyPassive()); + this.area.removeEventListener('keydown', this.handleInteraction, applyPassive()); + this.content.removeEventListener('transitionend', this.handleTransitionEnd); + }; + MDCTabScroller.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = { + eventTargetMatchesSelector: function (evtTarget, selector) { + return matches(evtTarget, selector); + }, + addClass: function (className) { + _this.root.classList.add(className); + }, + removeClass: function (className) { + _this.root.classList.remove(className); + }, + addScrollAreaClass: function (className) { + _this.area.classList.add(className); + }, + setScrollAreaStyleProperty: function (prop, value) { + _this.area.style.setProperty(prop, value); + }, + setScrollContentStyleProperty: function (prop, value) { + _this.content.style.setProperty(prop, value); + }, + getScrollContentStyleValue: function (propName) { + return window.getComputedStyle(_this.content).getPropertyValue(propName); + }, + setScrollAreaScrollLeft: function (scrollX) { return _this.area.scrollLeft = scrollX; }, + getScrollAreaScrollLeft: function () { return _this.area.scrollLeft; }, + getScrollContentOffsetWidth: function () { return _this.content.offsetWidth; }, + getScrollAreaOffsetWidth: function () { return _this.area.offsetWidth; }, + computeScrollAreaClientRect: function () { return _this.area.getBoundingClientRect(); }, + computeScrollContentClientRect: function () { + return _this.content.getBoundingClientRect(); + }, + computeHorizontalScrollbarHeight: function () { + return computeHorizontalScrollbarHeight(document); + }, + }; + // tslint:enable:object-literal-sort-keys + return new MDCTabScrollerFoundation(adapter); + }; + /** + * Returns the current visual scroll position + */ + MDCTabScroller.prototype.getScrollPosition = function () { + return this.foundation.getScrollPosition(); + }; + /** + * Returns the width of the scroll content + */ + MDCTabScroller.prototype.getScrollContentWidth = function () { + return this.content.offsetWidth; + }; + /** + * Increments the scroll value by the given amount + * @param scrollXIncrement The pixel value by which to increment the scroll value + */ + MDCTabScroller.prototype.incrementScroll = function (scrollXIncrement) { + this.foundation.incrementScroll(scrollXIncrement); + }; + /** + * Scrolls to the given pixel position + * @param scrollX The pixel value to scroll to + */ + MDCTabScroller.prototype.scrollTo = function (scrollX) { + this.foundation.scrollTo(scrollX); + }; + return MDCTabScroller; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-indicator/constants.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var tab_indicator_constants_cssClasses = { + ACTIVE: 'mdc-tab-indicator--active', + FADE: 'mdc-tab-indicator--fade', + NO_TRANSITION: 'mdc-tab-indicator--no-transition', +}; +var tab_indicator_constants_strings = { + CONTENT_SELECTOR: '.mdc-tab-indicator__content', +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-indicator/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCTabIndicatorFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCTabIndicatorFoundation, _super); + function MDCTabIndicatorFoundation(adapter) { + return _super.call(this, __assign(__assign({}, MDCTabIndicatorFoundation.defaultAdapter), adapter)) || this; + } + Object.defineProperty(MDCTabIndicatorFoundation, "cssClasses", { + get: function () { + return tab_indicator_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTabIndicatorFoundation, "strings", { + get: function () { + return tab_indicator_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTabIndicatorFoundation, "defaultAdapter", { + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + computeContentClientRect: function () { + return ({ top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }); + }, + setContentStyleProperty: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCTabIndicatorFoundation.prototype.computeContentClientRect = function () { + return this.adapter.computeContentClientRect(); + }; + return MDCTabIndicatorFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const tab_indicator_foundation = ((/* unused pure expression or super */ null && (MDCTabIndicatorFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-indicator/fading-foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +/* istanbul ignore next: subclass is not a branch statement */ +var MDCFadingTabIndicatorFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCFadingTabIndicatorFoundation, _super); + function MDCFadingTabIndicatorFoundation() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCFadingTabIndicatorFoundation.prototype.activate = function () { + this.adapter.addClass(MDCTabIndicatorFoundation.cssClasses.ACTIVE); + }; + MDCFadingTabIndicatorFoundation.prototype.deactivate = function () { + this.adapter.removeClass(MDCTabIndicatorFoundation.cssClasses.ACTIVE); + }; + return MDCFadingTabIndicatorFoundation; +}(MDCTabIndicatorFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const fading_foundation = ((/* unused pure expression or super */ null && (MDCFadingTabIndicatorFoundation))); +//# sourceMappingURL=fading-foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-indicator/sliding-foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +/* istanbul ignore next: subclass is not a branch statement */ +var MDCSlidingTabIndicatorFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCSlidingTabIndicatorFoundation, _super); + function MDCSlidingTabIndicatorFoundation() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCSlidingTabIndicatorFoundation.prototype.activate = function (previousIndicatorClientRect) { + // Early exit if no indicator is present to handle cases where an indicator + // may be activated without a prior indicator state + if (!previousIndicatorClientRect) { + this.adapter.addClass(MDCTabIndicatorFoundation.cssClasses.ACTIVE); + return; + } + // This animation uses the FLIP approach. You can read more about it at the link below: + // https://aerotwist.com/blog/flip-your-animations/ + // Calculate the dimensions based on the dimensions of the previous indicator + var currentClientRect = this.computeContentClientRect(); + var widthDelta = previousIndicatorClientRect.width / currentClientRect.width; + var xPosition = previousIndicatorClientRect.left - currentClientRect.left; + this.adapter.addClass(MDCTabIndicatorFoundation.cssClasses.NO_TRANSITION); + this.adapter.setContentStyleProperty('transform', "translateX(" + xPosition + "px) scaleX(" + widthDelta + ")"); + // Force repaint before updating classes and transform to ensure the transform properly takes effect + this.computeContentClientRect(); + this.adapter.removeClass(MDCTabIndicatorFoundation.cssClasses.NO_TRANSITION); + this.adapter.addClass(MDCTabIndicatorFoundation.cssClasses.ACTIVE); + this.adapter.setContentStyleProperty('transform', ''); + }; + MDCSlidingTabIndicatorFoundation.prototype.deactivate = function () { + this.adapter.removeClass(MDCTabIndicatorFoundation.cssClasses.ACTIVE); + }; + return MDCSlidingTabIndicatorFoundation; +}(MDCTabIndicatorFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const sliding_foundation = ((/* unused pure expression or super */ null && (MDCSlidingTabIndicatorFoundation))); +//# sourceMappingURL=sliding-foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-indicator/component.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + +var MDCTabIndicator = /** @class */ (function (_super) { + tslib_es6_extends(MDCTabIndicator, _super); + function MDCTabIndicator() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTabIndicator.attachTo = function (root) { + return new MDCTabIndicator(root); + }; + MDCTabIndicator.prototype.initialize = function () { + this.content = this.root.querySelector(MDCTabIndicatorFoundation.strings.CONTENT_SELECTOR); + }; + MDCTabIndicator.prototype.computeContentClientRect = function () { + return this.foundation.computeContentClientRect(); + }; + MDCTabIndicator.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = { + addClass: function (className) { return _this.root.classList.add(className); }, + removeClass: function (className) { return _this.root.classList.remove(className); }, + computeContentClientRect: function () { return _this.content.getBoundingClientRect(); }, + setContentStyleProperty: function (prop, value) { + _this.content.style.setProperty(prop, value); + }, + }; + // tslint:enable:object-literal-sort-keys + if (this.root.classList.contains(MDCTabIndicatorFoundation.cssClasses.FADE)) { + return new MDCFadingTabIndicatorFoundation(adapter); + } + // Default to the sliding indicator + return new MDCSlidingTabIndicatorFoundation(adapter); + }; + MDCTabIndicator.prototype.activate = function (previousIndicatorClientRect) { + this.foundation.activate(previousIndicatorClientRect); + }; + MDCTabIndicator.prototype.deactivate = function () { + this.foundation.deactivate(); + }; + return MDCTabIndicator; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab/constants.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var tab_constants_cssClasses = { + ACTIVE: 'mdc-tab--active', +}; +var tab_constants_strings = { + ARIA_SELECTED: 'aria-selected', + CONTENT_SELECTOR: '.mdc-tab__content', + INTERACTED_EVENT: 'MDCTab:interacted', + RIPPLE_SELECTOR: '.mdc-tab__ripple', + TABINDEX: 'tabIndex', + TAB_INDICATOR_SELECTOR: '.mdc-tab-indicator', +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCTabFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCTabFoundation, _super); + function MDCTabFoundation(adapter) { + var _this = _super.call(this, __assign(__assign({}, MDCTabFoundation.defaultAdapter), adapter)) || this; + _this.focusOnActivate = true; + return _this; + } + Object.defineProperty(MDCTabFoundation, "cssClasses", { + get: function () { + return tab_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTabFoundation, "strings", { + get: function () { + return tab_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTabFoundation, "defaultAdapter", { + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + hasClass: function () { return false; }, + setAttr: function () { return undefined; }, + activateIndicator: function () { return undefined; }, + deactivateIndicator: function () { return undefined; }, + notifyInteracted: function () { return undefined; }, + getOffsetLeft: function () { return 0; }, + getOffsetWidth: function () { return 0; }, + getContentOffsetLeft: function () { return 0; }, + getContentOffsetWidth: function () { return 0; }, + focus: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCTabFoundation.prototype.handleClick = function () { + // It's up to the parent component to keep track of the active Tab and + // ensure we don't activate a Tab that's already active. + this.adapter.notifyInteracted(); + }; + MDCTabFoundation.prototype.isActive = function () { + return this.adapter.hasClass(tab_constants_cssClasses.ACTIVE); + }; + /** + * Sets whether the tab should focus itself when activated + */ + MDCTabFoundation.prototype.setFocusOnActivate = function (focusOnActivate) { + this.focusOnActivate = focusOnActivate; + }; + /** + * Activates the Tab + */ + MDCTabFoundation.prototype.activate = function (previousIndicatorClientRect) { + this.adapter.addClass(tab_constants_cssClasses.ACTIVE); + this.adapter.setAttr(tab_constants_strings.ARIA_SELECTED, 'true'); + this.adapter.setAttr(tab_constants_strings.TABINDEX, '0'); + this.adapter.activateIndicator(previousIndicatorClientRect); + if (this.focusOnActivate) { + this.adapter.focus(); + } + }; + /** + * Deactivates the Tab + */ + MDCTabFoundation.prototype.deactivate = function () { + // Early exit + if (!this.isActive()) { + return; + } + this.adapter.removeClass(tab_constants_cssClasses.ACTIVE); + this.adapter.setAttr(tab_constants_strings.ARIA_SELECTED, 'false'); + this.adapter.setAttr(tab_constants_strings.TABINDEX, '-1'); + this.adapter.deactivateIndicator(); + }; + /** + * Returns the dimensions of the Tab + */ + MDCTabFoundation.prototype.computeDimensions = function () { + var rootWidth = this.adapter.getOffsetWidth(); + var rootLeft = this.adapter.getOffsetLeft(); + var contentWidth = this.adapter.getContentOffsetWidth(); + var contentLeft = this.adapter.getContentOffsetLeft(); + return { + contentLeft: rootLeft + contentLeft, + contentRight: rootLeft + contentLeft + contentWidth, + rootLeft: rootLeft, + rootRight: rootLeft + rootWidth, + }; + }; + return MDCTabFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const tab_foundation = ((/* unused pure expression or super */ null && (MDCTabFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab/component.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + +var MDCTab = /** @class */ (function (_super) { + tslib_es6_extends(MDCTab, _super); + function MDCTab() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTab.attachTo = function (root) { + return new MDCTab(root); + }; + MDCTab.prototype.initialize = function (rippleFactory, tabIndicatorFactory) { + if (rippleFactory === void 0) { rippleFactory = function (el, foundation) { return new MDCRipple(el, foundation); }; } + if (tabIndicatorFactory === void 0) { tabIndicatorFactory = function (el) { return new MDCTabIndicator(el); }; } + this.id = this.root.id; + var rippleFoundation = new MDCRippleFoundation(MDCRipple.createAdapter(this)); + this.ripple = rippleFactory(this.root, rippleFoundation); + var tabIndicatorElement = this.root.querySelector(MDCTabFoundation.strings.TAB_INDICATOR_SELECTOR); + this.tabIndicator = tabIndicatorFactory(tabIndicatorElement); + this.content = this.root.querySelector(MDCTabFoundation.strings.CONTENT_SELECTOR); + }; + MDCTab.prototype.initialSyncWithDOM = function () { + var _this = this; + this.handleClick = function () { + _this.foundation.handleClick(); + }; + this.listen('click', this.handleClick); + }; + MDCTab.prototype.destroy = function () { + this.unlisten('click', this.handleClick); + this.ripple.destroy(); + _super.prototype.destroy.call(this); + }; + MDCTab.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = { + setAttr: function (attr, value) { return _this.root.setAttribute(attr, value); }, + addClass: function (className) { return _this.root.classList.add(className); }, + removeClass: function (className) { return _this.root.classList.remove(className); }, + hasClass: function (className) { return _this.root.classList.contains(className); }, + activateIndicator: function (previousIndicatorClientRect) { + _this.tabIndicator.activate(previousIndicatorClientRect); + }, + deactivateIndicator: function () { + _this.tabIndicator.deactivate(); + }, + notifyInteracted: function () { return _this.emit(MDCTabFoundation.strings.INTERACTED_EVENT, { tabId: _this.id }, true /* bubble */); }, + getOffsetLeft: function () { return _this.root.offsetLeft; }, + getOffsetWidth: function () { return _this.root.offsetWidth; }, + getContentOffsetLeft: function () { return _this.content.offsetLeft; }, + getContentOffsetWidth: function () { return _this.content.offsetWidth; }, + focus: function () { return _this.root.focus(); }, + }; + // tslint:enable:object-literal-sort-keys + return new MDCTabFoundation(adapter); + }; + Object.defineProperty(MDCTab.prototype, "active", { + /** + * Getter for the active state of the tab + */ + get: function () { + return this.foundation.isActive(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTab.prototype, "focusOnActivate", { + set: function (focusOnActivate) { + this.foundation.setFocusOnActivate(focusOnActivate); + }, + enumerable: false, + configurable: true + }); + /** + * Activates the tab + */ + MDCTab.prototype.activate = function (computeIndicatorClientRect) { + this.foundation.activate(computeIndicatorClientRect); + }; + /** + * Deactivates the tab + */ + MDCTab.prototype.deactivate = function () { + this.foundation.deactivate(); + }; + /** + * Returns the indicator's client rect + */ + MDCTab.prototype.computeIndicatorClientRect = function () { + return this.tabIndicator.computeContentClientRect(); + }; + MDCTab.prototype.computeDimensions = function () { + return this.foundation.computeDimensions(); + }; + /** + * Focuses the tab + */ + MDCTab.prototype.focus = function () { + this.root.focus(); + }; + return MDCTab; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-bar/constants.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var tab_bar_constants_strings = { + ARROW_LEFT_KEY: 'ArrowLeft', + ARROW_RIGHT_KEY: 'ArrowRight', + END_KEY: 'End', + ENTER_KEY: 'Enter', + HOME_KEY: 'Home', + SPACE_KEY: 'Space', + TAB_ACTIVATED_EVENT: 'MDCTabBar:activated', + TAB_SCROLLER_SELECTOR: '.mdc-tab-scroller', + TAB_SELECTOR: '.mdc-tab', +}; +var tab_bar_constants_numbers = { + ARROW_LEFT_KEYCODE: 37, + ARROW_RIGHT_KEYCODE: 39, + END_KEYCODE: 35, + ENTER_KEYCODE: 13, + EXTRA_SCROLL_AMOUNT: 20, + HOME_KEYCODE: 36, + SPACE_KEYCODE: 32, +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-bar/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var ACCEPTABLE_KEYS = new Set(); +// IE11 has no support for new Set with iterable so we need to initialize this by hand +ACCEPTABLE_KEYS.add(tab_bar_constants_strings.ARROW_LEFT_KEY); +ACCEPTABLE_KEYS.add(tab_bar_constants_strings.ARROW_RIGHT_KEY); +ACCEPTABLE_KEYS.add(tab_bar_constants_strings.END_KEY); +ACCEPTABLE_KEYS.add(tab_bar_constants_strings.HOME_KEY); +ACCEPTABLE_KEYS.add(tab_bar_constants_strings.ENTER_KEY); +ACCEPTABLE_KEYS.add(tab_bar_constants_strings.SPACE_KEY); +var KEYCODE_MAP = new Map(); +// IE11 has no support for new Map with iterable so we need to initialize this by hand +KEYCODE_MAP.set(tab_bar_constants_numbers.ARROW_LEFT_KEYCODE, tab_bar_constants_strings.ARROW_LEFT_KEY); +KEYCODE_MAP.set(tab_bar_constants_numbers.ARROW_RIGHT_KEYCODE, tab_bar_constants_strings.ARROW_RIGHT_KEY); +KEYCODE_MAP.set(tab_bar_constants_numbers.END_KEYCODE, tab_bar_constants_strings.END_KEY); +KEYCODE_MAP.set(tab_bar_constants_numbers.HOME_KEYCODE, tab_bar_constants_strings.HOME_KEY); +KEYCODE_MAP.set(tab_bar_constants_numbers.ENTER_KEYCODE, tab_bar_constants_strings.ENTER_KEY); +KEYCODE_MAP.set(tab_bar_constants_numbers.SPACE_KEYCODE, tab_bar_constants_strings.SPACE_KEY); +var MDCTabBarFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCTabBarFoundation, _super); + function MDCTabBarFoundation(adapter) { + var _this = _super.call(this, __assign(__assign({}, MDCTabBarFoundation.defaultAdapter), adapter)) || this; + _this.useAutomaticActivation = false; + return _this; + } + Object.defineProperty(MDCTabBarFoundation, "strings", { + get: function () { + return tab_bar_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTabBarFoundation, "numbers", { + get: function () { + return tab_bar_constants_numbers; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTabBarFoundation, "defaultAdapter", { + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + scrollTo: function () { return undefined; }, + incrementScroll: function () { return undefined; }, + getScrollPosition: function () { return 0; }, + getScrollContentWidth: function () { return 0; }, + getOffsetWidth: function () { return 0; }, + isRTL: function () { return false; }, + setActiveTab: function () { return undefined; }, + activateTabAtIndex: function () { return undefined; }, + deactivateTabAtIndex: function () { return undefined; }, + focusTabAtIndex: function () { return undefined; }, + getTabIndicatorClientRectAtIndex: function () { + return ({ top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }); + }, + getTabDimensionsAtIndex: function () { + return ({ rootLeft: 0, rootRight: 0, contentLeft: 0, contentRight: 0 }); + }, + getPreviousActiveTabIndex: function () { return -1; }, + getFocusedTabIndex: function () { return -1; }, + getIndexOfTabById: function () { return -1; }, + getTabListLength: function () { return 0; }, + notifyTabActivated: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + /** + * Switches between automatic and manual activation modes. + * See https://www.w3.org/TR/wai-aria-practices/#tabpanel for examples. + */ + MDCTabBarFoundation.prototype.setUseAutomaticActivation = function (useAutomaticActivation) { + this.useAutomaticActivation = useAutomaticActivation; + }; + MDCTabBarFoundation.prototype.activateTab = function (index) { + var previousActiveIndex = this.adapter.getPreviousActiveTabIndex(); + if (!this.indexIsInRange(index) || index === previousActiveIndex) { + return; + } + var previousClientRect; + if (previousActiveIndex !== -1) { + this.adapter.deactivateTabAtIndex(previousActiveIndex); + previousClientRect = + this.adapter.getTabIndicatorClientRectAtIndex(previousActiveIndex); + } + this.adapter.activateTabAtIndex(index, previousClientRect); + this.scrollIntoView(index); + this.adapter.notifyTabActivated(index); + }; + MDCTabBarFoundation.prototype.handleKeyDown = function (evt) { + // Get the key from the event + var key = this.getKeyFromEvent(evt); + // Early exit if the event key isn't one of the keyboard navigation keys + if (key === undefined) { + return; + } + // Prevent default behavior for movement keys, but not for activation keys, since :active is used to apply ripple + if (!this.isActivationKey(key)) { + evt.preventDefault(); + } + if (this.useAutomaticActivation) { + if (this.isActivationKey(key)) { + return; + } + var index = this.determineTargetFromKey(this.adapter.getPreviousActiveTabIndex(), key); + this.adapter.setActiveTab(index); + this.scrollIntoView(index); + } + else { + var focusedTabIndex = this.adapter.getFocusedTabIndex(); + if (this.isActivationKey(key)) { + this.adapter.setActiveTab(focusedTabIndex); + } + else { + var index = this.determineTargetFromKey(focusedTabIndex, key); + this.adapter.focusTabAtIndex(index); + this.scrollIntoView(index); + } + } + }; + /** + * Handles the MDCTab:interacted event + */ + MDCTabBarFoundation.prototype.handleTabInteraction = function (evt) { + this.adapter.setActiveTab(this.adapter.getIndexOfTabById(evt.detail.tabId)); + }; + /** + * Scrolls the tab at the given index into view + * @param index The tab index to make visible + */ + MDCTabBarFoundation.prototype.scrollIntoView = function (index) { + // Early exit if the index is out of range + if (!this.indexIsInRange(index)) { + return; + } + // Always scroll to 0 if scrolling to the 0th index + if (index === 0) { + this.adapter.scrollTo(0); + return; + } + // Always scroll to the max value if scrolling to the Nth index + // MDCTabScroller.scrollTo() will never scroll past the max possible value + if (index === this.adapter.getTabListLength() - 1) { + this.adapter.scrollTo(this.adapter.getScrollContentWidth()); + return; + } + if (this.isRTL()) { + this.scrollIntoViewImplRTL(index); + return; + } + this.scrollIntoViewImpl(index); + }; + /** + * Private method for determining the index of the destination tab based on what key was pressed + * @param origin The original index from which to determine the destination + * @param key The name of the key + */ + MDCTabBarFoundation.prototype.determineTargetFromKey = function (origin, key) { + var isRTL = this.isRTL(); + var maxIndex = this.adapter.getTabListLength() - 1; + var shouldGoToEnd = key === tab_bar_constants_strings.END_KEY; + var shouldDecrement = key === tab_bar_constants_strings.ARROW_LEFT_KEY && !isRTL || key === tab_bar_constants_strings.ARROW_RIGHT_KEY && isRTL; + var shouldIncrement = key === tab_bar_constants_strings.ARROW_RIGHT_KEY && !isRTL || key === tab_bar_constants_strings.ARROW_LEFT_KEY && isRTL; + var index = origin; + if (shouldGoToEnd) { + index = maxIndex; + } + else if (shouldDecrement) { + index -= 1; + } + else if (shouldIncrement) { + index += 1; + } + else { + index = 0; + } + if (index < 0) { + index = maxIndex; + } + else if (index > maxIndex) { + index = 0; + } + return index; + }; + /** + * Calculates the scroll increment that will make the tab at the given index visible + * @param index The index of the tab + * @param nextIndex The index of the next tab + * @param scrollPosition The current scroll position + * @param barWidth The width of the Tab Bar + */ + MDCTabBarFoundation.prototype.calculateScrollIncrement = function (index, nextIndex, scrollPosition, barWidth) { + var nextTabDimensions = this.adapter.getTabDimensionsAtIndex(nextIndex); + var relativeContentLeft = nextTabDimensions.contentLeft - scrollPosition - barWidth; + var relativeContentRight = nextTabDimensions.contentRight - scrollPosition; + var leftIncrement = relativeContentRight - tab_bar_constants_numbers.EXTRA_SCROLL_AMOUNT; + var rightIncrement = relativeContentLeft + tab_bar_constants_numbers.EXTRA_SCROLL_AMOUNT; + if (nextIndex < index) { + return Math.min(leftIncrement, 0); + } + return Math.max(rightIncrement, 0); + }; + /** + * Calculates the scroll increment that will make the tab at the given index visible in RTL + * @param index The index of the tab + * @param nextIndex The index of the next tab + * @param scrollPosition The current scroll position + * @param barWidth The width of the Tab Bar + * @param scrollContentWidth The width of the scroll content + */ + MDCTabBarFoundation.prototype.calculateScrollIncrementRTL = function (index, nextIndex, scrollPosition, barWidth, scrollContentWidth) { + var nextTabDimensions = this.adapter.getTabDimensionsAtIndex(nextIndex); + var relativeContentLeft = scrollContentWidth - nextTabDimensions.contentLeft - scrollPosition; + var relativeContentRight = scrollContentWidth - nextTabDimensions.contentRight - scrollPosition - barWidth; + var leftIncrement = relativeContentRight + tab_bar_constants_numbers.EXTRA_SCROLL_AMOUNT; + var rightIncrement = relativeContentLeft - tab_bar_constants_numbers.EXTRA_SCROLL_AMOUNT; + if (nextIndex > index) { + return Math.max(leftIncrement, 0); + } + return Math.min(rightIncrement, 0); + }; + /** + * Determines the index of the adjacent tab closest to either edge of the Tab Bar + * @param index The index of the tab + * @param tabDimensions The dimensions of the tab + * @param scrollPosition The current scroll position + * @param barWidth The width of the tab bar + */ + MDCTabBarFoundation.prototype.findAdjacentTabIndexClosestToEdge = function (index, tabDimensions, scrollPosition, barWidth) { + /** + * Tabs are laid out in the Tab Scroller like this: + * + * Scroll Position + * +---+ + * | | Bar Width + * | +-----------------------------------+ + * | | | + * | V V + * | +-----------------------------------+ + * V | Tab Scroller | + * +------------+--------------+-------------------+ + * | Tab | Tab | Tab | + * +------------+--------------+-------------------+ + * | | + * +-----------------------------------+ + * + * To determine the next adjacent index, we look at the Tab root left and + * Tab root right, both relative to the scroll position. If the Tab root + * left is less than 0, then we know it's out of view to the left. If the + * Tab root right minus the bar width is greater than 0, we know the Tab is + * out of view to the right. From there, we either increment or decrement + * the index. + */ + var relativeRootLeft = tabDimensions.rootLeft - scrollPosition; + var relativeRootRight = tabDimensions.rootRight - scrollPosition - barWidth; + var relativeRootDelta = relativeRootLeft + relativeRootRight; + var leftEdgeIsCloser = relativeRootLeft < 0 || relativeRootDelta < 0; + var rightEdgeIsCloser = relativeRootRight > 0 || relativeRootDelta > 0; + if (leftEdgeIsCloser) { + return index - 1; + } + if (rightEdgeIsCloser) { + return index + 1; + } + return -1; + }; + /** + * Determines the index of the adjacent tab closest to either edge of the Tab Bar in RTL + * @param index The index of the tab + * @param tabDimensions The dimensions of the tab + * @param scrollPosition The current scroll position + * @param barWidth The width of the tab bar + * @param scrollContentWidth The width of the scroller content + */ + MDCTabBarFoundation.prototype.findAdjacentTabIndexClosestToEdgeRTL = function (index, tabDimensions, scrollPosition, barWidth, scrollContentWidth) { + var rootLeft = scrollContentWidth - tabDimensions.rootLeft - barWidth - scrollPosition; + var rootRight = scrollContentWidth - tabDimensions.rootRight - scrollPosition; + var rootDelta = rootLeft + rootRight; + var leftEdgeIsCloser = rootLeft > 0 || rootDelta > 0; + var rightEdgeIsCloser = rootRight < 0 || rootDelta < 0; + if (leftEdgeIsCloser) { + return index + 1; + } + if (rightEdgeIsCloser) { + return index - 1; + } + return -1; + }; + /** + * Returns the key associated with a keydown event + * @param evt The keydown event + */ + MDCTabBarFoundation.prototype.getKeyFromEvent = function (evt) { + if (ACCEPTABLE_KEYS.has(evt.key)) { + return evt.key; + } + return KEYCODE_MAP.get(evt.keyCode); + }; + MDCTabBarFoundation.prototype.isActivationKey = function (key) { + return key === tab_bar_constants_strings.SPACE_KEY || key === tab_bar_constants_strings.ENTER_KEY; + }; + /** + * Returns whether a given index is inclusively between the ends + * @param index The index to test + */ + MDCTabBarFoundation.prototype.indexIsInRange = function (index) { + return index >= 0 && index < this.adapter.getTabListLength(); + }; + /** + * Returns the view's RTL property + */ + MDCTabBarFoundation.prototype.isRTL = function () { + return this.adapter.isRTL(); + }; + /** + * Scrolls the tab at the given index into view for left-to-right user agents. + * @param index The index of the tab to scroll into view + */ + MDCTabBarFoundation.prototype.scrollIntoViewImpl = function (index) { + var scrollPosition = this.adapter.getScrollPosition(); + var barWidth = this.adapter.getOffsetWidth(); + var tabDimensions = this.adapter.getTabDimensionsAtIndex(index); + var nextIndex = this.findAdjacentTabIndexClosestToEdge(index, tabDimensions, scrollPosition, barWidth); + if (!this.indexIsInRange(nextIndex)) { + return; + } + var scrollIncrement = this.calculateScrollIncrement(index, nextIndex, scrollPosition, barWidth); + this.adapter.incrementScroll(scrollIncrement); + }; + /** + * Scrolls the tab at the given index into view in RTL + * @param index The tab index to make visible + */ + MDCTabBarFoundation.prototype.scrollIntoViewImplRTL = function (index) { + var scrollPosition = this.adapter.getScrollPosition(); + var barWidth = this.adapter.getOffsetWidth(); + var tabDimensions = this.adapter.getTabDimensionsAtIndex(index); + var scrollWidth = this.adapter.getScrollContentWidth(); + var nextIndex = this.findAdjacentTabIndexClosestToEdgeRTL(index, tabDimensions, scrollPosition, barWidth, scrollWidth); + if (!this.indexIsInRange(nextIndex)) { + return; + } + var scrollIncrement = this.calculateScrollIncrementRTL(index, nextIndex, scrollPosition, barWidth, scrollWidth); + this.adapter.incrementScroll(scrollIncrement); + }; + return MDCTabBarFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const tab_bar_foundation = ((/* unused pure expression or super */ null && (MDCTabBarFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tab-bar/component.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + +var tab_bar_component_strings = MDCTabBarFoundation.strings; +var tabIdCounter = 0; +var MDCTabBar = /** @class */ (function (_super) { + tslib_es6_extends(MDCTabBar, _super); + function MDCTabBar() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTabBar.attachTo = function (root) { + return new MDCTabBar(root); + }; + Object.defineProperty(MDCTabBar.prototype, "focusOnActivate", { + set: function (focusOnActivate) { + var e_1, _a; + try { + for (var _b = tslib_es6_values(this.tabList), _c = _b.next(); !_c.done; _c = _b.next()) { + var tab = _c.value; + tab.focusOnActivate = focusOnActivate; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTabBar.prototype, "useAutomaticActivation", { + set: function (useAutomaticActivation) { + this.foundation.setUseAutomaticActivation(useAutomaticActivation); + }, + enumerable: false, + configurable: true + }); + MDCTabBar.prototype.initialize = function (tabFactory, tabScrollerFactory) { + if (tabFactory === void 0) { tabFactory = function (el) { return new MDCTab(el); }; } + if (tabScrollerFactory === void 0) { tabScrollerFactory = function (el) { return new MDCTabScroller(el); }; } + this.tabList = this.instantiateTabs(tabFactory); + this.tabScroller = this.instantiatetabScroller(tabScrollerFactory); + }; + MDCTabBar.prototype.initialSyncWithDOM = function () { + var _this = this; + this.handleTabInteraction = function (evt) { + _this.foundation.handleTabInteraction(evt); + }; + this.handleKeyDown = function (evt) { + _this.foundation.handleKeyDown(evt); + }; + this.listen(MDCTabFoundation.strings.INTERACTED_EVENT, this.handleTabInteraction); + this.listen('keydown', this.handleKeyDown); + for (var i = 0; i < this.tabList.length; i++) { + if (this.tabList[i].active) { + this.scrollIntoView(i); + break; + } + } + }; + MDCTabBar.prototype.destroy = function () { + var e_2, _a; + _super.prototype.destroy.call(this); + this.unlisten(MDCTabFoundation.strings.INTERACTED_EVENT, this.handleTabInteraction); + this.unlisten('keydown', this.handleKeyDown); + try { + for (var _b = tslib_es6_values(this.tabList), _c = _b.next(); !_c.done; _c = _b.next()) { + var tab = _c.value; + tab.destroy(); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_2) throw e_2.error; } + } + if (this.tabScroller) { + this.tabScroller.destroy(); + } + }; + MDCTabBar.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = { + scrollTo: function (scrollX) { + _this.tabScroller.scrollTo(scrollX); + }, + incrementScroll: function (scrollXIncrement) { + _this.tabScroller.incrementScroll(scrollXIncrement); + }, + getScrollPosition: function () { return _this.tabScroller.getScrollPosition(); }, + getScrollContentWidth: function () { return _this.tabScroller.getScrollContentWidth(); }, + getOffsetWidth: function () { return _this.root.offsetWidth; }, + isRTL: function () { return window.getComputedStyle(_this.root).getPropertyValue('direction') === 'rtl'; }, + setActiveTab: function (index) { + _this.foundation.activateTab(index); + }, + activateTabAtIndex: function (index, clientRect) { + _this.tabList[index].activate(clientRect); + }, + deactivateTabAtIndex: function (index) { + _this.tabList[index].deactivate(); + }, + focusTabAtIndex: function (index) { + _this.tabList[index].focus(); + }, + getTabIndicatorClientRectAtIndex: function (index) { + return _this.tabList[index].computeIndicatorClientRect(); + }, + getTabDimensionsAtIndex: function (index) { + return _this.tabList[index].computeDimensions(); + }, + getPreviousActiveTabIndex: function () { + for (var i = 0; i < _this.tabList.length; i++) { + if (_this.tabList[i].active) { + return i; + } + } + return -1; + }, + getFocusedTabIndex: function () { + var tabElements = _this.getTabElements(); + var activeElement = document.activeElement; + return tabElements.indexOf(activeElement); + }, + getIndexOfTabById: function (id) { + for (var i = 0; i < _this.tabList.length; i++) { + if (_this.tabList[i].id === id) { + return i; + } + } + return -1; + }, + getTabListLength: function () { return _this.tabList.length; }, + notifyTabActivated: function (index) { return _this.emit(tab_bar_component_strings.TAB_ACTIVATED_EVENT, { index: index }, true); }, + }; + // tslint:enable:object-literal-sort-keys + return new MDCTabBarFoundation(adapter); + }; + /** + * Activates the tab at the given index + * @param index The index of the tab + */ + MDCTabBar.prototype.activateTab = function (index) { + this.foundation.activateTab(index); + }; + /** + * Scrolls the tab at the given index into view + * @param index THe index of the tab + */ + MDCTabBar.prototype.scrollIntoView = function (index) { + this.foundation.scrollIntoView(index); + }; + /** + * Returns all the tab elements in a nice clean array + */ + MDCTabBar.prototype.getTabElements = function () { + return [].slice.call(this.root.querySelectorAll(tab_bar_component_strings.TAB_SELECTOR)); + }; + /** + * Instantiates tab components on all child tab elements + */ + MDCTabBar.prototype.instantiateTabs = function (tabFactory) { + return this.getTabElements().map(function (el) { + el.id = el.id || "mdc-tab-" + ++tabIdCounter; + return tabFactory(el); + }); + }; + /** + * Instantiates tab scroller component on the child tab scroller element + */ + MDCTabBar.prototype.instantiatetabScroller = function (tabScrollerFactory) { + var tabScrollerElement = this.root.querySelector(tab_bar_component_strings.TAB_SCROLLER_SELECTOR); + if (tabScrollerElement) { + return tabScrollerFactory(tabScrollerElement); + } + return null; + }; + return MDCTabBar; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./Components/TabBar/MBTabBar.ts + +function MBTabBar_init(elem, dotNetObject) { + if (!elem) { + return; + } + elem._tabBar = MDCTabBar.attachTo(elem); + elem._callback = function () { + var index = elem._tabBar.foundation.adapter.getFocusedTabIndex(); + dotNetObject.invokeMethodAsync('NotifyActivated', index); + }; + elem._tabBar.listen('MDCTabBar:activated', elem._callback); +} +function activateTab(elem, index) { + if (!elem) { + return; + } + elem._tabBar.unlisten('MDCTabBar:activated', elem._callback); + elem._tabBar.activateTab(index); + elem._tabBar.listen('MDCTabBar:activated', elem._callback); +} +;// CONCATENATED MODULE: ./Components/TextField/MBTextField.ts + +function MBTextField_init(elem, value, helperTextElem, helperText, helperTextPersistent, performsValidation) { + if (!elem) { + return; + } + elem._textField = MDCTextField.attachTo(elem); + MBTextField_setValue(elem, value); + setHelperText(elem, helperTextElem, helperText, helperTextPersistent, performsValidation, false, ""); +} +function MBTextField_setValue(elem, value) { + if (!elem) { + return; + } + elem._textField.value = value; +} +function MBTextField_setDisabled(elem, value) { + if (!elem) { + return; + } + elem._textField.disabled = value; +} +function setHelperText(elem, helperTextElem, helperText, helperTextPersistent, performsValidation, shakeLabel, validationMessage) { + if (!elem || !helperTextElem) { + return; + } + if (helperText !== "" || performsValidation === true) { + if (!elem._helperText) { + elem._helperText = MDCTextFieldHelperText.attachTo(helperTextElem); + } + if (validationMessage !== "") { + elem._helperText.root.innerHTML = sanitizeHTMLWithBreaks(validationMessage); + elem._helperText.foundation.setPersistent(true); + elem._helperText.foundation.setValidation(true); + elem._helperText.foundation.setValidity(false); + elem._textField.foundation.setValid(false); + if (shakeLabel) { + elem._textField.foundation.adapter.shakeLabel(true); + } + } else if (helperText !== "") { + elem._helperText.foundation.setContent(helperText); + elem._helperText.foundation.setPersistent(helperTextPersistent); + elem._helperText.foundation.setValidation(false); + elem._helperText.foundation.setValidity(true); + elem._textField.foundation.setValid(true); + } else { + elem._helperText.foundation.setContent(""); + elem._helperText.foundation.setPersistent(false); + elem._helperText.foundation.setValidation(false); + elem._helperText.foundation.setValidity(true); + elem._textField.foundation.setValid(true); + } + } +} +function setType(elem, value, inputElem, type, formNoValidate) { + if (!elem || !inputElem) { + return; + } + inputElem.setAttribute("type", type); + inputElem.setAttribute("formnovalidate", formNoValidate); + elem._textField.value = value; + + // Check focus to eliminate race condition where if you (i) select a numeric field, (ii) click a different window + // then (iii) click back and straight into another numeric field, the two fields would conflict and flash between them. + // Seemed to happen in Blazor Server (presumably due to slower JS Invoke timing). Also probably not needed. Time will tell. + if (formNoValidate && elem._textField.foundation.adapter.isFocused() == true) { + //inputElem.focus(); + inputElem.select(); + } +} +/*! + * Sanitize and encode all HTML in a user-submitted string + * (c) 2018 Chris Ferdinandi, MIT License, https://gomakethings.com + * @param {String} str The user-submitted string + * @return {String} str The sanitized string + */ +function sanitizeHTMLWithBreaks(str) { + var tempDiv = document.createElement('div'); + tempDiv.textContent = str; + var sanitized = tempDiv.innerHTML; + tempDiv.remove(); + return sanitized.replace(new RegExp(escapeRegExp("<br />"), 'g'), "
"); + + // original code in JS + // return sanitized.replaceAll("<br />", "
"); + // https://stackoverflow.com/questions/43504533/typescript-javascript-replace-all-string-occurrences-with-random-number +} +function escapeRegExp(str) { + return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); +} +;// CONCATENATED MODULE: ./node_modules/@material/tooltip/constants.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var constants_CssClasses; +(function (CssClasses) { + CssClasses["RICH"] = "mdc-tooltip--rich"; + CssClasses["SHOWN"] = "mdc-tooltip--shown"; + CssClasses["SHOWING"] = "mdc-tooltip--showing"; + CssClasses["SHOWING_TRANSITION"] = "mdc-tooltip--showing-transition"; + CssClasses["HIDE"] = "mdc-tooltip--hide"; + CssClasses["HIDE_TRANSITION"] = "mdc-tooltip--hide-transition"; + CssClasses["MULTILINE_TOOLTIP"] = "mdc-tooltip--multiline"; + CssClasses["SURFACE"] = "mdc-tooltip__surface"; + CssClasses["SURFACE_ANIMATION"] = "mdc-tooltip__surface-animation"; + CssClasses["TOOLTIP_CARET_TOP"] = "mdc-tooltip__caret-surface-top"; + CssClasses["TOOLTIP_CARET_BOTTOM"] = "mdc-tooltip__caret-surface-bottom"; +})(constants_CssClasses || (constants_CssClasses = {})); +var tooltip_constants_numbers = { + BOUNDED_ANCHOR_GAP: 4, + UNBOUNDED_ANCHOR_GAP: 8, + MIN_VIEWPORT_TOOLTIP_THRESHOLD: 8, + HIDE_DELAY_MS: 600, + SHOW_DELAY_MS: 500, + // LINT.IfChange(tooltip-dimensions) + MIN_HEIGHT: 24, + MAX_WIDTH: 200, + // LINT.ThenChange(_tooltip.scss:tooltip-dimensions) + CARET_INDENTATION: 24, + // LINT.IfChange(tooltip-anim-scale) + ANIMATION_SCALE: 0.8, + // LINT.ThenChange(_tooltip.scss:tooltip-anim-scale) +}; +var tooltip_constants_attributes = { + ARIA_EXPANDED: 'aria-expanded', + ARIA_HASPOPUP: 'aria-haspopup', + PERSISTENT: 'data-mdc-tooltip-persistent', + SCROLLABLE_ANCESTOR: 'tooltip-scrollable-ancestor', + HAS_CARET: 'data-mdc-tooltip-has-caret', +}; +var tooltip_constants_events = { + HIDDEN: 'MDCTooltip:hidden', +}; +/** Enum for possible tooltip positioning relative to its anchor element. */ +var XPosition; +(function (XPosition) { + XPosition[XPosition["DETECTED"] = 0] = "DETECTED"; + XPosition[XPosition["START"] = 1] = "START"; + // Note: CENTER is not valid for rich tooltips. + XPosition[XPosition["CENTER"] = 2] = "CENTER"; + XPosition[XPosition["END"] = 3] = "END"; +})(XPosition || (XPosition = {})); +var YPosition; +(function (YPosition) { + YPosition[YPosition["DETECTED"] = 0] = "DETECTED"; + YPosition[YPosition["ABOVE"] = 1] = "ABOVE"; + YPosition[YPosition["BELOW"] = 2] = "BELOW"; +})(YPosition || (YPosition = {})); +/** + * Enum for possible anchor boundary types. This determines the gap between the + * bottom of the anchor and the tooltip element. + * Bounded anchors have an identifiable boundary (e.g. buttons). + * Unbounded anchors don't have a visually declared boundary (e.g. plain text). + */ +var AnchorBoundaryType; +(function (AnchorBoundaryType) { + AnchorBoundaryType[AnchorBoundaryType["BOUNDED"] = 0] = "BOUNDED"; + AnchorBoundaryType[AnchorBoundaryType["UNBOUNDED"] = 1] = "UNBOUNDED"; +})(AnchorBoundaryType || (AnchorBoundaryType = {})); +var tooltip_constants_strings = { + LEFT: 'left', + RIGHT: 'right', + CENTER: 'center', + TOP: 'top', + BOTTOM: 'bottom' +}; +/** + * Enum for possible positions of a tooltip with caret (this specifies the + * positioning of the tooltip relative to the anchor -- the position of the + * caret will follow that of the tooltip). This can NOT be combined with the + * above X/YPosition options. Naming for the enums follows: (vertical + * placement)_(horizontal placement). + */ +var PositionWithCaret; +(function (PositionWithCaret) { + PositionWithCaret[PositionWithCaret["DETECTED"] = 0] = "DETECTED"; + PositionWithCaret[PositionWithCaret["ABOVE_START"] = 1] = "ABOVE_START"; + PositionWithCaret[PositionWithCaret["ABOVE_CENTER"] = 2] = "ABOVE_CENTER"; + PositionWithCaret[PositionWithCaret["ABOVE_END"] = 3] = "ABOVE_END"; + PositionWithCaret[PositionWithCaret["TOP_SIDE_START"] = 4] = "TOP_SIDE_START"; + PositionWithCaret[PositionWithCaret["CENTER_SIDE_START"] = 5] = "CENTER_SIDE_START"; + PositionWithCaret[PositionWithCaret["BOTTOM_SIDE_START"] = 6] = "BOTTOM_SIDE_START"; + PositionWithCaret[PositionWithCaret["TOP_SIDE_END"] = 7] = "TOP_SIDE_END"; + PositionWithCaret[PositionWithCaret["CENTER_SIDE_END"] = 8] = "CENTER_SIDE_END"; + PositionWithCaret[PositionWithCaret["BOTTOM_SIDE_END"] = 9] = "BOTTOM_SIDE_END"; + PositionWithCaret[PositionWithCaret["BELOW_START"] = 10] = "BELOW_START"; + PositionWithCaret[PositionWithCaret["BELOW_CENTER"] = 11] = "BELOW_CENTER"; + PositionWithCaret[PositionWithCaret["BELOW_END"] = 12] = "BELOW_END"; +})(PositionWithCaret || (PositionWithCaret = {})); +var YPositionWithCaret; +(function (YPositionWithCaret) { + YPositionWithCaret[YPositionWithCaret["ABOVE"] = 1] = "ABOVE"; + YPositionWithCaret[YPositionWithCaret["BELOW"] = 2] = "BELOW"; + YPositionWithCaret[YPositionWithCaret["SIDE_TOP"] = 3] = "SIDE_TOP"; + YPositionWithCaret[YPositionWithCaret["SIDE_CENTER"] = 4] = "SIDE_CENTER"; + YPositionWithCaret[YPositionWithCaret["SIDE_BOTTOM"] = 5] = "SIDE_BOTTOM"; +})(YPositionWithCaret || (YPositionWithCaret = {})); +var XPositionWithCaret; +(function (XPositionWithCaret) { + XPositionWithCaret[XPositionWithCaret["START"] = 1] = "START"; + XPositionWithCaret[XPositionWithCaret["CENTER"] = 2] = "CENTER"; + XPositionWithCaret[XPositionWithCaret["END"] = 3] = "END"; + XPositionWithCaret[XPositionWithCaret["SIDE_START"] = 4] = "SIDE_START"; + XPositionWithCaret[XPositionWithCaret["SIDE_END"] = 5] = "SIDE_END"; +})(XPositionWithCaret || (XPositionWithCaret = {})); + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tooltip/foundation.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + +var RICH = constants_CssClasses.RICH, SHOWN = constants_CssClasses.SHOWN, SHOWING = constants_CssClasses.SHOWING, SHOWING_TRANSITION = constants_CssClasses.SHOWING_TRANSITION, HIDE = constants_CssClasses.HIDE, HIDE_TRANSITION = constants_CssClasses.HIDE_TRANSITION, MULTILINE_TOOLTIP = constants_CssClasses.MULTILINE_TOOLTIP; +var tooltip_foundation_AnimationKeys; +(function (AnimationKeys) { + AnimationKeys["POLL_ANCHOR"] = "poll_anchor"; +})(tooltip_foundation_AnimationKeys || (tooltip_foundation_AnimationKeys = {})); +// Accessing `window` without a `typeof` check will throw on Node environments. +var foundation_HAS_WINDOW = typeof window !== 'undefined'; +var MDCTooltipFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCTooltipFoundation, _super); + function MDCTooltipFoundation(adapter) { + var _this = _super.call(this, __assign(__assign({}, MDCTooltipFoundation.defaultAdapter), adapter)) || this; + _this.tooltipShown = false; + _this.anchorGap = tooltip_constants_numbers.BOUNDED_ANCHOR_GAP; + _this.xTooltipPos = XPosition.DETECTED; + _this.yTooltipPos = YPosition.DETECTED; + _this.tooltipPositionWithCaret = PositionWithCaret.DETECTED; + // Minimum threshold distance needed between the tooltip and the viewport. + _this.minViewportTooltipThreshold = tooltip_constants_numbers.MIN_VIEWPORT_TOOLTIP_THRESHOLD; + _this.hideDelayMs = tooltip_constants_numbers.HIDE_DELAY_MS; + _this.showDelayMs = tooltip_constants_numbers.SHOW_DELAY_MS; + _this.anchorRect = null; + _this.parentRect = null; + _this.frameId = null; + _this.hideTimeout = null; + _this.showTimeout = null; + _this.addAncestorScrollEventListeners = new Array(); + _this.removeAncestorScrollEventListeners = new Array(); + _this.animFrame = new AnimationFrame(); + _this.anchorBlurHandler = function (evt) { + _this.handleAnchorBlur(evt); + }; + _this.documentClickHandler = function (evt) { + _this.handleDocumentClick(evt); + }; + _this.documentKeydownHandler = function (evt) { + _this.handleKeydown(evt); + }; + _this.tooltipMouseEnterHandler = function () { + _this.handleTooltipMouseEnter(); + }; + _this.tooltipMouseLeaveHandler = function () { + _this.handleTooltipMouseLeave(); + }; + _this.richTooltipFocusOutHandler = function (evt) { + _this.handleRichTooltipFocusOut(evt); + }; + _this.windowScrollHandler = function () { + _this.handleWindowScrollEvent(); + }; + _this.windowResizeHandler = function () { + _this.handleWindowChangeEvent(); + }; + return _this; + } + Object.defineProperty(MDCTooltipFoundation, "defaultAdapter", { + get: function () { + return { + getAttribute: function () { return null; }, + setAttribute: function () { return undefined; }, + removeAttribute: function () { return undefined; }, + addClass: function () { return undefined; }, + hasClass: function () { return false; }, + removeClass: function () { return undefined; }, + getComputedStyleProperty: function () { return ''; }, + setStyleProperty: function () { return undefined; }, + setSurfaceAnimationStyleProperty: function () { return undefined; }, + getViewportWidth: function () { return 0; }, + getViewportHeight: function () { return 0; }, + getTooltipSize: function () { return ({ width: 0, height: 0 }); }, + getAnchorBoundingRect: function () { + return ({ top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }); + }, + getParentBoundingRect: function () { + return ({ top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }); + }, + getAnchorAttribute: function () { return null; }, + setAnchorAttribute: function () { return null; }, + isRTL: function () { return false; }, + anchorContainsElement: function () { return false; }, + tooltipContainsElement: function () { return false; }, + focusAnchorElement: function () { return undefined; }, + registerEventHandler: function () { return undefined; }, + deregisterEventHandler: function () { return undefined; }, + registerAnchorEventHandler: function () { return undefined; }, + deregisterAnchorEventHandler: function () { return undefined; }, + registerDocumentEventHandler: function () { return undefined; }, + deregisterDocumentEventHandler: function () { return undefined; }, + registerWindowEventHandler: function () { return undefined; }, + deregisterWindowEventHandler: function () { return undefined; }, + notifyHidden: function () { return undefined; }, + getTooltipCaretBoundingRect: function () { + return ({ top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }); + }, + setTooltipCaretStyle: function () { return undefined; }, + clearTooltipCaretStyles: function () { return undefined; }, + getActiveElement: function () { return null; }, + }; + }, + enumerable: false, + configurable: true + }); + MDCTooltipFoundation.prototype.init = function () { + this.richTooltip = this.adapter.hasClass(RICH); + this.persistentTooltip = + this.adapter.getAttribute(tooltip_constants_attributes.PERSISTENT) === 'true'; + this.interactiveTooltip = + !!this.adapter.getAnchorAttribute(tooltip_constants_attributes.ARIA_EXPANDED) && + this.adapter.getAnchorAttribute(tooltip_constants_attributes.ARIA_HASPOPUP) === 'dialog'; + this.hasCaret = this.richTooltip && + this.adapter.getAttribute(tooltip_constants_attributes.HAS_CARET) === 'true'; + }; + MDCTooltipFoundation.prototype.isShown = function () { + return this.tooltipShown; + }; + MDCTooltipFoundation.prototype.isRich = function () { + return this.richTooltip; + }; + MDCTooltipFoundation.prototype.isPersistent = function () { + return this.persistentTooltip; + }; + MDCTooltipFoundation.prototype.handleAnchorMouseEnter = function () { + var _this = this; + if (this.tooltipShown) { + // Covers the instance where a user hovers over the anchor to reveal the + // tooltip, and then quickly navigates away and then back to the anchor. + // The tooltip should stay visible without animating out and then back in + // again. + this.show(); + } + else { + // clearHideTimeout here since handleAnchorMouseLeave sets a hideTimeout + // and that can execute before the showTimeout executes, resulting in hide + // being called and the showTimeout set below to be cleared. + this.clearHideTimeout(); + this.showTimeout = setTimeout(function () { + _this.show(); + }, this.showDelayMs); + } + }; + MDCTooltipFoundation.prototype.handleAnchorTouchstart = function () { + var _this = this; + this.showTimeout = setTimeout(function () { + _this.show(); + }, this.showDelayMs); + // Prevent a context menu from appearing if user is long-pressing on a + // tooltip anchor. + this.adapter.registerWindowEventHandler('contextmenu', this.preventContextMenuOnLongTouch); + }; + MDCTooltipFoundation.prototype.preventContextMenuOnLongTouch = function (evt) { + evt.preventDefault(); + }; + MDCTooltipFoundation.prototype.handleAnchorTouchend = function () { + this.clearShowTimeout(); + // Only remove the 'contextmenu' listener if the tooltip is not shown. When + // the tooltip *is* shown, listener is removed in the close method. + if (!this.isShown()) { + this.adapter.deregisterWindowEventHandler('contextmenu', this.preventContextMenuOnLongTouch); + } + }; + MDCTooltipFoundation.prototype.handleAnchorFocus = function (evt) { + var _this = this; + // TODO(b/157075286): Need to add some way to distinguish keyboard + // navigation focus events from other focus events, and only show the + // tooltip on the former of these events. + var relatedTarget = evt.relatedTarget; + var tooltipContainsRelatedTarget = relatedTarget instanceof HTMLElement && + this.adapter.tooltipContainsElement(relatedTarget); + // Do not show tooltip if the previous focus was on a tooltip element. This + // occurs when a rich tooltip is closed and focus is restored to the anchor + // or when user tab-navigates back into the anchor from the rich tooltip. + if (tooltipContainsRelatedTarget) { + return; + } + this.showTimeout = setTimeout(function () { + _this.show(); + }, this.showDelayMs); + }; + MDCTooltipFoundation.prototype.handleAnchorMouseLeave = function () { + var _this = this; + this.clearShowTimeout(); + this.hideTimeout = setTimeout(function () { + _this.hide(); + }, this.hideDelayMs); + }; + MDCTooltipFoundation.prototype.handleAnchorClick = function () { + if (this.tooltipShown) { + this.hide(); + } + else { + this.show(); + } + }; + MDCTooltipFoundation.prototype.handleDocumentClick = function (evt) { + var anchorOrTooltipContainsTargetElement = evt.target instanceof HTMLElement && + (this.adapter.anchorContainsElement(evt.target) || + this.adapter.tooltipContainsElement(evt.target)); + // For persistent rich tooltips, we will not hide if: + // - The click target is within the anchor element. Otherwise, both + // the anchor element's click handler and this handler will handle the + // click (due to event propagation), resulting in a shown tooltip + // being immediately hidden if the tooltip was initially hidden. + // - The click target is within the tooltip element, since clicks + // on the tooltip do not close the tooltip. + if (this.richTooltip && this.persistentTooltip && + anchorOrTooltipContainsTargetElement) { + return; + } + // Hide the tooltip immediately on click. + this.hide(); + }; + MDCTooltipFoundation.prototype.handleKeydown = function (evt) { + // Hide the tooltip immediately on ESC key. + var key = normalizeKey(evt); + if (key === KEY.ESCAPE) { + var activeElement = this.adapter.getActiveElement(); + var tooltipContainsActiveElement = activeElement instanceof HTMLElement && + this.adapter.tooltipContainsElement(activeElement); + if (tooltipContainsActiveElement) { + this.adapter.focusAnchorElement(); + } + this.hide(); + } + }; + MDCTooltipFoundation.prototype.handleAnchorBlur = function (evt) { + if (this.richTooltip) { + var tooltipContainsRelatedTargetElement = evt.relatedTarget instanceof HTMLElement && + this.adapter.tooltipContainsElement(evt.relatedTarget); + // If focus changed to the tooltip element, don't hide the tooltip. + if (tooltipContainsRelatedTargetElement) { + return; + } + if (evt.relatedTarget === null && this.interactiveTooltip) { + // If evt.relatedTarget is null, it is because focus is moving to an + // element that is not focusable. This should only occur in instances + // of a screen reader in browse mode/linear navigation mode. If the + // tooltip is interactive (and so the entire content is not read by + // the screen reader upon the tooltip being opened), we want to allow + // users to read the content of the tooltip (and not just the focusable + // elements). + return; + } + } + // Hide tooltip immediately on focus change. + this.hide(); + }; + MDCTooltipFoundation.prototype.handleTooltipMouseEnter = function () { + this.show(); + }; + MDCTooltipFoundation.prototype.handleTooltipMouseLeave = function () { + var _this = this; + this.clearShowTimeout(); + this.hideTimeout = setTimeout(function () { + _this.hide(); + }, this.hideDelayMs); + }; + MDCTooltipFoundation.prototype.handleRichTooltipFocusOut = function (evt) { + var anchorOrTooltipContainsRelatedTargetElement = evt.relatedTarget instanceof HTMLElement && + (this.adapter.anchorContainsElement(evt.relatedTarget) || + this.adapter.tooltipContainsElement(evt.relatedTarget)); + // If the focus is still within the anchor or the tooltip, do not hide the + // tooltip. + if (anchorOrTooltipContainsRelatedTargetElement) { + return; + } + if (evt.relatedTarget === null && this.interactiveTooltip) { + // If evt.relatedTarget is null, it is because focus is moving to an + // element that is not focusable. This should only occur in instances + // of a screen reader in browse mode/linear navigation mode. If the + // tooltip is interactive (and so the entire content is not read by + // the screen reader upon the tooltip being opened), we want to allow + // users to read the content of the tooltip (and not just the focusable + // elements). + return; + } + this.hide(); + }; + MDCTooltipFoundation.prototype.handleWindowScrollEvent = function () { + if (this.persistentTooltip) { + // Persistent tooltips remain visible on user scroll, call appropriate + // handler to ensure the tooltip remains pinned to the anchor on page + // scroll. + this.handleWindowChangeEvent(); + return; + } + this.hide(); + }; + /** + * On window resize or scroll, check the anchor position and size and + * repostion tooltip if necessary. + */ + MDCTooltipFoundation.prototype.handleWindowChangeEvent = function () { + var _this = this; + // Since scroll and resize events can fire at a high rate, we throttle + // the potential re-positioning of tooltip component using + // requestAnimationFrame. + this.animFrame.request(tooltip_foundation_AnimationKeys.POLL_ANCHOR, function () { + _this.repositionTooltipOnAnchorMove(); + }); + }; + MDCTooltipFoundation.prototype.show = function () { + var e_1, _a; + var _this = this; + this.clearHideTimeout(); + this.clearShowTimeout(); + if (this.tooltipShown) { + return; + } + this.tooltipShown = true; + this.adapter.removeAttribute('aria-hidden'); + if (this.richTooltip) { + if (this.interactiveTooltip) { + this.adapter.setAnchorAttribute('aria-expanded', 'true'); + } + this.adapter.registerEventHandler('focusout', this.richTooltipFocusOutHandler); + } + if (!this.persistentTooltip) { + this.adapter.registerEventHandler('mouseenter', this.tooltipMouseEnterHandler); + this.adapter.registerEventHandler('mouseleave', this.tooltipMouseLeaveHandler); + } + this.adapter.removeClass(HIDE); + this.adapter.addClass(SHOWING); + if (this.isTooltipMultiline() && !this.richTooltip) { + this.adapter.addClass(MULTILINE_TOOLTIP); + } + this.anchorRect = this.adapter.getAnchorBoundingRect(); + this.parentRect = this.adapter.getParentBoundingRect(); + this.richTooltip ? this.positionRichTooltip() : this.positionPlainTooltip(); + this.adapter.registerAnchorEventHandler('blur', this.anchorBlurHandler); + this.adapter.registerDocumentEventHandler('click', this.documentClickHandler); + this.adapter.registerDocumentEventHandler('keydown', this.documentKeydownHandler); + this.adapter.registerWindowEventHandler('scroll', this.windowScrollHandler); + this.adapter.registerWindowEventHandler('resize', this.windowResizeHandler); + try { + // Register any additional scroll handlers + for (var _b = tslib_es6_values(this.addAncestorScrollEventListeners), _c = _b.next(); !_c.done; _c = _b.next()) { + var fn = _c.value; + fn(); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + this.frameId = requestAnimationFrame(function () { + _this.clearAllAnimationClasses(); + _this.adapter.addClass(SHOWN); + _this.adapter.addClass(SHOWING_TRANSITION); + }); + }; + MDCTooltipFoundation.prototype.hide = function () { + var e_2, _a; + this.clearHideTimeout(); + this.clearShowTimeout(); + if (!this.tooltipShown) { + return; + } + if (this.frameId) { + cancelAnimationFrame(this.frameId); + } + this.tooltipShown = false; + this.adapter.setAttribute('aria-hidden', 'true'); + this.adapter.deregisterEventHandler('focusout', this.richTooltipFocusOutHandler); + if (this.richTooltip) { + if (this.interactiveTooltip) { + this.adapter.setAnchorAttribute('aria-expanded', 'false'); + } + } + if (!this.persistentTooltip) { + this.adapter.deregisterEventHandler('mouseenter', this.tooltipMouseEnterHandler); + this.adapter.deregisterEventHandler('mouseleave', this.tooltipMouseLeaveHandler); + } + this.clearAllAnimationClasses(); + this.adapter.addClass(HIDE); + this.adapter.addClass(HIDE_TRANSITION); + this.adapter.removeClass(SHOWN); + this.adapter.deregisterAnchorEventHandler('blur', this.anchorBlurHandler); + this.adapter.deregisterDocumentEventHandler('click', this.documentClickHandler); + this.adapter.deregisterDocumentEventHandler('keydown', this.documentKeydownHandler); + this.adapter.deregisterWindowEventHandler('scroll', this.windowScrollHandler); + this.adapter.deregisterWindowEventHandler('resize', this.windowResizeHandler); + this.adapter.deregisterWindowEventHandler('contextmenu', this.preventContextMenuOnLongTouch); + try { + // Deregister any additional scroll handlers + for (var _b = tslib_es6_values(this.removeAncestorScrollEventListeners), _c = _b.next(); !_c.done; _c = _b.next()) { + var fn = _c.value; + fn(); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_2) throw e_2.error; } + } + }; + MDCTooltipFoundation.prototype.handleTransitionEnd = function () { + var isHidingTooltip = this.adapter.hasClass(HIDE); + this.adapter.removeClass(SHOWING); + this.adapter.removeClass(SHOWING_TRANSITION); + this.adapter.removeClass(HIDE); + this.adapter.removeClass(HIDE_TRANSITION); + // If handleTransitionEnd is called after hiding the tooltip, the tooltip + // will have the HIDE class (before calling the adapter removeClass method). + // If tooltip is now hidden, send a notification that the animation has + // completed and the tooltip is no longer visible. + // We don't send a notification of the animation completing if a showTimeout + // value is set -- this happens when a user triggers a tooltip to be shown + // while that tooltip is fading. Once this hide transition is completed, + // that same tooltip will be re-shown. + if (isHidingTooltip && this.showTimeout === null) { + this.adapter.notifyHidden(); + } + }; + MDCTooltipFoundation.prototype.clearAllAnimationClasses = function () { + this.adapter.removeClass(SHOWING_TRANSITION); + this.adapter.removeClass(HIDE_TRANSITION); + }; + MDCTooltipFoundation.prototype.setTooltipPosition = function (position) { + var xPos = position.xPos, yPos = position.yPos, withCaretPos = position.withCaretPos; + if (this.hasCaret && withCaretPos) { + this.tooltipPositionWithCaret = withCaretPos; + return; + } + if (xPos) { + this.xTooltipPos = xPos; + } + if (yPos) { + this.yTooltipPos = yPos; + } + }; + MDCTooltipFoundation.prototype.setAnchorBoundaryType = function (type) { + if (type === AnchorBoundaryType.UNBOUNDED) { + this.anchorGap = tooltip_constants_numbers.UNBOUNDED_ANCHOR_GAP; + } + else { + this.anchorGap = tooltip_constants_numbers.BOUNDED_ANCHOR_GAP; + } + }; + MDCTooltipFoundation.prototype.setShowDelay = function (delayMs) { + this.showDelayMs = delayMs; + }; + MDCTooltipFoundation.prototype.setHideDelay = function (delayMs) { + this.hideDelayMs = delayMs; + }; + MDCTooltipFoundation.prototype.isTooltipMultiline = function () { + var tooltipSize = this.adapter.getTooltipSize(); + return tooltipSize.height > tooltip_constants_numbers.MIN_HEIGHT && + tooltipSize.width >= tooltip_constants_numbers.MAX_WIDTH; + }; + MDCTooltipFoundation.prototype.positionPlainTooltip = function () { + // A plain tooltip has `fixed` positioning and is placed as an immediate + // child of the document body. Its positioning is calculated with respect to + // the viewport. + var _a = this.calculateTooltipStyles(this.anchorRect), top = _a.top, yTransformOrigin = _a.yTransformOrigin, left = _a.left, xTransformOrigin = _a.xTransformOrigin; + var transformProperty = foundation_HAS_WINDOW ? getCorrectPropertyName(window, 'transform') : 'transform'; + this.adapter.setSurfaceAnimationStyleProperty(transformProperty + "-origin", xTransformOrigin + " " + yTransformOrigin); + this.adapter.setStyleProperty('top', top + "px"); + this.adapter.setStyleProperty('left', left + "px"); + }; + MDCTooltipFoundation.prototype.positionRichTooltip = function () { + // TODO(b/177686782): Remove width setting when max-content is used to style + // the rich tooltip. + var _a, _b, _c, _d; + // getComputedStyleProperty is used instead of getTooltipSize since + // getTooltipSize returns the offSetWidth, which includes the border and + // padding. What we need is the width of the tooltip without border and + // padding. + var width = this.adapter.getComputedStyleProperty('width'); + // When rich tooltips are positioned within their parent containers, the + // tooltip width might be shrunk if it collides with the edge of the parent + // container. We set the width of the tooltip to prevent this. + this.adapter.setStyleProperty('width', width); + var _e = this.hasCaret ? + this.calculateTooltipWithCaretStyles(this.anchorRect) : + this.calculateTooltipStyles(this.anchorRect), top = _e.top, yTransformOrigin = _e.yTransformOrigin, left = _e.left, xTransformOrigin = _e.xTransformOrigin; + var transformProperty = foundation_HAS_WINDOW ? getCorrectPropertyName(window, 'transform') : 'transform'; + this.adapter.setSurfaceAnimationStyleProperty(transformProperty + "-origin", xTransformOrigin + " " + yTransformOrigin); + // A rich tooltip has `absolute` positioning and is placed as a sibling to + // the anchor element. Its positioning is calculated with respect to the + // parent element, and so the values need to be adjusted against the parent + // element. + var leftAdjustment = left - ((_b = (_a = this.parentRect) === null || _a === void 0 ? void 0 : _a.left) !== null && _b !== void 0 ? _b : 0); + var topAdjustment = top - ((_d = (_c = this.parentRect) === null || _c === void 0 ? void 0 : _c.top) !== null && _d !== void 0 ? _d : 0); + this.adapter.setStyleProperty('top', topAdjustment + "px"); + this.adapter.setStyleProperty('left', leftAdjustment + "px"); + }; + /** + * Calculates the position of the tooltip. A tooltip will be placed beneath + * the anchor element and aligned either with the 'start'/'end' edge of the + * anchor element or the 'center'. + * + * Tooltip alignment is selected such that the tooltip maintains a threshold + * distance away from the viewport (defaulting to 'center' alignment). If the + * placement of the anchor prevents this threshold distance from being + * maintained, the tooltip is positioned so that it does not collide with the + * viewport. + * + * Users can specify an alignment, however, if this alignment results in the + * tooltip colliding with the viewport, this specification is overwritten. + */ + MDCTooltipFoundation.prototype.calculateTooltipStyles = function (anchorRect) { + if (!anchorRect) { + return { top: 0, left: 0 }; + } + var tooltipSize = this.adapter.getTooltipSize(); + var top = this.calculateYTooltipDistance(anchorRect, tooltipSize.height); + var left = this.calculateXTooltipDistance(anchorRect, tooltipSize.width); + return { + top: top.distance, + yTransformOrigin: top.yTransformOrigin, + left: left.distance, + xTransformOrigin: left.xTransformOrigin + }; + }; + /** + * Calculates the `left` distance for the tooltip. + * Returns the distance value and a string indicating the x-axis transform- + * origin that should be used when animating the tooltip. + */ + MDCTooltipFoundation.prototype.calculateXTooltipDistance = function (anchorRect, tooltipWidth) { + var isLTR = !this.adapter.isRTL(); + var startPos, endPos, centerPos; + var startTransformOrigin, endTransformOrigin; + if (this.richTooltip) { + startPos = isLTR ? anchorRect.left - tooltipWidth : anchorRect.right; + endPos = isLTR ? anchorRect.right : anchorRect.left - tooltipWidth; + startTransformOrigin = isLTR ? tooltip_constants_strings.RIGHT : tooltip_constants_strings.LEFT; + endTransformOrigin = isLTR ? tooltip_constants_strings.LEFT : tooltip_constants_strings.RIGHT; + } + else { + startPos = isLTR ? anchorRect.left : anchorRect.right - tooltipWidth; + endPos = isLTR ? anchorRect.right - tooltipWidth : anchorRect.left; + centerPos = anchorRect.left + (anchorRect.width - tooltipWidth) / 2; + startTransformOrigin = isLTR ? tooltip_constants_strings.LEFT : tooltip_constants_strings.RIGHT; + endTransformOrigin = isLTR ? tooltip_constants_strings.RIGHT : tooltip_constants_strings.LEFT; + } + var positionOptions = this.richTooltip ? + this.determineValidPositionOptions(startPos, endPos) : + // For plain tooltips, centerPos is defined + this.determineValidPositionOptions(centerPos, startPos, endPos); + if (this.xTooltipPos === XPosition.START && positionOptions.has(startPos)) { + return { distance: startPos, xTransformOrigin: startTransformOrigin }; + } + if (this.xTooltipPos === XPosition.END && positionOptions.has(endPos)) { + return { distance: endPos, xTransformOrigin: endTransformOrigin }; + } + if (this.xTooltipPos === XPosition.CENTER && + positionOptions.has(centerPos)) { + // This code path is only executed if calculating the distance for plain + // tooltips. In this instance, centerPos will always be defined, so we can + // safely assert that the returned value is non-null/undefined. + return { distance: centerPos, xTransformOrigin: tooltip_constants_strings.CENTER }; + } + // If no user position is supplied, rich tooltips default to end pos, then + // start position. Plain tooltips default to center, start, then end. + var possiblePositions = this.richTooltip ? + [ + { distance: endPos, xTransformOrigin: endTransformOrigin }, + { distance: startPos, xTransformOrigin: startTransformOrigin } + ] : + [ + { distance: centerPos, xTransformOrigin: tooltip_constants_strings.CENTER }, + { distance: startPos, xTransformOrigin: startTransformOrigin }, + { distance: endPos, xTransformOrigin: endTransformOrigin } + ]; + var validPosition = possiblePositions.find(function (_a) { + var distance = _a.distance; + return positionOptions.has(distance); + }); + if (validPosition) { + return validPosition; + } + // Indicates that all potential positions would result in the tooltip + // colliding with the viewport. This would only occur when the anchor + // element itself collides with the viewport, or the viewport is very + // narrow. In this case, we allow the tooltip to be mis-aligned from the + // anchor element. + if (anchorRect.left < 0) { + return { + distance: this.minViewportTooltipThreshold, + xTransformOrigin: tooltip_constants_strings.LEFT + }; + } + else { + var viewportWidth = this.adapter.getViewportWidth(); + var distance = viewportWidth - (tooltipWidth + this.minViewportTooltipThreshold); + return { distance: distance, xTransformOrigin: tooltip_constants_strings.RIGHT }; + } + }; + /** + * Given the values for the horizontal alignments of the tooltip, calculates + * which of these options would result in the tooltip maintaining the required + * threshold distance vs which would result in the tooltip staying within the + * viewport. + * + * A Set of values is returned holding the distances that would honor the + * above requirements. Following the logic for determining the tooltip + * position, if all alignments violate the threshold, then the returned Set + * contains values that keep the tooltip within the viewport. + */ + MDCTooltipFoundation.prototype.determineValidPositionOptions = function () { + var e_3, _a; + var positions = []; + for (var _i = 0; _i < arguments.length; _i++) { + positions[_i] = arguments[_i]; + } + var posWithinThreshold = new Set(); + var posWithinViewport = new Set(); + try { + for (var positions_1 = tslib_es6_values(positions), positions_1_1 = positions_1.next(); !positions_1_1.done; positions_1_1 = positions_1.next()) { + var position = positions_1_1.value; + if (this.positionHonorsViewportThreshold(position)) { + posWithinThreshold.add(position); + } + else if (this.positionDoesntCollideWithViewport(position)) { + posWithinViewport.add(position); + } + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (positions_1_1 && !positions_1_1.done && (_a = positions_1.return)) _a.call(positions_1); + } + finally { if (e_3) throw e_3.error; } + } + return posWithinThreshold.size ? posWithinThreshold : posWithinViewport; + }; + MDCTooltipFoundation.prototype.positionHonorsViewportThreshold = function (leftPos) { + var viewportWidth = this.adapter.getViewportWidth(); + var tooltipWidth = this.adapter.getTooltipSize().width; + return leftPos + tooltipWidth <= + viewportWidth - this.minViewportTooltipThreshold && + leftPos >= this.minViewportTooltipThreshold; + }; + MDCTooltipFoundation.prototype.positionDoesntCollideWithViewport = function (leftPos) { + var viewportWidth = this.adapter.getViewportWidth(); + var tooltipWidth = this.adapter.getTooltipSize().width; + return leftPos + tooltipWidth <= viewportWidth && leftPos >= 0; + }; + /** + * Calculates the `top` distance for the tooltip. + * Returns the distance value and a string indicating the y-axis transform- + * origin that should be used when animating the tooltip. + */ + MDCTooltipFoundation.prototype.calculateYTooltipDistance = function (anchorRect, tooltipHeight) { + var belowYPos = anchorRect.bottom + this.anchorGap; + var aboveYPos = anchorRect.top - (this.anchorGap + tooltipHeight); + var yPositionOptions = this.determineValidYPositionOptions(aboveYPos, belowYPos); + if (this.yTooltipPos === YPosition.ABOVE && + yPositionOptions.has(aboveYPos)) { + return { distance: aboveYPos, yTransformOrigin: tooltip_constants_strings.BOTTOM }; + } + else if (this.yTooltipPos === YPosition.BELOW && + yPositionOptions.has(belowYPos)) { + return { distance: belowYPos, yTransformOrigin: tooltip_constants_strings.TOP }; + } + if (yPositionOptions.has(belowYPos)) { + return { distance: belowYPos, yTransformOrigin: tooltip_constants_strings.TOP }; + } + if (yPositionOptions.has(aboveYPos)) { + return { distance: aboveYPos, yTransformOrigin: tooltip_constants_strings.BOTTOM }; + } + // Indicates that all potential positions would result in the tooltip + // colliding with the viewport. This would only occur when the viewport is + // very short. + return { distance: belowYPos, yTransformOrigin: tooltip_constants_strings.TOP }; + }; + /** + * Given the values for above/below alignment of the tooltip, calculates + * which of these options would result in the tooltip maintaining the required + * threshold distance vs which would result in the tooltip staying within the + * viewport. + * + * A Set of values is returned holding the distances that would honor the + * above requirements. Following the logic for determining the tooltip + * position, if all possible alignments violate the threshold, then the + * returned Set contains values that keep the tooltip within the viewport. + */ + MDCTooltipFoundation.prototype.determineValidYPositionOptions = function (aboveAnchorPos, belowAnchorPos) { + var posWithinThreshold = new Set(); + var posWithinViewport = new Set(); + if (this.yPositionHonorsViewportThreshold(aboveAnchorPos)) { + posWithinThreshold.add(aboveAnchorPos); + } + else if (this.yPositionDoesntCollideWithViewport(aboveAnchorPos)) { + posWithinViewport.add(aboveAnchorPos); + } + if (this.yPositionHonorsViewportThreshold(belowAnchorPos)) { + posWithinThreshold.add(belowAnchorPos); + } + else if (this.yPositionDoesntCollideWithViewport(belowAnchorPos)) { + posWithinViewport.add(belowAnchorPos); + } + return posWithinThreshold.size ? posWithinThreshold : posWithinViewport; + }; + MDCTooltipFoundation.prototype.yPositionHonorsViewportThreshold = function (yPos) { + var viewportHeight = this.adapter.getViewportHeight(); + var tooltipHeight = this.adapter.getTooltipSize().height; + return yPos + tooltipHeight + this.minViewportTooltipThreshold <= + viewportHeight && + yPos >= this.minViewportTooltipThreshold; + }; + MDCTooltipFoundation.prototype.yPositionDoesntCollideWithViewport = function (yPos) { + var viewportHeight = this.adapter.getViewportHeight(); + var tooltipHeight = this.adapter.getTooltipSize().height; + return yPos + tooltipHeight <= viewportHeight && yPos >= 0; + }; + MDCTooltipFoundation.prototype.calculateTooltipWithCaretStyles = function (anchorRect) { + // Prior to grabbing the caret bounding rect, we clear all styles set on the + // caret. This will ensure the width/height is consistent (since we rotate + // the caret 90deg in some positions which would result in the height and + // width bounding rect measurements flipping). + this.adapter.clearTooltipCaretStyles(); + var caretSize = this.adapter.getTooltipCaretBoundingRect(); + if (!anchorRect || !caretSize) { + return { position: PositionWithCaret.DETECTED, top: 0, left: 0 }; + } + // The caret for the rich tooltip is created by rotating/skewing/scaling + // square div into a diamond shape and then hiding half of it so it looks + // like a triangle. We use the boundingClientRect to calculate the + // width/height of the element after the transforms (to the caret) have been + // applied. Since the full tooltip is scaled by 0.8 for the entrance + // animation, we divide by this value to retrieve the actual caret + // dimensions. + var caretWidth = caretSize.width / tooltip_constants_numbers.ANIMATION_SCALE; + // Since we hide half of caret, we divide the returned DOMRect height + // by 2. + var caretHeight = (caretSize.height / tooltip_constants_numbers.ANIMATION_SCALE) / 2; + var tooltipSize = this.adapter.getTooltipSize(); + var yOptions = this.calculateYWithCaretDistanceOptions(anchorRect, tooltipSize.height, { caretWidth: caretWidth, caretHeight: caretHeight }); + var xOptions = this.calculateXWithCaretDistanceOptions(anchorRect, tooltipSize.width, { caretWidth: caretWidth, caretHeight: caretHeight }); + var positionOptions = this.validateTooltipWithCaretDistances(yOptions, xOptions); + if (positionOptions.size < 1) { + positionOptions = this.generateBackupPositionOption(anchorRect, tooltipSize, { caretWidth: caretWidth, caretHeight: caretHeight }); + } + var _a = this.determineTooltipWithCaretDistance(positionOptions), position = _a.position, xDistance = _a.xDistance, yDistance = _a.yDistance; + // After determining the position of the tooltip relative to the anchor, + // place the caret in the corresponding position and retrieve the necessary + // x/y transform origins needed to properly animate the tooltip entrance. + var _b = this.setCaretPositionStyles(position, { caretWidth: caretWidth, caretHeight: caretHeight }), yTransformOrigin = _b.yTransformOrigin, xTransformOrigin = _b.xTransformOrigin; + return { + yTransformOrigin: yTransformOrigin, + xTransformOrigin: xTransformOrigin, + top: yDistance, + left: xDistance + }; + }; + MDCTooltipFoundation.prototype.calculateXWithCaretDistanceOptions = function (anchorRect, tooltipWidth, caretSize) { + var caretWidth = caretSize.caretWidth, caretHeight = caretSize.caretHeight; + var isLTR = !this.adapter.isRTL(); + var anchorMidpoint = anchorRect.left + anchorRect.width / 2; + var sideLeftAligned = anchorRect.left - (tooltipWidth + this.anchorGap + caretHeight); + var sideRightAligned = anchorRect.right + this.anchorGap + caretHeight; + var sideStartPos = isLTR ? sideLeftAligned : sideRightAligned; + var sideEndPos = isLTR ? sideRightAligned : sideLeftAligned; + var verticalLeftAligned = anchorMidpoint - (tooltip_constants_numbers.CARET_INDENTATION + caretWidth / 2); + var verticalRightAligned = anchorMidpoint - + (tooltipWidth - tooltip_constants_numbers.CARET_INDENTATION - caretWidth / 2); + var verticalStartPos = isLTR ? verticalLeftAligned : verticalRightAligned; + var verticalEndPos = isLTR ? verticalRightAligned : verticalLeftAligned; + var verticalCenterPos = anchorMidpoint - tooltipWidth / 2; + var possiblePositionsMap = new Map([ + [XPositionWithCaret.START, verticalStartPos], + [XPositionWithCaret.CENTER, verticalCenterPos], + [XPositionWithCaret.END, verticalEndPos], + [XPositionWithCaret.SIDE_END, sideEndPos], + [XPositionWithCaret.SIDE_START, sideStartPos], + ]); + return possiblePositionsMap; + }; + MDCTooltipFoundation.prototype.calculateYWithCaretDistanceOptions = function (anchorRect, tooltipHeight, caretSize) { + var caretWidth = caretSize.caretWidth, caretHeight = caretSize.caretHeight; + var anchorMidpoint = anchorRect.top + anchorRect.height / 2; + var belowYPos = anchorRect.bottom + this.anchorGap + caretHeight; + var aboveYPos = anchorRect.top - (this.anchorGap + tooltipHeight + caretHeight); + var sideTopYPos = anchorMidpoint - (tooltip_constants_numbers.CARET_INDENTATION + caretWidth / 2); + var sideCenterYPos = anchorMidpoint - (tooltipHeight / 2); + var sideBottomYPos = anchorMidpoint - + (tooltipHeight - tooltip_constants_numbers.CARET_INDENTATION - caretWidth / 2); + var possiblePositionsMap = new Map([ + [YPositionWithCaret.ABOVE, aboveYPos], + [YPositionWithCaret.BELOW, belowYPos], + [YPositionWithCaret.SIDE_TOP, sideTopYPos], + [YPositionWithCaret.SIDE_CENTER, sideCenterYPos], + [YPositionWithCaret.SIDE_BOTTOM, sideBottomYPos], + ]); + return possiblePositionsMap; + }; + MDCTooltipFoundation.prototype.repositionTooltipOnAnchorMove = function () { + var newAnchorRect = this.adapter.getAnchorBoundingRect(); + if (!newAnchorRect || !this.anchorRect) + return; + if (newAnchorRect.top !== this.anchorRect.top || + newAnchorRect.left !== this.anchorRect.left || + newAnchorRect.height !== this.anchorRect.height || + newAnchorRect.width !== this.anchorRect.width) { + this.anchorRect = newAnchorRect; + this.parentRect = this.adapter.getParentBoundingRect(); + this.richTooltip ? this.positionRichTooltip() : + this.positionPlainTooltip(); + } + }; + /** + * Given a list of x/y position options for a rich tooltip with caret, checks + * if valid x/y combinations of these position options are either within the + * viewport threshold, or simply within the viewport. Returns a map with the + * valid x/y position combinations that all either honor the viewport + * threshold or are simply inside within the viewport. + */ + MDCTooltipFoundation.prototype.validateTooltipWithCaretDistances = function (yOptions, xOptions) { + var e_4, _a, e_5, _b, e_6, _c; + var posWithinThreshold = new Map(); + var posWithinViewport = new Map(); + // If a tooltip has a caret, not all combinations of YPositionWithCarets and + // XPositionWithCarets are possible. Because of this we only check the + // validity of a given XPositionWithCaret if a potential corresponding + // YPositionWithCaret is valid. + var validMappings = new Map([ + [ + YPositionWithCaret.ABOVE, + [ + XPositionWithCaret.START, XPositionWithCaret.CENTER, + XPositionWithCaret.END + ] + ], + [ + YPositionWithCaret.BELOW, + [ + XPositionWithCaret.START, XPositionWithCaret.CENTER, + XPositionWithCaret.END + ] + ], + [ + YPositionWithCaret.SIDE_TOP, + [XPositionWithCaret.SIDE_START, XPositionWithCaret.SIDE_END] + ], + [ + YPositionWithCaret.SIDE_CENTER, + [XPositionWithCaret.SIDE_START, XPositionWithCaret.SIDE_END] + ], + [ + YPositionWithCaret.SIDE_BOTTOM, + [XPositionWithCaret.SIDE_START, XPositionWithCaret.SIDE_END] + ], + ]); + try { + // TODO(b/227383292): Handle instances where one direction can fit in + // in the viewport (whether honoring the threshold or not), and the + // other direction does not. + for (var _d = tslib_es6_values(validMappings.keys()), _e = _d.next(); !_e.done; _e = _d.next()) { + var y = _e.value; + var yDistance = yOptions.get(y); + if (this.yPositionHonorsViewportThreshold(yDistance)) { + try { + for (var _f = (e_5 = void 0, tslib_es6_values(validMappings.get(y))), _g = _f.next(); !_g.done; _g = _f.next()) { + var x = _g.value; + var xDistance = xOptions.get(x); + if (this.positionHonorsViewportThreshold(xDistance)) { + var caretPositionName = this.caretPositionOptionsMapping(x, y); + posWithinThreshold.set(caretPositionName, { xDistance: xDistance, yDistance: yDistance }); + } + } + } + catch (e_5_1) { e_5 = { error: e_5_1 }; } + finally { + try { + if (_g && !_g.done && (_b = _f.return)) _b.call(_f); + } + finally { if (e_5) throw e_5.error; } + } + } + if (this.yPositionDoesntCollideWithViewport(yDistance)) { + try { + for (var _h = (e_6 = void 0, tslib_es6_values(validMappings.get(y))), _j = _h.next(); !_j.done; _j = _h.next()) { + var x = _j.value; + var xDistance = xOptions.get(x); + if (this.positionDoesntCollideWithViewport(xDistance)) { + var caretPositionName = this.caretPositionOptionsMapping(x, y); + posWithinViewport.set(caretPositionName, { xDistance: xDistance, yDistance: yDistance }); + } + } + } + catch (e_6_1) { e_6 = { error: e_6_1 }; } + finally { + try { + if (_j && !_j.done && (_c = _h.return)) _c.call(_h); + } + finally { if (e_6) throw e_6.error; } + } + } + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_e && !_e.done && (_a = _d.return)) _a.call(_d); + } + finally { if (e_4) throw e_4.error; } + } + return posWithinThreshold.size ? posWithinThreshold : posWithinViewport; + }; + /** + * Method for generating a horizontal and vertical position for the tooltip if + * all other calculated values are considered invalid. This would only happen + * in situations of very small viewports/large tooltips. + */ + MDCTooltipFoundation.prototype.generateBackupPositionOption = function (anchorRect, tooltipSize, caretSize) { + var isLTR = !this.adapter.isRTL(); + var xDistance; + var xPos; + if (anchorRect.left < 0) { + xDistance = this.minViewportTooltipThreshold + caretSize.caretHeight; + xPos = isLTR ? XPositionWithCaret.END : XPositionWithCaret.START; + } + else { + var viewportWidth = this.adapter.getViewportWidth(); + xDistance = viewportWidth - + (tooltipSize.width + this.minViewportTooltipThreshold + + caretSize.caretHeight); + xPos = isLTR ? XPositionWithCaret.START : XPositionWithCaret.END; + } + var yDistance; + var yPos; + if (anchorRect.top < 0) { + yDistance = this.minViewportTooltipThreshold + caretSize.caretHeight; + yPos = YPositionWithCaret.BELOW; + } + else { + var viewportHeight = this.adapter.getViewportHeight(); + yDistance = viewportHeight - + (tooltipSize.height + this.minViewportTooltipThreshold + + caretSize.caretHeight); + yPos = YPositionWithCaret.ABOVE; + } + var caretPositionName = this.caretPositionOptionsMapping(xPos, yPos); + return new Map([[caretPositionName, { xDistance: xDistance, yDistance: yDistance }]]); + }; + /** + * Given a list of valid position options for a rich tooltip with caret, + * returns the option that should be used. + */ + MDCTooltipFoundation.prototype.determineTooltipWithCaretDistance = function (options) { + if (options.has(this.tooltipPositionWithCaret)) { + var tooltipPos = options.get(this.tooltipPositionWithCaret); + return { + position: this.tooltipPositionWithCaret, + xDistance: tooltipPos.xDistance, + yDistance: tooltipPos.yDistance, + }; + } + var orderPref = [ + PositionWithCaret.ABOVE_START, PositionWithCaret.ABOVE_CENTER, + PositionWithCaret.ABOVE_END, PositionWithCaret.TOP_SIDE_START, + PositionWithCaret.CENTER_SIDE_START, PositionWithCaret.BOTTOM_SIDE_START, + PositionWithCaret.TOP_SIDE_END, PositionWithCaret.CENTER_SIDE_END, + PositionWithCaret.BOTTOM_SIDE_END, PositionWithCaret.BELOW_START, + PositionWithCaret.BELOW_CENTER, PositionWithCaret.BELOW_END + ]; + // Before calling this method we check whether or not the "options" param + // is empty and invoke a different method. We, therefore, can be certain + // that "validPosition" will always be defined. + var validPosition = orderPref.find(function (pos) { return options.has(pos); }); + var pos = options.get(validPosition); + return { + position: validPosition, + xDistance: pos.xDistance, + yDistance: pos.yDistance, + }; + }; + /** + * Returns the corresponding PositionWithCaret enum for the proivded + * XPositionWithCaret and YPositionWithCaret enums. This mapping exists so our + * public API accepts only PositionWithCaret enums (as all combinations of + * XPositionWithCaret and YPositionWithCaret are not valid), but internally we + * can calculate the X and Y positions of a rich tooltip with caret + * separately. + */ + MDCTooltipFoundation.prototype.caretPositionOptionsMapping = function (xPos, yPos) { + switch (yPos) { + case YPositionWithCaret.ABOVE: + if (xPos === XPositionWithCaret.START) { + return PositionWithCaret.ABOVE_START; + } + else if (xPos === XPositionWithCaret.CENTER) { + return PositionWithCaret.ABOVE_CENTER; + } + else if (xPos === XPositionWithCaret.END) { + return PositionWithCaret.ABOVE_END; + } + break; + case YPositionWithCaret.BELOW: + if (xPos === XPositionWithCaret.START) { + return PositionWithCaret.BELOW_START; + } + else if (xPos === XPositionWithCaret.CENTER) { + return PositionWithCaret.BELOW_CENTER; + } + else if (xPos === XPositionWithCaret.END) { + return PositionWithCaret.BELOW_END; + } + break; + case YPositionWithCaret.SIDE_TOP: + if (xPos === XPositionWithCaret.SIDE_START) { + return PositionWithCaret.TOP_SIDE_START; + } + else if (xPos === XPositionWithCaret.SIDE_END) { + return PositionWithCaret.TOP_SIDE_END; + } + break; + case YPositionWithCaret.SIDE_CENTER: + if (xPos === XPositionWithCaret.SIDE_START) { + return PositionWithCaret.CENTER_SIDE_START; + } + else if (xPos === XPositionWithCaret.SIDE_END) { + return PositionWithCaret.CENTER_SIDE_END; + } + break; + case YPositionWithCaret.SIDE_BOTTOM: + if (xPos === XPositionWithCaret.SIDE_START) { + return PositionWithCaret.BOTTOM_SIDE_START; + } + else if (xPos === XPositionWithCaret.SIDE_END) { + return PositionWithCaret.BOTTOM_SIDE_END; + } + break; + default: + break; + } + throw new Error("MDCTooltipFoundation: Invalid caret position of " + xPos + ", " + yPos); + }; + /** + * Given a PositionWithCaret, applies the correct styles to the caret element + * so that it is positioned properly on the rich tooltip. + * Returns the x and y positions of the caret, to be used as the + * transform-origin on the tooltip itself for entrance animations. + */ + MDCTooltipFoundation.prototype.setCaretPositionStyles = function (position, caretSize) { + var e_7, _a; + var values = this.calculateCaretPositionOnTooltip(position, caretSize); + if (!values) { + return { yTransformOrigin: 0, xTransformOrigin: 0 }; + } + // Prior to setting the caret position styles, clear any previous styles + // set. This is necessary as all position options do not use the same + // properties (e.g. using 'left' or 'right') and so old style properties + // might not get overridden, causing misplaced carets. + this.adapter.clearTooltipCaretStyles(); + this.adapter.setTooltipCaretStyle(values.yAlignment, values.yAxisPx); + this.adapter.setTooltipCaretStyle(values.xAlignment, values.xAxisPx); + // Value of scaleX is cos(skew), Math.cos() expects radians though, so we + // must first convert the skew value (which is in degrees) to radians. + var skewRadians = values.skew * (Math.PI / 180); + var scaleX = Math.cos(skewRadians); + this.adapter.setTooltipCaretStyle('transform', "rotate(" + values.rotation + "deg) skewY(" + values.skew + "deg) scaleX(" + scaleX + ")"); + this.adapter.setTooltipCaretStyle('transform-origin', values.xAlignment + " " + values.yAlignment); + try { + for (var _b = tslib_es6_values(values.caretCorners), _c = _b.next(); !_c.done; _c = _b.next()) { + var corner = _c.value; + this.adapter.setTooltipCaretStyle(corner, '0'); + } + } + catch (e_7_1) { e_7 = { error: e_7_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_7) throw e_7.error; } + } + return { + yTransformOrigin: values.yTransformOrigin, + xTransformOrigin: values.xTransformOrigin + }; + }; + /** + * Given a PositionWithCaret, determines the correct styles to position the + * caret properly on the rich tooltip. + */ + MDCTooltipFoundation.prototype.calculateCaretPositionOnTooltip = function (tooltipPos, caretSize) { + var isLTR = !this.adapter.isRTL(); + var tooltipWidth = this.adapter.getComputedStyleProperty('width'); + var tooltipHeight = this.adapter.getComputedStyleProperty('height'); + if (!tooltipWidth || !tooltipHeight || !caretSize) { + return; + } + var midpointWidth = "calc((" + tooltipWidth + " - " + caretSize.caretWidth + "px) / 2)"; + var midpointHeight = "calc((" + tooltipHeight + " - " + caretSize.caretWidth + "px) / 2)"; + var flushWithEdge = '0'; + var indentedFromEdge = tooltip_constants_numbers.CARET_INDENTATION + "px"; + var indentedFromWidth = "calc(" + tooltipWidth + " - " + indentedFromEdge + ")"; + var indentedFromHeight = "calc(" + tooltipHeight + " - " + indentedFromEdge + ")"; + var verticalRotation = 35; + var horizontalRotation = Math.abs(90 - verticalRotation); + var bottomRightTopLeftBorderRadius = ['border-bottom-right-radius', 'border-top-left-radius']; + var bottomLeftTopRightBorderRadius = ['border-bottom-left-radius', 'border-top-right-radius']; + var skewDeg = 20; + switch (tooltipPos) { + case PositionWithCaret.BELOW_CENTER: + return { + yAlignment: tooltip_constants_strings.TOP, + xAlignment: tooltip_constants_strings.LEFT, + yAxisPx: flushWithEdge, + xAxisPx: midpointWidth, + rotation: -1 * verticalRotation, + skew: -1 * skewDeg, + xTransformOrigin: midpointWidth, + yTransformOrigin: flushWithEdge, + caretCorners: bottomRightTopLeftBorderRadius, + }; + case PositionWithCaret.BELOW_END: + return { + yAlignment: tooltip_constants_strings.TOP, + xAlignment: isLTR ? tooltip_constants_strings.RIGHT : tooltip_constants_strings.LEFT, + yAxisPx: flushWithEdge, + xAxisPx: indentedFromEdge, + rotation: isLTR ? verticalRotation : -1 * verticalRotation, + skew: isLTR ? skewDeg : -1 * skewDeg, + xTransformOrigin: isLTR ? indentedFromWidth : indentedFromEdge, + yTransformOrigin: flushWithEdge, + caretCorners: isLTR ? bottomLeftTopRightBorderRadius : + bottomRightTopLeftBorderRadius, + }; + case PositionWithCaret.BELOW_START: + return { + yAlignment: tooltip_constants_strings.TOP, + xAlignment: isLTR ? tooltip_constants_strings.LEFT : tooltip_constants_strings.RIGHT, + yAxisPx: flushWithEdge, + xAxisPx: indentedFromEdge, + rotation: isLTR ? -1 * verticalRotation : verticalRotation, + skew: isLTR ? -1 * skewDeg : skewDeg, + xTransformOrigin: isLTR ? indentedFromEdge : indentedFromWidth, + yTransformOrigin: flushWithEdge, + caretCorners: isLTR ? bottomRightTopLeftBorderRadius : + bottomLeftTopRightBorderRadius, + }; + case PositionWithCaret.TOP_SIDE_END: + return { + yAlignment: tooltip_constants_strings.TOP, + xAlignment: isLTR ? tooltip_constants_strings.LEFT : tooltip_constants_strings.RIGHT, + yAxisPx: indentedFromEdge, + xAxisPx: flushWithEdge, + rotation: isLTR ? horizontalRotation : -1 * horizontalRotation, + skew: isLTR ? -1 * skewDeg : skewDeg, + xTransformOrigin: isLTR ? flushWithEdge : tooltipWidth, + yTransformOrigin: indentedFromEdge, + caretCorners: isLTR ? bottomRightTopLeftBorderRadius : + bottomLeftTopRightBorderRadius, + }; + case PositionWithCaret.CENTER_SIDE_END: + return { + yAlignment: tooltip_constants_strings.TOP, + xAlignment: isLTR ? tooltip_constants_strings.LEFT : tooltip_constants_strings.RIGHT, + yAxisPx: midpointHeight, + xAxisPx: flushWithEdge, + rotation: isLTR ? horizontalRotation : -1 * horizontalRotation, + skew: isLTR ? -1 * skewDeg : skewDeg, + xTransformOrigin: isLTR ? flushWithEdge : tooltipWidth, + yTransformOrigin: midpointHeight, + caretCorners: isLTR ? bottomRightTopLeftBorderRadius : + bottomLeftTopRightBorderRadius, + }; + case PositionWithCaret.BOTTOM_SIDE_END: + return { + yAlignment: tooltip_constants_strings.BOTTOM, + xAlignment: isLTR ? tooltip_constants_strings.LEFT : tooltip_constants_strings.RIGHT, + yAxisPx: indentedFromEdge, + xAxisPx: flushWithEdge, + rotation: isLTR ? -1 * horizontalRotation : horizontalRotation, + skew: isLTR ? skewDeg : -1 * skewDeg, + xTransformOrigin: isLTR ? flushWithEdge : tooltipWidth, + yTransformOrigin: indentedFromHeight, + caretCorners: isLTR ? bottomLeftTopRightBorderRadius : + bottomRightTopLeftBorderRadius, + }; + case PositionWithCaret.TOP_SIDE_START: + return { + yAlignment: tooltip_constants_strings.TOP, + xAlignment: isLTR ? tooltip_constants_strings.RIGHT : tooltip_constants_strings.LEFT, + yAxisPx: indentedFromEdge, + xAxisPx: flushWithEdge, + rotation: isLTR ? -1 * horizontalRotation : horizontalRotation, + skew: isLTR ? skewDeg : -1 * skewDeg, + xTransformOrigin: isLTR ? tooltipWidth : flushWithEdge, + yTransformOrigin: indentedFromEdge, + caretCorners: isLTR ? bottomLeftTopRightBorderRadius : + bottomRightTopLeftBorderRadius, + }; + case PositionWithCaret.CENTER_SIDE_START: + return { + yAlignment: tooltip_constants_strings.TOP, + xAlignment: isLTR ? tooltip_constants_strings.RIGHT : tooltip_constants_strings.LEFT, + yAxisPx: midpointHeight, + xAxisPx: flushWithEdge, + rotation: isLTR ? -1 * horizontalRotation : horizontalRotation, + skew: isLTR ? skewDeg : -1 * skewDeg, + xTransformOrigin: isLTR ? tooltipWidth : flushWithEdge, + yTransformOrigin: midpointHeight, + caretCorners: isLTR ? bottomLeftTopRightBorderRadius : + bottomRightTopLeftBorderRadius, + }; + case PositionWithCaret.BOTTOM_SIDE_START: + return { + yAlignment: tooltip_constants_strings.BOTTOM, + xAlignment: isLTR ? tooltip_constants_strings.RIGHT : tooltip_constants_strings.LEFT, + yAxisPx: indentedFromEdge, + xAxisPx: flushWithEdge, + rotation: isLTR ? horizontalRotation : -1 * horizontalRotation, + skew: isLTR ? -1 * skewDeg : skewDeg, + xTransformOrigin: isLTR ? tooltipWidth : flushWithEdge, + yTransformOrigin: indentedFromHeight, + caretCorners: isLTR ? bottomRightTopLeftBorderRadius : + bottomLeftTopRightBorderRadius, + }; + case PositionWithCaret.ABOVE_CENTER: + return { + yAlignment: tooltip_constants_strings.BOTTOM, + xAlignment: tooltip_constants_strings.LEFT, + yAxisPx: flushWithEdge, + xAxisPx: midpointWidth, + rotation: verticalRotation, + skew: skewDeg, + xTransformOrigin: midpointWidth, + yTransformOrigin: tooltipHeight, + caretCorners: bottomLeftTopRightBorderRadius, + }; + case PositionWithCaret.ABOVE_END: + return { + yAlignment: tooltip_constants_strings.BOTTOM, + xAlignment: isLTR ? tooltip_constants_strings.RIGHT : tooltip_constants_strings.LEFT, + yAxisPx: flushWithEdge, + xAxisPx: indentedFromEdge, + rotation: isLTR ? -1 * verticalRotation : verticalRotation, + skew: isLTR ? -1 * skewDeg : skewDeg, + xTransformOrigin: isLTR ? indentedFromWidth : indentedFromEdge, + yTransformOrigin: tooltipHeight, + caretCorners: isLTR ? bottomRightTopLeftBorderRadius : + bottomLeftTopRightBorderRadius, + }; + default: + case PositionWithCaret.ABOVE_START: + return { + yAlignment: tooltip_constants_strings.BOTTOM, + xAlignment: isLTR ? tooltip_constants_strings.LEFT : tooltip_constants_strings.RIGHT, + yAxisPx: flushWithEdge, + xAxisPx: indentedFromEdge, + rotation: isLTR ? verticalRotation : -1 * verticalRotation, + skew: isLTR ? skewDeg : -1 * skewDeg, + xTransformOrigin: isLTR ? indentedFromEdge : indentedFromWidth, + yTransformOrigin: tooltipHeight, + caretCorners: isLTR ? bottomLeftTopRightBorderRadius : + bottomRightTopLeftBorderRadius, + }; + } + }; + MDCTooltipFoundation.prototype.clearShowTimeout = function () { + if (this.showTimeout) { + clearTimeout(this.showTimeout); + this.showTimeout = null; + } + }; + MDCTooltipFoundation.prototype.clearHideTimeout = function () { + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout = null; + } + }; + /** + * Method that allows user to specify additional elements that should have a + * scroll event listener attached to it. This should be used in instances + * where the anchor element is placed inside a scrollable container, and will + * ensure that the tooltip will stay attached to the anchor on scroll. + */ + MDCTooltipFoundation.prototype.attachScrollHandler = function (addEventListenerFn) { + var _this = this; + this.addAncestorScrollEventListeners.push(function () { + addEventListenerFn('scroll', _this.windowScrollHandler); + }); + }; + /** + * Must be used in conjunction with #attachScrollHandler. Removes the scroll + * event handler from elements on the page. + */ + MDCTooltipFoundation.prototype.removeScrollHandler = function (removeEventHandlerFn) { + var _this = this; + this.removeAncestorScrollEventListeners.push(function () { + removeEventHandlerFn('scroll', _this.windowScrollHandler); + }); + }; + MDCTooltipFoundation.prototype.destroy = function () { + var e_8, _a; + if (this.frameId) { + cancelAnimationFrame(this.frameId); + this.frameId = null; + } + this.clearHideTimeout(); + this.clearShowTimeout(); + this.adapter.removeClass(SHOWN); + this.adapter.removeClass(SHOWING_TRANSITION); + this.adapter.removeClass(SHOWING); + this.adapter.removeClass(HIDE); + this.adapter.removeClass(HIDE_TRANSITION); + if (this.richTooltip) { + this.adapter.deregisterEventHandler('focusout', this.richTooltipFocusOutHandler); + } + if (!this.persistentTooltip) { + this.adapter.deregisterEventHandler('mouseenter', this.tooltipMouseEnterHandler); + this.adapter.deregisterEventHandler('mouseleave', this.tooltipMouseLeaveHandler); + } + this.adapter.deregisterAnchorEventHandler('blur', this.anchorBlurHandler); + this.adapter.deregisterDocumentEventHandler('click', this.documentClickHandler); + this.adapter.deregisterDocumentEventHandler('keydown', this.documentKeydownHandler); + this.adapter.deregisterWindowEventHandler('scroll', this.windowScrollHandler); + this.adapter.deregisterWindowEventHandler('resize', this.windowResizeHandler); + try { + for (var _b = tslib_es6_values(this.removeAncestorScrollEventListeners), _c = _b.next(); !_c.done; _c = _b.next()) { + var fn = _c.value; + fn(); + } + } + catch (e_8_1) { e_8 = { error: e_8_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_8) throw e_8.error; } + } + this.animFrame.cancelAll(); + }; + return MDCTooltipFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const tooltip_foundation = ((/* unused pure expression or super */ null && (MDCTooltipFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/tooltip/component.js +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + +var MDCTooltip = /** @class */ (function (_super) { + tslib_es6_extends(MDCTooltip, _super); + function MDCTooltip() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTooltip.attachTo = function (root) { + return new MDCTooltip(root); + }; + MDCTooltip.prototype.initialize = function () { + var tooltipId = this.root.getAttribute('id'); + if (!tooltipId) { + throw new Error('MDCTooltip: Tooltip component must have an id.'); + } + var anchorElem = document.querySelector("[data-tooltip-id=\"" + tooltipId + "\"]") || + document.querySelector("[aria-describedby=\"" + tooltipId + "\"]"); + if (!anchorElem) { + throw new Error('MDCTooltip: Tooltip component requires an anchor element annotated with [aria-describedby] or [data-tooltip-id].'); + } + this.anchorElem = anchorElem; + }; + MDCTooltip.prototype.initialSyncWithDOM = function () { + var _this = this; + this.isTooltipRich = this.foundation.isRich(); + this.isTooltipPersistent = this.foundation.isPersistent(); + this.handleMouseEnter = function () { + _this.foundation.handleAnchorMouseEnter(); + }; + this.handleFocus = function (evt) { + _this.foundation.handleAnchorFocus(evt); + }; + this.handleMouseLeave = function () { + _this.foundation.handleAnchorMouseLeave(); + }; + this.handleTransitionEnd = function () { + _this.foundation.handleTransitionEnd(); + }; + this.handleClick = function () { + _this.foundation.handleAnchorClick(); + }; + this.handleTouchstart = function () { + _this.foundation.handleAnchorTouchstart(); + }; + this.handleTouchend = function () { + _this.foundation.handleAnchorTouchend(); + }; + if (this.isTooltipRich && this.isTooltipPersistent) { + this.anchorElem.addEventListener('click', this.handleClick); + } + else { + this.anchorElem.addEventListener('mouseenter', this.handleMouseEnter); + // TODO(b/157075286): Listening for a 'focus' event is too broad. + this.anchorElem.addEventListener('focus', this.handleFocus); + this.anchorElem.addEventListener('mouseleave', this.handleMouseLeave); + this.anchorElem.addEventListener('touchstart', this.handleTouchstart); + this.anchorElem.addEventListener('touchend', this.handleTouchend); + } + this.listen('transitionend', this.handleTransitionEnd); + }; + MDCTooltip.prototype.destroy = function () { + if (this.anchorElem) { + if (this.isTooltipRich && this.isTooltipPersistent) { + this.anchorElem.removeEventListener('click', this.handleClick); + } + else { + this.anchorElem.removeEventListener('mouseenter', this.handleMouseEnter); + this.anchorElem.removeEventListener('focus', this.handleFocus); + this.anchorElem.removeEventListener('mouseleave', this.handleMouseLeave); + this.anchorElem.removeEventListener('touchstart', this.handleTouchstart); + this.anchorElem.removeEventListener('touchend', this.handleTouchend); + } + } + this.unlisten('transitionend', this.handleTransitionEnd); + _super.prototype.destroy.call(this); + }; + MDCTooltip.prototype.setTooltipPosition = function (position) { + this.foundation.setTooltipPosition(position); + }; + MDCTooltip.prototype.setAnchorBoundaryType = function (type) { + this.foundation.setAnchorBoundaryType(type); + }; + MDCTooltip.prototype.setShowDelay = function (delayMs) { + this.foundation.setShowDelay(delayMs); + }; + MDCTooltip.prototype.setHideDelay = function (delayMs) { + this.foundation.setHideDelay(delayMs); + }; + MDCTooltip.prototype.hide = function () { + this.foundation.hide(); + }; + MDCTooltip.prototype.isShown = function () { + return this.foundation.isShown(); + }; + /** + * Method that allows user to specify additional elements that should have a + * scroll event listener attached to it. This should be used in instances + * where the anchor element is placed inside a scrollable container (that is + * not the body element), and will ensure that the tooltip will stay attached + * to the anchor on scroll. + */ + MDCTooltip.prototype.attachScrollHandler = function (addEventListenerFn) { + this.foundation.attachScrollHandler(addEventListenerFn); + }; + /** + * Must be used in conjunction with #attachScrollHandler. Removes the scroll + * event handler from elements on the page. + */ + MDCTooltip.prototype.removeScrollHandler = function (removeEventHandlerFn) { + this.foundation.removeScrollHandler(removeEventHandlerFn); + }; + MDCTooltip.prototype.getDefaultFoundation = function () { + var _this = this; + var adapter = { + getAttribute: function (attr) { return _this.root.getAttribute(attr); }, + setAttribute: function (attr, value) { + _this.root.setAttribute(attr, value); + }, + removeAttribute: function (attr) { + _this.root.removeAttribute(attr); + }, + addClass: function (className) { + _this.root.classList.add(className); + }, + hasClass: function (className) { return _this.root.classList.contains(className); }, + removeClass: function (className) { + _this.root.classList.remove(className); + }, + getComputedStyleProperty: function (propertyName) { + return window.getComputedStyle(_this.root).getPropertyValue(propertyName); + }, + setStyleProperty: function (propertyName, value) { + _this.root.style.setProperty(propertyName, value); + }, + setSurfaceAnimationStyleProperty: function (propertyName, value) { + var surface = _this.root.querySelector("." + constants_CssClasses.SURFACE_ANIMATION); + surface === null || surface === void 0 ? void 0 : surface.style.setProperty(propertyName, value); + }, + getViewportWidth: function () { return window.innerWidth; }, + getViewportHeight: function () { return window.innerHeight; }, + getTooltipSize: function () { + return { + width: _this.root.offsetWidth, + height: _this.root.offsetHeight + }; + }, + getAnchorBoundingRect: function () { + return _this.anchorElem ? _this.anchorElem.getBoundingClientRect() : null; + }, + getParentBoundingRect: function () { + var _a, _b; + return (_b = (_a = _this.root.parentElement) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) !== null && _b !== void 0 ? _b : null; + }, + getAnchorAttribute: function (attr) { + return _this.anchorElem ? _this.anchorElem.getAttribute(attr) : null; + }, + setAnchorAttribute: function (attr, value) { + var _a; + (_a = _this.anchorElem) === null || _a === void 0 ? void 0 : _a.setAttribute(attr, value); + }, + isRTL: function () { return getComputedStyle(_this.root).direction === 'rtl'; }, + anchorContainsElement: function (element) { + var _a; + return !!((_a = _this.anchorElem) === null || _a === void 0 ? void 0 : _a.contains(element)); + }, + tooltipContainsElement: function (element) { + return _this.root.contains(element); + }, + focusAnchorElement: function () { + var _a; + (_a = _this.anchorElem) === null || _a === void 0 ? void 0 : _a.focus(); + }, + registerEventHandler: function (evt, handler) { + if (_this.root instanceof HTMLElement) { + _this.root.addEventListener(evt, handler); + } + }, + deregisterEventHandler: function (evt, handler) { + if (_this.root instanceof HTMLElement) { + _this.root.removeEventListener(evt, handler); + } + }, + registerAnchorEventHandler: function (evt, handler) { + var _a; + (_a = _this.anchorElem) === null || _a === void 0 ? void 0 : _a.addEventListener(evt, handler); + }, + deregisterAnchorEventHandler: function (evt, handler) { + var _a; + (_a = _this.anchorElem) === null || _a === void 0 ? void 0 : _a.removeEventListener(evt, handler); + }, + registerDocumentEventHandler: function (evt, handler) { + document.body.addEventListener(evt, handler); + }, + deregisterDocumentEventHandler: function (evt, handler) { + document.body.removeEventListener(evt, handler); + }, + registerWindowEventHandler: function (evt, handler) { + window.addEventListener(evt, handler); + }, + deregisterWindowEventHandler: function (evt, handler) { + window.removeEventListener(evt, handler); + }, + notifyHidden: function () { + _this.emit(tooltip_constants_events.HIDDEN, {}); + }, + getTooltipCaretBoundingRect: function () { + var caret = _this.root.querySelector("." + constants_CssClasses.TOOLTIP_CARET_TOP); + if (!caret) { + return null; + } + return caret.getBoundingClientRect(); + }, + setTooltipCaretStyle: function (propertyName, value) { + var topCaret = _this.root.querySelector("." + constants_CssClasses.TOOLTIP_CARET_TOP); + var bottomCaret = _this.root.querySelector("." + constants_CssClasses.TOOLTIP_CARET_BOTTOM); + if (!topCaret || !bottomCaret) { + return; + } + topCaret.style.setProperty(propertyName, value); + bottomCaret.style.setProperty(propertyName, value); + }, + clearTooltipCaretStyles: function () { + var topCaret = _this.root.querySelector("." + constants_CssClasses.TOOLTIP_CARET_TOP); + var bottomCaret = _this.root.querySelector("." + constants_CssClasses.TOOLTIP_CARET_BOTTOM); + if (!topCaret || !bottomCaret) { + return; + } + topCaret.removeAttribute('style'); + bottomCaret.removeAttribute('style'); + }, + getActiveElement: function () { + return document.activeElement; + }, + }; + //tslint:enable:object-literal-sort-keys + return new MDCTooltipFoundation(adapter); + }; + return MDCTooltip; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./Components/Tooltip/MBTooltip.ts +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } + + +function MBTooltip_init(arrayOfReferences) { + var _iterator = _createForOfIteratorHelper(arrayOfReferences), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var elem = _step.value; + try { + if (elem) { + MDCTooltip.attachTo(elem); + } + } catch (e) {} + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } +} +;// CONCATENATED MODULE: ./node_modules/@material/top-app-bar/constants.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var top_app_bar_constants_cssClasses = { + FIXED_CLASS: 'mdc-top-app-bar--fixed', + FIXED_SCROLLED_CLASS: 'mdc-top-app-bar--fixed-scrolled', + SHORT_CLASS: 'mdc-top-app-bar--short', + SHORT_COLLAPSED_CLASS: 'mdc-top-app-bar--short-collapsed', + SHORT_HAS_ACTION_ITEM_CLASS: 'mdc-top-app-bar--short-has-action-item', +}; +var top_app_bar_constants_numbers = { + DEBOUNCE_THROTTLE_RESIZE_TIME_MS: 100, + MAX_TOP_APP_BAR_HEIGHT: 128, +}; +var top_app_bar_constants_strings = { + ACTION_ITEM_SELECTOR: '.mdc-top-app-bar__action-item', + NAVIGATION_EVENT: 'MDCTopAppBar:nav', + NAVIGATION_ICON_SELECTOR: '.mdc-top-app-bar__navigation-icon', + ROOT_SELECTOR: '.mdc-top-app-bar', + TITLE_SELECTOR: '.mdc-top-app-bar__title', +}; + +//# sourceMappingURL=constants.js.map +;// CONCATENATED MODULE: ./node_modules/@material/top-app-bar/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCTopAppBarBaseFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCTopAppBarBaseFoundation, _super); + /* istanbul ignore next: optional argument is not a branch statement */ + function MDCTopAppBarBaseFoundation(adapter) { + return _super.call(this, __assign(__assign({}, MDCTopAppBarBaseFoundation.defaultAdapter), adapter)) || this; + } + Object.defineProperty(MDCTopAppBarBaseFoundation, "strings", { + get: function () { + return top_app_bar_constants_strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTopAppBarBaseFoundation, "cssClasses", { + get: function () { + return top_app_bar_constants_cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTopAppBarBaseFoundation, "numbers", { + get: function () { + return top_app_bar_constants_numbers; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCTopAppBarBaseFoundation, "defaultAdapter", { + /** + * See {@link MDCTopAppBarAdapter} for typing information on parameters and return types. + */ + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + hasClass: function () { return false; }, + setStyle: function () { return undefined; }, + getTopAppBarHeight: function () { return 0; }, + notifyNavigationIconClicked: function () { return undefined; }, + getViewportScrollY: function () { return 0; }, + getTotalActionItems: function () { return 0; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + /** Other variants of TopAppBar foundation overrides this method */ + MDCTopAppBarBaseFoundation.prototype.handleTargetScroll = function () { }; // tslint:disable-line:no-empty + /** Other variants of TopAppBar foundation overrides this method */ + MDCTopAppBarBaseFoundation.prototype.handleWindowResize = function () { }; // tslint:disable-line:no-empty + MDCTopAppBarBaseFoundation.prototype.handleNavigationClick = function () { + this.adapter.notifyNavigationIconClicked(); + }; + return MDCTopAppBarBaseFoundation; +}(MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const top_app_bar_foundation = ((/* unused pure expression or super */ null && (MDCTopAppBarBaseFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/top-app-bar/standard/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var INITIAL_VALUE = 0; +var MDCTopAppBarFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCTopAppBarFoundation, _super); + /* istanbul ignore next: optional argument is not a branch statement */ + function MDCTopAppBarFoundation(adapter) { + var _this = _super.call(this, adapter) || this; + /** + * Indicates if the top app bar was docked in the previous scroll handler iteration. + */ + _this.wasDocked = true; + /** + * Indicates if the top app bar is docked in the fully shown position. + */ + _this.isDockedShowing = true; + /** + * Variable for current scroll position of the top app bar + */ + _this.currentAppBarOffsetTop = 0; + /** + * Used to prevent the top app bar from being scrolled out of view during resize events + */ + _this.isCurrentlyBeingResized = false; + /** + * The timeout that's used to throttle the resize events + */ + _this.resizeThrottleId = INITIAL_VALUE; + /** + * The timeout that's used to debounce toggling the isCurrentlyBeingResized + * variable after a resize + */ + _this.resizeDebounceId = INITIAL_VALUE; + _this.lastScrollPosition = _this.adapter.getViewportScrollY(); + _this.topAppBarHeight = _this.adapter.getTopAppBarHeight(); + return _this; + } + MDCTopAppBarFoundation.prototype.destroy = function () { + _super.prototype.destroy.call(this); + this.adapter.setStyle('top', ''); + }; + /** + * Scroll handler for the default scroll behavior of the top app bar. + */ + MDCTopAppBarFoundation.prototype.handleTargetScroll = function () { + var currentScrollPosition = Math.max(this.adapter.getViewportScrollY(), 0); + var diff = currentScrollPosition - this.lastScrollPosition; + this.lastScrollPosition = currentScrollPosition; + // If the window is being resized the lastScrollPosition needs to be updated + // but the current scroll of the top app bar should stay in the same + // position. + if (!this.isCurrentlyBeingResized) { + this.currentAppBarOffsetTop -= diff; + if (this.currentAppBarOffsetTop > 0) { + this.currentAppBarOffsetTop = 0; + } + else if (Math.abs(this.currentAppBarOffsetTop) > this.topAppBarHeight) { + this.currentAppBarOffsetTop = -this.topAppBarHeight; + } + this.moveTopAppBar(); + } + }; + /** + * Top app bar resize handler that throttle/debounce functions that execute updates. + */ + MDCTopAppBarFoundation.prototype.handleWindowResize = function () { + var _this = this; + // Throttle resize events 10 p/s + if (!this.resizeThrottleId) { + this.resizeThrottleId = setTimeout(function () { + _this.resizeThrottleId = INITIAL_VALUE; + _this.throttledResizeHandler(); + }, top_app_bar_constants_numbers.DEBOUNCE_THROTTLE_RESIZE_TIME_MS); + } + this.isCurrentlyBeingResized = true; + if (this.resizeDebounceId) { + clearTimeout(this.resizeDebounceId); + } + this.resizeDebounceId = setTimeout(function () { + _this.handleTargetScroll(); + _this.isCurrentlyBeingResized = false; + _this.resizeDebounceId = INITIAL_VALUE; + }, top_app_bar_constants_numbers.DEBOUNCE_THROTTLE_RESIZE_TIME_MS); + }; + /** + * Function to determine if the DOM needs to update. + */ + MDCTopAppBarFoundation.prototype.checkForUpdate = function () { + var offscreenBoundaryTop = -this.topAppBarHeight; + var hasAnyPixelsOffscreen = this.currentAppBarOffsetTop < 0; + var hasAnyPixelsOnscreen = this.currentAppBarOffsetTop > offscreenBoundaryTop; + var partiallyShowing = hasAnyPixelsOffscreen && hasAnyPixelsOnscreen; + // If it's partially showing, it can't be docked. + if (partiallyShowing) { + this.wasDocked = false; + } + else { + // Not previously docked and not partially showing, it's now docked. + if (!this.wasDocked) { + this.wasDocked = true; + return true; + } + else if (this.isDockedShowing !== hasAnyPixelsOnscreen) { + this.isDockedShowing = hasAnyPixelsOnscreen; + return true; + } + } + return partiallyShowing; + }; + /** + * Function to move the top app bar if needed. + */ + MDCTopAppBarFoundation.prototype.moveTopAppBar = function () { + if (this.checkForUpdate()) { + // Once the top app bar is fully hidden we use the max potential top app bar height as our offset + // so the top app bar doesn't show if the window resizes and the new height > the old height. + var offset = this.currentAppBarOffsetTop; + if (Math.abs(offset) >= this.topAppBarHeight) { + offset = -top_app_bar_constants_numbers.MAX_TOP_APP_BAR_HEIGHT; + } + this.adapter.setStyle('top', offset + 'px'); + } + }; + /** + * Throttled function that updates the top app bar scrolled values if the + * top app bar height changes. + */ + MDCTopAppBarFoundation.prototype.throttledResizeHandler = function () { + var currentHeight = this.adapter.getTopAppBarHeight(); + if (this.topAppBarHeight !== currentHeight) { + this.wasDocked = false; + // Since the top app bar has a different height depending on the screen width, this + // will ensure that the top app bar remains in the correct location if + // completely hidden and a resize makes the top app bar a different height. + this.currentAppBarOffsetTop -= this.topAppBarHeight - currentHeight; + this.topAppBarHeight = currentHeight; + } + this.handleTargetScroll(); + }; + return MDCTopAppBarFoundation; +}(MDCTopAppBarBaseFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const standard_foundation = ((/* unused pure expression or super */ null && (MDCTopAppBarFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/top-app-bar/fixed/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCFixedTopAppBarFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCFixedTopAppBarFoundation, _super); + function MDCFixedTopAppBarFoundation() { + var _this = _super !== null && _super.apply(this, arguments) || this; + /** + * State variable for the previous scroll iteration top app bar state + */ + _this.wasScrolled = false; + return _this; + } + /** + * Scroll handler for applying/removing the modifier class on the fixed top app bar. + */ + MDCFixedTopAppBarFoundation.prototype.handleTargetScroll = function () { + var currentScroll = this.adapter.getViewportScrollY(); + if (currentScroll <= 0) { + if (this.wasScrolled) { + this.adapter.removeClass(top_app_bar_constants_cssClasses.FIXED_SCROLLED_CLASS); + this.wasScrolled = false; + } + } + else { + if (!this.wasScrolled) { + this.adapter.addClass(top_app_bar_constants_cssClasses.FIXED_SCROLLED_CLASS); + this.wasScrolled = true; + } + } + }; + return MDCFixedTopAppBarFoundation; +}(MDCTopAppBarFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const fixed_foundation = ((/* unused pure expression or super */ null && (MDCFixedTopAppBarFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/top-app-bar/short/foundation.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +var MDCShortTopAppBarFoundation = /** @class */ (function (_super) { + tslib_es6_extends(MDCShortTopAppBarFoundation, _super); + /* istanbul ignore next: optional argument is not a branch statement */ + function MDCShortTopAppBarFoundation(adapter) { + var _this = _super.call(this, adapter) || this; + _this.collapsed = false; + _this.isAlwaysCollapsed = false; + return _this; + } + Object.defineProperty(MDCShortTopAppBarFoundation.prototype, "isCollapsed", { + // Public visibility for backward compatibility. + get: function () { + return this.collapsed; + }, + enumerable: false, + configurable: true + }); + MDCShortTopAppBarFoundation.prototype.init = function () { + _super.prototype.init.call(this); + if (this.adapter.getTotalActionItems() > 0) { + this.adapter.addClass(top_app_bar_constants_cssClasses.SHORT_HAS_ACTION_ITEM_CLASS); + } + // If initialized with SHORT_COLLAPSED_CLASS, the bar should always be collapsed + this.setAlwaysCollapsed(this.adapter.hasClass(top_app_bar_constants_cssClasses.SHORT_COLLAPSED_CLASS)); + }; + /** + * Set if the short top app bar should always be collapsed. + * + * @param value When `true`, bar will always be collapsed. When `false`, bar may collapse or expand based on scroll. + */ + MDCShortTopAppBarFoundation.prototype.setAlwaysCollapsed = function (value) { + this.isAlwaysCollapsed = !!value; + if (this.isAlwaysCollapsed) { + this.collapse(); + } + else { + // let maybeCollapseBar determine if the bar should be collapsed + this.maybeCollapseBar(); + } + }; + MDCShortTopAppBarFoundation.prototype.getAlwaysCollapsed = function () { + return this.isAlwaysCollapsed; + }; + /** + * Scroll handler for applying/removing the collapsed modifier class on the short top app bar. + */ + MDCShortTopAppBarFoundation.prototype.handleTargetScroll = function () { + this.maybeCollapseBar(); + }; + MDCShortTopAppBarFoundation.prototype.maybeCollapseBar = function () { + if (this.isAlwaysCollapsed) { + return; + } + var currentScroll = this.adapter.getViewportScrollY(); + if (currentScroll <= 0) { + if (this.collapsed) { + this.uncollapse(); + } + } + else { + if (!this.collapsed) { + this.collapse(); + } + } + }; + MDCShortTopAppBarFoundation.prototype.uncollapse = function () { + this.adapter.removeClass(top_app_bar_constants_cssClasses.SHORT_COLLAPSED_CLASS); + this.collapsed = false; + }; + MDCShortTopAppBarFoundation.prototype.collapse = function () { + this.adapter.addClass(top_app_bar_constants_cssClasses.SHORT_COLLAPSED_CLASS); + this.collapsed = true; + }; + return MDCShortTopAppBarFoundation; +}(MDCTopAppBarBaseFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const short_foundation = ((/* unused pure expression or super */ null && (MDCShortTopAppBarFoundation))); +//# sourceMappingURL=foundation.js.map +;// CONCATENATED MODULE: ./node_modules/@material/top-app-bar/component.js +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + + + + + +var MDCTopAppBar = /** @class */ (function (_super) { + tslib_es6_extends(MDCTopAppBar, _super); + function MDCTopAppBar() { + return _super !== null && _super.apply(this, arguments) || this; + } + MDCTopAppBar.attachTo = function (root) { + return new MDCTopAppBar(root); + }; + MDCTopAppBar.prototype.initialize = function (rippleFactory) { + if (rippleFactory === void 0) { rippleFactory = function (el) { return MDCRipple.attachTo(el); }; } + this.navIcon = this.root.querySelector(top_app_bar_constants_strings.NAVIGATION_ICON_SELECTOR); + // Get all icons in the toolbar and instantiate the ripples + var icons = [].slice.call(this.root.querySelectorAll(top_app_bar_constants_strings.ACTION_ITEM_SELECTOR)); + if (this.navIcon) { + icons.push(this.navIcon); + } + this.iconRipples = icons.map(function (icon) { + var ripple = rippleFactory(icon); + ripple.unbounded = true; + return ripple; + }); + this.scrollTarget = window; + }; + MDCTopAppBar.prototype.initialSyncWithDOM = function () { + this.handleNavigationClick = + this.foundation.handleNavigationClick.bind(this.foundation); + this.handleWindowResize = + this.foundation.handleWindowResize.bind(this.foundation); + this.handleTargetScroll = + this.foundation.handleTargetScroll.bind(this.foundation); + this.scrollTarget.addEventListener('scroll', this.handleTargetScroll); + if (this.navIcon) { + this.navIcon.addEventListener('click', this.handleNavigationClick); + } + var isFixed = this.root.classList.contains(top_app_bar_constants_cssClasses.FIXED_CLASS); + var isShort = this.root.classList.contains(top_app_bar_constants_cssClasses.SHORT_CLASS); + if (!isShort && !isFixed) { + window.addEventListener('resize', this.handleWindowResize); + } + }; + MDCTopAppBar.prototype.destroy = function () { + var e_1, _a; + try { + for (var _b = tslib_es6_values(this.iconRipples), _c = _b.next(); !_c.done; _c = _b.next()) { + var iconRipple = _c.value; + iconRipple.destroy(); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + this.scrollTarget.removeEventListener('scroll', this.handleTargetScroll); + if (this.navIcon) { + this.navIcon.removeEventListener('click', this.handleNavigationClick); + } + var isFixed = this.root.classList.contains(top_app_bar_constants_cssClasses.FIXED_CLASS); + var isShort = this.root.classList.contains(top_app_bar_constants_cssClasses.SHORT_CLASS); + if (!isShort && !isFixed) { + window.removeEventListener('resize', this.handleWindowResize); + } + _super.prototype.destroy.call(this); + }; + MDCTopAppBar.prototype.setScrollTarget = function (target) { + // Remove scroll handler from the previous scroll target + this.scrollTarget.removeEventListener('scroll', this.handleTargetScroll); + this.scrollTarget = target; + // Initialize scroll handler on the new scroll target + this.handleTargetScroll = + this.foundation.handleTargetScroll.bind(this.foundation); + this.scrollTarget.addEventListener('scroll', this.handleTargetScroll); + }; + MDCTopAppBar.prototype.getDefaultFoundation = function () { + var _this = this; + // DO NOT INLINE this variable. For backward compatibility, foundations take a Partial. + // To ensure we don't accidentally omit any methods, we need a separate, strongly typed adapter variable. + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + var adapter = { + hasClass: function (className) { return _this.root.classList.contains(className); }, + addClass: function (className) { return _this.root.classList.add(className); }, + removeClass: function (className) { return _this.root.classList.remove(className); }, + setStyle: function (property, value) { + return _this.root.style.setProperty(property, value); + }, + getTopAppBarHeight: function () { return _this.root.clientHeight; }, + notifyNavigationIconClicked: function () { + return _this.emit(top_app_bar_constants_strings.NAVIGATION_EVENT, {}); + }, + getViewportScrollY: function () { + var win = _this.scrollTarget; + var el = _this.scrollTarget; + return win.pageYOffset !== undefined ? win.pageYOffset : el.scrollTop; + }, + getTotalActionItems: function () { + return _this.root.querySelectorAll(top_app_bar_constants_strings.ACTION_ITEM_SELECTOR).length; + }, + }; + // tslint:enable:object-literal-sort-keys + var foundation; + if (this.root.classList.contains(top_app_bar_constants_cssClasses.SHORT_CLASS)) { + foundation = new MDCShortTopAppBarFoundation(adapter); + } + else if (this.root.classList.contains(top_app_bar_constants_cssClasses.FIXED_CLASS)) { + foundation = new MDCFixedTopAppBarFoundation(adapter); + } + else { + foundation = new MDCTopAppBarFoundation(adapter); + } + return foundation; + }; + return MDCTopAppBar; +}(MDCComponent)); + +//# sourceMappingURL=component.js.map +;// CONCATENATED MODULE: ./Components/TopAppBar/MBTopAppBar.ts + +function MBTopAppBar_init(elem, scrollTarget) { + if (!elem) { + return; + } + elem._topAppBar = MDCTopAppBar.attachTo(elem); + if (scrollTarget) { + elem._topAppBar.setScrollTarget(document.querySelector(scrollTarget)); + } +} +;// CONCATENATED MODULE: ./scripts/rtl.ts +function rtl_isDocumentRTL() { + var dir = document.documentElement.getAttribute("dir"); + return !dir || dir.toLowerCase() === "rtl"; +} +function rtl_isElementRTL(elem) { + if (!elem) { + return false; + } + var dirElem = elem; + var dir = ""; + for (; dirElem && dirElem !== document && (!dir || dir === ""); dirElem = dirElem.parentNode) { + dir = dirElem.getAttribute("dir"); + if (dir && dir.length > 0) { + dir = dir.toLowerCase(); + if (dir === "ltr" || dir === "auto") { + break; + } + } + } + return dir !== null && dir.toLowerCase() === "rtl"; +} +;// CONCATENATED MODULE: ./scripts/material.blazor.ts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +window.MaterialBlazor = { + MBAutocompletePagedField: MBAutocompletePagedField_namespaceObject, + MBAutocompleteTextField: MBAutocompleteTextField_namespaceObject, + MBBladeSet: MBBladeSet_namespaceObject, + MBButton: MBButton_namespaceObject, + MBCard: MBCard_namespaceObject, + MBCheckbox: MBCheckbox_namespaceObject, + MBCircularProgress: MBCircularProgress_namespaceObject, + MBDataTable: MBDataTable_namespaceObject, + MBDatePicker: MBDatePicker_namespaceObject, + MBDialog: MBDialog_namespaceObject, + MBDrawer: MBDrawer_namespaceObject, + MBDragAndDropList: MBDragAndDropList_namespaceObject, + MBFileUpload: MBFileUpload_namespaceObject, + MBFloatingActionButton: MBFloatingActionButton_namespaceObject, + MBIconButton: MBIconButton_namespaceObject, + MBIconButtonToggle: MBIconButtonToggle_namespaceObject, + MBLinearProgress: MBLinearProgress_namespaceObject, + MBList: MBList_namespaceObject, + MBMenu: MBMenu_namespaceObject, + MBMenuSurface: MBMenuSurface_namespaceObject, + MBRadioButton: MBRadioButton_namespaceObject, + MBSegmentedButtonMulti: MBSegmentedButtonMulti_namespaceObject, + MBSelect: MBSelect_namespaceObject, + MBSlider: MBSlider_namespaceObject, + MBSnackbar: MBSnackbar_namespaceObject, + MBSwitch: MBSwitch_namespaceObject, + MBTabBar: MBTabBar_namespaceObject, + MBTextField: MBTextField_namespaceObject, + MBTooltip: MBTooltip_namespaceObject, + MBTopAppBar: MBTopAppBar_namespaceObject, + RTL: scripts_rtl_namespaceObject +}; +})(); + +/******/ })() +; \ No newline at end of file diff --git a/Material.Blazor/wwwroot/material.blazor.min.js b/Material.Blazor/wwwroot/material.blazor.min.js new file mode 100644 index 000000000..b32c3bad9 --- /dev/null +++ b/Material.Blazor/wwwroot/material.blazor.min.js @@ -0,0 +1,266 @@ +(()=>{var t={633:(t,e,n)=>{var i=n(738).default;function r(){"use strict";/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */t.exports=r=function(){return n},t.exports.__esModule=!0,t.exports.default=t.exports;var e,n={},o=Object.prototype,a=o.hasOwnProperty,s=Object.defineProperty||function(t,e,n){t[e]=n.value},u="function"==typeof Symbol?Symbol:{},c=u.iterator||"@@iterator",l=u.asyncIterator||"@@asyncIterator",d=u.toStringTag||"@@toStringTag";function h(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},"")}catch(e){h=function(t,e,n){return t[e]=n}}function p(t,e,n,i){var r=e&&e.prototype instanceof A?e:A,o=Object.create(r.prototype),a=new w(i||[]);return s(o,"_invoke",{value:L(t,n,a)}),o}function f(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}n.wrap=p;var m="suspendedStart",E="suspendedYield",g="executing",T="completed",y={};function A(){}function v(){}function C(){}var I={};h(I,c,(function(){return this}));var S=Object.getPrototypeOf,b=S&&S(S(P([])));b&&b!==o&&a.call(b,c)&&(I=b);var _=C.prototype=A.prototype=Object.create(I);function O(t){["next","throw","return"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function R(t,e){function n(r,o,s,u){var c=f(t[r],t,o);if("throw"!==c.type){var l=c.arg,d=l.value;return d&&"object"==i(d)&&a.call(d,"__await")?e.resolve(d.__await).then((function(t){n("next",t,s,u)}),(function(t){n("throw",t,s,u)})):e.resolve(d).then((function(t){l.value=t,s(l)}),(function(t){return n("throw",t,s,u)}))}u(c.arg)}var r;s(this,"_invoke",{value:function(t,i){function o(){return new e((function(e,r){n(t,i,e,r)}))}return r=r?r.then(o,o):o()}})}function L(t,n,i){var r=m;return function(o,a){if(r===g)throw new Error("Generator is already running");if(r===T){if("throw"===o)throw a;return{value:e,done:!0}}for(i.method=o,i.arg=a;;){var s=i.delegate;if(s){var u=D(s,i);if(u){if(u===y)continue;return u}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if(r===m)throw r=T,i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);r=g;var c=f(t,n,i);if("normal"===c.type){if(r=i.done?T:E,c.arg===y)continue;return{value:c.arg,done:i.done}}"throw"===c.type&&(r=T,i.method="throw",i.arg=c.arg)}}}function D(t,n){var i=n.method,r=t.iterator[i];if(r===e)return n.delegate=null,"throw"===i&&t.iterator.return&&(n.method="return",n.arg=e,D(t,n),"throw"===n.method)||"return"!==i&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+i+"' method")),y;var o=f(r,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,y;var a=o.arg;return a?a.done?(n[t.resultName]=a.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,y):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,y)}function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function N(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function w(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.reset(!0)}function P(t){if(t||""===t){var n=t[c];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,o=function n(){for(;++r=0;--r){var o=this.tryEntries[r],s=o.completion;if("root"===o.tryLoc)return i("end");if(o.tryLoc<=this.prev){var u=a.call(o,"catchLoc"),c=a.call(o,"finallyLoc");if(u&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&a.call(i,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),N(n),y}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var i=n.completion;if("throw"===i.type){var r=i.arg;N(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,i){return this.delegate={iterator:P(t),resultName:n,nextLoc:i},"next"===this.method&&(this.arg=e),y}},n}t.exports=r,t.exports.__esModule=!0,t.exports.default=t.exports},738:t=>{function e(n){return t.exports=e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,e(n)}t.exports=e,t.exports.__esModule=!0,t.exports.default=t.exports},756:(t,e,n)=>{var i=n(633)();t.exports=i;try{regeneratorRuntime=i}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=i:Function("r","regeneratorRuntime = r")(i)}}},e={};function n(i){var r=e[i];if(void 0!==r)return r.exports;var o=e[i]={exports:{}};return t[i](o,o.exports,n),o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{"use strict";var t={};n.r(t),n.d(t,{close:()=>Me,init:()=>we,open:()=>Pe,setDisabled:()=>Fe,setValue:()=>He});var e={};n.r(e),n.d(e,{close:()=>Ve,init:()=>ke,open:()=>Be,setDisabled:()=>We,setValue:()=>Ue});var i={};n.r(i),n.d(i,{closeBlade:()=>Qe,openBlade:()=>ze});var r={};n.r(r),n.d(r,{init:()=>Ze});var o={};n.r(o),n.d(o,{init:()=>$e});var a={};n.r(a),n.d(a,{init:()=>dn,setChecked:()=>hn,setDisabled:()=>fn,setIndeterminate:()=>pn});var s={};n.r(s),n.d(s,{init:()=>yn,setProgress:()=>An});var u={};n.r(u),n.d(u,{init:()=>$n,setProgress:()=>Jn});var c={};n.r(c),n.d(c,{init:()=>pi,listItemClick:()=>mi,scrollToYear:()=>gi,setDisabled:()=>fi});var l={};n.r(l),n.d(l,{hide:()=>Li,show:()=>Ri});var d={};n.r(d),n.d(d,{init:()=>Fi,toggle:()=>ki});var h={};n.r(h),n.d(h,{initDropTarget:()=>Bi});var p={};n.r(p),n.d(p,{click:()=>Vi});var f={};n.r(f),n.d(f,{init:()=>Ui,setExited:()=>Wi});var m={};n.r(m),n.d(m,{init:()=>ji});var E={};n.r(E),n.d(E,{click:()=>Zi,init:()=>Yi,setOn:()=>Qi});var g={};n.r(g),n.d(g,{init:()=>$i,restartAnimation:()=>tr,setProgress:()=>Ji});var T={};n.r(T),n.d(T,{init:()=>er});var y={};n.r(y),n.d(y,{hide:()=>rr,init:()=>nr,show:()=>ir});var A={};n.r(A),n.d(A,{hide:()=>sr,init:()=>or,show:()=>ar});var v={};n.r(v),n.d(v,{init:()=>hr,setChecked:()=>fr,setDisabled:()=>pr});var C={};n.r(C),n.d(C,{init:()=>Nr,setDisabled:()=>wr,setSelected:()=>Pr});var I={};n.r(I),n.d(I,{init:()=>Mr,setDisabled:()=>Hr,setIndex:()=>Fr});var S={};n.r(S),n.d(S,{init:()=>Po,setDisabled:()=>Ho,setValue:()=>Mo});var b={};n.r(b),n.d(b,{init:()=>aa});var _={};n.r(_),n.d(_,{init:()=>pa,setDisabled:()=>ma,setSelected:()=>fa});var O={};n.r(O),n.d(O,{activateTab:()=>Ka,init:()=>Ga});var R={};n.r(R),n.d(R,{init:()=>qa,setDisabled:()=>za,setHelperText:()=>Ya,setType:()=>Qa,setValue:()=>Xa});var L={};n.r(L),n.d(L,{init:()=>Os,numbers:()=>ts});var D={};n.r(D),n.d(D,{init:()=>Hs});var x={};n.r(x),n.d(x,{isDocumentRTL:()=>Fs,isElementRTL:()=>ks});var N=function(t,e){return N=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},N(t,e)};function w(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}N(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var P=function(){return P=Object.assign||function(t){for(var e,n=1,i=arguments.length;n0&&r[r.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function k(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var i,r,o=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(i=o.next()).done;)a.push(i.value)}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return a}function B(t,e,n){if(n||2===arguments.length)for(var i,r=0,o=e.length;r0&&(t+=$.NOTCH_ELEMENT_PADDING),this.adapter.setNotchWidthProperty(t),this.adapter.addClass(n)},e.prototype.closeNotch=function(){var t=e.cssClasses.OUTLINE_NOTCHED;this.adapter.removeClass(t),this.adapter.removeNotchWidthProperty()},e}(V); +/** + * @license + * Copyright 2017 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var et,nt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.initialSyncWithDOM=function(){this.notchElement=this.root.querySelector(Z.NOTCH_ELEMENT_SELECTOR);var t=this.root.querySelector("."+q.cssClasses.ROOT);t?(t.style.transitionDuration="0s",this.root.classList.add(J.OUTLINE_UPGRADED),requestAnimationFrame((function(){t.style.transitionDuration=""}))):this.root.classList.add(J.NO_LABEL)},e.prototype.notch=function(t){this.foundation.notch(t)},e.prototype.closeNotch=function(){this.foundation.closeNotch()},e.prototype.getDefaultFoundation=function(){var t=this;return new tt({addClass:function(e){return t.root.classList.add(e)},removeClass:function(e){return t.root.classList.remove(e)},setNotchWidthProperty:function(e){t.notchElement.style.setProperty("width",e+"px")},removeNotchWidthProperty:function(){t.notchElement.style.removeProperty("width")}})},e}(U),it={BG_FOCUSED:"mdc-ripple-upgraded--background-focused",FG_ACTIVATION:"mdc-ripple-upgraded--foreground-activation",FG_DEACTIVATION:"mdc-ripple-upgraded--foreground-deactivation",ROOT:"mdc-ripple-upgraded",UNBOUNDED:"mdc-ripple-upgraded--unbounded"},rt={VAR_FG_SCALE:"--mdc-ripple-fg-scale",VAR_FG_SIZE:"--mdc-ripple-fg-size",VAR_FG_TRANSLATE_END:"--mdc-ripple-fg-translate-end",VAR_FG_TRANSLATE_START:"--mdc-ripple-fg-translate-start",VAR_LEFT:"--mdc-ripple-left",VAR_TOP:"--mdc-ripple-top"},ot={DEACTIVATION_TIMEOUT_MS:225,FG_DEACTIVATION_MS:150,INITIAL_ORIGIN_SCALE:.6,PADDING:10,TAP_DELAY_MS:300}; +var at=["touchstart","pointerdown","mousedown","keydown"],st=["touchend","pointerup","mouseup","contextmenu"],ut=[],ct=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.activationAnimationHasEnded=!1,i.activationTimer=0,i.fgDeactivationRemovalTimer=0,i.fgScale="0",i.frame={width:0,height:0},i.initialSize=0,i.layoutFrame=0,i.maxRadius=0,i.unboundedCoords={left:0,top:0},i.activationState=i.defaultActivationState(),i.activationTimerCallback=function(){i.activationAnimationHasEnded=!0,i.runDeactivationUXLogicIfReady()},i.activateHandler=function(t){i.activateImpl(t)},i.deactivateHandler=function(){i.deactivateImpl()},i.focusHandler=function(){i.handleFocus()},i.blurHandler=function(){i.handleBlur()},i.resizeHandler=function(){i.layout()},i}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return it},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return rt},enumerable:!1,configurable:!0}),Object.defineProperty(e,"numbers",{get:function(){return ot},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},browserSupportsCssVars:function(){return!0},computeBoundingRect:function(){return{top:0,right:0,bottom:0,left:0,width:0,height:0}},containsEventTarget:function(){return!0},deregisterDocumentInteractionHandler:function(){},deregisterInteractionHandler:function(){},deregisterResizeHandler:function(){},getWindowPageOffset:function(){return{x:0,y:0}},isSurfaceActive:function(){return!0},isSurfaceDisabled:function(){return!0},isUnbounded:function(){return!0},registerDocumentInteractionHandler:function(){},registerInteractionHandler:function(){},registerResizeHandler:function(){},removeClass:function(){},updateCssVariable:function(){}}},enumerable:!1,configurable:!0}),e.prototype.init=function(){var t=this,n=this.supportsPressRipple();if(this.registerRootHandlers(n),n){var i=e.cssClasses,r=i.ROOT,o=i.UNBOUNDED;requestAnimationFrame((function(){t.adapter.addClass(r),t.adapter.isUnbounded()&&(t.adapter.addClass(o),t.layoutInternal())}))}},e.prototype.destroy=function(){var t=this;if(this.supportsPressRipple()){this.activationTimer&&(clearTimeout(this.activationTimer),this.activationTimer=0,this.adapter.removeClass(e.cssClasses.FG_ACTIVATION)),this.fgDeactivationRemovalTimer&&(clearTimeout(this.fgDeactivationRemovalTimer),this.fgDeactivationRemovalTimer=0,this.adapter.removeClass(e.cssClasses.FG_DEACTIVATION));var n=e.cssClasses,i=n.ROOT,r=n.UNBOUNDED;requestAnimationFrame((function(){t.adapter.removeClass(i),t.adapter.removeClass(r),t.removeCssVars()}))}this.deregisterRootHandlers(),this.deregisterDeactivationHandlers()},e.prototype.activate=function(t){this.activateImpl(t)},e.prototype.deactivate=function(){this.deactivateImpl()},e.prototype.layout=function(){var t=this;this.layoutFrame&&cancelAnimationFrame(this.layoutFrame),this.layoutFrame=requestAnimationFrame((function(){t.layoutInternal(),t.layoutFrame=0}))},e.prototype.setUnbounded=function(t){var n=e.cssClasses.UNBOUNDED;t?this.adapter.addClass(n):this.adapter.removeClass(n)},e.prototype.handleFocus=function(){var t=this;requestAnimationFrame((function(){return t.adapter.addClass(e.cssClasses.BG_FOCUSED)}))},e.prototype.handleBlur=function(){var t=this;requestAnimationFrame((function(){return t.adapter.removeClass(e.cssClasses.BG_FOCUSED)}))},e.prototype.supportsPressRipple=function(){return this.adapter.browserSupportsCssVars()},e.prototype.defaultActivationState=function(){return{activationEvent:void 0,hasDeactivationUXRun:!1,isActivated:!1,isProgrammatic:!1,wasActivatedByPointer:!1,wasElementMadeActive:!1}},e.prototype.registerRootHandlers=function(t){var e,n;if(t){try{for(var i=F(at),r=i.next();!r.done;r=i.next()){var o=r.value;this.adapter.registerInteractionHandler(o,this.activateHandler)}}catch(t){e={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}this.adapter.isUnbounded()&&this.adapter.registerResizeHandler(this.resizeHandler)}this.adapter.registerInteractionHandler("focus",this.focusHandler),this.adapter.registerInteractionHandler("blur",this.blurHandler)},e.prototype.registerDeactivationHandlers=function(t){var e,n;if("keydown"===t.type)this.adapter.registerInteractionHandler("keyup",this.deactivateHandler);else try{for(var i=F(st),r=i.next();!r.done;r=i.next()){var o=r.value;this.adapter.registerDocumentInteractionHandler(o,this.deactivateHandler)}}catch(t){e={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}},e.prototype.deregisterRootHandlers=function(){var t,e;try{for(var n=F(at),i=n.next();!i.done;i=n.next()){var r=i.value;this.adapter.deregisterInteractionHandler(r,this.activateHandler)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}this.adapter.deregisterInteractionHandler("focus",this.focusHandler),this.adapter.deregisterInteractionHandler("blur",this.blurHandler),this.adapter.isUnbounded()&&this.adapter.deregisterResizeHandler(this.resizeHandler)},e.prototype.deregisterDeactivationHandlers=function(){var t,e;this.adapter.deregisterInteractionHandler("keyup",this.deactivateHandler);try{for(var n=F(st),i=n.next();!i.done;i=n.next()){var r=i.value;this.adapter.deregisterDocumentInteractionHandler(r,this.deactivateHandler)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.removeCssVars=function(){var t=this,n=e.strings;Object.keys(n).forEach((function(e){0===e.indexOf("VAR_")&&t.adapter.updateCssVariable(n[e],null)}))},e.prototype.activateImpl=function(t){var e=this;if(!this.adapter.isSurfaceDisabled()){var n=this.activationState;if(!n.isActivated){var i=this.previousActivationEvent;if(!(i&&void 0!==t&&i.type!==t.type))n.isActivated=!0,n.isProgrammatic=void 0===t,n.activationEvent=t,n.wasActivatedByPointer=!n.isProgrammatic&&(void 0!==t&&("mousedown"===t.type||"touchstart"===t.type||"pointerdown"===t.type)),void 0!==t&&ut.length>0&&ut.some((function(t){return e.adapter.containsEventTarget(t)}))?this.resetActivationState():(void 0!==t&&(ut.push(t.target),this.registerDeactivationHandlers(t)),n.wasElementMadeActive=this.checkElementMadeActive(t),n.wasElementMadeActive&&this.animateActivation(),requestAnimationFrame((function(){ut=[],n.wasElementMadeActive||void 0===t||" "!==t.key&&32!==t.keyCode||(n.wasElementMadeActive=e.checkElementMadeActive(t),n.wasElementMadeActive&&e.animateActivation()),n.wasElementMadeActive||(e.activationState=e.defaultActivationState())})))}}},e.prototype.checkElementMadeActive=function(t){return void 0===t||"keydown"!==t.type||this.adapter.isSurfaceActive()},e.prototype.animateActivation=function(){var t=this,n=e.strings,i=n.VAR_FG_TRANSLATE_START,r=n.VAR_FG_TRANSLATE_END,o=e.cssClasses,a=o.FG_DEACTIVATION,s=o.FG_ACTIVATION,u=e.numbers.DEACTIVATION_TIMEOUT_MS;this.layoutInternal();var c="",l="";if(!this.adapter.isUnbounded()){var d=this.getFgTranslationCoordinates(),h=d.startPoint,p=d.endPoint;c=h.x+"px, "+h.y+"px",l=p.x+"px, "+p.y+"px"}this.adapter.updateCssVariable(i,c),this.adapter.updateCssVariable(r,l),clearTimeout(this.activationTimer),clearTimeout(this.fgDeactivationRemovalTimer),this.rmBoundedActivationClasses(),this.adapter.removeClass(a),this.adapter.computeBoundingRect(),this.adapter.addClass(s),this.activationTimer=setTimeout((function(){t.activationTimerCallback()}),u)},e.prototype.getFgTranslationCoordinates=function(){var t,e=this.activationState,n=e.activationEvent;return{startPoint:t={x:(t=e.wasActivatedByPointer?function(t,e,n){if(!t)return{x:0,y:0};var i,r,o=e.x,a=e.y,s=o+n.left,u=a+n.top;if("touchstart"===t.type){var c=t;i=c.changedTouches[0].pageX-s,r=c.changedTouches[0].pageY-u}else{var l=t;i=l.pageX-s,r=l.pageY-u}return{x:i,y:r}}(n,this.adapter.getWindowPageOffset(),this.adapter.computeBoundingRect()):{x:this.frame.width/2,y:this.frame.height/2}).x-this.initialSize/2,y:t.y-this.initialSize/2},endPoint:{x:this.frame.width/2-this.initialSize/2,y:this.frame.height/2-this.initialSize/2}}},e.prototype.runDeactivationUXLogicIfReady=function(){var t=this,n=e.cssClasses.FG_DEACTIVATION,i=this.activationState,r=i.hasDeactivationUXRun,o=i.isActivated;(r||!o)&&this.activationAnimationHasEnded&&(this.rmBoundedActivationClasses(),this.adapter.addClass(n),this.fgDeactivationRemovalTimer=setTimeout((function(){t.adapter.removeClass(n)}),ot.FG_DEACTIVATION_MS))},e.prototype.rmBoundedActivationClasses=function(){var t=e.cssClasses.FG_ACTIVATION;this.adapter.removeClass(t),this.activationAnimationHasEnded=!1,this.adapter.computeBoundingRect()},e.prototype.resetActivationState=function(){var t=this;this.previousActivationEvent=this.activationState.activationEvent,this.activationState=this.defaultActivationState(),setTimeout((function(){return t.previousActivationEvent=void 0}),e.numbers.TAP_DELAY_MS)},e.prototype.deactivateImpl=function(){var t=this,e=this.activationState;if(e.isActivated){var n=P({},e);e.isProgrammatic?(requestAnimationFrame((function(){t.animateDeactivation(n)})),this.resetActivationState()):(this.deregisterDeactivationHandlers(),requestAnimationFrame((function(){t.activationState.hasDeactivationUXRun=!0,t.animateDeactivation(n),t.resetActivationState()})))}},e.prototype.animateDeactivation=function(t){var e=t.wasActivatedByPointer,n=t.wasElementMadeActive;(e||n)&&this.runDeactivationUXLogicIfReady()},e.prototype.layoutInternal=function(){var t=this;this.frame=this.adapter.computeBoundingRect();var n=Math.max(this.frame.height,this.frame.width);this.maxRadius=this.adapter.isUnbounded()?n:Math.sqrt(Math.pow(t.frame.width,2)+Math.pow(t.frame.height,2))+e.numbers.PADDING;var i=Math.floor(n*e.numbers.INITIAL_ORIGIN_SCALE);this.adapter.isUnbounded()&&i%2!=0?this.initialSize=i-1:this.initialSize=i,this.fgScale=""+this.maxRadius/this.initialSize,this.updateLayoutCssVars()},e.prototype.updateLayoutCssVars=function(){var t=e.strings,n=t.VAR_FG_SIZE,i=t.VAR_LEFT,r=t.VAR_TOP,o=t.VAR_FG_SCALE;this.adapter.updateCssVariable(n,this.initialSize+"px"),this.adapter.updateCssVariable(o,this.fgScale),this.adapter.isUnbounded()&&(this.unboundedCoords={left:Math.round(this.frame.width/2-this.initialSize/2),top:Math.round(this.frame.height/2-this.initialSize/2)},this.adapter.updateCssVariable(i,this.unboundedCoords.left+"px"),this.adapter.updateCssVariable(r,this.unboundedCoords.top+"px"))},e}(V); +var lt=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.disabled=!1,e}return w(e,t),e.attachTo=function(t,n){void 0===n&&(n={isUnbounded:void 0});var i=new e(t);return void 0!==n.isUnbounded&&(i.unbounded=n.isUnbounded),i},e.createAdapter=function(t){return{addClass:function(e){return t.root.classList.add(e)},browserSupportsCssVars:function(){return function(t,e){void 0===e&&(e=!1);var n,i=t.CSS;if("boolean"==typeof et&&!e)return et;if(!i||"function"!=typeof i.supports)return!1;var r=i.supports("--css-vars","yes"),o=i.supports("(--css-vars: yes)")&&i.supports("color","#00000000");return n=r||o,e||(et=n),n}(window)},computeBoundingRect:function(){return t.root.getBoundingClientRect()},containsEventTarget:function(e){return t.root.contains(e)},deregisterDocumentInteractionHandler:function(t,e){return document.documentElement.removeEventListener(t,e,W())},deregisterInteractionHandler:function(e,n){return t.root.removeEventListener(e,n,W())},deregisterResizeHandler:function(t){return window.removeEventListener("resize",t)},getWindowPageOffset:function(){return{x:window.pageXOffset,y:window.pageYOffset}},isSurfaceActive:function(){return G(t.root,":active")},isSurfaceDisabled:function(){return Boolean(t.disabled)},isUnbounded:function(){return Boolean(t.unbounded)},registerDocumentInteractionHandler:function(t,e){return document.documentElement.addEventListener(t,e,W())},registerInteractionHandler:function(e,n){return t.root.addEventListener(e,n,W())},registerResizeHandler:function(t){return window.addEventListener("resize",t)},removeClass:function(e){return t.root.classList.remove(e)},updateCssVariable:function(e,n){return t.root.style.setProperty(e,n)}}},Object.defineProperty(e.prototype,"unbounded",{get:function(){return Boolean(this.isUnbounded)},set:function(t){this.isUnbounded=Boolean(t),this.setUnbounded()},enumerable:!1,configurable:!0}),e.prototype.activate=function(){this.foundation.activate()},e.prototype.deactivate=function(){this.foundation.deactivate()},e.prototype.layout=function(){this.foundation.layout()},e.prototype.getDefaultFoundation=function(){return new ct(e.createAdapter(this))},e.prototype.initialSyncWithDOM=function(){var t=this.root;this.isUnbounded="mdcRippleIsUnbounded"in t.dataset},e.prototype.setUnbounded=function(){this.foundation.setUnbounded(Boolean(this.isUnbounded))},e}(U),dt={ROOT:"mdc-text-field-character-counter"},ht={ROOT_SELECTOR:"."+dt.ROOT},pt=function(t){function e(n){return t.call(this,P(P({},e.defaultAdapter),n))||this}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return dt},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return ht},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{setContent:function(){}}},enumerable:!1,configurable:!0}),e.prototype.setCounterValue=function(t,e){t=Math.min(t,e),this.adapter.setContent(t+" / "+e)},e}(V); +var ft=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},Object.defineProperty(e.prototype,"foundationForTextField",{get:function(){return this.foundation},enumerable:!1,configurable:!0}),e.prototype.getDefaultFoundation=function(){var t=this;return new pt({setContent:function(e){t.root.textContent=e}})},e}(U),mt={ARIA_CONTROLS:"aria-controls",ARIA_DESCRIBEDBY:"aria-describedby",INPUT_SELECTOR:".mdc-text-field__input",LABEL_SELECTOR:".mdc-floating-label",LEADING_ICON_SELECTOR:".mdc-text-field__icon--leading",LINE_RIPPLE_SELECTOR:".mdc-line-ripple",OUTLINE_SELECTOR:".mdc-notched-outline",PREFIX_SELECTOR:".mdc-text-field__affix--prefix",SUFFIX_SELECTOR:".mdc-text-field__affix--suffix",TRAILING_ICON_SELECTOR:".mdc-text-field__icon--trailing"},Et={DISABLED:"mdc-text-field--disabled",FOCUSED:"mdc-text-field--focused",HELPER_LINE:"mdc-text-field-helper-line",INVALID:"mdc-text-field--invalid",LABEL_FLOATING:"mdc-text-field--label-floating",NO_LABEL:"mdc-text-field--no-label",OUTLINED:"mdc-text-field--outlined",ROOT:"mdc-text-field",TEXTAREA:"mdc-text-field--textarea",WITH_LEADING_ICON:"mdc-text-field--with-leading-icon",WITH_TRAILING_ICON:"mdc-text-field--with-trailing-icon",WITH_INTERNAL_COUNTER:"mdc-text-field--with-internal-counter"},gt={LABEL_SCALE:.75},Tt=["pattern","min","max","required","step","minlength","maxlength"],yt=["color","date","datetime-local","month","range","time","week"],At=["mousedown","touchstart"],vt=["click","keydown"],Ct=function(t){function e(n,i){void 0===i&&(i={});var r=t.call(this,P(P({},e.defaultAdapter),n))||this;return r.isFocused=!1,r.receivedUserInput=!1,r.valid=!0,r.useNativeValidation=!0,r.validateOnValueChange=!0,r.helperText=i.helperText,r.characterCounter=i.characterCounter,r.leadingIcon=i.leadingIcon,r.trailingIcon=i.trailingIcon,r.inputFocusHandler=function(){r.activateFocus()},r.inputBlurHandler=function(){r.deactivateFocus()},r.inputInputHandler=function(){r.handleInput()},r.setPointerXOffset=function(t){r.setTransformOrigin(t)},r.textFieldInteractionHandler=function(){r.handleTextFieldInteraction()},r.validationAttributeChangeHandler=function(t){r.handleValidationAttributeChange(t)},r}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return Et},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return mt},enumerable:!1,configurable:!0}),Object.defineProperty(e,"numbers",{get:function(){return gt},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"shouldAlwaysFloat",{get:function(){var t=this.getNativeInput().type;return yt.indexOf(t)>=0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"shouldFloat",{get:function(){return this.shouldAlwaysFloat||this.isFocused||!!this.getValue()||this.isBadInput()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"shouldShake",{get:function(){return!this.isFocused&&!this.isValid()&&!!this.getValue()},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},removeClass:function(){},hasClass:function(){return!0},setInputAttr:function(){},removeInputAttr:function(){},registerTextFieldInteractionHandler:function(){},deregisterTextFieldInteractionHandler:function(){},registerInputInteractionHandler:function(){},deregisterInputInteractionHandler:function(){},registerValidationAttributeChangeHandler:function(){return new MutationObserver((function(){}))},deregisterValidationAttributeChangeHandler:function(){},getNativeInput:function(){return null},isFocused:function(){return!1},activateLineRipple:function(){},deactivateLineRipple:function(){},setLineRippleTransformOrigin:function(){},shakeLabel:function(){},floatLabel:function(){},setLabelRequired:function(){},hasLabel:function(){return!1},getLabelWidth:function(){return 0},hasOutline:function(){return!1},notchOutline:function(){},closeOutline:function(){}}},enumerable:!1,configurable:!0}),e.prototype.init=function(){var t,e,n,i;this.adapter.hasLabel()&&this.getNativeInput().required&&this.adapter.setLabelRequired(!0),this.adapter.isFocused()?this.inputFocusHandler():this.adapter.hasLabel()&&this.shouldFloat&&(this.notchOutline(!0),this.adapter.floatLabel(!0),this.styleFloating(!0)),this.adapter.registerInputInteractionHandler("focus",this.inputFocusHandler),this.adapter.registerInputInteractionHandler("blur",this.inputBlurHandler),this.adapter.registerInputInteractionHandler("input",this.inputInputHandler);try{for(var r=F(At),o=r.next();!o.done;o=r.next()){var a=o.value;this.adapter.registerInputInteractionHandler(a,this.setPointerXOffset)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}try{for(var s=F(vt),u=s.next();!u.done;u=s.next()){a=u.value;this.adapter.registerTextFieldInteractionHandler(a,this.textFieldInteractionHandler)}}catch(t){n={error:t}}finally{try{u&&!u.done&&(i=s.return)&&i.call(s)}finally{if(n)throw n.error}}this.validationObserver=this.adapter.registerValidationAttributeChangeHandler(this.validationAttributeChangeHandler),this.setcharacterCounter(this.getValue().length)},e.prototype.destroy=function(){var t,e,n,i;this.adapter.deregisterInputInteractionHandler("focus",this.inputFocusHandler),this.adapter.deregisterInputInteractionHandler("blur",this.inputBlurHandler),this.adapter.deregisterInputInteractionHandler("input",this.inputInputHandler);try{for(var r=F(At),o=r.next();!o.done;o=r.next()){var a=o.value;this.adapter.deregisterInputInteractionHandler(a,this.setPointerXOffset)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}try{for(var s=F(vt),u=s.next();!u.done;u=s.next()){a=u.value;this.adapter.deregisterTextFieldInteractionHandler(a,this.textFieldInteractionHandler)}}catch(t){n={error:t}}finally{try{u&&!u.done&&(i=s.return)&&i.call(s)}finally{if(n)throw n.error}}this.adapter.deregisterValidationAttributeChangeHandler(this.validationObserver)},e.prototype.handleTextFieldInteraction=function(){var t=this.adapter.getNativeInput();t&&t.disabled||(this.receivedUserInput=!0)},e.prototype.handleValidationAttributeChange=function(t){var e=this;t.some((function(t){return Tt.indexOf(t)>-1&&(e.styleValidity(!0),e.adapter.setLabelRequired(e.getNativeInput().required),!0)})),t.indexOf("maxlength")>-1&&this.setcharacterCounter(this.getValue().length)},e.prototype.notchOutline=function(t){if(this.adapter.hasOutline()&&this.adapter.hasLabel())if(t){var e=this.adapter.getLabelWidth()*gt.LABEL_SCALE;this.adapter.notchOutline(e)}else this.adapter.closeOutline()},e.prototype.activateFocus=function(){this.isFocused=!0,this.styleFocused(this.isFocused),this.adapter.activateLineRipple(),this.adapter.hasLabel()&&(this.notchOutline(this.shouldFloat),this.adapter.floatLabel(this.shouldFloat),this.styleFloating(this.shouldFloat),this.adapter.shakeLabel(this.shouldShake)),!this.helperText||!this.helperText.isPersistent()&&this.helperText.isValidation()&&this.valid||this.helperText.showToScreenReader()},e.prototype.setTransformOrigin=function(t){if(!this.isDisabled()&&!this.adapter.hasOutline()){var e=t.touches,n=e?e[0]:t,i=n.target.getBoundingClientRect(),r=n.clientX-i.left;this.adapter.setLineRippleTransformOrigin(r)}},e.prototype.handleInput=function(){this.autoCompleteFocus(),this.setcharacterCounter(this.getValue().length)},e.prototype.autoCompleteFocus=function(){this.receivedUserInput||this.activateFocus()},e.prototype.deactivateFocus=function(){this.isFocused=!1,this.adapter.deactivateLineRipple();var t=this.isValid();this.styleValidity(t),this.styleFocused(this.isFocused),this.adapter.hasLabel()&&(this.notchOutline(this.shouldFloat),this.adapter.floatLabel(this.shouldFloat),this.styleFloating(this.shouldFloat),this.adapter.shakeLabel(this.shouldShake)),this.shouldFloat||(this.receivedUserInput=!1)},e.prototype.getValue=function(){return this.getNativeInput().value},e.prototype.setValue=function(t){if(this.getValue()!==t&&(this.getNativeInput().value=t),this.setcharacterCounter(t.length),this.validateOnValueChange){var e=this.isValid();this.styleValidity(e)}this.adapter.hasLabel()&&(this.notchOutline(this.shouldFloat),this.adapter.floatLabel(this.shouldFloat),this.styleFloating(this.shouldFloat),this.validateOnValueChange&&this.adapter.shakeLabel(this.shouldShake))},e.prototype.isValid=function(){return this.useNativeValidation?this.isNativeInputValid():this.valid},e.prototype.setValid=function(t){this.valid=t,this.styleValidity(t);var e=!t&&!this.isFocused&&!!this.getValue();this.adapter.hasLabel()&&this.adapter.shakeLabel(e)},e.prototype.setValidateOnValueChange=function(t){this.validateOnValueChange=t},e.prototype.getValidateOnValueChange=function(){return this.validateOnValueChange},e.prototype.setUseNativeValidation=function(t){this.useNativeValidation=t},e.prototype.isDisabled=function(){return this.getNativeInput().disabled},e.prototype.setDisabled=function(t){this.getNativeInput().disabled=t,this.styleDisabled(t)},e.prototype.setHelperTextContent=function(t){this.helperText&&this.helperText.setContent(t)},e.prototype.setLeadingIconAriaLabel=function(t){this.leadingIcon&&this.leadingIcon.setAriaLabel(t)},e.prototype.setLeadingIconContent=function(t){this.leadingIcon&&this.leadingIcon.setContent(t)},e.prototype.setTrailingIconAriaLabel=function(t){this.trailingIcon&&this.trailingIcon.setAriaLabel(t)},e.prototype.setTrailingIconContent=function(t){this.trailingIcon&&this.trailingIcon.setContent(t)},e.prototype.setcharacterCounter=function(t){if(this.characterCounter){var e=this.getNativeInput().maxLength;if(-1===e)throw new Error("MDCTextFieldFoundation: Expected maxlength html property on text input or textarea.");this.characterCounter.setCounterValue(t,e)}},e.prototype.isBadInput=function(){return this.getNativeInput().validity.badInput||!1},e.prototype.isNativeInputValid=function(){return this.getNativeInput().validity.valid},e.prototype.styleValidity=function(t){var n=e.cssClasses.INVALID;if(t?this.adapter.removeClass(n):this.adapter.addClass(n),this.helperText){if(this.helperText.setValidity(t),!this.helperText.isValidation())return;var i=this.helperText.isVisible(),r=this.helperText.getId();i&&r?this.adapter.setInputAttr(mt.ARIA_DESCRIBEDBY,r):this.adapter.removeInputAttr(mt.ARIA_DESCRIBEDBY)}},e.prototype.styleFocused=function(t){var n=e.cssClasses.FOCUSED;t?this.adapter.addClass(n):this.adapter.removeClass(n)},e.prototype.styleDisabled=function(t){var n=e.cssClasses,i=n.DISABLED,r=n.INVALID;t?(this.adapter.addClass(i),this.adapter.removeClass(r)):this.adapter.removeClass(i),this.leadingIcon&&this.leadingIcon.setDisabled(t),this.trailingIcon&&this.trailingIcon.setDisabled(t)},e.prototype.styleFloating=function(t){var n=e.cssClasses.LABEL_FLOATING;t?this.adapter.addClass(n):this.adapter.removeClass(n)},e.prototype.getNativeInput=function(){return(this.adapter?this.adapter.getNativeInput():null)||{disabled:!1,maxLength:-1,required:!1,type:"input",validity:{badInput:!1,valid:!0},value:""}},e}(V); +var It={HELPER_TEXT_PERSISTENT:"mdc-text-field-helper-text--persistent",HELPER_TEXT_VALIDATION_MSG:"mdc-text-field-helper-text--validation-msg",ROOT:"mdc-text-field-helper-text"},St={ARIA_HIDDEN:"aria-hidden",ROLE:"role",ROOT_SELECTOR:"."+It.ROOT},bt=function(t){function e(n){return t.call(this,P(P({},e.defaultAdapter),n))||this}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return It},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return St},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},removeClass:function(){},hasClass:function(){return!1},getAttr:function(){return null},setAttr:function(){},removeAttr:function(){},setContent:function(){}}},enumerable:!1,configurable:!0}),e.prototype.getId=function(){return this.adapter.getAttr("id")},e.prototype.isVisible=function(){return"true"!==this.adapter.getAttr(St.ARIA_HIDDEN)},e.prototype.setContent=function(t){this.adapter.setContent(t)},e.prototype.isPersistent=function(){return this.adapter.hasClass(It.HELPER_TEXT_PERSISTENT)},e.prototype.setPersistent=function(t){t?this.adapter.addClass(It.HELPER_TEXT_PERSISTENT):this.adapter.removeClass(It.HELPER_TEXT_PERSISTENT)},e.prototype.isValidation=function(){return this.adapter.hasClass(It.HELPER_TEXT_VALIDATION_MSG)},e.prototype.setValidation=function(t){t?this.adapter.addClass(It.HELPER_TEXT_VALIDATION_MSG):this.adapter.removeClass(It.HELPER_TEXT_VALIDATION_MSG)},e.prototype.showToScreenReader=function(){this.adapter.removeAttr(St.ARIA_HIDDEN)},e.prototype.setValidity=function(t){var e=this.adapter.hasClass(It.HELPER_TEXT_PERSISTENT),n=this.adapter.hasClass(It.HELPER_TEXT_VALIDATION_MSG)&&!t;n?(this.showToScreenReader(),"alert"===this.adapter.getAttr(St.ROLE)?this.refreshAlertRole():this.adapter.setAttr(St.ROLE,"alert")):this.adapter.removeAttr(St.ROLE),e||n||this.hide()},e.prototype.hide=function(){this.adapter.setAttr(St.ARIA_HIDDEN,"true")},e.prototype.refreshAlertRole=function(){var t=this;this.adapter.removeAttr(St.ROLE),requestAnimationFrame((function(){t.adapter.setAttr(St.ROLE,"alert")}))},e}(V); +var _t=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},Object.defineProperty(e.prototype,"foundationForTextField",{get:function(){return this.foundation},enumerable:!1,configurable:!0}),e.prototype.getDefaultFoundation=function(){var t=this;return new bt({addClass:function(e){return t.root.classList.add(e)},removeClass:function(e){return t.root.classList.remove(e)},hasClass:function(e){return t.root.classList.contains(e)},getAttr:function(e){return t.root.getAttribute(e)},setAttr:function(e,n){return t.root.setAttribute(e,n)},removeAttr:function(e){return t.root.removeAttribute(e)},setContent:function(e){t.root.textContent=e}})},e}(U),Ot={ICON_EVENT:"MDCTextField:icon",ICON_ROLE:"button"},Rt={ROOT:"mdc-text-field__icon"},Lt=["click","keydown"],Dt=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.savedTabIndex=null,i.interactionHandler=function(t){i.handleInteraction(t)},i}return w(e,t),Object.defineProperty(e,"strings",{get:function(){return Ot},enumerable:!1,configurable:!0}),Object.defineProperty(e,"cssClasses",{get:function(){return Rt},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{getAttr:function(){return null},setAttr:function(){},removeAttr:function(){},setContent:function(){},registerInteractionHandler:function(){},deregisterInteractionHandler:function(){},notifyIconAction:function(){}}},enumerable:!1,configurable:!0}),e.prototype.init=function(){var t,e;this.savedTabIndex=this.adapter.getAttr("tabindex");try{for(var n=F(Lt),i=n.next();!i.done;i=n.next()){var r=i.value;this.adapter.registerInteractionHandler(r,this.interactionHandler)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.destroy=function(){var t,e;try{for(var n=F(Lt),i=n.next();!i.done;i=n.next()){var r=i.value;this.adapter.deregisterInteractionHandler(r,this.interactionHandler)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.setDisabled=function(t){this.savedTabIndex&&(t?(this.adapter.setAttr("tabindex","-1"),this.adapter.removeAttr("role")):(this.adapter.setAttr("tabindex",this.savedTabIndex),this.adapter.setAttr("role",Ot.ICON_ROLE)))},e.prototype.setAriaLabel=function(t){this.adapter.setAttr("aria-label",t)},e.prototype.setContent=function(t){this.adapter.setContent(t)},e.prototype.handleInteraction=function(t){var e="Enter"===t.key||13===t.keyCode;("click"===t.type||e)&&(t.preventDefault(),this.adapter.notifyIconAction())},e}(V); +var xt,Nt,wt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},Object.defineProperty(e.prototype,"foundationForTextField",{get:function(){return this.foundation},enumerable:!1,configurable:!0}),e.prototype.getDefaultFoundation=function(){var t=this;return new Dt({getAttr:function(e){return t.root.getAttribute(e)},setAttr:function(e,n){return t.root.setAttribute(e,n)},removeAttr:function(e){return t.root.removeAttribute(e)},setContent:function(e){t.root.textContent=e},registerInteractionHandler:function(e,n){return t.listen(e,n)},deregisterInteractionHandler:function(e,n){return t.unlisten(e,n)},notifyIconAction:function(){return t.emit(Dt.strings.ICON_EVENT,{},!0)}})},e}(U),Pt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.initialize=function(t,e,n,i,r,o,a){void 0===t&&(t=function(t,e){return new lt(t,e)}),void 0===e&&(e=function(t){return new Q(t)}),void 0===n&&(n=function(t){return new _t(t)}),void 0===i&&(i=function(t){return new ft(t)}),void 0===r&&(r=function(t){return new wt(t)}),void 0===o&&(o=function(t){return new X(t)}),void 0===a&&(a=function(t){return new nt(t)}),this.input=this.root.querySelector(mt.INPUT_SELECTOR);var s=this.root.querySelector(mt.LABEL_SELECTOR);this.label=s?o(s):null;var u=this.root.querySelector(mt.LINE_RIPPLE_SELECTOR);this.lineRipple=u?e(u):null;var c=this.root.querySelector(mt.OUTLINE_SELECTOR);this.outline=c?a(c):null;var l=bt.strings,d=this.root.nextElementSibling,h=d&&d.classList.contains(Et.HELPER_LINE),p=h&&d&&d.querySelector(l.ROOT_SELECTOR);this.helperText=p?n(p):null;var f=pt.strings,m=this.root.querySelector(f.ROOT_SELECTOR);!m&&h&&d&&(m=d.querySelector(f.ROOT_SELECTOR)),this.characterCounter=m?i(m):null;var E=this.root.querySelector(mt.LEADING_ICON_SELECTOR);this.leadingIcon=E?r(E):null;var g=this.root.querySelector(mt.TRAILING_ICON_SELECTOR);this.trailingIcon=g?r(g):null,this.prefix=this.root.querySelector(mt.PREFIX_SELECTOR),this.suffix=this.root.querySelector(mt.SUFFIX_SELECTOR),this.ripple=this.createRipple(t)},e.prototype.destroy=function(){this.ripple&&this.ripple.destroy(),this.lineRipple&&this.lineRipple.destroy(),this.helperText&&this.helperText.destroy(),this.characterCounter&&this.characterCounter.destroy(),this.leadingIcon&&this.leadingIcon.destroy(),this.trailingIcon&&this.trailingIcon.destroy(),this.label&&this.label.destroy(),this.outline&&this.outline.destroy(),t.prototype.destroy.call(this)},e.prototype.initialSyncWithDOM=function(){this.disabled=this.input.disabled},Object.defineProperty(e.prototype,"value",{get:function(){return this.foundation.getValue()},set:function(t){this.foundation.setValue(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this.foundation.isDisabled()},set:function(t){this.foundation.setDisabled(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return this.foundation.isValid()},set:function(t){this.foundation.setValid(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"required",{get:function(){return this.input.required},set:function(t){this.input.required=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"pattern",{get:function(){return this.input.pattern},set:function(t){this.input.pattern=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"minLength",{get:function(){return this.input.minLength},set:function(t){this.input.minLength=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"maxLength",{get:function(){return this.input.maxLength},set:function(t){t<0?this.input.removeAttribute("maxLength"):this.input.maxLength=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"min",{get:function(){return this.input.min},set:function(t){this.input.min=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"max",{get:function(){return this.input.max},set:function(t){this.input.max=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"step",{get:function(){return this.input.step},set:function(t){this.input.step=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"helperTextContent",{set:function(t){this.foundation.setHelperTextContent(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"leadingIconAriaLabel",{set:function(t){this.foundation.setLeadingIconAriaLabel(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"leadingIconContent",{set:function(t){this.foundation.setLeadingIconContent(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"trailingIconAriaLabel",{set:function(t){this.foundation.setTrailingIconAriaLabel(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"trailingIconContent",{set:function(t){this.foundation.setTrailingIconContent(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"useNativeValidation",{set:function(t){this.foundation.setUseNativeValidation(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"prefixText",{get:function(){return this.prefix?this.prefix.textContent:null},set:function(t){this.prefix&&(this.prefix.textContent=t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"suffixText",{get:function(){return this.suffix?this.suffix.textContent:null},set:function(t){this.suffix&&(this.suffix.textContent=t)},enumerable:!1,configurable:!0}),e.prototype.focus=function(){this.input.focus()},e.prototype.layout=function(){var t=this.foundation.shouldFloat;this.foundation.notchOutline(t)},e.prototype.getDefaultFoundation=function(){var t=P(P(P(P(P({},this.getRootAdapterMethods()),this.getInputAdapterMethods()),this.getLabelAdapterMethods()),this.getLineRippleAdapterMethods()),this.getOutlineAdapterMethods());return new Ct(t,this.getFoundationMap())},e.prototype.getRootAdapterMethods=function(){var t=this;return{addClass:function(e){return t.root.classList.add(e)},removeClass:function(e){return t.root.classList.remove(e)},hasClass:function(e){return t.root.classList.contains(e)},registerTextFieldInteractionHandler:function(e,n){t.listen(e,n)},deregisterTextFieldInteractionHandler:function(e,n){t.unlisten(e,n)},registerValidationAttributeChangeHandler:function(e){var n=new MutationObserver((function(t){return e(function(t){return t.map((function(t){return t.attributeName})).filter((function(t){return t}))}(t))}));return n.observe(t.input,{attributes:!0}),n},deregisterValidationAttributeChangeHandler:function(t){t.disconnect()}}},e.prototype.getInputAdapterMethods=function(){var t=this;return{getNativeInput:function(){return t.input},setInputAttr:function(e,n){t.input.setAttribute(e,n)},removeInputAttr:function(e){t.input.removeAttribute(e)},isFocused:function(){return document.activeElement===t.input},registerInputInteractionHandler:function(e,n){t.input.addEventListener(e,n,W())},deregisterInputInteractionHandler:function(e,n){t.input.removeEventListener(e,n,W())}}},e.prototype.getLabelAdapterMethods=function(){var t=this;return{floatLabel:function(e){t.label&&t.label.float(e)},getLabelWidth:function(){return t.label?t.label.getWidth():0},hasLabel:function(){return Boolean(t.label)},shakeLabel:function(e){t.label&&t.label.shake(e)},setLabelRequired:function(e){t.label&&t.label.setRequired(e)}}},e.prototype.getLineRippleAdapterMethods=function(){var t=this;return{activateLineRipple:function(){t.lineRipple&&t.lineRipple.activate()},deactivateLineRipple:function(){t.lineRipple&&t.lineRipple.deactivate()},setLineRippleTransformOrigin:function(e){t.lineRipple&&t.lineRipple.setRippleCenter(e)}}},e.prototype.getOutlineAdapterMethods=function(){var t=this;return{closeOutline:function(){t.outline&&t.outline.closeNotch()},hasOutline:function(){return Boolean(t.outline)},notchOutline:function(e){t.outline&&t.outline.notch(e)}}},e.prototype.getFoundationMap=function(){return{characterCounter:this.characterCounter?this.characterCounter.foundationForTextField:void 0,helperText:this.helperText?this.helperText.foundationForTextField:void 0,leadingIcon:this.leadingIcon?this.leadingIcon.foundationForTextField:void 0,trailingIcon:this.trailingIcon?this.trailingIcon.foundationForTextField:void 0}},e.prototype.createRipple=function(t){var e=this,n=this.root.classList.contains(Et.TEXTAREA),i=this.root.classList.contains(Et.OUTLINED);if(n||i)return null;var r=P(P({},lt.createAdapter(this)),{isSurfaceActive:function(){return G(e.input,":active")},registerInteractionHandler:function(t,n){e.input.addEventListener(t,n,W())},deregisterInteractionHandler:function(t,n){e.input.removeEventListener(t,n,W())}});return t(this.root,new ct(r))},e}(U),Mt={LIST_ITEM_ACTIVATED_CLASS:"mdc-list-item--activated",LIST_ITEM_CLASS:"mdc-list-item",LIST_ITEM_DISABLED_CLASS:"mdc-list-item--disabled",LIST_ITEM_SELECTED_CLASS:"mdc-list-item--selected",LIST_ITEM_TEXT_CLASS:"mdc-list-item__text",LIST_ITEM_PRIMARY_TEXT_CLASS:"mdc-list-item__primary-text",ROOT:"mdc-list"},Ht=((xt={})[""+Mt.LIST_ITEM_ACTIVATED_CLASS]="mdc-list-item--activated",xt[""+Mt.LIST_ITEM_CLASS]="mdc-list-item",xt[""+Mt.LIST_ITEM_DISABLED_CLASS]="mdc-list-item--disabled",xt[""+Mt.LIST_ITEM_SELECTED_CLASS]="mdc-list-item--selected",xt[""+Mt.LIST_ITEM_PRIMARY_TEXT_CLASS]="mdc-list-item__primary-text",xt[""+Mt.ROOT]="mdc-list",xt),Ft=((Nt={})[""+Mt.LIST_ITEM_ACTIVATED_CLASS]="mdc-deprecated-list-item--activated",Nt[""+Mt.LIST_ITEM_CLASS]="mdc-deprecated-list-item",Nt[""+Mt.LIST_ITEM_DISABLED_CLASS]="mdc-deprecated-list-item--disabled",Nt[""+Mt.LIST_ITEM_SELECTED_CLASS]="mdc-deprecated-list-item--selected",Nt[""+Mt.LIST_ITEM_TEXT_CLASS]="mdc-deprecated-list-item__text",Nt[""+Mt.LIST_ITEM_PRIMARY_TEXT_CLASS]="mdc-deprecated-list-item__primary-text",Nt[""+Mt.ROOT]="mdc-deprecated-list",Nt),kt={ACTION_EVENT:"MDCList:action",SELECTION_CHANGE_EVENT:"MDCList:selectionChange",ARIA_CHECKED:"aria-checked",ARIA_CHECKED_CHECKBOX_SELECTOR:'[role="checkbox"][aria-checked="true"]',ARIA_CHECKED_RADIO_SELECTOR:'[role="radio"][aria-checked="true"]',ARIA_CURRENT:"aria-current",ARIA_DISABLED:"aria-disabled",ARIA_ORIENTATION:"aria-orientation",ARIA_ORIENTATION_HORIZONTAL:"horizontal",ARIA_ROLE_CHECKBOX_SELECTOR:'[role="checkbox"]',ARIA_SELECTED:"aria-selected",ARIA_INTERACTIVE_ROLES_SELECTOR:'[role="listbox"], [role="menu"]',ARIA_MULTI_SELECTABLE_SELECTOR:'[aria-multiselectable="true"]',CHECKBOX_RADIO_SELECTOR:'input[type="checkbox"], input[type="radio"]',CHECKBOX_SELECTOR:'input[type="checkbox"]',CHILD_ELEMENTS_TO_TOGGLE_TABINDEX:"\n ."+Mt.LIST_ITEM_CLASS+" button:not(:disabled),\n ."+Mt.LIST_ITEM_CLASS+" a,\n ."+Ft[Mt.LIST_ITEM_CLASS]+" button:not(:disabled),\n ."+Ft[Mt.LIST_ITEM_CLASS]+" a\n ",DEPRECATED_SELECTOR:".mdc-deprecated-list",FOCUSABLE_CHILD_ELEMENTS:"\n ."+Mt.LIST_ITEM_CLASS+" button:not(:disabled),\n ."+Mt.LIST_ITEM_CLASS+" a,\n ."+Mt.LIST_ITEM_CLASS+' input[type="radio"]:not(:disabled),\n .'+Mt.LIST_ITEM_CLASS+' input[type="checkbox"]:not(:disabled),\n .'+Ft[Mt.LIST_ITEM_CLASS]+" button:not(:disabled),\n ."+Ft[Mt.LIST_ITEM_CLASS]+" a,\n ."+Ft[Mt.LIST_ITEM_CLASS]+' input[type="radio"]:not(:disabled),\n .'+Ft[Mt.LIST_ITEM_CLASS]+' input[type="checkbox"]:not(:disabled)\n ',RADIO_SELECTOR:'input[type="radio"]',SELECTED_ITEM_SELECTOR:'[aria-selected="true"], [aria-current="true"]'},Bt={UNSET_INDEX:-1,TYPEAHEAD_BUFFER_CLEAR_TIMEOUT_MS:300},Vt={UNKNOWN:"Unknown",BACKSPACE:"Backspace",ENTER:"Enter",SPACEBAR:"Spacebar",PAGE_UP:"PageUp",PAGE_DOWN:"PageDown",END:"End",HOME:"Home",ARROW_LEFT:"ArrowLeft",ARROW_UP:"ArrowUp",ARROW_RIGHT:"ArrowRight",ARROW_DOWN:"ArrowDown",DELETE:"Delete",ESCAPE:"Escape",TAB:"Tab"},Ut=new Set;Ut.add(Vt.BACKSPACE),Ut.add(Vt.ENTER),Ut.add(Vt.SPACEBAR),Ut.add(Vt.PAGE_UP),Ut.add(Vt.PAGE_DOWN),Ut.add(Vt.END),Ut.add(Vt.HOME),Ut.add(Vt.ARROW_LEFT),Ut.add(Vt.ARROW_UP),Ut.add(Vt.ARROW_RIGHT),Ut.add(Vt.ARROW_DOWN),Ut.add(Vt.DELETE),Ut.add(Vt.ESCAPE),Ut.add(Vt.TAB);var Wt=8,jt=13,Gt=32,Kt=33,qt=34,Xt=35,zt=36,Yt=37,Qt=38,Zt=39,$t=40,Jt=46,te=27,ee=9,ne=new Map;ne.set(Wt,Vt.BACKSPACE),ne.set(jt,Vt.ENTER),ne.set(Gt,Vt.SPACEBAR),ne.set(Kt,Vt.PAGE_UP),ne.set(qt,Vt.PAGE_DOWN),ne.set(Xt,Vt.END),ne.set(zt,Vt.HOME),ne.set(Yt,Vt.ARROW_LEFT),ne.set(Qt,Vt.ARROW_UP),ne.set(Zt,Vt.ARROW_RIGHT),ne.set($t,Vt.ARROW_DOWN),ne.set(Jt,Vt.DELETE),ne.set(te,Vt.ESCAPE),ne.set(ee,Vt.TAB);var ie=new Set;function re(t){var e=t.key;if(Ut.has(e))return e;var n=ne.get(t.keyCode);return n||Vt.UNKNOWN}ie.add(Vt.PAGE_UP),ie.add(Vt.PAGE_DOWN),ie.add(Vt.END),ie.add(Vt.HOME),ie.add(Vt.ARROW_LEFT),ie.add(Vt.ARROW_UP),ie.add(Vt.ARROW_RIGHT),ie.add(Vt.ARROW_DOWN); +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var oe=["input","button","textarea","select"],ae=function(t){var e=t.target;if(e){var n=(""+e.tagName).toLowerCase();-1===oe.indexOf(n)&&t.preventDefault()}};function se(t,e){var n,i=t.nextChar,r=t.focusItemAtIndex,o=t.sortedIndexByFirstChar,a=t.focusedItemIndex,s=t.skipFocus,u=t.isItemAtIndexDisabled;return clearTimeout(e.bufferClearTimeout),e.bufferClearTimeout=setTimeout((function(){ce(e)}),Bt.TYPEAHEAD_BUFFER_CLEAR_TIMEOUT_MS),e.typeaheadBuffer=e.typeaheadBuffer+i,n=1===e.typeaheadBuffer.length?function(t,e,n,i){var r=i.typeaheadBuffer[0],o=t.get(r);if(!o)return-1;if(r===i.currentFirstChar&&o[i.sortedIndexCursor].index===e){i.sortedIndexCursor=(i.sortedIndexCursor+1)%o.length;var a=o[i.sortedIndexCursor].index;if(!n(a))return a}i.currentFirstChar=r;var s,u=-1;for(s=0;se&&!n(o[s].index)){u=s;break}if(-1!==u)return i.sortedIndexCursor=u,o[i.sortedIndexCursor].index;return-1}(o,a,u,e):function(t,e,n){var i=n.typeaheadBuffer[0],r=t.get(i);if(!r)return-1;var o=r[n.sortedIndexCursor];if(0===o.text.lastIndexOf(n.typeaheadBuffer,0)&&!e(o.index))return o.index;var a=(n.sortedIndexCursor+1)%r.length,s=-1;for(;a!==n.sortedIndexCursor;){var u=r[a],c=0===u.text.lastIndexOf(n.typeaheadBuffer,0),l=!e(u.index);if(c&&l){s=a;break}a=(a+1)%r.length}if(-1!==s)return n.sortedIndexCursor=s,r[n.sortedIndexCursor].index;return-1}(o,u,e),-1===n||s||r(n),n}function ue(t){return t.typeaheadBuffer.length>0}function ce(t){t.typeaheadBuffer=""}function le(t,e){var n=t.event,i=t.isTargetListItem,r=t.focusedItemIndex,o=t.focusItemAtIndex,a=t.sortedIndexByFirstChar,s=t.isItemAtIndexDisabled,u="ArrowLeft"===re(n),c="ArrowUp"===re(n),l="ArrowRight"===re(n),d="ArrowDown"===re(n),h="Home"===re(n),p="End"===re(n),f="Enter"===re(n),m="Spacebar"===re(n);return n.altKey||n.ctrlKey||n.metaKey||u||c||l||d||h||p||f?-1:m||1!==n.key.length?m?(i&&ae(n),i&&ue(e)?se({focusItemAtIndex:o,focusedItemIndex:r,nextChar:" ",sortedIndexByFirstChar:a,skipFocus:!1,isItemAtIndexDisabled:s},e):-1):-1:(ae(n),se({focusItemAtIndex:o,focusedItemIndex:r,nextChar:n.key.toLowerCase(),sortedIndexByFirstChar:a,skipFocus:!1,isItemAtIndexDisabled:s},e))}var de=["Alt","Control","Meta","Shift"];function he(t){var e=new Set(t?de.filter((function(e){return t.getModifierState(e)})):[]);return function(t){return t.every((function(t){return e.has(t)}))&&t.length===e.size}}var pe=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.wrapFocus=!1,i.isVertical=!0,i.isSingleSelectionList=!1,i.areDisabledItemsFocusable=!0,i.selectedIndex=Bt.UNSET_INDEX,i.focusedItemIndex=Bt.UNSET_INDEX,i.useActivatedClass=!1,i.useSelectedAttr=!1,i.ariaCurrentAttrValue=null,i.isCheckboxList=!1,i.isRadioList=!1,i.lastSelectedIndex=null,i.hasTypeahead=!1,i.typeaheadState={bufferClearTimeout:0,currentFirstChar:"",sortedIndexCursor:0,typeaheadBuffer:""},i.sortedIndexByFirstChar=new Map,i}return w(e,t),Object.defineProperty(e,"strings",{get:function(){return kt},enumerable:!1,configurable:!0}),Object.defineProperty(e,"cssClasses",{get:function(){return Mt},enumerable:!1,configurable:!0}),Object.defineProperty(e,"numbers",{get:function(){return Bt},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClassForElementIndex:function(){},focusItemAtIndex:function(){},getAttributeForElementIndex:function(){return null},getFocusedElementIndex:function(){return 0},getListItemCount:function(){return 0},hasCheckboxAtIndex:function(){return!1},hasRadioAtIndex:function(){return!1},isCheckboxCheckedAtIndex:function(){return!1},isFocusInsideList:function(){return!1},isRootFocused:function(){return!1},listItemAtIndexHasClass:function(){return!1},notifyAction:function(){},notifySelectionChange:function(){},removeClassForElementIndex:function(){},setAttributeForElementIndex:function(){},setCheckedCheckboxOrRadioAtIndex:function(){},setTabIndexForListItemChildren:function(){},getPrimaryTextAtIndex:function(){return""}}},enumerable:!1,configurable:!0}),e.prototype.layout=function(){0!==this.adapter.getListItemCount()&&(this.adapter.hasCheckboxAtIndex(0)?this.isCheckboxList=!0:this.adapter.hasRadioAtIndex(0)?this.isRadioList=!0:this.maybeInitializeSingleSelection(),this.hasTypeahead&&(this.sortedIndexByFirstChar=this.typeaheadInitSortedIndex()))},e.prototype.getFocusedItemIndex=function(){return this.focusedItemIndex},e.prototype.setWrapFocus=function(t){this.wrapFocus=t},e.prototype.setVerticalOrientation=function(t){this.isVertical=t},e.prototype.setSingleSelection=function(t){this.isSingleSelectionList=t,t&&(this.maybeInitializeSingleSelection(),this.selectedIndex=this.getSelectedIndexFromDOM())},e.prototype.setDisabledItemsFocusable=function(t){this.areDisabledItemsFocusable=t},e.prototype.maybeInitializeSingleSelection=function(){var t=this.getSelectedIndexFromDOM();t!==Bt.UNSET_INDEX&&(this.adapter.listItemAtIndexHasClass(t,Mt.LIST_ITEM_ACTIVATED_CLASS)&&this.setUseActivatedClass(!0),this.isSingleSelectionList=!0,this.selectedIndex=t)},e.prototype.getSelectedIndexFromDOM=function(){for(var t=Bt.UNSET_INDEX,e=this.adapter.getListItemCount(),n=0;n=0&&(this.focusedItemIndex=t,this.adapter.setAttributeForElementIndex(t,"tabindex","0"),this.adapter.setTabIndexForListItemChildren(t,"0"))},e.prototype.handleFocusOut=function(t){var e=this;t>=0&&(this.adapter.setAttributeForElementIndex(t,"tabindex","-1"),this.adapter.setTabIndexForListItemChildren(t,"-1")),setTimeout((function(){e.adapter.isFocusInsideList()||e.setTabindexToFirstSelectedOrFocusedItem()}),0)},e.prototype.isIndexDisabled=function(t){return this.adapter.listItemAtIndexHasClass(t,Mt.LIST_ITEM_DISABLED_CLASS)},e.prototype.handleKeydown=function(t,e,n){var i,r=this,o="ArrowLeft"===re(t),a="ArrowUp"===re(t),s="ArrowRight"===re(t),u="ArrowDown"===re(t),c="Home"===re(t),l="End"===re(t),d="Enter"===re(t),h="Spacebar"===re(t),p=this.isVertical&&u||!this.isVertical&&s,f=this.isVertical&&a||!this.isVertical&&o,m="A"===t.key||"a"===t.key,E=he(t);if(this.adapter.isRootFocused()){if((f||l)&&E([]))t.preventDefault(),this.focusLastElement();else if((p||c)&&E([]))t.preventDefault(),this.focusFirstElement();else if(f&&E(["Shift"])&&this.isCheckboxList){t.preventDefault(),-1!==(T=this.focusLastElement())&&this.setSelectedIndexOnAction(T,!1)}else if(p&&E(["Shift"])&&this.isCheckboxList){t.preventDefault(),-1!==(T=this.focusFirstElement())&&this.setSelectedIndexOnAction(T,!1)}this.hasTypeahead&&le({event:t,focusItemAtIndex:function(t){r.focusItemAtIndex(t)},focusedItemIndex:-1,isTargetListItem:e,sortedIndexByFirstChar:this.sortedIndexByFirstChar,isItemAtIndexDisabled:function(t){return r.isIndexDisabled(t)}},this.typeaheadState)}else{var g=this.adapter.getFocusedElementIndex();if(!(-1===g&&(g=n)<0)){if(p&&E([]))ae(t),this.focusNextElement(g);else if(f&&E([]))ae(t),this.focusPrevElement(g);else if(p&&E(["Shift"])&&this.isCheckboxList){ae(t),-1!==(T=this.focusNextElement(g))&&this.setSelectedIndexOnAction(T,!1)}else if(f&&E(["Shift"])&&this.isCheckboxList){var T;ae(t),-1!==(T=this.focusPrevElement(g))&&this.setSelectedIndexOnAction(T,!1)}else if(c&&E([]))ae(t),this.focusFirstElement();else if(l&&E([]))ae(t),this.focusLastElement();else if(c&&E(["Control","Shift"])&&this.isCheckboxList){if(ae(t),this.isIndexDisabled(g))return;this.focusFirstElement(),this.toggleCheckboxRange(0,g,g)}else if(l&&E(["Control","Shift"])&&this.isCheckboxList){if(ae(t),this.isIndexDisabled(g))return;this.focusLastElement(),this.toggleCheckboxRange(g,this.adapter.getListItemCount()-1,g)}else if(m&&E(["Control"])&&this.isCheckboxList)t.preventDefault(),this.checkboxListToggleAll(this.selectedIndex===Bt.UNSET_INDEX?[]:this.selectedIndex,!0);else if((d||h)&&E([])){if(e){if((y=t.target)&&"A"===y.tagName&&d)return;if(ae(t),this.isIndexDisabled(g))return;this.isTypeaheadInProgress()||(this.isSelectableList()&&this.setSelectedIndexOnAction(g,!1),this.adapter.notifyAction(g))}}else if((d||h)&&E(["Shift"])&&this.isCheckboxList){var y;if((y=t.target)&&"A"===y.tagName&&d)return;if(ae(t),this.isIndexDisabled(g))return;this.isTypeaheadInProgress()||(this.toggleCheckboxRange(null!==(i=this.lastSelectedIndex)&&void 0!==i?i:g,g,g),this.adapter.notifyAction(g))}if(this.hasTypeahead)le({event:t,focusItemAtIndex:function(t){r.focusItemAtIndex(t)},focusedItemIndex:this.focusedItemIndex,isTargetListItem:e,sortedIndexByFirstChar:this.sortedIndexByFirstChar,isItemAtIndexDisabled:function(t){return r.isIndexDisabled(t)}},this.typeaheadState)}}},e.prototype.handleClick=function(t,e,n){var i,r=he(n);t!==Bt.UNSET_INDEX&&(this.isIndexDisabled(t)||(r([])?(this.isSelectableList()&&this.setSelectedIndexOnAction(t,e),this.adapter.notifyAction(t)):this.isCheckboxList&&r(["Shift"])&&(this.toggleCheckboxRange(null!==(i=this.lastSelectedIndex)&&void 0!==i?i:t,t,t),this.adapter.notifyAction(t))))},e.prototype.focusNextElement=function(t){var e=this.adapter.getListItemCount(),n=t,i=null;do{if(++n>=e){if(!this.wrapFocus)return t;n=0}if(n===i)return-1;i=null!=i?i:n}while(!this.areDisabledItemsFocusable&&this.isIndexDisabled(n));return this.focusItemAtIndex(n),n},e.prototype.focusPrevElement=function(t){var e=this.adapter.getListItemCount(),n=t,i=null;do{if(--n<0){if(!this.wrapFocus)return t;n=e-1}if(n===i)return-1;i=null!=i?i:n}while(!this.areDisabledItemsFocusable&&this.isIndexDisabled(n));return this.focusItemAtIndex(n),n},e.prototype.focusFirstElement=function(){return this.focusNextElement(-1)},e.prototype.focusLastElement=function(){return this.focusPrevElement(this.adapter.getListItemCount())},e.prototype.focusInitialElement=function(){var t=this.getFirstSelectedOrFocusedItemIndex();return this.focusItemAtIndex(t),t},e.prototype.setEnabled=function(t,e){this.isIndexValid(t,!1)&&(e?(this.adapter.removeClassForElementIndex(t,Mt.LIST_ITEM_DISABLED_CLASS),this.adapter.setAttributeForElementIndex(t,kt.ARIA_DISABLED,"false")):(this.adapter.addClassForElementIndex(t,Mt.LIST_ITEM_DISABLED_CLASS),this.adapter.setAttributeForElementIndex(t,kt.ARIA_DISABLED,"true")))},e.prototype.setSingleSelectionAtIndex=function(t,e){if(void 0===e&&(e={}),this.selectedIndex!==t||e.forceUpdate){var n=Mt.LIST_ITEM_SELECTED_CLASS;this.useActivatedClass&&(n=Mt.LIST_ITEM_ACTIVATED_CLASS),this.selectedIndex!==Bt.UNSET_INDEX&&this.adapter.removeClassForElementIndex(this.selectedIndex,n),this.setAriaForSingleSelectionAtIndex(t),this.setTabindexAtIndex(t),t!==Bt.UNSET_INDEX&&this.adapter.addClassForElementIndex(t,n),this.selectedIndex=t,e.isUserInteraction&&!e.forceUpdate&&this.adapter.notifySelectionChange([t])}},e.prototype.setAriaForSingleSelectionAtIndex=function(t){this.selectedIndex===Bt.UNSET_INDEX&&(this.ariaCurrentAttrValue=this.adapter.getAttributeForElementIndex(t,kt.ARIA_CURRENT));var e=null!==this.ariaCurrentAttrValue,n=e?kt.ARIA_CURRENT:kt.ARIA_SELECTED;if(this.selectedIndex!==Bt.UNSET_INDEX&&this.adapter.setAttributeForElementIndex(this.selectedIndex,n,"false"),t!==Bt.UNSET_INDEX){var i=e?this.ariaCurrentAttrValue:"true";this.adapter.setAttributeForElementIndex(t,n,i)}},e.prototype.getSelectionAttribute=function(){return this.useSelectedAttr?kt.ARIA_SELECTED:kt.ARIA_CHECKED},e.prototype.setRadioAtIndex=function(t,e){void 0===e&&(e={});var n=this.getSelectionAttribute();this.adapter.setCheckedCheckboxOrRadioAtIndex(t,!0),(this.selectedIndex!==t||e.forceUpdate)&&(this.selectedIndex!==Bt.UNSET_INDEX&&this.adapter.setAttributeForElementIndex(this.selectedIndex,n,"false"),this.adapter.setAttributeForElementIndex(t,n,"true"),this.selectedIndex=t,e.isUserInteraction&&!e.forceUpdate&&this.adapter.notifySelectionChange([t]))},e.prototype.setCheckboxAtIndex=function(t,e){void 0===e&&(e={});for(var n=this.selectedIndex,i=e.isUserInteraction?new Set(n===Bt.UNSET_INDEX?[]:n):null,r=this.getSelectionAttribute(),o=[],a=0;a=0;u!==s&&o.push(a),this.adapter.setCheckedCheckboxOrRadioAtIndex(a,u),this.adapter.setAttributeForElementIndex(a,r,u?"true":"false")}this.selectedIndex=t,e.isUserInteraction&&o.length&&this.adapter.notifySelectionChange(o)},e.prototype.toggleCheckboxRange=function(t,e,n){this.lastSelectedIndex=n;for(var i=new Set(this.selectedIndex===Bt.UNSET_INDEX?[]:this.selectedIndex),r=!(null==i?void 0:i.has(n)),o=k([t,e].sort(),2),a=o[0],s=o[1],u=this.getSelectionAttribute(),c=[],l=a;l<=s;l++){if(!this.isIndexDisabled(l))r!==i.has(l)&&(c.push(l),this.adapter.setCheckedCheckboxOrRadioAtIndex(l,r),this.adapter.setAttributeForElementIndex(l,u,""+r),r?i.add(l):i.delete(l))}c.length&&(this.selectedIndex=B([],k(i)),this.adapter.notifySelectionChange(c))},e.prototype.setTabindexAtIndex=function(t){this.focusedItemIndex===Bt.UNSET_INDEX&&0!==t?this.adapter.setAttributeForElementIndex(0,"tabindex","-1"):this.focusedItemIndex>=0&&this.focusedItemIndex!==t&&this.adapter.setAttributeForElementIndex(this.focusedItemIndex,"tabindex","-1"),this.selectedIndex instanceof Array||this.selectedIndex===t||this.adapter.setAttributeForElementIndex(this.selectedIndex,"tabindex","-1"),t!==Bt.UNSET_INDEX&&this.adapter.setAttributeForElementIndex(t,"tabindex","0")},e.prototype.isSelectableList=function(){return this.isSingleSelectionList||this.isCheckboxList||this.isRadioList},e.prototype.setTabindexToFirstSelectedOrFocusedItem=function(){var t=this.getFirstSelectedOrFocusedItemIndex();this.setTabindexAtIndex(t)},e.prototype.getFirstSelectedOrFocusedItemIndex=function(){return this.isSelectableList()?"number"==typeof this.selectedIndex&&this.selectedIndex!==Bt.UNSET_INDEX?this.selectedIndex:this.selectedIndex instanceof Array&&this.selectedIndex.length>0?this.selectedIndex.reduce((function(t,e){return Math.min(t,e)})):0:Math.max(this.focusedItemIndex,0)},e.prototype.isIndexValid=function(t,e){var n=this;if(void 0===e&&(e=!0),t instanceof Array){if(!this.isCheckboxList&&e)throw new Error("MDCListFoundation: Array of index is only supported for checkbox based list");return 0===t.length||t.some((function(t){return n.isIndexInRange(t)}))}if("number"==typeof t){if(this.isCheckboxList&&e)throw new Error("MDCListFoundation: Expected array of index for checkbox based list but got number: "+t);return this.isIndexInRange(t)||this.isSingleSelectionList&&t===Bt.UNSET_INDEX}return!1},e.prototype.isIndexInRange=function(t){var e=this.adapter.getListItemCount();return t>=0&&t-1)&&i.push(r);this.setCheckboxAtIndex(i,{isUserInteraction:e})}},e.prototype.typeaheadMatchItem=function(t,e,n){var i=this;return void 0===n&&(n=!1),se({focusItemAtIndex:function(t){i.focusItemAtIndex(t)},focusedItemIndex:e||this.focusedItemIndex,nextChar:t,sortedIndexByFirstChar:this.sortedIndexByFirstChar,skipFocus:n,isItemAtIndexDisabled:function(t){return i.isIndexDisabled(t)}},this.typeaheadState)},e.prototype.typeaheadInitSortedIndex=function(){return function(t,e){for(var n=new Map,i=0;i0&&(this.selectedIndex=e[0])}else{var n=this.root.querySelectorAll(kt.ARIA_ROLE_CHECKBOX_SELECTOR),i=this.root.querySelector(kt.ARIA_CHECKED_RADIO_SELECTOR);if(n.length){var r=this.root.querySelectorAll(kt.ARIA_CHECKED_CHECKBOX_SELECTOR);this.selectedIndex=Array.from(r,(function(e){return t.listElements.indexOf(e)}))}else i&&(this.selectedIndex=this.listElements.indexOf(i))}},e.prototype.setEnabled=function(t,e){this.foundation.setEnabled(t,e)},e.prototype.typeaheadMatchItem=function(t,e){return this.foundation.typeaheadMatchItem(t,e,!0)},e.prototype.getDefaultFoundation=function(){var t=this;return new pe({addClassForElementIndex:function(e,n){var i=t.listElements[e];i&&i.classList.add(t.classNameMap[n])},focusItemAtIndex:function(e){var n=t.listElements[e];n&&n.focus()},getAttributeForElementIndex:function(e,n){return t.listElements[e].getAttribute(n)},getFocusedElementIndex:function(){return t.listElements.indexOf(document.activeElement)},getListItemCount:function(){return t.listElements.length},getPrimaryTextAtIndex:function(e){return t.getPrimaryText(t.listElements[e])},hasCheckboxAtIndex:function(e){return!!t.listElements[e].querySelector(kt.CHECKBOX_SELECTOR)},hasRadioAtIndex:function(e){return!!t.listElements[e].querySelector(kt.RADIO_SELECTOR)},isCheckboxCheckedAtIndex:function(e){return t.listElements[e].querySelector(kt.CHECKBOX_SELECTOR).checked},isFocusInsideList:function(){return t.root!==document.activeElement&&t.root.contains(document.activeElement)},isRootFocused:function(){return document.activeElement===t.root},listItemAtIndexHasClass:function(e,n){return t.listElements[e].classList.contains(t.classNameMap[n])},notifyAction:function(e){t.emit(kt.ACTION_EVENT,{index:e},!0)},notifySelectionChange:function(e){t.emit(kt.SELECTION_CHANGE_EVENT,{changedIndices:e},!0)},removeClassForElementIndex:function(e,n){var i=t.listElements[e];i&&i.classList.remove(t.classNameMap[n])},setAttributeForElementIndex:function(e,n,i){var r=t.listElements[e];r&&r.setAttribute(n,i)},setCheckedCheckboxOrRadioAtIndex:function(e,n){var i=t.listElements[e].querySelector(kt.CHECKBOX_RADIO_SELECTOR);i.checked=n;var r=document.createEvent("Event");r.initEvent("change",!0,!0),i.dispatchEvent(r)},setTabIndexForListItemChildren:function(e,n){var i=t.listElements[e],r=kt.CHILD_ELEMENTS_TO_TOGGLE_TABINDEX;Array.prototype.forEach.call(i.querySelectorAll(r),(function(t){t.setAttribute("tabindex",n)}))}})},e.prototype.ensureFocusable=function(){if(this.isEvolutionEnabled&&this.isInteractive&&!this.root.querySelector("."+this.classNameMap[Mt.LIST_ITEM_CLASS]+'[tabindex="0"]')){var t=this.initialFocusIndex();-1!==t&&(this.listElements[t].tabIndex=0)}},e.prototype.initialFocusIndex=function(){if(this.selectedIndex instanceof Array&&this.selectedIndex.length>0)return this.selectedIndex[0];if("number"==typeof this.selectedIndex&&this.selectedIndex!==Bt.UNSET_INDEX)return this.selectedIndex;var t=this.root.querySelector("."+this.classNameMap[Mt.LIST_ITEM_CLASS]+":not(."+this.classNameMap[Mt.LIST_ITEM_DISABLED_CLASS]+")");return null===t?-1:this.getListItemIndex(t)},e.prototype.getListItemIndex=function(t){var e=j(t,"."+this.classNameMap[Mt.LIST_ITEM_CLASS]+", ."+this.classNameMap[Mt.ROOT]);return e&&G(e,"."+this.classNameMap[Mt.LIST_ITEM_CLASS])?this.listElements.indexOf(e):-1},e.prototype.handleFocusInEvent=function(t){var e=this.getListItemIndex(t.target);this.foundation.handleFocusIn(e)},e.prototype.handleFocusOutEvent=function(t){var e=this.getListItemIndex(t.target);this.foundation.handleFocusOut(e)},e.prototype.handleKeydownEvent=function(t){var e=this.getListItemIndex(t.target),n=t.target;this.foundation.handleKeydown(t,n.classList.contains(this.classNameMap[Mt.LIST_ITEM_CLASS]),e)},e.prototype.handleClickEvent=function(t){var e=this.getListItemIndex(t.target),n=!G(t.target,kt.CHECKBOX_RADIO_SELECTOR);this.foundation.handleClick(e,n,t)},e}(U),ge={ANCHOR:"mdc-menu-surface--anchor",ANIMATING_CLOSED:"mdc-menu-surface--animating-closed",ANIMATING_OPEN:"mdc-menu-surface--animating-open",FIXED:"mdc-menu-surface--fixed",IS_OPEN_BELOW:"mdc-menu-surface--is-open-below",OPEN:"mdc-menu-surface--open",ROOT:"mdc-menu-surface"},Te={CLOSED_EVENT:"MDCMenuSurface:closed",CLOSING_EVENT:"MDCMenuSurface:closing",OPENED_EVENT:"MDCMenuSurface:opened",OPENING_EVENT:"MDCMenuSurface:opening",FOCUSABLE_ELEMENTS:["button:not(:disabled)",'[href]:not([aria-disabled="true"])',"input:not(:disabled)","select:not(:disabled)","textarea:not(:disabled)",'[tabindex]:not([tabindex="-1"]):not([aria-disabled="true"])'].join(", ")},ye={TRANSITION_OPEN_DURATION:120,TRANSITION_CLOSE_DURATION:75,MARGIN_TO_EDGE:32,ANCHOR_TO_MENU_SURFACE_WIDTH_RATIO:.67,TOUCH_EVENT_WAIT_MS:30};!function(t){t[t.BOTTOM=1]="BOTTOM",t[t.CENTER=2]="CENTER",t[t.RIGHT=4]="RIGHT",t[t.FLIP_RTL=8]="FLIP_RTL"}(fe||(fe={})),function(t){t[t.TOP_LEFT=0]="TOP_LEFT",t[t.TOP_RIGHT=4]="TOP_RIGHT",t[t.BOTTOM_LEFT=1]="BOTTOM_LEFT",t[t.BOTTOM_RIGHT=5]="BOTTOM_RIGHT",t[t.TOP_START=8]="TOP_START",t[t.TOP_END=12]="TOP_END",t[t.BOTTOM_START=9]="BOTTOM_START",t[t.BOTTOM_END=13]="BOTTOM_END"}(me||(me={})); +var Ae=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.isSurfaceOpen=!1,i.isQuickOpen=!1,i.isHoistedElement=!1,i.isFixedPosition=!1,i.isHorizontallyCenteredOnViewport=!1,i.maxHeight=0,i.openBottomBias=0,i.openAnimationEndTimerId=0,i.closeAnimationEndTimerId=0,i.animationRequestId=0,i.anchorCorner=me.TOP_START,i.originCorner=me.TOP_START,i.anchorMargin={top:0,right:0,bottom:0,left:0},i.position={x:0,y:0},i}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return ge},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return Te},enumerable:!1,configurable:!0}),Object.defineProperty(e,"numbers",{get:function(){return ye},enumerable:!1,configurable:!0}),Object.defineProperty(e,"Corner",{get:function(){return me},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},removeClass:function(){},hasClass:function(){return!1},hasAnchor:function(){return!1},isElementInContainer:function(){return!1},isFocused:function(){return!1},isRtl:function(){return!1},getInnerDimensions:function(){return{height:0,width:0}},getAnchorDimensions:function(){return null},getWindowDimensions:function(){return{height:0,width:0}},getBodyDimensions:function(){return{height:0,width:0}},getWindowScroll:function(){return{x:0,y:0}},setPosition:function(){},setMaxHeight:function(){},setTransformOrigin:function(){},saveFocus:function(){},restoreFocus:function(){},notifyClose:function(){},notifyClosing:function(){},notifyOpen:function(){},notifyOpening:function(){}}},enumerable:!1,configurable:!0}),e.prototype.init=function(){var t=e.cssClasses,n=t.ROOT,i=t.OPEN;if(!this.adapter.hasClass(n))throw new Error(n+" class required in root element.");this.adapter.hasClass(i)&&(this.isSurfaceOpen=!0)},e.prototype.destroy=function(){clearTimeout(this.openAnimationEndTimerId),clearTimeout(this.closeAnimationEndTimerId),cancelAnimationFrame(this.animationRequestId)},e.prototype.setAnchorCorner=function(t){this.anchorCorner=t},e.prototype.flipCornerHorizontally=function(){this.originCorner=this.originCorner^fe.RIGHT},e.prototype.setAnchorMargin=function(t){this.anchorMargin.top=t.top||0,this.anchorMargin.right=t.right||0,this.anchorMargin.bottom=t.bottom||0,this.anchorMargin.left=t.left||0},e.prototype.setIsHoisted=function(t){this.isHoistedElement=t},e.prototype.setFixedPosition=function(t){this.isFixedPosition=t},e.prototype.isFixed=function(){return this.isFixedPosition},e.prototype.setAbsolutePosition=function(t,e){this.position.x=this.isFinite(t)?t:0,this.position.y=this.isFinite(e)?e:0},e.prototype.setIsHorizontallyCenteredOnViewport=function(t){this.isHorizontallyCenteredOnViewport=t},e.prototype.setQuickOpen=function(t){this.isQuickOpen=t},e.prototype.setMaxHeight=function(t){this.maxHeight=t},e.prototype.setOpenBottomBias=function(t){this.openBottomBias=t},e.prototype.isOpen=function(){return this.isSurfaceOpen},e.prototype.open=function(){var t=this;this.isSurfaceOpen||(this.adapter.notifyOpening(),this.adapter.saveFocus(),this.isQuickOpen?(this.isSurfaceOpen=!0,this.adapter.addClass(e.cssClasses.OPEN),this.dimensions=this.adapter.getInnerDimensions(),this.autoposition(),this.adapter.notifyOpen()):(this.adapter.addClass(e.cssClasses.ANIMATING_OPEN),this.animationRequestId=requestAnimationFrame((function(){t.dimensions=t.adapter.getInnerDimensions(),t.autoposition(),t.adapter.addClass(e.cssClasses.OPEN),t.openAnimationEndTimerId=setTimeout((function(){t.openAnimationEndTimerId=0,t.adapter.removeClass(e.cssClasses.ANIMATING_OPEN),t.adapter.notifyOpen()}),ye.TRANSITION_OPEN_DURATION)})),this.isSurfaceOpen=!0))},e.prototype.close=function(t){var n=this;if(void 0===t&&(t=!1),this.isSurfaceOpen){if(this.adapter.notifyClosing(),this.isQuickOpen)return this.isSurfaceOpen=!1,t||this.maybeRestoreFocus(),this.adapter.removeClass(e.cssClasses.OPEN),this.adapter.removeClass(e.cssClasses.IS_OPEN_BELOW),void this.adapter.notifyClose();this.adapter.addClass(e.cssClasses.ANIMATING_CLOSED),requestAnimationFrame((function(){n.adapter.removeClass(e.cssClasses.OPEN),n.adapter.removeClass(e.cssClasses.IS_OPEN_BELOW),n.closeAnimationEndTimerId=setTimeout((function(){n.closeAnimationEndTimerId=0,n.adapter.removeClass(e.cssClasses.ANIMATING_CLOSED),n.adapter.notifyClose()}),ye.TRANSITION_CLOSE_DURATION)})),this.isSurfaceOpen=!1,t||this.maybeRestoreFocus()}},e.prototype.handleBodyClick=function(t){var e=t.target;this.adapter.isElementInContainer(e)||this.close()},e.prototype.handleKeydown=function(t){var e=t.keyCode;("Escape"===t.key||27===e)&&this.close()},e.prototype.autoposition=function(){var t;this.measurements=this.getAutoLayoutmeasurements();var n=this.getoriginCorner(),i=this.getMenuSurfaceMaxHeight(n),r=this.hasBit(n,fe.BOTTOM)?"bottom":"top",o=this.hasBit(n,fe.RIGHT)?"right":"left",a=this.getHorizontalOriginOffset(n),s=this.getVerticalOriginOffset(n),u=this.measurements,c=u.anchorSize,l=u.surfaceSize,d=((t={})[o]=a,t[r]=s,t);c.width/l.width>ye.ANCHOR_TO_MENU_SURFACE_WIDTH_RATIO&&(o="center"),(this.isHoistedElement||this.isFixedPosition)&&this.adjustPositionForHoistedElement(d),this.adapter.setTransformOrigin(o+" "+r),this.adapter.setPosition(d),this.adapter.setMaxHeight(i?i+"px":""),this.hasBit(n,fe.BOTTOM)||this.adapter.addClass(e.cssClasses.IS_OPEN_BELOW)},e.prototype.getAutoLayoutmeasurements=function(){var t=this.adapter.getAnchorDimensions(),e=this.adapter.getBodyDimensions(),n=this.adapter.getWindowDimensions(),i=this.adapter.getWindowScroll();return t||(t={top:this.position.y,right:this.position.x,bottom:this.position.y,left:this.position.x,width:0,height:0}),{anchorSize:t,bodySize:e,surfaceSize:this.dimensions,viewportDistance:{top:t.top,right:n.width-t.right,bottom:n.height-t.bottom,left:t.left},viewportSize:n,windowScroll:i}},e.prototype.getoriginCorner=function(){var t,n,i=this.originCorner,r=this.measurements,o=r.viewportDistance,a=r.anchorSize,s=r.surfaceSize,u=e.numbers.MARGIN_TO_EDGE;this.hasBit(this.anchorCorner,fe.BOTTOM)?(t=o.top-u+this.anchorMargin.bottom,n=o.bottom-u-this.anchorMargin.bottom):(t=o.top-u+this.anchorMargin.top,n=o.bottom-u+a.height-this.anchorMargin.top),!(n-s.height>0)&&t>n+this.openBottomBias&&(i=this.setBit(i,fe.BOTTOM));var c,l,d=this.adapter.isRtl(),h=this.hasBit(this.anchorCorner,fe.FLIP_RTL),p=this.hasBit(this.anchorCorner,fe.RIGHT)||this.hasBit(i,fe.RIGHT),f=!1;(f=d&&h?!p:p)?(c=o.left+a.width+this.anchorMargin.right,l=o.right-this.anchorMargin.right):(c=o.left+this.anchorMargin.left,l=o.right+a.width-this.anchorMargin.left);var m=c-s.width>0,E=l-s.width>0,g=this.hasBit(i,fe.FLIP_RTL)&&this.hasBit(i,fe.RIGHT);return E&&g&&d||!m&&g?i=this.unsetBit(i,fe.RIGHT):(m&&f&&d||m&&!f&&p||!E&&c>=l)&&(i=this.setBit(i,fe.RIGHT)),i},e.prototype.getMenuSurfaceMaxHeight=function(t){if(this.maxHeight>0)return this.maxHeight;var n=this.measurements.viewportDistance,i=0,r=this.hasBit(t,fe.BOTTOM),o=this.hasBit(this.anchorCorner,fe.BOTTOM),a=e.numbers.MARGIN_TO_EDGE;return r?(i=n.top+this.anchorMargin.top-a,o||(i+=this.measurements.anchorSize.height)):(i=n.bottom-this.anchorMargin.bottom+this.measurements.anchorSize.height-a,o&&(i-=this.measurements.anchorSize.height)),i},e.prototype.getHorizontalOriginOffset=function(t){var e=this.measurements.anchorSize,n=this.hasBit(t,fe.RIGHT),i=this.hasBit(this.anchorCorner,fe.RIGHT);if(n){var r=i?e.width-this.anchorMargin.left:this.anchorMargin.right;return this.isHoistedElement||this.isFixedPosition?r-(this.measurements.viewportSize.width-this.measurements.bodySize.width):r}return i?e.width-this.anchorMargin.right:this.anchorMargin.left},e.prototype.getVerticalOriginOffset=function(t){var e=this.measurements.anchorSize,n=this.hasBit(t,fe.BOTTOM),i=this.hasBit(this.anchorCorner,fe.BOTTOM);return n?i?e.height-this.anchorMargin.top:-this.anchorMargin.bottom:i?e.height+this.anchorMargin.bottom:this.anchorMargin.top},e.prototype.adjustPositionForHoistedElement=function(t){var e,n,i=this.measurements,r=i.windowScroll,o=i.viewportDistance,a=i.surfaceSize,s=i.viewportSize,u=Object.keys(t);try{for(var c=F(u),l=c.next();!l.done;l=c.next()){var d=l.value,h=t[d]||0;!this.isHorizontallyCenteredOnViewport||"left"!==d&&"right"!==d?(h+=o[d],this.isFixedPosition||("top"===d?h+=r.y:"bottom"===d?h-=r.y:"left"===d?h+=r.x:h-=r.x),t[d]=h):t[d]=(s.width-a.width)/2}}catch(t){e={error:t}}finally{try{l&&!l.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}},e.prototype.maybeRestoreFocus=function(){var t=this,e=this.adapter.isFocused(),n=this.adapter.getOwnerDocument?this.adapter.getOwnerDocument():document,i=n.activeElement&&this.adapter.isElementInContainer(n.activeElement);(e||i)&&setTimeout((function(){t.adapter.restoreFocus()}),ye.TOUCH_EVENT_WAIT_MS)},e.prototype.hasBit=function(t,e){return Boolean(t&e)},e.prototype.setBit=function(t,e){return t|e},e.prototype.unsetBit=function(t,e){return t^e},e.prototype.isFinite=function(t){return"number"==typeof t&&isFinite(t)},e}(V); +var ve={animation:{prefixed:"-webkit-animation",standard:"animation"},transform:{prefixed:"-webkit-transform",standard:"transform"},transition:{prefixed:"-webkit-transition",standard:"transition"}},Ce={animationend:{cssProperty:"animation",prefixed:"webkitAnimationEnd",standard:"animationend"},animationiteration:{cssProperty:"animation",prefixed:"webkitAnimationIteration",standard:"animationiteration"},animationstart:{cssProperty:"animation",prefixed:"webkitAnimationStart",standard:"animationstart"},transitionend:{cssProperty:"transition",prefixed:"webkitTransitionEnd",standard:"transitionend"}};function Ie(t){return Boolean(t.document)&&"function"==typeof t.document.createElement}function Se(t,e){if(Ie(t)&&e in ve){var n=t.document.createElement("div"),i=ve[e],r=i.standard,o=i.prefixed;return r in n.style?r:o}return e}function be(t,e){if(Ie(t)&&e in Ce){var n=t.document.createElement("div"),i=Ce[e],r=i.standard,o=i.prefixed;return i.cssProperty in n.style?r:o}return e} +var _e,Oe=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.initialSyncWithDOM=function(){var t=this,e=this.root.parentElement;this.anchorElement=e&&e.classList.contains(ge.ANCHOR)?e:null,this.root.classList.contains(ge.FIXED)&&this.setFixedPosition(!0),this.handleKeydown=function(e){t.foundation.handleKeydown(e)},this.handleBodyClick=function(e){t.foundation.handleBodyClick(e)},this.registerBodyClickListener=function(){document.body.addEventListener("click",t.handleBodyClick,{capture:!0})},this.deregisterBodyClickListener=function(){document.body.removeEventListener("click",t.handleBodyClick,{capture:!0})},this.listen("keydown",this.handleKeydown),this.listen(Te.OPENED_EVENT,this.registerBodyClickListener),this.listen(Te.CLOSED_EVENT,this.deregisterBodyClickListener)},e.prototype.destroy=function(){this.unlisten("keydown",this.handleKeydown),this.unlisten(Te.OPENED_EVENT,this.registerBodyClickListener),this.unlisten(Te.CLOSED_EVENT,this.deregisterBodyClickListener),t.prototype.destroy.call(this)},e.prototype.isOpen=function(){return this.foundation.isOpen()},e.prototype.open=function(){this.foundation.open()},e.prototype.close=function(t){void 0===t&&(t=!1),this.foundation.close(t)},Object.defineProperty(e.prototype,"quickOpen",{set:function(t){this.foundation.setQuickOpen(t)},enumerable:!1,configurable:!0}),e.prototype.setIsHoisted=function(t){this.foundation.setIsHoisted(t)},e.prototype.setMenuSurfaceAnchorElement=function(t){this.anchorElement=t},e.prototype.setFixedPosition=function(t){t?this.root.classList.add(ge.FIXED):this.root.classList.remove(ge.FIXED),this.foundation.setFixedPosition(t)},e.prototype.setAbsolutePosition=function(t,e){this.foundation.setAbsolutePosition(t,e),this.setIsHoisted(!0)},e.prototype.setAnchorCorner=function(t){this.foundation.setAnchorCorner(t)},e.prototype.setAnchorMargin=function(t){this.foundation.setAnchorMargin(t)},e.prototype.getDefaultFoundation=function(){var t=this;return new Ae({addClass:function(e){return t.root.classList.add(e)},removeClass:function(e){return t.root.classList.remove(e)},hasClass:function(e){return t.root.classList.contains(e)},hasAnchor:function(){return!!t.anchorElement},notifyClose:function(){return t.emit(Ae.strings.CLOSED_EVENT,{})},notifyClosing:function(){t.emit(Ae.strings.CLOSING_EVENT,{})},notifyOpen:function(){return t.emit(Ae.strings.OPENED_EVENT,{})},notifyOpening:function(){return t.emit(Ae.strings.OPENING_EVENT,{})},isElementInContainer:function(e){return t.root.contains(e)},isRtl:function(){return"rtl"===getComputedStyle(t.root).getPropertyValue("direction")},setTransformOrigin:function(e){var n=Se(window,"transform")+"-origin";t.root.style.setProperty(n,e)},isFocused:function(){return document.activeElement===t.root},saveFocus:function(){t.previousFocus=document.activeElement},restoreFocus:function(){t.root.contains(document.activeElement)&&t.previousFocus&&t.previousFocus.focus&&t.previousFocus.focus()},getInnerDimensions:function(){return{width:t.root.offsetWidth,height:t.root.offsetHeight}},getAnchorDimensions:function(){return t.anchorElement?t.anchorElement.getBoundingClientRect():null},getWindowDimensions:function(){return{width:window.innerWidth,height:window.innerHeight}},getBodyDimensions:function(){return{width:document.body.clientWidth,height:document.body.clientHeight}},getWindowScroll:function(){return{x:window.pageXOffset,y:window.pageYOffset}},setPosition:function(e){var n=t.root;n.style.left="left"in e?e.left+"px":"",n.style.right="right"in e?e.right+"px":"",n.style.top="top"in e?e.top+"px":"",n.style.bottom="bottom"in e?e.bottom+"px":""},setMaxHeight:function(e){t.root.style.maxHeight=e}})},e}(U),Re={MENU_SELECTED_LIST_ITEM:"mdc-menu-item--selected",MENU_SELECTION_GROUP:"mdc-menu__selection-group",ROOT:"mdc-menu"},Le={ARIA_CHECKED_ATTR:"aria-checked",ARIA_DISABLED_ATTR:"aria-disabled",CHECKBOX_SELECTOR:'input[type="checkbox"]',LIST_SELECTOR:".mdc-list,.mdc-deprecated-list",SELECTED_EVENT:"MDCMenu:selected",SKIP_RESTORE_FOCUS:"data-menu-item-skip-restore-focus"},De={FOCUS_ROOT_INDEX:-1};!function(t){t[t.NONE=0]="NONE",t[t.LIST_ROOT=1]="LIST_ROOT",t[t.FIRST_ITEM=2]="FIRST_ITEM",t[t.LAST_ITEM=3]="LAST_ITEM"}(_e||(_e={})); +var xe=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.closeAnimationEndTimerId=0,i.defaultFocusState=_e.LIST_ROOT,i.selectedIndex=-1,i}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return Re},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return Le},enumerable:!1,configurable:!0}),Object.defineProperty(e,"numbers",{get:function(){return De},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClassToElementAtIndex:function(){},removeClassFromElementAtIndex:function(){},addAttributeToElementAtIndex:function(){},removeAttributeFromElementAtIndex:function(){},getAttributeFromElementAtIndex:function(){return null},elementContainsClass:function(){return!1},closeSurface:function(){},getElementIndex:function(){return-1},notifySelected:function(){},getMenuItemCount:function(){return 0},focusItemAtIndex:function(){},focusListRoot:function(){},getSelectedSiblingOfItemAtIndex:function(){return-1},isSelectableItemAtIndex:function(){return!1}}},enumerable:!1,configurable:!0}),e.prototype.destroy=function(){this.closeAnimationEndTimerId&&clearTimeout(this.closeAnimationEndTimerId),this.adapter.closeSurface()},e.prototype.handleKeydown=function(t){var e=t.key,n=t.keyCode;("Tab"===e||9===n)&&this.adapter.closeSurface(!0)},e.prototype.handleItemAction=function(t){var e=this,n=this.adapter.getElementIndex(t);if(!(n<0)){this.adapter.notifySelected({index:n});var i="true"===this.adapter.getAttributeFromElementAtIndex(n,Le.SKIP_RESTORE_FOCUS);this.adapter.closeSurface(i),this.closeAnimationEndTimerId=setTimeout((function(){var n=e.adapter.getElementIndex(t);n>=0&&e.adapter.isSelectableItemAtIndex(n)&&e.setSelectedIndex(n)}),Ae.numbers.TRANSITION_CLOSE_DURATION)}},e.prototype.handleMenuSurfaceOpened=function(){switch(this.defaultFocusState){case _e.FIRST_ITEM:this.adapter.focusItemAtIndex(0);break;case _e.LAST_ITEM:this.adapter.focusItemAtIndex(this.adapter.getMenuItemCount()-1);break;case _e.NONE:break;default:this.adapter.focusListRoot()}},e.prototype.setDefaultFocusState=function(t){this.defaultFocusState=t},e.prototype.getSelectedIndex=function(){return this.selectedIndex},e.prototype.setSelectedIndex=function(t){if(this.validatedIndex(t),!this.adapter.isSelectableItemAtIndex(t))throw new Error("MDCMenuFoundation: No selection group at specified index.");var e=this.adapter.getSelectedSiblingOfItemAtIndex(t);e>=0&&(this.adapter.removeAttributeFromElementAtIndex(e,Le.ARIA_CHECKED_ATTR),this.adapter.removeClassFromElementAtIndex(e,Re.MENU_SELECTED_LIST_ITEM)),this.adapter.addClassToElementAtIndex(t,Re.MENU_SELECTED_LIST_ITEM),this.adapter.addAttributeToElementAtIndex(t,Le.ARIA_CHECKED_ATTR,"true"),this.selectedIndex=t},e.prototype.setEnabled=function(t,e){this.validatedIndex(t),e?(this.adapter.removeClassFromElementAtIndex(t,Mt.LIST_ITEM_DISABLED_CLASS),this.adapter.addAttributeToElementAtIndex(t,Le.ARIA_DISABLED_ATTR,"false")):(this.adapter.addClassToElementAtIndex(t,Mt.LIST_ITEM_DISABLED_CLASS),this.adapter.addAttributeToElementAtIndex(t,Le.ARIA_DISABLED_ATTR,"true"))},e.prototype.validatedIndex=function(t){var e=this.adapter.getMenuItemCount();if(!(t>=0&&t0&&(clearTimeout(this.animEndLatchTimer),this.adapter.forceLayout(),this.adapter.removeClass(this.currentAnimationClass)),this.currentAnimationClass=this.getTransitionAnimationClass(t,e),this.currentCheckState=e,this.adapter.isAttachedToDOM()&&this.currentAnimationClass.length>0&&(this.adapter.addClass(this.currentAnimationClass),this.enableAnimationEndHandler=!0)}}},e.prototype.determineCheckState=function(){var t=tn.TRANSITION_STATE_INDETERMINATE,e=tn.TRANSITION_STATE_CHECKED,n=tn.TRANSITION_STATE_UNCHECKED;return this.adapter.isIndeterminate()?t:this.adapter.isChecked()?e:n},e.prototype.getTransitionAnimationClass=function(t,n){var i=tn.TRANSITION_STATE_INIT,r=tn.TRANSITION_STATE_CHECKED,o=tn.TRANSITION_STATE_UNCHECKED,a=e.cssClasses,s=a.ANIM_UNCHECKED_CHECKED,u=a.ANIM_UNCHECKED_INDETERMINATE,c=a.ANIM_CHECKED_UNCHECKED,l=a.ANIM_CHECKED_INDETERMINATE,d=a.ANIM_INDETERMINATE_CHECKED,h=a.ANIM_INDETERMINATE_UNCHECKED;switch(t){case i:return n===o?"":n===r?d:h;case o:return n===r?s:u;case r:return n===o?c:l;default:return n===r?d:h}},e.prototype.updateAriaChecked=function(){this.adapter.isIndeterminate()?this.adapter.setNativeControlAttr(tn.ARIA_CHECKED_ATTR,tn.ARIA_CHECKED_INDETERMINATE_VALUE):this.adapter.removeNativeControlAttr(tn.ARIA_CHECKED_ATTR)},e}(V); +var rn=["checked","indeterminate"],on=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.rippleSurface=e.createRipple(),e}return w(e,t),e.attachTo=function(t){return new e(t)},Object.defineProperty(e.prototype,"ripple",{get:function(){return this.rippleSurface},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"checked",{get:function(){return this.getNativeControl().checked},set:function(t){this.getNativeControl().checked=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"indeterminate",{get:function(){return this.getNativeControl().indeterminate},set:function(t){this.getNativeControl().indeterminate=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this.getNativeControl().disabled},set:function(t){this.foundation.setDisabled(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.getNativeControl().value},set:function(t){this.getNativeControl().value=t},enumerable:!1,configurable:!0}),e.prototype.initialize=function(){var t=tn.DATA_INDETERMINATE_ATTR;this.getNativeControl().indeterminate="true"===this.getNativeControl().getAttribute(t),this.getNativeControl().removeAttribute(t)},e.prototype.initialSyncWithDOM=function(){var t=this;this.handleChange=function(){t.foundation.handleChange()},this.handleAnimationEnd=function(){t.foundation.handleAnimationEnd()},this.getNativeControl().addEventListener("change",this.handleChange),this.listen(be(window,"animationend"),this.handleAnimationEnd),this.installPropertyChangeHooks()},e.prototype.destroy=function(){this.rippleSurface.destroy(),this.getNativeControl().removeEventListener("change",this.handleChange),this.unlisten(be(window,"animationend"),this.handleAnimationEnd),this.uninstallPropertyChangeHooks(),t.prototype.destroy.call(this)},e.prototype.getDefaultFoundation=function(){var t=this;return new nn({addClass:function(e){return t.root.classList.add(e)},forceLayout:function(){return t.root.offsetWidth},hasNativeControl:function(){return!!t.getNativeControl()},isAttachedToDOM:function(){return Boolean(t.root.parentNode)},isChecked:function(){return t.checked},isIndeterminate:function(){return t.indeterminate},removeClass:function(e){t.root.classList.remove(e)},removeNativeControlAttr:function(e){t.getNativeControl().removeAttribute(e)},setNativeControlAttr:function(e,n){t.getNativeControl().setAttribute(e,n)},setNativeControlDisabled:function(e){t.getNativeControl().disabled=e}})},e.prototype.createRipple=function(){var t=this,e=P(P({},lt.createAdapter(this)),{deregisterInteractionHandler:function(e,n){t.getNativeControl().removeEventListener(e,n,W())},isSurfaceActive:function(){return G(t.getNativeControl(),":active")},isUnbounded:function(){return!0},registerInteractionHandler:function(e,n){t.getNativeControl().addEventListener(e,n,W())}});return new lt(this.root,new ct(e))},e.prototype.installPropertyChangeHooks=function(){var t,e,n=this,i=this.getNativeControl(),r=Object.getPrototypeOf(i),o=function(t){var e=Object.getOwnPropertyDescriptor(r,t);if(!an(e))return{value:void 0};var o=e.get,a={configurable:e.configurable,enumerable:e.enumerable,get:o,set:function(t){e.set.call(i,t),n.foundation.handleChange()}};Object.defineProperty(i,t,a)};try{for(var a=F(rn),s=a.next();!s.done;s=a.next()){var u=o(s.value);if("object"==typeof u)return u.value}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=a.return)&&e.call(a)}finally{if(t)throw t.error}}},e.prototype.uninstallPropertyChangeHooks=function(){var t,e,n=this.getNativeControl(),i=Object.getPrototypeOf(n);try{for(var r=F(rn),o=r.next();!o.done;o=r.next()){var a=o.value,s=Object.getOwnPropertyDescriptor(i,a);if(!an(s))return;Object.defineProperty(n,a,s)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},e.prototype.getNativeControl=function(){var t=tn.NATIVE_CONTROL_SELECTOR,e=this.root.querySelector(t);if(!e)throw new Error("Checkbox component requires a "+t+" element");return e},e}(U);function an(t){return!!t&&"function"==typeof t.set} +var sn={ROOT:"mdc-form-field"},un={LABEL_SELECTOR:".mdc-form-field > label"},cn=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.click=function(){i.handleClick()},i}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return sn},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return un},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{activateInputRipple:function(){},deactivateInputRipple:function(){},deregisterInteractionHandler:function(){},registerInteractionHandler:function(){}}},enumerable:!1,configurable:!0}),e.prototype.init=function(){this.adapter.registerInteractionHandler("click",this.click)},e.prototype.destroy=function(){this.adapter.deregisterInteractionHandler("click",this.click)},e.prototype.handleClick=function(){var t=this;this.adapter.activateInputRipple(),requestAnimationFrame((function(){t.adapter.deactivateInputRipple()}))},e}(V); +var ln=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.labelEl=function(){var t=cn.strings.LABEL_SELECTOR;return this.root.querySelector(t)},e.prototype.getDefaultFoundation=function(){var t=this;return new cn({activateInputRipple:function(){t.input&&t.input.ripple&&t.input.ripple.activate()},deactivateInputRipple:function(){t.input&&t.input.ripple&&t.input.ripple.deactivate()},deregisterInteractionHandler:function(e,n){var i=t.labelEl();i&&i.removeEventListener(e,n)},registerInteractionHandler:function(e,n){var i=t.labelEl();i&&i.addEventListener(e,n)}})},e}(U);function dn(t,e,n,i){t&&e&&(t._checkbox=on.attachTo(t),t._checkbox.checked=n,t._checkbox.indeterminate=i,t._formField=ln.attachTo(e),t._formField.input=t._checkbox)}function hn(t,e){t&&(t._checkbox.checked=e)}function pn(t,e){t&&null!=(null==t?void 0:t._checkbox)&&(t._checkbox.indeterminate=e)}function fn(t,e){t&&(t._checkbox.disabled=e)} +var mn={INDETERMINATE_CLASS:"mdc-circular-progress--indeterminate",CLOSED_CLASS:"mdc-circular-progress--closed"},En={ARIA_HIDDEN:"aria-hidden",ARIA_VALUENOW:"aria-valuenow",DETERMINATE_CIRCLE_SELECTOR:".mdc-circular-progress__determinate-circle",RADIUS:"r",STROKE_DASHOFFSET:"stroke-dashoffset"},gn=function(t){function e(n){return t.call(this,P(P({},e.defaultAdapter),n))||this}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return mn},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return En},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},getDeterminateCircleAttribute:function(){return null},hasClass:function(){return!1},removeClass:function(){},removeAttribute:function(){},setAttribute:function(){},setDeterminateCircleAttribute:function(){}}},enumerable:!1,configurable:!0}),e.prototype.init=function(){this.closed=this.adapter.hasClass(mn.CLOSED_CLASS),this.determinate=!this.adapter.hasClass(mn.INDETERMINATE_CLASS),this.progress=0,this.determinate&&this.adapter.setAttribute(En.ARIA_VALUENOW,this.progress.toString()),this.radius=Number(this.adapter.getDeterminateCircleAttribute(En.RADIUS))},e.prototype.setDeterminate=function(t){this.determinate=t,this.determinate?(this.adapter.removeClass(mn.INDETERMINATE_CLASS),this.setProgress(this.progress)):(this.adapter.addClass(mn.INDETERMINATE_CLASS),this.adapter.removeAttribute(En.ARIA_VALUENOW))},e.prototype.isDeterminate=function(){return this.determinate},e.prototype.setProgress=function(t){if(this.progress=t,this.determinate){var e=(1-this.progress)*(2*Math.PI*this.radius);this.adapter.setDeterminateCircleAttribute(En.STROKE_DASHOFFSET,""+e),this.adapter.setAttribute(En.ARIA_VALUENOW,this.progress.toString())}},e.prototype.getProgress=function(){return this.progress},e.prototype.open=function(){this.closed=!1,this.adapter.removeClass(mn.CLOSED_CLASS),this.adapter.removeAttribute(En.ARIA_HIDDEN)},e.prototype.close=function(){this.closed=!0,this.adapter.addClass(mn.CLOSED_CLASS),this.adapter.setAttribute(En.ARIA_HIDDEN,"true")},e.prototype.isClosed=function(){return this.closed},e}(V); +var Tn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.prototype.initialize=function(){this.determinateCircle=this.root.querySelector(gn.strings.DETERMINATE_CIRCLE_SELECTOR)},e.attachTo=function(t){return new e(t)},Object.defineProperty(e.prototype,"determinate",{set:function(t){this.foundation.setDeterminate(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"progress",{set:function(t){this.foundation.setProgress(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isClosed",{get:function(){return this.foundation.isClosed()},enumerable:!1,configurable:!0}),e.prototype.open=function(){this.foundation.open()},e.prototype.close=function(){this.foundation.close()},e.prototype.getDefaultFoundation=function(){var t=this;return new gn({addClass:function(e){t.root.classList.add(e)},getDeterminateCircleAttribute:function(e){return t.determinateCircle.getAttribute(e)},hasClass:function(e){return t.root.classList.contains(e)},removeClass:function(e){t.root.classList.remove(e)},removeAttribute:function(e){t.root.removeAttribute(e)},setAttribute:function(e,n){t.root.setAttribute(e,n)},setDeterminateCircleAttribute:function(e,n){t.determinateCircle.setAttribute(e,n)}})},e}(U);function yn(t,e){t&&(t._circularProgress=Tn.attachTo(t),An(t,e))}function An(t,e){t&&(t._circularProgress.progress=e)} +var vn={CLOSED_CLASS:"mdc-linear-progress--closed",CLOSED_ANIMATION_OFF_CLASS:"mdc-linear-progress--closed-animation-off",INDETERMINATE_CLASS:"mdc-linear-progress--indeterminate",REVERSED_CLASS:"mdc-linear-progress--reversed",ANIMATION_READY_CLASS:"mdc-linear-progress--animation-ready"},Cn={ARIA_HIDDEN:"aria-hidden",ARIA_VALUEMAX:"aria-valuemax",ARIA_VALUEMIN:"aria-valuemin",ARIA_VALUENOW:"aria-valuenow",BUFFER_BAR_SELECTOR:".mdc-linear-progress__buffer-bar",FLEX_BASIS:"flex-basis",PRIMARY_BAR_SELECTOR:".mdc-linear-progress__primary-bar"},In=.8367142,Sn=2.00611057,bn=.37651913,_n=.84386165,On=1.60277782,Rn=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.observer=null,i}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return vn},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return Cn},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},attachResizeObserver:function(){return null},forceLayout:function(){},getWidth:function(){return 0},hasClass:function(){return!1},setBufferBarStyle:function(){return null},setPrimaryBarStyle:function(){return null},setStyle:function(){},removeAttribute:function(){},removeClass:function(){},setAttribute:function(){}}},enumerable:!1,configurable:!0}),e.prototype.init=function(){var t=this;this.determinate=!this.adapter.hasClass(vn.INDETERMINATE_CLASS),this.adapter.addClass(vn.ANIMATION_READY_CLASS),this.progress=0,this.buffer=1,this.observer=this.adapter.attachResizeObserver((function(e){var n,i;if(!t.determinate)try{for(var r=F(e),o=r.next();!o.done;o=r.next()){var a=o.value;a.contentRect&&t.calculateAndSetDimensions(a.contentRect.width)}}catch(t){n={error:t}}finally{try{o&&!o.done&&(i=r.return)&&i.call(r)}finally{if(n)throw n.error}}})),!this.determinate&&this.observer&&this.calculateAndSetDimensions(this.adapter.getWidth())},e.prototype.setDeterminate=function(t){if(this.determinate=t,this.determinate)return this.adapter.removeClass(vn.INDETERMINATE_CLASS),this.adapter.setAttribute(Cn.ARIA_VALUENOW,this.progress.toString()),this.adapter.setAttribute(Cn.ARIA_VALUEMAX,"1"),this.adapter.setAttribute(Cn.ARIA_VALUEMIN,"0"),this.setPrimaryBarProgress(this.progress),void this.setBufferBarProgress(this.buffer);this.observer&&this.calculateAndSetDimensions(this.adapter.getWidth()),this.adapter.addClass(vn.INDETERMINATE_CLASS),this.adapter.removeAttribute(Cn.ARIA_VALUENOW),this.adapter.removeAttribute(Cn.ARIA_VALUEMAX),this.adapter.removeAttribute(Cn.ARIA_VALUEMIN),this.setPrimaryBarProgress(1),this.setBufferBarProgress(1)},e.prototype.isDeterminate=function(){return this.determinate},e.prototype.setProgress=function(t){this.progress=t,this.determinate&&(this.setPrimaryBarProgress(t),this.adapter.setAttribute(Cn.ARIA_VALUENOW,t.toString()))},e.prototype.getProgress=function(){return this.progress},e.prototype.setBuffer=function(t){this.buffer=t,this.determinate&&this.setBufferBarProgress(t)},e.prototype.getBuffer=function(){return this.buffer},e.prototype.open=function(){this.adapter.removeClass(vn.CLOSED_CLASS),this.adapter.removeClass(vn.CLOSED_ANIMATION_OFF_CLASS),this.adapter.removeAttribute(Cn.ARIA_HIDDEN)},e.prototype.close=function(){this.adapter.addClass(vn.CLOSED_CLASS),this.adapter.setAttribute(Cn.ARIA_HIDDEN,"true")},e.prototype.isClosed=function(){return this.adapter.hasClass(vn.CLOSED_CLASS)},e.prototype.handleTransitionEnd=function(){this.adapter.hasClass(vn.CLOSED_CLASS)&&this.adapter.addClass(vn.CLOSED_ANIMATION_OFF_CLASS)},e.prototype.destroy=function(){t.prototype.destroy.call(this),this.observer&&this.observer.disconnect()},e.prototype.restartAnimation=function(){this.adapter.removeClass(vn.ANIMATION_READY_CLASS),this.adapter.forceLayout(),this.adapter.addClass(vn.ANIMATION_READY_CLASS)},e.prototype.setPrimaryBarProgress=function(t){var e="scaleX("+t+")",n="undefined"!=typeof window?Se(window,"transform"):"transform";this.adapter.setPrimaryBarStyle(n,e)},e.prototype.setBufferBarProgress=function(t){var e=100*t+"%";this.adapter.setBufferBarStyle(Cn.FLEX_BASIS,e)},e.prototype.calculateAndSetDimensions=function(t){var e=t*In,n=t*Sn,i=t*bn,r=t*_n,o=t*On;this.adapter.setStyle("--mdc-linear-progress-primary-half",e+"px"),this.adapter.setStyle("--mdc-linear-progress-primary-half-neg",-e+"px"),this.adapter.setStyle("--mdc-linear-progress-primary-full",n+"px"),this.adapter.setStyle("--mdc-linear-progress-primary-full-neg",-n+"px"),this.adapter.setStyle("--mdc-linear-progress-secondary-quarter",i+"px"),this.adapter.setStyle("--mdc-linear-progress-secondary-quarter-neg",-i+"px"),this.adapter.setStyle("--mdc-linear-progress-secondary-half",r+"px"),this.adapter.setStyle("--mdc-linear-progress-secondary-half-neg",-r+"px"),this.adapter.setStyle("--mdc-linear-progress-secondary-full",o+"px"),this.adapter.setStyle("--mdc-linear-progress-secondary-full-neg",-o+"px"),this.restartAnimation()},e}(V); +var Ln,Dn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},Object.defineProperty(e.prototype,"determinate",{set:function(t){this.foundation.setDeterminate(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"progress",{set:function(t){this.foundation.setProgress(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"buffer",{set:function(t){this.foundation.setBuffer(t)},enumerable:!1,configurable:!0}),e.prototype.open=function(){this.foundation.open()},e.prototype.close=function(){this.foundation.close()},e.prototype.initialSyncWithDOM=function(){var t=this;this.root.addEventListener("transitionend",(function(){t.foundation.handleTransitionEnd()}))},e.prototype.getDefaultFoundation=function(){var t=this;return new Rn({addClass:function(e){t.root.classList.add(e)},forceLayout:function(){t.root.getBoundingClientRect()},setBufferBarStyle:function(e,n){var i=t.root.querySelector(Rn.strings.BUFFER_BAR_SELECTOR);i&&i.style.setProperty(e,n)},setPrimaryBarStyle:function(e,n){var i=t.root.querySelector(Rn.strings.PRIMARY_BAR_SELECTOR);i&&i.style.setProperty(e,n)},hasClass:function(e){return t.root.classList.contains(e)},removeAttribute:function(e){t.root.removeAttribute(e)},removeClass:function(e){t.root.classList.remove(e)},setAttribute:function(e,n){t.root.setAttribute(e,n)},setStyle:function(e,n){t.root.style.setProperty(e,n)},attachResizeObserver:function(e){var n=window.ResizeObserver;if(n){var i=new n(e);return i.observe(t.root),i}return null},getWidth:function(){return t.root.offsetWidth}})},e}(U),xn="mdc-data-table__content",Nn="mdc-data-table__header-cell--sorted",wn="mdc-data-table__header-cell--sorted-descending",Pn="mdc-data-table__header-row",Mn="mdc-data-table--in-progress",Hn="mdc-data-table__linear-progress",Fn="mdc-data-table__row--selected",kn="mdc-data-table__table-container",Bn="data-column-id",Vn="data-row-id",Un={CONTENT:"."+xn,HEADER_CELL:"."+"mdc-data-table__header-cell",HEADER_CELL_WITH_SORT:"."+"mdc-data-table__header-cell--with-sort",HEADER_ROW:"."+Pn,HEADER_ROW_CHECKBOX:"."+"mdc-data-table__header-row-checkbox",PROGRESS_INDICATOR:"."+"mdc-data-table__progress-indicator",ROW:"."+"mdc-data-table__row",ROW_CHECKBOX:"."+"mdc-data-table__row-checkbox",ROW_SELECTED:"."+Fn,SORT_ICON_BUTTON:"."+"mdc-data-table__sort-icon-button",SORT_STATUS_LABEL:"."+"mdc-data-table__sort-status-label"},Wn="Sorted in descending order",jn="Sorted in ascending order",Gn={ARIA_SELECTED:"aria-selected",ARIA_SORT:"aria-sort",DATA_ROW_ID_ATTR:Vn,HEADER_ROW_CHECKBOX_SELECTOR:Un.HEADER_ROW_CHECKBOX,ROW_CHECKBOX_SELECTOR:Un.ROW_CHECKBOX,ROW_SELECTED_SELECTOR:Un.ROW_SELECTED,ROW_SELECTOR:Un.ROW};!function(t){t.ASCENDING="ascending",t.DESCENDING="descending",t.NONE="none",t.OTHER="other"}(Ln||(Ln={}));var Kn="MDCDataTable:rowClick",qn="MDCDataTable:rowSelectionChanged",Xn="MDCDataTable:selectedAll",zn="MDCDataTable:sorted",Yn="MDCDataTable:unselectedAll",Qn=function(t){function e(n){return t.call(this,P(P({},e.defaultAdapter),n))||this}return w(e,t),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},addClassAtRowIndex:function(){},getAttributeByHeaderCellIndex:function(){return""},getHeaderCellCount:function(){return 0},getHeaderCellElements:function(){return[]},getRowCount:function(){return 0},getRowElements:function(){return[]},getRowIdAtIndex:function(){return""},getRowIndexByChildElement:function(){return 0},getSelectedRowCount:function(){return 0},getTableContainerHeight:function(){return 0},getTableHeaderHeight:function(){return 0},isCheckboxAtRowIndexChecked:function(){return!1},isHeaderRowCheckboxChecked:function(){return!1},isRowsSelectable:function(){return!1},notifyRowSelectionChanged:function(){},notifySelectedAll:function(){},notifySortAction:function(){},notifyUnselectedAll:function(){},notifyRowClick:function(){},registerHeaderRowCheckbox:function(){},registerRowCheckboxes:function(){},removeClass:function(){},removeClassAtRowIndex:function(){},removeClassNameByHeaderCellIndex:function(){},setAttributeAtRowIndex:function(){},setAttributeByHeaderCellIndex:function(){},setClassNameByHeaderCellIndex:function(){},setHeaderRowCheckboxChecked:function(){},setHeaderRowCheckboxIndeterminate:function(){},setProgressIndicatorStyles:function(){},setRowCheckboxCheckedAtIndex:function(){},setSortStatusLabelByHeaderCellIndex:function(){}}},enumerable:!1,configurable:!0}),e.prototype.layout=function(){this.adapter.isRowsSelectable()&&(this.adapter.registerHeaderRowCheckbox(),this.adapter.registerRowCheckboxes(),this.setHeaderRowCheckboxState())},e.prototype.layoutAsync=function(){return M(this,void 0,void 0,(function(){return H(this,(function(t){switch(t.label){case 0:return this.adapter.isRowsSelectable()?[4,this.adapter.registerHeaderRowCheckbox()]:[3,3];case 1:return t.sent(),[4,this.adapter.registerRowCheckboxes()];case 2:t.sent(),this.setHeaderRowCheckboxState(),t.label=3;case 3:return[2]}}))}))},e.prototype.getRows=function(){return this.adapter.getRowElements()},e.prototype.getHeaderCells=function(){return this.adapter.getHeaderCellElements()},e.prototype.setSelectedRowIds=function(t){for(var e=0;e=0&&(i=!0),this.adapter.setRowCheckboxCheckedAtIndex(e,i),this.selectRowAtIndex(e,i)}this.setHeaderRowCheckboxState()},e.prototype.getRowIds=function(){for(var t=[],e=0;e=this.adapter.getMenuItemCount()||(t===ni.UNSET_INDEX?this.adapter.setSelectedText(""):this.adapter.setSelectedText(this.adapter.getMenuItemTextAtIndex(t).trim()),this.adapter.setSelectedIndex(t),e&&this.adapter.closeMenu(),n||this.lastSelectedIndex===t||this.handleChange(),this.lastSelectedIndex=t)},e.prototype.setValue=function(t,e){void 0===e&&(e=!1);var n=this.adapter.getMenuItemValues().indexOf(t);this.setSelectedIndex(n,!1,e)},e.prototype.getValue=function(){var t=this.adapter.getSelectedIndex(),e=this.adapter.getMenuItemValues();return t!==ni.UNSET_INDEX?e[t]:""},e.prototype.getDisabled=function(){return this.disabled},e.prototype.setDisabled=function(t){this.disabled=t,this.disabled?(this.adapter.addClass(ti.DISABLED),this.adapter.closeMenu()):this.adapter.removeClass(ti.DISABLED),this.leadingIcon&&this.leadingIcon.setDisabled(this.disabled),this.disabled?this.adapter.removeSelectAnchorAttr("tabindex"):this.adapter.setSelectAnchorAttr("tabindex","0"),this.adapter.setSelectAnchorAttr("aria-disabled",this.disabled.toString())},e.prototype.openMenu=function(){this.adapter.addClass(ti.ACTIVATED),this.adapter.openMenu(),this.isMenuOpen=!0,this.adapter.setSelectAnchorAttr("aria-expanded","true")},e.prototype.setHelperTextContent=function(t){this.helperText&&this.helperText.setContent(t)},e.prototype.layout=function(){if(this.adapter.hasLabel()){var t=this.getValue().length>0,e=this.adapter.hasClass(ti.FOCUSED),n=t||e,i=this.adapter.hasClass(ti.REQUIRED);this.notchOutline(n),this.adapter.floatLabel(n),this.adapter.setLabelRequired(i)}},e.prototype.layoutOptions=function(){var t=this.adapter.getMenuItemValues().indexOf(this.getValue());this.setSelectedIndex(t,!1,!0)},e.prototype.handleMenuOpened=function(){if(0!==this.adapter.getMenuItemValues().length){var t=this.getSelectedIndex(),e=t>=0?t:0;this.adapter.focusMenuItemAtIndex(e)}},e.prototype.handleMenuClosing=function(){this.adapter.setSelectAnchorAttr("aria-expanded","false")},e.prototype.handleMenuClosed=function(){this.adapter.removeClass(ti.ACTIVATED),this.isMenuOpen=!1,this.adapter.isSelectAnchorFocused()||this.blur()},e.prototype.handleChange=function(){this.layout(),this.adapter.notifyChange(this.getValue()),this.adapter.hasClass(ti.REQUIRED)&&this.useDefaultValidation&&this.setValid(this.isValid())},e.prototype.handleMenuItemAction=function(t){this.setSelectedIndex(t,!0)},e.prototype.handleFocus=function(){this.adapter.addClass(ti.FOCUSED),this.layout(),this.adapter.activateBottomLine()},e.prototype.handleBlur=function(){this.isMenuOpen||this.blur()},e.prototype.handleClick=function(t){this.disabled||this.recentlyClicked||(this.setClickDebounceTimeout(),this.isMenuOpen?this.adapter.closeMenu():(this.adapter.setRippleCenter(t),this.openMenu()))},e.prototype.handleKeydown=function(t){if(!this.isMenuOpen&&this.adapter.hasClass(ti.FOCUSED)){var e=re(t)===Vt.ENTER,n=re(t)===Vt.SPACEBAR,i=re(t)===Vt.ARROW_UP,r=re(t)===Vt.ARROW_DOWN;if(!(t.ctrlKey||t.metaKey)&&(!n&&t.key&&1===t.key.length||n&&this.adapter.isTypeaheadInProgress())){var o=n?" ":t.key,a=this.adapter.typeaheadMatchItem(o,this.getSelectedIndex());return a>=0&&this.setSelectedIndex(a),void t.preventDefault()}(e||n||i||r)&&(this.openMenu(),t.preventDefault())}},e.prototype.notchOutline=function(t){if(this.adapter.hasOutline()){var e=this.adapter.hasClass(ti.FOCUSED);if(t){var n=ni.LABEL_SCALE,i=this.adapter.getLabelWidth()*n;this.adapter.notchOutline(i)}else e||this.adapter.closeOutline()}},e.prototype.setLeadingIconAriaLabel=function(t){this.leadingIcon&&this.leadingIcon.setAriaLabel(t)},e.prototype.setLeadingIconContent=function(t){this.leadingIcon&&this.leadingIcon.setContent(t)},e.prototype.getUseDefaultValidation=function(){return this.useDefaultValidation},e.prototype.setUseDefaultValidation=function(t){this.useDefaultValidation=t},e.prototype.setValid=function(t){this.useDefaultValidation||(this.customValidity=t),this.adapter.setSelectAnchorAttr("aria-invalid",(!t).toString()),t?(this.adapter.removeClass(ti.INVALID),this.adapter.removeMenuClass(ti.MENU_INVALID)):(this.adapter.addClass(ti.INVALID),this.adapter.addMenuClass(ti.MENU_INVALID)),this.syncHelperTextValidity(t)},e.prototype.isValid=function(){return this.useDefaultValidation&&this.adapter.hasClass(ti.REQUIRED)&&!this.adapter.hasClass(ti.DISABLED)?this.getSelectedIndex()!==ni.UNSET_INDEX&&(0!==this.getSelectedIndex()||Boolean(this.getValue())):this.customValidity},e.prototype.setRequired=function(t){t?this.adapter.addClass(ti.REQUIRED):this.adapter.removeClass(ti.REQUIRED),this.adapter.setSelectAnchorAttr("aria-required",t.toString()),this.adapter.setLabelRequired(t)},e.prototype.getRequired=function(){return"true"===this.adapter.getSelectAnchorAttr("aria-required")},e.prototype.init=function(){var t=this.adapter.getAnchorElement();t&&(this.adapter.setMenuAnchorElement(t),this.adapter.setMenuAnchorCorner(me.BOTTOM_START)),this.adapter.setMenuWrapFocus(!1),this.setDisabled(this.adapter.hasClass(ti.DISABLED)),this.syncHelperTextValidity(!this.adapter.hasClass(ti.INVALID)),this.layout(),this.layoutOptions()},e.prototype.blur=function(){this.adapter.removeClass(ti.FOCUSED),this.layout(),this.adapter.deactivateBottomLine(),this.adapter.hasClass(ti.REQUIRED)&&this.useDefaultValidation&&this.setValid(this.isValid())},e.prototype.syncHelperTextValidity=function(t){if(this.helperText){this.helperText.setValidity(t);var e=this.helperText.isVisible(),n=this.helperText.getId();e&&n?this.adapter.setSelectAnchorAttr(ei.ARIA_DESCRIBEDBY,n):this.adapter.removeSelectAnchorAttr(ei.ARIA_DESCRIBEDBY)}},e.prototype.setClickDebounceTimeout=function(){var t=this;clearTimeout(this.clickDebounceTimeout),this.clickDebounceTimeout=setTimeout((function(){t.recentlyClicked=!1}),ni.CLICK_DEBOUNCE_TIMEOUT_MS),this.recentlyClicked=!0},e}(V); +var ri={ARIA_HIDDEN:"aria-hidden",ROLE:"role"},oi={HELPER_TEXT_VALIDATION_MSG:"mdc-select-helper-text--validation-msg",HELPER_TEXT_VALIDATION_MSG_PERSISTENT:"mdc-select-helper-text--validation-msg-persistent"},ai=function(t){function e(n){return t.call(this,P(P({},e.defaultAdapter),n))||this}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return oi},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return ri},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},removeClass:function(){},hasClass:function(){return!1},setAttr:function(){},getAttr:function(){return null},removeAttr:function(){},setContent:function(){}}},enumerable:!1,configurable:!0}),e.prototype.getId=function(){return this.adapter.getAttr("id")},e.prototype.isVisible=function(){return"true"!==this.adapter.getAttr(ri.ARIA_HIDDEN)},e.prototype.setContent=function(t){this.adapter.setContent(t)},e.prototype.setValidation=function(t){t?this.adapter.addClass(oi.HELPER_TEXT_VALIDATION_MSG):this.adapter.removeClass(oi.HELPER_TEXT_VALIDATION_MSG)},e.prototype.setValidationMsgPersistent=function(t){t?this.adapter.addClass(oi.HELPER_TEXT_VALIDATION_MSG_PERSISTENT):this.adapter.removeClass(oi.HELPER_TEXT_VALIDATION_MSG_PERSISTENT)},e.prototype.getIsValidation=function(){return this.adapter.hasClass(oi.HELPER_TEXT_VALIDATION_MSG)},e.prototype.getIsValidationMsgPersistent=function(){return this.adapter.hasClass(oi.HELPER_TEXT_VALIDATION_MSG_PERSISTENT)},e.prototype.setValidity=function(t){if(this.adapter.hasClass(oi.HELPER_TEXT_VALIDATION_MSG)){var e=this.adapter.hasClass(oi.HELPER_TEXT_VALIDATION_MSG_PERSISTENT);if(!t||e)return this.showToScreenReader(),void(t?this.adapter.removeAttr(ri.ROLE):this.adapter.setAttr(ri.ROLE,"alert"));this.adapter.removeAttr(ri.ROLE),this.hide()}},e.prototype.showToScreenReader=function(){this.adapter.removeAttr(ri.ARIA_HIDDEN)},e.prototype.hide=function(){this.adapter.setAttr(ri.ARIA_HIDDEN,"true")},e}(V); +var si=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},Object.defineProperty(e.prototype,"foundationForSelect",{get:function(){return this.foundation},enumerable:!1,configurable:!0}),e.prototype.getDefaultFoundation=function(){var t=this;return new ai({addClass:function(e){return t.root.classList.add(e)},removeClass:function(e){return t.root.classList.remove(e)},hasClass:function(e){return t.root.classList.contains(e)},getAttr:function(e){return t.root.getAttribute(e)},setAttr:function(e,n){return t.root.setAttribute(e,n)},removeAttr:function(e){return t.root.removeAttribute(e)},setContent:function(e){t.root.textContent=e}})},e}(U),ui={ICON_EVENT:"MDCSelect:icon",ICON_ROLE:"button"},ci=["click","keydown"],li=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.savedTabIndex=null,i.interactionHandler=function(t){i.handleInteraction(t)},i}return w(e,t),Object.defineProperty(e,"strings",{get:function(){return ui},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{getAttr:function(){return null},setAttr:function(){},removeAttr:function(){},setContent:function(){},registerInteractionHandler:function(){},deregisterInteractionHandler:function(){},notifyIconAction:function(){}}},enumerable:!1,configurable:!0}),e.prototype.init=function(){var t,e;this.savedTabIndex=this.adapter.getAttr("tabindex");try{for(var n=F(ci),i=n.next();!i.done;i=n.next()){var r=i.value;this.adapter.registerInteractionHandler(r,this.interactionHandler)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.destroy=function(){var t,e;try{for(var n=F(ci),i=n.next();!i.done;i=n.next()){var r=i.value;this.adapter.deregisterInteractionHandler(r,this.interactionHandler)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.setDisabled=function(t){this.savedTabIndex&&(t?(this.adapter.setAttr("tabindex","-1"),this.adapter.removeAttr("role")):(this.adapter.setAttr("tabindex",this.savedTabIndex),this.adapter.setAttr("role",ui.ICON_ROLE)))},e.prototype.setAriaLabel=function(t){this.adapter.setAttr("aria-label",t)},e.prototype.setContent=function(t){this.adapter.setContent(t)},e.prototype.handleInteraction=function(t){var e="Enter"===t.key||13===t.keyCode;("click"===t.type||e)&&this.adapter.notifyIconAction()},e}(V); +var di=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},Object.defineProperty(e.prototype,"foundationForSelect",{get:function(){return this.foundation},enumerable:!1,configurable:!0}),e.prototype.getDefaultFoundation=function(){var t=this;return new li({getAttr:function(e){return t.root.getAttribute(e)},setAttr:function(e,n){return t.root.setAttribute(e,n)},removeAttr:function(e){return t.root.removeAttribute(e)},setContent:function(e){t.root.textContent=e},registerInteractionHandler:function(e,n){return t.listen(e,n)},deregisterInteractionHandler:function(e,n){return t.unlisten(e,n)},notifyIconAction:function(){return t.emit(li.strings.ICON_EVENT,{},!0)}})},e}(U),hi=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.initialize=function(t,e,n,i,r,o){if(void 0===t&&(t=function(t){return new X(t)}),void 0===e&&(e=function(t){return new Q(t)}),void 0===n&&(n=function(t){return new nt(t)}),void 0===i&&(i=function(t){return new Ne(t)}),void 0===r&&(r=function(t){return new di(t)}),void 0===o&&(o=function(t){return new si(t)}),this.selectAnchor=this.root.querySelector(ei.SELECT_ANCHOR_SELECTOR),this.selectedText=this.root.querySelector(ei.SELECTED_TEXT_SELECTOR),this.hiddenInput=this.root.querySelector(ei.HIDDEN_INPUT_SELECTOR),!this.selectedText)throw new Error("MDCSelect: Missing required element: The following selector must be present: '"+ei.SELECTED_TEXT_SELECTOR+"'");if(this.selectAnchor.hasAttribute(ei.ARIA_CONTROLS)){var a=document.getElementById(this.selectAnchor.getAttribute(ei.ARIA_CONTROLS));a&&(this.helperText=o(a))}this.menuSetup(i);var s=this.root.querySelector(ei.LABEL_SELECTOR);this.label=s?t(s):null;var u=this.root.querySelector(ei.LINE_RIPPLE_SELECTOR);this.lineRipple=u?e(u):null;var c=this.root.querySelector(ei.OUTLINE_SELECTOR);this.outline=c?n(c):null;var l=this.root.querySelector(ei.LEADING_ICON_SELECTOR);l&&(this.leadingIcon=r(l)),this.root.classList.contains(ti.OUTLINED)||(this.ripple=this.createRipple())},e.prototype.initialSyncWithDOM=function(){var t=this;if(this.handleFocus=function(){t.foundation.handleFocus()},this.handleBlur=function(){t.foundation.handleBlur()},this.handleClick=function(e){t.selectAnchor.focus(),t.foundation.handleClick(t.getNormalizedXCoordinate(e))},this.handleKeydown=function(e){t.foundation.handleKeydown(e)},this.handleMenuItemAction=function(e){t.foundation.handleMenuItemAction(e.detail.index)},this.handleMenuOpened=function(){t.foundation.handleMenuOpened()},this.handleMenuClosed=function(){t.foundation.handleMenuClosed()},this.handleMenuClosing=function(){t.foundation.handleMenuClosing()},this.selectAnchor.addEventListener("focus",this.handleFocus),this.selectAnchor.addEventListener("blur",this.handleBlur),this.selectAnchor.addEventListener("click",this.handleClick),this.selectAnchor.addEventListener("keydown",this.handleKeydown),this.menu.listen(Te.CLOSED_EVENT,this.handleMenuClosed),this.menu.listen(Te.CLOSING_EVENT,this.handleMenuClosing),this.menu.listen(Te.OPENED_EVENT,this.handleMenuOpened),this.menu.listen(Le.SELECTED_EVENT,this.handleMenuItemAction),this.hiddenInput){if(this.hiddenInput.value)return this.foundation.setValue(this.hiddenInput.value,!0),void this.foundation.layout();this.hiddenInput.value=this.value}},e.prototype.destroy=function(){this.selectAnchor.removeEventListener("focus",this.handleFocus),this.selectAnchor.removeEventListener("blur",this.handleBlur),this.selectAnchor.removeEventListener("keydown",this.handleKeydown),this.selectAnchor.removeEventListener("click",this.handleClick),this.menu.unlisten(Te.CLOSED_EVENT,this.handleMenuClosed),this.menu.unlisten(Te.OPENED_EVENT,this.handleMenuOpened),this.menu.unlisten(Le.SELECTED_EVENT,this.handleMenuItemAction),this.menu.destroy(),this.ripple&&this.ripple.destroy(),this.outline&&this.outline.destroy(),this.leadingIcon&&this.leadingIcon.destroy(),this.helperText&&this.helperText.destroy(),t.prototype.destroy.call(this)},Object.defineProperty(e.prototype,"value",{get:function(){return this.foundation.getValue()},set:function(t){this.foundation.setValue(t)},enumerable:!1,configurable:!0}),e.prototype.setValue=function(t,e){void 0===e&&(e=!1),this.foundation.setValue(t,e)},Object.defineProperty(e.prototype,"selectedIndex",{get:function(){return this.foundation.getSelectedIndex()},set:function(t){this.foundation.setSelectedIndex(t,!0)},enumerable:!1,configurable:!0}),e.prototype.setSelectedIndex=function(t,e){void 0===e&&(e=!1),this.foundation.setSelectedIndex(t,!0,e)},Object.defineProperty(e.prototype,"disabled",{get:function(){return this.foundation.getDisabled()},set:function(t){this.foundation.setDisabled(t),this.hiddenInput&&(this.hiddenInput.disabled=t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"leadingIconAriaLabel",{set:function(t){this.foundation.setLeadingIconAriaLabel(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"leadingIconContent",{set:function(t){this.foundation.setLeadingIconContent(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"helperTextContent",{set:function(t){this.foundation.setHelperTextContent(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"useDefaultValidation",{set:function(t){this.foundation.setUseDefaultValidation(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return this.foundation.isValid()},set:function(t){this.foundation.setValid(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"required",{get:function(){return this.foundation.getRequired()},set:function(t){this.foundation.setRequired(t)},enumerable:!1,configurable:!0}),e.prototype.layout=function(){this.foundation.layout()},e.prototype.layoutOptions=function(){this.foundation.layoutOptions(),this.menu.layout(),this.menuItemValues=this.menu.items.map((function(t){return t.getAttribute(ei.VALUE_ATTR)||""})),this.hiddenInput&&(this.hiddenInput.value=this.value)},e.prototype.getDefaultFoundation=function(){var t=P(P(P(P({},this.getSelectAdapterMethods()),this.getCommonAdapterMethods()),this.getOutlineAdapterMethods()),this.getLabelAdapterMethods());return new ii(t,this.getFoundationMap())},e.prototype.menuSetup=function(t){this.menuElement=this.root.querySelector(ei.MENU_SELECTOR),this.menu=t(this.menuElement),this.menu.hasTypeahead=!0,this.menu.singleSelection=!0,this.menuItemValues=this.menu.items.map((function(t){return t.getAttribute(ei.VALUE_ATTR)||""}))},e.prototype.createRipple=function(){var t=this,e=P(P({},lt.createAdapter({root:this.selectAnchor})),{registerInteractionHandler:function(e,n){t.selectAnchor.addEventListener(e,n)},deregisterInteractionHandler:function(e,n){t.selectAnchor.removeEventListener(e,n)}});return new lt(this.selectAnchor,new ct(e))},e.prototype.getSelectAdapterMethods=function(){var t=this;return{getMenuItemAttr:function(t,e){return t.getAttribute(e)},setSelectedText:function(e){t.selectedText.textContent=e},isSelectAnchorFocused:function(){return document.activeElement===t.selectAnchor},getSelectAnchorAttr:function(e){return t.selectAnchor.getAttribute(e)},setSelectAnchorAttr:function(e,n){t.selectAnchor.setAttribute(e,n)},removeSelectAnchorAttr:function(e){t.selectAnchor.removeAttribute(e)},addMenuClass:function(e){t.menuElement.classList.add(e)},removeMenuClass:function(e){t.menuElement.classList.remove(e)},openMenu:function(){t.menu.open=!0},closeMenu:function(){t.menu.open=!1},getAnchorElement:function(){return t.root.querySelector(ei.SELECT_ANCHOR_SELECTOR)},setMenuAnchorElement:function(e){t.menu.setAnchorElement(e)},setMenuAnchorCorner:function(e){t.menu.setAnchorCorner(e)},setMenuWrapFocus:function(e){t.menu.wrapFocus=e},getSelectedIndex:function(){var e=t.menu.selectedIndex;return e instanceof Array?e[0]:e},setSelectedIndex:function(e){t.menu.selectedIndex=e},focusMenuItemAtIndex:function(e){t.menu.items[e].focus()},getMenuItemCount:function(){return t.menu.items.length},getMenuItemValues:function(){return t.menuItemValues},getMenuItemTextAtIndex:function(e){return t.menu.getPrimaryTextAtIndex(e)},isTypeaheadInProgress:function(){return t.menu.typeaheadInProgress},typeaheadMatchItem:function(e,n){return t.menu.typeaheadMatchItem(e,n)}}},e.prototype.getCommonAdapterMethods=function(){var t=this;return{addClass:function(e){t.root.classList.add(e)},removeClass:function(e){t.root.classList.remove(e)},hasClass:function(e){return t.root.classList.contains(e)},setRippleCenter:function(e){t.lineRipple&&t.lineRipple.setRippleCenter(e)},activateBottomLine:function(){t.lineRipple&&t.lineRipple.activate()},deactivateBottomLine:function(){t.lineRipple&&t.lineRipple.deactivate()},notifyChange:function(e){t.hiddenInput&&(t.hiddenInput.value=e);var n=t.selectedIndex;t.emit(ei.CHANGE_EVENT,{value:e,index:n},!0)}}},e.prototype.getOutlineAdapterMethods=function(){var t=this;return{hasOutline:function(){return Boolean(t.outline)},notchOutline:function(e){t.outline&&t.outline.notch(e)},closeOutline:function(){t.outline&&t.outline.closeNotch()}}},e.prototype.getLabelAdapterMethods=function(){var t=this;return{hasLabel:function(){return!!t.label},floatLabel:function(e){t.label&&t.label.float(e)},getLabelWidth:function(){return t.label?t.label.getWidth():0},setLabelRequired:function(e){t.label&&t.label.setRequired(e)}}},e.prototype.getNormalizedXCoordinate=function(t){var e=t.target.getBoundingClientRect();return(this.isTouchEvent(t)?t.touches[0].clientX:t.clientX)-e.left},e.prototype.isTouchEvent=function(t){return Boolean(t.touches)},e.prototype.getFoundationMap=function(){return{helperText:this.helperText?this.helperText.foundationForSelect:void 0,leadingIcon:this.leadingIcon?this.leadingIcon.foundationForSelect:void 0}},e}(U);function pi(t,e,n){if(t&&e){t._select=hi.attachTo(t),t._menuSurface=Oe.attachTo(e);t._menuSurface.listen("MDCMenuSurface:opened",(function e(){t._menuSurface.unlisten("MDCMenuSurface:opened",e),n.invokeMethodAsync("NotifyOpened")}))}}function fi(t,e){t&&(t._select.disabled=e)}function mi(t,e){t&&(t.innerText=e,t.click())}function Ei(t,e){setTimeout((function(){var n=document.getElementById(t);n?n.scrollIntoView({behavior:"auto",block:"nearest",inline:"nearest"}):e<10&&Ei(t,e+1)}),16)}function gi(t){Ei(t,0)} +var Ti,yi="mdc-dom-focus-sentinel",Ai=function(){function t(t,e){void 0===e&&(e={}),this.root=t,this.options=e,this.elFocusedBeforeTrapFocus=null}return t.prototype.trapFocus=function(){var t=this.getFocusableElements(this.root);if(0===t.length)throw new Error("FocusTrap: Element must have at least one focusable child.");this.elFocusedBeforeTrapFocus=document.activeElement instanceof HTMLElement?document.activeElement:null,this.wrapTabFocus(this.root),this.options.skipInitialFocus||this.focusInitialElement(t,this.options.initialFocusEl)},t.prototype.releaseFocus=function(){[].slice.call(this.root.querySelectorAll("."+yi)).forEach((function(t){t.parentElement.removeChild(t)})),!this.options.skipRestoreFocus&&this.elFocusedBeforeTrapFocus&&this.elFocusedBeforeTrapFocus.focus()},t.prototype.wrapTabFocus=function(t){var e=this,n=this.createSentinel(),i=this.createSentinel();n.addEventListener("focus",(function(){var n=e.getFocusableElements(t);n.length>0&&n[n.length-1].focus()})),i.addEventListener("focus",(function(){var n=e.getFocusableElements(t);n.length>0&&n[0].focus()})),t.insertBefore(n,t.children[0]),t.appendChild(i)},t.prototype.focusInitialElement=function(t,e){var n=0;e&&(n=Math.max(t.indexOf(e),0)),t[n].focus()},t.prototype.getFocusableElements=function(t){return[].slice.call(t.querySelectorAll("[autofocus], [tabindex], a, input, textarea, select, button")).filter((function(t){var e="true"===t.getAttribute("aria-disabled")||null!=t.getAttribute("disabled")||null!=t.getAttribute("hidden")||"true"===t.getAttribute("aria-hidden"),n=t.tabIndex>=0&&t.getBoundingClientRect().width>0&&!t.classList.contains(yi)&&!e,i=!1;if(n){var r=getComputedStyle(t);i="none"===r.display||"hidden"===r.visibility}return n&&!i}))},t.prototype.createSentinel=function(){var t=document.createElement("div");return t.setAttribute("tabindex","0"),t.setAttribute("aria-hidden","true"),t.classList.add(yi),t},t}(),vi=function(){function t(){this.rafIDs=new Map}return t.prototype.request=function(t,e){var n=this;this.cancel(t);var i=requestAnimationFrame((function(i){n.rafIDs.delete(t),e(i)}));this.rafIDs.set(t,i)},t.prototype.cancel=function(t){var e=this.rafIDs.get(t);e&&(cancelAnimationFrame(e),this.rafIDs.delete(t))},t.prototype.cancelAll=function(){var t=this;this.rafIDs.forEach((function(e,n){t.cancel(n)}))},t.prototype.getQueue=function(){var t=[];return this.rafIDs.forEach((function(e,n){t.push(n)})),t},t}(),Ci={CLOSING:"mdc-dialog--closing",OPEN:"mdc-dialog--open",OPENING:"mdc-dialog--opening",SCROLLABLE:"mdc-dialog--scrollable",SCROLL_LOCK:"mdc-dialog-scroll-lock",STACKED:"mdc-dialog--stacked",FULLSCREEN:"mdc-dialog--fullscreen",SCROLL_DIVIDER_HEADER:"mdc-dialog-scroll-divider-header",SCROLL_DIVIDER_FOOTER:"mdc-dialog-scroll-divider-footer",SURFACE_SCRIM_SHOWN:"mdc-dialog__surface-scrim--shown",SURFACE_SCRIM_SHOWING:"mdc-dialog__surface-scrim--showing",SURFACE_SCRIM_HIDING:"mdc-dialog__surface-scrim--hiding",SCRIM_HIDDEN:"mdc-dialog__scrim--hidden"},Ii={ACTION_ATTRIBUTE:"data-mdc-dialog-action",BUTTON_DEFAULT_ATTRIBUTE:"data-mdc-dialog-button-default",BUTTON_SELECTOR:".mdc-dialog__button",CLOSED_EVENT:"MDCDialog:closed",CLOSE_ACTION:"close",CLOSING_EVENT:"MDCDialog:closing",CONTAINER_SELECTOR:".mdc-dialog__container",CONTENT_SELECTOR:".mdc-dialog__content",DESTROY_ACTION:"destroy",INITIAL_FOCUS_ATTRIBUTE:"data-mdc-dialog-initial-focus",OPENED_EVENT:"MDCDialog:opened",OPENING_EVENT:"MDCDialog:opening",SCRIM_SELECTOR:".mdc-dialog__scrim",SUPPRESS_DEFAULT_PRESS_SELECTOR:["textarea",".mdc-menu .mdc-list-item",".mdc-menu .mdc-deprecated-list-item"].join(", "),SURFACE_SELECTOR:".mdc-dialog__surface"},Si={DIALOG_ANIMATION_CLOSE_TIME_MS:75,DIALOG_ANIMATION_OPEN_TIME_MS:150};!function(t){t.POLL_SCROLL_POS="poll_scroll_position",t.POLL_LAYOUT_CHANGE="poll_layout_change"}(Ti||(Ti={}));var bi=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.dialogOpen=!1,i.isFullscreen=!1,i.animationFrame=0,i.animationTimer=0,i.escapeKeyAction=Ii.CLOSE_ACTION,i.scrimClickAction=Ii.CLOSE_ACTION,i.autoStackButtons=!0,i.areButtonsStacked=!1,i.suppressDefaultPressSelector=Ii.SUPPRESS_DEFAULT_PRESS_SELECTOR,i.animFrame=new vi,i.contentScrollHandler=function(){i.handleScrollEvent()},i.windowResizeHandler=function(){i.layout()},i.windowOrientationChangeHandler=function(){i.layout()},i}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return Ci},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return Ii},enumerable:!1,configurable:!0}),Object.defineProperty(e,"numbers",{get:function(){return Si},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addBodyClass:function(){},addClass:function(){},areButtonsStacked:function(){return!1},clickDefaultButton:function(){},eventTargetMatches:function(){return!1},getActionFromEvent:function(){return""},getInitialFocusEl:function(){return null},hasClass:function(){return!1},isContentScrollable:function(){return!1},notifyClosed:function(){},notifyClosing:function(){},notifyOpened:function(){},notifyOpening:function(){},releaseFocus:function(){},removeBodyClass:function(){},removeClass:function(){},reverseButtons:function(){},trapFocus:function(){},registerContentEventHandler:function(){},deregisterContentEventHandler:function(){},isScrollableContentAtTop:function(){return!1},isScrollableContentAtBottom:function(){return!1},registerWindowEventHandler:function(){},deregisterWindowEventHandler:function(){}}},enumerable:!1,configurable:!0}),e.prototype.init=function(){this.adapter.hasClass(Ci.STACKED)&&this.setAutoStackButtons(!1),this.isFullscreen=this.adapter.hasClass(Ci.FULLSCREEN)},e.prototype.destroy=function(){this.animationTimer&&(clearTimeout(this.animationTimer),this.handleAnimationTimerEnd()),this.isFullscreen&&this.adapter.deregisterContentEventHandler("scroll",this.contentScrollHandler),this.animFrame.cancelAll(),this.adapter.deregisterWindowEventHandler("resize",this.windowResizeHandler),this.adapter.deregisterWindowEventHandler("orientationchange",this.windowOrientationChangeHandler)},e.prototype.open=function(t){var e=this;this.dialogOpen=!0,this.adapter.notifyOpening(),this.adapter.addClass(Ci.OPENING),this.isFullscreen&&this.adapter.registerContentEventHandler("scroll",this.contentScrollHandler),t&&t.isAboveFullscreenDialog&&this.adapter.addClass(Ci.SCRIM_HIDDEN),this.adapter.registerWindowEventHandler("resize",this.windowResizeHandler),this.adapter.registerWindowEventHandler("orientationchange",this.windowOrientationChangeHandler),this.runNextAnimationFrame((function(){e.adapter.addClass(Ci.OPEN),e.adapter.addBodyClass(Ci.SCROLL_LOCK),e.layout(),e.animationTimer=setTimeout((function(){e.handleAnimationTimerEnd(),e.adapter.trapFocus(e.adapter.getInitialFocusEl()),e.adapter.notifyOpened()}),Si.DIALOG_ANIMATION_OPEN_TIME_MS)}))},e.prototype.close=function(t){var e=this;void 0===t&&(t=""),this.dialogOpen&&(this.dialogOpen=!1,this.adapter.notifyClosing(t),this.adapter.addClass(Ci.CLOSING),this.adapter.removeClass(Ci.OPEN),this.adapter.removeBodyClass(Ci.SCROLL_LOCK),this.isFullscreen&&this.adapter.deregisterContentEventHandler("scroll",this.contentScrollHandler),this.adapter.deregisterWindowEventHandler("resize",this.windowResizeHandler),this.adapter.deregisterWindowEventHandler("orientationchange",this.windowOrientationChangeHandler),cancelAnimationFrame(this.animationFrame),this.animationFrame=0,clearTimeout(this.animationTimer),this.animationTimer=setTimeout((function(){e.adapter.releaseFocus(),e.handleAnimationTimerEnd(),e.adapter.notifyClosed(t)}),Si.DIALOG_ANIMATION_CLOSE_TIME_MS))},e.prototype.showSurfaceScrim=function(){var t=this;this.adapter.addClass(Ci.SURFACE_SCRIM_SHOWING),this.runNextAnimationFrame((function(){t.adapter.addClass(Ci.SURFACE_SCRIM_SHOWN)}))},e.prototype.hideSurfaceScrim=function(){this.adapter.removeClass(Ci.SURFACE_SCRIM_SHOWN),this.adapter.addClass(Ci.SURFACE_SCRIM_HIDING)},e.prototype.handleSurfaceScrimTransitionEnd=function(){this.adapter.removeClass(Ci.SURFACE_SCRIM_HIDING),this.adapter.removeClass(Ci.SURFACE_SCRIM_SHOWING)},e.prototype.isOpen=function(){return this.dialogOpen},e.prototype.getEscapeKeyAction=function(){return this.escapeKeyAction},e.prototype.setEscapeKeyAction=function(t){this.escapeKeyAction=t},e.prototype.getScrimClickAction=function(){return this.scrimClickAction},e.prototype.setScrimClickAction=function(t){this.scrimClickAction=t},e.prototype.getAutoStackButtons=function(){return this.autoStackButtons},e.prototype.setAutoStackButtons=function(t){this.autoStackButtons=t},e.prototype.getSuppressDefaultPressSelector=function(){return this.suppressDefaultPressSelector},e.prototype.setSuppressDefaultPressSelector=function(t){this.suppressDefaultPressSelector=t},e.prototype.layout=function(){var t=this;this.animFrame.request(Ti.POLL_LAYOUT_CHANGE,(function(){t.layoutInternal()}))},e.prototype.handleClick=function(t){if(this.adapter.eventTargetMatches(t.target,Ii.SCRIM_SELECTOR)&&""!==this.scrimClickAction)this.close(this.scrimClickAction);else{var e=this.adapter.getActionFromEvent(t);e&&this.close(e)}},e.prototype.handleKeydown=function(t){var e="Enter"===t.key||13===t.keyCode;if(e&&!this.adapter.getActionFromEvent(t)){var n=t.composedPath?t.composedPath()[0]:t.target,i=!this.suppressDefaultPressSelector||!this.adapter.eventTargetMatches(n,this.suppressDefaultPressSelector);e&&i&&this.adapter.clickDefaultButton()}},e.prototype.handleDocumentKeydown=function(t){("Escape"===t.key||27===t.keyCode)&&""!==this.escapeKeyAction&&this.close(this.escapeKeyAction)},e.prototype.handleScrollEvent=function(){var t=this;this.animFrame.request(Ti.POLL_SCROLL_POS,(function(){t.toggleScrollDividerHeader(),t.toggleScrollDividerFooter()}))},e.prototype.layoutInternal=function(){this.autoStackButtons&&this.detectStackedButtons(),this.toggleScrollableClasses()},e.prototype.handleAnimationTimerEnd=function(){this.animationTimer=0,this.adapter.removeClass(Ci.OPENING),this.adapter.removeClass(Ci.CLOSING)},e.prototype.runNextAnimationFrame=function(t){var e=this;cancelAnimationFrame(this.animationFrame),this.animationFrame=requestAnimationFrame((function(){e.animationFrame=0,clearTimeout(e.animationTimer),e.animationTimer=setTimeout(t,0)}))},e.prototype.detectStackedButtons=function(){this.adapter.removeClass(Ci.STACKED);var t=this.adapter.areButtonsStacked();t&&this.adapter.addClass(Ci.STACKED),t!==this.areButtonsStacked&&(this.adapter.reverseButtons(),this.areButtonsStacked=t)},e.prototype.toggleScrollableClasses=function(){this.adapter.removeClass(Ci.SCROLLABLE),this.adapter.isContentScrollable()&&(this.adapter.addClass(Ci.SCROLLABLE),this.isFullscreen&&(this.toggleScrollDividerHeader(),this.toggleScrollDividerFooter()))},e.prototype.toggleScrollDividerHeader=function(){this.adapter.isScrollableContentAtTop()?this.adapter.hasClass(Ci.SCROLL_DIVIDER_HEADER)&&this.adapter.removeClass(Ci.SCROLL_DIVIDER_HEADER):this.adapter.addClass(Ci.SCROLL_DIVIDER_HEADER)},e.prototype.toggleScrollDividerFooter=function(){this.adapter.isScrollableContentAtBottom()?this.adapter.hasClass(Ci.SCROLL_DIVIDER_FOOTER)&&this.adapter.removeClass(Ci.SCROLL_DIVIDER_FOOTER):this.adapter.addClass(Ci.SCROLL_DIVIDER_FOOTER)},e}(V); +var _i=bi.strings,Oi=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),Object.defineProperty(e.prototype,"isOpen",{get:function(){return this.foundation.isOpen()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"escapeKeyAction",{get:function(){return this.foundation.getEscapeKeyAction()},set:function(t){this.foundation.setEscapeKeyAction(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"scrimClickAction",{get:function(){return this.foundation.getScrimClickAction()},set:function(t){this.foundation.setScrimClickAction(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"autoStackButtons",{get:function(){return this.foundation.getAutoStackButtons()},set:function(t){this.foundation.setAutoStackButtons(t)},enumerable:!1,configurable:!0}),e.attachTo=function(t){return new e(t)},e.prototype.initialize=function(t){var e,n;void 0===t&&(t=function(t,e){return new Ai(t,e)});var i=this.root.querySelector(_i.CONTAINER_SELECTOR);if(!i)throw new Error("Dialog component requires a "+_i.CONTAINER_SELECTOR+" container element");this.container=i,this.content=this.root.querySelector(_i.CONTENT_SELECTOR),this.buttons=[].slice.call(this.root.querySelectorAll(_i.BUTTON_SELECTOR)),this.defaultButton=this.root.querySelector("["+_i.BUTTON_DEFAULT_ATTRIBUTE+"]"),this.focusTrapFactory=t,this.buttonRipples=[];try{for(var r=F(this.buttons),o=r.next();!o.done;o=r.next()){var a=o.value;this.buttonRipples.push(new lt(a))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}},e.prototype.initialSyncWithDOM=function(){var t,e,n,i=this;this.focusTrap=(t=this.container,e=this.focusTrapFactory,n=this.getInitialFocusEl()||void 0,e(t,{initialFocusEl:n})),this.handleClick=this.foundation.handleClick.bind(this.foundation),this.handleKeydown=this.foundation.handleKeydown.bind(this.foundation),this.handleDocumentKeydown=this.foundation.handleDocumentKeydown.bind(this.foundation),this.handleOpening=function(){document.addEventListener("keydown",i.handleDocumentKeydown)},this.handleClosing=function(){document.removeEventListener("keydown",i.handleDocumentKeydown)},this.listen("click",this.handleClick),this.listen("keydown",this.handleKeydown),this.listen(_i.OPENING_EVENT,this.handleOpening),this.listen(_i.CLOSING_EVENT,this.handleClosing)},e.prototype.destroy=function(){this.unlisten("click",this.handleClick),this.unlisten("keydown",this.handleKeydown),this.unlisten(_i.OPENING_EVENT,this.handleOpening),this.unlisten(_i.CLOSING_EVENT,this.handleClosing),this.handleClosing(),this.buttonRipples.forEach((function(t){t.destroy()})),t.prototype.destroy.call(this)},e.prototype.layout=function(){this.foundation.layout()},e.prototype.open=function(){this.foundation.open()},e.prototype.close=function(t){void 0===t&&(t=""),this.foundation.close(t)},e.prototype.getDefaultFoundation=function(){var t=this;return new bi({addBodyClass:function(t){return document.body.classList.add(t)},addClass:function(e){return t.root.classList.add(e)},areButtonsStacked:function(){return e=t.buttons,n=new Set,[].forEach.call(e,(function(t){return n.add(t.offsetTop)})),n.size>1;var e,n},clickDefaultButton:function(){t.defaultButton&&!t.defaultButton.disabled&&t.defaultButton.click()},eventTargetMatches:function(t,e){return!!t&&G(t,e)},getActionFromEvent:function(t){if(!t.target)return"";var e=j(t.target,"["+_i.ACTION_ATTRIBUTE+"]");return e&&e.getAttribute(_i.ACTION_ATTRIBUTE)},getInitialFocusEl:function(){return t.getInitialFocusEl()},hasClass:function(e){return t.root.classList.contains(e)},isContentScrollable:function(){return!!(e=t.content)&&e.scrollHeight>e.offsetHeight;var e},notifyClosed:function(e){return t.emit(_i.CLOSED_EVENT,e?{action:e}:{})},notifyClosing:function(e){return t.emit(_i.CLOSING_EVENT,e?{action:e}:{})},notifyOpened:function(){return t.emit(_i.OPENED_EVENT,{})},notifyOpening:function(){return t.emit(_i.OPENING_EVENT,{})},releaseFocus:function(){t.focusTrap.releaseFocus()},removeBodyClass:function(t){return document.body.classList.remove(t)},removeClass:function(e){return t.root.classList.remove(e)},reverseButtons:function(){t.buttons.reverse(),t.buttons.forEach((function(t){t.parentElement.appendChild(t)}))},trapFocus:function(){t.focusTrap.trapFocus()},registerContentEventHandler:function(e,n){t.content instanceof HTMLElement&&t.content.addEventListener(e,n)},deregisterContentEventHandler:function(e,n){t.content instanceof HTMLElement&&t.content.removeEventListener(e,n)},isScrollableContentAtTop:function(){return!!(e=t.content)&&0===e.scrollTop;var e},isScrollableContentAtBottom:function(){return!!(e=t.content)&&Math.ceil(e.scrollHeight-e.scrollTop)===e.clientHeight;var e},registerWindowEventHandler:function(t,e){window.addEventListener(t,e)},deregisterWindowEventHandler:function(t,e){window.removeEventListener(t,e)}})},e.prototype.getInitialFocusEl=function(){return this.root.querySelector("["+_i.INITIAL_FOCUS_ATTRIBUTE+"]")},e}(U);function Ri(t,e,n,i){if(t){t._dialog=t._dialog||Oi.attachTo(t),t._dotNetObject=e;var r=t._dialog;r.listen("MDCDialog:opened",(function t(){r.unlisten("MDCDialog:opened",t),e.invokeMethodAsync("NotifyOpened")})),r.escapeKeyAction=n,r.scrimClickAction=i;r.listen("MDCDialog:closing",(function t(n){r.unlisten("MDCDialog:closing",t),e.invokeMethodAsync("NotifyClosed",n.detail.action)})),r.open()}}function Li(t,e){t&&t&&t._dialog&&(t._dialog.close(e||"dismissed"),t._dialog.destroy())} +var Di={ANIMATE:"mdc-drawer--animate",CLOSING:"mdc-drawer--closing",DISMISSIBLE:"mdc-drawer--dismissible",MODAL:"mdc-drawer--modal",OPEN:"mdc-drawer--open",OPENING:"mdc-drawer--opening",ROOT:"mdc-drawer"},xi={APP_CONTENT_SELECTOR:".mdc-drawer-app-content",CLOSE_EVENT:"MDCDrawer:closed",OPEN_EVENT:"MDCDrawer:opened",SCRIM_SELECTOR:".mdc-drawer-scrim",LIST_SELECTOR:".mdc-list,.mdc-deprecated-list",LIST_ITEM_ACTIVATED_SELECTOR:".mdc-list-item--activated,.mdc-deprecated-list-item--activated"},Ni=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.animationFrame=0,i.animationTimer=0,i}return w(e,t),Object.defineProperty(e,"strings",{get:function(){return xi},enumerable:!1,configurable:!0}),Object.defineProperty(e,"cssClasses",{get:function(){return Di},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},removeClass:function(){},hasClass:function(){return!1},elementHasClass:function(){return!1},notifyClose:function(){},notifyOpen:function(){},saveFocus:function(){},restoreFocus:function(){},focusActiveNavigationItem:function(){},trapFocus:function(){},releaseFocus:function(){}}},enumerable:!1,configurable:!0}),e.prototype.destroy=function(){this.animationFrame&&cancelAnimationFrame(this.animationFrame),this.animationTimer&&clearTimeout(this.animationTimer)},e.prototype.open=function(){var t=this;this.isOpen()||this.isOpening()||this.isClosing()||(this.adapter.addClass(Di.OPEN),this.adapter.addClass(Di.ANIMATE),this.runNextAnimationFrame((function(){t.adapter.addClass(Di.OPENING)})),this.adapter.saveFocus())},e.prototype.close=function(){!this.isOpen()||this.isOpening()||this.isClosing()||this.adapter.addClass(Di.CLOSING)},e.prototype.isOpen=function(){return this.adapter.hasClass(Di.OPEN)},e.prototype.isOpening=function(){return this.adapter.hasClass(Di.OPENING)||this.adapter.hasClass(Di.ANIMATE)},e.prototype.isClosing=function(){return this.adapter.hasClass(Di.CLOSING)},e.prototype.handleKeydown=function(t){var e=t.keyCode;("Escape"===t.key||27===e)&&this.close()},e.prototype.handleTransitionEnd=function(t){var e=Di.OPENING,n=Di.CLOSING,i=Di.OPEN,r=Di.ANIMATE,o=Di.ROOT;this.isElement(t.target)&&this.adapter.elementHasClass(t.target,o)&&(this.isClosing()?(this.adapter.removeClass(i),this.closed(),this.adapter.restoreFocus(),this.adapter.notifyClose()):(this.adapter.focusActiveNavigationItem(),this.opened(),this.adapter.notifyOpen()),this.adapter.removeClass(r),this.adapter.removeClass(e),this.adapter.removeClass(n))},e.prototype.opened=function(){},e.prototype.closed=function(){},e.prototype.runNextAnimationFrame=function(t){var e=this;cancelAnimationFrame(this.animationFrame),this.animationFrame=requestAnimationFrame((function(){e.animationFrame=0,clearTimeout(e.animationTimer),e.animationTimer=setTimeout(t,0)}))},e.prototype.isElement=function(t){return Boolean(t.classList)},e}(V); +var wi=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.prototype.handleScrimClick=function(){this.close()},e.prototype.opened=function(){this.adapter.trapFocus()},e.prototype.closed=function(){this.adapter.releaseFocus()},e}(Ni); +var Pi=Ni.cssClasses,Mi=Ni.strings,Hi=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},Object.defineProperty(e.prototype,"open",{get:function(){return this.foundation.isOpen()},set:function(t){t?this.foundation.open():this.foundation.close()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"list",{get:function(){return this.innerList},enumerable:!1,configurable:!0}),e.prototype.initialize=function(t,e){void 0===t&&(t=function(t){return new Ai(t)}),void 0===e&&(e=function(t){return new Ee(t)});var n=this.root.querySelector(Mi.LIST_SELECTOR);n&&(this.innerList=e(n),this.innerList.wrapFocus=!0),this.focusTrapFactory=t},e.prototype.initialSyncWithDOM=function(){var t,e=this,n=Pi.MODAL,i=Mi.SCRIM_SELECTOR;this.scrim=this.root.parentNode.querySelector(i),this.scrim&&this.root.classList.contains(n)&&(this.handleScrimClick=function(){return e.foundation.handleScrimClick()},this.scrim.addEventListener("click",this.handleScrimClick),this.focusTrap=(t=this.root,(0,this.focusTrapFactory)(t,{skipInitialFocus:!0}))),this.handleKeydown=function(t){e.foundation.handleKeydown(t)},this.handleTransitionEnd=function(t){e.foundation.handleTransitionEnd(t)},this.listen("keydown",this.handleKeydown),this.listen("transitionend",this.handleTransitionEnd)},e.prototype.destroy=function(){this.unlisten("keydown",this.handleKeydown),this.unlisten("transitionend",this.handleTransitionEnd),this.innerList&&this.innerList.destroy();var t=Pi.MODAL;this.scrim&&this.handleScrimClick&&this.root.classList.contains(t)&&(this.scrim.removeEventListener("click",this.handleScrimClick),this.open=!1)},e.prototype.getDefaultFoundation=function(){var t=this,e={addClass:function(e){t.root.classList.add(e)},removeClass:function(e){t.root.classList.remove(e)},hasClass:function(e){return t.root.classList.contains(e)},elementHasClass:function(t,e){return t.classList.contains(e)},saveFocus:function(){t.previousFocus=document.activeElement},restoreFocus:function(){var e=t.previousFocus;e&&e.focus&&t.root.contains(document.activeElement)&&e.focus()},focusActiveNavigationItem:function(){var e=t.root.querySelector(Mi.LIST_ITEM_ACTIVATED_SELECTOR);e&&e.focus()},notifyClose:function(){t.emit(Mi.CLOSE_EVENT,{},!0)},notifyOpen:function(){t.emit(Mi.OPEN_EVENT,{},!0)},trapFocus:function(){t.focusTrap.trapFocus()},releaseFocus:function(){t.focusTrap.releaseFocus()}},n=Pi.DISMISSIBLE,i=Pi.MODAL;if(this.root.classList.contains(n))return new Ni(e);if(this.root.classList.contains(i))return new wi(e);throw new Error("MDCDrawer: Failed to instantiate component. Supported variants are "+n+" and "+i+".")},e}(U);function Fi(t,e){t&&(t._drawer=Hi.attachTo(t),ki(t,e))}function ki(t,e){t&&(t._drawer.open=e)}function Bi(t){t&&t.addEventListener("dragover",(function(t){t.preventDefault()}))}function Vi(t){t&&t.querySelector("input").click()}function Ui(t,e){t._fab=lt.attachTo(t),t._exited=!1,Wi(t,e)}function Wi(t,e){t&&(e!=t._exited?t.classList.add("mdc-fab--exited"):t.classList.remove("mdc-fab--exited"))}function ji(t){t&&(t._ripple=lt.attachTo(t),t._ripple.unbounded=!0)} +var Gi={ICON_BUTTON_ON:"mdc-icon-button--on",ROOT:"mdc-icon-button"},Ki={ARIA_LABEL:"aria-label",ARIA_PRESSED:"aria-pressed",DATA_ARIA_LABEL_OFF:"data-aria-label-off",DATA_ARIA_LABEL_ON:"data-aria-label-on",CHANGE_EVENT:"MDCIconButtonToggle:change"},qi=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.hasToggledAriaLabel=!1,i}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return Gi},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return Ki},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},hasClass:function(){return!1},notifyChange:function(){},removeClass:function(){},getAttr:function(){return null},setAttr:function(){}}},enumerable:!1,configurable:!0}),e.prototype.init=function(){var t=this.adapter.getAttr(Ki.DATA_ARIA_LABEL_ON),e=this.adapter.getAttr(Ki.DATA_ARIA_LABEL_OFF);if(t&&e){if(null!==this.adapter.getAttr(Ki.ARIA_PRESSED))throw new Error("MDCIconButtonToggleFoundation: Button should not set `aria-pressed` if it has a toggled aria label.");this.hasToggledAriaLabel=!0}else this.adapter.setAttr(Ki.ARIA_PRESSED,String(this.isOn()))},e.prototype.handleClick=function(){this.toggle(),this.adapter.notifyChange({isOn:this.isOn()})},e.prototype.isOn=function(){return this.adapter.hasClass(Gi.ICON_BUTTON_ON)},e.prototype.toggle=function(t){if(void 0===t&&(t=!this.isOn()),t?this.adapter.addClass(Gi.ICON_BUTTON_ON):this.adapter.removeClass(Gi.ICON_BUTTON_ON),this.hasToggledAriaLabel){var e=t?this.adapter.getAttr(Ki.DATA_ARIA_LABEL_ON):this.adapter.getAttr(Ki.DATA_ARIA_LABEL_OFF);this.adapter.setAttr(Ki.ARIA_LABEL,e||"")}else this.adapter.setAttr(Ki.ARIA_PRESSED,""+t)},e}(V); +var Xi=qi.strings,zi=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.rippleComponent=e.createRipple(),e}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.initialSyncWithDOM=function(){var t=this;this.handleClick=function(){t.foundation.handleClick()},this.listen("click",this.handleClick)},e.prototype.destroy=function(){this.unlisten("click",this.handleClick),this.ripple.destroy(),t.prototype.destroy.call(this)},e.prototype.getDefaultFoundation=function(){var t=this;return new qi({addClass:function(e){return t.root.classList.add(e)},hasClass:function(e){return t.root.classList.contains(e)},notifyChange:function(e){t.emit(Xi.CHANGE_EVENT,e)},removeClass:function(e){return t.root.classList.remove(e)},getAttr:function(e){return t.root.getAttribute(e)},setAttr:function(e,n){return t.root.setAttribute(e,n)}})},Object.defineProperty(e.prototype,"ripple",{get:function(){return this.rippleComponent},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"on",{get:function(){return this.foundation.isOn()},set:function(t){this.foundation.toggle(t)},enumerable:!1,configurable:!0}),e.prototype.createRipple=function(){var t=new lt(this.root);return t.unbounded=!0,t},e}(U);function Yi(t){t&&(t._iconButtonToggle=zi.attachTo(t))}function Qi(t,e){t&&(t._iconButtonToggle.on=e)}function Zi(t){t&&t._iconButtonToggle.root.click()}function $i(t,e,n){t&&(t._linearProgress=Dn.attachTo(t),Ji(t,e,n))}function Ji(t,e,n){t&&(t._linearProgress.progress=e,t._linearProgress.buffer=n)}function tr(t){t&&t._linearProgress.foundation.restartAnimation()}function er(t,e,n){t&&1==e&&(t._list=Ee.attachTo(t),1==n&&t._list.listElements.map((function(t){return lt.attachTo(t)})))}function nr(t,e){if(t){t._menu=Ne.attachTo(t);t._menu.listen("MDCMenuSurface:closed",(function(){e.invokeMethodAsync("NotifyClosed")}))}}function ir(t){t&&t._menu&&(t._menu.open=!0)}function rr(t){t&&t._menu&&(t._menu.open=!1)}function or(t,e){if(t){t._menu=Oe.attachTo(t);t._menu.listen("MDCMenuSurface:closed",(function(){e.invokeMethodAsync("NotifyClosed")}))}}function ar(t){t&&t._menu&&t._menu.open()}function sr(t){t&&t._menu&&t._menu.close()} +var ur={NATIVE_CONTROL_SELECTOR:".mdc-radio__native-control"},cr={DISABLED:"mdc-radio--disabled",ROOT:"mdc-radio"},lr=function(t){function e(n){return t.call(this,P(P({},e.defaultAdapter),n))||this}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return cr},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return ur},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},removeClass:function(){},setNativeControlDisabled:function(){}}},enumerable:!1,configurable:!0}),e.prototype.setDisabled=function(t){var n=e.cssClasses.DISABLED;this.adapter.setNativeControlDisabled(t),t?this.adapter.addClass(n):this.adapter.removeClass(n)},e}(V); +var dr=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.rippleSurface=e.createRipple(),e}return w(e,t),e.attachTo=function(t){return new e(t)},Object.defineProperty(e.prototype,"checked",{get:function(){return this.nativeControl.checked},set:function(t){this.nativeControl.checked=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this.nativeControl.disabled},set:function(t){this.foundation.setDisabled(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.nativeControl.value},set:function(t){this.nativeControl.value=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"ripple",{get:function(){return this.rippleSurface},enumerable:!1,configurable:!0}),e.prototype.destroy=function(){this.rippleSurface.destroy(),t.prototype.destroy.call(this)},e.prototype.getDefaultFoundation=function(){var t=this;return new lr({addClass:function(e){return t.root.classList.add(e)},removeClass:function(e){return t.root.classList.remove(e)},setNativeControlDisabled:function(e){return t.nativeControl.disabled=e}})},e.prototype.createRipple=function(){var t=this,e=P(P({},lt.createAdapter(this)),{registerInteractionHandler:function(e,n){t.nativeControl.addEventListener(e,n,W())},deregisterInteractionHandler:function(e,n){t.nativeControl.removeEventListener(e,n,W())},isSurfaceActive:function(){return!1},isUnbounded:function(){return!0}});return new lt(this.root,new ct(e))},Object.defineProperty(e.prototype,"nativeControl",{get:function(){var t=lr.strings.NATIVE_CONTROL_SELECTOR,e=this.root.querySelector(t);if(!e)throw new Error("Radio component requires a "+t+" element");return e},enumerable:!1,configurable:!0}),e}(U);function hr(t,e,n){t&&(t._radio=dr.attachTo(t),t._radio.checked=n,t._formField=ln.attachTo(e),t._formField.input=t._radio)}function pr(t,e){t&&(t._radio.disabled=e)}function fr(t,e){t&&(t._radio.checked=e)} +var mr=".mdc-segmented-button__segment",Er="selected",gr="change",Tr="mdc-segmented-button--single-select",yr=function(t){function e(n){return t.call(this,P(P({},e.defaultAdapter),n))||this}return w(e,t),Object.defineProperty(e,"defaultAdapter",{get:function(){return{hasClass:function(){return!1},getSegments:function(){return[]},selectSegment:function(){},unselectSegment:function(){},notifySelectedChange:function(){}}},enumerable:!1,configurable:!0}),e.prototype.selectSegment=function(t){this.adapter.selectSegment(t)},e.prototype.unselectSegment=function(t){this.adapter.unselectSegment(t)},e.prototype.getSelectedSegments=function(){return this.adapter.getSegments().filter((function(t){return t.selected}))},e.prototype.isSegmentSelected=function(t){return this.adapter.getSegments().some((function(e){return(e.index===t||e.segmentId===t)&&e.selected}))},e.prototype.isSingleSelect=function(){return this.adapter.hasClass(Tr)},e.prototype.handleSelected=function(t){this.isSingleSelect()&&this.unselectPrevSelected(t.index),this.adapter.notifySelectedChange(t)},e.prototype.unselectPrevSelected=function(t){var e,n;try{for(var i=F(this.getSelectedSegments()),r=i.next();!r.done;r=i.next()){var o=r.value;o.index!==t&&this.unselectSegment(o.index)}}catch(t){e={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}},e}(V),Ar="true",vr="false",Cr="aria-checked",Ir="aria-pressed",Sr="data-segment-id",br="click",_r="selected",Or="mdc-segmented-button__segment--selected",Rr={bottom:0,height:0,left:0,right:0,top:0,width:0},Lr=function(t){function e(n){return t.call(this,P(P({},e.defaultAdapter),n))||this}return w(e,t),Object.defineProperty(e,"defaultAdapter",{get:function(){return{isSingleSelect:function(){return!1},getAttr:function(){return""},setAttr:function(){},addClass:function(){},removeClass:function(){},hasClass:function(){return!1},notifySelectedChange:function(){},getRootBoundingClientRect:function(){return Rr}}},enumerable:!1,configurable:!0}),e.prototype.isSelected=function(){return this.adapter.hasClass(Or)},e.prototype.setSelected=function(){this.adapter.addClass(Or),this.setAriaAttr(Ar)},e.prototype.setUnselected=function(){this.adapter.removeClass(Or),this.setAriaAttr(vr)},e.prototype.getSegmentId=function(){var t;return null!==(t=this.adapter.getAttr(Sr))&&void 0!==t?t:void 0},e.prototype.handleClick=function(){this.adapter.isSingleSelect()?this.setSelected():this.toggleSelection(),this.adapter.notifySelectedChange(this.isSelected())},e.prototype.getDimensions=function(){return this.adapter.getRootBoundingClientRect()},e.prototype.toggleSelection=function(){this.isSelected()?this.setUnselected():this.setSelected()},e.prototype.setAriaAttr=function(t){this.adapter.isSingleSelect()?this.adapter.setAttr(Cr,t):this.adapter.setAttr(Ir,t)},e}(V),Dr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),Object.defineProperty(e.prototype,"ripple",{get:function(){return this.rippleComponent},enumerable:!1,configurable:!0}),e.attachTo=function(t){return new e(t)},e.prototype.initialize=function(t){var e=this;void 0===t&&(t=function(t,e){return new lt(t,e)});var n=P(P({},lt.createAdapter(this)),{computeBoundingRect:function(){return e.foundation.getDimensions()}});this.rippleComponent=t(this.root,new ct(n))},e.prototype.initialSyncWithDOM=function(){var t=this;this.handleClick=function(){t.foundation.handleClick()},this.listen(br,this.handleClick)},e.prototype.destroy=function(){this.ripple.destroy(),this.unlisten(br,this.handleClick),t.prototype.destroy.call(this)},e.prototype.getDefaultFoundation=function(){var t=this;return new Lr({isSingleSelect:function(){return t.isSingleSelect},getAttr:function(e){return t.root.getAttribute(e)},setAttr:function(e,n){t.root.setAttribute(e,n)},addClass:function(e){t.root.classList.add(e)},removeClass:function(e){t.root.classList.remove(e)},hasClass:function(e){return t.root.classList.contains(e)},notifySelectedChange:function(e){t.emit(_r,{index:t.index,selected:e,segmentId:t.getSegmentId()},!0)},getRootBoundingClientRect:function(){return t.root.getBoundingClientRect()}})},e.prototype.setIndex=function(t){this.index=t},e.prototype.setIsSingleSelect=function(t){this.isSingleSelect=t},e.prototype.isSelected=function(){return this.foundation.isSelected()},e.prototype.setSelected=function(){this.foundation.setSelected()},e.prototype.setUnselected=function(){this.foundation.setUnselected()},e.prototype.getSegmentId=function(){return this.foundation.getSegmentId()},e}(U),xr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},Object.defineProperty(e.prototype,"segments",{get:function(){return this.segmentsList.slice()},enumerable:!1,configurable:!0}),e.prototype.initialize=function(t){void 0===t&&(t=function(t){return new Dr(t)}),this.segmentFactory=t,this.segmentsList=this.instantiateSegments(this.segmentFactory)},e.prototype.instantiateSegments=function(t){return[].slice.call(this.root.querySelectorAll(mr)).map((function(e){return t(e)}))},e.prototype.initialSyncWithDOM=function(){var t=this;this.handleSelected=function(e){t.foundation.handleSelected(e.detail)},this.listen(Er,this.handleSelected);for(var e=this.foundation.isSingleSelect(),n=0;n0)throw new Error("No segment selected in singleSelect mdc-segmented-button");if(e&&r.length>1)throw new Error("Multiple segments selected in singleSelect mdc-segmented-button")},e.prototype.destroy=function(){var e,n;try{for(var i=F(this.segmentsList),r=i.next();!r.done;r=i.next()){r.value.destroy()}}catch(t){e={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}this.unlisten(Er,this.handleSelected),t.prototype.destroy.call(this)},e.prototype.getDefaultFoundation=function(){var t=this;return new yr({hasClass:function(e){return t.root.classList.contains(e)},getSegments:function(){return t.mappedSegments()},selectSegment:function(e){var n=t.mappedSegments().find((function(t){return t.index===e||t.segmentId===e}));n&&t.segmentsList[n.index].setSelected()},unselectSegment:function(e){var n=t.mappedSegments().find((function(t){return t.index===e||t.segmentId===e}));n&&t.segmentsList[n.index].setUnselected()},notifySelectedChange:function(e){t.emit(gr,e,!0)}})},e.prototype.getSelectedSegments=function(){return this.foundation.getSelectedSegments()},e.prototype.selectSegment=function(t){this.foundation.selectSegment(t)},e.prototype.unselectSegment=function(t){this.foundation.unselectSegment(t)},e.prototype.isSegmentSelected=function(t){return this.foundation.isSegmentSelected(t)},e.prototype.mappedSegments=function(){return this.segmentsList.map((function(t,e){return{index:e,selected:t.isSelected(),segmentId:t.getSegmentId()}}))},e}(U);function Nr(t,e,n){t&&(t._segmentedButton=xr.attachTo(t),t._isSingleSelect=e,t._segmentedButton.foundation.adapter.notifySelectedChange=function(e){t._isSingleSelect?n.invokeMethodAsync("NotifySingleSelected",e.index):n.invokeMethodAsync("NotifyMultiSelected",t._segmentedButton.segments.map((function(t){return t.isSelected()})))})}function wr(t,e){t&&(t._segmentedButton.disabled=e)}function Pr(t,e){if(t)for(var n=0;n= start thumb value ("+this.valueStart+") + min range ("+this.minRange+")");this.updateValue(t,Br.END)},e.prototype.getValueStart=function(){if(!this.isRange)throw new Error("`valueStart` is only applicable for range sliders.");return this.valueStart},e.prototype.setValueStart=function(t){if(!this.isRange)throw new Error("`valueStart` is only applicable for range sliders.");if(this.isRange&&t>this.value-this.minRange)throw new Error("start thumb value ("+t+") must be <= end thumb value ("+this.value+") - min range ("+this.minRange+")");this.updateValue(t,Br.START)},e.prototype.setStep=function(t){this.step=t,this.numDecimalPlaces=bo(t),this.updateUI()},e.prototype.setMinRange=function(t){if(!this.isRange)throw new Error("`minRange` is only applicable for range sliders.");if(t<0)throw new Error("`minRange` must be non-negative. Current value: "+t);if(this.value-this.valueStart=n.left&&t<=n.right,o=t>=i.left&&t<=i.right;return r&&o?null:r?Br.START:o?Br.END:ethis.value?Br.END:e-this.valueStart<=this.value-e?Br.START:Br.END},e.prototype.getThumbFromMoveEvent=function(t){if(null!==this.thumb)return this.thumb;if(null===this.downEventClientX)throw new Error("`downEventClientX` is null after move event.");return Math.abs(this.downEventClientX-t)this.value-this.minRange?this.value-this.minRange:this.isRange&&e===Br.END&&te+n?(this.adapter.setThumbStyleProperty(go,n+"px",t),this.adapter.setThumbStyleProperty(To,"auto",t),this.adapter.setThumbStyleProperty(yo,"translateX(-50%)",t),this.adapter.setThumbStyleProperty(Ao,"0",t),this.adapter.setThumbStyleProperty(vo,"auto",t),this.adapter.setThumbStyleProperty(Co,"none",t)):i/2>r-e+n?(this.adapter.setThumbStyleProperty(go,"auto",t),this.adapter.setThumbStyleProperty(To,n+"px",t),this.adapter.setThumbStyleProperty(yo,"translateX(50%)",t),this.adapter.setThumbStyleProperty(Ao,"auto",t),this.adapter.setThumbStyleProperty(vo,"0",t),this.adapter.setThumbStyleProperty(Co,"none",t)):(this.adapter.setThumbStyleProperty(go,"50%",t),this.adapter.setThumbStyleProperty(To,"auto",t),this.adapter.setThumbStyleProperty(yo,"translateX(-50%)",t),this.adapter.setThumbStyleProperty(Ao,"50%",t),this.adapter.setThumbStyleProperty(vo,"auto",t),this.adapter.setThumbStyleProperty(Co,"translateX(-50%)",t))}},e.prototype.removeInitialStyles=function(t){if(!this.initialStylesRemoved){var e=t?"right":"left";this.adapter.removeThumbStyleProperty(e,Br.END),this.isRange&&this.adapter.removeThumbStyleProperty(e,Br.START),this.initialStylesRemoved=!0,this.resetTrackAndThumbAnimation()}},e.prototype.resetTrackAndThumbAnimation=function(){var t=this;if(this.isDiscrete){var e=Io?Se(window,"transition"):"transition",n="none 0s ease 0s";this.adapter.setThumbStyleProperty(e,n,Br.END),this.isRange&&this.adapter.setThumbStyleProperty(e,n,Br.START),this.adapter.setTrackActiveStyleProperty(e,n),requestAnimationFrame((function(){t.adapter.removeThumbStyleProperty(e,Br.END),t.adapter.removeTrackActiveStyleProperty(e),t.isRange&&t.adapter.removeThumbStyleProperty(e,Br.START)}))}},e.prototype.updateOverlappingThumbsUI=function(t,e,n){var i=!1;if(this.adapter.isRTL()){var r=t-this.startThumbKnobWidth/2;i=e+this.endThumbKnobWidth/2>=r}else{i=t+this.startThumbKnobWidth/2>=e-this.endThumbKnobWidth/2}i?(this.adapter.addThumbClass(zr,n||Br.END),this.adapter.removeThumbClass(zr,n===Br.START?Br.END:Br.START)):(this.adapter.removeThumbClass(zr,Br.START),this.adapter.removeThumbClass(zr,Br.END))},e.prototype.convertAttributeValueToNumber=function(t,e){if(null===t)throw new Error("MDCSliderFoundation: `"+e+"` must be non-null.");var n=Number(t);if(isNaN(n))throw new Error("MDCSliderFoundation: `"+e+"` value is `"+t+"`, but must be a number.");return n},e.prototype.validateProperties=function(t){var e=t.min,n=t.max,i=t.value,r=t.valueStart,o=t.step,a=t.minRange;if(e>=n)throw new Error("MDCSliderFoundation: min must be strictly less than max. Current: [min: "+e+", max: "+n+"]");if(o<=0)throw new Error("MDCSliderFoundation: step must be a positive number. Current step: "+o);if(this.isRange){if(in||rn)throw new Error("MDCSliderFoundation: values must be in [min, max] range. Current values: [start value: "+r+", end value: "+i+", min: "+e+", max: "+n+"]");if(r>i)throw new Error("MDCSliderFoundation: start value must be <= end value. Current values: [start value: "+r+", end value: "+i+"]");if(a<0)throw new Error("MDCSliderFoundation: minimum range must be non-negative. Current min range: "+a);if(i-rn)throw new Error("MDCSliderFoundation: value must be in [min, max] range. Current values: [value: "+i+", min: "+e+", max: "+n+"]");u=(i-e)/o;if(!Number.isInteger(parseFloat(u.toFixed(6))))throw new Error("MDCSliderFoundation: Slider value must be valid based on the step value ("+o+"). Current value: "+i)}},e.prototype.registerEventHandlers=function(){this.adapter.registerWindowEventHandler("resize",this.resizeListener),e.SUPPORTS_POINTER_EVENTS?(this.adapter.registerEventHandler("pointerdown",this.pointerdownListener),this.adapter.registerEventHandler("pointerup",this.pointerupListener)):(this.adapter.registerEventHandler("mousedown",this.mousedownOrTouchstartListener),this.adapter.registerEventHandler("touchstart",this.mousedownOrTouchstartListener)),this.isRange&&(this.adapter.registerThumbEventHandler(Br.START,"mouseenter",this.thumbMouseenterListener),this.adapter.registerThumbEventHandler(Br.START,"mouseleave",this.thumbMouseleaveListener),this.adapter.registerInputEventHandler(Br.START,"change",this.inputStartChangeListener),this.adapter.registerInputEventHandler(Br.START,"focus",this.inputStartFocusListener),this.adapter.registerInputEventHandler(Br.START,"blur",this.inputStartBlurListener)),this.adapter.registerThumbEventHandler(Br.END,"mouseenter",this.thumbMouseenterListener),this.adapter.registerThumbEventHandler(Br.END,"mouseleave",this.thumbMouseleaveListener),this.adapter.registerInputEventHandler(Br.END,"change",this.inputEndChangeListener),this.adapter.registerInputEventHandler(Br.END,"focus",this.inputEndFocusListener),this.adapter.registerInputEventHandler(Br.END,"blur",this.inputEndBlurListener)},e.prototype.deregisterEventHandlers=function(){this.adapter.deregisterWindowEventHandler("resize",this.resizeListener),e.SUPPORTS_POINTER_EVENTS?(this.adapter.deregisterEventHandler("pointerdown",this.pointerdownListener),this.adapter.deregisterEventHandler("pointerup",this.pointerupListener)):(this.adapter.deregisterEventHandler("mousedown",this.mousedownOrTouchstartListener),this.adapter.deregisterEventHandler("touchstart",this.mousedownOrTouchstartListener)),this.isRange&&(this.adapter.deregisterThumbEventHandler(Br.START,"mouseenter",this.thumbMouseenterListener),this.adapter.deregisterThumbEventHandler(Br.START,"mouseleave",this.thumbMouseleaveListener),this.adapter.deregisterInputEventHandler(Br.START,"change",this.inputStartChangeListener),this.adapter.deregisterInputEventHandler(Br.START,"focus",this.inputStartFocusListener),this.adapter.deregisterInputEventHandler(Br.START,"blur",this.inputStartBlurListener)),this.adapter.deregisterThumbEventHandler(Br.END,"mouseenter",this.thumbMouseenterListener),this.adapter.deregisterThumbEventHandler(Br.END,"mouseleave",this.thumbMouseleaveListener),this.adapter.deregisterInputEventHandler(Br.END,"change",this.inputEndChangeListener),this.adapter.deregisterInputEventHandler(Br.END,"focus",this.inputEndFocusListener),this.adapter.deregisterInputEventHandler(Br.END,"blur",this.inputEndBlurListener)},e.prototype.handlePointerup=function(){this.handleUp(),this.adapter.deregisterEventHandler("pointermove",this.moveListener)},e.SUPPORTS_POINTER_EVENTS=Io&&Boolean(window.PointerEvent)&&!(["iPad Simulator","iPhone Simulator","iPod Simulator","iPad","iPhone","iPod"].includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document),e}(V);function bo(t){var e=/(?:\.(\d+))?(?:[eE]([+\-]?\d+))?$/.exec(String(t));if(!e)return 0;var n=e[1]||"",i=e[2]||0;return Math.max(0,("0"===n?0:n.length)-Number(i))} +var _o=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.skipInitialUIUpdate=!1,e.valueToAriaValueTextFn=null,e}return w(e,t),e.attachTo=function(t,n){return void 0===n&&(n={}),new e(t,void 0,n)},e.prototype.getDefaultFoundation=function(){var t=this;return new So({hasClass:function(e){return t.root.classList.contains(e)},addClass:function(e){t.root.classList.add(e)},removeClass:function(e){t.root.classList.remove(e)},addThumbClass:function(e,n){t.getThumbEl(n).classList.add(e)},removeThumbClass:function(e,n){t.getThumbEl(n).classList.remove(e)},getAttribute:function(e){return t.root.getAttribute(e)},getInputValue:function(e){return t.getInput(e).value},setInputValue:function(e,n){t.getInput(n).value=e},getInputAttribute:function(e,n){return t.getInput(n).getAttribute(e)},setInputAttribute:function(e,n,i){t.getInput(i).setAttribute(e,n)},removeInputAttribute:function(e,n){t.getInput(n).removeAttribute(e)},focusInput:function(e){t.getInput(e).focus()},isInputFocused:function(e){return t.getInput(e)===document.activeElement},shouldHideFocusStylesForPointerEvents:function(){return!1},getThumbKnobWidth:function(e){return t.getThumbEl(e).querySelector("."+Xr).getBoundingClientRect().width},getThumbBoundingClientRect:function(e){return t.getThumbEl(e).getBoundingClientRect()},getBoundingClientRect:function(){return t.root.getBoundingClientRect()},getValueIndicatorContainerWidth:function(e){return t.getThumbEl(e).querySelector("."+no).getBoundingClientRect().width},isRTL:function(){return"rtl"===getComputedStyle(t.root).direction},setThumbStyleProperty:function(e,n,i){t.getThumbEl(i).style.setProperty(e,n)},removeThumbStyleProperty:function(e,n){t.getThumbEl(n).style.removeProperty(e)},setTrackActiveStyleProperty:function(e,n){t.trackActive.style.setProperty(e,n)},removeTrackActiveStyleProperty:function(e){t.trackActive.style.removeProperty(e)},setValueIndicatorText:function(e,n){t.getThumbEl(n).querySelector("."+io).textContent=String(e)},getValueToAriaValueTextFn:function(){return t.valueToAriaValueTextFn},updateTickMarks:function(e){var n=t.root.querySelector("."+Zr);n||((n=document.createElement("div")).classList.add(Zr),t.root.querySelector("."+to).appendChild(n));if(e.length!==n.children.length){for(;n.firstChild;)n.removeChild(n.firstChild);t.addTickMarks(n,e)}else t.updateTickMarks(n,e)},setPointerCapture:function(e){t.root.setPointerCapture(e)},emitChangeEvent:function(e,n){t.emit(mo,{value:e,thumb:n})},emitInputEvent:function(e,n){t.emit(Eo,{value:e,thumb:n})},emitDragStartEvent:function(e,n){t.getRipple(n).activate()},emitDragEndEvent:function(e,n){t.getRipple(n).deactivate()},registerEventHandler:function(e,n){t.listen(e,n)},deregisterEventHandler:function(e,n){t.unlisten(e,n)},registerThumbEventHandler:function(e,n,i){t.getThumbEl(e).addEventListener(n,i)},deregisterThumbEventHandler:function(e,n,i){t.getThumbEl(e).removeEventListener(n,i)},registerInputEventHandler:function(e,n,i){t.getInput(e).addEventListener(n,i)},deregisterInputEventHandler:function(e,n,i){t.getInput(e).removeEventListener(n,i)},registerBodyEventHandler:function(t,e){document.body.addEventListener(t,e)},deregisterBodyEventHandler:function(t,e){document.body.removeEventListener(t,e)},registerWindowEventHandler:function(t,e){window.addEventListener(t,e)},deregisterWindowEventHandler:function(t,e){window.removeEventListener(t,e)}})},e.prototype.initialize=function(t){var e=(void 0===t?{}:t).skipInitialUIUpdate;this.inputs=[].slice.call(this.root.querySelectorAll("."+jr)),this.thumbs=[].slice.call(this.root.querySelectorAll("."+Kr)),this.trackActive=this.root.querySelector("."+eo),this.ripples=this.createRipples(),e&&(this.skipInitialUIUpdate=!0)},e.prototype.initialSyncWithDOM=function(){this.foundation.layout({skipUpdateUI:this.skipInitialUIUpdate})},e.prototype.layout=function(){this.foundation.layout()},e.prototype.getValueStart=function(){return this.foundation.getValueStart()},e.prototype.setValueStart=function(t){this.foundation.setValueStart(t)},e.prototype.getValue=function(){return this.foundation.getValue()},e.prototype.setValue=function(t){this.foundation.setValue(t)},e.prototype.getDisabled=function(){return this.foundation.getDisabled()},e.prototype.setDisabled=function(t){this.foundation.setDisabled(t)},e.prototype.setValueToAriaValueTextFn=function(t){this.valueToAriaValueTextFn=t},e.prototype.getThumbEl=function(t){return t===Br.END?this.thumbs[this.thumbs.length-1]:this.thumbs[0]},e.prototype.getInput=function(t){return t===Br.END?this.inputs[this.inputs.length-1]:this.inputs[0]},e.prototype.getRipple=function(t){return t===Br.END?this.ripples[this.ripples.length-1]:this.ripples[0]},e.prototype.addTickMarks=function(t,e){for(var n=document.createDocumentFragment(),i=0;i + * + * Based on Underscore.js, copyright Jeremy Ashkenas, + * DocumentCloud and Investigative Reporters & Editors + * + * This software consists of voluntary contributions made by many + * individuals. For exact contribution history, see the revision history + * available at https://github.com/lodash/lodash + * + * The following license applies to all parts of this software except as + * documented below: + * + * ==== + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ==== + * + * Copyright and related rights for sample code are waived via CC0. Sample + * code is defined as all source code displayed within the prose of the + * documentation. + * + * CC0: http://creativecommons.org/publicdomain/zero/1.0/ + * + * ==== + * + * Files located in the node_modules and vendor directories are externally + * maintained libraries used by this software which have their own + * licenses; we recommend you read them, as their terms may differ from the + * terms above. + * + */ +function Ro(t){var e=Oo(t);return null!=t&&("object"===e||"function"===e)}var Lo="object"===(void 0===n.g?"undefined":Oo(n.g))&&null!==n.g&&n.g.Object===Object&&n.g,Do="object"===("undefined"==typeof globalThis?"undefined":Oo(globalThis))&&null!==globalThis&&globalThis.Object==Object&&globalThis,xo="object"===("undefined"==typeof self?"undefined":Oo(self))&&null!==self&&self.Object===Object&&self,No=Do||Lo||xo||Function("return this")();function wo(t,e,n){var i,r,o,a,s,u,c=0,l=!1,d=!1,h=!0,p=!e&&0!==e&&"function"==typeof No.requestAnimationFrame;if("function"!=typeof t)throw new TypeError("Expected a function");function f(e){var n=i,o=r;return i=r=void 0,c=e,a=t.apply(o,n)}function m(t,e){return p?(No.cancelAnimationFrame(s),No.requestAnimationFrame(t)):setTimeout(t,e)}function E(t){var n=t-u;return void 0===u||n>=e||n<0||d&&t-c>=o}function g(){var t=Date.now();if(E(t))return T(t);s=m(g,function(t){var n=t-c,i=e-(t-u);return d?Math.min(i,o-n):i}(t))}function T(t){return s=void 0,h&&i?f(t):(i=r=void 0,a)}function y(){for(var t=Date.now(),n=E(t),o=arguments.length,h=new Array(o),p=0;p0)||"ltr"!==(n=n.toLowerCase())&&"auto"!==n);e=e.parentNode);return null!==n&&"rtl"===n.toLowerCase()}(t)?"right: ":"left: ")+n,t._slider=_o.attachTo(t),t._eventType=r,0==r){t._slider.listen("MDCSlider:change",(function(){i.invokeMethodAsync("NotifyChanged",t._slider.getValue())}))}else if(1==r){var s=wo((function(){i.invokeMethodAsync("NotifyChanged",t._slider.getValue())}),o,{});t._slider.listen("MDCSlider:input",s)}else{var u=function(t,e,n){var i=!0,r=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return Ro(n)&&(i="leading"in n?!!n.leading:i,r="trailing"in n?!!n.trailing:r),wo(t,e,{leading:i,trailing:r,maxWait:e})}((function(){i.invokeMethodAsync("NotifyChanged",t._slider.getValue())}),o,{});t._slider.listen("MDCSlider:input",u)}t._slider.setDisabled(a)}}function Mo(t,e){t&&t._slider.setValue(e)}function Ho(t,e){t&&t._slider.setDisabled(e)} +var Fo={CLOSING:"mdc-snackbar--closing",OPEN:"mdc-snackbar--open",OPENING:"mdc-snackbar--opening"},ko={ACTION_SELECTOR:".mdc-snackbar__action",ARIA_LIVE_LABEL_TEXT_ATTR:"data-mdc-snackbar-label-text",CLOSED_EVENT:"MDCSnackbar:closed",CLOSING_EVENT:"MDCSnackbar:closing",DISMISS_SELECTOR:".mdc-snackbar__dismiss",LABEL_SELECTOR:".mdc-snackbar__label",OPENED_EVENT:"MDCSnackbar:opened",OPENING_EVENT:"MDCSnackbar:opening",REASON_ACTION:"action",REASON_DISMISS:"dismiss",SURFACE_SELECTOR:".mdc-snackbar__surface"},Bo={DEFAULT_AUTO_DISMISS_TIMEOUT_MS:5e3,INDETERMINATE:-1,MAX_AUTO_DISMISS_TIMEOUT_MS:1e4,MIN_AUTO_DISMISS_TIMEOUT_MS:4e3,SNACKBAR_ANIMATION_CLOSE_TIME_MS:75,SNACKBAR_ANIMATION_OPEN_TIME_MS:150,ARIA_LIVE_DELAY_MS:1e3},Vo=Fo.OPENING,Uo=Fo.OPEN,Wo=Fo.CLOSING,jo=ko.REASON_ACTION,Go=ko.REASON_DISMISS,Ko=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.opened=!1,i.animationFrame=0,i.animationTimer=0,i.autoDismissTimer=0,i.autoDismissTimeoutMs=Bo.DEFAULT_AUTO_DISMISS_TIMEOUT_MS,i.closeOnEscape=!0,i}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return Fo},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return ko},enumerable:!1,configurable:!0}),Object.defineProperty(e,"numbers",{get:function(){return Bo},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},announce:function(){},notifyClosed:function(){},notifyClosing:function(){},notifyOpened:function(){},notifyOpening:function(){},removeClass:function(){}}},enumerable:!1,configurable:!0}),e.prototype.destroy=function(){this.clearAutoDismissTimer(),cancelAnimationFrame(this.animationFrame),this.animationFrame=0,clearTimeout(this.animationTimer),this.animationTimer=0,this.adapter.removeClass(Vo),this.adapter.removeClass(Uo),this.adapter.removeClass(Wo)},e.prototype.open=function(){var t=this;this.clearAutoDismissTimer(),this.opened=!0,this.adapter.notifyOpening(),this.adapter.removeClass(Wo),this.adapter.addClass(Vo),this.adapter.announce(),this.runNextAnimationFrame((function(){t.adapter.addClass(Uo),t.animationTimer=setTimeout((function(){var e=t.getTimeoutMs();t.handleAnimationTimerEnd(),t.adapter.notifyOpened(),e!==Bo.INDETERMINATE&&(t.autoDismissTimer=setTimeout((function(){t.close(Go)}),e))}),Bo.SNACKBAR_ANIMATION_OPEN_TIME_MS)}))},e.prototype.close=function(t){var e=this;void 0===t&&(t=""),this.opened&&(cancelAnimationFrame(this.animationFrame),this.animationFrame=0,this.clearAutoDismissTimer(),this.opened=!1,this.adapter.notifyClosing(t),this.adapter.addClass(Fo.CLOSING),this.adapter.removeClass(Fo.OPEN),this.adapter.removeClass(Fo.OPENING),clearTimeout(this.animationTimer),this.animationTimer=setTimeout((function(){e.handleAnimationTimerEnd(),e.adapter.notifyClosed(t)}),Bo.SNACKBAR_ANIMATION_CLOSE_TIME_MS))},e.prototype.isOpen=function(){return this.opened},e.prototype.getTimeoutMs=function(){return this.autoDismissTimeoutMs},e.prototype.setTimeoutMs=function(t){var e=Bo.MIN_AUTO_DISMISS_TIMEOUT_MS,n=Bo.MAX_AUTO_DISMISS_TIMEOUT_MS;if(!(t===Bo.INDETERMINATE||t<=n&&t>=e))throw new Error("\n timeoutMs must be an integer in the range "+e+"–"+n+"\n (or "+Bo.INDETERMINATE+" to disable), but got '"+t+"'");this.autoDismissTimeoutMs=t},e.prototype.getCloseOnEscape=function(){return this.closeOnEscape},e.prototype.setCloseOnEscape=function(t){this.closeOnEscape=t},e.prototype.handleKeyDown=function(t){("Escape"===t.key||27===t.keyCode)&&this.getCloseOnEscape()&&this.close(Go)},e.prototype.handleActionButtonClick=function(t){this.close(jo)},e.prototype.handleActionIconClick=function(t){this.close(Go)},e.prototype.clearAutoDismissTimer=function(){clearTimeout(this.autoDismissTimer),this.autoDismissTimer=0},e.prototype.handleAnimationTimerEnd=function(){this.animationTimer=0,this.adapter.removeClass(Fo.OPENING),this.adapter.removeClass(Fo.CLOSING)},e.prototype.runNextAnimationFrame=function(t){var e=this;cancelAnimationFrame(this.animationFrame),this.animationFrame=requestAnimationFrame((function(){e.animationFrame=0,clearTimeout(e.animationTimer),e.animationTimer=setTimeout(t,0)}))},e}(V); +var qo=Bo.ARIA_LIVE_DELAY_MS,Xo=ko.ARIA_LIVE_LABEL_TEXT_ATTR;function zo(t,e){void 0===e&&(e=t);var n=t.getAttribute("aria-live"),i=e.textContent.trim();if(i&&n){t.setAttribute("aria-live","off"),e.textContent="";var r=document.createElement("span");r.setAttribute("style","display: inline-block; width: 0; height: 1px;"),r.textContent=" ",e.appendChild(r),e.setAttribute(Xo,i),setTimeout((function(){t.setAttribute("aria-live",n),e.removeAttribute(Xo),e.textContent=i}),qo)}} +var Yo,Qo,Zo=ko.SURFACE_SELECTOR,$o=ko.LABEL_SELECTOR,Jo=ko.ACTION_SELECTOR,ta=ko.DISMISS_SELECTOR,ea=ko.OPENING_EVENT,na=ko.OPENED_EVENT,ia=ko.CLOSING_EVENT,ra=ko.CLOSED_EVENT,oa=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.initialize=function(t){void 0===t&&(t=function(){return zo}),this.announce=t()},e.prototype.initialSyncWithDOM=function(){var t=this;this.surfaceEl=this.root.querySelector(Zo),this.labelEl=this.root.querySelector($o),this.actionEl=this.root.querySelector(Jo),this.handleKeyDown=function(e){t.foundation.handleKeyDown(e)},this.handleSurfaceClick=function(e){var n=e.target;t.isActionButton(n)?t.foundation.handleActionButtonClick(e):t.isActionIcon(n)&&t.foundation.handleActionIconClick(e)},this.registerKeyDownHandler(this.handleKeyDown),this.registerSurfaceClickHandler(this.handleSurfaceClick)},e.prototype.destroy=function(){t.prototype.destroy.call(this),this.deregisterKeyDownHandler(this.handleKeyDown),this.deregisterSurfaceClickHandler(this.handleSurfaceClick)},e.prototype.open=function(){this.foundation.open()},e.prototype.close=function(t){void 0===t&&(t=""),this.foundation.close(t)},e.prototype.getDefaultFoundation=function(){var t=this;return new Ko({addClass:function(e){t.root.classList.add(e)},announce:function(){t.announce(t.labelEl)},notifyClosed:function(e){return t.emit(ra,e?{reason:e}:{})},notifyClosing:function(e){return t.emit(ia,e?{reason:e}:{})},notifyOpened:function(){return t.emit(na,{})},notifyOpening:function(){return t.emit(ea,{})},removeClass:function(e){return t.root.classList.remove(e)}})},Object.defineProperty(e.prototype,"timeoutMs",{get:function(){return this.foundation.getTimeoutMs()},set:function(t){this.foundation.setTimeoutMs(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"closeOnEscape",{get:function(){return this.foundation.getCloseOnEscape()},set:function(t){this.foundation.setCloseOnEscape(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isOpen",{get:function(){return this.foundation.isOpen()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"labelText",{get:function(){return this.labelEl.textContent},set:function(t){this.labelEl.textContent=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"actionButtonText",{get:function(){return this.actionEl.textContent},set:function(t){this.actionEl.textContent=t},enumerable:!1,configurable:!0}),e.prototype.registerKeyDownHandler=function(t){this.listen("keydown",t)},e.prototype.deregisterKeyDownHandler=function(t){this.unlisten("keydown",t)},e.prototype.registerSurfaceClickHandler=function(t){this.surfaceEl.addEventListener("click",t)},e.prototype.deregisterSurfaceClickHandler=function(t){this.surfaceEl.removeEventListener("click",t)},e.prototype.isActionButton=function(t){return Boolean(j(t,Jo))},e.prototype.isActionIcon=function(t){return Boolean(j(t,ta))},e}(U);function aa(t,e,n){t&&(t._snackbar=new oa(t),t._snackbar.listen("MDCSnackbar:closed",(function(t){e.invokeMethodAsync("Closed",t)})),t._snackbar.timeoutMs=n,t._snackbar.open())}function sa(t,e,n){var i=function(t,e){var n=new Map;ua.has(t)||ua.set(t,{isEnabled:!0,getObservers:function(t){var e=n.get(t)||[];return n.has(t)||n.set(t,e),e},installedProperties:new Set});var i=ua.get(t);if(i.installedProperties.has(e))return i;var r=function(t,e){var n,i=t;for(;i&&!(n=Object.getOwnPropertyDescriptor(i,e));)i=Object.getPrototypeOf(i);return n}(t,e)||{configurable:!0,enumerable:!0,value:t[e],writable:!0},o=P({},r),a=r.get,s=r.set;if("value"in r){delete o.value,delete o.writable;var u=r.value;a=function(){return u},r.writable&&(s=function(t){u=t})}a&&(o.get=function(){return a.call(this)});s&&(o.set=function(t){var n,r,o=a?a.call(this):t;if(s.call(this,t),i.isEnabled&&(!a||t!==o))try{for(var u=F(i.getObservers(e)),c=u.next();!c.done;c=u.next()){(0,c.value)(t,o)}}catch(t){n={error:t}}finally{try{c&&!c.done&&(r=u.return)&&r.call(u)}finally{if(n)throw n.error}}});return i.installedProperties.add(e),Object.defineProperty(t,e,o),i}(t,e),r=i.getObservers(e);return r.push(n),function(){r.splice(r.indexOf(n),1)}}!function(t){t.PROCESSING="mdc-switch--processing",t.SELECTED="mdc-switch--selected",t.UNSELECTED="mdc-switch--unselected"}(Yo||(Yo={})),function(t){t.RIPPLE=".mdc-switch__ripple"}(Qo||(Qo={}));var ua=new WeakMap;function ca(t,e){var n=ua.get(t);n&&(n.isEnabled=e)} +/** + * @license + * Copyright 2021 Google Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var la=function(t){function e(e){var n=t.call(this,e)||this;return n.unobserves=new Set,n}return w(e,t),e.prototype.destroy=function(){t.prototype.destroy.call(this),this.unobserve()},e.prototype.observe=function(t,e){var n,i,r=this,o=[];try{for(var a=F(Object.keys(e)),s=a.next();!s.done;s=a.next()){var u=s.value,c=e[u].bind(this);o.push(this.observeProperty(t,u,c))}}catch(t){n={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(n)throw n.error}}var l=function(){var t,e;try{for(var n=F(o),i=n.next();!i.done;i=n.next()){(0,i.value)()}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}r.unobserves.delete(l)};return this.unobserves.add(l),l},e.prototype.observeProperty=function(t,e,n){return sa(t,e,n)},e.prototype.setObserversEnabled=function(t,e){ca(t,e)},e.prototype.unobserve=function(){var t,e;try{for(var n=F(B([],k(this.unobserves))),i=n.next();!i.done;i=n.next()){(0,i.value)()}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e}(V),da=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.prototype.init=function(){t.prototype.init.call(this),this.observe(this.adapter.state,{disabled:this.onDisabledChange,processing:this.onProcessingChange,selected:this.onSelectedChange})},e.prototype.initFromDOM=function(){this.setObserversEnabled(this.adapter.state,!1),this.adapter.state.selected=this.adapter.hasClass(Yo.SELECTED),this.onSelectedChange(),this.adapter.state.disabled=this.adapter.isDisabled(),this.adapter.state.processing=this.adapter.hasClass(Yo.PROCESSING),this.setObserversEnabled(this.adapter.state,!0),this.stopProcessingIfDisabled()},e.prototype.onDisabledChange=function(){this.adapter.setDisabled(this.adapter.state.disabled)},e.prototype.onProcessingChange=function(){this.toggleClass(this.adapter.state.processing,Yo.PROCESSING)},e.prototype.onSelectedChange=function(){this.adapter.setAriaChecked(String(this.adapter.state.selected)),this.toggleClass(this.adapter.state.selected,Yo.SELECTED),this.toggleClass(!this.adapter.state.selected,Yo.UNSELECTED)},e.prototype.toggleClass=function(t,e){t?this.adapter.addClass(e):this.adapter.removeClass(e)},e}(function(t){function e(e){var n=t.call(this,e)||this;return n.handleClick=n.handleClick.bind(n),n}return w(e,t),e.prototype.init=function(){this.observe(this.adapter.state,{disabled:this.stopProcessingIfDisabled,processing:this.stopProcessingIfDisabled})},e.prototype.handleClick=function(){this.adapter.state.disabled||(this.adapter.state.selected=!this.adapter.state.selected)},e.prototype.stopProcessingIfDisabled=function(){this.adapter.state.disabled&&(this.adapter.state.processing=!1)},e}(la)),ha=function(t){function e(e,n){var i=t.call(this,e,n)||this;return i.root=e,i}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.initialize=function(){this.ripple=new lt(this.root,this.createRippleFoundation())},e.prototype.initialSyncWithDOM=function(){var t=this.root.querySelector(Qo.RIPPLE);if(!t)throw new Error("Switch "+Qo.RIPPLE+" element is required.");this.rippleElement=t,this.root.addEventListener("click",this.foundation.handleClick),this.foundation.initFromDOM()},e.prototype.destroy=function(){t.prototype.destroy.call(this),this.ripple.destroy(),this.root.removeEventListener("click",this.foundation.handleClick)},e.prototype.getDefaultFoundation=function(){return new da(this.createAdapter())},e.prototype.createAdapter=function(){var t=this;return{addClass:function(e){t.root.classList.add(e)},hasClass:function(e){return t.root.classList.contains(e)},isDisabled:function(){return t.root.disabled},removeClass:function(e){t.root.classList.remove(e)},setAriaChecked:function(e){return t.root.setAttribute("aria-checked",e)},setDisabled:function(e){t.root.disabled=e},state:this}},e.prototype.createRippleFoundation=function(){return new ct(this.createRippleAdapter())},e.prototype.createRippleAdapter=function(){var t=this;return P(P({},lt.createAdapter(this)),{computeBoundingRect:function(){return t.rippleElement.getBoundingClientRect()},isUnbounded:function(){return!0}})},e}(U);function pa(t,e){t&&(t._switch=ha.attachTo(t),t._switch.selected=e)}function fa(t,e){t&&(t._switch.selected=e)}function ma(t,e){t&&(t._switch.disabled=e)} +var Ea={ANIMATING:"mdc-tab-scroller--animating",SCROLL_AREA_SCROLL:"mdc-tab-scroller__scroll-area--scroll",SCROLL_TEST:"mdc-tab-scroller__test"},ga={AREA_SELECTOR:".mdc-tab-scroller__scroll-area",CONTENT_SELECTOR:".mdc-tab-scroller__scroll-content"},Ta=function(t){this.adapter=t}; +var ya=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.prototype.getScrollPositionRTL=function(){var t=this.adapter.getScrollAreaScrollLeft(),e=this.calculateScrollEdges().right;return Math.round(e-t)},e.prototype.scrollToRTL=function(t){var e=this.calculateScrollEdges(),n=this.adapter.getScrollAreaScrollLeft(),i=this.clampScrollValue(e.right-t);return{finalScrollPosition:i,scrollDelta:i-n}},e.prototype.incrementScrollRTL=function(t){var e=this.adapter.getScrollAreaScrollLeft(),n=this.clampScrollValue(e-t);return{finalScrollPosition:n,scrollDelta:n-e}},e.prototype.getAnimatingScrollPosition=function(t){return t},e.prototype.calculateScrollEdges=function(){return{left:0,right:this.adapter.getScrollContentOffsetWidth()-this.adapter.getScrollAreaOffsetWidth()}},e.prototype.clampScrollValue=function(t){var e=this.calculateScrollEdges();return Math.min(Math.max(e.left,t),e.right)},e}(Ta); +var Aa=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.prototype.getScrollPositionRTL=function(t){var e=this.adapter.getScrollAreaScrollLeft();return Math.round(t-e)},e.prototype.scrollToRTL=function(t){var e=this.adapter.getScrollAreaScrollLeft(),n=this.clampScrollValue(-t);return{finalScrollPosition:n,scrollDelta:n-e}},e.prototype.incrementScrollRTL=function(t){var e=this.adapter.getScrollAreaScrollLeft(),n=this.clampScrollValue(e-t);return{finalScrollPosition:n,scrollDelta:n-e}},e.prototype.getAnimatingScrollPosition=function(t,e){return t-e},e.prototype.calculateScrollEdges=function(){var t=this.adapter.getScrollContentOffsetWidth();return{left:this.adapter.getScrollAreaOffsetWidth()-t,right:0}},e.prototype.clampScrollValue=function(t){var e=this.calculateScrollEdges();return Math.max(Math.min(e.right,t),e.left)},e}(Ta); +var va=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.prototype.getScrollPositionRTL=function(t){var e=this.adapter.getScrollAreaScrollLeft();return Math.round(e-t)},e.prototype.scrollToRTL=function(t){var e=this.adapter.getScrollAreaScrollLeft(),n=this.clampScrollValue(t);return{finalScrollPosition:n,scrollDelta:e-n}},e.prototype.incrementScrollRTL=function(t){var e=this.adapter.getScrollAreaScrollLeft(),n=this.clampScrollValue(e+t);return{finalScrollPosition:n,scrollDelta:e-n}},e.prototype.getAnimatingScrollPosition=function(t,e){return t+e},e.prototype.calculateScrollEdges=function(){return{left:this.adapter.getScrollContentOffsetWidth()-this.adapter.getScrollAreaOffsetWidth(),right:0}},e.prototype.clampScrollValue=function(t){var e=this.calculateScrollEdges();return Math.min(Math.max(e.right,t),e.left)},e}(Ta); +var Ca=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.isAnimating=!1,i}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return Ea},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return ga},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{eventTargetMatchesSelector:function(){return!1},addClass:function(){},removeClass:function(){},addScrollAreaClass:function(){},setScrollAreaStyleProperty:function(){},setScrollContentStyleProperty:function(){},getScrollContentStyleValue:function(){return""},setScrollAreaScrollLeft:function(){},getScrollAreaScrollLeft:function(){return 0},getScrollContentOffsetWidth:function(){return 0},getScrollAreaOffsetWidth:function(){return 0},computeScrollAreaClientRect:function(){return{top:0,right:0,bottom:0,left:0,width:0,height:0}},computeScrollContentClientRect:function(){return{top:0,right:0,bottom:0,left:0,width:0,height:0}},computeHorizontalScrollbarHeight:function(){return 0}}},enumerable:!1,configurable:!0}),e.prototype.init=function(){var t=this.adapter.computeHorizontalScrollbarHeight();this.adapter.setScrollAreaStyleProperty("margin-bottom",-t+"px"),this.adapter.addScrollAreaClass(e.cssClasses.SCROLL_AREA_SCROLL)},e.prototype.getScrollPosition=function(){if(this.isRTL())return this.computeCurrentScrollPositionRTL();var t=this.calculateCurrentTranslateX();return this.adapter.getScrollAreaScrollLeft()-t},e.prototype.handleInteraction=function(){this.isAnimating&&this.stopScrollAnimation()},e.prototype.handleTransitionEnd=function(t){var n=t.target;this.isAnimating&&this.adapter.eventTargetMatchesSelector(n,e.strings.CONTENT_SELECTOR)&&(this.isAnimating=!1,this.adapter.removeClass(e.cssClasses.ANIMATING))},e.prototype.incrementScroll=function(t){0!==t&&this.animate(this.getIncrementScrollOperation(t))},e.prototype.incrementScrollImmediate=function(t){if(0!==t){var e=this.getIncrementScrollOperation(t);0!==e.scrollDelta&&(this.stopScrollAnimation(),this.adapter.setScrollAreaScrollLeft(e.finalScrollPosition))}},e.prototype.scrollTo=function(t){this.isRTL()?this.scrollToImplRTL(t):this.scrollToImpl(t)},e.prototype.getRTLScroller=function(){return this.rtlScrollerInstance||(this.rtlScrollerInstance=this.rtlScrollerFactory()),this.rtlScrollerInstance},e.prototype.calculateCurrentTranslateX=function(){var t=this.adapter.getScrollContentStyleValue("transform");if("none"===t)return 0;var e=/\((.+?)\)/.exec(t);if(!e)return 0;var n=k(e[1].split(","),6),i=(n[0],n[1],n[2],n[3],n[4]);n[5];return parseFloat(i)},e.prototype.clampScrollValue=function(t){var e=this.calculateScrollEdges();return Math.min(Math.max(e.left,t),e.right)},e.prototype.computeCurrentScrollPositionRTL=function(){var t=this.calculateCurrentTranslateX();return this.getRTLScroller().getScrollPositionRTL(t)},e.prototype.calculateScrollEdges=function(){return{left:0,right:this.adapter.getScrollContentOffsetWidth()-this.adapter.getScrollAreaOffsetWidth()}},e.prototype.scrollToImpl=function(t){var e=this.getScrollPosition(),n=this.clampScrollValue(t),i=n-e;this.animate({finalScrollPosition:n,scrollDelta:i})},e.prototype.scrollToImplRTL=function(t){var e=this.getRTLScroller().scrollToRTL(t);this.animate(e)},e.prototype.getIncrementScrollOperation=function(t){if(this.isRTL())return this.getRTLScroller().incrementScrollRTL(t);var e=this.getScrollPosition(),n=t+e,i=this.clampScrollValue(n);return{finalScrollPosition:i,scrollDelta:i-e}},e.prototype.animate=function(t){var n=this;0!==t.scrollDelta&&(this.stopScrollAnimation(),this.adapter.setScrollAreaScrollLeft(t.finalScrollPosition),this.adapter.setScrollContentStyleProperty("transform","translateX("+t.scrollDelta+"px)"),this.adapter.computeScrollAreaClientRect(),requestAnimationFrame((function(){n.adapter.addClass(e.cssClasses.ANIMATING),n.adapter.setScrollContentStyleProperty("transform","none")})),this.isAnimating=!0)},e.prototype.stopScrollAnimation=function(){this.isAnimating=!1;var t=this.getAnimatingScrollPosition();this.adapter.removeClass(e.cssClasses.ANIMATING),this.adapter.setScrollContentStyleProperty("transform","translateX(0px)"),this.adapter.setScrollAreaScrollLeft(t)},e.prototype.getAnimatingScrollPosition=function(){var t=this.calculateCurrentTranslateX(),e=this.adapter.getScrollAreaScrollLeft();return this.isRTL()?this.getRTLScroller().getAnimatingScrollPosition(e,t):e-t},e.prototype.rtlScrollerFactory=function(){var t=this.adapter.getScrollAreaScrollLeft();this.adapter.setScrollAreaScrollLeft(t-1);var e=this.adapter.getScrollAreaScrollLeft();if(e<0)return this.adapter.setScrollAreaScrollLeft(t),new Aa(this.adapter);var n=this.adapter.computeScrollAreaClientRect(),i=this.adapter.computeScrollContentClientRect(),r=Math.round(i.right-n.right);return this.adapter.setScrollAreaScrollLeft(t),r===e?new va(this.adapter):new ya(this.adapter)},e.prototype.isRTL=function(){return"rtl"===this.adapter.getScrollContentStyleValue("direction")},e}(V); +var Ia; +var Sa=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.initialize=function(){this.area=this.root.querySelector(Ca.strings.AREA_SELECTOR),this.content=this.root.querySelector(Ca.strings.CONTENT_SELECTOR)},e.prototype.initialSyncWithDOM=function(){var t=this;this.handleInteraction=function(){t.foundation.handleInteraction()},this.handleTransitionEnd=function(e){t.foundation.handleTransitionEnd(e)},this.area.addEventListener("wheel",this.handleInteraction,W()),this.area.addEventListener("touchstart",this.handleInteraction,W()),this.area.addEventListener("pointerdown",this.handleInteraction,W()),this.area.addEventListener("mousedown",this.handleInteraction,W()),this.area.addEventListener("keydown",this.handleInteraction,W()),this.content.addEventListener("transitionend",this.handleTransitionEnd)},e.prototype.destroy=function(){t.prototype.destroy.call(this),this.area.removeEventListener("wheel",this.handleInteraction,W()),this.area.removeEventListener("touchstart",this.handleInteraction,W()),this.area.removeEventListener("pointerdown",this.handleInteraction,W()),this.area.removeEventListener("mousedown",this.handleInteraction,W()),this.area.removeEventListener("keydown",this.handleInteraction,W()),this.content.removeEventListener("transitionend",this.handleTransitionEnd)},e.prototype.getDefaultFoundation=function(){var t=this;return new Ca({eventTargetMatchesSelector:function(t,e){return G(t,e)},addClass:function(e){t.root.classList.add(e)},removeClass:function(e){t.root.classList.remove(e)},addScrollAreaClass:function(e){t.area.classList.add(e)},setScrollAreaStyleProperty:function(e,n){t.area.style.setProperty(e,n)},setScrollContentStyleProperty:function(e,n){t.content.style.setProperty(e,n)},getScrollContentStyleValue:function(e){return window.getComputedStyle(t.content).getPropertyValue(e)},setScrollAreaScrollLeft:function(e){return t.area.scrollLeft=e},getScrollAreaScrollLeft:function(){return t.area.scrollLeft},getScrollContentOffsetWidth:function(){return t.content.offsetWidth},getScrollAreaOffsetWidth:function(){return t.area.offsetWidth},computeScrollAreaClientRect:function(){return t.area.getBoundingClientRect()},computeScrollContentClientRect:function(){return t.content.getBoundingClientRect()},computeHorizontalScrollbarHeight:function(){return function(t,e){if(void 0===e&&(e=!0),e&&void 0!==Ia)return Ia;var n=t.createElement("div");n.classList.add(Ea.SCROLL_TEST),t.body.appendChild(n);var i=n.offsetHeight-n.clientHeight;return t.body.removeChild(n),e&&(Ia=i),i}(document)}})},e.prototype.getScrollPosition=function(){return this.foundation.getScrollPosition()},e.prototype.getScrollContentWidth=function(){return this.content.offsetWidth},e.prototype.incrementScroll=function(t){this.foundation.incrementScroll(t)},e.prototype.scrollTo=function(t){this.foundation.scrollTo(t)},e}(U),ba={ACTIVE:"mdc-tab-indicator--active",FADE:"mdc-tab-indicator--fade",NO_TRANSITION:"mdc-tab-indicator--no-transition"},_a={CONTENT_SELECTOR:".mdc-tab-indicator__content"},Oa=function(t){function e(n){return t.call(this,P(P({},e.defaultAdapter),n))||this}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return ba},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return _a},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},removeClass:function(){},computeContentClientRect:function(){return{top:0,right:0,bottom:0,left:0,width:0,height:0}},setContentStyleProperty:function(){}}},enumerable:!1,configurable:!0}),e.prototype.computeContentClientRect=function(){return this.adapter.computeContentClientRect()},e}(V); +var Ra=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.prototype.activate=function(){this.adapter.addClass(Oa.cssClasses.ACTIVE)},e.prototype.deactivate=function(){this.adapter.removeClass(Oa.cssClasses.ACTIVE)},e}(Oa); +var La=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.prototype.activate=function(t){if(t){var e=this.computeContentClientRect(),n=t.width/e.width,i=t.left-e.left;this.adapter.addClass(Oa.cssClasses.NO_TRANSITION),this.adapter.setContentStyleProperty("transform","translateX("+i+"px) scaleX("+n+")"),this.computeContentClientRect(),this.adapter.removeClass(Oa.cssClasses.NO_TRANSITION),this.adapter.addClass(Oa.cssClasses.ACTIVE),this.adapter.setContentStyleProperty("transform","")}else this.adapter.addClass(Oa.cssClasses.ACTIVE)},e.prototype.deactivate=function(){this.adapter.removeClass(Oa.cssClasses.ACTIVE)},e}(Oa); +var Da=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.initialize=function(){this.content=this.root.querySelector(Oa.strings.CONTENT_SELECTOR)},e.prototype.computeContentClientRect=function(){return this.foundation.computeContentClientRect()},e.prototype.getDefaultFoundation=function(){var t=this,e={addClass:function(e){return t.root.classList.add(e)},removeClass:function(e){return t.root.classList.remove(e)},computeContentClientRect:function(){return t.content.getBoundingClientRect()},setContentStyleProperty:function(e,n){t.content.style.setProperty(e,n)}};return this.root.classList.contains(Oa.cssClasses.FADE)?new Ra(e):new La(e)},e.prototype.activate=function(t){this.foundation.activate(t)},e.prototype.deactivate=function(){this.foundation.deactivate()},e}(U),xa={ACTIVE:"mdc-tab--active"},Na={ARIA_SELECTED:"aria-selected",CONTENT_SELECTOR:".mdc-tab__content",INTERACTED_EVENT:"MDCTab:interacted",RIPPLE_SELECTOR:".mdc-tab__ripple",TABINDEX:"tabIndex",TAB_INDICATOR_SELECTOR:".mdc-tab-indicator"},wa=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.focusOnActivate=!0,i}return w(e,t),Object.defineProperty(e,"cssClasses",{get:function(){return xa},enumerable:!1,configurable:!0}),Object.defineProperty(e,"strings",{get:function(){return Na},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{addClass:function(){},removeClass:function(){},hasClass:function(){return!1},setAttr:function(){},activateIndicator:function(){},deactivateIndicator:function(){},notifyInteracted:function(){},getOffsetLeft:function(){return 0},getOffsetWidth:function(){return 0},getContentOffsetLeft:function(){return 0},getContentOffsetWidth:function(){return 0},focus:function(){}}},enumerable:!1,configurable:!0}),e.prototype.handleClick=function(){this.adapter.notifyInteracted()},e.prototype.isActive=function(){return this.adapter.hasClass(xa.ACTIVE)},e.prototype.setFocusOnActivate=function(t){this.focusOnActivate=t},e.prototype.activate=function(t){this.adapter.addClass(xa.ACTIVE),this.adapter.setAttr(Na.ARIA_SELECTED,"true"),this.adapter.setAttr(Na.TABINDEX,"0"),this.adapter.activateIndicator(t),this.focusOnActivate&&this.adapter.focus()},e.prototype.deactivate=function(){this.isActive()&&(this.adapter.removeClass(xa.ACTIVE),this.adapter.setAttr(Na.ARIA_SELECTED,"false"),this.adapter.setAttr(Na.TABINDEX,"-1"),this.adapter.deactivateIndicator())},e.prototype.computeDimensions=function(){var t=this.adapter.getOffsetWidth(),e=this.adapter.getOffsetLeft(),n=this.adapter.getContentOffsetWidth(),i=this.adapter.getContentOffsetLeft();return{contentLeft:e+i,contentRight:e+i+n,rootLeft:e,rootRight:e+t}},e}(V); +var Pa=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.initialize=function(t,e){void 0===t&&(t=function(t,e){return new lt(t,e)}),void 0===e&&(e=function(t){return new Da(t)}),this.id=this.root.id;var n=new ct(lt.createAdapter(this));this.ripple=t(this.root,n);var i=this.root.querySelector(wa.strings.TAB_INDICATOR_SELECTOR);this.tabIndicator=e(i),this.content=this.root.querySelector(wa.strings.CONTENT_SELECTOR)},e.prototype.initialSyncWithDOM=function(){var t=this;this.handleClick=function(){t.foundation.handleClick()},this.listen("click",this.handleClick)},e.prototype.destroy=function(){this.unlisten("click",this.handleClick),this.ripple.destroy(),t.prototype.destroy.call(this)},e.prototype.getDefaultFoundation=function(){var t=this;return new wa({setAttr:function(e,n){return t.root.setAttribute(e,n)},addClass:function(e){return t.root.classList.add(e)},removeClass:function(e){return t.root.classList.remove(e)},hasClass:function(e){return t.root.classList.contains(e)},activateIndicator:function(e){t.tabIndicator.activate(e)},deactivateIndicator:function(){t.tabIndicator.deactivate()},notifyInteracted:function(){return t.emit(wa.strings.INTERACTED_EVENT,{tabId:t.id},!0)},getOffsetLeft:function(){return t.root.offsetLeft},getOffsetWidth:function(){return t.root.offsetWidth},getContentOffsetLeft:function(){return t.content.offsetLeft},getContentOffsetWidth:function(){return t.content.offsetWidth},focus:function(){return t.root.focus()}})},Object.defineProperty(e.prototype,"active",{get:function(){return this.foundation.isActive()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"focusOnActivate",{set:function(t){this.foundation.setFocusOnActivate(t)},enumerable:!1,configurable:!0}),e.prototype.activate=function(t){this.foundation.activate(t)},e.prototype.deactivate=function(){this.foundation.deactivate()},e.prototype.computeIndicatorClientRect=function(){return this.tabIndicator.computeContentClientRect()},e.prototype.computeDimensions=function(){return this.foundation.computeDimensions()},e.prototype.focus=function(){this.root.focus()},e}(U),Ma={ARROW_LEFT_KEY:"ArrowLeft",ARROW_RIGHT_KEY:"ArrowRight",END_KEY:"End",ENTER_KEY:"Enter",HOME_KEY:"Home",SPACE_KEY:"Space",TAB_ACTIVATED_EVENT:"MDCTabBar:activated",TAB_SCROLLER_SELECTOR:".mdc-tab-scroller",TAB_SELECTOR:".mdc-tab"},Ha={ARROW_LEFT_KEYCODE:37,ARROW_RIGHT_KEYCODE:39,END_KEYCODE:35,ENTER_KEYCODE:13,EXTRA_SCROLL_AMOUNT:20,HOME_KEYCODE:36,SPACE_KEYCODE:32},Fa=new Set;Fa.add(Ma.ARROW_LEFT_KEY),Fa.add(Ma.ARROW_RIGHT_KEY),Fa.add(Ma.END_KEY),Fa.add(Ma.HOME_KEY),Fa.add(Ma.ENTER_KEY),Fa.add(Ma.SPACE_KEY);var ka=new Map;ka.set(Ha.ARROW_LEFT_KEYCODE,Ma.ARROW_LEFT_KEY),ka.set(Ha.ARROW_RIGHT_KEYCODE,Ma.ARROW_RIGHT_KEY),ka.set(Ha.END_KEYCODE,Ma.END_KEY),ka.set(Ha.HOME_KEYCODE,Ma.HOME_KEY),ka.set(Ha.ENTER_KEYCODE,Ma.ENTER_KEY),ka.set(Ha.SPACE_KEYCODE,Ma.SPACE_KEY);var Ba=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.useAutomaticActivation=!1,i}return w(e,t),Object.defineProperty(e,"strings",{get:function(){return Ma},enumerable:!1,configurable:!0}),Object.defineProperty(e,"numbers",{get:function(){return Ha},enumerable:!1,configurable:!0}),Object.defineProperty(e,"defaultAdapter",{get:function(){return{scrollTo:function(){},incrementScroll:function(){},getScrollPosition:function(){return 0},getScrollContentWidth:function(){return 0},getOffsetWidth:function(){return 0},isRTL:function(){return!1},setActiveTab:function(){},activateTabAtIndex:function(){},deactivateTabAtIndex:function(){},focusTabAtIndex:function(){},getTabIndicatorClientRectAtIndex:function(){return{top:0,right:0,bottom:0,left:0,width:0,height:0}},getTabDimensionsAtIndex:function(){return{rootLeft:0,rootRight:0,contentLeft:0,contentRight:0}},getPreviousActiveTabIndex:function(){return-1},getFocusedTabIndex:function(){return-1},getIndexOfTabById:function(){return-1},getTabListLength:function(){return 0},notifyTabActivated:function(){}}},enumerable:!1,configurable:!0}),e.prototype.setUseAutomaticActivation=function(t){this.useAutomaticActivation=t},e.prototype.activateTab=function(t){var e,n=this.adapter.getPreviousActiveTabIndex();this.indexIsInRange(t)&&t!==n&&(-1!==n&&(this.adapter.deactivateTabAtIndex(n),e=this.adapter.getTabIndicatorClientRectAtIndex(n)),this.adapter.activateTabAtIndex(t,e),this.scrollIntoView(t),this.adapter.notifyTabActivated(t))},e.prototype.handleKeyDown=function(t){var e=this.getKeyFromEvent(t);if(void 0!==e)if(this.isActivationKey(e)||t.preventDefault(),this.useAutomaticActivation){if(this.isActivationKey(e))return;var n=this.determineTargetFromKey(this.adapter.getPreviousActiveTabIndex(),e);this.adapter.setActiveTab(n),this.scrollIntoView(n)}else{var i=this.adapter.getFocusedTabIndex();if(this.isActivationKey(e))this.adapter.setActiveTab(i);else{n=this.determineTargetFromKey(i,e);this.adapter.focusTabAtIndex(n),this.scrollIntoView(n)}}},e.prototype.handleTabInteraction=function(t){this.adapter.setActiveTab(this.adapter.getIndexOfTabById(t.detail.tabId))},e.prototype.scrollIntoView=function(t){this.indexIsInRange(t)&&(0!==t?t!==this.adapter.getTabListLength()-1?this.isRTL()?this.scrollIntoViewImplRTL(t):this.scrollIntoViewImpl(t):this.adapter.scrollTo(this.adapter.getScrollContentWidth()):this.adapter.scrollTo(0))},e.prototype.determineTargetFromKey=function(t,e){var n=this.isRTL(),i=this.adapter.getTabListLength()-1,r=t;return e===Ma.END_KEY?r=i:e===Ma.ARROW_LEFT_KEY&&!n||e===Ma.ARROW_RIGHT_KEY&&n?r-=1:e===Ma.ARROW_RIGHT_KEY&&!n||e===Ma.ARROW_LEFT_KEY&&n?r+=1:r=0,r<0?r=i:r>i&&(r=0),r},e.prototype.calculateScrollIncrement=function(t,e,n,i){var r=this.adapter.getTabDimensionsAtIndex(e),o=r.contentLeft-n-i,a=r.contentRight-n-Ha.EXTRA_SCROLL_AMOUNT,s=o+Ha.EXTRA_SCROLL_AMOUNT;return et?Math.max(s,0):Math.min(u,0)},e.prototype.findAdjacentTabIndexClosestToEdge=function(t,e,n,i){var r=e.rootLeft-n,o=e.rootRight-n-i,a=r+o;return r<0||a<0?t-1:o>0||a>0?t+1:-1},e.prototype.findAdjacentTabIndexClosestToEdgeRTL=function(t,e,n,i,r){var o=r-e.rootLeft-i-n,a=r-e.rootRight-n,s=o+a;return o>0||s>0?t+1:a<0||s<0?t-1:-1},e.prototype.getKeyFromEvent=function(t){return Fa.has(t.key)?t.key:ka.get(t.keyCode)},e.prototype.isActivationKey=function(t){return t===Ma.SPACE_KEY||t===Ma.ENTER_KEY},e.prototype.indexIsInRange=function(t){return t>=0&&t")}(a),t._helperText.foundation.setPersistent(!0),t._helperText.foundation.setValidation(!0),t._helperText.foundation.setValidity(!1),t._textField.foundation.setValid(!1),o&&t._textField.foundation.adapter.shakeLabel(!0)):""!==n?(t._helperText.foundation.setContent(n),t._helperText.foundation.setPersistent(i),t._helperText.foundation.setValidation(!1),t._helperText.foundation.setValidity(!0),t._textField.foundation.setValid(!0)):(t._helperText.foundation.setContent(""),t._helperText.foundation.setPersistent(!1),t._helperText.foundation.setValidation(!1),t._helperText.foundation.setValidity(!0),t._textField.foundation.setValid(!0))))}function Qa(t,e,n,i,r){t&&n&&(n.setAttribute("type",i),n.setAttribute("formnovalidate",r),t._textField.value=e,r&&1==t._textField.foundation.adapter.isFocused()&&n.select())}!function(t){t.RICH="mdc-tooltip--rich",t.SHOWN="mdc-tooltip--shown",t.SHOWING="mdc-tooltip--showing",t.SHOWING_TRANSITION="mdc-tooltip--showing-transition",t.HIDE="mdc-tooltip--hide",t.HIDE_TRANSITION="mdc-tooltip--hide-transition",t.MULTILINE_TOOLTIP="mdc-tooltip--multiline",t.SURFACE="mdc-tooltip__surface",t.SURFACE_ANIMATION="mdc-tooltip__surface-animation",t.TOOLTIP_CARET_TOP="mdc-tooltip__caret-surface-top",t.TOOLTIP_CARET_BOTTOM="mdc-tooltip__caret-surface-bottom"}(Va||(Va={}));var Za,$a,Ja,ts={BOUNDED_ANCHOR_GAP:4,UNBOUNDED_ANCHOR_GAP:8,MIN_VIEWPORT_TOOLTIP_THRESHOLD:8,HIDE_DELAY_MS:600,SHOW_DELAY_MS:500,MIN_HEIGHT:24,MAX_WIDTH:200,CARET_INDENTATION:24,ANIMATION_SCALE:.8},es="aria-expanded",ns="aria-haspopup",is="data-mdc-tooltip-persistent",rs="data-mdc-tooltip-has-caret",os="MDCTooltip:hidden";!function(t){t[t.DETECTED=0]="DETECTED",t[t.START=1]="START",t[t.CENTER=2]="CENTER",t[t.END=3]="END"}(Za||(Za={})),function(t){t[t.DETECTED=0]="DETECTED",t[t.ABOVE=1]="ABOVE",t[t.BELOW=2]="BELOW"}($a||($a={})),function(t){t[t.BOUNDED=0]="BOUNDED",t[t.UNBOUNDED=1]="UNBOUNDED"}(Ja||(Ja={}));var as,ss,us,cs="left",ls="right",ds="center",hs="top",ps="bottom";!function(t){t[t.DETECTED=0]="DETECTED",t[t.ABOVE_START=1]="ABOVE_START",t[t.ABOVE_CENTER=2]="ABOVE_CENTER",t[t.ABOVE_END=3]="ABOVE_END",t[t.TOP_SIDE_START=4]="TOP_SIDE_START",t[t.CENTER_SIDE_START=5]="CENTER_SIDE_START",t[t.BOTTOM_SIDE_START=6]="BOTTOM_SIDE_START",t[t.TOP_SIDE_END=7]="TOP_SIDE_END",t[t.CENTER_SIDE_END=8]="CENTER_SIDE_END",t[t.BOTTOM_SIDE_END=9]="BOTTOM_SIDE_END",t[t.BELOW_START=10]="BELOW_START",t[t.BELOW_CENTER=11]="BELOW_CENTER",t[t.BELOW_END=12]="BELOW_END"}(as||(as={})),function(t){t[t.ABOVE=1]="ABOVE",t[t.BELOW=2]="BELOW",t[t.SIDE_TOP=3]="SIDE_TOP",t[t.SIDE_CENTER=4]="SIDE_CENTER",t[t.SIDE_BOTTOM=5]="SIDE_BOTTOM"}(ss||(ss={})),function(t){t[t.START=1]="START",t[t.CENTER=2]="CENTER",t[t.END=3]="END",t[t.SIDE_START=4]="SIDE_START",t[t.SIDE_END=5]="SIDE_END"}(us||(us={})); +var fs,ms=Va.RICH,Es=Va.SHOWN,gs=Va.SHOWING,Ts=Va.SHOWING_TRANSITION,ys=Va.HIDE,As=Va.HIDE_TRANSITION,vs=Va.MULTILINE_TOOLTIP;!function(t){t.POLL_ANCHOR="poll_anchor"}(fs||(fs={}));var Cs="undefined"!=typeof window,Is=function(t){function e(n){var i=t.call(this,P(P({},e.defaultAdapter),n))||this;return i.tooltipShown=!1,i.anchorGap=ts.BOUNDED_ANCHOR_GAP,i.xTooltipPos=Za.DETECTED,i.yTooltipPos=$a.DETECTED,i.tooltipPositionWithCaret=as.DETECTED,i.minViewportTooltipThreshold=ts.MIN_VIEWPORT_TOOLTIP_THRESHOLD,i.hideDelayMs=ts.HIDE_DELAY_MS,i.showDelayMs=ts.SHOW_DELAY_MS,i.anchorRect=null,i.parentRect=null,i.frameId=null,i.hideTimeout=null,i.showTimeout=null,i.addAncestorScrollEventListeners=new Array,i.removeAncestorScrollEventListeners=new Array,i.animFrame=new vi,i.anchorBlurHandler=function(t){i.handleAnchorBlur(t)},i.documentClickHandler=function(t){i.handleDocumentClick(t)},i.documentKeydownHandler=function(t){i.handleKeydown(t)},i.tooltipMouseEnterHandler=function(){i.handleTooltipMouseEnter()},i.tooltipMouseLeaveHandler=function(){i.handleTooltipMouseLeave()},i.richTooltipFocusOutHandler=function(t){i.handleRichTooltipFocusOut(t)},i.windowScrollHandler=function(){i.handleWindowScrollEvent()},i.windowResizeHandler=function(){i.handleWindowChangeEvent()},i}return w(e,t),Object.defineProperty(e,"defaultAdapter",{get:function(){return{getAttribute:function(){return null},setAttribute:function(){},removeAttribute:function(){},addClass:function(){},hasClass:function(){return!1},removeClass:function(){},getComputedStyleProperty:function(){return""},setStyleProperty:function(){},setSurfaceAnimationStyleProperty:function(){},getViewportWidth:function(){return 0},getViewportHeight:function(){return 0},getTooltipSize:function(){return{width:0,height:0}},getAnchorBoundingRect:function(){return{top:0,right:0,bottom:0,left:0,width:0,height:0}},getParentBoundingRect:function(){return{top:0,right:0,bottom:0,left:0,width:0,height:0}},getAnchorAttribute:function(){return null},setAnchorAttribute:function(){return null},isRTL:function(){return!1},anchorContainsElement:function(){return!1},tooltipContainsElement:function(){return!1},focusAnchorElement:function(){},registerEventHandler:function(){},deregisterEventHandler:function(){},registerAnchorEventHandler:function(){},deregisterAnchorEventHandler:function(){},registerDocumentEventHandler:function(){},deregisterDocumentEventHandler:function(){},registerWindowEventHandler:function(){},deregisterWindowEventHandler:function(){},notifyHidden:function(){},getTooltipCaretBoundingRect:function(){return{top:0,right:0,bottom:0,left:0,width:0,height:0}},setTooltipCaretStyle:function(){},clearTooltipCaretStyles:function(){},getActiveElement:function(){return null}}},enumerable:!1,configurable:!0}),e.prototype.init=function(){this.richTooltip=this.adapter.hasClass(ms),this.persistentTooltip="true"===this.adapter.getAttribute(is),this.interactiveTooltip=!!this.adapter.getAnchorAttribute(es)&&"dialog"===this.adapter.getAnchorAttribute(ns),this.hasCaret=this.richTooltip&&"true"===this.adapter.getAttribute(rs)},e.prototype.isShown=function(){return this.tooltipShown},e.prototype.isRich=function(){return this.richTooltip},e.prototype.isPersistent=function(){return this.persistentTooltip},e.prototype.handleAnchorMouseEnter=function(){var t=this;this.tooltipShown?this.show():(this.clearHideTimeout(),this.showTimeout=setTimeout((function(){t.show()}),this.showDelayMs))},e.prototype.handleAnchorTouchstart=function(){var t=this;this.showTimeout=setTimeout((function(){t.show()}),this.showDelayMs),this.adapter.registerWindowEventHandler("contextmenu",this.preventContextMenuOnLongTouch)},e.prototype.preventContextMenuOnLongTouch=function(t){t.preventDefault()},e.prototype.handleAnchorTouchend=function(){this.clearShowTimeout(),this.isShown()||this.adapter.deregisterWindowEventHandler("contextmenu",this.preventContextMenuOnLongTouch)},e.prototype.handleAnchorFocus=function(t){var e=this,n=t.relatedTarget;n instanceof HTMLElement&&this.adapter.tooltipContainsElement(n)||(this.showTimeout=setTimeout((function(){e.show()}),this.showDelayMs))},e.prototype.handleAnchorMouseLeave=function(){var t=this;this.clearShowTimeout(),this.hideTimeout=setTimeout((function(){t.hide()}),this.hideDelayMs)},e.prototype.handleAnchorClick=function(){this.tooltipShown?this.hide():this.show()},e.prototype.handleDocumentClick=function(t){var e=t.target instanceof HTMLElement&&(this.adapter.anchorContainsElement(t.target)||this.adapter.tooltipContainsElement(t.target));this.richTooltip&&this.persistentTooltip&&e||this.hide()},e.prototype.handleKeydown=function(t){if(re(t)===Vt.ESCAPE){var e=this.adapter.getActiveElement();e instanceof HTMLElement&&this.adapter.tooltipContainsElement(e)&&this.adapter.focusAnchorElement(),this.hide()}},e.prototype.handleAnchorBlur=function(t){if(this.richTooltip){if(t.relatedTarget instanceof HTMLElement&&this.adapter.tooltipContainsElement(t.relatedTarget))return;if(null===t.relatedTarget&&this.interactiveTooltip)return}this.hide()},e.prototype.handleTooltipMouseEnter=function(){this.show()},e.prototype.handleTooltipMouseLeave=function(){var t=this;this.clearShowTimeout(),this.hideTimeout=setTimeout((function(){t.hide()}),this.hideDelayMs)},e.prototype.handleRichTooltipFocusOut=function(t){t.relatedTarget instanceof HTMLElement&&(this.adapter.anchorContainsElement(t.relatedTarget)||this.adapter.tooltipContainsElement(t.relatedTarget))||null===t.relatedTarget&&this.interactiveTooltip||this.hide()},e.prototype.handleWindowScrollEvent=function(){this.persistentTooltip?this.handleWindowChangeEvent():this.hide()},e.prototype.handleWindowChangeEvent=function(){var t=this;this.animFrame.request(fs.POLL_ANCHOR,(function(){t.repositionTooltipOnAnchorMove()}))},e.prototype.show=function(){var t,e,n=this;if(this.clearHideTimeout(),this.clearShowTimeout(),!this.tooltipShown){this.tooltipShown=!0,this.adapter.removeAttribute("aria-hidden"),this.richTooltip&&(this.interactiveTooltip&&this.adapter.setAnchorAttribute("aria-expanded","true"),this.adapter.registerEventHandler("focusout",this.richTooltipFocusOutHandler)),this.persistentTooltip||(this.adapter.registerEventHandler("mouseenter",this.tooltipMouseEnterHandler),this.adapter.registerEventHandler("mouseleave",this.tooltipMouseLeaveHandler)),this.adapter.removeClass(ys),this.adapter.addClass(gs),this.isTooltipMultiline()&&!this.richTooltip&&this.adapter.addClass(vs),this.anchorRect=this.adapter.getAnchorBoundingRect(),this.parentRect=this.adapter.getParentBoundingRect(),this.richTooltip?this.positionRichTooltip():this.positionPlainTooltip(),this.adapter.registerAnchorEventHandler("blur",this.anchorBlurHandler),this.adapter.registerDocumentEventHandler("click",this.documentClickHandler),this.adapter.registerDocumentEventHandler("keydown",this.documentKeydownHandler),this.adapter.registerWindowEventHandler("scroll",this.windowScrollHandler),this.adapter.registerWindowEventHandler("resize",this.windowResizeHandler);try{for(var i=F(this.addAncestorScrollEventListeners),r=i.next();!r.done;r=i.next()){(0,r.value)()}}catch(e){t={error:e}}finally{try{r&&!r.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}this.frameId=requestAnimationFrame((function(){n.clearAllAnimationClasses(),n.adapter.addClass(Es),n.adapter.addClass(Ts)}))}},e.prototype.hide=function(){var t,e;if(this.clearHideTimeout(),this.clearShowTimeout(),this.tooltipShown){this.frameId&&cancelAnimationFrame(this.frameId),this.tooltipShown=!1,this.adapter.setAttribute("aria-hidden","true"),this.adapter.deregisterEventHandler("focusout",this.richTooltipFocusOutHandler),this.richTooltip&&this.interactiveTooltip&&this.adapter.setAnchorAttribute("aria-expanded","false"),this.persistentTooltip||(this.adapter.deregisterEventHandler("mouseenter",this.tooltipMouseEnterHandler),this.adapter.deregisterEventHandler("mouseleave",this.tooltipMouseLeaveHandler)),this.clearAllAnimationClasses(),this.adapter.addClass(ys),this.adapter.addClass(As),this.adapter.removeClass(Es),this.adapter.deregisterAnchorEventHandler("blur",this.anchorBlurHandler),this.adapter.deregisterDocumentEventHandler("click",this.documentClickHandler),this.adapter.deregisterDocumentEventHandler("keydown",this.documentKeydownHandler),this.adapter.deregisterWindowEventHandler("scroll",this.windowScrollHandler),this.adapter.deregisterWindowEventHandler("resize",this.windowResizeHandler),this.adapter.deregisterWindowEventHandler("contextmenu",this.preventContextMenuOnLongTouch);try{for(var n=F(this.removeAncestorScrollEventListeners),i=n.next();!i.done;i=n.next()){(0,i.value)()}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}}},e.prototype.handleTransitionEnd=function(){var t=this.adapter.hasClass(ys);this.adapter.removeClass(gs),this.adapter.removeClass(Ts),this.adapter.removeClass(ys),this.adapter.removeClass(As),t&&null===this.showTimeout&&this.adapter.notifyHidden()},e.prototype.clearAllAnimationClasses=function(){this.adapter.removeClass(Ts),this.adapter.removeClass(As)},e.prototype.setTooltipPosition=function(t){var e=t.xPos,n=t.yPos,i=t.withCaretPos;this.hasCaret&&i?this.tooltipPositionWithCaret=i:(e&&(this.xTooltipPos=e),n&&(this.yTooltipPos=n))},e.prototype.setAnchorBoundaryType=function(t){t===Ja.UNBOUNDED?this.anchorGap=ts.UNBOUNDED_ANCHOR_GAP:this.anchorGap=ts.BOUNDED_ANCHOR_GAP},e.prototype.setShowDelay=function(t){this.showDelayMs=t},e.prototype.setHideDelay=function(t){this.hideDelayMs=t},e.prototype.isTooltipMultiline=function(){var t=this.adapter.getTooltipSize();return t.height>ts.MIN_HEIGHT&&t.width>=ts.MAX_WIDTH},e.prototype.positionPlainTooltip=function(){var t=this.calculateTooltipStyles(this.anchorRect),e=t.top,n=t.yTransformOrigin,i=t.left,r=t.xTransformOrigin,o=Cs?Se(window,"transform"):"transform";this.adapter.setSurfaceAnimationStyleProperty(o+"-origin",r+" "+n),this.adapter.setStyleProperty("top",e+"px"),this.adapter.setStyleProperty("left",i+"px")},e.prototype.positionRichTooltip=function(){var t,e,n,i,r=this.adapter.getComputedStyleProperty("width");this.adapter.setStyleProperty("width",r);var o=this.hasCaret?this.calculateTooltipWithCaretStyles(this.anchorRect):this.calculateTooltipStyles(this.anchorRect),a=o.top,s=o.yTransformOrigin,u=o.left,c=o.xTransformOrigin,l=Cs?Se(window,"transform"):"transform";this.adapter.setSurfaceAnimationStyleProperty(l+"-origin",c+" "+s);var d=u-(null!==(e=null===(t=this.parentRect)||void 0===t?void 0:t.left)&&void 0!==e?e:0),h=a-(null!==(i=null===(n=this.parentRect)||void 0===n?void 0:n.top)&&void 0!==i?i:0);this.adapter.setStyleProperty("top",h+"px"),this.adapter.setStyleProperty("left",d+"px")},e.prototype.calculateTooltipStyles=function(t){if(!t)return{top:0,left:0};var e=this.adapter.getTooltipSize(),n=this.calculateYTooltipDistance(t,e.height),i=this.calculateXTooltipDistance(t,e.width);return{top:n.distance,yTransformOrigin:n.yTransformOrigin,left:i.distance,xTransformOrigin:i.xTransformOrigin}},e.prototype.calculateXTooltipDistance=function(t,e){var n,i,r,o,a,s=!this.adapter.isRTL();this.richTooltip?(n=s?t.left-e:t.right,i=s?t.right:t.left-e,o=s?ls:cs,a=s?cs:ls):(n=s?t.left:t.right-e,i=s?t.right-e:t.left,r=t.left+(t.width-e)/2,o=s?cs:ls,a=s?ls:cs);var u=this.richTooltip?this.determineValidPositionOptions(n,i):this.determineValidPositionOptions(r,n,i);if(this.xTooltipPos===Za.START&&u.has(n))return{distance:n,xTransformOrigin:o};if(this.xTooltipPos===Za.END&&u.has(i))return{distance:i,xTransformOrigin:a};if(this.xTooltipPos===Za.CENTER&&u.has(r))return{distance:r,xTransformOrigin:ds};var c=(this.richTooltip?[{distance:i,xTransformOrigin:a},{distance:n,xTransformOrigin:o}]:[{distance:r,xTransformOrigin:ds},{distance:n,xTransformOrigin:o},{distance:i,xTransformOrigin:a}]).find((function(t){var e=t.distance;return u.has(e)}));return c||(t.left<0?{distance:this.minViewportTooltipThreshold,xTransformOrigin:cs}:{distance:this.adapter.getViewportWidth()-(e+this.minViewportTooltipThreshold),xTransformOrigin:ls})},e.prototype.determineValidPositionOptions=function(){for(var t,e,n=[],i=0;i=this.minViewportTooltipThreshold},e.prototype.positionDoesntCollideWithViewport=function(t){var e=this.adapter.getViewportWidth();return t+this.adapter.getTooltipSize().width<=e&&t>=0},e.prototype.calculateYTooltipDistance=function(t,e){var n=t.bottom+this.anchorGap,i=t.top-(this.anchorGap+e),r=this.determineValidYPositionOptions(i,n);return this.yTooltipPos===$a.ABOVE&&r.has(i)?{distance:i,yTransformOrigin:ps}:this.yTooltipPos===$a.BELOW&&r.has(n)||r.has(n)?{distance:n,yTransformOrigin:hs}:r.has(i)?{distance:i,yTransformOrigin:ps}:{distance:n,yTransformOrigin:hs}},e.prototype.determineValidYPositionOptions=function(t,e){var n=new Set,i=new Set;return this.yPositionHonorsViewportThreshold(t)?n.add(t):this.yPositionDoesntCollideWithViewport(t)&&i.add(t),this.yPositionHonorsViewportThreshold(e)?n.add(e):this.yPositionDoesntCollideWithViewport(e)&&i.add(e),n.size?n:i},e.prototype.yPositionHonorsViewportThreshold=function(t){var e=this.adapter.getViewportHeight();return t+this.adapter.getTooltipSize().height+this.minViewportTooltipThreshold<=e&&t>=this.minViewportTooltipThreshold},e.prototype.yPositionDoesntCollideWithViewport=function(t){var e=this.adapter.getViewportHeight();return t+this.adapter.getTooltipSize().height<=e&&t>=0},e.prototype.calculateTooltipWithCaretStyles=function(t){this.adapter.clearTooltipCaretStyles();var e=this.adapter.getTooltipCaretBoundingRect();if(!t||!e)return{position:as.DETECTED,top:0,left:0};var n=e.width/ts.ANIMATION_SCALE,i=e.height/ts.ANIMATION_SCALE/2,r=this.adapter.getTooltipSize(),o=this.calculateYWithCaretDistanceOptions(t,r.height,{caretWidth:n,caretHeight:i}),a=this.calculateXWithCaretDistanceOptions(t,r.width,{caretWidth:n,caretHeight:i}),s=this.validateTooltipWithCaretDistances(o,a);s.size<1&&(s=this.generateBackupPositionOption(t,r,{caretWidth:n,caretHeight:i}));var u=this.determineTooltipWithCaretDistance(s),c=u.position,l=u.xDistance,d=u.yDistance,h=this.setCaretPositionStyles(c,{caretWidth:n,caretHeight:i});return{yTransformOrigin:h.yTransformOrigin,xTransformOrigin:h.xTransformOrigin,top:d,left:l}},e.prototype.calculateXWithCaretDistanceOptions=function(t,e,n){var i=n.caretWidth,r=n.caretHeight,o=!this.adapter.isRTL(),a=t.left+t.width/2,s=t.left-(e+this.anchorGap+r),u=t.right+this.anchorGap+r,c=o?s:u,l=o?u:s,d=a-(ts.CARET_INDENTATION+i/2),h=a-(e-ts.CARET_INDENTATION-i/2),p=o?d:h,f=o?h:d,m=a-e/2;return new Map([[us.START,p],[us.CENTER,m],[us.END,f],[us.SIDE_END,l],[us.SIDE_START,c]])},e.prototype.calculateYWithCaretDistanceOptions=function(t,e,n){var i=n.caretWidth,r=n.caretHeight,o=t.top+t.height/2,a=t.bottom+this.anchorGap+r,s=t.top-(this.anchorGap+e+r),u=o-(ts.CARET_INDENTATION+i/2),c=o-e/2,l=o-(e-ts.CARET_INDENTATION-i/2);return new Map([[ss.ABOVE,s],[ss.BELOW,a],[ss.SIDE_TOP,u],[ss.SIDE_CENTER,c],[ss.SIDE_BOTTOM,l]])},e.prototype.repositionTooltipOnAnchorMove=function(){var t=this.adapter.getAnchorBoundingRect();t&&this.anchorRect&&(t.top===this.anchorRect.top&&t.left===this.anchorRect.left&&t.height===this.anchorRect.height&&t.width===this.anchorRect.width||(this.anchorRect=t,this.parentRect=this.adapter.getParentBoundingRect(),this.richTooltip?this.positionRichTooltip():this.positionPlainTooltip()))},e.prototype.validateTooltipWithCaretDistances=function(t,e){var n,i,r,o,a,s,u=new Map,c=new Map,l=new Map([[ss.ABOVE,[us.START,us.CENTER,us.END]],[ss.BELOW,[us.START,us.CENTER,us.END]],[ss.SIDE_TOP,[us.SIDE_START,us.SIDE_END]],[ss.SIDE_CENTER,[us.SIDE_START,us.SIDE_END]],[ss.SIDE_BOTTOM,[us.SIDE_START,us.SIDE_END]]]);try{for(var d=F(l.keys()),h=d.next();!h.done;h=d.next()){var p=h.value,f=t.get(p);if(this.yPositionHonorsViewportThreshold(f))try{for(var m=(r=void 0,F(l.get(p))),E=m.next();!E.done;E=m.next()){var g=E.value,T=e.get(g);if(this.positionHonorsViewportThreshold(T)){var y=this.caretPositionOptionsMapping(g,p);u.set(y,{xDistance:T,yDistance:f})}}}catch(t){r={error:t}}finally{try{E&&!E.done&&(o=m.return)&&o.call(m)}finally{if(r)throw r.error}}if(this.yPositionDoesntCollideWithViewport(f))try{for(var A=(a=void 0,F(l.get(p))),v=A.next();!v.done;v=A.next()){g=v.value,T=e.get(g);if(this.positionDoesntCollideWithViewport(T)){y=this.caretPositionOptionsMapping(g,p);c.set(y,{xDistance:T,yDistance:f})}}}catch(t){a={error:t}}finally{try{v&&!v.done&&(s=A.return)&&s.call(A)}finally{if(a)throw a.error}}}}catch(t){n={error:t}}finally{try{h&&!h.done&&(i=d.return)&&i.call(d)}finally{if(n)throw n.error}}return u.size?u:c},e.prototype.generateBackupPositionOption=function(t,e,n){var i,r,o,a,s=!this.adapter.isRTL();t.left<0?(i=this.minViewportTooltipThreshold+n.caretHeight,r=s?us.END:us.START):(i=this.adapter.getViewportWidth()-(e.width+this.minViewportTooltipThreshold+n.caretHeight),r=s?us.START:us.END);t.top<0?(o=this.minViewportTooltipThreshold+n.caretHeight,a=ss.BELOW):(o=this.adapter.getViewportHeight()-(e.height+this.minViewportTooltipThreshold+n.caretHeight),a=ss.ABOVE);var u=this.caretPositionOptionsMapping(r,a);return new Map([[u,{xDistance:i,yDistance:o}]])},e.prototype.determineTooltipWithCaretDistance=function(t){if(t.has(this.tooltipPositionWithCaret)){var e=t.get(this.tooltipPositionWithCaret);return{position:this.tooltipPositionWithCaret,xDistance:e.xDistance,yDistance:e.yDistance}}var n=[as.ABOVE_START,as.ABOVE_CENTER,as.ABOVE_END,as.TOP_SIDE_START,as.CENTER_SIDE_START,as.BOTTOM_SIDE_START,as.TOP_SIDE_END,as.CENTER_SIDE_END,as.BOTTOM_SIDE_END,as.BELOW_START,as.BELOW_CENTER,as.BELOW_END].find((function(e){return t.has(e)})),i=t.get(n);return{position:n,xDistance:i.xDistance,yDistance:i.yDistance}},e.prototype.caretPositionOptionsMapping=function(t,e){switch(e){case ss.ABOVE:if(t===us.START)return as.ABOVE_START;if(t===us.CENTER)return as.ABOVE_CENTER;if(t===us.END)return as.ABOVE_END;break;case ss.BELOW:if(t===us.START)return as.BELOW_START;if(t===us.CENTER)return as.BELOW_CENTER;if(t===us.END)return as.BELOW_END;break;case ss.SIDE_TOP:if(t===us.SIDE_START)return as.TOP_SIDE_START;if(t===us.SIDE_END)return as.TOP_SIDE_END;break;case ss.SIDE_CENTER:if(t===us.SIDE_START)return as.CENTER_SIDE_START;if(t===us.SIDE_END)return as.CENTER_SIDE_END;break;case ss.SIDE_BOTTOM:if(t===us.SIDE_START)return as.BOTTOM_SIDE_START;if(t===us.SIDE_END)return as.BOTTOM_SIDE_END}throw new Error("MDCTooltipFoundation: Invalid caret position of "+t+", "+e)},e.prototype.setCaretPositionStyles=function(t,e){var n,i,r=this.calculateCaretPositionOnTooltip(t,e);if(!r)return{yTransformOrigin:0,xTransformOrigin:0};this.adapter.clearTooltipCaretStyles(),this.adapter.setTooltipCaretStyle(r.yAlignment,r.yAxisPx),this.adapter.setTooltipCaretStyle(r.xAlignment,r.xAxisPx);var o=r.skew*(Math.PI/180),a=Math.cos(o);this.adapter.setTooltipCaretStyle("transform","rotate("+r.rotation+"deg) skewY("+r.skew+"deg) scaleX("+a+")"),this.adapter.setTooltipCaretStyle("transform-origin",r.xAlignment+" "+r.yAlignment);try{for(var s=F(r.caretCorners),u=s.next();!u.done;u=s.next()){var c=u.value;this.adapter.setTooltipCaretStyle(c,"0")}}catch(t){n={error:t}}finally{try{u&&!u.done&&(i=s.return)&&i.call(s)}finally{if(n)throw n.error}}return{yTransformOrigin:r.yTransformOrigin,xTransformOrigin:r.xTransformOrigin}},e.prototype.calculateCaretPositionOnTooltip=function(t,e){var n=!this.adapter.isRTL(),i=this.adapter.getComputedStyleProperty("width"),r=this.adapter.getComputedStyleProperty("height");if(i&&r&&e){var o="calc(("+i+" - "+e.caretWidth+"px) / 2)",a="calc(("+r+" - "+e.caretWidth+"px) / 2)",s="0",u=ts.CARET_INDENTATION+"px",c="calc("+i+" - "+u+")",l="calc("+r+" - "+u+")",d=35,h=Math.abs(55),p=["border-bottom-right-radius","border-top-left-radius"],f=["border-bottom-left-radius","border-top-right-radius"],m=20;switch(t){case as.BELOW_CENTER:return{yAlignment:hs,xAlignment:cs,yAxisPx:s,xAxisPx:o,rotation:-35,skew:-20,xTransformOrigin:o,yTransformOrigin:s,caretCorners:p};case as.BELOW_END:return{yAlignment:hs,xAlignment:n?ls:cs,yAxisPx:s,xAxisPx:u,rotation:n?d:-35,skew:n?m:-20,xTransformOrigin:n?c:u,yTransformOrigin:s,caretCorners:n?f:p};case as.BELOW_START:return{yAlignment:hs,xAlignment:n?cs:ls,yAxisPx:s,xAxisPx:u,rotation:n?-35:d,skew:n?-20:m,xTransformOrigin:n?u:c,yTransformOrigin:s,caretCorners:n?p:f};case as.TOP_SIDE_END:return{yAlignment:hs,xAlignment:n?cs:ls,yAxisPx:u,xAxisPx:s,rotation:n?h:-1*h,skew:n?-20:m,xTransformOrigin:n?s:i,yTransformOrigin:u,caretCorners:n?p:f};case as.CENTER_SIDE_END:return{yAlignment:hs,xAlignment:n?cs:ls,yAxisPx:a,xAxisPx:s,rotation:n?h:-1*h,skew:n?-20:m,xTransformOrigin:n?s:i,yTransformOrigin:a,caretCorners:n?p:f};case as.BOTTOM_SIDE_END:return{yAlignment:ps,xAlignment:n?cs:ls,yAxisPx:u,xAxisPx:s,rotation:n?-1*h:h,skew:n?m:-20,xTransformOrigin:n?s:i,yTransformOrigin:l,caretCorners:n?f:p};case as.TOP_SIDE_START:return{yAlignment:hs,xAlignment:n?ls:cs,yAxisPx:u,xAxisPx:s,rotation:n?-1*h:h,skew:n?m:-20,xTransformOrigin:n?i:s,yTransformOrigin:u,caretCorners:n?f:p};case as.CENTER_SIDE_START:return{yAlignment:hs,xAlignment:n?ls:cs,yAxisPx:a,xAxisPx:s,rotation:n?-1*h:h,skew:n?m:-20,xTransformOrigin:n?i:s,yTransformOrigin:a,caretCorners:n?f:p};case as.BOTTOM_SIDE_START:return{yAlignment:ps,xAlignment:n?ls:cs,yAxisPx:u,xAxisPx:s,rotation:n?h:-1*h,skew:n?-20:m,xTransformOrigin:n?i:s,yTransformOrigin:l,caretCorners:n?p:f};case as.ABOVE_CENTER:return{yAlignment:ps,xAlignment:cs,yAxisPx:s,xAxisPx:o,rotation:d,skew:m,xTransformOrigin:o,yTransformOrigin:r,caretCorners:f};case as.ABOVE_END:return{yAlignment:ps,xAlignment:n?ls:cs,yAxisPx:s,xAxisPx:u,rotation:n?-35:d,skew:n?-20:m,xTransformOrigin:n?c:u,yTransformOrigin:r,caretCorners:n?p:f};default:case as.ABOVE_START:return{yAlignment:ps,xAlignment:n?cs:ls,yAxisPx:s,xAxisPx:u,rotation:n?d:-35,skew:n?m:-20,xTransformOrigin:n?u:c,yTransformOrigin:r,caretCorners:n?f:p}}}},e.prototype.clearShowTimeout=function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=null)},e.prototype.clearHideTimeout=function(){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=null)},e.prototype.attachScrollHandler=function(t){var e=this;this.addAncestorScrollEventListeners.push((function(){t("scroll",e.windowScrollHandler)}))},e.prototype.removeScrollHandler=function(t){var e=this;this.removeAncestorScrollEventListeners.push((function(){t("scroll",e.windowScrollHandler)}))},e.prototype.destroy=function(){var t,e;this.frameId&&(cancelAnimationFrame(this.frameId),this.frameId=null),this.clearHideTimeout(),this.clearShowTimeout(),this.adapter.removeClass(Es),this.adapter.removeClass(Ts),this.adapter.removeClass(gs),this.adapter.removeClass(ys),this.adapter.removeClass(As),this.richTooltip&&this.adapter.deregisterEventHandler("focusout",this.richTooltipFocusOutHandler),this.persistentTooltip||(this.adapter.deregisterEventHandler("mouseenter",this.tooltipMouseEnterHandler),this.adapter.deregisterEventHandler("mouseleave",this.tooltipMouseLeaveHandler)),this.adapter.deregisterAnchorEventHandler("blur",this.anchorBlurHandler),this.adapter.deregisterDocumentEventHandler("click",this.documentClickHandler),this.adapter.deregisterDocumentEventHandler("keydown",this.documentKeydownHandler),this.adapter.deregisterWindowEventHandler("scroll",this.windowScrollHandler),this.adapter.deregisterWindowEventHandler("resize",this.windowResizeHandler);try{for(var n=F(this.removeAncestorScrollEventListeners),i=n.next();!i.done;i=n.next()){(0,i.value)()}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}this.animFrame.cancelAll()},e}(V); +var Ss=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.initialize=function(){var t=this.root.getAttribute("id");if(!t)throw new Error("MDCTooltip: Tooltip component must have an id.");var e=document.querySelector('[data-tooltip-id="'+t+'"]')||document.querySelector('[aria-describedby="'+t+'"]');if(!e)throw new Error("MDCTooltip: Tooltip component requires an anchor element annotated with [aria-describedby] or [data-tooltip-id].");this.anchorElem=e},e.prototype.initialSyncWithDOM=function(){var t=this;this.isTooltipRich=this.foundation.isRich(),this.isTooltipPersistent=this.foundation.isPersistent(),this.handleMouseEnter=function(){t.foundation.handleAnchorMouseEnter()},this.handleFocus=function(e){t.foundation.handleAnchorFocus(e)},this.handleMouseLeave=function(){t.foundation.handleAnchorMouseLeave()},this.handleTransitionEnd=function(){t.foundation.handleTransitionEnd()},this.handleClick=function(){t.foundation.handleAnchorClick()},this.handleTouchstart=function(){t.foundation.handleAnchorTouchstart()},this.handleTouchend=function(){t.foundation.handleAnchorTouchend()},this.isTooltipRich&&this.isTooltipPersistent?this.anchorElem.addEventListener("click",this.handleClick):(this.anchorElem.addEventListener("mouseenter",this.handleMouseEnter),this.anchorElem.addEventListener("focus",this.handleFocus),this.anchorElem.addEventListener("mouseleave",this.handleMouseLeave),this.anchorElem.addEventListener("touchstart",this.handleTouchstart),this.anchorElem.addEventListener("touchend",this.handleTouchend)),this.listen("transitionend",this.handleTransitionEnd)},e.prototype.destroy=function(){this.anchorElem&&(this.isTooltipRich&&this.isTooltipPersistent?this.anchorElem.removeEventListener("click",this.handleClick):(this.anchorElem.removeEventListener("mouseenter",this.handleMouseEnter),this.anchorElem.removeEventListener("focus",this.handleFocus),this.anchorElem.removeEventListener("mouseleave",this.handleMouseLeave),this.anchorElem.removeEventListener("touchstart",this.handleTouchstart),this.anchorElem.removeEventListener("touchend",this.handleTouchend))),this.unlisten("transitionend",this.handleTransitionEnd),t.prototype.destroy.call(this)},e.prototype.setTooltipPosition=function(t){this.foundation.setTooltipPosition(t)},e.prototype.setAnchorBoundaryType=function(t){this.foundation.setAnchorBoundaryType(t)},e.prototype.setShowDelay=function(t){this.foundation.setShowDelay(t)},e.prototype.setHideDelay=function(t){this.foundation.setHideDelay(t)},e.prototype.hide=function(){this.foundation.hide()},e.prototype.isShown=function(){return this.foundation.isShown()},e.prototype.attachScrollHandler=function(t){this.foundation.attachScrollHandler(t)},e.prototype.removeScrollHandler=function(t){this.foundation.removeScrollHandler(t)},e.prototype.getDefaultFoundation=function(){var t=this,e={getAttribute:function(e){return t.root.getAttribute(e)},setAttribute:function(e,n){t.root.setAttribute(e,n)},removeAttribute:function(e){t.root.removeAttribute(e)},addClass:function(e){t.root.classList.add(e)},hasClass:function(e){return t.root.classList.contains(e)},removeClass:function(e){t.root.classList.remove(e)},getComputedStyleProperty:function(e){return window.getComputedStyle(t.root).getPropertyValue(e)},setStyleProperty:function(e,n){t.root.style.setProperty(e,n)},setSurfaceAnimationStyleProperty:function(e,n){var i=t.root.querySelector("."+Va.SURFACE_ANIMATION);null==i||i.style.setProperty(e,n)},getViewportWidth:function(){return window.innerWidth},getViewportHeight:function(){return window.innerHeight},getTooltipSize:function(){return{width:t.root.offsetWidth,height:t.root.offsetHeight}},getAnchorBoundingRect:function(){return t.anchorElem?t.anchorElem.getBoundingClientRect():null},getParentBoundingRect:function(){var e,n;return null!==(n=null===(e=t.root.parentElement)||void 0===e?void 0:e.getBoundingClientRect())&&void 0!==n?n:null},getAnchorAttribute:function(e){return t.anchorElem?t.anchorElem.getAttribute(e):null},setAnchorAttribute:function(e,n){var i;null===(i=t.anchorElem)||void 0===i||i.setAttribute(e,n)},isRTL:function(){return"rtl"===getComputedStyle(t.root).direction},anchorContainsElement:function(e){var n;return!!(null===(n=t.anchorElem)||void 0===n?void 0:n.contains(e))},tooltipContainsElement:function(e){return t.root.contains(e)},focusAnchorElement:function(){var e;null===(e=t.anchorElem)||void 0===e||e.focus()},registerEventHandler:function(e,n){t.root instanceof HTMLElement&&t.root.addEventListener(e,n)},deregisterEventHandler:function(e,n){t.root instanceof HTMLElement&&t.root.removeEventListener(e,n)},registerAnchorEventHandler:function(e,n){var i;null===(i=t.anchorElem)||void 0===i||i.addEventListener(e,n)},deregisterAnchorEventHandler:function(e,n){var i;null===(i=t.anchorElem)||void 0===i||i.removeEventListener(e,n)},registerDocumentEventHandler:function(t,e){document.body.addEventListener(t,e)},deregisterDocumentEventHandler:function(t,e){document.body.removeEventListener(t,e)},registerWindowEventHandler:function(t,e){window.addEventListener(t,e)},deregisterWindowEventHandler:function(t,e){window.removeEventListener(t,e)},notifyHidden:function(){t.emit(os,{})},getTooltipCaretBoundingRect:function(){var e=t.root.querySelector("."+Va.TOOLTIP_CARET_TOP);return e?e.getBoundingClientRect():null},setTooltipCaretStyle:function(e,n){var i=t.root.querySelector("."+Va.TOOLTIP_CARET_TOP),r=t.root.querySelector("."+Va.TOOLTIP_CARET_BOTTOM);i&&r&&(i.style.setProperty(e,n),r.style.setProperty(e,n))},clearTooltipCaretStyles:function(){var e=t.root.querySelector("."+Va.TOOLTIP_CARET_TOP),n=t.root.querySelector("."+Va.TOOLTIP_CARET_BOTTOM);e&&n&&(e.removeAttribute("style"),n.removeAttribute("style"))},getActiveElement:function(){return document.activeElement}};return new Is(e)},e}(U);function bs(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return _s(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _s(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,o=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function _s(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n0?this.currentAppBarOffsetTop=0:Math.abs(this.currentAppBarOffsetTop)>this.topAppBarHeight&&(this.currentAppBarOffsetTop=-this.topAppBarHeight),this.moveTopAppBar())},e.prototype.handleWindowResize=function(){var t=this;this.resizeThrottleId||(this.resizeThrottleId=setTimeout((function(){t.resizeThrottleId=0,t.throttledResizeHandler()}),Ls.DEBOUNCE_THROTTLE_RESIZE_TIME_MS)),this.isCurrentlyBeingResized=!0,this.resizeDebounceId&&clearTimeout(this.resizeDebounceId),this.resizeDebounceId=setTimeout((function(){t.handleTargetScroll(),t.isCurrentlyBeingResized=!1,t.resizeDebounceId=0}),Ls.DEBOUNCE_THROTTLE_RESIZE_TIME_MS)},e.prototype.checkForUpdate=function(){var t=-this.topAppBarHeight,e=this.currentAppBarOffsetTop<0,n=this.currentAppBarOffsetTop>t,i=e&&n;if(i)this.wasDocked=!1;else{if(!this.wasDocked)return this.wasDocked=!0,!0;if(this.isDockedShowing!==n)return this.isDockedShowing=n,!0}return i},e.prototype.moveTopAppBar=function(){if(this.checkForUpdate()){var t=this.currentAppBarOffsetTop;Math.abs(t)>=this.topAppBarHeight&&(t=-Ls.MAX_TOP_APP_BAR_HEIGHT),this.adapter.setStyle("top",t+"px")}},e.prototype.throttledResizeHandler=function(){var t=this.adapter.getTopAppBarHeight();this.topAppBarHeight!==t&&(this.wasDocked=!1,this.currentAppBarOffsetTop-=this.topAppBarHeight-t,this.topAppBarHeight=t),this.handleTargetScroll()},e}(xs); +var ws=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.wasScrolled=!1,e}return w(e,t),e.prototype.handleTargetScroll=function(){this.adapter.getViewportScrollY()<=0?this.wasScrolled&&(this.adapter.removeClass(Rs.FIXED_SCROLLED_CLASS),this.wasScrolled=!1):this.wasScrolled||(this.adapter.addClass(Rs.FIXED_SCROLLED_CLASS),this.wasScrolled=!0)},e}(Ns); +var Ps=function(t){function e(e){var n=t.call(this,e)||this;return n.collapsed=!1,n.isAlwaysCollapsed=!1,n}return w(e,t),Object.defineProperty(e.prototype,"isCollapsed",{get:function(){return this.collapsed},enumerable:!1,configurable:!0}),e.prototype.init=function(){t.prototype.init.call(this),this.adapter.getTotalActionItems()>0&&this.adapter.addClass(Rs.SHORT_HAS_ACTION_ITEM_CLASS),this.setAlwaysCollapsed(this.adapter.hasClass(Rs.SHORT_COLLAPSED_CLASS))},e.prototype.setAlwaysCollapsed=function(t){this.isAlwaysCollapsed=!!t,this.isAlwaysCollapsed?this.collapse():this.maybeCollapseBar()},e.prototype.getAlwaysCollapsed=function(){return this.isAlwaysCollapsed},e.prototype.handleTargetScroll=function(){this.maybeCollapseBar()},e.prototype.maybeCollapseBar=function(){this.isAlwaysCollapsed||(this.adapter.getViewportScrollY()<=0?this.collapsed&&this.uncollapse():this.collapsed||this.collapse())},e.prototype.uncollapse=function(){this.adapter.removeClass(Rs.SHORT_COLLAPSED_CLASS),this.collapsed=!1},e.prototype.collapse=function(){this.adapter.addClass(Rs.SHORT_COLLAPSED_CLASS),this.collapsed=!0},e}(xs); +var Ms=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return w(e,t),e.attachTo=function(t){return new e(t)},e.prototype.initialize=function(t){void 0===t&&(t=function(t){return lt.attachTo(t)}),this.navIcon=this.root.querySelector(Ds.NAVIGATION_ICON_SELECTOR);var e=[].slice.call(this.root.querySelectorAll(Ds.ACTION_ITEM_SELECTOR));this.navIcon&&e.push(this.navIcon),this.iconRipples=e.map((function(e){var n=t(e);return n.unbounded=!0,n})),this.scrollTarget=window},e.prototype.initialSyncWithDOM=function(){this.handleNavigationClick=this.foundation.handleNavigationClick.bind(this.foundation),this.handleWindowResize=this.foundation.handleWindowResize.bind(this.foundation),this.handleTargetScroll=this.foundation.handleTargetScroll.bind(this.foundation),this.scrollTarget.addEventListener("scroll",this.handleTargetScroll),this.navIcon&&this.navIcon.addEventListener("click",this.handleNavigationClick);var t=this.root.classList.contains(Rs.FIXED_CLASS);this.root.classList.contains(Rs.SHORT_CLASS)||t||window.addEventListener("resize",this.handleWindowResize)},e.prototype.destroy=function(){var e,n;try{for(var i=F(this.iconRipples),r=i.next();!r.done;r=i.next()){r.value.destroy()}}catch(t){e={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}this.scrollTarget.removeEventListener("scroll",this.handleTargetScroll),this.navIcon&&this.navIcon.removeEventListener("click",this.handleNavigationClick);var o=this.root.classList.contains(Rs.FIXED_CLASS);this.root.classList.contains(Rs.SHORT_CLASS)||o||window.removeEventListener("resize",this.handleWindowResize),t.prototype.destroy.call(this)},e.prototype.setScrollTarget=function(t){this.scrollTarget.removeEventListener("scroll",this.handleTargetScroll),this.scrollTarget=t,this.handleTargetScroll=this.foundation.handleTargetScroll.bind(this.foundation),this.scrollTarget.addEventListener("scroll",this.handleTargetScroll)},e.prototype.getDefaultFoundation=function(){var t=this,e={hasClass:function(e){return t.root.classList.contains(e)},addClass:function(e){return t.root.classList.add(e)},removeClass:function(e){return t.root.classList.remove(e)},setStyle:function(e,n){return t.root.style.setProperty(e,n)},getTopAppBarHeight:function(){return t.root.clientHeight},notifyNavigationIconClicked:function(){return t.emit(Ds.NAVIGATION_EVENT,{})},getViewportScrollY:function(){var e=t.scrollTarget,n=t.scrollTarget;return void 0!==e.pageYOffset?e.pageYOffset:n.scrollTop},getTotalActionItems:function(){return t.root.querySelectorAll(Ds.ACTION_ITEM_SELECTOR).length}};return this.root.classList.contains(Rs.SHORT_CLASS)?new Ps(e):this.root.classList.contains(Rs.FIXED_CLASS)?new ws(e):new Ns(e)},e}(U);function Hs(t,e){t&&(t._topAppBar=Ms.attachTo(t),e&&t._topAppBar.setScrollTarget(document.querySelector(e)))}function Fs(){var t=document.documentElement.getAttribute("dir");return!t||"rtl"===t.toLowerCase()}function ks(t){if(!t)return!1;for(var e=t,n="";e&&e!==document&&(!n||""===n)&&(!((n=e.getAttribute("dir"))&&n.length>0)||"ltr"!==(n=n.toLowerCase())&&"auto"!==n);e=e.parentNode);return null!==n&&"rtl"===n.toLowerCase()}window.MaterialBlazor={MBAutocompletePagedField:t,MBAutocompleteTextField:e,MBBladeSet:i,MBButton:r,MBCard:o,MBCheckbox:a,MBCircularProgress:s,MBDataTable:u,MBDatePicker:c,MBDialog:l,MBDrawer:d,MBDragAndDropList:h,MBFileUpload:p,MBFloatingActionButton:f,MBIconButton:m,MBIconButtonToggle:E,MBLinearProgress:g,MBList:T,MBMenu:y,MBMenuSurface:A,MBRadioButton:v,MBSegmentedButtonMulti:C,MBSelect:I,MBSlider:S,MBSnackbar:b,MBSwitch:_,MBTabBar:O,MBTextField:R,MBTooltip:L,MBTopAppBar:D,RTL:x}})()})(); \ No newline at end of file diff --git a/README.md b/README.md index 78fe624ec..d224b1841 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,8 @@ Material.Blazor is a lightweight [Material Theme](https://material.io/) [web dev Material.Blazor has two release trains available via NuGet. The trains are MD2 and MD3 based. The MD2 NuGet packages are available in V3, V4, and V5. The MD3 NuGet packages are available in V5. -- V3.x is a DotNet 6 LTS stable version using Material Design 2 and is the version used in most production settings. This version will be deprecated on November 12, 2024 (Corresponding to the DN6 EOL). No updates to Material.Blazor in this version are expected. This version will be deprecated on November 12, 2024. -- V4.x is a DotNet 7 STS stable version using Material Design 2 and is the version used in some production settings. This version will be deprecated on May 14, 2024 (Corresponding to the DN7 EOL). No updates to Material.Blazor in this version are expected. This version will be deprecated on May 14, 2024. +- V3.x is a DotNet 6 LTS stable version using Material Design 2 and is the version used in most production settings. This version will be deprecated on November 12, 2024 (Corresponding to the DN6 EOL). No updates to Material.Blazor in this version are expected. +- V4.x is a DotNet 7 STS stable version using Material Design 2 and is the version used in some production settings. This version will be deprecated on May 14, 2024 (Corresponding to the DN7 EOL). No updates to Material.Blazor in this version are expected. - V5.x is a DotNet 8 LTS stable version. We encourage adoption of this version for existing and new production settings. - V5.x also has introductory work using Material Design 3. - To see the MD3 work in progress you need to browse to https://material-blazor.github.io/Material.Blazor.MD3.Current/) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 4d0491426..64f61ca60 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -4,15 +4,36 @@ title: ReleaseNotes --- # Release Notes +#### [5.2.1](https://github.com/Material-Blazor/Material.Blazor/tree/5.2.1) + +Released 2024-03-?? + +**Updates** +- MD2/MD3: Dependabot updates. +- MD2: Enhancements to RTL in switch + +**New components** + +**New features** + +**Breaking Changes** + +**Deprecated Components** + +**Known issues** + +
+ #### [5.2.0](https://github.com/Material-Blazor/Material.Blazor/tree/5.2.0) Released 2024-03-07 **Updates** +- MD2/MD3: .Net 8.0.3 updates - MD2/MD3: Dependabot updates. - MD2: Repaired DemonstrationPage.razor.cs; adding missing '!'; removing extraneous duplicate source page. -- Repaired Material Symbols handling through cascading defaults. -- Repaired autocomplete components to escape input for correct handling with Regex. +- MD2: Repaired Material Symbols handling through cascading defaults. +- MD2: Repaired autocomplete components to escape input for correct handling with Regex. **New components** @@ -24,7 +45,7 @@ Released 2024-03-07 **Breaking Changes** **Deprecated Components** -- Icon colour for Material Symbols icons wil be removed in the next major release. This is because color should be handled via CSS. +- Icon color for Material Symbols icons wil be removed in the next major release. This is because color should be handled via CSS. **Known issues**