@adobe/cq-angular-editable-components
Version:
* [API](#api) * [Documentation](#documentation) * [Changelog](#changelog)
1,849 lines (1,020 loc) • 42.1 kB
Markdown
# Table of contents
* [API](#api)
* [Documentation](#documentation)
* [Changelog](#changelog)
# Spa Angular Editable Components
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 6.0.1.
This project provides the Angular components to get you started with integrating with the AEM Site Editor.
The library code is the one in `projects/cq-angular-editable-components`
For now there is no sample application in this repo, so please refer to the official WeRetail Journal for the sample application.
## Code scaffolding
In order to run this you need to have the node version required by Angular 6( Node version 8.9 and greater. )
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build the library
Run `ng build cq-angular-editable-components` to build the library. The build artifacts will be stored in the `dist/cq-angular-editable-components` directory. Use the `--prod` flag for a production build.
## Publishing the library
Our process requires that every publish is based on a released version.
Therefore the first step is to release the package.
### Releasing the package
Because our goal was to keep in sync the version of the app package.json and the library package.json we have created a `version` script that will take care of running `npm version` on both the library and the application.
Example:
```
node version.js 0.0.1
```
This command will run `npm --no-git-tag-version version 0.0.1` in the library folder and then it will run
`npm version 0.0.1 -f` in the application folder.
The `-f` option is needed because the first npm version will force the git environment to be dirty.
### Publishing
In order to publish you will need to build the library:
```
ng build cq-angular-editable-components
```
And then publish the built artifacts
```
cd dist/cq-angular-editable-components
npm publish
```
We have also added a npm script that can run the above commands together:
```
npm run publish-lib
```
Please not that any argument added to this script will go to the last command. In this case the last command is `npm publish`.
Therefore you can add all the arguments `npm publish` takes to `npm run publish-lib`.
Example, publishing a public package:
```
npm run publish-lib -- --private=false
```
## Running unit tests
Run `ng test cq-angular-editable-components` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e cq-angular-editable-components` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
## API
### Classes
<a id="aemallowedcomponentscontainercomponent.md"></a>
## Class: AEMAllowedComponentsContainerComponent
### Hierarchy
* [AEMContainerComponent](#aemcontainercomponent.md)
↳ **AEMAllowedComponentsContainerComponent**
↳ [AEMResponsiveGridComponent](#aemresponsivegridcomponent.md)
### Index
#### Properties
* [allowedComponents](#aemallowedcomponentscontainercomponent.md_allowedcomponents)
* [classNames](#aemallowedcomponentscontainercomponent.md_classnames)
* [cqItems](#aemallowedcomponentscontainercomponent.md_cqitems)
* [cqItemsOrder](#aemallowedcomponentscontainercomponent.md_cqitemsorder)
* [cqPath](#aemallowedcomponentscontainercomponent.md_cqpath)
* [emptyLabel](#aemallowedcomponentscontainercomponent.md_emptylabel)
* [modelName](#aemallowedcomponentscontainercomponent.md_modelname)
* [title](#aemallowedcomponentscontainercomponent.md_title)
#### Accessors
* [allowedComponentClassNames](#aemallowedcomponentscontainercomponent.md_allowedcomponentclassnames)
* [allowedComponentListTitleClassNames](#aemallowedcomponentscontainercomponent.md_allowedcomponentlisttitleclassnames)
* [hostClasses](#aemallowedcomponentscontainercomponent.md_hostclasses)
* [isInEditMode](#aemallowedcomponentscontainercomponent.md_isineditmode)
* [placeholderPath](#aemallowedcomponentscontainercomponent.md_placeholderpath)
#### Methods
* [getAllowedComponentListLabel](#aemallowedcomponentscontainercomponent.md_getallowedcomponentlistlabel)
* [getAllowedComponentListPlaceholderClassNames](#aemallowedcomponentscontainercomponent.md_getallowedcomponentlistplaceholderclassnames)
* [getAllowedComponents](#aemallowedcomponentscontainercomponent.md_getallowedcomponents)
* [getDataPath](#aemallowedcomponentscontainercomponent.md_getdatapath)
* [getHostClassNames](#aemallowedcomponentscontainercomponent.md_gethostclassnames)
* [getItem](#aemallowedcomponentscontainercomponent.md_getitem)
* [getPlaceholderClassNames](#aemallowedcomponentscontainercomponent.md_getplaceholderclassnames)
* [isAllowedComponentsApplicable](#aemallowedcomponentscontainercomponent.md_isallowedcomponentsapplicable)
### Properties
#### allowedComponents
• **allowedComponents**: *object*
##### Type declaration:
* **applicable**: *boolean*
* **components**: *any*
___
#### classNames
• **classNames**: *string*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[classNames](#aemcontainercomponent.md#classnames)*
Class names of the current component
___
#### cqItems
• **cqItems**: *any*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[cqItems](#aemcontainercomponent.md#cqitems)*
Map of model items included in the current container
___
#### cqItemsOrder
• **cqItemsOrder**: *any*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[cqItemsOrder](#aemcontainercomponent.md#cqitemsorder)*
Array of model item keys
___
#### cqPath
• **cqPath**: *string* = ""
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[cqPath](#aemcontainercomponent.md#cqpath)*
Path to the model associated with the current instance of the component
___
#### emptyLabel
• **emptyLabel**: *string* = "No allowed components"
___
#### modelName
• **modelName**: *string* = ""
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[modelName](#aemcontainercomponent.md#modelname)*
Key of the model structure
___
#### title
• **title**: *string*
### Accessors
#### allowedComponentClassNames
• **get allowedComponentClassNames**(): *string*
**Returns:** *string*
___
#### allowedComponentListTitleClassNames
• **get allowedComponentListTitleClassNames**(): *string*
**Returns:** *string*
___
#### hostClasses
• **get hostClasses**(): *string*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[hostClasses](#aemcontainercomponent.md#hostclasses)*
**Returns:** *string*
___
#### isInEditMode
• **get isInEditMode**(): *boolean*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[isInEditMode](#aemcontainercomponent.md#isineditmode)*
Returns weather of not we are in the editor
**Returns:** *boolean*
___
#### placeholderPath
• **get placeholderPath**(): *string*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[placeholderPath](#aemcontainercomponent.md#placeholderpath)*
Returns the placeholder path
**Returns:** *string*
### Methods
#### getAllowedComponentListLabel
▸ **getAllowedComponentListLabel**(): *string*
**Returns:** *string*
___
#### getAllowedComponentListPlaceholderClassNames
▸ **getAllowedComponentListPlaceholderClassNames**(): *string*
**Returns:** *string*
___
#### getAllowedComponents
▸ **getAllowedComponents**(): *any*
**Returns:** *any*
___
#### getDataPath
▸ **getDataPath**(`path`: any): *any*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[getDataPath](#aemcontainercomponent.md#getdatapath)*
Returns the aggregated path of this container path and the provided path
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`path` | any | the provided path to aggregate with the container path |
**Returns:** *any*
___
#### getHostClassNames
▸ **getHostClassNames**(): *string*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[getHostClassNames](#aemcontainercomponent.md#gethostclassnames)*
Returns the class names of the container based on the data from the cqModel
**Returns:** *string*
___
#### getItem
▸ **getItem**(`itemKey`: any): *any*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[getItem](#aemcontainercomponent.md#getitem)*
Returns the item data from the cqModel
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`itemKey` | any | the itemKey to look for in the items. |
**Returns:** *any*
___
#### getPlaceholderClassNames
▸ **getPlaceholderClassNames**(): *string*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[getPlaceholderClassNames](#aemcontainercomponent.md#getplaceholderclassnames)*
Returns the placeholder classes
**Returns:** *string*
___
#### isAllowedComponentsApplicable
▸ **isAllowedComponentsApplicable**(): *boolean*
**Returns:** *boolean*
<a id="aemcomponentdirective.md"></a>
## Class: AEMComponentDirective
### Hierarchy
* **AEMComponentDirective**
### Implements
* AfterViewInit
* OnInit
* OnDestroy
* OnChanges
### Index
#### Constructors
* [constructor](#aemcomponentdirective.md_constructor)
#### Properties
* [aemComponent](#aemcomponentdirective.md_aemcomponent)
* [cqPath](#aemcomponentdirective.md_cqpath)
* [itemAttrs](#aemcomponentdirective.md_itemattrs)
* [itemName](#aemcomponentdirective.md_itemname)
#### Accessors
* [changeDetectorRef](#aemcomponentdirective.md_changedetectorref)
* [cqItem](#aemcomponentdirective.md_cqitem)
* [type](#aemcomponentdirective.md_type)
#### Methods
* [ngAfterViewInit](#aemcomponentdirective.md_ngafterviewinit)
* [ngOnChanges](#aemcomponentdirective.md_ngonchanges)
* [ngOnDestroy](#aemcomponentdirective.md_ngondestroy)
* [ngOnInit](#aemcomponentdirective.md_ngoninit)
### Constructors
#### constructor
\+ **new AEMComponentDirective**(`renderer`: Renderer2, `viewContainer`: ViewContainerRef, `factoryResolver`: ComponentFactoryResolver, `_changeDetectorRef`: ChangeDetectorRef): *[AEMComponentDirective](#aemcomponentdirective.md)*
**Parameters:**
Name | Type |
------ | ------ |
`renderer` | Renderer2 |
`viewContainer` | ViewContainerRef |
`factoryResolver` | ComponentFactoryResolver |
`_changeDetectorRef` | ChangeDetectorRef |
**Returns:** *[AEMComponentDirective](#aemcomponentdirective.md)*
### Properties
#### aemComponent
• **aemComponent**: *any*
___
#### cqPath
• **cqPath**: *string*
Path to the model structure associated with the current component
___
#### itemAttrs
• **itemAttrs**: *object*
HtmlElement attributes for the current instance of the component
___
#### itemName
• **itemName**: *string*
Name of the current instance of the component
### Accessors
#### changeDetectorRef
• **get changeDetectorRef**(): *ChangeDetectorRef*
**Returns:** *ChangeDetectorRef*
___
#### cqItem
• **get cqItem**(): *object*
**Returns:** *object*
• **set cqItem**(`value`: object): *void*
**Parameters:**
Name | Type |
------ | ------ |
`value` | object |
**Returns:** *void*
___
#### type
• **get type**(): *any*
Returns the type of the cqItem if exists.
**Returns:** *any*
### Methods
#### ngAfterViewInit
▸ **ngAfterViewInit**(): *void*
**Returns:** *void*
___
#### ngOnChanges
▸ **ngOnChanges**(`changes`: SimpleChanges): *void*
**Parameters:**
Name | Type |
------ | ------ |
`changes` | SimpleChanges |
**Returns:** *void*
___
#### ngOnDestroy
▸ **ngOnDestroy**(): *void*
**Returns:** *void*
___
#### ngOnInit
▸ **ngOnInit**(): *void*
**Returns:** *void*
<a id="aemcontainercomponent.md"></a>
## Class: AEMContainerComponent
### Hierarchy
* **AEMContainerComponent**
↳ [AEMAllowedComponentsContainerComponent](#aemallowedcomponentscontainercomponent.md)
↳ [AEMPageComponent](#aempagecomponent.md)
### Index
#### Properties
* [classNames](#aemcontainercomponent.md_classnames)
* [cqItems](#aemcontainercomponent.md_cqitems)
* [cqItemsOrder](#aemcontainercomponent.md_cqitemsorder)
* [cqPath](#aemcontainercomponent.md_cqpath)
* [modelName](#aemcontainercomponent.md_modelname)
#### Accessors
* [hostClasses](#aemcontainercomponent.md_hostclasses)
* [isInEditMode](#aemcontainercomponent.md_isineditmode)
* [placeholderPath](#aemcontainercomponent.md_placeholderpath)
#### Methods
* [getDataPath](#aemcontainercomponent.md_getdatapath)
* [getHostClassNames](#aemcontainercomponent.md_gethostclassnames)
* [getItem](#aemcontainercomponent.md_getitem)
* [getPlaceholderClassNames](#aemcontainercomponent.md_getplaceholderclassnames)
### Properties
#### classNames
• **classNames**: *string*
Class names of the current component
___
#### cqItems
• **cqItems**: *any*
Map of model items included in the current container
___
#### cqItemsOrder
• **cqItemsOrder**: *any*
Array of model item keys
___
#### cqPath
• **cqPath**: *string* = ""
Path to the model associated with the current instance of the component
___
#### modelName
• **modelName**: *string* = ""
Key of the model structure
### Accessors
#### hostClasses
• **get hostClasses**(): *string*
**Returns:** *string*
___
#### isInEditMode
• **get isInEditMode**(): *boolean*
Returns weather of not we are in the editor
**Returns:** *boolean*
___
#### placeholderPath
• **get placeholderPath**(): *string*
Returns the placeholder path
**Returns:** *string*
### Methods
#### getDataPath
▸ **getDataPath**(`path`: any): *any*
Returns the aggregated path of this container path and the provided path
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`path` | any | the provided path to aggregate with the container path |
**Returns:** *any*
___
#### getHostClassNames
▸ **getHostClassNames**(): *string*
Returns the class names of the container based on the data from the cqModel
**Returns:** *string*
___
#### getItem
▸ **getItem**(`itemKey`: any): *any*
Returns the item data from the cqModel
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`itemKey` | any | the itemKey to look for in the items. |
**Returns:** *any*
___
#### getPlaceholderClassNames
▸ **getPlaceholderClassNames**(): *string*
Returns the placeholder classes
**Returns:** *string*
<a id="aemdirectivetestcomponent.md"></a>
## Class: AEMDirectiveTestComponent
### Hierarchy
* **AEMDirectiveTestComponent**
### Index
#### Properties
* [data](#aemdirectivetestcomponent.md_data)
### Properties
#### data
• **data**: *any*
<a id="aemmodelprovidercomponent.md"></a>
## Class: AEMModelProviderComponent
### Hierarchy
* **AEMModelProviderComponent**
### Index
#### Constructors
* [constructor](#aemmodelprovidercomponent.md_constructor)
#### Properties
* [aemComponent](#aemmodelprovidercomponent.md_aemcomponent)
* [aemModelProvider](#aemmodelprovidercomponent.md_aemmodelprovider)
* [cqItem](#aemmodelprovidercomponent.md_cqitem)
* [cqPath](#aemmodelprovidercomponent.md_cqpath)
* [itemName](#aemmodelprovidercomponent.md_itemname)
#### Methods
* [ngDestroy](#aemmodelprovidercomponent.md_ngdestroy)
* [ngOnInit](#aemmodelprovidercomponent.md_ngoninit)
* [updateItem](#aemmodelprovidercomponent.md_updateitem)
### Constructors
#### constructor
\+ **new AEMModelProviderComponent**(): *[AEMModelProviderComponent](#aemmodelprovidercomponent.md)*
**Returns:** *[AEMModelProviderComponent](#aemmodelprovidercomponent.md)*
### Properties
#### aemComponent
• **aemComponent**: *[AEMComponentDirective](#aemcomponentdirective.md)*
___
#### aemModelProvider
• **aemModelProvider**: *any*
___
#### cqItem
• **cqItem**: *any*
Model item associated with the current model provider component
___
#### cqPath
• **cqPath**: *any*
Path to the model associated with the current instance of the component
___
#### itemName
• **itemName**: *any*
Name of the item associated with the current model provider component
### Methods
#### ngDestroy
▸ **ngDestroy**(): *void*
**Returns:** *void*
___
#### ngOnInit
▸ **ngOnInit**(): *void*
**Returns:** *void*
___
#### updateItem
▸ **updateItem**(): *void*
Updates the item data
**Returns:** *void*
<a id="aempagecomponent.md"></a>
## Class: AEMPageComponent
### Hierarchy
* [AEMContainerComponent](#aemcontainercomponent.md)
↳ **AEMPageComponent**
### Index
#### Properties
* [classNames](#aempagecomponent.md_classnames)
* [cqItems](#aempagecomponent.md_cqitems)
* [cqItemsOrder](#aempagecomponent.md_cqitemsorder)
* [cqPath](#aempagecomponent.md_cqpath)
* [modelName](#aempagecomponent.md_modelname)
#### Accessors
* [hostClasses](#aempagecomponent.md_hostclasses)
* [isInEditMode](#aempagecomponent.md_isineditmode)
* [placeholderPath](#aempagecomponent.md_placeholderpath)
#### Methods
* [getDataPath](#aempagecomponent.md_getdatapath)
* [getHostClassNames](#aempagecomponent.md_gethostclassnames)
* [getItem](#aempagecomponent.md_getitem)
* [getPlaceholderClassNames](#aempagecomponent.md_getplaceholderclassnames)
### Properties
#### classNames
• **classNames**: *string*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[classNames](#aemcontainercomponent.md#classnames)*
Class names of the current component
___
#### cqItems
• **cqItems**: *any*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[cqItems](#aemcontainercomponent.md#cqitems)*
Map of model items included in the current container
___
#### cqItemsOrder
• **cqItemsOrder**: *any*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[cqItemsOrder](#aemcontainercomponent.md#cqitemsorder)*
Array of model item keys
___
#### cqPath
• **cqPath**: *string* = ""
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[cqPath](#aemcontainercomponent.md#cqpath)*
Path to the model associated with the current instance of the component
___
#### modelName
• **modelName**: *string* = ""
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[modelName](#aemcontainercomponent.md#modelname)*
Key of the model structure
### Accessors
#### hostClasses
• **get hostClasses**(): *string*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[hostClasses](#aemcontainercomponent.md#hostclasses)*
**Returns:** *string*
___
#### isInEditMode
• **get isInEditMode**(): *boolean*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[isInEditMode](#aemcontainercomponent.md#isineditmode)*
Returns weather of not we are in the editor
**Returns:** *boolean*
___
#### placeholderPath
• **get placeholderPath**(): *string*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[placeholderPath](#aemcontainercomponent.md#placeholderpath)*
Returns the placeholder path
**Returns:** *string*
### Methods
#### getDataPath
▸ **getDataPath**(`path`: any): *any*
*Overrides [AEMContainerComponent](#aemcontainercomponent.md).[getDataPath](#aemcontainercomponent.md#getdatapath)*
Returns the aggregated path of this container path and the provided path
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`path` | any | the provided path to aggregate with the container path |
**Returns:** *any*
___
#### getHostClassNames
▸ **getHostClassNames**(): *string*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[getHostClassNames](#aemcontainercomponent.md#gethostclassnames)*
Returns the class names of the container based on the data from the cqModel
**Returns:** *string*
___
#### getItem
▸ **getItem**(`itemKey`: any): *any*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[getItem](#aemcontainercomponent.md#getitem)*
Returns the item data from the cqModel
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`itemKey` | any | the itemKey to look for in the items. |
**Returns:** *any*
___
#### getPlaceholderClassNames
▸ **getPlaceholderClassNames**(): *string*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[getPlaceholderClassNames](#aemcontainercomponent.md#getplaceholderclassnames)*
Returns the placeholder classes
**Returns:** *string*
<a id="aemresponsivegridcomponent.md"></a>
## Class: AEMResponsiveGridComponent
### Hierarchy
↳ [AEMAllowedComponentsContainerComponent](#aemallowedcomponentscontainercomponent.md)
↳ **AEMResponsiveGridComponent**
### Index
#### Properties
* [allowedComponents](#aemresponsivegridcomponent.md_allowedcomponents)
* [classNames](#aemresponsivegridcomponent.md_classnames)
* [columnClassNames](#aemresponsivegridcomponent.md_columnclassnames)
* [columnCount](#aemresponsivegridcomponent.md_columncount)
* [cqItems](#aemresponsivegridcomponent.md_cqitems)
* [cqItemsOrder](#aemresponsivegridcomponent.md_cqitemsorder)
* [cqPath](#aemresponsivegridcomponent.md_cqpath)
* [emptyLabel](#aemresponsivegridcomponent.md_emptylabel)
* [gridClassNames](#aemresponsivegridcomponent.md_gridclassnames)
* [modelName](#aemresponsivegridcomponent.md_modelname)
* [title](#aemresponsivegridcomponent.md_title)
#### Accessors
* [allowedComponentClassNames](#aemresponsivegridcomponent.md_allowedcomponentclassnames)
* [allowedComponentListTitleClassNames](#aemresponsivegridcomponent.md_allowedcomponentlisttitleclassnames)
* [hostClasses](#aemresponsivegridcomponent.md_hostclasses)
* [isInEditMode](#aemresponsivegridcomponent.md_isineditmode)
* [placeholderPath](#aemresponsivegridcomponent.md_placeholderpath)
#### Methods
* [getAllowedComponentListLabel](#aemresponsivegridcomponent.md_getallowedcomponentlistlabel)
* [getAllowedComponentListPlaceholderClassNames](#aemresponsivegridcomponent.md_getallowedcomponentlistplaceholderclassnames)
* [getAllowedComponents](#aemresponsivegridcomponent.md_getallowedcomponents)
* [getAttrDataPath](#aemresponsivegridcomponent.md_getattrdatapath)
* [getColumnClassNames](#aemresponsivegridcomponent.md_getcolumnclassnames)
* [getDataPath](#aemresponsivegridcomponent.md_getdatapath)
* [getHostClassNames](#aemresponsivegridcomponent.md_gethostclassnames)
* [getItem](#aemresponsivegridcomponent.md_getitem)
* [getPlaceholderClassNames](#aemresponsivegridcomponent.md_getplaceholderclassnames)
* [isAllowedComponentsApplicable](#aemresponsivegridcomponent.md_isallowedcomponentsapplicable)
### Properties
#### allowedComponents
• **allowedComponents**: *object*
*Inherited from [AEMAllowedComponentsContainerComponent](#aemallowedcomponentscontainercomponent.md).[allowedComponents](#aemallowedcomponentscontainercomponent.md#allowedcomponents)*
##### Type declaration:
* **applicable**: *boolean*
* **components**: *any*
___
#### classNames
• **classNames**: *string*
*Overrides [AEMContainerComponent](#aemcontainercomponent.md).[classNames](#aemcontainercomponent.md#classnames)*
Class names of the current component
___
#### columnClassNames
• **columnClassNames**: *Object*
Map of class names corresponding to each child of the current responsive grid
___
#### columnCount
• **columnCount**: *number*
Current number of columns of the grid
___
#### cqItems
• **cqItems**: *any*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[cqItems](#aemcontainercomponent.md#cqitems)*
Map of model items included in the current container
___
#### cqItemsOrder
• **cqItemsOrder**: *any*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[cqItemsOrder](#aemcontainercomponent.md#cqitemsorder)*
Array of model item keys
___
#### cqPath
• **cqPath**: *string* = ""
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[cqPath](#aemcontainercomponent.md#cqpath)*
Path to the model associated with the current instance of the component
___
#### emptyLabel
• **emptyLabel**: *string* = "No allowed components"
*Inherited from [AEMAllowedComponentsContainerComponent](#aemallowedcomponentscontainercomponent.md).[emptyLabel](#aemallowedcomponentscontainercomponent.md#emptylabel)*
___
#### gridClassNames
• **gridClassNames**: *string*
Class names associated with the current responsive grid
___
#### modelName
• **modelName**: *string* = ""
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[modelName](#aemcontainercomponent.md#modelname)*
Key of the model structure
___
#### title
• **title**: *string*
*Inherited from [AEMAllowedComponentsContainerComponent](#aemallowedcomponentscontainercomponent.md).[title](#aemallowedcomponentscontainercomponent.md#title)*
### Accessors
#### allowedComponentClassNames
• **get allowedComponentClassNames**(): *string*
*Inherited from [AEMAllowedComponentsContainerComponent](#aemallowedcomponentscontainercomponent.md).[allowedComponentClassNames](#aemallowedcomponentscontainercomponent.md#allowedcomponentclassnames)*
**Returns:** *string*
___
#### allowedComponentListTitleClassNames
• **get allowedComponentListTitleClassNames**(): *string*
*Inherited from [AEMAllowedComponentsContainerComponent](#aemallowedcomponentscontainercomponent.md).[allowedComponentListTitleClassNames](#aemallowedcomponentscontainercomponent.md#allowedcomponentlisttitleclassnames)*
**Returns:** *string*
___
#### hostClasses
• **get hostClasses**(): *string*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[hostClasses](#aemcontainercomponent.md#hostclasses)*
**Returns:** *string*
___
#### isInEditMode
• **get isInEditMode**(): *boolean*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[isInEditMode](#aemcontainercomponent.md#isineditmode)*
Returns weather of not we are in the editor
**Returns:** *boolean*
___
#### placeholderPath
• **get placeholderPath**(): *string*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[placeholderPath](#aemcontainercomponent.md#placeholderpath)*
Returns the placeholder path
**Returns:** *string*
### Methods
#### getAllowedComponentListLabel
▸ **getAllowedComponentListLabel**(): *string*
*Inherited from [AEMAllowedComponentsContainerComponent](#aemallowedcomponentscontainercomponent.md).[getAllowedComponentListLabel](#aemallowedcomponentscontainercomponent.md#getallowedcomponentlistlabel)*
**Returns:** *string*
___
#### getAllowedComponentListPlaceholderClassNames
▸ **getAllowedComponentListPlaceholderClassNames**(): *string*
*Inherited from [AEMAllowedComponentsContainerComponent](#aemallowedcomponentscontainercomponent.md).[getAllowedComponentListPlaceholderClassNames](#aemallowedcomponentscontainercomponent.md#getallowedcomponentlistplaceholderclassnames)*
**Returns:** *string*
___
#### getAllowedComponents
▸ **getAllowedComponents**(): *any*
*Inherited from [AEMAllowedComponentsContainerComponent](#aemallowedcomponentscontainercomponent.md).[getAllowedComponents](#aemallowedcomponentscontainercomponent.md#getallowedcomponents)*
**Returns:** *any*
___
#### getAttrDataPath
▸ **getAttrDataPath**(`path`: any): *any*
Returns the aggregated path of this container path and the provided path
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`path` | any | the provided path to aggregate with the container path |
**Returns:** *any*
___
#### getColumnClassNames
▸ **getColumnClassNames**(`itemKey`: string): *any*
Returns the column class names for a given column
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`itemKey` | string | The key of the column item |
**Returns:** *any*
___
#### getDataPath
▸ **getDataPath**(`path`: any): *any*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[getDataPath](#aemcontainercomponent.md#getdatapath)*
Returns the aggregated path of this container path and the provided path
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`path` | any | the provided path to aggregate with the container path |
**Returns:** *any*
___
#### getHostClassNames
▸ **getHostClassNames**(): *string*
*Overrides [AEMContainerComponent](#aemcontainercomponent.md).[getHostClassNames](#aemcontainercomponent.md#gethostclassnames)*
Returns the class names of the responsive grid based on the data from the cqModel
**Returns:** *string*
___
#### getItem
▸ **getItem**(`itemKey`: any): *any*
*Inherited from [AEMContainerComponent](#aemcontainercomponent.md).[getItem](#aemcontainercomponent.md#getitem)*
Returns the item data from the cqModel
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`itemKey` | any | the itemKey to look for in the items. |
**Returns:** *any*
___
#### getPlaceholderClassNames
▸ **getPlaceholderClassNames**(): *string*
*Overrides [AEMContainerComponent](#aemcontainercomponent.md).[getPlaceholderClassNames](#aemcontainercomponent.md#getplaceholderclassnames)*
Returns the placeholder classes
**Returns:** *string*
___
#### isAllowedComponentsApplicable
▸ **isAllowedComponentsApplicable**(): *boolean*
*Inherited from [AEMAllowedComponentsContainerComponent](#aemallowedcomponentscontainercomponent.md).[isAllowedComponentsApplicable](#aemallowedcomponentscontainercomponent.md#isallowedcomponentsapplicable)*
**Returns:** *boolean*
<a id="aempagedataresolver.md"></a>
## Class: AemPageDataResolver
### Hierarchy
* **AemPageDataResolver**
### Implements
* Resolve‹string›
### Index
#### Constructors
* [constructor](#aempagedataresolver.md_constructor)
#### Methods
* [resolve](#aempagedataresolver.md_resolve)
### Constructors
#### constructor
\+ **new AemPageDataResolver**(): *[AemPageDataResolver](#aempagedataresolver.md)*
**Returns:** *[AemPageDataResolver](#aempagedataresolver.md)*
### Methods
#### resolve
▸ **resolve**(`route`: ActivatedRouteSnapshot): *string*
Returns the absolute resource path without extension.
**`example`**
// returns: '/content/aa/bb' for route.url [ 'content', 'aa', 'bb.html' ]
resolve(route)
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`route` | ActivatedRouteSnapshot | route |
**Returns:** *string*
absolute resource path without extension
<a id="aempageroutereusestrategy.md"></a>
## Class: AemPageRouteReuseStrategy
Implements RouteReuseStrategy to customize route reuse.
### Hierarchy
* **AemPageRouteReuseStrategy**
### Implements
* RouteReuseStrategy
### Index
#### Methods
* [retrieve](#aempageroutereusestrategy.md_retrieve)
* [shouldAttach](#aempageroutereusestrategy.md_shouldattach)
* [shouldDetach](#aempageroutereusestrategy.md_shoulddetach)
* [shouldReuseRoute](#aempageroutereusestrategy.md_shouldreuseroute)
* [store](#aempageroutereusestrategy.md_store)
### Methods
#### retrieve
▸ **retrieve**(`route`: ActivatedRouteSnapshot): *DetachedRouteHandle | null*
Retrieves the previously stored route.
**Parameters:**
Name | Type |
------ | ------ |
`route` | ActivatedRouteSnapshot |
**Returns:** *DetachedRouteHandle | null*
___
#### shouldAttach
▸ **shouldAttach**(`route`: ActivatedRouteSnapshot): *boolean*
Determines if this route (and its subtree) should be reattached.
**Parameters:**
Name | Type |
------ | ------ |
`route` | ActivatedRouteSnapshot |
**Returns:** *boolean*
___
#### shouldDetach
▸ **shouldDetach**(`route`: ActivatedRouteSnapshot): *boolean*
Determines if this route (and its subtree) should be detached to be reused later.
**Parameters:**
Name | Type |
------ | ------ |
`route` | ActivatedRouteSnapshot |
**Returns:** *boolean*
___
#### shouldReuseRoute
▸ **shouldReuseRoute**(`future`: ActivatedRouteSnapshot, `curr`: ActivatedRouteSnapshot): *boolean*
Determines if a route should be reused
**Parameters:**
Name | Type |
------ | ------ |
`future` | ActivatedRouteSnapshot |
`curr` | ActivatedRouteSnapshot |
**Returns:** *boolean*
___
#### store
▸ **store**(`route`: ActivatedRouteSnapshot, `detachedTree`: DetachedRouteHandle): *void*
Not storing deteached route.
**Parameters:**
Name | Type |
------ | ------ |
`route` | ActivatedRouteSnapshot |
`detachedTree` | DetachedRouteHandle |
**Returns:** *void*
<a id="componentmappingwithconfig.md"></a>
## Class: ComponentMappingWithConfig
The current class extends the @adobe/cq-spa-component-mapping#Mapto library and features with Angular specifics such as
- Storing the editing configurations for each resource type
### Hierarchy
* **ComponentMappingWithConfig**
### Index
#### Constructors
* [constructor](#componentmappingwithconfig.md_constructor)
#### Methods
* [get](#componentmappingwithconfig.md_get)
* [getEditConfig](#componentmappingwithconfig.md_geteditconfig)
* [map](#componentmappingwithconfig.md_map)
### Constructors
#### constructor
\+ **new ComponentMappingWithConfig**(`spaMapping`: SPAComponentMapping): *[ComponentMappingWithConfig](#componentmappingwithconfig.md)*
**Parameters:**
Name | Type |
------ | ------ |
`spaMapping` | SPAComponentMapping |
**Returns:** *[ComponentMappingWithConfig](#componentmappingwithconfig.md)*
### Methods
#### get
▸ **get**(`resourceType`: any): *any*
Returns the component class for the given resourceType
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`resourceType` | any | Resource type for which the component class has been stored |
**Returns:** *any*
___
#### getEditConfig
▸ **getEditConfig**(`resourceType`: any): *any*
Returns the EditConfig structure for the given type
**Parameters:**
Name | Type | Description |
------ | ------ | ------ |
`resourceType` | any | Resource type for which the configuration has been stored |
**Returns:** *any*
___
#### map
▸ **map**(`resourceTypes`: any, `clazz`: any, `editConfig`: any): *void*
Stores a component class for the given resource types and also allows to provide an EditConfig object
**Parameters:**
Name | Type | Default | Description |
------ | ------ | ------ | ------ |
`resourceTypes` | any | - | List of resource types |
`clazz` | any | - | Component class to be stored |
`editConfig` | any | null | - |
**Returns:** *void*
<a id="directivecomponent.md"></a>
## Class: DirectiveComponent
### Hierarchy
* **DirectiveComponent**
### Index
#### Properties
* [attr1](#directivecomponent.md_attr1)
* [attr2](#directivecomponent.md_attr2)
#### Accessors
* [hostClasses](#directivecomponent.md_hostclasses)
### Properties
#### attr1
• **attr1**: *any*
___
#### attr2
• **attr2**: *any*
### Accessors
#### hostClasses
• **get hostClasses**(): *string*
**Returns:** *string*
### Variables
* [ALLOWED_COMPONENT_PLACEHOLDER_CLASS_NAMES](README.md#const-allowed_component_placeholder_class_names)
* [ALLOWED_COMPONENT_TITLE_CLASS_NAMES](README.md#const-allowed_component_title_class_names)
* [ALLOWED_PLACEHOLDER_CLASS_NAMES](README.md#const-allowed_placeholder_class_names)
* [CONTAINER_CLASS_NAMES](README.md#const-container_class_names)
* [EDIT_MODE](README.md#const-edit_mode)
* [PAGE_MODEL_SEPARATOR](README.md#const-page_model_separator)
* [PLACEHOLDER_CLASS_NAME](README.md#const-placeholder_class_name)
* [PLACEHOLDER_CLASS_NAMES](README.md#const-placeholder_class_names)
* [PLACEHOLDER_ITEM_NAME](README.md#const-placeholder_item_name)
* [PREVIEW_MODE](README.md#const-preview_mode)
* [RESPONSIVE_GRID_TYPE](README.md#const-responsive_grid_type)
* [WCM_MODE_META_SELECTOR](README.md#const-wcm_mode_meta_selector)
* [componentMapping](README.md#let-componentmapping)
### Functions
* [MapTo](README.md#mapto)
* [getWCMMode](README.md#getwcmmode)
* [isBrowser](README.md#isbrowser)
### Object literals
* [Constants](README.md#const-constants)
* [Utils](README.md#const-utils)
## Variables
### `Const` ALLOWED_COMPONENT_PLACEHOLDER_CLASS_NAMES
• **ALLOWED_COMPONENT_PLACEHOLDER_CLASS_NAMES**: *"aem-AllowedComponent--component cq-placeholder placeholder"* = "aem-AllowedComponent--component cq-placeholder placeholder"
___
### `Const` ALLOWED_COMPONENT_TITLE_CLASS_NAMES
• **ALLOWED_COMPONENT_TITLE_CLASS_NAMES**: *"aem-AllowedComponent--title"* = "aem-AllowedComponent--title"
___
### `Const` ALLOWED_PLACEHOLDER_CLASS_NAMES
• **ALLOWED_PLACEHOLDER_CLASS_NAMES**: *"aem-AllowedComponent--list"* = "aem-AllowedComponent--list"
___
### `Const` CONTAINER_CLASS_NAMES
• **CONTAINER_CLASS_NAMES**: *"aem-container"* = "aem-container"
___
### `Const` EDIT_MODE
• **EDIT_MODE**: *string* = "edit"
The editor is in one of the edition modes
___
### `Const` PAGE_MODEL_SEPARATOR
• **PAGE_MODEL_SEPARATOR**: *"/jcr:content/"* = "/jcr:content/"
___
### `Const` PLACEHOLDER_CLASS_NAME
• **PLACEHOLDER_CLASS_NAME**: *"cq-placeholder"* = "cq-placeholder"
___
### `Const` PLACEHOLDER_CLASS_NAMES
• **PLACEHOLDER_CLASS_NAMES**: *"aem-Grid-newComponent"* = "aem-Grid-newComponent"
___
### `Const` PLACEHOLDER_ITEM_NAME
• **PLACEHOLDER_ITEM_NAME**: *"*"* = "*"
___
### `Const` PREVIEW_MODE
• **PREVIEW_MODE**: *string* = "preview"
The editor is in preview mode
___
### `Const` RESPONSIVE_GRID_TYPE
• **RESPONSIVE_GRID_TYPE**: *"wcm/foundation/components/responsivegrid"* = "wcm/foundation/components/responsivegrid"
___
### `Const` WCM_MODE_META_SELECTOR
• **WCM_MODE_META_SELECTOR**: *string* = "meta[property="cq:wcmmode"]"
Selector that identifies the node that contains the WCM mode state
___
### `Let` componentMapping
• **componentMapping**: *[ComponentMappingWithConfig](classes/componentmappingwithconfig.md)‹›* = new ComponentMappingWithConfig(SPAComponentMapping)
## Functions
### MapTo
▸ **MapTo**(`resourceTypes`: any): *(Anonymous function)*
**Parameters:**
Name | Type |
------ | ------ |
`resourceTypes` | any |
**Returns:** *(Anonymous function)*
___
### getWCMMode
▸ **getWCMMode**(): *any*
Returns the current WCM mode
<p>Note that the value isn't, as of the date of this writing, updated by the editor</p>
**Returns:** *any*
___
### isBrowser
▸ **isBrowser**(): *boolean*
Returns if we are in the browser context or not by checking for the
existence of the window object
**Returns:** *boolean*
## Object literals
### `Const` Constants
### ▪ **Constants**: *object*
### CHILDREN_PROP
• **CHILDREN_PROP**: *any* = PMConstants.CHILDREN_PROP
Children of an item
### DATA_PATH_PROP
• **DATA_PATH_PROP**: *string* = ":dataPath"
Path of the resource in the model
### HIERARCHY_TYPE_PROP
• **HIERARCHY_TYPE_PROP**: *any* = PMConstants.HIERARCHY_TYPE_PROP
Hierarchical type of the item
### ITEMS_ORDER_PROP
• **ITEMS_ORDER_PROP**: *any* = PMConstants.ITEMS_ORDER_PROP
Order in which the items should be listed
### ITEMS_PROP
• **ITEMS_PROP**: *any* = PMConstants.ITEMS_PROP
List of child items of an item
### NEW_SECTION_CLASS_NAMES
• **NEW_SECTION_CLASS_NAMES**: *string* = "new section"
Class names associated with a new section component
### PATH_PROP
• **PATH_PROP**: *any* = PMConstants.PATH_PROP
Path of the item
### TYPE_PROP
• **TYPE_PROP**: *any* = PMConstants.TYPE_PROP
___
### `Const` Utils
### ▪ **Utils**: *object*
Helper functions for interacting with the AEM environment
### isInEditor
▸ **isInEditor**(): *boolean*
Is the app used in the context of the AEM Page editor
**Returns:** *boolean*
## Documentation
The [technical documentation](https://www.adobe.com/go/aem6_4_docs_spa_en) is already available, but if you are unable to solve your problem or you found a bug you can always [contact us](https://www.adobe.com/go/aem6_4_support_en) and ask for help!
## Changelog
### 2.0.2 - 5 June 2020
* Update to latest `cq-spa-page-model-manager`
### 2.0.1 - 25 February 2020
* Doc: Improving the documentation
### 2.0.0 - 21 February 2020
* **BREAKING CHANGE** Migration to Angular 9
* Improvement: improving the change detection for components, using ChangeDetectorRef in favor of ngZone
### 1.2.0 - 5 April 2019
* **NEW FEATURE** Template Editor
* Give access to the list of Allowed Components from the ResponsiveGrid component
### 1.1.1 - 12 December 2018
* Doc: Improving code documentation
### 1.1.0 - 12 December 2018
* Improvement: Add dynamic routing
### 1.0.3 - 18 October 2018
* Fix: Component cqItem attribute binding
### 1.0.2 - 28 September 2018
* Adapting to the new PageModelManager API
* Refactoring the Container to be independent of the ModelManager. This is achieved by refactoring the aem-directive to only be in charge of creating the dynamic components. This way consumers can add their own logic to update the model, such as from a store.
* **BREAKING CHANGE** Refactor aem-directive to be independent of ModelManager
* **BREAKING CHANGE** Introduced aem-model-provider component which is in charge now of communication with the ModelManager. This has been added only on AResponsiveGrid
* **BREAKING CHANGE** The container component is now opaque of ModelManager, therefore it will **not** respond to updates from the editor. Extend the container and use aem-model-provider component to have this functionality added to it.
* **BREAKING CHANGE** 'dragDropName' support removed for EditConfig in ComponentMapping
### 0.0.7-beta.2 - 1 August 2018
* **BREAKING CHANGE** Refactoring of the Container, ResponsiveGrid and Placeholders to improve extensibility
* **BREAKING CHANGE** Relocation of the columnClassNames field from the ResponsiveColumn to the ResponsiveGrid to respect the latest model representation, the field type changed
* Server-side rendering preparation, fixing usage of native setAttribute.
### 0.0.7-beta.1 - 27 July 2018
* **BREAKING CHANGE** Properties are no longer bundled in cqModel, we inject all properties directly on the components
* Implications, all components should now remove cqModel property and use directly the api properties that they want to consume.