# angular-material-expansion-panel A module that implements design elements based on [Material Design](https://material.google.com) [Expansion Panels](https://material.google.com/components/expansion-panels.html). With additional features that are similar to Google Inbox style Expansion Panels. To see Material Design Expansion Panels Specification go [here](https://material.google.com/components/expansion-panels.html). The expansion panel component can be used with just html or you can use the Expansion Panel Group to control multiple panels through code ## Demo Demo Hosted on github.io [Click Here](https://b-3po.github.io/angular-material-expansion-panel)
Put content in here
add an id if you want to acces the panel via the $mdExpansionPanelGroup service
panels expand when added to
allows for more than one panel to be expanded at a time
| ## mdExpansionPanel `mdExpansionPanel` is the main container for panels ```add an id if you want to acces the panel via the $mdExpansionPanel service
add this attribute set the max height of the expanded content. The container will be set to scroll
| ## mdExpansionPanelHeader `mdExpansionPanelHeader` is nested inside of `mdExpansionPanelExpanded` and contains content you want in place of the collapsed content this is optional ```add this aatribute to disable sticky
| ## mdExpansionPanelFooter `mdExpansionPanelFooter` is nested inside of `mdExpansionPanelExpanded` and contains content you want at the bottom. By default the Footer will stick to the bottom of the page if the panel expands past this is optional ```add this aatribute to disable sticky
| ## mdExpansionPanelIcon `mdExpansionPanelIcon` can be used in both `md-expansion-panel-collapsed` and `md-expansion-panel-header` as the first or last element. Adding this will provide a animated arrow for expanded and collapsed states ```the component id used on the element
| **Returns** | Param | Details | | :--: | :--: | | promise/instance |returns a instance or a service with 2 methods
| **Returned Service** | Method | Details | | :--: | :--: | | find |sync method for getting instance
| | waitFor |async method for getting instance. this returnes a promise
| ### $mdExpansionPanel#expand Exapnd Panel **Parameters** | Param | Type | Details | | :--: | :--: | :--: | | options | object= |object with options
| | options#animation | boolean= |set to false if you want no animations
| **Returns** | Param | Details | | :--: | :--: | | promise |a promise that will resolve when panel is done animating
| ### $mdExpansionPanel#collapse Collapse Panel **Parameters** | Param | Type | Details | | :--: | :--: | :--: | | options | object= |object with options
| | options#animation | boolean= |set to false if you want no animations
| **Returns** | Param | Details | | :--: | :--: | | promise |a promise that will resolve when panel is done animating
| ### $mdExpansionPanel#remove Remove panel from document **Parameters** | Param | Type | Details | | :--: | :--: | :--: | | options | object= |object with options
| | options#animation | boolean= |set to false if you want no animations
| **Returns** | Type | Details | | :--: | :--: | | promise |a promise that will resolve when panel is done animating
| ### $mdExpansionPanel#onRemove Callback for panel when removed from dom **Parameters** | Param | Type | Details | | :--: | :--: | :--: | | callback | function |function called when panel is removed from dom
| ### $mdExpansionPanel#addClickCatcher Add a click catcher that will call a given function when the page surrounding the panel is clicked **Parameters** | Param | Type | Details | | :--: | :--: | :--: | | callback | function |function called on click
| ### $mdExpansionPanel#removeClickCatcher Remove current click catcher ### $mdExpansionPanel#isOpen Returns boolean **Returns** | Type | Details | | :--: | :--: | | boolean |true if panel is expanded false if panel is collapsed
| ## $mdExpansionPanelGroup Control expansion panels and allow for adding and registering panels from code ```javascript // sync $mdExpansionPanelGroup('theComponentId').register('name', { templateUrl: 'template.html', controller: 'Controller' }); $mdExpansionPanelGroup('theComponentId').add({ templateUrl: 'template.html', controller: 'Controller' }).then(function (panelCtrl) { panelCtrl.expand(); }); $mdExpansionPanelGroup('theComponentId').remove('name'); $mdExpansionPanelGroup('theComponentId').removeAll(); $mdExpansionPanelGroup('theComponentId').collapseAll(); $mdExpansionPanelGroup('theComponentId').getAll(); $mdExpansionPanelGroup('theComponentId').getOpen(); $mdExpansionPanelGroup('theComponentId').count(); var killOnChange = $mdExpansionPanelGroup('theComponentId').onChange(function (count) {}); // async $mdExpansionPanelGroup().waitFor('theComponentId').then(function (instance) { instance.register('name', { templateUrl: 'template.html', controller: 'Controller' }); instance.add({ templateUrl: 'template.html', controller: 'Controller' }).then(function (panelCtrl) { panelCtrl.expand(); }); instance.add('name', {locals: 'data'}); instance.remove('name'); instance.removeAll({animation: false}); instance.count(); instance.collapseAll(); instance.getAll(); instance.getOpen(); var killOnChange = instance.onChange(function (count) {}); }); ``` #### Methods ### $mdExpansionPanelGroup Get an instance of the expansion panel group by its component id. You can use this in 2 ways - 1. pass in a string id and get back the instance - 2. call the service and get a service with 2 methods. `Find` witch will do the same as 1. `waitFor` that will return a promise, so you can call on directives before they are added to the dom. **Parameters** | Param | Type | Details | | :--: | :--: | :--: | | componentId | string= |the component id used on the element
| **Returns** | Param | Details | | :--: | :--: | | promise/instance |returns a instance or a service with 2 methods
| **Returned Service** | Method | Details | | :--: | :--: | | find |sync method for getting instance
| | waitFor |async method for getting instance. this returnes a promise
| ### $mdExpansionPanelGroup#register register panel that can be added by the given name **Parameters** | Param | Type | Details | | :--: | :--: | :--: | | name | string |the name you can use to add the template
| | options.template | string= |template string
| | options.templateUrl | string= |template url
| | options.controller | string= |controller string or function
| | options.controllerAs | string= |controller as name
| | options.locals | object= |locals for injection
| ### $mdExpansionPanelGroup#add add a panel by either passing in a registered name or object. You can also pass in locals **Parameters** | Param | Type | Details | | :--: | :--: | :--: | | options | string/object |registered panel name or object with details
| | locals | object= |object of locals to inject intp controller
| **Options Object** | Param | Type | Details | | :--: | :--: | :--: | | options.template | string= |template string
| | options.templateUrl | string= |template url
| | options.controller | string= |controller string or function
| | options.controllerAs | string= |controller as name
| | options.locals | object= |locals for injection
| **Returns** | Param | Details | | :--: | :--: | | promise |a promise that will return the panel instance
| ### $mdExpansionPanelGroup#remove Remove a panel form the group **Parameters** | Param | Type | Details | | :--: | :--: | :--: | | componentId | string |component id on panel
| | options | object= |object with options
| | options#animation | boolean= |set to false if you want no animations
| **Returns** | Type | Details | | :--: | :--: | | promise |a promise that will resolve when panel is done animating
| ### $mdExpansionPanelGroup#removeAll Remove all panels form the group **Parameters** | Param | Type | Details | | :--: | :--: | :--: | | options | object= |object with options
| | options#animation | boolean= |set to false if you want no animations
| ### $mdExpansionPanelGroup#count Return number of panels **Returns** | Type | Details | | :--: | :--: | | number |number of panels in dom
| ### $mdExpansionPanelGroup#onChange A function that is called whenever a panel is added or removed from dom. This will return the panel count **Parameters** | Param | Type | Details | | :--: | :--: | :--: | | callback | function | | **Returns** | Type | Details | | :--: | :--: | | function |a function you can call to stop listening
| ### $mdExpansionPanelGroup#getAll Returns all panel instances from group ### $mdExpansionPanelGroup#getOpen Returns all open panel instances from group ### $mdExpansionPanelGroup#collapseAll Collapse all panels in group **Parameters** | Param | Type | Details | | :--: | :--: | :--: | | noAnimation | boolean=false |set to true if you want no animations
|