{"version":3,"sources":["webpack:///./src/renderer/modules/tournament/components/TournamentDetailsBracket/TournamentDetailsBracket.vue?cd78","webpack:///./src/renderer/modules/tournament/components/StageBracket/index.ts","webpack:///./src/renderer/modules/tournament/components/TournamentDetailsBracket/TournamentDetailsBracket.vue","webpack:///./src/renderer/modules/tournament/components/TournamentDetailsBracket/TournamentDetailsBracket.vue?efc8","webpack:///./src/renderer/modules/tournament/components/TournamentDetailsBracket/TournamentDetailsBracket.vue?3e8d","webpack:///./src/renderer/modules/tournament/components/TournamentDetailsBracket/index.ts","webpack:///./src/renderer/modules/tournament/components/TournamentDetailsBracket/TournamentDetailsBracket.vue?1ee6","webpack:///./src/renderer/modules/tournament/components/TournamentDetailsHeader/TournamentDetailsHeader.vue?dae7","webpack:///./src/renderer/utils/index.ts","webpack:///./src/renderer/assets/country/hk.svg","webpack:///./src/renderer/modules/tournament/components/TournamentDetailsHeader/TournamentDetailsHeader.vue?b3e4","webpack:///./src/renderer/modules/tournament/components/TournamentDetailsHeader/TournamentDetailsHeader.vue","webpack:///./src/renderer/modules/tournament/components/TournamentDetailsHeader/TournamentDetailsHeader.vue?c533","webpack:///./src/renderer/modules/tournament/components/TournamentDetailsHeader/TournamentDetailsHeader.vue?b6a5","webpack:///./src/renderer/modules/tournament/components/TournamentDetailsHeader/index.ts","webpack:///./src/renderer/assets/country/tw.svg"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","$t","_e","isLoading","isFetched","staticClass","hasStages","hasBracket","mobileWidth","isMobileView","model","value","callback","$$v","stageTab","expression","_l","stage","key","_v","_s","number","name","groups","groupTab","index","_f","loadTime","getIsDisplayStageBracket","ref","refInFor","tournamentId","brackets","setting","stageFormat","dense","staticStyle","getStageBracketInvisibleMessage","staticRenderFns","StageBracket","tournamentModule","$store","stages","realtimeConnectionCancellationToken","Date","interval","fetchStages","subscribeRealtimeEvents","realtime","addEventListener","window","setInterval","$forceUpdate","unsubscribeRealtimeEvents","removeEventListener","clearInterval","getTournamentStages","response","data","status","Ok","payload","entries","getStage","stageId","res","push","realtimeConnection","$toast","error","console","on","onStageBracketUpdated","cancel","off","color","x","y","icon","dismissable","state","isBracketVisible","selectedTournament","tournament","$vuetify","breakpoint","smAndDown","undefined","length","some","map","bracket","text","groupNumber","default","components","TournamentDetailsHeader","component","VCol","VIcon","VProgressCircular","VRow","VSelect","VSlideXTransition","VSpacer","VTab","VTabItem","VTabs","VTabsItems","unixTimestampToDateTime","unixTimestamp","utc","local","toDate","upperCase","string","toUpperCase","capitalSpacing","replace","date","isNaN","dateTime","getFullYear","toString","padStart","getMonth","getDate","join","getHours","getMinutes","module","exports","class","right","center","header","required","type","Boolean"],"mappings":"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","file":"js/tournament-details-bracket.6e0d4cbb.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.tournament)?_c('div',[(_vm.displayHeader)?_c('TournamentDetailsHeader',{attrs:{\"header\":_vm.$t('TournamentDetailsBracket.Bracket')}}):_vm._e(),(_vm.isLoading && !_vm.isFetched)?_c('div',{staticClass:\"text-center mx-auto\"},[_c('v-progress-circular',{staticClass:\"loading-box\",attrs:{\"indeterminate\":\"\",\"color\":\"grey\",\"size\":\"150\"}})],1):(!_vm.hasStages || !_vm.hasBracket)?_c('div',{staticClass:\"text-center ma-12\"},[_c('v-icon',{staticStyle:{\"font-size\":\"10rem\"}},[_vm._v(\"mdi-progress-wrench\")]),_c('p',[_vm._v(\" \"+_vm._s(_vm.$t('TournamentDetailsBracket.TheBracketIsNotReady'))+\" \")])],1):_c('div',[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":_vm.mobileWidth}},[_c('v-tabs',{attrs:{\"dark\":\"\",\"background-color\":\"primary darken-1\",\"height\":_vm.isMobileView ? '2rem' : '3.5rem'},model:{value:(_vm.stageTab),callback:function ($$v) {_vm.stageTab=$$v},expression:\"stageTab\"}},[_vm._l((_vm.stages),function(stage){return [_c('v-tab',{key:(\"tournament-stage-\" + (stage.number)),staticClass:\"font-weight-bold\"},[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-ladder\")]),_vm._v(\" #\"+_vm._s(stage.number)+\" - \"+_vm._s(stage.name)+\" \")],1)]})],2)],1),_c('v-col',{attrs:{\"cols\":_vm.mobileWidth}},[_c('div',{staticClass:\"primary darken-1 fill-height d-flex align-center py-1\"},[(!_vm.isMobileView)?_c('v-spacer'):_vm._e(),_c('v-select',{staticClass:\"mx-2 my-1 my-lg-0 group-selector\",attrs:{\"light\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"solo\":\"\",\"items\":_vm.groups},model:{value:(_vm.groupTab),callback:function ($$v) {_vm.groupTab=$$v},expression:\"groupTab\"}})],1)])],1),_c('v-tabs-items',{attrs:{\"touchless\":\"\"},model:{value:(_vm.stageTab),callback:function ($$v) {_vm.stageTab=$$v},expression:\"stageTab\"}},_vm._l((_vm.stages),function(stage,index){return _c('v-tab-item',{key:(\"tournament-stage-\" + (stage.number) + \"-\" + index),staticClass:\"stage-tab-item\"},[(_vm.stageTab == index)?[_c('div',{staticClass:\"bracket-status grey--text subtitle-1 text-uppercase\"},[_c('v-slide-x-transition',{attrs:{\"mode\":\"out-in\"}},[(_vm.isLoading)?_c('span',{staticClass:\"orange--text\"},[_c('v-progress-circular',{staticClass:\"mr-2\",attrs:{\"indeterminate\":\"\",\"color\":\"orange\",\"width\":4,\"size\":24}}),_vm._v(\" \"+_vm._s(_vm.$t('TournamentDetailsBracket.UpdatingBracketData'))+\" \")],1):_c('div',[_c('v-icon',{attrs:{\"left\":\"\"}},[_vm._v(\"mdi-clock-time-eight-outline\")]),_c('span',{staticClass:\"pt-5\"},[_vm._v(_vm._s(_vm.$t('TournamentDetailsBracket.BracketLastUpdated'))+\" \"+_vm._s(_vm._f(\"moment\")(_vm.loadTime,'from')))])],1)])],1),(_vm.getIsDisplayStageBracket(stage))?_c('StageBracket',{ref:\"bracket\",refInFor:true,attrs:{\"tournamentId\":_vm.tournamentId,\"brackets\":stage.brackets,\"format\":stage.setting.stageFormat,\"tab\":_vm.groupTab,\"dense\":_vm.dense}}):_c('div',[_c('div',{staticClass:\"text-center\"},[_c('v-icon',{staticClass:\"mt-15 pt-15\",staticStyle:{\"font-size\":\"5rem\"}},[_vm._v(\"mdi-progress-wrench\")]),_c('p',{staticClass:\"title mb-15 pb-15\"},[_vm._v(\" \"+_vm._s(_vm.getStageBracketInvisibleMessage(stage))+\" \")])],1)])]:_vm._e()],2)}),1)],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import StageBracket from './StageBracket.vue'\r\n\r\nexport { StageBracket }\r\nexport default StageBracket\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop, Watch } from 'vue-property-decorator'\r\nimport { getModule } from 'vuex-module-decorators'\r\nimport tournamentStore from '@/modules/tournament/tournament.store'\r\nimport { TournamentEntity, ResponseStatus } from '@/api/tournament'\r\nimport { StageAPI, StageEntity, StageState } from '@/api/stage'\r\nimport StageBracket from '@/modules/tournament/components/StageBracket'\r\nimport TournamentDetailsHeader from '@/modules/tournament/components/TournamentDetailsHeader'\r\nimport { getRealtimeConnection, realtimeEventTarget } from '@/utils/realtime'\r\nimport { HubConnection } from '@microsoft/signalr'\r\nimport { CancelError, CancellationToken } from '@/utils/cancel'\r\n\r\n@Component({\r\n components: {\r\n StageBracket,\r\n TournamentDetailsHeader\r\n }\r\n})\r\nexport default class TournamentDetailsBracket extends Vue {\r\n @Prop({ default: true }) displayHeader!: boolean\r\n @Prop({ default: false }) dense!: boolean\r\n tournamentModule = getModule(tournamentStore, this.$store)\r\n stageTab: number | null = 0\r\n groupTab: number | null = 0\r\n stages: StageEntity[] = []\r\n realtimeConnection!: HubConnection\r\n realtimeConnectionCancellationToken = new CancellationToken()\r\n isFetched: boolean = false\r\n isLoading: boolean = true\r\n loadTime: Date = new Date()\r\n\r\n interval: number | null = null\r\n\r\n /* Vuex State */\r\n get tournament(): TournamentEntity | null {\r\n return this.tournamentModule.selectedTournament\r\n }\r\n\r\n get tournamentId() {\r\n return this.tournament!.tournamentId\r\n }\r\n\r\n get StageState() {\r\n return StageState\r\n }\r\n\r\n get isMobileView() {\r\n return this.$vuetify.breakpoint.smAndDown\r\n }\r\n get mobileWidth() {\r\n return this.isMobileView ? 12 : undefined\r\n }\r\n\r\n @Watch('stageTab')\r\n onStageTabChanged() {\r\n this.groupTab = 0\r\n }\r\n\r\n /* Vue Hooks */\r\n async created() {\r\n await this.fetchStages()\r\n await this.subscribeRealtimeEvents()\r\n realtimeEventTarget.addEventListener(\r\n 'connect',\r\n this.subscribeRealtimeEvents\r\n )\r\n realtimeEventTarget.addEventListener(\r\n 'reconnected',\r\n this.subscribeRealtimeEvents\r\n )\r\n this.interval = window.setInterval(() => {\r\n this.$forceUpdate()\r\n }, 15 * 1000)\r\n }\r\n\r\n async beforeDestroy() {\r\n await this.unsubscribeRealtimeEvents()\r\n realtimeEventTarget.removeEventListener(\r\n 'connect',\r\n this.subscribeRealtimeEvents\r\n )\r\n realtimeEventTarget.removeEventListener(\r\n 'reconnected',\r\n this.subscribeRealtimeEvents\r\n )\r\n clearInterval(this.interval!)\r\n }\r\n\r\n /* Methods */\r\n async fetchStages() {\r\n this.isLoading = true\r\n try {\r\n const response = await StageAPI.getTournamentStages(this.tournamentId)\r\n if (response.data.status === ResponseStatus.Ok) {\r\n let data = []\r\n for (const [index, stage] of response.data.payload!.entries()) {\r\n const res = await StageAPI.getStage(stage.stageId)\r\n if (res.data.payload) {\r\n data.push(res.data.payload)\r\n }\r\n }\r\n this.stages = data\r\n this.loadTime = new Date()\r\n }\r\n } catch {\r\n } finally {\r\n this.isFetched = true\r\n this.isLoading = false\r\n }\r\n }\r\n\r\n async subscribeRealtimeEvents() {\r\n try {\r\n this.realtimeConnection = await getRealtimeConnection(\r\n this.realtimeConnectionCancellationToken\r\n )\r\n } catch (err) {\r\n if (err instanceof CancelError) {\r\n return\r\n }\r\n\r\n this.$toast.error(\r\n this.$t('TournamentDetailsBracket.FailConnectServerMessage')\r\n )\r\n console.error(err)\r\n }\r\n this.realtimeConnection.on(\r\n 'stageBracketUpdated',\r\n this.onStageBracketUpdated\r\n )\r\n }\r\n\r\n async unsubscribeRealtimeEvents() {\r\n this.realtimeConnectionCancellationToken.cancel()\r\n if (this.realtimeConnection) {\r\n this.realtimeConnection.off(\r\n 'stageBracketUpdated',\r\n this.onStageBracketUpdated\r\n )\r\n }\r\n }\r\n\r\n async onStageBracketUpdated() {\r\n await this.fetchStages()\r\n this.$toast(this.$t('TournamentDetailsBracket.BracketUpdated'), {\r\n color: 'green',\r\n x: 'center',\r\n y: 'bottom',\r\n icon: 'mdi-clock-check-outline',\r\n dismissable: true\r\n })\r\n }\r\n\r\n getIsDisplayStageBracket(stage: StageEntity) {\r\n if (stage.state === 'Initial' || !stage.isBracketVisible) return false\r\n return true\r\n }\r\n\r\n getStageBracketInvisibleMessage(stage: StageEntity) {\r\n if (stage.state === 'Initial')\r\n return this.$t('TournamentDetailsBracket.TheBracketIsNotReady')\r\n else if (!stage.isBracketVisible)\r\n return this.$t('TournamentDetailsBracket.AdminAdjustBracket')\r\n return ''\r\n }\r\n\r\n /* Getter */\r\n get hasStages() {\r\n return this.tournament && this.stages.length > 0\r\n }\r\n\r\n get hasBracket() {\r\n if (!this.hasStages) return false\r\n\r\n return this.stages.some(stage => stage.brackets && stage.brackets.length)\r\n }\r\n\r\n get groups() {\r\n if (!this.hasStages) return []\r\n\r\n const stage = this.stages[(this.stageTab || 0) as number]\r\n if (!stage) return []\r\n\r\n return stage.brackets.map((bracket, index) => ({\r\n text: bracket.name || '組別 #' + bracket.groupNumber,\r\n value: index\r\n }))\r\n }\r\n}\r\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--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./TournamentDetailsBracket.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--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./TournamentDetailsBracket.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./TournamentDetailsBracket.vue?vue&type=template&id=1450bd42&scoped=true&\"\nimport script from \"./TournamentDetailsBracket.vue?vue&type=script&lang=ts&\"\nexport * from \"./TournamentDetailsBracket.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./TournamentDetailsBracket.vue?vue&type=style&index=0&id=1450bd42&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 \"1450bd42\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSlideXTransition } from 'vuetify/lib/components/transitions';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VCol,VIcon,VProgressCircular,VRow,VSelect,VSlideXTransition,VSpacer,VTab,VTabItem,VTabs,VTabsItems})\n","import TournamentDetailsBracket from './TournamentDetailsBracket.vue'\r\n\r\nexport { TournamentDetailsBracket }\r\nexport default TournamentDetailsBracket\r\n","import mod from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./TournamentDetailsBracket.vue?vue&type=style&index=0&id=1450bd42&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./TournamentDetailsBracket.vue?vue&type=style&index=0&id=1450bd42&lang=scss&scoped=true&\"","import mod from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./TournamentDetailsHeader.vue?vue&type=style&index=0&id=92d32218&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./TournamentDetailsHeader.vue?vue&type=style&index=0&id=92d32218&lang=scss&scoped=true&\"","import { Console } from 'console'\r\nimport { padStart } from 'lodash'\r\nimport moment from 'moment'\r\n\r\nexport function countryFlag(countryCode: string) {\r\n if (!countryCode || !countryCode.length) {\r\n return null\r\n }\r\n\r\n switch (countryCode.toLowerCase()) {\r\n case 'tw':\r\n return require('@/assets/country/tw.svg')\r\n case 'hk':\r\n return require('@/assets/country/hk.svg')\r\n\r\n default:\r\n return null\r\n }\r\n}\r\n\r\nexport function sleep(duration: number) {\r\n return new Promise(resolve => setTimeout(resolve, duration))\r\n}\r\n\r\nexport function unixTimestampToDateTime(unixTimestamp: number): Date {\r\n return moment\r\n .utc(unixTimestamp * 1000)\r\n .local()\r\n .toDate()\r\n}\r\n\r\nexport function upperCase(string: string): string {\r\n return string.toUpperCase()\r\n}\r\n\r\nexport function lowerCase(string: string): string {\r\n return string.toLowerCase()\r\n}\r\n\r\nexport function capitalSpacing(string: string): string {\r\n return string.replace(/([a-z])([A-Z])/g, '$1 $2')\r\n}\r\n\r\nexport function capitalizeFirstLetter(string: string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1)\r\n}\r\n\r\nexport function numberWithCommas(number: number) {\r\n if (!number) return 0\r\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\r\n}\r\n\r\nexport function date(number: number) {\r\n if (isNaN(number)) return ''\r\n const dateTime = new Date(number * 1000)\r\n return [\r\n dateTime\r\n .getFullYear()\r\n .toString()\r\n .padStart(4, '0'),\r\n (dateTime.getMonth() + 1).toString().padStart(2, '0'),\r\n dateTime\r\n .getDate()\r\n .toString()\r\n .padStart(2, '0')\r\n ].join('/')\r\n}\r\n\r\nexport function dateTime(number: number) {\r\n if (isNaN(number)) return ''\r\n const dateTime = new Date(number * 1000)\r\n return (\r\n [\r\n dateTime\r\n .getFullYear()\r\n .toString()\r\n .padStart(4, '0'),\r\n (dateTime.getMonth() + 1).toString().padStart(2, '0'),\r\n dateTime\r\n .getDate()\r\n .toString()\r\n .padStart(2, '0')\r\n ].join('/') +\r\n ' ' +\r\n [\r\n dateTime\r\n .getHours()\r\n .toString()\r\n .padStart(2, '0'),\r\n dateTime\r\n .getMinutes()\r\n .toString()\r\n .padStart(2, '0')\r\n ].join(':')\r\n )\r\n}\r\n","module.exports = __webpack_public_path__ + \"img/hk.901fbb55.svg\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-row',[_c('v-col',{staticClass:\"heading\",class:{ 'text-right': _vm.right, 'text-center': _vm.center },attrs:{\"cols\":\"12\"}},[_vm._v(\" \"+_vm._s(_vm.header)+\" \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Prop } from 'vue-property-decorator'\r\n\r\n@Component\r\nexport default class TournamentDetailsHeader extends Vue {\r\n @Prop({ required: true }) readonly header!: string\r\n @Prop({ type: Boolean, default: false }) readonly right!: boolean\r\n @Prop({ type: Boolean, default: false }) readonly center!: boolean\r\n}\r\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--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./TournamentDetailsHeader.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--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/webpack-preprocessor-loader/index.js??ref--16-0!./TournamentDetailsHeader.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./TournamentDetailsHeader.vue?vue&type=template&id=92d32218&scoped=true&\"\nimport script from \"./TournamentDetailsHeader.vue?vue&type=script&lang=ts&\"\nexport * from \"./TournamentDetailsHeader.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./TournamentDetailsHeader.vue?vue&type=style&index=0&id=92d32218&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 \"92d32218\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VCol,VRow})\n","import TournamentDetailsHeader from './TournamentDetailsHeader.vue'\r\n\r\nexport { TournamentDetailsHeader }\r\nexport default TournamentDetailsHeader\r\n","module.exports = __webpack_public_path__ + \"img/tw.790bc738.svg\";"],"sourceRoot":""}