@taiga-ui/addon-charts 3.57.0 → 3.59.0-canary.10da730
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/arc-chart/arc-chart.component.d.ts +1 -1
- package/components/axes/axes.component.d.ts +1 -1
- package/components/bar/bar.component.d.ts +1 -1
- package/components/bar-chart/bar-chart.component.d.ts +1 -1
- package/components/bar-set/bar-set.component.d.ts +1 -1
- package/components/legend-item/legend-item.component.d.ts +1 -1
- package/components/line-chart/line-chart-hint.directive.d.ts +1 -1
- package/components/line-chart/line-chart.component.d.ts +1 -1
- package/components/line-days-chart/line-days-chart-hint.directive.d.ts +1 -1
- package/components/line-days-chart/line-days-chart.component.d.ts +1 -1
- package/components/pie-chart/pie-chart.component.d.ts +1 -1
- package/components/pie-chart/pie-chart.directive.d.ts +1 -1
- package/components/ring-chart/ring-chart.component.d.ts +1 -1
- package/esm2020/components/arc-chart/arc-chart.component.mjs +117 -0
- package/{esm2015/components/arc-chart/arc-chart.module.js → esm2020/components/arc-chart/arc-chart.module.mjs} +5 -5
- package/esm2020/components/axes/axes.component.mjs +83 -0
- package/{esm2015/components/axes/axes.module.js → esm2020/components/axes/axes.module.mjs} +5 -5
- package/{esm2015/components/bar/bar.component.js → esm2020/components/bar/bar.component.mjs} +5 -10
- package/{esm2015/components/bar/bar.module.js → esm2020/components/bar/bar.module.mjs} +5 -5
- package/esm2020/components/bar-chart/bar-chart.component.mjs +75 -0
- package/{esm2015/components/bar-chart/bar-chart.module.js → esm2020/components/bar-chart/bar-chart.module.mjs} +9 -11
- package/esm2020/components/bar-set/bar-set.component.mjs +52 -0
- package/{esm2015/components/bar-set/bar-set.module.js → esm2020/components/bar-set/bar-set.module.mjs} +5 -5
- package/esm2020/components/legend-item/legend-item.component.mjs +41 -0
- package/{esm2015/components/legend-item/legend-item.module.js → esm2020/components/legend-item/legend-item.module.mjs} +5 -5
- package/esm2020/components/line-chart/line-chart-hint.directive.mjs +78 -0
- package/esm2020/components/line-chart/line-chart.component.mjs +188 -0
- package/{esm2015/components/line-chart/line-chart.module.js → esm2020/components/line-chart/line-chart.module.mjs} +9 -11
- package/esm2020/components/line-days-chart/line-days-chart-hint.directive.mjs +77 -0
- package/{esm2015/components/line-days-chart/line-days-chart.component.js → esm2020/components/line-days-chart/line-days-chart.component.mjs} +28 -36
- package/{esm2015/components/line-days-chart/line-days-chart.module.js → esm2020/components/line-days-chart/line-days-chart.module.mjs} +5 -5
- package/esm2020/components/pie-chart/pie-chart.component.mjs +129 -0
- package/esm2020/components/pie-chart/pie-chart.directive.mjs +61 -0
- package/{esm2015/components/pie-chart/pie-chart.module.js → esm2020/components/pie-chart/pie-chart.module.mjs} +9 -11
- package/esm2020/components/ring-chart/ring-chart.component.mjs +39 -0
- package/{esm2015/components/ring-chart/ring-chart.module.js → esm2020/components/ring-chart/ring-chart.module.mjs} +5 -5
- package/{esm2015/utils/line-length.js → esm2020/utils/line-length.mjs} +2 -2
- package/fesm2015/taiga-ui-addon-charts-components-arc-chart.mjs +140 -0
- package/fesm2015/taiga-ui-addon-charts-components-arc-chart.mjs.map +1 -0
- package/fesm2015/taiga-ui-addon-charts-components-axes.mjs +107 -0
- package/fesm2015/taiga-ui-addon-charts-components-axes.mjs.map +1 -0
- package/fesm2015/taiga-ui-addon-charts-components-bar-chart.mjs +115 -0
- package/fesm2015/taiga-ui-addon-charts-components-bar-chart.mjs.map +1 -0
- package/fesm2015/{taiga-ui-addon-charts-components-bar-set.js → taiga-ui-addon-charts-components-bar-set.mjs} +12 -17
- package/fesm2015/taiga-ui-addon-charts-components-bar-set.mjs.map +1 -0
- package/fesm2015/{taiga-ui-addon-charts-components-bar.js → taiga-ui-addon-charts-components-bar.mjs} +9 -14
- package/fesm2015/taiga-ui-addon-charts-components-bar.mjs.map +1 -0
- package/fesm2015/{taiga-ui-addon-charts-components-legend-item.js → taiga-ui-addon-charts-components-legend-item.mjs} +9 -14
- package/fesm2015/taiga-ui-addon-charts-components-legend-item.mjs.map +1 -0
- package/fesm2015/taiga-ui-addon-charts-components-line-chart.mjs +310 -0
- package/fesm2015/taiga-ui-addon-charts-components-line-chart.mjs.map +1 -0
- package/fesm2015/taiga-ui-addon-charts-components-line-days-chart.mjs +290 -0
- package/fesm2015/taiga-ui-addon-charts-components-line-days-chart.mjs.map +1 -0
- package/fesm2015/taiga-ui-addon-charts-components-pie-chart.mjs +227 -0
- package/fesm2015/taiga-ui-addon-charts-components-pie-chart.mjs.map +1 -0
- package/fesm2015/{taiga-ui-addon-charts-components-ring-chart.js → taiga-ui-addon-charts-components-ring-chart.mjs} +9 -14
- package/fesm2015/taiga-ui-addon-charts-components-ring-chart.mjs.map +1 -0
- package/fesm2015/{taiga-ui-addon-charts-components.js → taiga-ui-addon-charts-components.mjs} +1 -1
- package/fesm2015/taiga-ui-addon-charts-components.mjs.map +1 -0
- package/fesm2015/{taiga-ui-addon-charts-constants.js → taiga-ui-addon-charts-constants.mjs} +1 -1
- package/fesm2015/taiga-ui-addon-charts-constants.mjs.map +1 -0
- package/fesm2015/taiga-ui-addon-charts-interfaces.mjs +4 -0
- package/fesm2015/taiga-ui-addon-charts-interfaces.mjs.map +1 -0
- package/fesm2015/taiga-ui-addon-charts-types.mjs +4 -0
- package/fesm2015/taiga-ui-addon-charts-types.mjs.map +1 -0
- package/fesm2015/{taiga-ui-addon-charts-utils.js → taiga-ui-addon-charts-utils.mjs} +1 -1
- package/fesm2015/taiga-ui-addon-charts-utils.mjs.map +1 -0
- package/fesm2015/{taiga-ui-addon-charts.js → taiga-ui-addon-charts.mjs} +1 -1
- package/fesm2015/taiga-ui-addon-charts.mjs.map +1 -0
- package/{fesm2015/taiga-ui-addon-charts-components-arc-chart.js → fesm2020/taiga-ui-addon-charts-components-arc-chart.mjs} +13 -19
- package/fesm2020/taiga-ui-addon-charts-components-arc-chart.mjs.map +1 -0
- package/{fesm2015/taiga-ui-addon-charts-components-axes.js → fesm2020/taiga-ui-addon-charts-components-axes.mjs} +13 -20
- package/fesm2020/taiga-ui-addon-charts-components-axes.mjs.map +1 -0
- package/{fesm2015/taiga-ui-addon-charts-components-bar-chart.js → fesm2020/taiga-ui-addon-charts-components-bar-chart.mjs} +21 -30
- package/fesm2020/taiga-ui-addon-charts-components-bar-chart.mjs.map +1 -0
- package/fesm2020/taiga-ui-addon-charts-components-bar-set.mjs +75 -0
- package/fesm2020/taiga-ui-addon-charts-components-bar-set.mjs.map +1 -0
- package/fesm2020/taiga-ui-addon-charts-components-bar.mjs +59 -0
- package/fesm2020/taiga-ui-addon-charts-components-bar.mjs.map +1 -0
- package/fesm2020/taiga-ui-addon-charts-components-legend-item.mjs +64 -0
- package/fesm2020/taiga-ui-addon-charts-components-legend-item.mjs.map +1 -0
- package/{fesm2015/taiga-ui-addon-charts-components-line-chart.js → fesm2020/taiga-ui-addon-charts-components-line-chart.mjs} +29 -41
- package/fesm2020/taiga-ui-addon-charts-components-line-chart.mjs.map +1 -0
- package/{fesm2015/taiga-ui-addon-charts-components-line-days-chart.js → fesm2020/taiga-ui-addon-charts-components-line-days-chart.mjs} +36 -44
- package/fesm2020/taiga-ui-addon-charts-components-line-days-chart.mjs.map +1 -0
- package/{fesm2015/taiga-ui-addon-charts-components-pie-chart.js → fesm2020/taiga-ui-addon-charts-components-pie-chart.mjs} +24 -34
- package/fesm2020/taiga-ui-addon-charts-components-pie-chart.mjs.map +1 -0
- package/fesm2020/taiga-ui-addon-charts-components-ring-chart.mjs +63 -0
- package/fesm2020/taiga-ui-addon-charts-components-ring-chart.mjs.map +1 -0
- package/fesm2020/taiga-ui-addon-charts-components.mjs +15 -0
- package/fesm2020/taiga-ui-addon-charts-components.mjs.map +1 -0
- package/fesm2020/taiga-ui-addon-charts-constants.mjs +11 -0
- package/fesm2020/taiga-ui-addon-charts-constants.mjs.map +1 -0
- package/fesm2020/taiga-ui-addon-charts-interfaces.mjs +4 -0
- package/fesm2020/taiga-ui-addon-charts-interfaces.mjs.map +1 -0
- package/fesm2020/taiga-ui-addon-charts-types.mjs +4 -0
- package/fesm2020/taiga-ui-addon-charts-types.mjs.map +1 -0
- package/fesm2020/taiga-ui-addon-charts-utils.mjs +87 -0
- package/fesm2020/taiga-ui-addon-charts-utils.mjs.map +1 -0
- package/fesm2020/taiga-ui-addon-charts.mjs +9 -0
- package/fesm2020/taiga-ui-addon-charts.mjs.map +1 -0
- package/package.json +165 -32
- package/types/line-handler.d.ts +1 -1
- package/types/line-type.d.ts +1 -1
- package/bundles/taiga-ui-addon-charts-components-arc-chart.umd.js +0 -508
- package/bundles/taiga-ui-addon-charts-components-arc-chart.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-components-axes.umd.js +0 -158
- package/bundles/taiga-ui-addon-charts-components-axes.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-components-bar-chart.umd.js +0 -477
- package/bundles/taiga-ui-addon-charts-components-bar-chart.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-components-bar-set.umd.js +0 -438
- package/bundles/taiga-ui-addon-charts-components-bar-set.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-components-bar.umd.js +0 -411
- package/bundles/taiga-ui-addon-charts-components-bar.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-components-legend-item.umd.js +0 -103
- package/bundles/taiga-ui-addon-charts-components-legend-item.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-components-line-chart.umd.js +0 -726
- package/bundles/taiga-ui-addon-charts-components-line-chart.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-components-line-days-chart.umd.js +0 -685
- package/bundles/taiga-ui-addon-charts-components-line-days-chart.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-components-pie-chart.umd.js +0 -611
- package/bundles/taiga-ui-addon-charts-components-pie-chart.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-components-ring-chart.umd.js +0 -97
- package/bundles/taiga-ui-addon-charts-components-ring-chart.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-components.umd.js +0 -75
- package/bundles/taiga-ui-addon-charts-components.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-constants.umd.js +0 -24
- package/bundles/taiga-ui-addon-charts-constants.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-interfaces.umd.js +0 -11
- package/bundles/taiga-ui-addon-charts-interfaces.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-types.umd.js +0 -11
- package/bundles/taiga-ui-addon-charts-types.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts-utils.umd.js +0 -422
- package/bundles/taiga-ui-addon-charts-utils.umd.js.map +0 -1
- package/bundles/taiga-ui-addon-charts.umd.js +0 -39
- package/bundles/taiga-ui-addon-charts.umd.js.map +0 -1
- package/components/arc-chart/package.json +0 -10
- package/components/arc-chart/taiga-ui-addon-charts-components-arc-chart.d.ts +0 -5
- package/components/axes/package.json +0 -10
- package/components/axes/taiga-ui-addon-charts-components-axes.d.ts +0 -5
- package/components/bar/package.json +0 -10
- package/components/bar/taiga-ui-addon-charts-components-bar.d.ts +0 -5
- package/components/bar-chart/package.json +0 -10
- package/components/bar-chart/taiga-ui-addon-charts-components-bar-chart.d.ts +0 -5
- package/components/bar-set/package.json +0 -10
- package/components/bar-set/taiga-ui-addon-charts-components-bar-set.d.ts +0 -5
- package/components/legend-item/package.json +0 -10
- package/components/legend-item/taiga-ui-addon-charts-components-legend-item.d.ts +0 -5
- package/components/line-chart/package.json +0 -10
- package/components/line-chart/taiga-ui-addon-charts-components-line-chart.d.ts +0 -5
- package/components/line-days-chart/package.json +0 -10
- package/components/line-days-chart/taiga-ui-addon-charts-components-line-days-chart.d.ts +0 -5
- package/components/package.json +0 -10
- package/components/pie-chart/package.json +0 -10
- package/components/pie-chart/taiga-ui-addon-charts-components-pie-chart.d.ts +0 -5
- package/components/ring-chart/package.json +0 -10
- package/components/ring-chart/taiga-ui-addon-charts-components-ring-chart.d.ts +0 -5
- package/components/taiga-ui-addon-charts-components.d.ts +0 -5
- package/constants/package.json +0 -10
- package/constants/taiga-ui-addon-charts-constants.d.ts +0 -5
- package/esm2015/components/arc-chart/arc-chart.component.js +0 -123
- package/esm2015/components/axes/axes.component.js +0 -90
- package/esm2015/components/bar-chart/bar-chart.component.js +0 -82
- package/esm2015/components/bar-set/bar-set.component.js +0 -57
- package/esm2015/components/legend-item/legend-item.component.js +0 -46
- package/esm2015/components/line-chart/line-chart-hint.directive.js +0 -79
- package/esm2015/components/line-chart/line-chart.component.js +0 -198
- package/esm2015/components/line-days-chart/line-days-chart-hint.directive.js +0 -78
- package/esm2015/components/pie-chart/pie-chart.component.js +0 -136
- package/esm2015/components/pie-chart/pie-chart.directive.js +0 -62
- package/esm2015/components/ring-chart/ring-chart.component.js +0 -44
- package/fesm2015/taiga-ui-addon-charts-components-arc-chart.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-components-axes.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-components-bar-chart.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-components-bar-set.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-components-bar.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-components-legend-item.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-components-line-chart.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-components-line-days-chart.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-components-pie-chart.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-components-ring-chart.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-components.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-constants.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-interfaces.js +0 -4
- package/fesm2015/taiga-ui-addon-charts-interfaces.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-types.js +0 -4
- package/fesm2015/taiga-ui-addon-charts-types.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts-utils.js.map +0 -1
- package/fesm2015/taiga-ui-addon-charts.js.map +0 -1
- package/interfaces/package.json +0 -10
- package/interfaces/taiga-ui-addon-charts-interfaces.d.ts +0 -5
- package/taiga-ui-addon-charts.d.ts +0 -5
- package/types/package.json +0 -10
- package/types/taiga-ui-addon-charts-types.d.ts +0 -5
- package/utils/package.json +0 -10
- package/utils/taiga-ui-addon-charts-utils.d.ts +0 -5
- /package/{esm2015/components/arc-chart/index.js → esm2020/components/arc-chart/index.mjs} +0 -0
- /package/{esm2015/components/arc-chart/taiga-ui-addon-charts-components-arc-chart.js → esm2020/components/arc-chart/taiga-ui-addon-charts-components-arc-chart.mjs} +0 -0
- /package/{esm2015/components/axes/index.js → esm2020/components/axes/index.mjs} +0 -0
- /package/{esm2015/components/axes/taiga-ui-addon-charts-components-axes.js → esm2020/components/axes/taiga-ui-addon-charts-components-axes.mjs} +0 -0
- /package/{esm2015/components/bar/index.js → esm2020/components/bar/index.mjs} +0 -0
- /package/{esm2015/components/bar/taiga-ui-addon-charts-components-bar.js → esm2020/components/bar/taiga-ui-addon-charts-components-bar.mjs} +0 -0
- /package/{esm2015/components/bar-chart/index.js → esm2020/components/bar-chart/index.mjs} +0 -0
- /package/{esm2015/components/bar-chart/taiga-ui-addon-charts-components-bar-chart.js → esm2020/components/bar-chart/taiga-ui-addon-charts-components-bar-chart.mjs} +0 -0
- /package/{esm2015/components/bar-set/index.js → esm2020/components/bar-set/index.mjs} +0 -0
- /package/{esm2015/components/bar-set/taiga-ui-addon-charts-components-bar-set.js → esm2020/components/bar-set/taiga-ui-addon-charts-components-bar-set.mjs} +0 -0
- /package/{esm2015/components/index.js → esm2020/components/index.mjs} +0 -0
- /package/{esm2015/components/legend-item/index.js → esm2020/components/legend-item/index.mjs} +0 -0
- /package/{esm2015/components/legend-item/taiga-ui-addon-charts-components-legend-item.js → esm2020/components/legend-item/taiga-ui-addon-charts-components-legend-item.mjs} +0 -0
- /package/{esm2015/components/line-chart/index.js → esm2020/components/line-chart/index.mjs} +0 -0
- /package/{esm2015/components/line-chart/line-chart.options.js → esm2020/components/line-chart/line-chart.options.mjs} +0 -0
- /package/{esm2015/components/line-chart/taiga-ui-addon-charts-components-line-chart.js → esm2020/components/line-chart/taiga-ui-addon-charts-components-line-chart.mjs} +0 -0
- /package/{esm2015/components/line-days-chart/index.js → esm2020/components/line-days-chart/index.mjs} +0 -0
- /package/{esm2015/components/line-days-chart/taiga-ui-addon-charts-components-line-days-chart.js → esm2020/components/line-days-chart/taiga-ui-addon-charts-components-line-days-chart.mjs} +0 -0
- /package/{esm2015/components/pie-chart/index.js → esm2020/components/pie-chart/index.mjs} +0 -0
- /package/{esm2015/components/pie-chart/taiga-ui-addon-charts-components-pie-chart.js → esm2020/components/pie-chart/taiga-ui-addon-charts-components-pie-chart.mjs} +0 -0
- /package/{esm2015/components/ring-chart/index.js → esm2020/components/ring-chart/index.mjs} +0 -0
- /package/{esm2015/components/ring-chart/taiga-ui-addon-charts-components-ring-chart.js → esm2020/components/ring-chart/taiga-ui-addon-charts-components-ring-chart.mjs} +0 -0
- /package/{esm2015/components/taiga-ui-addon-charts-components.js → esm2020/components/taiga-ui-addon-charts-components.mjs} +0 -0
- /package/{esm2015/constants/index.js → esm2020/constants/index.mjs} +0 -0
- /package/{esm2015/constants/line-handlers.js → esm2020/constants/line-handlers.mjs} +0 -0
- /package/{esm2015/constants/taiga-ui-addon-charts-constants.js → esm2020/constants/taiga-ui-addon-charts-constants.mjs} +0 -0
- /package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- /package/{esm2015/interfaces/index.js → esm2020/interfaces/index.mjs} +0 -0
- /package/{esm2015/interfaces/line-chart-hint-context.js → esm2020/interfaces/line-chart-hint-context.mjs} +0 -0
- /package/{esm2015/interfaces/taiga-ui-addon-charts-interfaces.js → esm2020/interfaces/taiga-ui-addon-charts-interfaces.mjs} +0 -0
- /package/{esm2015/taiga-ui-addon-charts.js → esm2020/taiga-ui-addon-charts.mjs} +0 -0
- /package/{esm2015/types/index.js → esm2020/types/index.mjs} +0 -0
- /package/{esm2015/types/line-handler.js → esm2020/types/line-handler.mjs} +0 -0
- /package/{esm2015/types/line-type.js → esm2020/types/line-type.mjs} +0 -0
- /package/{esm2015/types/taiga-ui-addon-charts-types.js → esm2020/types/taiga-ui-addon-charts-types.mjs} +0 -0
- /package/{esm2015/utils/control-point.js → esm2020/utils/control-point.mjs} +0 -0
- /package/{esm2015/utils/describe-sector.js → esm2020/utils/describe-sector.mjs} +0 -0
- /package/{esm2015/utils/draw-curve.js → esm2020/utils/draw-curve.mjs} +0 -0
- /package/{esm2015/utils/draw-line.js → esm2020/utils/draw-line.mjs} +0 -0
- /package/{esm2015/utils/draw.js → esm2020/utils/draw.mjs} +0 -0
- /package/{esm2015/utils/index.js → esm2020/utils/index.mjs} +0 -0
- /package/{esm2015/utils/line-angle.js → esm2020/utils/line-angle.mjs} +0 -0
- /package/{esm2015/utils/prepare-external-url.js → esm2020/utils/prepare-external-url.mjs} +0 -0
- /package/{esm2015/utils/taiga-ui-addon-charts-utils.js → esm2020/utils/taiga-ui-addon-charts-utils.mjs} +0 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, HostListener, Inject, Input, NgZone, Optional, ViewChildren, } from '@angular/core';
|
|
3
|
+
import { tuiDraw } from '@taiga-ui/addon-charts/utils';
|
|
4
|
+
import { EMPTY_QUERY, TuiIdService, tuiIsPresent, tuiPure, tuiZoneOptimized, } from '@taiga-ui/cdk';
|
|
5
|
+
import { TuiHintHoverDirective, TuiHintOptionsDirective, tuiHintOptionsProvider, } from '@taiga-ui/core';
|
|
6
|
+
import { distinctUntilChanged, Subject } from 'rxjs';
|
|
7
|
+
import { TUI_LINE_CHART_OPTIONS } from './line-chart.options';
|
|
8
|
+
import { TuiLineChartHintDirective } from './line-chart-hint.directive';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/common";
|
|
11
|
+
import * as i2 from "@taiga-ui/core";
|
|
12
|
+
import * as i3 from "@taiga-ui/cdk";
|
|
13
|
+
import * as i4 from "./line-chart-hint.directive";
|
|
14
|
+
export class TuiLineChartComponent {
|
|
15
|
+
set valueSetter(value) {
|
|
16
|
+
this.value = value.filter(item => !item.some(Number.isNaN));
|
|
17
|
+
}
|
|
18
|
+
constructor(idService, zone, hintDirective, hintOptions, options) {
|
|
19
|
+
this.zone = zone;
|
|
20
|
+
this.hintDirective = hintDirective;
|
|
21
|
+
this.hintOptions = hintOptions;
|
|
22
|
+
this.options = options;
|
|
23
|
+
this.hover$ = new Subject();
|
|
24
|
+
this.drivers = EMPTY_QUERY;
|
|
25
|
+
this.x = 0;
|
|
26
|
+
this.y = 0;
|
|
27
|
+
this.width = 0;
|
|
28
|
+
this.height = 0;
|
|
29
|
+
this.smoothingFactor = this.options.smoothingFactor;
|
|
30
|
+
this.xStringify = null;
|
|
31
|
+
this.yStringify = null;
|
|
32
|
+
this.filled = this.options.filled;
|
|
33
|
+
this.dots = this.options.dots;
|
|
34
|
+
this.value = [];
|
|
35
|
+
this.autoIdString = idService.generate();
|
|
36
|
+
}
|
|
37
|
+
get hovered$() {
|
|
38
|
+
return this.hover$.pipe(distinctUntilChanged(), tuiZoneOptimized(this.zone));
|
|
39
|
+
}
|
|
40
|
+
get hintContent() {
|
|
41
|
+
return this.hintOptions?.content || '';
|
|
42
|
+
}
|
|
43
|
+
get fillId() {
|
|
44
|
+
return `tui-line-chart-${this.autoIdString}`;
|
|
45
|
+
}
|
|
46
|
+
get fill() {
|
|
47
|
+
return this.filled ? `url(#${this.fillId})` : 'none';
|
|
48
|
+
}
|
|
49
|
+
get viewBox() {
|
|
50
|
+
return `${this.x} ${this.y} ${this.width} ${this.height}`;
|
|
51
|
+
}
|
|
52
|
+
get d() {
|
|
53
|
+
return this.getD(this.value, this.smoothingFactor);
|
|
54
|
+
}
|
|
55
|
+
get fillD() {
|
|
56
|
+
return this.value.length
|
|
57
|
+
? `${this.d}V ${this.y} H ${this.value[0][0]} V ${this.value[0][1]}`
|
|
58
|
+
: this.d;
|
|
59
|
+
}
|
|
60
|
+
get isFocusable() {
|
|
61
|
+
return !this.hintDirective && this.hasHints;
|
|
62
|
+
}
|
|
63
|
+
get hasHints() {
|
|
64
|
+
return (!!this.xStringify ||
|
|
65
|
+
!!this.yStringify ||
|
|
66
|
+
!!this.hintDirective?.hint ||
|
|
67
|
+
!!this.hintContent);
|
|
68
|
+
}
|
|
69
|
+
onMouseLeave() {
|
|
70
|
+
if (!this.hintDirective) {
|
|
71
|
+
this.onHovered(NaN);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
getX(index) {
|
|
75
|
+
if (this.isSinglePoint) {
|
|
76
|
+
return this.value[0][0] / 2;
|
|
77
|
+
}
|
|
78
|
+
return index
|
|
79
|
+
? (this.value[index - 1][0] + this.value[index][0]) / 2
|
|
80
|
+
: 2 * this.value[0][0] - this.getX(1);
|
|
81
|
+
}
|
|
82
|
+
getWidth(index) {
|
|
83
|
+
return (100 * this.computeWidth(index)) / this.width;
|
|
84
|
+
}
|
|
85
|
+
getHintId(index) {
|
|
86
|
+
return `${this.autoIdString}_${index}`;
|
|
87
|
+
}
|
|
88
|
+
getImplicit($implicit) {
|
|
89
|
+
return (this.hintDirective?.getContext(this.value.indexOf($implicit), this) ||
|
|
90
|
+
$implicit);
|
|
91
|
+
}
|
|
92
|
+
getHovered(hovered) {
|
|
93
|
+
// This checks for NaN and null too since async pipe returns null before first item
|
|
94
|
+
return tuiIsPresent(hovered) && Number.isInteger(hovered)
|
|
95
|
+
? this.value[hovered]
|
|
96
|
+
: null;
|
|
97
|
+
}
|
|
98
|
+
getBottom(y) {
|
|
99
|
+
return (100 * (y - this.y)) / this.height;
|
|
100
|
+
}
|
|
101
|
+
getLeft(x) {
|
|
102
|
+
return (100 * (x - this.x)) / this.width;
|
|
103
|
+
}
|
|
104
|
+
getOffset(x) {
|
|
105
|
+
return (100 * (this.value[x][0] - this.getX(x))) / this.computeWidth(x);
|
|
106
|
+
}
|
|
107
|
+
onMouseEnter(index) {
|
|
108
|
+
if (this.hintDirective) {
|
|
109
|
+
this.hintDirective.raise(index, this);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
this.onHovered(index);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
onHovered(index) {
|
|
116
|
+
this.hover$.next(index);
|
|
117
|
+
}
|
|
118
|
+
get isSinglePoint() {
|
|
119
|
+
return this.value.length === 1;
|
|
120
|
+
}
|
|
121
|
+
getD(value, smoothingFactor) {
|
|
122
|
+
return value.reduce((d, point, index) => index ? `${d} ${tuiDraw(value, index, smoothingFactor)}` : `M ${point}`, '');
|
|
123
|
+
}
|
|
124
|
+
computeWidth(index) {
|
|
125
|
+
return index === this.value.length - 1
|
|
126
|
+
? 2 * (this.value[index][0] - this.getX(index))
|
|
127
|
+
: this.getX(index + 1) - this.getX(index);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
TuiLineChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TuiLineChartComponent, deps: [{ token: TuiIdService }, { token: NgZone }, { token: TuiLineChartHintDirective, optional: true }, { token: TuiHintOptionsDirective, optional: true }, { token: TUI_LINE_CHART_OPTIONS }], target: i0.ɵɵFactoryTarget.Component });
|
|
131
|
+
TuiLineChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TuiLineChartComponent, selector: "tui-line-chart", inputs: { valueSetter: ["value", "valueSetter"], x: "x", y: "y", width: "width", height: "height", smoothingFactor: "smoothingFactor", xStringify: "xStringify", yStringify: "yStringify", filled: "filled", dots: "dots" }, host: { listeners: { "mouseleave": "onMouseLeave()" } }, viewQueries: [{ propertyName: "drivers", predicate: TuiHintHoverDirective, descendants: true }], ngImport: i0, template: "<ng-container *tuiLet=\"hovered$ | async as hovered\">\n <svg\n focusable=\"false\"\n height=\"100%\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-svg\"\n [attr.viewBox]=\"viewBox\"\n >\n <defs>\n <linearGradient\n x1=\"0\"\n x2=\"0\"\n y1=\"1\"\n y2=\"0\"\n [attr.id]=\"fillId\"\n >\n <stop\n offset=\"0%\"\n stop-color=\"currentColor\"\n stop-opacity=\"0.5\"\n />\n <stop\n offset=\"100%\"\n stop-color=\"currentColor\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path\n stroke=\"none\"\n [attr.d]=\"fillD\"\n [attr.fill]=\"fill\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n vector-effect=\"non-scaling-stroke\"\n [attr.d]=\"d\"\n />\n </svg>\n <ng-container *ngIf=\"dots\">\n <div\n *ngFor=\"let point of value\"\n class=\"t-dot\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [style.left.%]=\"getLeft(point[0])\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"hasHints\">\n <ng-container *ngFor=\"let point of value; let index = index\">\n <!-- TODO: Fix hint type -->\n <div\n *ngIf=\"value.length > 1 || dots\"\n class=\"t-column\"\n [class.t-column_hint_hovered]=\"drivers.get(index) | async\"\n [class.t-column_hovered]=\"hovered === index\"\n [style.left.%]=\"getLeft(getX(index))\"\n [style.width.%]=\"getWidth(index)\"\n [tuiHint]=\"$any(hintDirective?.hint || hintContent)\"\n [tuiHintContext]=\"{$implicit: getImplicit(point), index: index}\"\n [tuiHintDescribe]=\"isFocusable ? getHintId(index) : null\"\n [tuiHintHost]=\"hintHost\"\n (mouseenter)=\"onMouseEnter(index)\"\n >\n <div\n class=\"t-line t-line_vertical\"\n [style.left.%]=\"getOffset(index)\"\n ></div>\n <div\n #hintHost\n class=\"t-host\"\n [id]=\"getHintId(index)\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [style.left.%]=\"getOffset(index)\"\n [tuiFocusable]=\"isFocusable\"\n ></div>\n </div>\n <div\n *ngIf=\"isFocusable\"\n class=\"t-line t-line_horizontal\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"getHovered(hovered) as point\">\n <div\n *ngIf=\"xStringify\"\n class=\"t-hint t-hint_x\"\n [style.left.%]=\"getLeft(point[0])\"\n >\n {{ xStringify(point[0]) }}\n </div>\n <div\n *ngIf=\"yStringify\"\n class=\"t-hint t-hint_y\"\n [style.bottom.%]=\"getBottom(point[1])\"\n >\n {{ yStringify(point[1]) }}\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host{display:flex;width:100%;height:100%;pointer-events:none}.t-svg{transform:scaleY(-1)}.t-column{position:absolute;top:0;height:100%;pointer-events:auto}.t-dot{position:absolute;width:.375rem;height:.375rem;border-radius:100%;background:currentColor;margin:-.1875rem;box-shadow:0 0 0 2px #fff}.t-host{position:absolute;left:50%;width:.5rem;height:.5rem;border-radius:100%;opacity:0;background:#fff;margin:-.25rem;box-shadow:0 0 0 2px currentColor,0 .0625rem .1875rem .125rem #0000001a;outline:none;pointer-events:none}.t-host:focus,.t-column_hovered .t-host,.t-column:hover .t-host,.t-column_hint_hovered .t-host{opacity:1}.t-line{position:absolute;opacity:0;background:var(--tui-base-03)}.t-line_vertical{top:0;bottom:0;left:50%;width:1px}.t-line_horizontal{z-index:-1;width:100%;height:1px}:host[style^=\"z-index: 0\"] .t-column_hovered .t-line,:host:not([style]) .t-column:hover .t-line,:host:not([style]) .t-column_hint_hovered .t-line,:host[style^=\"z-index: 0\"] .t-column_hovered+.t-line,:host:not([style]) .t-column:hover+.t-line,:host:not([style]) .t-column_hint_hovered+.t-line{opacity:1}.t-hint{position:absolute;box-shadow:var(--tui-shadow);font:var(--tui-font-text-xs);height:1.25rem;line-height:1.25rem;margin-bottom:-.625rem;padding:0 .375rem;white-space:nowrap;color:var(--tui-base-09);background:var(--tui-base-01);transform:translate3d(-50%,0,0)}.t-hint_x{bottom:0}.t-hint_y{left:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHint", "tuiHintContext", "tuiHintAppearance"] }, { kind: "directive", type: i2.TuiHintDriverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)" }, { kind: "directive", type: i2.TuiHintHostDirective, selector: "[tuiHint][tuiHintHost]", inputs: ["tuiHintHost"] }, { kind: "directive", type: i2.TuiHintHoverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintShowDelay", "tuiHintHideDelay"], exportAs: ["tuiHintHover"] }, { kind: "directive", type: i2.TuiHintDescribeDirective, selector: "[tuiHintDescribe]", inputs: ["tuiHintDescribe"] }, { kind: "directive", type: i2.TuiHintPositionDirective, selector: "[tuiHint]:not([tuiHintCustomPosition]):not(ng-container):not(ng-template)", inputs: ["tuiHintDirection"] }, { kind: "directive", type: i3.TuiFocusableDirective, selector: "[tuiFocusable]", inputs: ["tuiFocusable"] }, { kind: "directive", type: i3.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], viewProviders: [tuiHintOptionsProvider({ direction: 'top', hideDelay: 0 })], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
132
|
+
__decorate([
|
|
133
|
+
tuiPure
|
|
134
|
+
], TuiLineChartComponent.prototype, "hovered$", null);
|
|
135
|
+
__decorate([
|
|
136
|
+
tuiPure
|
|
137
|
+
], TuiLineChartComponent.prototype, "getD", null);
|
|
138
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TuiLineChartComponent, decorators: [{
|
|
139
|
+
type: Component,
|
|
140
|
+
args: [{ selector: 'tui-line-chart', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [tuiHintOptionsProvider({ direction: 'top', hideDelay: 0 })], template: "<ng-container *tuiLet=\"hovered$ | async as hovered\">\n <svg\n focusable=\"false\"\n height=\"100%\"\n preserveAspectRatio=\"none\"\n width=\"100%\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-svg\"\n [attr.viewBox]=\"viewBox\"\n >\n <defs>\n <linearGradient\n x1=\"0\"\n x2=\"0\"\n y1=\"1\"\n y2=\"0\"\n [attr.id]=\"fillId\"\n >\n <stop\n offset=\"0%\"\n stop-color=\"currentColor\"\n stop-opacity=\"0.5\"\n />\n <stop\n offset=\"100%\"\n stop-color=\"currentColor\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n <path\n stroke=\"none\"\n [attr.d]=\"fillD\"\n [attr.fill]=\"fill\"\n />\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n vector-effect=\"non-scaling-stroke\"\n [attr.d]=\"d\"\n />\n </svg>\n <ng-container *ngIf=\"dots\">\n <div\n *ngFor=\"let point of value\"\n class=\"t-dot\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [style.left.%]=\"getLeft(point[0])\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"hasHints\">\n <ng-container *ngFor=\"let point of value; let index = index\">\n <!-- TODO: Fix hint type -->\n <div\n *ngIf=\"value.length > 1 || dots\"\n class=\"t-column\"\n [class.t-column_hint_hovered]=\"drivers.get(index) | async\"\n [class.t-column_hovered]=\"hovered === index\"\n [style.left.%]=\"getLeft(getX(index))\"\n [style.width.%]=\"getWidth(index)\"\n [tuiHint]=\"$any(hintDirective?.hint || hintContent)\"\n [tuiHintContext]=\"{$implicit: getImplicit(point), index: index}\"\n [tuiHintDescribe]=\"isFocusable ? getHintId(index) : null\"\n [tuiHintHost]=\"hintHost\"\n (mouseenter)=\"onMouseEnter(index)\"\n >\n <div\n class=\"t-line t-line_vertical\"\n [style.left.%]=\"getOffset(index)\"\n ></div>\n <div\n #hintHost\n class=\"t-host\"\n [id]=\"getHintId(index)\"\n [style.bottom.%]=\"getBottom(point[1])\"\n [style.left.%]=\"getOffset(index)\"\n [tuiFocusable]=\"isFocusable\"\n ></div>\n </div>\n <div\n *ngIf=\"isFocusable\"\n class=\"t-line t-line_horizontal\"\n [style.bottom.%]=\"getBottom(point[1])\"\n ></div>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"getHovered(hovered) as point\">\n <div\n *ngIf=\"xStringify\"\n class=\"t-hint t-hint_x\"\n [style.left.%]=\"getLeft(point[0])\"\n >\n {{ xStringify(point[0]) }}\n </div>\n <div\n *ngIf=\"yStringify\"\n class=\"t-hint t-hint_y\"\n [style.bottom.%]=\"getBottom(point[1])\"\n >\n {{ yStringify(point[1]) }}\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host{display:flex;width:100%;height:100%;pointer-events:none}.t-svg{transform:scaleY(-1)}.t-column{position:absolute;top:0;height:100%;pointer-events:auto}.t-dot{position:absolute;width:.375rem;height:.375rem;border-radius:100%;background:currentColor;margin:-.1875rem;box-shadow:0 0 0 2px #fff}.t-host{position:absolute;left:50%;width:.5rem;height:.5rem;border-radius:100%;opacity:0;background:#fff;margin:-.25rem;box-shadow:0 0 0 2px currentColor,0 .0625rem .1875rem .125rem #0000001a;outline:none;pointer-events:none}.t-host:focus,.t-column_hovered .t-host,.t-column:hover .t-host,.t-column_hint_hovered .t-host{opacity:1}.t-line{position:absolute;opacity:0;background:var(--tui-base-03)}.t-line_vertical{top:0;bottom:0;left:50%;width:1px}.t-line_horizontal{z-index:-1;width:100%;height:1px}:host[style^=\"z-index: 0\"] .t-column_hovered .t-line,:host:not([style]) .t-column:hover .t-line,:host:not([style]) .t-column_hint_hovered .t-line,:host[style^=\"z-index: 0\"] .t-column_hovered+.t-line,:host:not([style]) .t-column:hover+.t-line,:host:not([style]) .t-column_hint_hovered+.t-line{opacity:1}.t-hint{position:absolute;box-shadow:var(--tui-shadow);font:var(--tui-font-text-xs);height:1.25rem;line-height:1.25rem;margin-bottom:-.625rem;padding:0 .375rem;white-space:nowrap;color:var(--tui-base-09);background:var(--tui-base-01);transform:translate3d(-50%,0,0)}.t-hint_x{bottom:0}.t-hint_y{left:0}\n"] }]
|
|
141
|
+
}], ctorParameters: function () { return [{ type: i3.TuiIdService, decorators: [{
|
|
142
|
+
type: Inject,
|
|
143
|
+
args: [TuiIdService]
|
|
144
|
+
}] }, { type: i0.NgZone, decorators: [{
|
|
145
|
+
type: Inject,
|
|
146
|
+
args: [NgZone]
|
|
147
|
+
}] }, { type: i4.TuiLineChartHintDirective, decorators: [{
|
|
148
|
+
type: Optional
|
|
149
|
+
}, {
|
|
150
|
+
type: Inject,
|
|
151
|
+
args: [TuiLineChartHintDirective]
|
|
152
|
+
}] }, { type: i2.TuiHintOptionsDirective, decorators: [{
|
|
153
|
+
type: Optional
|
|
154
|
+
}, {
|
|
155
|
+
type: Inject,
|
|
156
|
+
args: [TuiHintOptionsDirective]
|
|
157
|
+
}] }, { type: undefined, decorators: [{
|
|
158
|
+
type: Inject,
|
|
159
|
+
args: [TUI_LINE_CHART_OPTIONS]
|
|
160
|
+
}] }]; }, propDecorators: { drivers: [{
|
|
161
|
+
type: ViewChildren,
|
|
162
|
+
args: [TuiHintHoverDirective]
|
|
163
|
+
}], valueSetter: [{
|
|
164
|
+
type: Input,
|
|
165
|
+
args: ['value']
|
|
166
|
+
}], x: [{
|
|
167
|
+
type: Input
|
|
168
|
+
}], y: [{
|
|
169
|
+
type: Input
|
|
170
|
+
}], width: [{
|
|
171
|
+
type: Input
|
|
172
|
+
}], height: [{
|
|
173
|
+
type: Input
|
|
174
|
+
}], smoothingFactor: [{
|
|
175
|
+
type: Input
|
|
176
|
+
}], xStringify: [{
|
|
177
|
+
type: Input
|
|
178
|
+
}], yStringify: [{
|
|
179
|
+
type: Input
|
|
180
|
+
}], filled: [{
|
|
181
|
+
type: Input
|
|
182
|
+
}], dots: [{
|
|
183
|
+
type: Input
|
|
184
|
+
}], hovered$: [], onMouseLeave: [{
|
|
185
|
+
type: HostListener,
|
|
186
|
+
args: ['mouseleave']
|
|
187
|
+
}], getD: [] } });
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZGRvbi1jaGFydHMvY29tcG9uZW50cy9saW5lLWNoYXJ0L2xpbmUtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tY2hhcnRzL2NvbXBvbmVudHMvbGluZS1jaGFydC9saW5lLWNoYXJ0LnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBRVIsWUFBWSxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQ0gsV0FBVyxFQUNYLFlBQVksRUFDWixZQUFZLEVBQ1osT0FBTyxFQUVQLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2QixzQkFBc0IsR0FFekIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUMsb0JBQW9CLEVBQWMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRS9ELE9BQU8sRUFBQyxzQkFBc0IsRUFBc0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7O0FBU3RFLE1BQU0sT0FBTyxxQkFBcUI7SUFROUIsSUFDSSxXQUFXLENBQUMsS0FBMEI7UUFDdEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUErQkQsWUFDMEIsU0FBdUIsRUFDWixJQUFZLEVBR3BDLGFBQStDLEVBRy9DLFdBQTJDLEVBQ0gsT0FBNEI7UUFQNUMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUdwQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFHL0MsZ0JBQVcsR0FBWCxXQUFXLENBQWdDO1FBQ0gsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFsRGhFLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBS3ZDLFlBQU8sR0FBbUMsV0FBVyxDQUFDO1FBUS9ELE1BQUMsR0FBRyxDQUFDLENBQUM7UUFHTixNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBR04sVUFBSyxHQUFHLENBQUMsQ0FBQztRQUdWLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFHWCxvQkFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1FBRy9DLGVBQVUsR0FBb0MsSUFBSSxDQUFDO1FBR25ELGVBQVUsR0FBb0MsSUFBSSxDQUFDO1FBR25ELFdBQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUc3QixTQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFekIsVUFBSyxHQUF3QixFQUFFLENBQUM7UUFhNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUdELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sa0JBQWtCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pELENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCxJQUFJLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sQ0FDSCxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUk7WUFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQ3JCLENBQUM7SUFDTixDQUFDO0lBR0QsWUFBWTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkI7SUFDTCxDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQWE7UUFDZCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvQjtRQUVELE9BQU8sS0FBSztZQUNSLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYTtRQUNsQixPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3pELENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYTtRQUNuQixPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsV0FBVyxDQUFDLFNBQW1CO1FBQzNCLE9BQU8sQ0FDSCxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUM7WUFDbkUsU0FBUyxDQUNaLENBQUM7SUFDTixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQXNCO1FBQzdCLG1GQUFtRjtRQUNuRixPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNmLENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBUztRQUNmLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM5QyxDQUFDO0lBRUQsT0FBTyxDQUFDLENBQVM7UUFDYixPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDN0MsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFTO1FBQ2YsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN6QzthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QjtJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYTtRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBWSxhQUFhO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFHTyxJQUFJLENBQUMsS0FBMEIsRUFBRSxlQUF1QjtRQUM1RCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQ2YsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ2hCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFDM0UsRUFBRSxDQUNMLENBQUM7SUFDTixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWE7UUFDOUIsT0FBTyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7O21IQXBMUSxxQkFBcUIsa0JBMkNsQixZQUFZLGFBQ1osTUFBTSxhQUVOLHlCQUF5Qiw2QkFHekIsdUJBQXVCLDZCQUV2QixzQkFBc0I7dUdBbkR6QixxQkFBcUIsd1dBS2hCLHFCQUFxQixnREM3Q3ZDLDZnSEF3R0EsMnZGRGxFbUIsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7QUEyRHpFO0lBREMsT0FBTztxREFHUDtBQTZHRDtJQURDLE9BQU87aURBT1A7NEZBOUtRLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDSSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7OzBCQTZDcEUsTUFBTTsyQkFBQyxZQUFZOzswQkFDbkIsTUFBTTsyQkFBQyxNQUFNOzswQkFDYixRQUFROzswQkFDUixNQUFNOzJCQUFDLHlCQUF5Qjs7MEJBRWhDLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsdUJBQXVCOzswQkFFOUIsTUFBTTsyQkFBQyxzQkFBc0I7NENBN0N6QixPQUFPO3NCQURmLFlBQVk7dUJBQUMscUJBQXFCO2dCQUkvQixXQUFXO3NCQURkLEtBQUs7dUJBQUMsT0FBTztnQkFNZCxDQUFDO3NCQURBLEtBQUs7Z0JBSU4sQ0FBQztzQkFEQSxLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFvQkYsUUFBUSxNQTRDWixZQUFZO3NCQURYLFlBQVk7dUJBQUMsWUFBWTtnQkFvRWxCLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VHVpTGluZUNoYXJ0SGludENvbnRleHR9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jaGFydHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQge3R1aURyYXd9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jaGFydHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBFTVBUWV9RVUVSWSxcbiAgICBUdWlJZFNlcnZpY2UsXG4gICAgdHVpSXNQcmVzZW50LFxuICAgIHR1aVB1cmUsXG4gICAgVHVpU3RyaW5nSGFuZGxlcixcbiAgICB0dWlab25lT3B0aW1pemVkLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7XG4gICAgVHVpSGludEhvdmVyRGlyZWN0aXZlLFxuICAgIFR1aUhpbnRPcHRpb25zRGlyZWN0aXZlLFxuICAgIHR1aUhpbnRPcHRpb25zUHJvdmlkZXIsXG4gICAgVHVpUG9pbnQsXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7UG9seW1vcnBoZXVzQ29udGVudH0gZnJvbSAnQHRpbmtvZmYvbmctcG9seW1vcnBoZXVzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1RVSV9MSU5FX0NIQVJUX09QVElPTlMsIFR1aUxpbmVDaGFydE9wdGlvbnN9IGZyb20gJy4vbGluZS1jaGFydC5vcHRpb25zJztcbmltcG9ydCB7VHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZX0gZnJvbSAnLi9saW5lLWNoYXJ0LWhpbnQuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0dWktbGluZS1jaGFydCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpbmUtY2hhcnQudGVtcGxhdGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbGluZS1jaGFydC5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgdmlld1Byb3ZpZGVyczogW3R1aUhpbnRPcHRpb25zUHJvdmlkZXIoe2RpcmVjdGlvbjogJ3RvcCcsIGhpZGVEZWxheTogMH0pXSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpTGluZUNoYXJ0Q29tcG9uZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvdmVyJCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0b0lkU3RyaW5nOiBzdHJpbmc7XG5cbiAgICBAVmlld0NoaWxkcmVuKFR1aUhpbnRIb3ZlckRpcmVjdGl2ZSlcbiAgICByZWFkb25seSBkcml2ZXJzOiBRdWVyeUxpc3Q8T2JzZXJ2YWJsZTxib29sZWFuPj4gPSBFTVBUWV9RVUVSWTtcblxuICAgIEBJbnB1dCgndmFsdWUnKVxuICAgIHNldCB2YWx1ZVNldHRlcih2YWx1ZTogcmVhZG9ubHkgVHVpUG9pbnRbXSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uc29tZShOdW1iZXIuaXNOYU4pKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHggPSAwO1xuXG4gICAgQElucHV0KClcbiAgICB5ID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgd2lkdGggPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBoZWlnaHQgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBzbW9vdGhpbmdGYWN0b3IgPSB0aGlzLm9wdGlvbnMuc21vb3RoaW5nRmFjdG9yO1xuXG4gICAgQElucHV0KClcbiAgICB4U3RyaW5naWZ5OiBUdWlTdHJpbmdIYW5kbGVyPG51bWJlcj4gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgeVN0cmluZ2lmeTogVHVpU3RyaW5nSGFuZGxlcjxudW1iZXI+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIGZpbGxlZCA9IHRoaXMub3B0aW9ucy5maWxsZWQ7XG5cbiAgICBASW5wdXQoKVxuICAgIGRvdHMgPSB0aGlzLm9wdGlvbnMuZG90cztcblxuICAgIHZhbHVlOiByZWFkb25seSBUdWlQb2ludFtdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChUdWlJZFNlcnZpY2UpIGlkU2VydmljZTogVHVpSWRTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KE5nWm9uZSkgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoVHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZSlcbiAgICAgICAgcmVhZG9ubHkgaGludERpcmVjdGl2ZTogVHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZSB8IG51bGwsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoVHVpSGludE9wdGlvbnNEaXJlY3RpdmUpXG4gICAgICAgIHJlYWRvbmx5IGhpbnRPcHRpb25zOiBUdWlIaW50T3B0aW9uc0RpcmVjdGl2ZSB8IG51bGwsXG4gICAgICAgIEBJbmplY3QoVFVJX0xJTkVfQ0hBUlRfT1BUSU9OUykgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBUdWlMaW5lQ2hhcnRPcHRpb25zLFxuICAgICkge1xuICAgICAgICB0aGlzLmF1dG9JZFN0cmluZyA9IGlkU2VydmljZS5nZW5lcmF0ZSgpO1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgZ2V0IGhvdmVyZWQkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdmVyJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHR1aVpvbmVPcHRpbWl6ZWQodGhpcy56b25lKSk7XG4gICAgfVxuXG4gICAgZ2V0IGhpbnRDb250ZW50KCk6IFBvbHltb3JwaGV1c0NvbnRlbnQ8VHVpTGluZUNoYXJ0SGludENvbnRleHQ8VHVpUG9pbnQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpbnRPcHRpb25zPy5jb250ZW50IHx8ICcnO1xuICAgIH1cblxuICAgIGdldCBmaWxsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB0dWktbGluZS1jaGFydC0ke3RoaXMuYXV0b0lkU3RyaW5nfWA7XG4gICAgfVxuXG4gICAgZ2V0IGZpbGwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsbGVkID8gYHVybCgjJHt0aGlzLmZpbGxJZH0pYCA6ICdub25lJztcbiAgICB9XG5cbiAgICBnZXQgdmlld0JveCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy54fSAke3RoaXMueX0gJHt0aGlzLndpZHRofSAke3RoaXMuaGVpZ2h0fWA7XG4gICAgfVxuXG4gICAgZ2V0IGQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RCh0aGlzLnZhbHVlLCB0aGlzLnNtb290aGluZ0ZhY3Rvcik7XG4gICAgfVxuXG4gICAgZ2V0IGZpbGxEKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgPyBgJHt0aGlzLmR9ViAke3RoaXMueX0gSCAke3RoaXMudmFsdWVbMF1bMF19IFYgJHt0aGlzLnZhbHVlWzBdWzFdfWBcbiAgICAgICAgICAgIDogdGhpcy5kO1xuICAgIH1cblxuICAgIGdldCBpc0ZvY3VzYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmhpbnREaXJlY3RpdmUgJiYgdGhpcy5oYXNIaW50cztcbiAgICB9XG5cbiAgICBnZXQgaGFzSGludHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhIXRoaXMueFN0cmluZ2lmeSB8fFxuICAgICAgICAgICAgISF0aGlzLnlTdHJpbmdpZnkgfHxcbiAgICAgICAgICAgICEhdGhpcy5oaW50RGlyZWN0aXZlPy5oaW50IHx8XG4gICAgICAgICAgICAhIXRoaXMuaGludENvbnRlbnRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcbiAgICBvbk1vdXNlTGVhdmUoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5oaW50RGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLm9uSG92ZXJlZChOYU4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0WChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVQb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVbMF1bMF0gLyAyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4XG4gICAgICAgICAgICA/ICh0aGlzLnZhbHVlW2luZGV4IC0gMV1bMF0gKyB0aGlzLnZhbHVlW2luZGV4XVswXSkgLyAyXG4gICAgICAgICAgICA6IDIgKiB0aGlzLnZhbHVlWzBdWzBdIC0gdGhpcy5nZXRYKDEpO1xuICAgIH1cblxuICAgIGdldFdpZHRoKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKDEwMCAqIHRoaXMuY29tcHV0ZVdpZHRoKGluZGV4KSkgLyB0aGlzLndpZHRoO1xuICAgIH1cblxuICAgIGdldEhpbnRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuYXV0b0lkU3RyaW5nfV8ke2luZGV4fWA7XG4gICAgfVxuXG4gICAgZ2V0SW1wbGljaXQoJGltcGxpY2l0OiBUdWlQb2ludCk6IFR1aVBvaW50IHwgcmVhZG9ubHkgVHVpUG9pbnRbXSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmhpbnREaXJlY3RpdmU/LmdldENvbnRleHQodGhpcy52YWx1ZS5pbmRleE9mKCRpbXBsaWNpdCksIHRoaXMpIHx8XG4gICAgICAgICAgICAkaW1wbGljaXRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRIb3ZlcmVkKGhvdmVyZWQ6IG51bWJlciB8IG51bGwpOiBUdWlQb2ludCB8IG51bGwge1xuICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgTmFOIGFuZCBudWxsIHRvbyBzaW5jZSBhc3luYyBwaXBlIHJldHVybnMgbnVsbCBiZWZvcmUgZmlyc3QgaXRlbVxuICAgICAgICByZXR1cm4gdHVpSXNQcmVzZW50KGhvdmVyZWQpICYmIE51bWJlci5pc0ludGVnZXIoaG92ZXJlZClcbiAgICAgICAgICAgID8gdGhpcy52YWx1ZVtob3ZlcmVkXVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH1cblxuICAgIGdldEJvdHRvbSh5OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKDEwMCAqICh5IC0gdGhpcy55KSkgLyB0aGlzLmhlaWdodDtcbiAgICB9XG5cbiAgICBnZXRMZWZ0KHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAoMTAwICogKHggLSB0aGlzLngpKSAvIHRoaXMud2lkdGg7XG4gICAgfVxuXG4gICAgZ2V0T2Zmc2V0KHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAoMTAwICogKHRoaXMudmFsdWVbeF1bMF0gLSB0aGlzLmdldFgoeCkpKSAvIHRoaXMuY29tcHV0ZVdpZHRoKHgpO1xuICAgIH1cblxuICAgIG9uTW91c2VFbnRlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhpbnREaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuaGludERpcmVjdGl2ZS5yYWlzZShpbmRleCwgdGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uSG92ZXJlZChpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkhvdmVyZWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmhvdmVyJC5uZXh0KGluZGV4KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1NpbmdsZVBvaW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5sZW5ndGggPT09IDE7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGdldEQodmFsdWU6IHJlYWRvbmx5IFR1aVBvaW50W10sIHNtb290aGluZ0ZhY3RvcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlZHVjZShcbiAgICAgICAgICAgIChkLCBwb2ludCwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgaW5kZXggPyBgJHtkfSAke3R1aURyYXcodmFsdWUsIGluZGV4LCBzbW9vdGhpbmdGYWN0b3IpfWAgOiBgTSAke3BvaW50fWAsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVXaWR0aChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGluZGV4ID09PSB0aGlzLnZhbHVlLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gMiAqICh0aGlzLnZhbHVlW2luZGV4XVswXSAtIHRoaXMuZ2V0WChpbmRleCkpXG4gICAgICAgICAgICA6IHRoaXMuZ2V0WChpbmRleCArIDEpIC0gdGhpcy5nZXRYKGluZGV4KTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICp0dWlMZXQ9XCJob3ZlcmVkJCB8IGFzeW5jIGFzIGhvdmVyZWRcIj5cbiAgICA8c3ZnXG4gICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgIGNsYXNzPVwidC1zdmdcIlxuICAgICAgICBbYXR0ci52aWV3Qm94XT1cInZpZXdCb3hcIlxuICAgID5cbiAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICA8bGluZWFyR3JhZGllbnRcbiAgICAgICAgICAgICAgICB4MT1cIjBcIlxuICAgICAgICAgICAgICAgIHgyPVwiMFwiXG4gICAgICAgICAgICAgICAgeTE9XCIxXCJcbiAgICAgICAgICAgICAgICB5Mj1cIjBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImZpbGxJZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN0b3BcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PVwiMCVcIlxuICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgc3RvcC1vcGFjaXR5PVwiMC41XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzdG9wXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgc3RvcC1vcGFjaXR5PVwiMFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XG4gICAgICAgIDwvZGVmcz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIHN0cm9rZT1cIm5vbmVcIlxuICAgICAgICAgICAgW2F0dHIuZF09XCJmaWxsRFwiXG4gICAgICAgICAgICBbYXR0ci5maWxsXT1cImZpbGxcIlxuICAgICAgICAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgdmVjdG9yLWVmZmVjdD1cIm5vbi1zY2FsaW5nLXN0cm9rZVwiXG4gICAgICAgICAgICBbYXR0ci5kXT1cImRcIlxuICAgICAgICAvPlxuICAgIDwvc3ZnPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3RzXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwb2ludCBvZiB2YWx1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cInQtZG90XCJcbiAgICAgICAgICAgIFtzdHlsZS5ib3R0b20uJV09XCJnZXRCb3R0b20ocG9pbnRbMV0pXCJcbiAgICAgICAgICAgIFtzdHlsZS5sZWZ0LiVdPVwiZ2V0TGVmdChwb2ludFswXSlcIlxuICAgICAgICA+PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0hpbnRzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBvaW50IG9mIHZhbHVlOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgPCEtLSBUT0RPOiBGaXggaGludCB0eXBlIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwidmFsdWUubGVuZ3RoID4gMSB8fCBkb3RzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInQtY29sdW1uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudC1jb2x1bW5faGludF9ob3ZlcmVkXT1cImRyaXZlcnMuZ2V0KGluZGV4KSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudC1jb2x1bW5faG92ZXJlZF09XCJob3ZlcmVkID09PSBpbmRleFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJnZXRMZWZ0KGdldFgoaW5kZXgpKVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiZ2V0V2lkdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBbdHVpSGludF09XCIkYW55KGhpbnREaXJlY3RpdmU/LmhpbnQgfHwgaGludENvbnRlbnQpXCJcbiAgICAgICAgICAgICAgICBbdHVpSGludENvbnRleHRdPVwieyRpbXBsaWNpdDogZ2V0SW1wbGljaXQocG9pbnQpLCBpbmRleDogaW5kZXh9XCJcbiAgICAgICAgICAgICAgICBbdHVpSGludERlc2NyaWJlXT1cImlzRm9jdXNhYmxlID8gZ2V0SGludElkKGluZGV4KSA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFt0dWlIaW50SG9zdF09XCJoaW50SG9zdFwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKGluZGV4KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtbGluZSB0LWxpbmVfdmVydGljYWxcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cImdldE9mZnNldChpbmRleClcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICNoaW50SG9zdFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRIaW50SWQoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvdHRvbS4lXT1cImdldEJvdHRvbShwb2ludFsxXSlcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cImdldE9mZnNldChpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICBbdHVpRm9jdXNhYmxlXT1cImlzRm9jdXNhYmxlXCJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzRm9jdXNhYmxlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInQtbGluZSB0LWxpbmVfaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJvdHRvbS4lXT1cImdldEJvdHRvbShwb2ludFsxXSlcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0SG92ZXJlZChob3ZlcmVkKSBhcyBwb2ludFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInhTdHJpbmdpZnlcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0LWhpbnQgdC1oaW50X3hcIlxuICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJnZXRMZWZ0KHBvaW50WzBdKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IHhTdHJpbmdpZnkocG9pbnRbMF0pIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInlTdHJpbmdpZnlcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0LWhpbnQgdC1oaW50X3lcIlxuICAgICAgICAgICAgW3N0eWxlLmJvdHRvbS4lXT1cImdldEJvdHRvbShwb2ludFsxXSlcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyB5U3RyaW5naWZ5KHBvaW50WzFdKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
@@ -8,20 +8,18 @@ import { TuiLineChartHintDirective } from './line-chart-hint.directive';
|
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export class TuiLineChartModule {
|
|
10
10
|
}
|
|
11
|
-
TuiLineChartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
12
|
-
TuiLineChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "
|
|
11
|
+
TuiLineChartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TuiLineChartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12
|
+
TuiLineChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: TuiLineChartModule, declarations: [TuiLineChartComponent, TuiLineChartHintDirective], imports: [CommonModule,
|
|
13
13
|
PolymorpheusModule,
|
|
14
14
|
TuiHintModule,
|
|
15
15
|
TuiFocusableModule,
|
|
16
16
|
TuiLetModule], exports: [TuiLineChartComponent, TuiLineChartHintDirective] });
|
|
17
|
-
TuiLineChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
]] });
|
|
24
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TuiLineChartModule, decorators: [{
|
|
17
|
+
TuiLineChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TuiLineChartModule, imports: [CommonModule,
|
|
18
|
+
PolymorpheusModule,
|
|
19
|
+
TuiHintModule,
|
|
20
|
+
TuiFocusableModule,
|
|
21
|
+
TuiLetModule] });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TuiLineChartModule, decorators: [{
|
|
25
23
|
type: NgModule,
|
|
26
24
|
args: [{
|
|
27
25
|
imports: [
|
|
@@ -35,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
35
33
|
exports: [TuiLineChartComponent, TuiLineChartHintDirective],
|
|
36
34
|
}]
|
|
37
35
|
}] });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZGRvbi1jaGFydHMvY29tcG9uZW50cy9saW5lLWNoYXJ0L2xpbmUtY2hhcnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRTVELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDOztBQWF0RSxNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0IsaUJBSFoscUJBQXFCLEVBQUUseUJBQXlCLGFBTjNELFlBQVk7UUFDWixrQkFBa0I7UUFDbEIsYUFBYTtRQUNiLGtCQUFrQjtRQUNsQixZQUFZLGFBR04scUJBQXFCLEVBQUUseUJBQXlCO2lIQUVqRCxrQkFBa0IsWUFUdkIsWUFBWTtRQUNaLGtCQUFrQjtRQUNsQixhQUFhO1FBQ2Isa0JBQWtCO1FBQ2xCLFlBQVk7NEZBS1Asa0JBQWtCO2tCQVg5QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLFlBQVk7cUJBQ2Y7b0JBQ0QsWUFBWSxFQUFFLENBQUMscUJBQXFCLEVBQUUseUJBQXlCLENBQUM7b0JBQ2hFLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLHlCQUF5QixDQUFDO2lCQUM5RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1R1aUZvY3VzYWJsZU1vZHVsZSwgVHVpTGV0TW9kdWxlfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7VHVpSGludE1vZHVsZX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHtQb2x5bW9ycGhldXNNb2R1bGV9IGZyb20gJ0B0aW5rb2ZmL25nLXBvbHltb3JwaGV1cyc7XG5cbmltcG9ydCB7VHVpTGluZUNoYXJ0Q29tcG9uZW50fSBmcm9tICcuL2xpbmUtY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7VHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZX0gZnJvbSAnLi9saW5lLWNoYXJ0LWhpbnQuZGlyZWN0aXZlJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUG9seW1vcnBoZXVzTW9kdWxlLFxuICAgICAgICBUdWlIaW50TW9kdWxlLFxuICAgICAgICBUdWlGb2N1c2FibGVNb2R1bGUsXG4gICAgICAgIFR1aUxldE1vZHVsZSxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1R1aUxpbmVDaGFydENvbXBvbmVudCwgVHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZV0sXG4gICAgZXhwb3J0czogW1R1aUxpbmVDaGFydENvbXBvbmVudCwgVHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUxpbmVDaGFydE1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { ContentChildren, Directive, forwardRef, Inject, Input, NgZone, Self, } from '@angular/core';
|
|
3
|
+
import { tuiLineChartDrivers } from '@taiga-ui/addon-charts/components/line-chart';
|
|
4
|
+
import { EMPTY_QUERY, TuiDestroyService, TuiHoveredService, tuiPure, tuiZonefree, } from '@taiga-ui/cdk';
|
|
5
|
+
import { combineLatest, filter, takeUntil } from 'rxjs';
|
|
6
|
+
import { TuiLineDaysChartComponent } from './line-days-chart.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@taiga-ui/cdk";
|
|
9
|
+
import * as i2 from "rxjs";
|
|
10
|
+
function find(value, current) {
|
|
11
|
+
return value.find(([day]) => day.daySame(current)) || [current, NaN];
|
|
12
|
+
}
|
|
13
|
+
// TODO: Consider extending TuiLineChartHintDirective
|
|
14
|
+
export class TuiLineDaysChartHintDirective {
|
|
15
|
+
constructor(destroy$, zone, hovered$) {
|
|
16
|
+
this.destroy$ = destroy$;
|
|
17
|
+
this.zone = zone;
|
|
18
|
+
this.hovered$ = hovered$;
|
|
19
|
+
this.charts = EMPTY_QUERY;
|
|
20
|
+
}
|
|
21
|
+
ngAfterContentInit() {
|
|
22
|
+
combineLatest([
|
|
23
|
+
...this.charts.map(({ charts }) => tuiLineChartDrivers(charts)),
|
|
24
|
+
this.hovered$,
|
|
25
|
+
])
|
|
26
|
+
.pipe(filter(result => !result.some(Boolean)), tuiZonefree(this.zone), takeUntil(this.destroy$))
|
|
27
|
+
.subscribe(() => {
|
|
28
|
+
this.charts.forEach(chart => chart.onHovered(NaN));
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
getContext(day) {
|
|
32
|
+
return this.getMap(...this.charts.map(({ value }) => value)).get(String(day)) || [];
|
|
33
|
+
}
|
|
34
|
+
raise(day) {
|
|
35
|
+
const current = this.charts
|
|
36
|
+
.map(({ value }) => find(value, day))
|
|
37
|
+
.filter(([_, value]) => !Number.isNaN(value));
|
|
38
|
+
const sorted = [...current].sort((a, b) => a[1] - b[1]);
|
|
39
|
+
this.charts.forEach((chart, index) => {
|
|
40
|
+
chart.onHovered(day);
|
|
41
|
+
chart.zIndex = Math.max(sorted.indexOf(current[index]), 0);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
getMap(...values) {
|
|
45
|
+
return (values[0] || []).reduce((map, [day]) => map.set(String(day), values.map(value => find(value, day))), new Map());
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
TuiLineDaysChartHintDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TuiLineDaysChartHintDirective, deps: [{ token: TuiDestroyService, self: true }, { token: NgZone }, { token: TuiHoveredService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
49
|
+
TuiLineDaysChartHintDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: TuiLineDaysChartHintDirective, selector: "[tuiLineChartHint]", inputs: { hint: ["tuiLineChartHint", "hint"] }, providers: [TuiDestroyService, TuiHoveredService], queries: [{ propertyName: "charts", predicate: i0.forwardRef(function () { return TuiLineDaysChartComponent; }) }], ngImport: i0 });
|
|
50
|
+
__decorate([
|
|
51
|
+
tuiPure
|
|
52
|
+
], TuiLineDaysChartHintDirective.prototype, "getMap", null);
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TuiLineDaysChartHintDirective, decorators: [{
|
|
54
|
+
type: Directive,
|
|
55
|
+
args: [{
|
|
56
|
+
selector: '[tuiLineChartHint]',
|
|
57
|
+
providers: [TuiDestroyService, TuiHoveredService],
|
|
58
|
+
}]
|
|
59
|
+
}], ctorParameters: function () { return [{ type: i1.TuiDestroyService, decorators: [{
|
|
60
|
+
type: Self
|
|
61
|
+
}, {
|
|
62
|
+
type: Inject,
|
|
63
|
+
args: [TuiDestroyService]
|
|
64
|
+
}] }, { type: i0.NgZone, decorators: [{
|
|
65
|
+
type: Inject,
|
|
66
|
+
args: [NgZone]
|
|
67
|
+
}] }, { type: i2.Observable, decorators: [{
|
|
68
|
+
type: Inject,
|
|
69
|
+
args: [TuiHoveredService]
|
|
70
|
+
}] }]; }, propDecorators: { charts: [{
|
|
71
|
+
type: ContentChildren,
|
|
72
|
+
args: [forwardRef(() => TuiLineDaysChartComponent)]
|
|
73
|
+
}], hint: [{
|
|
74
|
+
type: Input,
|
|
75
|
+
args: ['tuiLineChartHint']
|
|
76
|
+
}], getMap: [] } });
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1kYXlzLWNoYXJ0LWhpbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tY2hhcnRzL2NvbXBvbmVudHMvbGluZS1kYXlzLWNoYXJ0L2xpbmUtZGF5cy1jaGFydC1oaW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLElBQUksR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUNqRixPQUFPLEVBQ0gsV0FBVyxFQUdYLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsT0FBTyxFQUNQLFdBQVcsR0FDZCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUMsYUFBYSxFQUFFLE1BQU0sRUFBYyxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7Ozs7QUFFdEUsU0FBUyxJQUFJLENBQUMsS0FBc0MsRUFBRSxPQUFlO0lBQ2pFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQscURBQXFEO0FBS3JELE1BQU0sT0FBTyw2QkFBNkI7SUFPdEMsWUFDd0QsUUFBMkIsRUFDOUMsSUFBWSxFQUNELFFBQTZCO1FBRnJCLGFBQVEsR0FBUixRQUFRLENBQW1CO1FBQzlDLFNBQUksR0FBSixJQUFJLENBQVE7UUFDRCxhQUFRLEdBQVIsUUFBUSxDQUFxQjtRQVI1RCxXQUFNLEdB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NkI7a0JBSnpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsU0FBUyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUM7aUJBQ3BEOzswQkFTUSxJQUFJOzswQkFBSSxNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ2hDLE1BQU07MkJBQUMsTUFBTTs7MEJBQ2IsTUFBTTsyQkFBQyxpQkFBaUI7NENBUlosTUFBTTtzQkFEdEIsZUFBZTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUM7Z0JBSTVELElBQUk7c0JBREgsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBeUNqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTZWxmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dHVpTGluZUNoYXJ0RHJpdmVyc30gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNoYXJ0cy9jb21wb25lbnRzL2xpbmUtY2hhcnQnO1xuaW1wb3J0IHtcbiAgICBFTVBUWV9RVUVSWSxcbiAgICBUdWlDb250ZXh0V2l0aEltcGxpY2l0LFxuICAgIFR1aURheSxcbiAgICBUdWlEZXN0cm95U2VydmljZSxcbiAgICBUdWlIb3ZlcmVkU2VydmljZSxcbiAgICB0dWlQdXJlLFxuICAgIHR1aVpvbmVmcmVlLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7VHVpUG9pbnR9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7UG9seW1vcnBoZXVzQ29udGVudH0gZnJvbSAnQHRpbmtvZmYvbmctcG9seW1vcnBoZXVzJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgZmlsdGVyLCBPYnNlcnZhYmxlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1R1aUxpbmVEYXlzQ2hhcnRDb21wb25lbnR9IGZyb20gJy4vbGluZS1kYXlzLWNoYXJ0LmNvbXBvbmVudCc7XG5cbmZ1bmN0aW9uIGZpbmQodmFsdWU6IFJlYWRvbmx5QXJyYXk8W1R1aURheSwgbnVtYmVyXT4sIGN1cnJlbnQ6IFR1aURheSk6IFtUdWlEYXksIG51bWJlcl0ge1xuICAgIHJldHVybiB2YWx1ZS5maW5kKChbZGF5XSkgPT4gZGF5LmRheVNhbWUoY3VycmVudCkpIHx8IFtjdXJyZW50LCBOYU5dO1xufVxuXG4vLyBUT0RPOiBDb25zaWRlciBleHRlbmRpbmcgVHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZVxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdHVpTGluZUNoYXJ0SGludF0nLFxuICAgIHByb3ZpZGVyczogW1R1aURlc3Ryb3lTZXJ2aWNlLCBUdWlIb3ZlcmVkU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUxpbmVEYXlzQ2hhcnRIaW50RGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IFR1aUxpbmVEYXlzQ2hhcnRDb21wb25lbnQpKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRzOiBRdWVyeUxpc3Q8VHVpTGluZURheXNDaGFydENvbXBvbmVudD4gPSBFTVBUWV9RVUVSWTtcblxuICAgIEBJbnB1dCgndHVpTGluZUNoYXJ0SGludCcpXG4gICAgaGludDogUG9seW1vcnBoZXVzQ29udGVudDxUdWlDb250ZXh0V2l0aEltcGxpY2l0PHJlYWRvbmx5IFR1aVBvaW50W10+PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAU2VsZigpIEBJbmplY3QoVHVpRGVzdHJveVNlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQ6IFR1aURlc3Ryb3lTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KE5nWm9uZSkgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoVHVpSG92ZXJlZFNlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgaG92ZXJlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4sXG4gICAgKSB7fVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIC4uLnRoaXMuY2hhcnRzLm1hcCgoe2NoYXJ0c30pID0+IHR1aUxpbmVDaGFydERyaXZlcnMoY2hhcnRzKSksXG4gICAgICAgICAgICB0aGlzLmhvdmVyZWQkLFxuICAgICAgICBdKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKHJlc3VsdCA9PiAhcmVzdWx0LnNvbWUoQm9vbGVhbikpLFxuICAgICAgICAgICAgICAgIHR1aVpvbmVmcmVlKHRoaXMuem9uZSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydHMuZm9yRWFjaChjaGFydCA9PiBjaGFydC5vbkhvdmVyZWQoTmFOKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0KGRheTogVHVpRGF5KTogUmVhZG9ubHlBcnJheTxbVHVpRGF5LCBudW1iZXJdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1hcCguLi50aGlzLmNoYXJ0cy5tYXAoKHt2YWx1ZX0pID0+IHZhbHVlKSkuZ2V0KFN0cmluZyhkYXkpKSB8fCBbXTtcbiAgICB9XG5cbiAgICByYWlzZShkYXk6IFR1aURheSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jaGFydHNcbiAgICAgICAgICAgIC5tYXAoKHt2YWx1ZX0pID0+IGZpbmQodmFsdWUsIGRheSkpXG4gICAgICAgICAgICAuZmlsdGVyKChbXywgdmFsdWVdKSA9PiAhTnVtYmVyLmlzTmFOKHZhbHVlKSk7XG4gICAgICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5jdXJyZW50XS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSk7XG5cbiAgICAgICAgdGhpcy5jaGFydHMuZm9yRWFjaCgoY2hhcnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjaGFydC5vbkhvdmVyZWQoZGF5KTtcbiAgICAgICAgICAgIGNoYXJ0LnpJbmRleCA9IE1hdGgubWF4KHNvcnRlZC5pbmRleE9mKGN1cnJlbnRbaW5kZXhdKSwgMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgcHJpdmF0ZSBnZXRNYXAoXG4gICAgICAgIC4uLnZhbHVlczogQXJyYXk8UmVhZG9ubHlBcnJheTxbVHVpRGF5LCBudW1iZXJdPj5cbiAgICApOiBNYXA8c3RyaW5nLCBSZWFkb25seUFycmF5PFtUdWlEYXksIG51bWJlcl0+PiB7XG4gICAgICAgIHJldHVybiAodmFsdWVzWzBdIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgICAgICAobWFwLCBbZGF5XSkgPT5cbiAgICAgICAgICAgICAgICBtYXAuc2V0KFxuICAgICAgICAgICAgICAgICAgICBTdHJpbmcoZGF5KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLm1hcCh2YWx1ZSA9PiBmaW5kKHZhbHVlLCBkYXkpKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgbmV3IE1hcDxzdHJpbmcsIFJlYWRvbmx5QXJyYXk8W1R1aURheSwgbnVtYmVyXT4+KCksXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|
|
@@ -2,19 +2,33 @@ import { __decorate } from "tslib";
|
|
|
2
2
|
import { ChangeDetectionStrategy, Component, HostBinding, Inject, Input, NgZone, Optional, Self, ViewChildren, } from '@angular/core';
|
|
3
3
|
import { TUI_LINE_CHART_OPTIONS, TuiLineChartComponent, tuiLineChartDrivers, TuiLineChartHintDirective, } from '@taiga-ui/addon-charts/components/line-chart';
|
|
4
4
|
import { EMPTY_ARRAY, EMPTY_QUERY, TuiDay, TuiDestroyService, TuiHoveredService, tuiIsNumber, tuiIsPresent, TuiMonth, tuiPure, tuiZonefree, } from '@taiga-ui/cdk';
|
|
5
|
-
import { combineLatest } from 'rxjs';
|
|
6
|
-
import { filter, takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { combineLatest, filter, takeUntil } from 'rxjs';
|
|
7
6
|
import { TuiLineDaysChartHintDirective } from './line-days-chart-hint.directive';
|
|
8
7
|
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@
|
|
10
|
-
import * as i2 from "@
|
|
11
|
-
import * as i3 from "@
|
|
12
|
-
import * as i4 from "@
|
|
8
|
+
import * as i1 from "@angular/common";
|
|
9
|
+
import * as i2 from "@taiga-ui/addon-charts/components/line-chart";
|
|
10
|
+
import * as i3 from "@tinkoff/ng-polymorpheus";
|
|
11
|
+
import * as i4 from "@taiga-ui/core";
|
|
13
12
|
import * as i5 from "./line-days-chart-hint.directive";
|
|
14
13
|
import * as i6 from "@taiga-ui/cdk";
|
|
15
14
|
import * as i7 from "rxjs";
|
|
16
15
|
const DUMMY = [NaN, NaN];
|
|
17
16
|
export class TuiLineDaysChartComponent {
|
|
17
|
+
set valueSetter(value) {
|
|
18
|
+
if (!value.length) {
|
|
19
|
+
this.value = [];
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const start = value[0][0];
|
|
23
|
+
const mutable = [...value];
|
|
24
|
+
const length = TuiDay.lengthBetween(start, value[value.length - 1][0]) + 1;
|
|
25
|
+
this.value = Array.from({ length }, (_, day) => {
|
|
26
|
+
const currentDay = start.append({ day });
|
|
27
|
+
const shifted = currentDay.daySame(mutable[0][0]) ? mutable.shift() : null;
|
|
28
|
+
const currentValue = shifted ? shifted[1] : NaN;
|
|
29
|
+
return [currentDay, currentValue];
|
|
30
|
+
});
|
|
31
|
+
}
|
|
18
32
|
constructor(hintDirective, destroy$, zone, hovered$, options) {
|
|
19
33
|
this.hintDirective = hintDirective;
|
|
20
34
|
this.destroy$ = destroy$;
|
|
@@ -32,21 +46,6 @@ export class TuiLineDaysChartComponent {
|
|
|
32
46
|
this.value = [];
|
|
33
47
|
this.daysStringify = index => this.xStringify ? this.xStringify(this.getDay(index)) : '';
|
|
34
48
|
}
|
|
35
|
-
set valueSetter(value) {
|
|
36
|
-
if (!value.length) {
|
|
37
|
-
this.value = [];
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const start = value[0][0];
|
|
41
|
-
const mutable = [...value];
|
|
42
|
-
const length = TuiDay.lengthBetween(start, value[value.length - 1][0]) + 1;
|
|
43
|
-
this.value = Array.from({ length }, (_, day) => {
|
|
44
|
-
const currentDay = start.append({ day });
|
|
45
|
-
const shifted = currentDay.daySame(mutable[0][0]) ? mutable.shift() : null;
|
|
46
|
-
const currentValue = shifted ? shifted[1] : NaN;
|
|
47
|
-
return [currentDay, currentValue];
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
49
|
get months() {
|
|
51
50
|
return this.value.length ? this.breakMonths(this.value) : EMPTY_ARRAY;
|
|
52
51
|
}
|
|
@@ -54,8 +53,7 @@ export class TuiLineDaysChartComponent {
|
|
|
54
53
|
return this.months.length * this.value[0][0].daysCount;
|
|
55
54
|
}
|
|
56
55
|
get hint() {
|
|
57
|
-
|
|
58
|
-
return (_b = (_a = this.hintDirective) === null || _a === void 0 ? void 0 : _a.hint) !== null && _b !== void 0 ? _b : this.hintContent;
|
|
56
|
+
return this.hintDirective?.hint ?? this.hintContent;
|
|
59
57
|
}
|
|
60
58
|
getHintContext(x, value) {
|
|
61
59
|
return value[x - value[0][0].day + 1];
|
|
@@ -126,37 +124,31 @@ export class TuiLineDaysChartComponent {
|
|
|
126
124
|
return this.value[index - this.value[0][0].day + 1][0];
|
|
127
125
|
}
|
|
128
126
|
}
|
|
129
|
-
TuiLineDaysChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
130
|
-
TuiLineDaysChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
127
|
+
TuiLineDaysChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TuiLineDaysChartComponent, deps: [{ token: TuiLineDaysChartHintDirective, optional: true }, { token: TuiDestroyService, self: true }, { token: NgZone }, { token: TuiHoveredService }, { token: TUI_LINE_CHART_OPTIONS }], target: i0.ɵɵFactoryTarget.Component });
|
|
128
|
+
TuiLineDaysChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TuiLineDaysChartComponent, selector: "tui-line-days-chart", inputs: { valueSetter: ["value", "valueSetter"], y: "y", height: "height", smoothingFactor: "smoothingFactor", hintContent: "hintContent", xStringify: "xStringify", yStringify: "yStringify", dots: "dots" }, host: { properties: { "style.zIndex": "this.zIndex" } }, providers: [
|
|
131
129
|
TuiDestroyService,
|
|
132
130
|
TuiHoveredService,
|
|
133
131
|
{
|
|
134
132
|
provide: TuiLineChartHintDirective,
|
|
135
133
|
useExisting: TuiLineDaysChartComponent,
|
|
136
134
|
},
|
|
137
|
-
], viewQueries: [{ propertyName: "charts", predicate: TuiLineChartComponent, descendants: true }], ngImport: i0, template: "<tui-line-chart\n *ngFor=\"let month of months; let first = first\"\n class=\"t-chart\"\n [dots]=\"dots\"\n [height]=\"height\"\n [smoothingFactor]=\"smoothingFactor\"\n [style.zIndex]=\"zIndex\"\n [tuiHintContent]=\"hintContent ? hint : ''\"\n [value]=\"month\"\n [width]=\"first ? firstWidth : getWidth(month[0][0])\"\n [x]=\"first ? 0 : getX(month[0][0])\"\n [xStringify]=\"xStringify ? daysStringify : null\"\n [y]=\"y\"\n [yStringify]=\"yStringify\"\n></tui-line-chart>\n<ng-template\n #hint\n let-point\n>\n <ng-container *polymorpheusOutlet=\"hintContent as text; context: {$implicit: getHintContext(point[0], value)}\">\n {{ text }}\n </ng-container>\n</ng-template>\n", styles: [":host{display:block}.t-chart{position:absolute;top:0;left:0;width:100%;height:100%}\n"],
|
|
135
|
+
], viewQueries: [{ propertyName: "charts", predicate: TuiLineChartComponent, descendants: true }], ngImport: i0, template: "<tui-line-chart\n *ngFor=\"let month of months; let first = first\"\n class=\"t-chart\"\n [dots]=\"dots\"\n [height]=\"height\"\n [smoothingFactor]=\"smoothingFactor\"\n [style.zIndex]=\"zIndex\"\n [tuiHintContent]=\"hintContent ? hint : ''\"\n [value]=\"month\"\n [width]=\"first ? firstWidth : getWidth(month[0][0])\"\n [x]=\"first ? 0 : getX(month[0][0])\"\n [xStringify]=\"xStringify ? daysStringify : null\"\n [y]=\"y\"\n [yStringify]=\"yStringify\"\n></tui-line-chart>\n<ng-template\n #hint\n let-point\n>\n <ng-container *polymorpheusOutlet=\"hintContent as text; context: {$implicit: getHintContext(point[0], value)}\">\n {{ text }}\n </ng-container>\n</ng-template>\n", styles: [":host{display:block}.t-chart{position:absolute;top:0;left:0;width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.TuiLineChartComponent, selector: "tui-line-chart", inputs: ["value", "x", "y", "width", "height", "smoothingFactor", "xStringify", "yStringify", "filled", "dots"] }, { kind: "directive", type: i3.PolymorpheusOutletDirective, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "directive", type: i4.TuiHintOptionsDirective, selector: "[tuiHintContent]", inputs: ["tuiHintContent", "tuiHintDirection", "tuiHintAppearance", "tuiHintShowDelay", "tuiHintHideDelay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
138
136
|
__decorate([
|
|
139
137
|
tuiPure
|
|
140
138
|
], TuiLineDaysChartComponent.prototype, "getHintContext", null);
|
|
141
139
|
__decorate([
|
|
142
140
|
tuiPure
|
|
143
141
|
], TuiLineDaysChartComponent.prototype, "breakMonths", null);
|
|
144
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
142
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TuiLineDaysChartComponent, decorators: [{
|
|
145
143
|
type: Component,
|
|
146
|
-
args: [{
|
|
147
|
-
selector: 'tui-line-days-chart',
|
|
148
|
-
templateUrl: './line-days-chart.template.html',
|
|
149
|
-
styleUrls: ['./line-days-chart.style.less'],
|
|
150
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
151
|
-
providers: [
|
|
144
|
+
args: [{ selector: 'tui-line-days-chart', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
152
145
|
TuiDestroyService,
|
|
153
146
|
TuiHoveredService,
|
|
154
147
|
{
|
|
155
148
|
provide: TuiLineChartHintDirective,
|
|
156
149
|
useExisting: TuiLineDaysChartComponent,
|
|
157
150
|
},
|
|
158
|
-
],
|
|
159
|
-
}]
|
|
151
|
+
], template: "<tui-line-chart\n *ngFor=\"let month of months; let first = first\"\n class=\"t-chart\"\n [dots]=\"dots\"\n [height]=\"height\"\n [smoothingFactor]=\"smoothingFactor\"\n [style.zIndex]=\"zIndex\"\n [tuiHintContent]=\"hintContent ? hint : ''\"\n [value]=\"month\"\n [width]=\"first ? firstWidth : getWidth(month[0][0])\"\n [x]=\"first ? 0 : getX(month[0][0])\"\n [xStringify]=\"xStringify ? daysStringify : null\"\n [y]=\"y\"\n [yStringify]=\"yStringify\"\n></tui-line-chart>\n<ng-template\n #hint\n let-point\n>\n <ng-container *polymorpheusOutlet=\"hintContent as text; context: {$implicit: getHintContext(point[0], value)}\">\n {{ text }}\n </ng-container>\n</ng-template>\n", styles: [":host{display:block}.t-chart{position:absolute;top:0;left:0;width:100%;height:100%}\n"] }]
|
|
160
152
|
}], ctorParameters: function () { return [{ type: i5.TuiLineDaysChartHintDirective, decorators: [{
|
|
161
153
|
type: Optional
|
|
162
154
|
}, {
|
|
@@ -200,4 +192,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
200
192
|
type: HostBinding,
|
|
201
193
|
args: ['style.zIndex']
|
|
202
194
|
}], getHintContext: [], breakMonths: [] } });
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1kYXlzLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkZG9uLWNoYXJ0cy9jb21wb25lbnRzL2xpbmUtZGF5cy1jaGFydC9saW5lLWRheXMtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tY2hhcnRzL2NvbXBvbmVudHMvbGluZS1kYXlzLWNoYXJ0L2xpbmUtZGF5cy1jaGFydC50ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUVSLElBQUksRUFDSixZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLHlCQUF5QixHQUU1QixNQUFNLDhDQUE4QyxDQUFDO0FBQ3RELE9BQU8sRUFDSCxXQUFXLEVBQ1gsV0FBVyxFQUVYLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxZQUFZLEVBQ1osUUFBUSxFQUNSLE9BQU8sRUFFUCxXQUFXLEdBQ2QsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLGFBQWEsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7QUFFL0UsTUFBTSxLQUFLLEdBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFnQm5DLE1BQU0sT0FBTyx5QkFBeUI7SUFtRGxDLFlBR3FCLGFBQW1ELEVBQ2hCLFFBQTJCLEVBQzlDLElBQVksRUFDRCxRQUE2QixFQUN4QixPQUE0QjtRQUo1RCxrQkFBYSxHQUFiLGFBQWEsQ0FBc0M7UUFDaEIsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFDOUMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNELGFBQVEsR0FBUixRQUFRLENBQXFCO1FBQ3hCLFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBeER4RSxXQUFNLEdBQXFDLFdBQVcsQ0FBQztRQXdCaEUsTUFBQyxHQUFHLENBQUMsQ0FBQztRQUdOLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFHWCxvQkFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1FBTS9DLGVBQVUsR0FBb0MsSUFBSSxDQUFDO1FBR25ELGVBQVUsR0FBb0MsSUFBSSxDQUFDO1FBR25ELFNBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUd6QixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRVgsVUFBSyxHQUFvQyxFQUFFLENBQUM7UUEyQ25DLGtCQUFhLEdBQTZCLEtBQUssQ0FBQyxFQUFFLENBQ3ZELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFsQzVELENBQUM7SUF2REosSUFDSSxXQUFXLENBQUMsS0FBc0M7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUVoQixPQUFPO1NBQ1Y7UUFFRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3pDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzNFLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFFaEQsT0FBTyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQXFCLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBc0NELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDMUUsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksSUFBSTs7UUFHSixPQUFPLE1BQUEsTUFBQSxJQUFJLENBQUMsYUFBYSwwQ0FBRSxJQUFJLG1DQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDeEQsQ0FBQztJQUdELGNBQWMsQ0FBQyxDQUFTLEVBQUUsS0FBc0M7UUFDNUQsT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGVBQWU7UUFDWCxhQUFhLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzNELElBQUksQ0FDRCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDdkMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDM0I7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFLRCxJQUFJLENBQUMsS0FBYTtRQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBRTFDLE9BQU8sS0FBSyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQW9CO1FBQzFCLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRW5ELE9BQU87U0FDVjtRQUVELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtnQkFDbkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZFO2lCQUFNO2dCQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDeEI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBYSxFQUFFLEVBQUMsS0FBSyxFQUF3QjtRQUMvQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkM7YUFBTTtZQUNILElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3RCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWEsRUFBRSxFQUFDLEtBQUssRUFBd0I7UUFDcEQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFCLE9BQU8sSUFBSSxDQUFDLGFBQWE7WUFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBR08sV0FBVyxDQUNmLEtBQXNDO1FBRXRDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRW5DLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FDYixFQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxFQUM3RSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUMxRDthQUNJLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUNqQixLQUFLO2FBQ0EsR0FBRyxDQUFrQixDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDaEQsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDbkU7YUFDQSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQzVCO2FBQ0EsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUN6QixLQUFLLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxLQUFLO1lBQ1AsQ0FBQyxDQUFDO2dCQUNJLEdBQUcsS0FBSztnQkFDUixLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUs7YUFDL0QsQ0FDVixDQUFDO0lBQ1YsQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUFhO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7dUhBL0tRLHlCQUF5QixrQkFxRHRCLDZCQUE2Qiw2QkFFckIsaUJBQWlCLHlCQUN6QixNQUFNLGFBQ04saUJBQWlCLGFBQ2pCLHNCQUFzQjsyR0ExRHpCLHlCQUF5QixzVEFUdkI7UUFDUCxpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCO1lBQ0ksT0FBTyxFQUFFLHlCQUF5QjtZQUNsQyxXQUFXLEVBQUUseUJBQXlCO1NBQ3pDO0tBQ0oscURBR2EscUJBQXFCLGdEQzFEdkMsZ3VCQXVCQTtBRDhHSTtJQURDLE9BQU87K0RBR1A7QUFxRUQ7SUFEQyxPQUFPOzREQXlCUDs0RkEzS1EseUJBQXlCO2tCQWRyQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFdBQVcsRUFBRSxpQ0FBaUM7b0JBQzlDLFNBQVMsRUFBRSxDQUFDLDhCQUE4QixDQUFDO29CQUMzQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsU0FBUyxFQUFFO3dCQUNQLGlCQUFpQjt3QkFDakIsaUJBQWlCO3dCQUNqQjs0QkFDSSxPQUFPLEVBQUUseUJBQXlCOzRCQUNsQyxXQUFXLDJCQUEyQjt5QkFDekM7cUJBQ0o7aUJBQ0o7OzBCQXFEUSxRQUFROzswQkFDUixNQUFNOzJCQUFDLDZCQUE2Qjs7MEJBRXBDLElBQUk7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDaEMsTUFBTTsyQkFBQyxNQUFNOzswQkFDYixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsc0JBQXNCOzRDQXhEekIsTUFBTTtzQkFEZCxZQUFZO3VCQUFDLHFCQUFxQjtnQkFJL0IsV0FBVztzQkFEZCxLQUFLO3VCQUFDLE9BQU87Z0JBc0JkLENBQUM7c0JBREEsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixNQUFNO3NCQURMLFdBQVc7dUJBQUMsY0FBYztnQkE4QjNCLGNBQWMsTUF1RU4sV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBUVUlfTElORV9DSEFSVF9PUFRJT05TLFxuICAgIFR1aUxpbmVDaGFydENvbXBvbmVudCxcbiAgICB0dWlMaW5lQ2hhcnREcml2ZXJzLFxuICAgIFR1aUxpbmVDaGFydEhpbnREaXJlY3RpdmUsXG4gICAgVHVpTGluZUNoYXJ0T3B0aW9ucyxcbn0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNoYXJ0cy9jb21wb25lbnRzL2xpbmUtY2hhcnQnO1xuaW1wb3J0IHtcbiAgICBFTVBUWV9BUlJBWSxcbiAgICBFTVBUWV9RVUVSWSxcbiAgICBUdWlDb250ZXh0V2l0aEltcGxpY2l0LFxuICAgIFR1aURheSxcbiAgICBUdWlEZXN0cm95U2VydmljZSxcbiAgICBUdWlIb3ZlcmVkU2VydmljZSxcbiAgICB0dWlJc051bWJlcixcbiAgICB0dWlJc1ByZXNlbnQsXG4gICAgVHVpTW9udGgsXG4gICAgdHVpUHVyZSxcbiAgICBUdWlTdHJpbmdIYW5kbGVyLFxuICAgIHR1aVpvbmVmcmVlLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7VHVpUG9pbnR9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7UG9seW1vcnBoZXVzQ29udGVudH0gZnJvbSAnQHRpbmtvZmYvbmctcG9seW1vcnBoZXVzJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7VHVpTGluZURheXNDaGFydEhpbnREaXJlY3RpdmV9IGZyb20gJy4vbGluZS1kYXlzLWNoYXJ0LWhpbnQuZGlyZWN0aXZlJztcblxuY29uc3QgRFVNTVk6IFR1aVBvaW50ID0gW05hTiwgTmFOXTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0dWktbGluZS1kYXlzLWNoYXJ0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGluZS1kYXlzLWNoYXJ0LnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xpbmUtZGF5cy1jaGFydC5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFR1aURlc3Ryb3lTZXJ2aWNlLFxuICAgICAgICBUdWlIb3ZlcmVkU2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVHVpTGluZUNoYXJ0SGludERpcmVjdGl2ZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUdWlMaW5lRGF5c0NoYXJ0Q29tcG9uZW50LFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUxpbmVEYXlzQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICBAVmlld0NoaWxkcmVuKFR1aUxpbmVDaGFydENvbXBvbmVudClcbiAgICByZWFkb25seSBjaGFydHM6IFF1ZXJ5TGlzdDxUdWlMaW5lQ2hhcnRDb21wb25lbnQ+ID0gRU1QVFlfUVVFUlk7XG5cbiAgICBASW5wdXQoJ3ZhbHVlJylcbiAgICBzZXQgdmFsdWVTZXR0ZXIodmFsdWU6IFJlYWRvbmx5QXJyYXk8W1R1aURheSwgbnVtYmVyXT4pIHtcbiAgICAgICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnQgPSB2YWx1ZVswXVswXTtcbiAgICAgICAgY29uc3QgbXV0YWJsZSA9IFsuLi52YWx1ZV07XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IFR1aURheS5sZW5ndGhCZXR3ZWVuKHN0YXJ0LCB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXVswXSkgKyAxO1xuXG4gICAgICAgIHRoaXMudmFsdWUgPSBBcnJheS5mcm9tKHtsZW5ndGh9LCAoXywgZGF5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGF5ID0gc3RhcnQuYXBwZW5kKHtkYXl9KTtcbiAgICAgICAgICAgIGNvbnN0IHNoaWZ0ZWQgPSBjdXJyZW50RGF5LmRheVNhbWUobXV0YWJsZVswXVswXSkgPyBtdXRhYmxlLnNoaWZ0KCkgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gc2hpZnRlZCA/IHNoaWZ0ZWRbMV0gOiBOYU47XG5cbiAgICAgICAgICAgIHJldHVybiBbY3VycmVudERheSwgY3VycmVudFZhbHVlXSBhcyBbVHVpRGF5LCBudW1iZXJdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHkgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBoZWlnaHQgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBzbW9vdGhpbmdGYWN0b3IgPSB0aGlzLm9wdGlvbnMuc21vb3RoaW5nRmFjdG9yO1xuXG4gICAgQElucHV0KClcbiAgICBoaW50Q29udGVudDogUG9seW1vcnBoZXVzQ29udGVudDxUdWlDb250ZXh0V2l0aEltcGxpY2l0PFtUdWlEYXksIG51bWJlcl0+PjtcblxuICAgIEBJbnB1dCgpXG4gICAgeFN0cmluZ2lmeTogVHVpU3RyaW5nSGFuZGxlcjxUdWlEYXk+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIHlTdHJpbmdpZnk6IFR1aVN0cmluZ0hhbmRsZXI8bnVtYmVyPiB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBkb3RzID0gdGhpcy5vcHRpb25zLmRvdHM7XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnpJbmRleCcpXG4gICAgekluZGV4ID0gMDtcblxuICAgIHZhbHVlOiBSZWFkb25seUFycmF5PFtUdWlEYXksIG51bWJlcl0+ID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChUdWlMaW5lRGF5c0NoYXJ0SGludERpcmVjdGl2ZSlcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBoaW50RGlyZWN0aXZlOiBUdWlMaW5lRGF5c0NoYXJ0SGludERpcmVjdGl2ZSB8IG51bGwsXG4gICAgICAgIEBTZWxmKCkgQEluamVjdChUdWlEZXN0cm95U2VydmljZSkgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JDogVHVpRGVzdHJveVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoTmdab25lKSBwcml2YXRlIHJlYWRvbmx5IHpvbmU6IE5nWm9uZSxcbiAgICAgICAgQEluamVjdChUdWlIb3ZlcmVkU2VydmljZSkgcHJpdmF0ZSByZWFkb25seSBob3ZlcmVkJDogT2JzZXJ2YWJsZTxib29sZWFuPixcbiAgICAgICAgQEluamVjdChUVUlfTElORV9DSEFSVF9PUFRJT05TKSBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFR1aUxpbmVDaGFydE9wdGlvbnMsXG4gICAgKSB7fVxuXG4gICAgZ2V0IG1vbnRocygpOiBSZWFkb25seUFycmF5PHJlYWRvbmx5IFR1aVBvaW50W10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoID8gdGhpcy5icmVha01vbnRocyh0aGlzLnZhbHVlKSA6IEVNUFRZX0FSUkFZO1xuICAgIH1cblxuICAgIGdldCBmaXJzdFdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRocy5sZW5ndGggKiB0aGlzLnZhbHVlWzBdWzBdLmRheXNDb3VudDtcbiAgICB9XG5cbiAgICBnZXQgaGludCgpOlxuICAgICAgICB8IFBvbHltb3JwaGV1c0NvbnRlbnQ8VHVpQ29udGV4dFdpdGhJbXBsaWNpdDxbVHVpRGF5LCBudW1iZXJdPj5cbiAgICAgICAgfCBQb2x5bW9ycGhldXNDb250ZW50PFR1aUNvbnRleHRXaXRoSW1wbGljaXQ8cmVhZG9ubHkgVHVpUG9pbnRbXT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGludERpcmVjdGl2ZT8uaGludCA/PyB0aGlzLmhpbnRDb250ZW50O1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgZ2V0SGludENvbnRleHQoeDogbnVtYmVyLCB2YWx1ZTogUmVhZG9ubHlBcnJheTxbVHVpRGF5LCBudW1iZXJdPik6IFtUdWlEYXksIG51bWJlcl0ge1xuICAgICAgICByZXR1cm4gdmFsdWVbeCAtIHZhbHVlWzBdWzBdLmRheSArIDFdO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29tYmluZUxhdGVzdChbdHVpTGluZUNoYXJ0RHJpdmVycyh0aGlzLmNoYXJ0cyksIHRoaXMuaG92ZXJlZCRdKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKHJlc3VsdCA9PiAhcmVzdWx0LnNvbWUoQm9vbGVhbikpLFxuICAgICAgICAgICAgICAgIHR1aVpvbmVmcmVlKHRoaXMuem9uZSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkhvdmVyZWQoTmFOKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlYWRvbmx5IGRheXNTdHJpbmdpZnk6IFR1aVN0cmluZ0hhbmRsZXI8bnVtYmVyPiA9IGluZGV4ID0+XG4gICAgICAgIHRoaXMueFN0cmluZ2lmeSA/IHRoaXMueFN0cmluZ2lmeSh0aGlzLmdldERheShpbmRleCkpIDogJyc7XG5cbiAgICBnZXRYKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5nZXREYXkoaW5kZXgpO1xuICAgICAgICBjb25zdCBtb250aHMgPSBUdWlNb250aC5sZW5ndGhCZXR3ZWVuKHRoaXMudmFsdWVbMF1bMF0sIGN1cnJlbnQpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBtb250aHMgKiBjdXJyZW50LmRheXNDb3VudDtcblxuICAgICAgICByZXR1cm4gaW5kZXggLSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgb25Ib3ZlcmVkKGRheTogVHVpRGF5IHwgbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0dWlJc051bWJlcihkYXkpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0cy5mb3JFYWNoKGNoYXJ0ID0+IGNoYXJ0Lm9uSG92ZXJlZChOYU4pKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBUdWlNb250aC5sZW5ndGhCZXR3ZWVuKHRoaXMudmFsdWVbMF1bMF0sIGRheSk7XG4gICAgICAgIGNvbnN0IHggPSBUdWlEYXkubGVuZ3RoQmV0d2Vlbih0aGlzLnZhbHVlWzBdWzBdLCBkYXkpICsgdGhpcy52YWx1ZVswXVswXS5kYXkgLSAxO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jaGFydHMuZ2V0KGluZGV4KTtcblxuICAgICAgICB0aGlzLmNoYXJ0cy5mb3JFYWNoKGNoYXJ0ID0+IHtcbiAgICAgICAgICAgIGlmIChjaGFydCA9PT0gY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQub25Ib3ZlcmVkKGN1cnJlbnQudmFsdWUuZmluZEluZGV4KHBvaW50ID0+IHBvaW50WzBdID09PSB4KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoYXJ0Lm9uSG92ZXJlZChOYU4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByYWlzZShpbmRleDogbnVtYmVyLCB7dmFsdWV9OiBUdWlMaW5lQ2hhcnRDb21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeCA9IHZhbHVlW2luZGV4XVswXTtcbiAgICAgICAgY29uc3QgbW9udGggPSB0aGlzLmdldERheSh4KTtcblxuICAgICAgICBpZiAodGhpcy5oaW50RGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmhpbnREaXJlY3RpdmUucmFpc2UobW9udGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkhvdmVyZWQobW9udGgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0V2lkdGgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERheShpbmRleCkuZGF5c0NvdW50ICogdGhpcy5tb250aHMubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldENvbnRleHQoaW5kZXg6IG51bWJlciwge3ZhbHVlfTogVHVpTGluZUNoYXJ0Q29tcG9uZW50KTogdW5rbm93biB7XG4gICAgICAgIGNvbnN0IHggPSB2YWx1ZVtpbmRleF1bMF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaGludERpcmVjdGl2ZVxuICAgICAgICAgICAgPyB0aGlzLmhpbnREaXJlY3RpdmUuZ2V0Q29udGV4dCh0aGlzLmdldERheSh4KSlcbiAgICAgICAgICAgIDogdGhpcy5nZXRIaW50Q29udGV4dCh4LCB0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBAdHVpUHVyZVxuICAgIHByaXZhdGUgYnJlYWtNb250aHMoXG4gICAgICAgIHZhbHVlOiBSZWFkb25seUFycmF5PFtUdWlEYXksIG51bWJlcl0+LFxuICAgICk6IFJlYWRvbmx5QXJyYXk8cmVhZG9ubHkgVHVpUG9pbnRbXT4ge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB2YWx1ZVswXVswXS5kYXkgLSAxO1xuXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgICAgICAge2xlbmd0aDogVHVpTW9udGgubGVuZ3RoQmV0d2Vlbih2YWx1ZVswXVswXSwgdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV1bMF0pICsgMX0sXG4gICAgICAgICAgICAoXywgaSkgPT4gaSArIHZhbHVlWzBdWzBdLm1vbnRoICsgdmFsdWVbMF1bMF0ueWVhciAqIDEyLFxuICAgICAgICApXG4gICAgICAgICAgICAubWFwKGFic29sdXRlTW9udGggPT5cbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAubWFwPFR1aVBvaW50IHwgbnVsbD4oKFt7bW9udGgsIHllYXJ9LCB5XSwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aCArIHllYXIgKiAxMiA9PT0gYWJzb2x1dGVNb250aCA/IFtpbmRleCArIG9mZnNldCwgeV0gOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5tYXAoKG1vbnRoLCBpbmRleCwgYXJyYXkpID0+XG4gICAgICAgICAgICAgICAgaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgPyBtb250aFxuICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubW9udGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4ICsgMV0uZmluZChkYXkgPT4gIU51bWJlci5pc05hTihkYXlbMV0pKSB8fCBEVU1NWSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERheShpbmRleDogbnVtYmVyKTogVHVpRGF5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVbaW5kZXggLSB0aGlzLnZhbHVlWzBdWzBdLmRheSArIDFdWzBdO1xuICAgIH1cbn1cbiIsIjx0dWktbGluZS1jaGFydFxuICAgICpuZ0Zvcj1cImxldCBtb250aCBvZiBtb250aHM7IGxldCBmaXJzdCA9IGZpcnN0XCJcbiAgICBjbGFzcz1cInQtY2hhcnRcIlxuICAgIFtkb3RzXT1cImRvdHNcIlxuICAgIFtoZWlnaHRdPVwiaGVpZ2h0XCJcbiAgICBbc21vb3RoaW5nRmFjdG9yXT1cInNtb290aGluZ0ZhY3RvclwiXG4gICAgW3N0eWxlLnpJbmRleF09XCJ6SW5kZXhcIlxuICAgIFt0dWlIaW50Q29udGVudF09XCJoaW50Q29udGVudCA/IGhpbnQgOiAnJ1wiXG4gICAgW3ZhbHVlXT1cIm1vbnRoXCJcbiAgICBbd2lkdGhdPVwiZmlyc3QgPyBmaXJzdFdpZHRoIDogZ2V0V2lkdGgobW9udGhbMF1bMF0pXCJcbiAgICBbeF09XCJmaXJzdCA/IDAgOiBnZXRYKG1vbnRoWzBdWzBdKVwiXG4gICAgW3hTdHJpbmdpZnldPVwieFN0cmluZ2lmeSA/IGRheXNTdHJpbmdpZnkgOiBudWxsXCJcbiAgICBbeV09XCJ5XCJcbiAgICBbeVN0cmluZ2lmeV09XCJ5U3RyaW5naWZ5XCJcbj48L3R1aS1saW5lLWNoYXJ0PlxuPG5nLXRlbXBsYXRlXG4gICAgI2hpbnRcbiAgICBsZXQtcG9pbnRcbj5cbiAgICA8bmctY29udGFpbmVyICpwb2x5bW9ycGhldXNPdXRsZXQ9XCJoaW50Q29udGVudCBhcyB0ZXh0OyBjb250ZXh0OiB7JGltcGxpY2l0OiBnZXRIaW50Q29udGV4dChwb2ludFswXSwgdmFsdWUpfVwiPlxuICAgICAgICB7eyB0ZXh0IH19XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1kYXlzLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkZG9uLWNoYXJ0cy9jb21wb25lbnRzL2xpbmUtZGF5cy1jaGFydC9saW5lLWRheXMtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tY2hhcnRzL2NvbXBvbmVudHMvbGluZS1kYXlzLWNoYXJ0L2xpbmUtZGF5cy1jaGFydC50ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUVSLElBQUksRUFDSixZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLHlCQUF5QixHQUU1QixNQUFNLDhDQUE4QyxDQUFDO0FBQ3RELE9BQU8sRUFDSCxXQUFXLEVBQ1gsV0FBVyxFQUVYLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxZQUFZLEVBQ1osUUFBUSxFQUNSLE9BQU8sRUFFUCxXQUFXLEdBQ2QsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLGFBQWEsRUFBRSxNQUFNLEVBQWMsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWxFLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7QUFFL0UsTUFBTSxLQUFLLEdBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFnQm5DLE1BQU0sT0FBTyx5QkFBeUI7SUFJbEMsSUFDSSxXQUFXLENBQUMsS0FBc0M7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJ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R2EscUJBQXFCLGdEQ3pEdkMsZ3VCQXVCQTtBRDZHSTtJQURDLE9BQU87K0RBR1A7QUFxRUQ7SUFEQyxPQUFPOzREQXlCUDs0RkEzS1EseUJBQXlCO2tCQWRyQyxTQUFTOytCQUNJLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNQLGlCQUFpQjt3QkFDakIsaUJBQWlCO3dCQUNqQjs0QkFDSSxPQUFPLEVBQUUseUJBQXlCOzRCQUNsQyxXQUFXLDJCQUEyQjt5QkFDekM7cUJBQ0o7OzBCQXNESSxRQUFROzswQkFDUixNQUFNOzJCQUFDLDZCQUE2Qjs7MEJBRXBDLElBQUk7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDaEMsTUFBTTsyQkFBQyxNQUFNOzswQkFDYixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsc0JBQXNCOzRDQXhEekIsTUFBTTtzQkFEZCxZQUFZO3VCQUFDLHFCQUFxQjtnQkFJL0IsV0FBVztzQkFEZCxLQUFLO3VCQUFDLE9BQU87Z0JBc0JkLENBQUM7c0JBREEsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixNQUFNO3NCQURMLFdBQVc7dUJBQUMsY0FBYztnQkE4QjNCLGNBQWMsTUF1RU4sV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBUVUlfTElORV9DSEFSVF9PUFRJT05TLFxuICAgIFR1aUxpbmVDaGFydENvbXBvbmVudCxcbiAgICB0dWlMaW5lQ2hhcnREcml2ZXJzLFxuICAgIFR1aUxpbmVDaGFydEhpbnREaXJlY3RpdmUsXG4gICAgVHVpTGluZUNoYXJ0T3B0aW9ucyxcbn0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNoYXJ0cy9jb21wb25lbnRzL2xpbmUtY2hhcnQnO1xuaW1wb3J0IHtcbiAgICBFTVBUWV9BUlJBWSxcbiAgICBFTVBUWV9RVUVSWSxcbiAgICBUdWlDb250ZXh0V2l0aEltcGxpY2l0LFxuICAgIFR1aURheSxcbiAgICBUdWlEZXN0cm95U2VydmljZSxcbiAgICBUdWlIb3ZlcmVkU2VydmljZSxcbiAgICB0dWlJc051bWJlcixcbiAgICB0dWlJc1ByZXNlbnQsXG4gICAgVHVpTW9udGgsXG4gICAgdHVpUHVyZSxcbiAgICBUdWlTdHJpbmdIYW5kbGVyLFxuICAgIHR1aVpvbmVmcmVlLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7VHVpUG9pbnR9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7UG9seW1vcnBoZXVzQ29udGVudH0gZnJvbSAnQHRpbmtvZmYvbmctcG9seW1vcnBoZXVzJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgZmlsdGVyLCBPYnNlcnZhYmxlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1R1aUxpbmVEYXlzQ2hhcnRIaW50RGlyZWN0aXZlfSBmcm9tICcuL2xpbmUtZGF5cy1jaGFydC1oaW50LmRpcmVjdGl2ZSc7XG5cbmNvbnN0IERVTU1ZOiBUdWlQb2ludCA9IFtOYU4sIE5hTl07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndHVpLWxpbmUtZGF5cy1jaGFydCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpbmUtZGF5cy1jaGFydC50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9saW5lLWRheXMtY2hhcnQuc3R5bGUubGVzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBUdWlEZXN0cm95U2VydmljZSxcbiAgICAgICAgVHVpSG92ZXJlZFNlcnZpY2UsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFR1aUxpbmVDaGFydEhpbnREaXJlY3RpdmUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVHVpTGluZURheXNDaGFydENvbXBvbmVudCxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlMaW5lRGF5c0NoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQFZpZXdDaGlsZHJlbihUdWlMaW5lQ2hhcnRDb21wb25lbnQpXG4gICAgcmVhZG9ubHkgY2hhcnRzOiBRdWVyeUxpc3Q8VHVpTGluZUNoYXJ0Q29tcG9uZW50PiA9IEVNUFRZX1FVRVJZO1xuXG4gICAgQElucHV0KCd2YWx1ZScpXG4gICAgc2V0IHZhbHVlU2V0dGVyKHZhbHVlOiBSZWFkb25seUFycmF5PFtUdWlEYXksIG51bWJlcl0+KSB7XG4gICAgICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdmFsdWVbMF1bMF07XG4gICAgICAgIGNvbnN0IG11dGFibGUgPSBbLi4udmFsdWVdO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBUdWlEYXkubGVuZ3RoQmV0d2VlbihzdGFydCwgdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV1bMF0pICsgMTtcblxuICAgICAgICB0aGlzLnZhbHVlID0gQXJyYXkuZnJvbSh7bGVuZ3RofSwgKF8sIGRheSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERheSA9IHN0YXJ0LmFwcGVuZCh7ZGF5fSk7XG4gICAgICAgICAgICBjb25zdCBzaGlmdGVkID0gY3VycmVudERheS5kYXlTYW1lKG11dGFibGVbMF1bMF0pID8gbXV0YWJsZS5zaGlmdCgpIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHNoaWZ0ZWQgPyBzaGlmdGVkWzFdIDogTmFOO1xuXG4gICAgICAgICAgICByZXR1cm4gW2N1cnJlbnREYXksIGN1cnJlbnRWYWx1ZV0gYXMgW1R1aURheSwgbnVtYmVyXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICB5ID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgaGVpZ2h0ID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgc21vb3RoaW5nRmFjdG9yID0gdGhpcy5vcHRpb25zLnNtb290aGluZ0ZhY3RvcjtcblxuICAgIEBJbnB1dCgpXG4gICAgaGludENvbnRlbnQ6IFBvbHltb3JwaGV1c0NvbnRlbnQ8VHVpQ29udGV4dFdpdGhJbXBsaWNpdDxbVHVpRGF5LCBudW1iZXJdPj47XG5cbiAgICBASW5wdXQoKVxuICAgIHhTdHJpbmdpZnk6IFR1aVN0cmluZ0hhbmRsZXI8VHVpRGF5PiB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICB5U3RyaW5naWZ5OiBUdWlTdHJpbmdIYW5kbGVyPG51bWJlcj4gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgZG90cyA9IHRoaXMub3B0aW9ucy5kb3RzO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS56SW5kZXgnKVxuICAgIHpJbmRleCA9IDA7XG5cbiAgICB2YWx1ZTogUmVhZG9ubHlBcnJheTxbVHVpRGF5LCBudW1iZXJdPiA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoVHVpTGluZURheXNDaGFydEhpbnREaXJlY3RpdmUpXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaGludERpcmVjdGl2ZTogVHVpTGluZURheXNDaGFydEhpbnREaXJlY3RpdmUgfCBudWxsLFxuICAgICAgICBAU2VsZigpIEBJbmplY3QoVHVpRGVzdHJveVNlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQ6IFR1aURlc3Ryb3lTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KE5nWm9uZSkgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoVHVpSG92ZXJlZFNlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgaG92ZXJlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4sXG4gICAgICAgIEBJbmplY3QoVFVJX0xJTkVfQ0hBUlRfT1BUSU9OUykgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBUdWlMaW5lQ2hhcnRPcHRpb25zLFxuICAgICkge31cblxuICAgIGdldCBtb250aHMoKTogUmVhZG9ubHlBcnJheTxyZWFkb25seSBUdWlQb2ludFtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLmxlbmd0aCA/IHRoaXMuYnJlYWtNb250aHModGhpcy52YWx1ZSkgOiBFTVBUWV9BUlJBWTtcbiAgICB9XG5cbiAgICBnZXQgZmlyc3RXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aHMubGVuZ3RoICogdGhpcy52YWx1ZVswXVswXS5kYXlzQ291bnQ7XG4gICAgfVxuXG4gICAgZ2V0IGhpbnQoKTpcbiAgICAgICAgfCBQb2x5bW9ycGhldXNDb250ZW50PFR1aUNvbnRleHRXaXRoSW1wbGljaXQ8W1R1aURheSwgbnVtYmVyXT4+XG4gICAgICAgIHwgUG9seW1vcnBoZXVzQ29udGVudDxUdWlDb250ZXh0V2l0aEltcGxpY2l0PHJlYWRvbmx5IFR1aVBvaW50W10+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpbnREaXJlY3RpdmU/LmhpbnQgPz8gdGhpcy5oaW50Q29udGVudDtcbiAgICB9XG5cbiAgICBAdHVpUHVyZVxuICAgIGdldEhpbnRDb250ZXh0KHg6IG51bWJlciwgdmFsdWU6IFJlYWRvbmx5QXJyYXk8W1R1aURheSwgbnVtYmVyXT4pOiBbVHVpRGF5LCBudW1iZXJdIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlW3ggLSB2YWx1ZVswXVswXS5kYXkgKyAxXTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3R1aUxpbmVDaGFydERyaXZlcnModGhpcy5jaGFydHMpLCB0aGlzLmhvdmVyZWQkXSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihyZXN1bHQgPT4gIXJlc3VsdC5zb21lKEJvb2xlYW4pKSxcbiAgICAgICAgICAgICAgICB0dWlab25lZnJlZSh0aGlzLnpvbmUpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25Ib3ZlcmVkKE5hTik7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZWFkb25seSBkYXlzU3RyaW5naWZ5OiBUdWlTdHJpbmdIYW5kbGVyPG51bWJlcj4gPSBpbmRleCA9PlxuICAgICAgICB0aGlzLnhTdHJpbmdpZnkgPyB0aGlzLnhTdHJpbmdpZnkodGhpcy5nZXREYXkoaW5kZXgpKSA6ICcnO1xuXG4gICAgZ2V0WChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0RGF5KGluZGV4KTtcbiAgICAgICAgY29uc3QgbW9udGhzID0gVHVpTW9udGgubGVuZ3RoQmV0d2Vlbih0aGlzLnZhbHVlWzBdWzBdLCBjdXJyZW50KTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gbW9udGhzICogY3VycmVudC5kYXlzQ291bnQ7XG5cbiAgICAgICAgcmV0dXJuIGluZGV4IC0gb2Zmc2V0O1xuICAgIH1cblxuICAgIG9uSG92ZXJlZChkYXk6IFR1aURheSB8IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodHVpSXNOdW1iZXIoZGF5KSkge1xuICAgICAgICAgICAgdGhpcy5jaGFydHMuZm9yRWFjaChjaGFydCA9PiBjaGFydC5vbkhvdmVyZWQoTmFOKSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gVHVpTW9udGgubGVuZ3RoQmV0d2Vlbih0aGlzLnZhbHVlWzBdWzBdLCBkYXkpO1xuICAgICAgICBjb25zdCB4ID0gVHVpRGF5Lmxlbmd0aEJldHdlZW4odGhpcy52YWx1ZVswXVswXSwgZGF5KSArIHRoaXMudmFsdWVbMF1bMF0uZGF5IC0gMTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY2hhcnRzLmdldChpbmRleCk7XG5cbiAgICAgICAgdGhpcy5jaGFydHMuZm9yRWFjaChjaGFydCA9PiB7XG4gICAgICAgICAgICBpZiAoY2hhcnQgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Lm9uSG92ZXJlZChjdXJyZW50LnZhbHVlLmZpbmRJbmRleChwb2ludCA9PiBwb2ludFswXSA9PT0geCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGFydC5vbkhvdmVyZWQoTmFOKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmFpc2UoaW5kZXg6IG51bWJlciwge3ZhbHVlfTogVHVpTGluZUNoYXJ0Q29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHggPSB2YWx1ZVtpbmRleF1bMF07XG4gICAgICAgIGNvbnN0IG1vbnRoID0gdGhpcy5nZXREYXkoeCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGludERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5oaW50RGlyZWN0aXZlLnJhaXNlKG1vbnRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Ib3ZlcmVkKG1vbnRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFdpZHRoKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXkoaW5kZXgpLmRheXNDb3VudCAqIHRoaXMubW9udGhzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0KGluZGV4OiBudW1iZXIsIHt2YWx1ZX06IFR1aUxpbmVDaGFydENvbXBvbmVudCk6IHVua25vd24ge1xuICAgICAgICBjb25zdCB4ID0gdmFsdWVbaW5kZXhdWzBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmhpbnREaXJlY3RpdmVcbiAgICAgICAgICAgID8gdGhpcy5oaW50RGlyZWN0aXZlLmdldENvbnRleHQodGhpcy5nZXREYXkoeCkpXG4gICAgICAgICAgICA6IHRoaXMuZ2V0SGludENvbnRleHQoeCwgdGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGJyZWFrTW9udGhzKFxuICAgICAgICB2YWx1ZTogUmVhZG9ubHlBcnJheTxbVHVpRGF5LCBudW1iZXJdPixcbiAgICApOiBSZWFkb25seUFycmF5PHJlYWRvbmx5IFR1aVBvaW50W10+IHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdmFsdWVbMF1bMF0uZGF5IC0gMTtcblxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIHtsZW5ndGg6IFR1aU1vbnRoLmxlbmd0aEJldHdlZW4odmFsdWVbMF1bMF0sIHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdWzBdKSArIDF9LFxuICAgICAgICAgICAgKF8sIGkpID0+IGkgKyB2YWx1ZVswXVswXS5tb250aCArIHZhbHVlWzBdWzBdLnllYXIgKiAxMixcbiAgICAgICAgKVxuICAgICAgICAgICAgLm1hcChhYnNvbHV0ZU1vbnRoID0+XG4gICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLm1hcDxUdWlQb2ludCB8IG51bGw+KChbe21vbnRoLCB5ZWFyfSwgeV0sIGluZGV4KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggKyB5ZWFyICogMTIgPT09IGFic29sdXRlTW9udGggPyBbaW5kZXggKyBvZmZzZXQsIHldIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHR1aUlzUHJlc2VudCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubWFwKChtb250aCwgaW5kZXgsIGFycmF5KSA9PlxuICAgICAgICAgICAgICAgIGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgID8gbW9udGhcbiAgICAgICAgICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm1vbnRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleCArIDFdLmZpbmQoZGF5ID0+ICFOdW1iZXIuaXNOYU4oZGF5WzFdKSkgfHwgRFVNTVksXG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXkoaW5kZXg6IG51bWJlcik6IFR1aURheSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlW2luZGV4IC0gdGhpcy52YWx1ZVswXVswXS5kYXkgKyAxXVswXTtcbiAgICB9XG59XG4iLCI8dHVpLWxpbmUtY2hhcnRcbiAgICAqbmdGb3I9XCJsZXQgbW9udGggb2YgbW9udGhzOyBsZXQgZmlyc3QgPSBmaXJzdFwiXG4gICAgY2xhc3M9XCJ0LWNoYXJ0XCJcbiAgICBbZG90c109XCJkb3RzXCJcbiAgICBbaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgW3Ntb290aGluZ0ZhY3Rvcl09XCJzbW9vdGhpbmdGYWN0b3JcIlxuICAgIFtzdHlsZS56SW5kZXhdPVwiekluZGV4XCJcbiAgICBbdHVpSGludENvbnRlbnRdPVwiaGludENvbnRlbnQgPyBoaW50IDogJydcIlxuICAgIFt2YWx1ZV09XCJtb250aFwiXG4gICAgW3dpZHRoXT1cImZpcnN0ID8gZmlyc3RXaWR0aCA6IGdldFdpZHRoKG1vbnRoWzBdWzBdKVwiXG4gICAgW3hdPVwiZmlyc3QgPyAwIDogZ2V0WChtb250aFswXVswXSlcIlxuICAgIFt4U3RyaW5naWZ5XT1cInhTdHJpbmdpZnkgPyBkYXlzU3RyaW5naWZ5IDogbnVsbFwiXG4gICAgW3ldPVwieVwiXG4gICAgW3lTdHJpbmdpZnldPVwieVN0cmluZ2lmeVwiXG4+PC90dWktbGluZS1jaGFydD5cbjxuZy10ZW1wbGF0ZVxuICAgICNoaW50XG4gICAgbGV0LXBvaW50XG4+XG4gICAgPG5nLWNvbnRhaW5lciAqcG9seW1vcnBoZXVzT3V0bGV0PVwiaGludENvbnRlbnQgYXMgdGV4dDsgY29udGV4dDogeyRpbXBsaWNpdDogZ2V0SGludENvbnRleHQocG9pbnRbMF0sIHZhbHVlKX1cIj5cbiAgICAgICAge3sgdGV4dCB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|