|   | 
| /* | 
| * Licensed to the Apache Software Foundation (ASF) under one | 
| * or more contributor license agreements.  See the NOTICE file | 
| * distributed with this work for additional information | 
| * regarding copyright ownership.  The ASF licenses this file | 
| * to you under the Apache License, Version 2.0 (the | 
| * "License"); you may not use this file except in compliance | 
| * with the License.  You may obtain a copy of the License at | 
| * | 
| *   http://www.apache.org/licenses/LICENSE-2.0 | 
| * | 
| * Unless required by applicable law or agreed to in writing, | 
| * software distributed under the License is distributed on an | 
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
| * KIND, either express or implied.  See the License for the | 
| * specific language governing permissions and limitations | 
| * under the License. | 
| */ | 
|   | 
|   | 
| /** | 
|  * AUTO-GENERATED FILE. DO NOT MODIFY. | 
|  */ | 
|   | 
| /* | 
| * Licensed to the Apache Software Foundation (ASF) under one | 
| * or more contributor license agreements.  See the NOTICE file | 
| * distributed with this work for additional information | 
| * regarding copyright ownership.  The ASF licenses this file | 
| * to you under the Apache License, Version 2.0 (the | 
| * "License"); you may not use this file except in compliance | 
| * with the License.  You may obtain a copy of the License at | 
| * | 
| *   http://www.apache.org/licenses/LICENSE-2.0 | 
| * | 
| * Unless required by applicable law or agreed to in writing, | 
| * software distributed under the License is distributed on an | 
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
| * KIND, either express or implied.  See the License for the | 
| * specific language governing permissions and limitations | 
| * under the License. | 
| */ | 
| import * as graphic from '../../util/graphic.js'; | 
| import { getECData } from '../../util/innerStore.js'; | 
| import * as layout from '../../util/layout.js'; | 
| import { wrapTreePathInfo } from '../helper/treeHelper.js'; | 
| import { curry, defaults } from 'zrender/lib/core/util.js'; | 
| import { convertOptionIdName } from '../../util/model.js'; | 
| import { toggleHoverEmphasis, Z2_EMPHASIS_LIFT } from '../../util/states.js'; | 
| import { createTextStyle } from '../../label/labelStyle.js'; | 
| var TEXT_PADDING = 8; | 
| var ITEM_GAP = 8; | 
| var ARRAY_LENGTH = 5; | 
| var Breadcrumb = /** @class */function () { | 
|   function Breadcrumb(containerGroup) { | 
|     this.group = new graphic.Group(); | 
|     containerGroup.add(this.group); | 
|   } | 
|   Breadcrumb.prototype.render = function (seriesModel, api, targetNode, onSelect) { | 
|     var model = seriesModel.getModel('breadcrumb'); | 
|     var thisGroup = this.group; | 
|     thisGroup.removeAll(); | 
|     if (!model.get('show') || !targetNode) { | 
|       return; | 
|     } | 
|     var normalStyleModel = model.getModel('itemStyle'); | 
|     var emphasisModel = model.getModel('emphasis'); | 
|     var textStyleModel = normalStyleModel.getModel('textStyle'); | 
|     var emphasisTextStyleModel = emphasisModel.getModel(['itemStyle', 'textStyle']); | 
|     var layoutParam = { | 
|       pos: { | 
|         left: model.get('left'), | 
|         right: model.get('right'), | 
|         top: model.get('top'), | 
|         bottom: model.get('bottom') | 
|       }, | 
|       box: { | 
|         width: api.getWidth(), | 
|         height: api.getHeight() | 
|       }, | 
|       emptyItemWidth: model.get('emptyItemWidth'), | 
|       totalWidth: 0, | 
|       renderList: [] | 
|     }; | 
|     this._prepare(targetNode, layoutParam, textStyleModel); | 
|     this._renderContent(seriesModel, layoutParam, normalStyleModel, emphasisModel, textStyleModel, emphasisTextStyleModel, onSelect); | 
|     layout.positionElement(thisGroup, layoutParam.pos, layoutParam.box); | 
|   }; | 
|   /** | 
|    * Prepare render list and total width | 
|    * @private | 
|    */ | 
|   Breadcrumb.prototype._prepare = function (targetNode, layoutParam, textStyleModel) { | 
|     for (var node = targetNode; node; node = node.parentNode) { | 
|       var text = convertOptionIdName(node.getModel().get('name'), ''); | 
|       var textRect = textStyleModel.getTextRect(text); | 
|       var itemWidth = Math.max(textRect.width + TEXT_PADDING * 2, layoutParam.emptyItemWidth); | 
|       layoutParam.totalWidth += itemWidth + ITEM_GAP; | 
|       layoutParam.renderList.push({ | 
|         node: node, | 
|         text: text, | 
|         width: itemWidth | 
|       }); | 
|     } | 
|   }; | 
|   /** | 
|    * @private | 
|    */ | 
|   Breadcrumb.prototype._renderContent = function (seriesModel, layoutParam, normalStyleModel, emphasisModel, textStyleModel, emphasisTextStyleModel, onSelect) { | 
|     // Start rendering. | 
|     var lastX = 0; | 
|     var emptyItemWidth = layoutParam.emptyItemWidth; | 
|     var height = seriesModel.get(['breadcrumb', 'height']); | 
|     var availableSize = layout.getAvailableSize(layoutParam.pos, layoutParam.box); | 
|     var totalWidth = layoutParam.totalWidth; | 
|     var renderList = layoutParam.renderList; | 
|     var emphasisItemStyle = emphasisModel.getModel('itemStyle').getItemStyle(); | 
|     for (var i = renderList.length - 1; i >= 0; i--) { | 
|       var item = renderList[i]; | 
|       var itemNode = item.node; | 
|       var itemWidth = item.width; | 
|       var text = item.text; | 
|       // Hdie text and shorten width if necessary. | 
|       if (totalWidth > availableSize.width) { | 
|         totalWidth -= itemWidth - emptyItemWidth; | 
|         itemWidth = emptyItemWidth; | 
|         text = null; | 
|       } | 
|       var el = new graphic.Polygon({ | 
|         shape: { | 
|           points: makeItemPoints(lastX, 0, itemWidth, height, i === renderList.length - 1, i === 0) | 
|         }, | 
|         style: defaults(normalStyleModel.getItemStyle(), { | 
|           lineJoin: 'bevel' | 
|         }), | 
|         textContent: new graphic.Text({ | 
|           style: createTextStyle(textStyleModel, { | 
|             text: text | 
|           }) | 
|         }), | 
|         textConfig: { | 
|           position: 'inside' | 
|         }, | 
|         z2: Z2_EMPHASIS_LIFT * 1e4, | 
|         onclick: curry(onSelect, itemNode) | 
|       }); | 
|       el.disableLabelAnimation = true; | 
|       el.getTextContent().ensureState('emphasis').style = createTextStyle(emphasisTextStyleModel, { | 
|         text: text | 
|       }); | 
|       el.ensureState('emphasis').style = emphasisItemStyle; | 
|       toggleHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled')); | 
|       this.group.add(el); | 
|       packEventData(el, seriesModel, itemNode); | 
|       lastX += itemWidth + ITEM_GAP; | 
|     } | 
|   }; | 
|   Breadcrumb.prototype.remove = function () { | 
|     this.group.removeAll(); | 
|   }; | 
|   return Breadcrumb; | 
| }(); | 
| function makeItemPoints(x, y, itemWidth, itemHeight, head, tail) { | 
|   var points = [[head ? x : x - ARRAY_LENGTH, y], [x + itemWidth, y], [x + itemWidth, y + itemHeight], [head ? x : x - ARRAY_LENGTH, y + itemHeight]]; | 
|   !tail && points.splice(2, 0, [x + itemWidth + ARRAY_LENGTH, y + itemHeight / 2]); | 
|   !head && points.push([x, y + itemHeight / 2]); | 
|   return points; | 
| } | 
| // Package custom mouse event. | 
| function packEventData(el, seriesModel, itemNode) { | 
|   getECData(el).eventData = { | 
|     componentType: 'series', | 
|     componentSubType: 'treemap', | 
|     componentIndex: seriesModel.componentIndex, | 
|     seriesIndex: seriesModel.seriesIndex, | 
|     seriesName: seriesModel.name, | 
|     seriesType: 'treemap', | 
|     selfType: 'breadcrumb', | 
|     nodeData: { | 
|       dataIndex: itemNode && itemNode.dataIndex, | 
|       name: itemNode && itemNode.name | 
|     }, | 
|     treePathInfo: itemNode && wrapTreePathInfo(itemNode, seriesModel) | 
|   }; | 
| } | 
| export default Breadcrumb; |