## PropertyStack **Extends PropertyComposite** [Layer]: layer.html ### Properties * `layerSeparator` **([String][1] | [RegExp][2])?** The separator used to split layer values. * `layerJoin` **[String][1]?** Value used to join layer values. * `layerLabel` **[Function][3]?** Custom logic for creating the layer value. ### getLayers Get all available layers. Returns **Collection<[Layer]>** ### getLayer Get layer by index. #### Parameters * `index` **[Number][4]** Layer index position. (optional, default `0`) #### Examples ```javascript // Get the first layer const layerFirst = property.getLayer(0); // Get the last layer const layers = this.getLayers(); const layerLast = property.getLayer(layers.length - 1); ``` Returns **([Layer] | null)** ### getSelectedLayer Get selected layer. Returns **([Layer] | null)** ### selectLayer Select layer. Without a selected layer any update made on inner properties has no effect. #### Parameters * `layer` **[Layer]** Layer to select #### Examples ```javascript const layer = property.getLayer(0); property.selectLayer(layer); ``` ### selectLayerAt Select layer by index. #### Parameters * `index` **[Number][4]** Index of the layer to select. (optional, default `0`) #### Examples ```javascript property.selectLayerAt(1); ``` ### addLayer Add new layer to the stack. #### Parameters * `props` **[Object][5]** Custom property values to use in a new layer. (optional, default `{}`) * `opts` **[Object][5]** Options (optional, default `{}`) * `opts.at` **[Number][4]?** Position index (by default the layer will be appended at the end). #### Examples ```javascript // Add new layer at the beginning of the stack with custom values property.addLayer({ 'sub-prop1': 'value1', 'sub-prop2': 'value2' }, { at: 0 }); ``` Returns **[Layer]** Added layer. ### removeLayer Remove layer. #### Parameters * `layer` **[Layer]** Layer to remove. #### Examples ```javascript const layer = property.getLayer(0); property.removeLayer(layer); ``` Returns **[Layer]** Removed layer ### removeLayerAt Remove layer by index. #### Parameters * `index` **[Number][4]** Index of the layer to remove (optional, default `0`) #### Examples ```javascript property.removeLayerAt(0); ``` Returns **([Layer] | null)** Removed layer ### getLayerLabel Get the layer label. The label can be customized with the `layerLabel` property. #### Parameters * `layer` **[Layer]** #### Examples ```javascript const layer = this.getLayer(1); const label = this.getLayerLabel(layer); ``` Returns **[String][1]** ### getStyleFromLayer Get style object from the layer. #### Parameters * `layer` **[Layer]** * `opts` **[Object][5]** Options (optional, default `{}`) * `opts.camelCase` **[Boolean][6]?** Return property names in camelCase. Returns **[Object][5]** Style object ### getLayerSeparator Get layer separator. Returns **[RegExp][2]** [1]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String [2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/RegExp [3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function [4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number [5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object [6]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean