{"version":3,"sources":["webpack:///./src/components/Charts/Chart.vue","webpack:///./src/components/Charts/Chart.vue?f3b1","webpack:///./src/components/Charts/Chart.vue?2025","webpack:///./src/components/Charts/Chart.vue?0ea0","webpack:///./src/components/Charts/Chart.vue?7797","webpack:///./src/components/common/ValueTrend.vue?4390","webpack:///./src/components/bend/BendProductivityFigures.vue","webpack:///./src/components/bend/timeFilterToUnitKeyMap.ts","webpack:///./src/components/bend/BendProductivityFigures.vue?6ccd","webpack:///./src/components/bend/BendProductivityFigures.vue?a442","webpack:///./src/components/bend/BendProductivityFigures.vue?eeb2","webpack:///./src/components/common/ValueTrend.vue","webpack:///./src/components/common/ValueTrend.vue?12b8","webpack:///./src/components/common/ValueTrend.vue?f844","webpack:///./src/components/common/ValueTrend.vue?8c17","webpack:///./src/components/bend/BendProductivityFigures.vue?50a2","webpack:///./src/components/Charts/maxCuttingTime.ts"],"names":["render","_vm","this","_c","_self","_setupProxy","staticClass","showChart","_g","ref","attrs","options","echartsUpdateOptions","on","onClickEvent","onExpandOnDblClick","$event","mouseDown","mouseUp","onLegendSelectChanged","echartsListeners","loading","_e","_v","_s","$t","staticRenderFns","Chart","_Vue","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","concat","_defineProperty","_inherits","_createClass","key","get","listenersWithPrefix","value","_mounted","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","selfManagedFilters","addAutoRemovedEventListener","onResize","updateOptions","stop","mounted","apply","newValue","oldValue","_this$chart","widget","chart","clear","_this$$el","_this$$el2","_this$generator","_this$chart2","isEmpty","data","generatorParams","WidgetFactory","createOptions","widgetDefinition","_objectSpread","clientWidth","$el","clientHeight","targets","getTargets","aggregates","paramValues","customerNo","timeFilter","timeFilterEnumValue","timeAxisSpan","axisSpan","WidgetEnum","LaserCuttingTime","TubeCuttingTime","maxValue","calculateMaxCuttingTime","dataClone","isArray","textStyle","fontFamily","generator","getOption","numberToArray","notMerge","currentLocale","target","getDefaultTarget","params","FactoryOverview","route","name","startsWith","Routes","Cut","Bend","Tubes","$router","push","selectedDeviceStringId","_this$generator2","TechnologyDrawerInformationTimeline","removedSecondsSelected","selected","removed_seconds","pdSelected","pd","powerAmplitudeSelected","power_amplitude","LaserOutputAndScrapTimeline","TubeOutputScrapHist","_this$generator3","legendParams","canExpandOnDblClick","getWidgetTargetMetric","widgetString","Object","keys","find","replace","TargetsMetric","None","_this$chart3","resize","SalesTimeline","getSalesTimelineTargets","nTargets","userTargetsService","store","getMetricNumberOfTargetValues","targetsMetric","defaultTarget","userTarget","getUserTarget","target1","target2","undefined","_this$getUserTarget","_this$getUserTarget2","_this$getUserTarget3","monthlyPaid","SalesFunnelMonthlyPaid","r3","SalesFunnelR3","r4","SalesFunnelR4","targetMetric","$emit","deviceIds","devicesService","deviceIdsToIds","deviceId","selectedShifts","shiftsService","getMatchingIds","shifts","isMobileOrTablet","longPressEnd","Date","now","longPressStart","ua","navigator","userAgent","test","includes","document","isNil","Vue","__decorate","Prop","required","type","Boolean","default","Ref","Watch","Component","methods","components","ShiftFilter","ThreeDotsOptions","TimeSpanFilter","NewFeatureBadge","component","_setup","forceRerenderKey","coalescedData","scopedSlots","_u","fn","_ref","figureEntry","row","periodKey","dataRetriever","figureName","previousPeriodColumnHeader","_ref2","formatPreviousValue","getFigureUnits","currentPeriodColumnHeader","_ref3","formatCurrentValue","_ref4","ValueTrend","previousTotalValue","currentTotalValue","isFigureTrendInverse","timeFilterToUnitKeyMap","FilterTimeSpanEnum","Day","Week","Month","Year","_defineComponent","__name","props","setup","__props","useAutoRemovedResizeListener","forceRerender","i18n","useI18n","BendProductivityFiguresName","BendCount","ToolChangesCount","tc","ProducedWeight","WeightHandledByOperator","weightUnit","formatValue","BendProductivityFiguresChartGenerator","getPeriodColumnHeader","periodPrefix","t","toString","computed","_props$data","__sfc","hasTrendInfo","isTrendGoingUp","class","inverse","formattedDifferencePercentage","isTrendStatic","noTrendMessage","__default__","previousValue","currentValue","differencePercentage","difference","formatPercentage","Math","abs","deviceHours","reduce","hours","calculateDeviceShiftHours","getTimeFilterMultiplier","filter","shift","relatedDevices","shiftLengthMinutes","timeFromHh","timeToHh","timeFromMm","timeToMm","endAdjustment","moment","day","date","dayOfYear"],"mappings":"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","file":"js/chunk-eae05144.ec673fd4.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"chart\"},[(_vm.showChart)?_c('v-chart',_vm._g({ref:\"chart\",attrs:{\"option\":_vm.options,\"update-options\":_vm.echartsUpdateOptions,\"autoresize\":\"\",\"data-testid\":\"echarts-component\"},on:{\"click\":_vm.onClickEvent,\"dblclick\":_vm.onExpandOnDblClick,\"mousedown\":function($event){return _vm.mouseDown($event)},\"mouseup\":function($event){return _vm.mouseUp($event)},\"legendselectchanged\":_vm.onLegendSelectChanged}},_vm.echartsListeners)):(!_vm.loading)?_c('span',{staticClass:\"no-data\"},[_vm._v(\" \"+_vm._s(_vm.$t('no_data'))+\" \")]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport { Component, Prop, Ref, Vue, Watch } from 'vue-property-decorator';\nimport ECharts from 'vue-echarts';\nimport ShiftFilter from '../ShiftFilter.vue';\nimport ThreeDotsOptions from '@/components/Charts/ThreeDotsOptions.vue';\nimport { UserTarget } from '@/models/userTarget';\nimport { userTargetsService } from '@/services/userTargets.service';\nimport { WidgetEnum } from '@/models/enums/WidgetEnum';\nimport TimeSpanFilter from '../TimeSpanFilter.vue';\nimport WidgetDefinition from '@/models/Charts/widgetDefinition';\nimport { Aggregate, numberToArray } from '@/models/metrics/aggregates';\nimport { Routes } from '@/router/routes';\nimport { TargetsMetric } from '@/models/enums/TargetsMetric';\nimport { addAutoRemovedEventListener, isEmpty, isNil } from '@/utils/misc';\nimport { devicesService } from '@/services/devices.service';\nimport { shiftsService } from '@/services/shifts.service';\nimport { calculateMaxCuttingTime } from '@/components/Charts/maxCuttingTime';\nimport NewFeatureBadge from '../NewFeatureBadge.vue';\nimport { ChartGenerator } from '@/models/Charts/abstract/chartGenerator';\nimport { GeneratorParams } from '@/models/Charts/generatorParams';\nimport WidgetFactory from '@/models/Charts/widgetFactory';\nimport { listenersWithPrefix } from '@/utils/components';\nimport { currentLocale } from '@/utils/i18n';\n\n@Component({\n methods: { isEmpty },\n components: {\n ShiftFilter,\n ThreeDotsOptions,\n TimeSpanFilter,\n NewFeatureBadge,\n },\n})\nexport default class Chart extends Vue {\n @Prop({ required: true })\n private widgetDefinition!: WidgetDefinition;\n\n @Prop({ required: true })\n private generator!: ChartGenerator;\n\n @Prop({ required: true })\n private data!: any;\n\n @Prop({ required: true })\n private paramValues!: Record;\n\n @Prop({ required: true, type: Boolean })\n private loading!: boolean;\n\n @Prop({ default: false })\n private selfManagedFilters!: boolean;\n\n @Prop()\n private customerNo?: string;\n\n private generatorParams: GeneratorParams = {};\n private options: any = null;\n\n private longPressStart = 0;\n private longPressEnd = 0;\n\n @Ref('chart')\n private chart?: typeof ECharts;\n\n private get echartsListeners() {\n return listenersWithPrefix('echarts', this);\n }\n\n private async mounted() {\n if (this.selfManagedFilters) {\n // When switching back and forth from and to fullscreen mode (F11), widgets\n // might overflow the card vertically. We don't know the cause but using\n // this resize listener fixes it.\n addAutoRemovedEventListener(this, 'resize', this.onResize);\n }\n\n this.updateOptions();\n }\n\n @Watch('widgetDefinition')\n private watchWidgetDefinition(newValue: WidgetDefinition, oldValue: WidgetDefinition) {\n if (newValue.widget !== oldValue.widget) {\n this.chart?.clear();\n }\n this.updateOptions();\n }\n\n private updateOptions() {\n if (isEmpty(this.data)) {\n return;\n }\n\n const generatorParams = WidgetFactory.createOptions(this.widgetDefinition.widget);\n\n this.generatorParams = {\n ...generatorParams,\n clientWidth: this.$el?.clientWidth,\n clientHeight: this.$el?.clientHeight,\n targets: this.getTargets(),\n aggregates: this.aggregates,\n paramValues: this.paramValues,\n customerNo: this.customerNo,\n timeFilter: this.widgetDefinition.timeFilterEnumValue,\n timeAxisSpan: this.widgetDefinition.axisSpan,\n };\n\n if (\n this.widgetDefinition.widget === WidgetEnum.LaserCuttingTime ||\n this.widgetDefinition.widget === WidgetEnum.TubeCuttingTime\n ) {\n this.generatorParams.maxValue = this.calculateMaxCuttingTime();\n }\n\n // Some constructors inadvertently mutate the original data (using .sort() in arrays, for example).\n // If data is mutated from within the generator, this function is recursively called by the watcher.\n // If a clone of the data is passed, we don't need to worry about mutating data, and the issue is prevented.\n const dataClone = Array.isArray(this.data) ? this.data.concat() : { ...this.data };\n this.options = {\n textStyle: { fontFamily: 'Inter' },\n ...this.generator?.updateOptions(dataClone, this.generatorParams, this.chart?.getOption()),\n };\n }\n\n @Watch('locale')\n @Watch('data')\n private watchChanges() {\n this.updateOptions();\n }\n\n private get aggregates(): Aggregate[] {\n return numberToArray(this.widgetDefinition.aggregates);\n }\n\n private get echartsUpdateOptions(): any {\n return { notMerge: true };\n }\n\n private get locale(): string {\n return currentLocale();\n }\n\n // FIXME: Duplicated with WidgetCard\n private getTargets() {\n return this.selfManagedFilters ? this.widgetDefinition.target : this.getDefaultTarget();\n }\n\n // FIXME: Code duplication with WorkCenterConsoleOverview.goToDevice\n private onClickEvent(params: any) {\n if (this.widgetDefinition.widget === WidgetEnum.FactoryOverview) {\n let route;\n if (params.name.startsWith('L-')) {\n route = Routes.Cut;\n } else if (params.name.startsWith('B-')) {\n route = Routes.Bend;\n } else if (params.name.startsWith('T-')) {\n route = Routes.Tubes;\n } else {\n return;\n }\n\n this.$router.push({\n name: route,\n // FIXME: Use URL query parameters instead\n params: {\n selectedDeviceStringId: params.name,\n },\n });\n }\n }\n\n private onLegendSelectChanged(params: any) {\n if (this.widgetDefinition.widget === WidgetEnum.TechnologyDrawerInformationTimeline) {\n this.options = {\n textStyle: { fontFamily: 'Inter' },\n ...this.generator?.updateOptions(this.data, {\n ...this.generatorParams,\n removedSecondsSelected: params.selected.removed_seconds,\n pdSelected: params.selected.pd,\n powerAmplitudeSelected: params.selected.power_amplitude,\n }),\n };\n } else if (\n this.widgetDefinition.widget === WidgetEnum.LaserOutputAndScrapTimeline ||\n this.widgetDefinition.widget === WidgetEnum.TubeOutputScrapHist\n ) {\n this.options = {\n textStyle: { fontFamily: 'Inter' },\n ...this.generator?.updateOptions(this.data, {\n ...this.generatorParams,\n legendParams: params,\n }),\n };\n }\n }\n\n private canExpandOnDblClick(): boolean {\n return this.widgetDefinition.canExpandOnDblClick();\n }\n\n private get targetsMetric(): TargetsMetric | null {\n return !!this.widgetDefinition\n ? this.getWidgetTargetMetric(this.widgetDefinition.widget)\n : null;\n }\n\n private getWidgetTargetMetric(widget: WidgetEnum): TargetsMetric {\n let widgetString = Object.keys(WidgetEnum).find(\n (key: string) => WidgetEnum[key as keyof typeof WidgetEnum] === widget,\n )!;\n\n // HACK (temporary): We don't want a target for LaserAvailability pie chart,\n // but it will be added in the future.\n if (widgetString !== 'LaserProductivityHist') {\n widgetString = widgetString.replace('Hist', '');\n }\n\n return widgetString in TargetsMetric\n ? TargetsMetric[widgetString as keyof typeof TargetsMetric]\n : TargetsMetric.None;\n }\n\n private onResize() {\n this.chart?.resize();\n }\n\n // FIXME: Duplicated with WidgetCard\n private getDefaultTarget() {\n if (this.widgetDefinition.widget === WidgetEnum.SalesTimeline) {\n return this.getSalesTimelineTargets();\n } else {\n const nTargets = userTargetsService.store.getMetricNumberOfTargetValues(this.targetsMetric);\n if (nTargets === 0) {\n return;\n }\n const defaultTarget: number[] = [];\n const userTarget = this.getUserTarget(this.targetsMetric);\n\n if (userTarget) {\n defaultTarget.push(userTarget.target1);\n if (nTargets === 2 && !!userTarget.target2) {\n defaultTarget.push(userTarget.target2);\n }\n }\n\n return userTarget ? defaultTarget : undefined;\n }\n }\n\n // FIXME: Duplicated with WidgetCard\n private getSalesTimelineTargets(): number[] | undefined {\n const monthlyPaid = this.getUserTarget(TargetsMetric.SalesFunnelMonthlyPaid)?.target1;\n const r3 = this.getUserTarget(TargetsMetric.SalesFunnelR3)?.target1;\n const r4 = this.getUserTarget(TargetsMetric.SalesFunnelR4)?.target1;\n\n if (monthlyPaid && r3 && r4) {\n return [monthlyPaid, r3, r4];\n } else {\n return undefined;\n }\n }\n\n private getUserTarget(targetMetric: TargetsMetric | null): UserTarget | undefined {\n return userTargetsService.store.get(targetMetric);\n }\n\n private onExpandOnDblClick(params: any) {\n if (this.canExpandOnDblClick()) {\n this.$emit('double-click-expand', params);\n }\n }\n\n private calculateMaxCuttingTime() {\n const deviceIds = devicesService.store.deviceIdsToIds(\n this.widgetDefinition.deviceId as string[],\n );\n const selectedShifts = shiftsService.store.getMatchingIds(this.widgetDefinition.shifts);\n\n return calculateMaxCuttingTime(deviceIds, selectedShifts, this.widgetDefinition.timeFilter);\n }\n\n private mouseUp(params: any) {\n if (this.isMobileOrTablet() && this.canExpandOnDblClick()) {\n this.longPressEnd = Date.now();\n if (this.longPressEnd - this.longPressStart > 500) {\n this.onExpandOnDblClick(params);\n }\n }\n }\n\n private mouseDown(params: any) {\n if (this.isMobileOrTablet() && this.canExpandOnDblClick()) {\n this.longPressStart = Date.now();\n }\n }\n\n private isMobileOrTablet() {\n const ua = navigator.userAgent;\n return (\n /(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua) ||\n /Mobile|Android|iP(hone|od)|IEMobile|BlackBerry|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(\n ua,\n ) ||\n // iPad on iOS 13 and up detection\n (navigator.userAgent.includes('Mac') && 'ontouchend' in document)\n );\n }\n\n private get showChart(): boolean {\n return !isEmpty(this.data) && !isNil(this.options);\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Chart.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Chart.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./Chart.vue?vue&type=template&id=0ccc0836&scoped=true\"\nimport script from \"./Chart.vue?vue&type=script&lang=ts\"\nexport * from \"./Chart.vue?vue&type=script&lang=ts\"\nimport style0 from \"./Chart.vue?vue&type=style&index=0&id=0ccc0836&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0ccc0836\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Chart.vue?vue&type=style&index=0&id=0ccc0836&prod&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ValueTrend.vue?vue&type=style&index=0&id=226ab568&prod&lang=scss&scoped=true\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('section',{key:_setup.forceRerenderKey,staticClass:\"bend-productivity-figures\"},[(_setup.isEmpty(_vm.data) && !_vm.loading)?_c('div',{staticClass:\"no-data\"},[_vm._v(_vm._s(_vm.$t('no_data')))]):_c('b-table',{attrs:{\"data\":_setup.coalescedData}},[_c('b-table-column',{attrs:{\"cell-class\":\"chart-cell\"},scopedSlots:_vm._u([{key:\"default\",fn:function({ row: figureEntry }){return [_c('div',{staticClass:\"chart-title\"},[_vm._v(\" \"+_vm._s(_vm.$t(`bend_productivity_figures.${figureEntry.name}`))+\" \"),_c('span',{staticClass:\"period-notice\"},[_vm._v(\" (\"+_vm._s(_vm.$t(`bend_productivity_figures.last_period.${_setup.periodKey}`))+\") \")])]),_c(_setup.Chart,{attrs:{\"widgetDefinition\":_vm.widgetDefinition,\"generator\":_vm.dataRetriever,\"data\":_vm.data,\"paramValues\":{ figureName: figureEntry.name },\"loading\":_vm.loading}})]}}])}),_c('b-table-column',{attrs:{\"label\":_setup.previousPeriodColumnHeader,\"cell-class\":\"figure-cell\"},scopedSlots:_vm._u([{key:\"default\",fn:function({ row: figureEntry }){return [_vm._v(\" \"+_vm._s(_setup.formatPreviousValue(figureEntry))+\" \"+_vm._s(_setup.getFigureUnits(figureEntry))+\" \")]}}])}),_c('b-table-column',{attrs:{\"label\":_setup.currentPeriodColumnHeader,\"cell-class\":\"figure-cell\"},scopedSlots:_vm._u([{key:\"default\",fn:function({ row: figureEntry }){return [_vm._v(\" \"+_vm._s(_setup.formatCurrentValue(figureEntry))+\" \"+_vm._s(_setup.getFigureUnits(figureEntry))+\" \")]}}])}),_c('b-table-column',{attrs:{\"cell-class\":\"figure-cell\"},scopedSlots:_vm._u([{key:\"default\",fn:function({ row: figureEntry }){return [_c(_setup.ValueTrend,{attrs:{\"previousValue\":figureEntry.previousTotalValue,\"currentValue\":figureEntry.currentTotalValue,\"inverse\":_setup.isFigureTrendInverse(figureEntry.name)}})]}}])})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// Copyright (C) 2021 Bystronic Laser AG\n\nimport { FilterTimeSpanEnum } from '@/models/enums/FilterTimeSpanEnum';\n\nexport const timeFilterToUnitKeyMap: Record = {\n [FilterTimeSpanEnum.Day]: 'hours',\n [FilterTimeSpanEnum.Week]: 'days',\n [FilterTimeSpanEnum.Month]: 'days',\n [FilterTimeSpanEnum.Year]: 'months',\n};\n","import { defineComponent as _defineComponent } from 'vue'\nimport WidgetDefinition from '@/models/Charts/widgetDefinition';\nimport Chart from '../Charts/Chart.vue';\nimport {\n BendProductivityFiguresData,\n BendProductivityFiguresName,\n} from '@/models/Charts/chartsData';\nimport { FilterTimeSpanEnum } from '@/models/enums/FilterTimeSpanEnum';\nimport ValueTrend from '@/components/common/ValueTrend.vue';\nimport { isEmpty } from '@/utils/misc';\nimport BendProductivityFiguresChartGenerator from '@/models/Charts/bendProductivityFiguresChartGenerator';\nimport { weightUnit } from '@/utils/measurement';\nimport { timeFilterToUnitKeyMap } from './timeFilterToUnitKeyMap';\nimport { useAutoRemovedResizeListener } from '@/composables/misc';\nimport { computed, ref } from 'vue';\nimport { useI18n } from '@/composables/i18n';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'BendProductivityFigures',\n props: {\n data: null,\n widgetDefinition: null,\n loading: { type: Boolean },\n dataRetriever: null\n },\n setup(__props: any) {\n\nconst props = __props as {\n data: BendProductivityFiguresData[] | null;\n widgetDefinition: WidgetDefinition;\n loading: boolean;\n /**\n * Chart generator to generate the heatmap charts.\n *\n * Not used to fetch the data. It comes from `data` prop instead.\n */\n dataRetriever: BendProductivityFiguresChartGenerator;\n};\n\n/**\n * Table with a heatmap chart, current and previous values, and the percentage\n * difference since the previous value.\n */\n\n\n\nconst forceRerenderKey = ref(1);\n\n// HACK: Forces the re-rendering of the component so the table doesn't\n// overflow the widget card when the screen orientation changes on a tablet.\nuseAutoRemovedResizeListener(forceRerender);\n\nconst i18n = useI18n();\n\nfunction getFigureUnits(figureEntry: BendProductivityFiguresData): string {\n switch (figureEntry.name) {\n case BendProductivityFiguresName.BendCount:\n case BendProductivityFiguresName.ToolChangesCount:\n return `/${i18n.tc(timeFilterToUnitKeyMap[props.widgetDefinition.timeFilterEnumValue!], 1)}`;\n case BendProductivityFiguresName.ProducedWeight:\n case BendProductivityFiguresName.WeightHandledByOperator:\n default:\n return (\n weightUnit() +\n `/${i18n.tc(timeFilterToUnitKeyMap[props.widgetDefinition.timeFilterEnumValue!], 1)}`\n );\n }\n}\n\nfunction formatValue(value: number, figureName: BendProductivityFiguresName): string {\n return BendProductivityFiguresChartGenerator.formatValue(value, figureName);\n}\n\nfunction formatCurrentValue(figureEntry: BendProductivityFiguresData): string {\n return formatValue(figureEntry.currentTotalValue, figureEntry.name);\n}\n\nfunction formatPreviousValue(figureEntry: BendProductivityFiguresData): string {\n return formatValue(figureEntry.previousTotalValue, figureEntry.name);\n}\n\nfunction getPeriodColumnHeader(periodPrefix: 'current' | 'previous'): string {\n return i18n\n .t(`bend_productivity_figures.${periodPrefix}_time_period.${periodKey.value}`)\n .toString();\n}\n\nfunction isFigureTrendInverse(figureName: string): boolean {\n return figureName === 'tool-changes-count';\n}\n\nfunction forceRerender() {\n forceRerenderKey.value += 1;\n}\n\nconst currentPeriodColumnHeader = computed(() => getPeriodColumnHeader('current'));\n\nconst previousPeriodColumnHeader = computed(() => getPeriodColumnHeader('previous'));\n\nconst periodKey = computed(\n () => FilterTimeSpanEnum[props.widgetDefinition.timeFilter as FilterTimeSpanEnum],\n);\n\nconst coalescedData = computed(() => props.data ?? []);\n\nreturn { __sfc: true,props, forceRerenderKey, i18n, getFigureUnits, formatValue, formatCurrentValue, formatPreviousValue, getPeriodColumnHeader, isFigureTrendInverse, forceRerender, currentPeriodColumnHeader, previousPeriodColumnHeader, periodKey, coalescedData, Chart, ValueTrend, isEmpty }\n}\n\n})","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BendProductivityFigures.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BendProductivityFigures.vue?vue&type=script&setup=true&lang=ts\"","import { render, staticRenderFns } from \"./BendProductivityFigures.vue?vue&type=template&id=661513bf&scoped=true\"\nimport script from \"./BendProductivityFigures.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./BendProductivityFigures.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./BendProductivityFigures.vue?vue&type=style&index=0&id=661513bf&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"661513bf\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"value-trend\"},[(!_setup.hasTrendInfo)?_c('div',{staticClass:\"no-trend-info\"},[_vm._v(\" \"+_vm._s(_vm.noTrendMessage)+\" \")]):[(_setup.isTrendGoingUp)?_c('div',{staticClass:\"trend-percentage\",class:{ 'trend-positive': !_setup.props.inverse, 'trend-negative': _setup.props.inverse },attrs:{\"data-testid\":\"trend-up\"}},[_c('b-icon',{attrs:{\"icon\":\"chevron-up\",\"aria-label\":\"+\"}}),_vm._v(\" \"+_vm._s(_setup.formattedDifferencePercentage)+\" \")],1):(_setup.isTrendStatic)?_c('div',{staticClass:\"trend-percentage trend-static\",attrs:{\"data-testid\":\"trend-static\"}},[_c('b-icon',{attrs:{\"icon\":\"equal\",\"aria-label\":\"0\"}})],1):_c('div',{staticClass:\"trend-percentage\",class:{ 'trend-positive': _setup.props.inverse, 'trend-negative': !_setup.props.inverse },attrs:{\"data-testid\":\"trend-down\"}},[_c('b-icon',{attrs:{\"icon\":\"chevron-down\",\"aria-label\":\"-\"}}),_vm._v(\" \"+_vm._s(_setup.formattedDifferencePercentage)+\" \")],1)]],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { defineComponent as _defineComponent } from 'vue'\nimport { formatPercentage } from '@/utils/number';\nimport { computed } from 'vue';\nimport { TranslateResult } from 'vue-i18n';\n\n\n/**\n * Show the trend percentage between a previous and current value.\n *\n * Uses arrows and colors to indicate if it's going up, down or remains static.\n */\nconst __default__ = {};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'ValueTrend',\n props: {\n previousValue: null,\n currentValue: null,\n noTrendMessage: { default: '-' },\n inverse: { type: Boolean, default: false }\n },\n setup(__props: any) {\n\nconst props = __props as { previousValue: number, currentValue: number, noTrendMessage: string | TranslateResult, inverse: boolean };\n\n\n\nconst differencePercentage = computed(() => {\n const difference = props.previousValue - props.currentValue;\n return (difference * 100) / props.previousValue;\n});\n\nconst formattedDifferencePercentage = computed(() =>\n formatPercentage(Math.abs(differencePercentage.value), 0),\n);\n\nconst hasTrendInfo = computed(() => props.previousValue !== 0);\n\nconst isTrendGoingUp = computed(() => props.currentValue > props.previousValue);\n\nconst isTrendStatic = computed(() => props.currentValue === props.previousValue);\n\nreturn { __sfc: true,props, differencePercentage, formattedDifferencePercentage, hasTrendInfo, isTrendGoingUp, isTrendStatic }\n}\n\n})","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ValueTrend.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ValueTrend.vue?vue&type=script&setup=true&lang=ts\"","import { render, staticRenderFns } from \"./ValueTrend.vue?vue&type=template&id=226ab568&scoped=true\"\nimport script from \"./ValueTrend.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ValueTrend.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./ValueTrend.vue?vue&type=style&index=0&id=226ab568&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"226ab568\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BendProductivityFigures.vue?vue&type=style&index=0&id=661513bf&prod&lang=scss&scoped=true\"","// Copyright (C) 2021 Bystronic Laser AG\n\nimport { FilterTimeSpanEnum } from '@/models/enums/FilterTimeSpanEnum';\nimport moment from 'moment/moment';\nimport { Shift } from '@/models/shift';\n\nexport function calculateMaxCuttingTime(\n deviceIds: number[],\n shifts: Shift[],\n timeFilter: FilterTimeSpanEnum | [string, string],\n) {\n const deviceHours = deviceIds.reduce(\n (hours, deviceId) => hours + calculateDeviceShiftHours(deviceId, shifts),\n 0,\n );\n\n return deviceHours * getTimeFilterMultiplier(timeFilter);\n}\n\nfunction calculateDeviceShiftHours(deviceId: number, shifts: Shift[]): number {\n if (shifts.length === 0) {\n // In case no shifts were selected\n return 24;\n }\n return shifts\n .filter((shift) => shift.relatedDevices.includes(deviceId))\n .reduce((hours, shift) => {\n const shiftLengthMinutes =\n shift.timeFromHh <= shift.timeToHh && shift.timeFromMm <= shift.timeToMm\n ? 60 * shift.timeToHh + shift.timeToMm - (60 * shift.timeFromHh + shift.timeFromMm)\n : 60 * (24 + shift.timeToHh) +\n shift.timeToMm -\n (60 * shift.timeFromHh + shift.timeFromMm);\n\n // Add adjustment to make it a full hour when the user enters 23:59 as end time\n const endAdjustment = shift.timeToMm === 59 ? 1 : 0;\n return hours + (shiftLengthMinutes + endAdjustment) / 60;\n }, 0);\n}\n\nfunction getTimeFilterMultiplier(timeFilter: FilterTimeSpanEnum | [string, string]): number {\n switch (timeFilter) {\n case FilterTimeSpanEnum.Day:\n return 1;\n case FilterTimeSpanEnum.Week:\n return moment().day(); // day of week\n case FilterTimeSpanEnum.Month:\n return moment().date(); // day of month\n case FilterTimeSpanEnum.Year:\n return moment().dayOfYear();\n default:\n return 0;\n }\n}\n"],"sourceRoot":""}