Repository: angular/material Branch: master Commit: 952c06705a7e Files: 727 Total size: 4.1 MB Directory structure: gitextract_pok300ue/ ├── .circleci/ │ └── config.yml ├── .clang-format ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .github/ │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE/ │ │ ├── bug.md │ │ ├── config.yml │ │ └── docs.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ └── codeql-analysis.yml ├── .gitignore ├── .jshintrc ├── .mailmap ├── .nvmrc ├── .vscode/ │ ├── README.md │ ├── extensions.json │ └── settings.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── SECURITY.md ├── config/ │ ├── .jshintrc │ ├── build.config.js │ ├── karma-circleci.conf.js │ ├── karma-docs.conf.js │ ├── karma-jenkins.conf.js │ ├── karma-sauce.conf.js │ ├── karma-travis.conf.js │ ├── karma.conf.js │ ├── ngModuleData.js │ └── sauce-browsers.json ├── docs/ │ ├── README.md │ ├── app/ │ │ ├── css/ │ │ │ ├── highlightjs-material.css │ │ │ ├── layout-demo.css │ │ │ └── style.css │ │ ├── js/ │ │ │ ├── anchor.js │ │ │ ├── app.js │ │ │ ├── codepen.js │ │ │ ├── css-api-table.js │ │ │ ├── demo.js │ │ │ ├── demoInclude.js │ │ │ ├── highlight-angular.js │ │ │ ├── highlight.pack.js │ │ │ ├── ngPanel.js │ │ │ ├── preload.js │ │ │ └── scripts.js │ │ ├── partials/ │ │ │ ├── contributors.tmpl.html │ │ │ ├── demo.tmpl.html │ │ │ ├── docs-demo.tmpl.html │ │ │ ├── getting-started.tmpl.html │ │ │ ├── home.tmpl.html │ │ │ ├── layout-alignment.tmpl.html │ │ │ ├── layout-children.tmpl.html │ │ │ ├── layout-container.tmpl.html │ │ │ ├── layout-introduction.tmpl.html │ │ │ ├── layout-options.tmpl.html │ │ │ ├── layout-tips.tmpl.html │ │ │ ├── license.tmpl.html │ │ │ ├── menu-link.tmpl.html │ │ │ ├── menu-toggle.tmpl.html │ │ │ └── view-source.tmpl.html │ │ └── svg-assets-cache.js │ ├── config/ │ │ ├── index.js │ │ ├── processors/ │ │ │ ├── buildConfig.js │ │ │ ├── componentsData.js │ │ │ ├── content.js │ │ │ └── indexPage.js │ │ └── template/ │ │ ├── build-config.js │ │ ├── constant-data.template.js │ │ ├── demo-index.template.html │ │ ├── index.template.html │ │ ├── ngdoc/ │ │ │ ├── api/ │ │ │ │ ├── api.template.html │ │ │ │ ├── componentGroup.template.html │ │ │ │ ├── directive.template.html │ │ │ │ ├── filter.template.html │ │ │ │ ├── function.template.html │ │ │ │ ├── input.template.html │ │ │ │ ├── module.template.html │ │ │ │ ├── object.template.html │ │ │ │ ├── provider.template.html │ │ │ │ ├── service.template.html │ │ │ │ └── type.template.html │ │ │ ├── base.template.html │ │ │ ├── content.template.html │ │ │ └── lib/ │ │ │ ├── events.template.html │ │ │ ├── macros.html │ │ │ ├── methods.template.html │ │ │ ├── params.template.html │ │ │ ├── properties.template.html │ │ │ ├── returns.template.html │ │ │ └── this.template.html │ │ ├── readme.template.html │ │ └── template.json │ ├── content/ │ │ ├── CSS/ │ │ │ ├── button.md │ │ │ ├── checkbox.md │ │ │ └── typography.md │ │ ├── Theming/ │ │ │ ├── 01_introduction.md │ │ │ ├── 02_declarative_syntax.md │ │ │ ├── 03_configuring_a_theme.md │ │ │ ├── 04_multiple_themes.md │ │ │ ├── 05_under_the_hood.md │ │ │ └── 06_browser_color.md │ │ ├── migration.md │ │ └── performance/ │ │ └── internet-explorer.md │ ├── guides/ │ │ ├── BUILD.md │ │ ├── CODEPEN.md │ │ ├── CODING.md │ │ ├── COMMIT_LEVELS.md │ │ ├── MERGE_REQUESTS.md │ │ ├── PULL_REQUESTS.md │ │ └── THEMES_IMPL_NOTES.md │ ├── gulpfile.js │ └── spec/ │ ├── codepen.spec.js │ └── demo.spec.js ├── gulp/ │ ├── .jshintrc │ ├── config.js │ ├── const.js │ ├── tasks/ │ │ ├── build-all-modules.js │ │ ├── build-contributors.js │ │ ├── build-demo.js │ │ ├── build-js.js │ │ ├── build-module-demo.js │ │ ├── build-scss.js │ │ ├── build.js │ │ ├── changelog.js │ │ ├── ddescribe-iit.js │ │ ├── default.js │ │ ├── docs.js │ │ ├── jshint.js │ │ ├── karma-fast.js │ │ ├── karma-sauce.js │ │ ├── karma-watch.js │ │ ├── karma.js │ │ ├── server.js │ │ ├── site.js │ │ ├── validate.js │ │ ├── watch-demo.js │ │ └── watch.js │ └── util.js ├── gulpfile.js ├── package.json ├── release ├── release.js ├── scripts/ │ ├── bower-material-release.sh │ ├── build-asset-cache.sh │ ├── circleci/ │ │ ├── run-tests.sh │ │ └── update-snapshot-and-docs.sh │ ├── fetch-angular-version.sh │ ├── find-max-version.js │ ├── gulp-utils.js │ ├── sauce/ │ │ ├── setup-tunnel.sh │ │ ├── stop-tunnel.sh │ │ └── wait-tunnel.sh │ ├── snapshot-docs-site.sh │ ├── test-versions.sh │ ├── utils.inc │ └── write-presubmit-scheduler.js ├── src/ │ ├── components/ │ │ ├── autocomplete/ │ │ │ ├── autocomplete-theme.scss │ │ │ ├── autocomplete.js │ │ │ ├── autocomplete.scss │ │ │ ├── autocomplete.spec.js │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoCustomTemplate/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.global.css │ │ │ ├── demoFloatingLabel/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoInsideDialog/ │ │ │ │ ├── dialog.tmpl.html │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoRepeatMode/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.global.css │ │ │ └── js/ │ │ │ ├── autocompleteController.js │ │ │ ├── autocompleteDirective.js │ │ │ ├── autocompleteParentScopeDirective.js │ │ │ ├── highlightController.js │ │ │ └── highlightDirective.js │ │ ├── backdrop/ │ │ │ ├── backdrop-theme.scss │ │ │ ├── backdrop.js │ │ │ └── backdrop.scss │ │ ├── bottomSheet/ │ │ │ ├── bottom-sheet-theme.scss │ │ │ ├── bottom-sheet.js │ │ │ ├── bottom-sheet.scss │ │ │ ├── bottom-sheet.spec.js │ │ │ └── demoBasicUsage/ │ │ │ ├── bottom-sheet-grid-template.html │ │ │ ├── bottom-sheet-list-template.html │ │ │ ├── index.html │ │ │ ├── readme.html │ │ │ ├── script.js │ │ │ └── style.css │ │ ├── button/ │ │ │ ├── button-theme.scss │ │ │ ├── button.js │ │ │ ├── button.scss │ │ │ ├── button.spec.js │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ └── demoDense/ │ │ │ ├── index.html │ │ │ ├── script.js │ │ │ └── style.css │ │ ├── card/ │ │ │ ├── card-theme.scss │ │ │ ├── card.js │ │ │ ├── card.scss │ │ │ ├── card.spec.js │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoCardActionButtons/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ └── demoInCardActions/ │ │ │ ├── index.html │ │ │ └── script.js │ │ ├── checkbox/ │ │ │ ├── checkbox-theme.scss │ │ │ ├── checkbox.js │ │ │ ├── checkbox.scss │ │ │ ├── checkbox.spec.js │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoLabels/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoSelectAll/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ └── demoSyncing/ │ │ │ ├── index.html │ │ │ ├── script.js │ │ │ └── style.css │ │ ├── chips/ │ │ │ ├── chips-theme.scss │ │ │ ├── chips.js │ │ │ ├── chips.scss │ │ │ ├── chips.spec.js │ │ │ ├── contact-chips.spec.js │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── readme.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoContactChips/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoCustomInputs/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoCustomSeparatorKeys/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoStaticChips/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoValidation/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ └── js/ │ │ │ ├── chipController.js │ │ │ ├── chipDirective.js │ │ │ ├── chipRemoveDirective.js │ │ │ ├── chipTranscludeDirective.js │ │ │ ├── chipsController.js │ │ │ ├── chipsDirective.js │ │ │ ├── contactChipsController.js │ │ │ └── contactChipsDirective.js │ │ ├── colors/ │ │ │ ├── colors.js │ │ │ ├── colors.spec.js │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── regularCard.tmpl.html │ │ │ │ ├── script.js │ │ │ │ ├── style.css │ │ │ │ └── userCard.tmpl.html │ │ │ └── demoThemePicker/ │ │ │ ├── index.html │ │ │ ├── script.js │ │ │ ├── style.css │ │ │ └── themePreview.tmpl.html │ │ ├── content/ │ │ │ ├── content-theme.scss │ │ │ ├── content.js │ │ │ ├── content.scss │ │ │ ├── content.spec.js │ │ │ └── demoBasicUsage/ │ │ │ ├── index.html │ │ │ ├── script.js │ │ │ └── style.css │ │ ├── datepicker/ │ │ │ ├── calendar-theme.scss │ │ │ ├── calendar.scss │ │ │ ├── datePicker-theme.scss │ │ │ ├── datePicker.js │ │ │ ├── datePicker.scss │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoCalendar/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoMoment/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoMomentCustomFormat/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoNgModelOptionsTimezone/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoValidations/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ └── js/ │ │ │ ├── calendar.js │ │ │ ├── calendar.spec.js │ │ │ ├── calendarMonth.js │ │ │ ├── calendarMonthBody.js │ │ │ ├── calendarYear.js │ │ │ ├── calendarYearBody.js │ │ │ ├── dateLocale.spec.js │ │ │ ├── dateLocaleProvider.js │ │ │ ├── dateUtil.js │ │ │ ├── dateUtil.spec.js │ │ │ ├── datepickerDirective.js │ │ │ └── datepickerDirective.spec.js │ │ ├── dialog/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── dialog1.tmpl.html │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ ├── style.css │ │ │ │ └── tabDialog.tmpl.html │ │ │ ├── demoOpenFromCloseTo/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoThemeInheritance/ │ │ │ │ ├── dialog1.tmpl.html │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── dialog-theme.scss │ │ │ ├── dialog.js │ │ │ ├── dialog.scss │ │ │ └── dialog.spec.js │ │ ├── divider/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── divider-theme.scss │ │ │ ├── divider.js │ │ │ └── divider.scss │ │ ├── fabActions/ │ │ │ ├── fabActions.js │ │ │ └── fabActions.spec.js │ │ ├── fabSpeedDial/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoMoreOptions/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── fabController.js │ │ │ ├── fabSpeedDial-theme.scss │ │ │ ├── fabSpeedDial.js │ │ │ ├── fabSpeedDial.scss │ │ │ └── fabSpeedDial.spec.js │ │ ├── fabToolbar/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── fabToolbar.js │ │ │ ├── fabToolbar.scss │ │ │ └── fabToolbar.spec.js │ │ ├── gridList/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── styles.css │ │ │ ├── demoDynamicTiles/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoResponsiveUsage/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── grid-list.js │ │ │ ├── grid-list.scss │ │ │ └── grid-list.spec.js │ │ ├── icon/ │ │ │ ├── demoFontIconsWithClassnames/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoFontIconsWithLigatures/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoLoadSvgIconsFromUrl/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoSvgIconSets/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoUsingTemplateRequest/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── icon-theme.scss │ │ │ ├── icon.js │ │ │ ├── icon.scss │ │ │ ├── icon.spec.js │ │ │ └── js/ │ │ │ ├── iconDirective.js │ │ │ └── iconService.js │ │ ├── input/ │ │ │ ├── _input-variables.scss │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoErrors/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoErrorsAdvanced/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoIcons/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoInlineForm/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── input-animations.spec.js │ │ │ ├── input-theme.scss │ │ │ ├── input.js │ │ │ ├── input.scss │ │ │ └── input.spec.js │ │ ├── list/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoListControls/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── list-theme.scss │ │ │ ├── list.js │ │ │ ├── list.scss │ │ │ └── list.spec.js │ │ ├── menu/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoCustomTrigger/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoMenuDensity/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoMenuPositionModes/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoMenuWidth/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── js/ │ │ │ │ ├── menuController.js │ │ │ │ ├── menuDirective.js │ │ │ │ └── menuServiceProvider.js │ │ │ ├── menu-theme.scss │ │ │ ├── menu.js │ │ │ ├── menu.scss │ │ │ └── menu.spec.js │ │ ├── menuBar/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoDynamicNestedMenus/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── js/ │ │ │ │ ├── menuBarController.js │ │ │ │ ├── menuBarDirective.js │ │ │ │ ├── menuDividerDirective.js │ │ │ │ ├── menuItemController.js │ │ │ │ └── menuItemDirective.js │ │ │ ├── menu-bar-theme.scss │ │ │ ├── menu-bar.js │ │ │ ├── menu-bar.scss │ │ │ └── menu-bar.spec.js │ │ ├── navBar/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── navBar-theme.scss │ │ │ ├── navBar.js │ │ │ ├── navBar.scss │ │ │ └── navBar.spec.js │ │ ├── panel/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── panel.tmpl.html │ │ │ │ ├── script.js │ │ │ │ └── style.global.css │ │ │ ├── demoGroups/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.global.css │ │ │ ├── demoPanelAnimations/ │ │ │ │ ├── index.html │ │ │ │ ├── panel.tmpl.html │ │ │ │ ├── script.js │ │ │ │ └── style.global.css │ │ │ ├── demoPanelProvider/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.global.css │ │ │ ├── demoReuse/ │ │ │ │ ├── index.html │ │ │ │ ├── panel.tmpl.html │ │ │ │ ├── script.js │ │ │ │ └── style.global.css │ │ │ ├── panel-theme.scss │ │ │ ├── panel.js │ │ │ ├── panel.scss │ │ │ └── panel.spec.js │ │ ├── progressCircular/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── js/ │ │ │ │ ├── progressCircularDirective.js │ │ │ │ └── progressCircularProvider.js │ │ │ ├── progress-circular-theme.scss │ │ │ ├── progress-circular.js │ │ │ ├── progress-circular.scss │ │ │ └── progress-circular.spec.js │ │ ├── progressLinear/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── progress-linear-theme.scss │ │ │ ├── progress-linear.js │ │ │ ├── progress-linear.scss │ │ │ └── progress-linear.spec.js │ │ ├── radioButton/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoMultiColumn/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── radio-button-theme.scss │ │ │ ├── radio-button.js │ │ │ ├── radio-button.scss │ │ │ └── radio-button.spec.js │ │ ├── select/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoOptionGroups/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoOptionsWithAsyncSearch/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoSelectHeader/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoSelectedText/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoTrackBy/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoValidations/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── select-theme.scss │ │ │ ├── select.js │ │ │ ├── select.scss │ │ │ └── select.spec.js │ │ ├── showHide/ │ │ │ ├── showHide.js │ │ │ └── showHide.spec.js │ │ ├── sidenav/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoCustomSidenav/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoDisableCloseEvents/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── sidenav-theme.scss │ │ │ ├── sidenav.js │ │ │ ├── sidenav.scss │ │ │ └── sidenav.spec.js │ │ ├── slider/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── demoVertical/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── slider-theme.scss │ │ │ ├── slider.js │ │ │ ├── slider.scss │ │ │ └── slider.spec.js │ │ ├── sticky/ │ │ │ ├── sticky.js │ │ │ ├── sticky.scss │ │ │ └── sticky.spec.js │ │ ├── subheader/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── subheader-theme.scss │ │ │ ├── subheader.js │ │ │ ├── subheader.scss │ │ │ └── subheader.spec.js │ │ ├── swipe/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── readme.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── swipe.js │ │ │ └── swipe.scss │ │ ├── switch/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── switch-theme.scss │ │ │ ├── switch.js │ │ │ ├── switch.scss │ │ │ └── switch.spec.js │ │ ├── tabs/ │ │ │ ├── demoCenterTabs/ │ │ │ │ ├── index.html │ │ │ │ ├── readme.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoDynamicHeight/ │ │ │ │ ├── index.html │ │ │ │ ├── readme.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoDynamicTabs/ │ │ │ │ ├── index.html │ │ │ │ ├── readme.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoStaticTabs/ │ │ │ │ ├── index.html │ │ │ │ ├── readme.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── js/ │ │ │ │ ├── tabDirective.js │ │ │ │ ├── tabItemDirective.js │ │ │ │ ├── tabLabelDirective.js │ │ │ │ ├── tabScroll.js │ │ │ │ ├── tabsController.js │ │ │ │ ├── tabsDirective.js │ │ │ │ ├── tabsDummyWrapperDirective.js │ │ │ │ └── tabsTemplateDirective.js │ │ │ ├── tabs-theme.scss │ │ │ ├── tabs.js │ │ │ ├── tabs.scss │ │ │ ├── tabs.spec.js │ │ │ ├── tabsPaginationService.js │ │ │ └── tabsPaginationService.spec.js │ │ ├── toast/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoCustomUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ ├── style.scss │ │ │ │ └── toast-template.html │ │ │ ├── toast-theme.scss │ │ │ ├── toast.js │ │ │ ├── toast.scss │ │ │ └── toast.spec.js │ │ ├── toolbar/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoInputsInToolbar/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.scss │ │ │ ├── demoScrollShrink/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── toolbar-theme.scss │ │ │ ├── toolbar.js │ │ │ ├── toolbar.scss │ │ │ └── toolbar.spec.js │ │ ├── tooltip/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ └── script.js │ │ │ ├── tooltip-theme.scss │ │ │ ├── tooltip.js │ │ │ ├── tooltip.scss │ │ │ └── tooltip.spec.js │ │ ├── truncate/ │ │ │ ├── demoBasicUsage/ │ │ │ │ ├── index.html │ │ │ │ └── style.scss │ │ │ ├── truncate.js │ │ │ ├── truncate.scss │ │ │ └── truncate.spec.js │ │ ├── virtualRepeat/ │ │ │ ├── demoDeferredLoading/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoHorizontalUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoInfiniteScroll/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoScrollTo/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── demoVerticalUsage/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── virtual-repeater.js │ │ │ ├── virtual-repeater.scss │ │ │ └── virtual-repeater.spec.js │ │ └── whiteframe/ │ │ ├── demoBasicClassUsage/ │ │ │ ├── index.html │ │ │ ├── script.js │ │ │ └── style.css │ │ ├── demoDirectiveAttributeUsage/ │ │ │ ├── index.html │ │ │ ├── script.js │ │ │ └── style.css │ │ ├── demoDirectiveInterpolation/ │ │ │ ├── index.html │ │ │ ├── script.js │ │ │ └── style.css │ │ ├── whiteframe.js │ │ ├── whiteframe.scss │ │ └── whiteframe.spec.js │ └── core/ │ ├── core.js │ ├── core.spec.js │ ├── services/ │ │ ├── aria/ │ │ │ ├── aria.js │ │ │ └── aria.spec.js │ │ ├── compiler/ │ │ │ ├── compiler.js │ │ │ └── compiler.spec.js │ │ ├── gesture/ │ │ │ ├── gesture.js │ │ │ └── gesture.spec.js │ │ ├── interaction/ │ │ │ ├── interaction.js │ │ │ └── interaction.spec.js │ │ ├── interimElement/ │ │ │ ├── interimElement.js │ │ │ └── interimElement.spec.js │ │ ├── layout/ │ │ │ ├── ie_fixes.css │ │ │ ├── layout-attributes.scss │ │ │ ├── layout.js │ │ │ ├── layout.scss │ │ │ └── layout.spec.js │ │ ├── liveAnnouncer/ │ │ │ ├── live-announcer.js │ │ │ └── live-announcer.spec.js │ │ ├── meta/ │ │ │ ├── meta.js │ │ │ └── meta.spec.js │ │ ├── registry/ │ │ │ ├── componentRegistry.js │ │ │ └── componentRegistry.spec.js │ │ ├── ripple/ │ │ │ ├── button_ripple.js │ │ │ ├── button_ripple.spec.js │ │ │ ├── checkbox_ripple.js │ │ │ ├── checkbox_ripple.spec.js │ │ │ ├── list_ripple.js │ │ │ ├── list_ripple.spec.js │ │ │ ├── ripple.js │ │ │ ├── ripple.spec.js │ │ │ ├── tab_ripple.js │ │ │ └── tab_ripple.spec.js │ │ └── theming/ │ │ ├── theme.palette.js │ │ ├── theming.js │ │ └── theming.spec.js │ ├── style/ │ │ ├── _mixins.scss │ │ ├── _modules.scss │ │ ├── _variables.scss │ │ ├── core-theme.scss │ │ ├── layout.scss │ │ ├── structure.scss │ │ └── typography.scss │ └── util/ │ ├── animation/ │ │ ├── animate.js │ │ ├── animate.spec.js │ │ ├── animateCss.js │ │ └── animateCss.spec.js │ ├── autofocus.js │ ├── autofocus.spec.js │ ├── color.js │ ├── constant.js │ ├── iterator.js │ ├── iterator.spec.js │ ├── media.js │ ├── media.spec.js │ ├── prefixer.js │ ├── prefixer.spec.js │ ├── util.js │ └── util.spec.js ├── start-hook.sh ├── test/ │ ├── .jshintrc │ ├── angular-material-mocks.js │ └── angular-material-spec.js ├── updateVersionPicker.js └── watch-hook.sh ================================================ FILE CONTENTS ================================================ ================================================ FILE: .circleci/config.yml ================================================ # Configuration file for https://circleci.com/gh/angular/material # Note: YAML anchors allow an object to be re-used, reducing duplication. # The ampersand declares an alias for an object, then later the `<<: *name` # syntax dereferences it. # See http://blog.daemonl.com/2016/02/yaml.html # To validate changes, use an online parser, eg. http://yaml-online-parser.appspot.com/ # Find the latest version and SHA here: https://hub.docker.com/r/circleci/node/tags var_1: &docker_image circleci/node:14.16.1-browsers var_2: &cache_key angularjs-material-{{ checksum "package-lock.json" }} # Settings common to each job var_3: &job_defaults working_directory: ~/ng docker: - image: *docker_image # Restores the cache that could be available for the current lock file. The cache # includes the node modules. var_4: &restore_cache restore_cache: key: *cache_key # Saves the cache for the current lock file. We store the node modules cache in order to make # subsequent builds faster. var_5: &save_cache save_cache: key: *cache_key paths: - "node_modules" - "$HOME/.npm" - "tmp/angular.js" # Job step that ensures that the node module dependencies are installed and up-to-date. We use # NPM with the frozen lockfile option in order to make sure that lock file and package.json are # in sync. Unlike in Travis, we don't need to manually purge the node modules if stale because # CircleCI automatically discards the cache if the checksum of the lock file has changed. var_6: &npm_install run: npm ci var_7: &store_junit_test_results store_test_results: path: ./artifacts/junit # Branch filter that we can specify for jobs that should only run on publish branches. This filter # is used to ensure that not all upstream branches will be published as GitHub builds # (e.g. revert branches, feature branches) var_8: &publish_branches_filter branches: only: - master # ----------------------------- # Container version of CircleCI # ----------------------------- version: 2.1 orbs: build-tools: circleci/build-tools@2.9.0 commands: # Command for checking out the source code from GitHub. This also ensures that the source code # can be merged to the master branch without conflicts. checkout_and_rebase: description: Checkout and verify clean merge with master steps: - checkout - run: name: Set git user.name and user.email for rebase. # User is required for rebase. command: | git config user.name "angular-ci" git config user.email "angular-ci" - build-tools/merge-with-parent: parent: master # ----------------------------------------------------------------------------------------- # Job definitions. Jobs which are defined just here, will not run automatically. Each job # must be part of a workflow definition in order to run for PRs and push builds. # ----------------------------------------------------------------------------------------- jobs: # ---------------------------------- # Lint job. Runs the lint task. # ---------------------------------- lint: <<: *job_defaults steps: - checkout_and_rebase - *restore_cache - *npm_install - run: npm run lint # ----------------------------------- # Build and test job. # ----------------------------------- build: <<: *job_defaults steps: - checkout_and_rebase - *restore_cache - *npm_install - run: npm run build - *save_cache build_js_modules: <<: *job_defaults steps: - checkout_and_rebase - *restore_cache - *npm_install - run: npm run build:modules - *save_cache build_closure_modules: <<: *job_defaults steps: - checkout_and_rebase - *restore_cache - *npm_install - run: npm run build:closure - *save_cache # ------------------------------------------------------------------------------------------ # Jobs that run the unit tests on locally installed browsers (Chrome and Firefox headless). # The available browsers are included in the Docker image. # ------------------------------------------------------------------------------------------ test_angularjs_1_7: <<: *job_defaults environment: NG_VERSION: "1.7" steps: - checkout_and_rebase - *restore_cache - *npm_install - run: ./scripts/circleci/run-tests.sh - *store_junit_test_results test_angularjs_1_8: <<: *job_defaults environment: NG_VERSION: "1.8" steps: - checkout_and_rebase - *restore_cache - *npm_install - run: ./scripts/circleci/run-tests.sh - *store_junit_test_results test_angularjs_snapshot: <<: *job_defaults environment: NG_VERSION: "snapshot" steps: - checkout_and_rebase - *restore_cache - *npm_install - run: ./scripts/circleci/run-tests.sh - *store_junit_test_results # ------------------------------------------------------------------------------------------ # Jobs that snapshot the `master` branch and update the docs on commits to master # ------------------------------------------------------------------------------------------ update_and_snapshot_docs: <<: *job_defaults steps: - checkout_and_rebase - *restore_cache - *npm_install - run: sudo npm i -g gulp@3.9 - run: git config --global --unset url.ssh://git@github.com.insteadof - run: ./scripts/circleci/update-snapshot-and-docs.sh --sha=${CIRCLE_SHA1} # ---------------------------------------------------------------------------------------- # Workflow definitions. A workflow usually groups multiple jobs together. This is useful if # one job depends on another. # ---------------------------------------------------------------------------------------- workflows: version: 2 # Lint workflow. As we want to lint in one job, this is a workflow with just one job. lint: jobs: - lint # Build and test workflow. A workflow includes multiple jobs that run in parallel. All jobs # that build and test source code should be part of this workflow. build_and_test: jobs: - build - test_angularjs_1_7: requires: - build - test_angularjs_1_8: requires: - build - test_angularjs_snapshot: requires: - build - build_js_modules: requires: - build - build_closure_modules: requires: - build - update_and_snapshot_docs: filters: *publish_branches_filter requires: - test_angularjs_1_7 - test_angularjs_1_8 - test_angularjs_snapshot - build_js_modules - build_closure_modules ================================================ FILE: .clang-format ================================================ Language: JavaScript BasedOnStyle: Google ColumnLimit: 100 TabWidth: 2 ContinuationIndentWidth: 4 MaxEmptyLinesToKeep : 2 AllowShortBlocksOnASingleLine: false AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false AllowShortFunctionsOnASingleLine: Empty ================================================ FILE: .editorconfig ================================================ root = true [*] charset = utf-8 indent_style = space indent_size = 2 insert_final_newline = true trim_trailing_whitespace = true [*.md] trim_trailing_whitespace = false ================================================ FILE: .eslintignore ================================================ # Ignore miscellaneous folders .github/ .idea/ node_modules/ dist/ tmp/ bower-material/ code.material.angularjs.org/ # Ignore certain project files src/core/services/compiler/compiler.spec.js docs/config/template/*.js docs/app/js/highlight.pack.js ================================================ FILE: .eslintrc.json ================================================ { "extends": "eslint:recommended", "parserOptions": { "ecmaVersion": 2021 }, "rules": { "accessor-pairs": "error", "array-bracket-newline": "off", "array-bracket-spacing": ["error", "never"], "array-callback-return": "error", "array-element-newline": "off", "arrow-body-style": "error", "arrow-parens": [ "error", "as-needed" ], "arrow-spacing": "error", "block-scoped-var": "off", "block-spacing": "off", "brace-style": "off", "callback-return": "off", "camelcase": "off", "capitalized-comments": "off", "class-methods-use-this": "error", "comma-dangle": "off", "comma-spacing": "off", "comma-style": [ "error", "last" ], "complexity": "off", "computed-property-spacing": "off", "consistent-return": "off", "consistent-this": "off", "curly": "off", "default-case": "off", "dot-location": "off", "dot-notation": "off", "eol-last": "off", "eqeqeq": "off", "for-direction": "error", "func-call-spacing": "off", "func-name-matching": "off", "func-names": "off", "func-style": "off", "generator-star-spacing": "error", "getter-return": "error", "global-require": "off", "guard-for-in": "off", "handle-callback-err": "error", "id-denylist": ["error"], "id-length": "off", "id-match": "error", "indent": "off", "indent-legacy": "off", "init-declarations": "off", "jsx-quotes": "error", "key-spacing": "off", "keyword-spacing": ["error", {"before": true, "after": true}], "line-comment-position": "off", "linebreak-style": "off", "lines-around-comment": "off", "lines-around-directive": "off", "max-depth": "error", "max-len": "off", "max-lines": "off", "max-nested-callbacks": "error", "max-params": "off", "max-statements": "off", "max-statements-per-line": "off", "multiline-ternary": "off", "new-parens": "error", "newline-after-var": "off", "newline-before-return": "off", "newline-per-chained-call": "off", "no-alert": "off", "no-array-constructor": "error", "no-await-in-loop": "error", "no-bitwise": "off", "no-buffer-constructor": "error", "no-caller": "error", "no-catch-shadow": "error", "no-confusing-arrow": "error", "no-console": [ "off" ], "no-constant-condition": [ "error", { "checkLoops": false } ], "no-continue": "off", "no-div-regex": "off", "no-duplicate-imports": "error", "no-else-return": "off", "no-empty-function": "off", "no-eq-null": "off", "no-eval": "error", "no-extend-native": "off", "no-extra-bind": "off", "no-extra-label": "error", "no-extra-parens": "off", "no-floating-decimal": "error", "no-implicit-coercion": [ "error", { "boolean": false, "number": false, "string": false } ], "no-implicit-globals": "off", "no-implied-eval": "error", "no-inline-comments": "off", "no-inner-declarations": [ "error", "functions" ], "no-invalid-this": "off", "no-iterator": "error", "no-label-var": "error", "no-labels": "error", "no-lone-blocks": "error", "no-lonely-if": "off", "no-loop-func": "error", "no-magic-numbers": "off", "no-mixed-operators": "off", "no-mixed-requires": "error", "no-multi-assign": "off", "no-multi-spaces": "off", "no-multi-str": "off", "no-multiple-empty-lines": "off", "no-native-reassign": "error", "no-negated-condition": "off", "no-negated-in-lhs": "error", "no-nested-ternary": "off", "no-new": "error", "no-new-func": "error", "no-new-object": "error", "no-new-require": "error", "no-new-wrappers": "error", "no-octal-escape": "error", "no-param-reassign": "off", "no-path-concat": "error", "no-plusplus": "off", "no-process-env": "off", "no-process-exit": "error", "no-proto": "error", "no-prototype-builtins": "off", "no-restricted-globals": "error", "no-restricted-imports": "error", "no-restricted-modules": "error", "no-restricted-properties": "error", "no-restricted-syntax": "error", "no-return-assign": "off", "no-return-await": "error", "no-script-url": "error", "no-self-compare": "error", "no-sequences": "off", "no-shadow": "off", "no-shadow-restricted-names": "error", "no-spaced-func": "off", "no-sync": "off", "no-tabs": "off", "no-template-curly-in-string": "error", "no-ternary": "off", "no-throw-literal": "off", "no-trailing-spaces": ["error"], "no-undef-init": "error", "no-undefined": "off", "no-underscore-dangle": "off", "no-unmodified-loop-condition": "error", "no-unneeded-ternary": "off", "no-unused-expressions": "off", "no-use-before-define": "off", "no-useless-call": "error", "no-useless-computed-key": "error", "no-useless-concat": "off", "no-useless-constructor": "error", "no-useless-rename": "error", "no-useless-return": "error", "no-var": "off", "no-void": "off", "no-warning-comments": "off", "no-whitespace-before-property": "error", "no-with": "error", "nonblock-statement-body-position": [ "error", "any" ], "object-curly-newline": "off", "object-curly-spacing": "off", "object-property-newline": "off", "object-shorthand": "off", "one-var": "off", "one-var-declaration-per-line": "off", "operator-assignment": "off", "operator-linebreak": "off", "padded-blocks": "off", "padding-line-between-statements": "error", "prefer-arrow-callback": "off", "prefer-const": "error", "prefer-destructuring": "off", "prefer-numeric-literals": "error", "prefer-promise-reject-errors": "error", "prefer-reflect": "off", "prefer-rest-params": "off", "prefer-spread": "off", "prefer-template": "off", "quote-props": "off", "quotes": "off", "radix": "off", "require-await": "error", "require-jsdoc": "off", "rest-spread-spacing": "error", "semi": "off", "semi-spacing": "off", "semi-style": "off", "sort-imports": "error", "sort-keys": "off", "sort-vars": "off", "space-before-blocks": "off", "space-before-function-paren": "off", "space-in-parens": ["error", "never"], "space-infix-ops": "off", "space-unary-ops": "off", "spaced-comment": ["error", "always", { "exceptions": ["*"] }], "strict": "off", "switch-colon-spacing": "off", "symbol-description": "error", "template-curly-spacing": "error", "template-tag-spacing": "error", "unicode-bom": [ "error", "never" ], "valid-jsdoc": "off", "vars-on-top": "off", "wrap-iife": "off", "wrap-regex": "off", "yield-star-spacing": "error", "yoda": "off", "no-unused-vars": "off", "no-cond-assign": "off", "no-unexpected-multiline": "off" }, "env": { "node": true }, "globals": { "angular": true, "moment": true }, "overrides": [ { "files": [ "docs/app/js/**/*", "src/**/*" ], "parserOptions": { "ecmaVersion": 5 }, "env": { "browser": true }, "rules": { "arrow-parens": "error", "global-require": "error", "no-console": [ "error" ], "no-process-env": "error", "no-sync": "error" }, "globals": { "angular": true, "CryptoJS": true, "hljs": true } }, { "files": [ "scripts/**/*" ], "rules": { "no-process-env": "off" } }, { "files": [ "**/*.spec.js", "test/*.js" ], "env": { "jasmine": true, "browser": true }, "rules": { "no-native-reassign": "off", "no-global-assign": "off" }, "globals": { "module": true, "inject": true, "disableAnimations": true, "createMockStyleSheet": true, "$mdUtil": false, "$timeout": false, "$animate": false, "$material": false } } ] } ================================================ FILE: .github/CONTRIBUTING.md ================================================ # Contributing to AngularJS Material - [Code of Conduct](#coc) - [Signing the CLA](#cla)

- [Question or Problem?](#question) - [Issues and Bugs](#bug) - [Enhancement Requests](#feature) - [Issue Guidelines](#submit) - [Git Commit Guidelines](#commit) - [Developer Commits Levels](#pr_forks) - [Submission Guidelines](#submit) ## AngularJS Material has reached end-of-life We are no longer accepting changes into this project as **AngularJS Material support has officially ended as of January 2022.** [See what ending support means](https://docs.angularjs.org/misc/version-support-status) and [read the end of life announcement](https://goo.gle/angularjs-end-of-life). Visit [material.angular.io](https://material.angular.io) for the actively supported Angular Material. ## Code of Conduct Please help us keep AngularJS Material open and inclusive by reading and following our [Code of Conduct](https://github.com/angular/code-of-conduct/blob/master/CODE_OF_CONDUCT.md). Please note that by using GitHub, you have also agreed to follow the [GitHub Terms of Service](https://help.github.com/en/articles/github-terms-of-service#) which include [guidelines on conduct](https://help.github.com/en/articles/github-terms-of-service#3-conduct-restrictions). We are care deeply about our inclusive community and diverse group of members. As part of this, we do take time away from development to enforce this policy through interventions in heated discussions, one-on-one discussions to explain the policy to violators, and bans for repeat violators. ## Have a Question, Problem, or Idea? If you have questions or ideas regarding AngularJS Material, please direct these to the [AngularJS Material Forum](https://groups.google.com/forum/#!forum/ngmaterial). Otherwise, do you: - [Want to report a Bug?](#bug) - [Want to request an Enhancement?](#feature) #### 1. Want to report a Bug or Issue? If you find a bug in the source code or a mistake in the documentation, we recommend that you first review the latest `master` version of the [Online Documentation](https://material.angularjs.org/HEAD/) and use one of the Demos to create a CodePen that reproduces the issue. If the issue can be reproduced in the latest `master` version, you can help us by submitting an issue to our [GitHub Repository](https://github.com/angular/material/issues/new/choose). After we triage the issue and apply labels to it, we invite you to submit a **Pull Request** with a proposed fix. Your custom changes can be crafted in a repository fork and submitted to the [GitHub Repository](https://github.com/angular/material/compare) as a Pull Request. **Important**: Please review the [Submission Guidelines](#submit) below, before contributing to the project. #### 2. Want to request an Enhancement? You can request an enhancement by [submitting an issue](https://github.com/angular/material/issues/new/choose). After submitting an issue, if you would like to implement an enhancement then consider what kind of change it is: * **Major Changes** that you wish to contribute to the project should be discussed first on our [AngularJS Material Forum](https://groups.google.com/forum/#!forum/ngmaterial), so that we can better coordinate our efforts, prevent duplication of work, and help you to craft the change so that it is successfully accepted into the project. * **Small Changes** can be crafted and submitted to the [GitHub Repository](https://github.com/angular/material/compare) as a Pull Request. ## Issue Guidelines Please note, this project is mature and stable with thousands of projects depending upon it. We welcome your enhancement requests, doc improvements, and issue reports. However, we are not accepting major feature requests at this time. If you're thinking of contributing code or documentation to the project, please review [Submitting Pull Requests](#submitpr) before beginning any work. #### Submitting an Issue Before you submit an issue, **[search](https://github.com/angular/material/issues?q=is%3Aissue+is%3Aopen)** the issues archive; maybe the issue has already been submitted or considered. If the issue appears to be a bug, and hasn't been reported, open a [new issue](https://github.com/angular/material/issues/new/choose). > Please **do not report duplicate issues**; help us maximize the effort we can spend fixing issues and adding enhancements. Providing the following information will increase our ability to resolve your issue efficiently: * **Issue Title** - provide a concise issue title prefixed with a snake-case name of the associated service or component (if any): `: `. Adding the `md-` prefix should be avoided. > e.g. > * menu-bar: does not support dark mode themes [#11238](https://github.com/angular/material/issues/11238) > * tooltip: memory leak on destroy [#11133](https://github.com/angular/material/issues/11133) * **Complete the full Issue Template** - GitHub now supports issue templates and AngularJS Material provides options to make submitting an issue with the required information more straightforward. * **Suggest a Fix** - if you can't fix the bug yourself, perhaps you can point to what might be causing the problem (line of code or commit). #### Submitting Pull Requests **Important**: We are not accepting major feature requests or PRs that contain major new features or breaking changes at this time. Please check with us via [the discussion forum](https://groups.google.com/forum/#!forum/ngmaterial) before investing significant effort in a planned Pull Request submission; it's possible that we are already working on a related PR or have decided that the enhancement does not belong in the core AngularJS Material project. * All contributions must be consistent with the AngularJS Material [Coding Conventions](../docs/guides/CODING.md). * Submit proposed changes or additions as GitHub pull requests that follow the [Pull Request Guidelines](../docs/guides/PULL_REQUESTS.md).
## Git Commit Guidelines We have very precise rules over how our git commit messages can be formatted. This leads to **more readable messages** that are easy to follow when looking through the **project history**. It is important to note that we use the git commit messages to **generate** the AngularJS Material [CHANGELOG](../../CHANGELOG.md) document. Improperly formatted commit messages may result in your change not appearing in the CHANGELOG of the next release. ### Commit Message Format Each commit message consists of a **header**, a **body** and a **footer**. The header has a special format that includes a **type**, a **scope**, and a **subject**: ```html ():